Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

230 changes: 182 additions & 48 deletions crates/agent/ARCHITECTURE.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions crates/agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,10 @@ http = "1"
# for why that has to be explicit rather than inferred from crate features).
rmcp = { version = "3.2.0", default-features = false, features = ["client", "macros", "transport-child-process", "transport-streamable-http-client-reqwest", "reqwest-tls-no-provider", "auth", "elicitation"] }

# Names the SSE event type in `tools::mcp_wire`'s `StreamableHttpClient` impl (rmcp re-exports its error
# but not the event). Already resolved transitively at this exact version via rmcp.
sse-stream = "0.2.5"

# `serve --listen`'s WebSocket transport (`serve_ws`): the server/`accept_async` side. Only
# `handshake` is needed here (a plain-`ws://` loopback listener — the edge terminates TLS in front of
# us, so no TLS feature). Same crate + exact version `agent-core` already depends on for its Codex
Expand Down
5 changes: 5 additions & 0 deletions crates/agent/src/approval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ pub struct ApprovalRequest {
/// exactly what they are agreeing to for the rest of the session.
pub scope_key: String,
pub origin: ApprovalOrigin,
/// Why this is being asked, when it is not just "this tool is gated": an MCP-served skill asking
/// to be activated, or a code-execution call while one is active (see
/// `tools::mcp_skills::SkillSession`). Sent to clients as the frame's `mcp_skill` object.
pub context: Option<Value>,
}

/// Whether a decision applies to this call only, or is remembered for the session.
Expand Down Expand Up @@ -397,6 +401,7 @@ pub async fn ask_gate(
summary: summarize(input),
scope_key: key,
origin: origin.clone(),
context: None,
};
match runtime.gate.request(request, cancel).await {
Ok(decision) => {
Expand Down
Loading
Loading