67 lines
4.2 KiB
Diff
67 lines
4.2 KiB
Diff
diff --git a/dist/acp-agent.js b/dist/acp-agent.js
|
|
index 0214a509eb5e7b777a69e4e34637941c275d27b1..403be02df66e25eee29e7d5bef14627011e02b30 100644
|
|
--- a/dist/acp-agent.js
|
|
+++ b/dist/acp-agent.js
|
|
@@ -2922,9 +2922,19 @@ export class ClaudeAcpAgent {
|
|
amount: message.total_cost_usd,
|
|
currency: "USD",
|
|
},
|
|
- ...(message.origin && {
|
|
- _meta: { "_claude/origin": message.origin },
|
|
- }),
|
|
+ _meta: {
|
|
+ ...(message.origin && { "_claude/origin": message.origin }),
|
|
+ // ACP's core Usage shape exposes context occupancy and
|
|
+ // cost, but not the billable input/output split. Keep the
|
|
+ // SDK's bounded aggregate in extension metadata so ACPX can
|
|
+ // normalize it without persisting a raw provider message.
|
|
+ usage: {
|
|
+ input_tokens: message.usage.input_tokens,
|
|
+ output_tokens: message.usage.output_tokens,
|
|
+ cache_read_input_tokens: message.usage.cache_read_input_tokens,
|
|
+ cache_creation_input_tokens: message.usage.cache_creation_input_tokens,
|
|
+ },
|
|
+ },
|
|
},
|
|
});
|
|
}
|
|
@@ -5311,6 +5321,10 @@ export class ClaudeAcpAgent {
|
|
settingSources: ["user", "project", "local"],
|
|
...(thinking !== undefined && { thinking }),
|
|
...userProvidedOptions,
|
|
+ // Paperclip Runner owns the complete session context. Its isolated
|
|
+ // user root contains only assigned skills; project/local settings
|
|
+ // would reintroduce host prompts, plugins, skills, and MCP servers.
|
|
+ ...(process.env.PAPERCLIP_ACPX_ISOLATED_CONTEXT === "1" && { settingSources: ["user"] }),
|
|
...(settings && { settings }),
|
|
env,
|
|
// Override certain fields that must be controlled by ACP
|
|
@@ -5318,7 +5332,9 @@ export class ClaudeAcpAgent {
|
|
includePartialMessages: true,
|
|
forwardSubagentText,
|
|
mcpServers: {
|
|
- ...(userProvidedOptions?.mcpServers || {}),
|
|
+ ...(process.env.PAPERCLIP_ACPX_ISOLATED_CONTEXT === "1"
|
|
+ ? {}
|
|
+ : (userProvidedOptions?.mcpServers || {})),
|
|
...mcpServers,
|
|
...(fileChangeAuditSupport
|
|
? { [FILE_CHANGE_AUDIT_SERVER_NAME]: fileChangeAuditSupport.mcpServer }
|
|
@@ -5329,6 +5345,16 @@ export class ClaudeAcpAgent {
|
|
allowDangerouslySkipPermissions: ALLOW_BYPASS,
|
|
permissionMode: initialPermissionMode,
|
|
canUseTool: this.canUseTool(sessionId),
|
|
+ // The runner pins this actual MCP endpoint before provider launch.
|
|
+ // Exempt only task delivery/control tools at the SDK dispatch boundary,
|
|
+ // not arbitrary provider permission metadata or MCP name prefixes.
|
|
+ ...(process.env.PAPERCLIP_ACPX_ISOLATED_CONTEXT === "1" && {
|
|
+ allowedTools: mcpServers.paperclip?.type === "http"
|
|
+ && mcpServers.paperclip.url === process.env.PAPERCLIP_ACPX_TASK_TOOL_BRIDGE_URL
|
|
+ ? ["paperclip_finish", "paperclip_block", "read_current_wake_comments", "request_human_input"]
|
|
+ .map((tool) => `mcp__paperclip__${tool}`)
|
|
+ : [],
|
|
+ }),
|
|
// Forward MCP elicitation requests onto ACP elicitation. Only attached
|
|
// when the client advertised support, so non-supporting clients keep the
|
|
// SDK's default (auto-decline) behavior. (AskUserQuestion is handled in
|