@agentclientprotocol/claude-agent-acp 0.68.0 → 0.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import { ContentBlockParam } from "@anthropic-ai/sdk/resources";
5
5
  import { BetaContentBlock, BetaRawContentBlockDelta } from "@anthropic-ai/sdk/resources/beta.mjs";
6
6
  import { SettingsManager } from "./settings.js";
7
7
  import { type SessionFailureState } from "./session-failure-extension.js";
8
+ import { type FileChangeAuditSupport, type FileChangeAuditTurnState } from "./file-change-audit.js";
8
9
  import { TaskState } from "./tools.js";
9
10
  import { Pushable } from "./utils.js";
10
11
  export declare const CLAUDE_CONFIG_DIR: string;
@@ -74,6 +75,10 @@ type Turn = {
74
75
  * so the consumer can't promote them via the replay; it falls back to
75
76
  * promoting the queue head when the result arrives. */
76
77
  isLocalOnlyCommand: boolean;
78
+ /** Optional hidden, model-authored file-change audit requested by the ACP
79
+ * client for this turn. The state is turn-owned so a late tool call can
80
+ * never be rebound to a newer prompt. */
81
+ fileChangeAudit?: FileChangeAuditTurnState;
77
82
  /** Set once the deferred has been resolved/rejected, so the consumer never
78
83
  * settles a turn twice (idle + handoff + stream-end can all race). */
79
84
  settled: boolean;
@@ -181,6 +186,14 @@ type Session = {
181
186
  /** The turn whose messages the consumer is currently attributing output to
182
187
  * (the head of `turnQueue` once its user message has been echoed). */
183
188
  activeTurn?: Turn | null;
189
+ /** Request ids already accepted for hidden agent file-change reports. Kept
190
+ * for the session lifetime so a redelivered prompt cannot publish the same
191
+ * audit twice or bind a late report to another turn. */
192
+ fileChangeReportRequestIds: Set<string>;
193
+ /** Session-owned publisher for negotiated file-change audits. Turn state
194
+ * stays on each Turn; this controller supplies the single idempotent
195
+ * unavailable terminal used by every non-report settlement path. */
196
+ fileChangeAuditSupport?: FileChangeAuditSupport;
184
197
  /** Optimistic goal state published for a submitted `/goal` command whose
185
198
  * matching runtime update has not arrived yet. Runtime updates for the old
186
199
  * goal are suppressed until this command is echoed or completes, otherwise
@@ -730,6 +743,11 @@ export declare class ClaudeAcpAgent {
730
743
  * `session/prompt`. Without the opt-in, the existing detached `prompt()` and
731
744
  * `startedNewTurn` result are preserved for compatibility. */
732
745
  steer(params: SteerRequest): Promise<SteerResponse>;
746
+ /** Publish the audit terminal for every turn path that did not reach the
747
+ * report tool. The support flips the turn state synchronously before its
748
+ * transport await, so callers can stay fail-open and settle the ACP prompt
749
+ * immediately without allowing a racing lifecycle path to publish twice. */
750
+ private finishFileChangeAudit;
733
751
  /** Lazily start the per-session consumer that drains the SDK query stream for
734
752
  * the session's whole life. Idempotent: only the first `prompt()` starts it. */
735
753
  private ensureConsumer;
@@ -1 +1 @@
1
- {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EAGnB,kBAAkB,EAClB,kBAAkB,EAClB,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EAGb,iBAAiB,EACjB,kBAAkB,EAElB,aAAa,EACb,cAAc,EAEd,mBAAmB,EACnB,oBAAoB,EAEpB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,UAAU,EAGV,sBAAsB,EACtB,aAAa,EAKb,SAAS,EAIT,OAAO,EACP,cAAc,EAGd,KAAK,EAKL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EAGf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAKL,WAAW,EACX,mBAAmB,EACnB,YAAY,EAIb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAsBlG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAUL,KAAK,mBAAmB,EAGzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAK9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAYL,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAwC,QAAQ,EAAe,MAAM,YAAY,CAAC;AAEzF,eAAO,MAAM,iBAAiB,QACuC,CAAC;AAmBtE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC;AAED,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAoDF;mDACmD;AACnD,KAAK,SAAS,GAAG;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACjC,CAAC;CACH,CAAC;AAEF;;;4CAG4C;AAC5C,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;4EAE4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,GACvB;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7B;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAgC3D;;;yDAGyD;AACzD,KAAK,iBAAiB,GAAG;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;iFAIiF;AACjF,KAAK,IAAI,GAAG;IACV;qEACiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB;;4DAEwD;IACxD,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;8CAE0C;IAC1C,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C;2EACuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB;;;+EAG2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;mDAO+C;IAC/C,eAAe,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC1D;;;;;;;;iCAQ6B;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;6EAQyE;IACzE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmCgC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;;;;;;;;;gEAe4D;IAC5D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;8EAC0E;IAC1E,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB;4EACwE;IACxE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACnB;2EACuE;IACvE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB;;6DAEyD;IACzD,0BAA0B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC;;yEAEqE;IACrE,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;;+EAI2E;IAC3E,iBAAiB,CAAC,EAAE;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC;;;;;;;;;;;;;+EAa2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;gDAuB4C;IAC5C,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC/D;;uEAEmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;0EAGsE;IACtE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;iCAE6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB;;;;4CAIwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ;+EAC2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC;;;qDAGiD;IACjD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB;gEAC4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB;;wEAEoE;IACpE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;gFAK4E;IAC5E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;uEAKmE;IACnE,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC;;kBAEc;IACd,gBAAgB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACjD,kBAAkB,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACjD;+EAC2E;IAC3E,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;2CASuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;8CAK0C;IAC1C,0BAA0B,EAAE,OAAO,CAAC;IACpC;;;;;;;;+EAQ2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB;yEACqE;IACrE,SAAS,EAAE,SAAS,CAAC;IACrB;;;;mCAI+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;4CAIwC;IACxC,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;wEAMoE;IACpE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAsC6B;IAC7B,mBAAmB,EAAE,GAAG,CACtB,MAAM,EACN;QACE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB;;;;;;;;;;;;iDAYyC;QACzC,aAAa,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;KACzC,CACF,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;;;sEAwBkE;IAClE,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;uCAKmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;IAC1D;;;;;;;;;;;;;;;iCAe6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;uBAgBmB;IACnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;2EAEuE;IACvE,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAoEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QACX;;;;;;;;;;;;;;WAcG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;KACnD,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB;;;;;OAKG;IACH,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAoB5E;;;;;GAKG;AACH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,+CAA+C;IAC/C,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,CAAC;QAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,YAAY,CAAC,EAAE,OAAO,CAAC;QAIvB,eAAe,CAAC,EAAE,MAAM,CAAC;QAMzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;QAKtB,QAAQ,CAAC,EAAE,IAAI,CAAC;QAGhB,KAAK,CAAC,EAAE,MAAM,CAAC;QAGf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAwBF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,cAAc,CAAC;QACtD,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;wEACoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B;0EACsE;IACtE,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AA0DjF,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAsCrD;AAsED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CA0B1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAepE;AAeD,wBAAgB,qBAAqB,CACnC,WAAW,CAAC,EAAE,OAAO,EACrB,MAAM,GAAE,MAAgB,GACvB,cAAc,CA8BhB;AAwHD;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;kFAE8E;IAC9E,iBAAiB,CACf,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5E;iFAC6E;IAC7E,0BAA0B,CACxB,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,yEAAyE;IACzE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAkDD,qBAAa,cAAc;IACzB,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,yEAAyE;IACzE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;+BAE2B;IAC3B,kBAAkB,EAAE,MAAM,CAAiC;gBAE/C,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IAMxC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyKnE,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAYlE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB9E,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU3E,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAarE,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkB9E;;;;gEAI4D;YAC9C,uBAAuB;IA6B/B,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW3F;;;;;OAKG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiDpF;;;OAGG;IACG,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQhG,qBAAqB,IAAI,cAAc,GAAG,IAAI;IAI9C,OAAO,CAAC,qBAAqB;IA0BvB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA+DtD,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAc/C,WAAW;YAcX,eAAe;YAUf,qBAAqB;YAoBrB,kBAAkB;IAgBhC;;;;;;;;;;;;;;;;;;;;;;;;mEAwB+D;IACzD,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA+DzD;;;iFAG6E;IAC7E,OAAO,CAAC,qBAAqB;IAS7B;qFACiF;IACjF,OAAO,CAAC,cAAc;IActB;;;;qEAIiE;YACnD,WAAW;IA84EzB;;;;;;;;;;;;;;yDAcqD;IACrD,OAAO,CAAC,kBAAkB;IAapB,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+NvD;;;;;;;;;;;;;;;;;;gBAkBY;IACZ,OAAO,CAAC,gBAAgB;IAWxB;yDACqD;YACvC,eAAe;IAwB7B,4EAA4E;IACtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU3E,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9E,sBAAsB,CAC1B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC;YAoG5B,gBAAgB;YAoChB,oBAAoB;IA4K5B,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKjF;;;;;;6CAMyC;YAC3B,2BAA2B;IA6BzC;;;;;;;;;;;iEAW6D;YAC/C,qBAAqB;IAkCnC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;IAuPzC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;;OAIG;YACW,qBAAqB;IAmCnC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;YAmCV,2BAA2B;YAa3B,kBAAkB;YAmBlB,sBAAsB;IAyJpC;;;;;oEAKgE;YAClD,6BAA6B;IA+B3C;;;oBAGgB;IAChB,OAAO,CAAC,qBAAqB;IAW7B;;;iEAG6D;YAC/C,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;;;yEAsBqE;YACvD,iBAAiB;YAkDjB,kBAAkB;IA2ChC;;;;;OAKG;YACW,WAAW;YAuBX,aAAa;CAwjB5B;AA0OD,eAAO,MAAM,mBAAmB,aAM9B,CAAC;AAOH,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C;;;gBAGgB;AAChB,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAOzE;AAED;;;8CAG8C;AAC9C,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAE1C;+DAC+D;AAC/D,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,QAAQ,CAAC;AAGnC;;;gCAGgC;AAChC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAElE;AAqBD;;;;2DAI2D;AAC3D,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,GAAG,SAAS,GACzC,sBAAsB,GAAG,SAAS,CAEpC;AAED;;;sEAGsE;AACtE,wBAAgB,kCAAkC,CAChD,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC7C,OAAO,CAET;AAED;;;;;;;;;+CAS+C;AAC/C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,cAAc,CAAC,EAAE,sBAAsB,GACtC,mBAAmB,CAwBrB;AAED;;0CAE0C;AAC1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAYrF;AAED;6EAC6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,EAAE,OAAO,CAAC;IAC1B;kDAC8C;IAC9C,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,SAAS,EAAE,EACvB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,MAAM,GAAE,SAAS,EAAO,EACxB,YAAY,GAAE,MAAyB,EACvC,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,mBAAmB,EAAE,CA+GvB;AAoFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+DhG;AAED;;;;;;;;;;;;;;;;;;;gFAmBgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAiCnF;AAkBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9C,SAAS,EAAE,CAsDb;AA2LD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAmFpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,GAAG,SAAS,CAYrB;AAwND;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,GAAG,wBAAwB,EAAE,EACvF,IAAI,EAAE,WAAW,GAAG,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IAOtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAM/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,aAAa,CAAC,EAAE,OAAO,CAAC;IAIxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,mBAAmB,EAAE,CA6ZvB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,GACA,mBAAmB,EAAE,CAgIvB;AAED;;;;;;;;;;;oEAWoE;AACpE,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,wBAAgB,MAAM;;;EAgDrB"}
package/dist/acp-agent.js CHANGED
@@ -12,6 +12,7 @@ import packageJson from "../package.json" with { type: "json" };
12
12
  import { applyAskElicitationResponse, askUserQuestionsToCreateRequest, createElicitationResponseToElicitResult, extractAskUserQuestions, extractRefusalFallbackPrompt, mcpElicitationToCreateRequest, REFUSAL_FALLBACK_DIALOG_KIND, refusalFallbackResultFromResponse, refusalFallbackToCreateRequest, } from "./elicitation.js";
13
13
  import { SettingsManager } from "./settings.js";
14
14
  import { activeUsageLimitMessage, airSessionFailureCapabilityMeta, assistantMessageText, createSessionFailureState, isSyntheticUsageLimitMessage, providerFailureCategory, SessionFailureController, sessionFailureMeta, supportsAirSessionFailures, } from "./session-failure-extension.js";
15
+ import { AGENT_FILE_CHANGE_REPORT_CAPABILITY, agentFileChangeReportMeta, agentFileChangeReportRequestId, containsFileChangeAuditMarker, createFileChangeAuditSupport, createFileChangeAuditTurnState, FILE_CHANGE_AUDIT_SERVER_NAME, isFileChangeAuditReportPhase, isFileChangeAuditTool, supportsAgentFileChangeReport, } from "./file-change-audit.js";
15
16
  import { applyTaskCreate, applyTaskList, applyTaskUpdate, createPostToolUseHook, createTaskHook, parseTaskCreateOutput, parseTaskListOutput, parseTaskUpdateOutput, planEntries, registerHookCallback, taskStateToPlanEntries, toolInfoFromToolUse, toolUpdateFromDiffToolResponse, toolUpdateFromToolResult, } from "./tools.js";
16
17
  import { nodeToWebReadable, nodeToWebWritable, Pushable, unreachable } from "./utils.js";
17
18
  export const CLAUDE_CONFIG_DIR = process.env.CLAUDE_CONFIG_DIR ?? path.join(os.homedir(), ".claude");
@@ -729,7 +730,7 @@ export class ClaudeAcpAgent {
729
730
  // steering extension contract: advertises the `_session/steering` request
730
731
  // so clients know they may inject a follow-up into a running turn.
731
732
  _meta: {
732
- ...airSessionFailureCapabilityMeta(),
733
+ ...airSessionFailureCapabilityMeta(AGENT_FILE_CHANGE_REPORT_CAPABILITY),
733
734
  steering: {
734
735
  supported: true,
735
736
  },
@@ -977,6 +978,15 @@ export class ClaudeAcpAgent {
977
978
  // user message, so the consumer can't promote the turn from the echo.
978
979
  const firstText = params.prompt[0]?.type === "text" ? params.prompt[0].text : "";
979
980
  const isLocalOnlyCommand = firstText.startsWith("/") && LOCAL_ONLY_COMMANDS.has(firstText.split(" ", 1)[0]);
981
+ const fileChangeReportRequestId = supportsAgentFileChangeReport(this.clientCapabilities)
982
+ ? agentFileChangeReportRequestId(params._meta)
983
+ : undefined;
984
+ let fileChangeAudit;
985
+ if (fileChangeReportRequestId &&
986
+ !session.fileChangeReportRequestIds.has(fileChangeReportRequestId)) {
987
+ session.fileChangeReportRequestIds.add(fileChangeReportRequestId);
988
+ fileChangeAudit = createFileChangeAuditTurnState(fileChangeReportRequestId);
989
+ }
980
990
  // Each prompt is a Turn whose deferred the persistent consumer settles once
981
991
  // the turn's outcome is known. `prompt()` owns no loop: it enqueues the
982
992
  // turn, pushes the user message onto the streaming input, makes sure the
@@ -984,6 +994,7 @@ export class ClaudeAcpAgent {
984
994
  const turn = {
985
995
  promptUuid,
986
996
  isLocalOnlyCommand,
997
+ ...(fileChangeAudit ? { fileChangeAudit } : {}),
987
998
  settled: false,
988
999
  resolve: () => { },
989
1000
  reject: () => { },
@@ -1147,6 +1158,15 @@ export class ClaudeAcpAgent {
1147
1158
  await this.publishGoalFromPrompt(sessionId, firstText, steeredUuid);
1148
1159
  return { outcome: "injected" };
1149
1160
  }
1161
+ /** Publish the audit terminal for every turn path that did not reach the
1162
+ * report tool. The support flips the turn state synchronously before its
1163
+ * transport await, so callers can stay fail-open and settle the ACP prompt
1164
+ * immediately without allowing a racing lifecycle path to publish twice. */
1165
+ finishFileChangeAudit(session, turn, reason) {
1166
+ if (!turn.fileChangeAudit || !session.fileChangeAuditSupport)
1167
+ return;
1168
+ void session.fileChangeAuditSupport.finishUnavailable(turn.fileChangeAudit, reason);
1169
+ }
1150
1170
  /** Lazily start the per-session consumer that drains the SDK query stream for
1151
1171
  * the session's whole life. Idempotent: only the first `prompt()` starts it. */
1152
1172
  ensureConsumer(session, sessionId) {
@@ -1228,6 +1248,14 @@ export class ClaudeAcpAgent {
1228
1248
  * as the turn's answer. */
1229
1249
  const sendUpdate = async (notification) => {
1230
1250
  const { update } = notification;
1251
+ if (isFileChangeAuditReportPhase(session.activeTurn?.fileChangeAudit) &&
1252
+ (update.sessionUpdate === "agent_message_chunk" ||
1253
+ update.sessionUpdate === "agent_thought_chunk" ||
1254
+ update.sessionUpdate === "user_message_chunk" ||
1255
+ update.sessionUpdate === "tool_call" ||
1256
+ update.sessionUpdate === "tool_call_update")) {
1257
+ return;
1258
+ }
1231
1259
  if (update.sessionUpdate === "agent_message_chunk") {
1232
1260
  const claudeMeta = update._meta?.claudeCode;
1233
1261
  if (!claudeMeta?.parentToolUseId) {
@@ -1523,11 +1551,14 @@ export class ClaudeAcpAgent {
1523
1551
  };
1524
1552
  /** Settle the active turn's deferred exactly once, disarm the force-cancel
1525
1553
  * backstop (the turn is over), and drop it from the queue. */
1526
- const settleActive = (result) => {
1554
+ const settleActive = (result, auditReason = result.stopReason === "cancelled"
1555
+ ? "cancelled"
1556
+ : "notReported") => {
1527
1557
  const turn = session.activeTurn;
1528
1558
  if (!turn || turn.settled) {
1529
1559
  return;
1530
1560
  }
1561
+ this.finishFileChangeAudit(session, turn, auditReason);
1531
1562
  // Captured before the settled flip below (isHeldOpen tests !settled).
1532
1563
  const wasHeld = isHeldOpen(turn);
1533
1564
  turn.settled = true;
@@ -1561,6 +1592,7 @@ export class ClaudeAcpAgent {
1561
1592
  this.logger.error(`Session ${params.sessionId}: cannot fail active turn because no unsettled active turn exists: ${error}`);
1562
1593
  return;
1563
1594
  }
1595
+ this.finishFileChangeAudit(session, turn, "providerError");
1564
1596
  turn.settled = true;
1565
1597
  session.turnQueue = (session.turnQueue ?? []).filter((t) => t !== turn);
1566
1598
  session.activeTurn = null;
@@ -1595,7 +1627,7 @@ export class ClaudeAcpAgent {
1595
1627
  stopReason: "end_turn",
1596
1628
  usage: sessionUsage(session),
1597
1629
  _meta: sessionFailureMeta(failure),
1598
- });
1630
+ }, "providerError");
1599
1631
  };
1600
1632
  /** Reject every in-flight turn — used when the stream dies. */
1601
1633
  const failAllTurns = (error) => {
@@ -1607,6 +1639,7 @@ export class ClaudeAcpAgent {
1607
1639
  session.turnQueue = [];
1608
1640
  for (const turn of turns) {
1609
1641
  if (!turn.settled) {
1642
+ this.finishFileChangeAudit(session, turn, "providerError");
1610
1643
  const wasHeld = isHeldOpen(turn);
1611
1644
  turn.settled = true;
1612
1645
  if (wasHeld) {
@@ -1755,6 +1788,7 @@ export class ClaudeAcpAgent {
1755
1788
  // still here was enqueued afterward and was not part of the cancel.)
1756
1789
  for (const queued of [...(session.turnQueue ?? [])]) {
1757
1790
  if (!queued.settled) {
1791
+ this.finishFileChangeAudit(session, queued, "providerError");
1758
1792
  queued.settled = true;
1759
1793
  queued.reject(RequestError.internalError(undefined, SESSION_ENDED_MESSAGE));
1760
1794
  }
@@ -3417,6 +3451,7 @@ export class ClaudeAcpAgent {
3417
3451
  if (session.turnQueue) {
3418
3452
  for (const turn of session.turnQueue) {
3419
3453
  if (turn !== session.activeTurn && !turn.settled) {
3454
+ this.finishFileChangeAudit(session, turn, "cancelled");
3420
3455
  turn.settled = true;
3421
3456
  // Deliberately no `usage`: a queued turn never ran, so the session
3422
3457
  // accumulator (the active turn's tally) is not its spend.
@@ -3478,6 +3513,7 @@ export class ClaudeAcpAgent {
3478
3513
  {
3479
3514
  const active = session.activeTurn;
3480
3515
  if (isHeldOpen(active)) {
3516
+ this.finishFileChangeAudit(session, active, "cancelled");
3481
3517
  active.settled = true;
3482
3518
  // Mirror settleActive's invariants (it is consumer-scoped and
3483
3519
  // unreachable from here): disarm the backstop — none should be
@@ -3815,6 +3851,13 @@ export class ClaudeAcpAgent {
3815
3851
  })
3816
3852
  : undefined;
3817
3853
  let replayTurnId;
3854
+ // Stop-hook additionalContext is persisted as an internal user message.
3855
+ // Once that marker (or the internal tool itself) appears, suppress the
3856
+ // whole audit exchange until its tool result. This also hides a disobedient
3857
+ // model's separate prose message, while an ordinary next user prompt safely
3858
+ // ends an incomplete audit lane.
3859
+ let replayingFileChangeAudit = false;
3860
+ const replayFileChangeAuditToolUseIds = new Set();
3818
3861
  for (const message of messages) {
3819
3862
  if (message.type === "user" &&
3820
3863
  message.parent_tool_use_id === null &&
@@ -3864,6 +3907,57 @@ export class ClaudeAcpAgent {
3864
3907
  if (content === null)
3865
3908
  continue;
3866
3909
  }
3910
+ const auditBlocks = Array.isArray(content)
3911
+ ? content.filter((block) => typeof block === "object" && block !== null)
3912
+ : [];
3913
+ const hasFileChangeAuditMarker = (typeof content === "string" && containsFileChangeAuditMarker(content)) ||
3914
+ auditBlocks.some((block) => typeof block.text === "string" && containsFileChangeAuditMarker(block.text));
3915
+ const fileChangeAuditToolUseIds = auditBlocks.flatMap((block) => (block.type === "tool_use" ||
3916
+ block.type === "server_tool_use" ||
3917
+ block.type === "mcp_tool_use") &&
3918
+ typeof block.name === "string" &&
3919
+ isFileChangeAuditTool(block.name) &&
3920
+ typeof block.id === "string"
3921
+ ? [block.id]
3922
+ : []);
3923
+ const replayMessageRole = message.message
3924
+ ?.role;
3925
+ if (hasFileChangeAuditMarker || fileChangeAuditToolUseIds.length > 0) {
3926
+ replayingFileChangeAudit = true;
3927
+ for (const toolUseId of fileChangeAuditToolUseIds) {
3928
+ replayFileChangeAuditToolUseIds.add(toolUseId);
3929
+ }
3930
+ continue;
3931
+ }
3932
+ if (replayingFileChangeAudit) {
3933
+ const toolResultIds = auditBlocks.flatMap((block) => (block.type === "tool_result" || block.type === "mcp_tool_result") &&
3934
+ typeof block.tool_use_id === "string"
3935
+ ? [block.tool_use_id]
3936
+ : []);
3937
+ let completedReport = false;
3938
+ for (const toolUseId of toolResultIds) {
3939
+ if (replayFileChangeAuditToolUseIds.delete(toolUseId))
3940
+ completedReport = true;
3941
+ }
3942
+ if (completedReport && replayFileChangeAuditToolUseIds.size === 0) {
3943
+ replayingFileChangeAudit = false;
3944
+ continue;
3945
+ }
3946
+ // A denied attempt to call another tool is still part of the hidden
3947
+ // lane. Its result must not end replay suppression before the report.
3948
+ if (toolResultIds.length > 0) {
3949
+ continue;
3950
+ }
3951
+ // The next real user prompt is already represented by the client and
3952
+ // starts a new turn; do not let a missing audit result hide it or the
3953
+ // rest of the replay.
3954
+ if (replayMessageRole === "user") {
3955
+ replayingFileChangeAudit = false;
3956
+ }
3957
+ else {
3958
+ continue;
3959
+ }
3960
+ }
3867
3961
  for (const notification of toAcpNotifications(
3868
3962
  // @ts-expect-error - untyped in SDK but we handle all of these
3869
3963
  content,
@@ -3957,6 +4051,26 @@ export class ClaudeAcpAgent {
3957
4051
  message: "Session not found",
3958
4052
  };
3959
4053
  }
4054
+ const fileChangeAudit = session.activeTurn?.fileChangeAudit;
4055
+ if (isFileChangeAuditReportPhase(fileChangeAudit)) {
4056
+ // The hidden continuation is an audit-only lane: it may submit the
4057
+ // wrapper-owned report, but it must not run another command after the
4058
+ // user-visible answer has already completed.
4059
+ if (isFileChangeAuditTool(toolName) && fileChangeAudit?.phase === "collecting") {
4060
+ return { behavior: "allow", updatedInput: toolInput };
4061
+ }
4062
+ return {
4063
+ behavior: "deny",
4064
+ message: "Only the internal file-change report is allowed during the audit.",
4065
+ };
4066
+ }
4067
+ // The tool is intentionally unusable outside a negotiated audit turn.
4068
+ if (isFileChangeAuditTool(toolName)) {
4069
+ return {
4070
+ behavior: "deny",
4071
+ message: "No file-change report was requested for this turn.",
4072
+ };
4073
+ }
3960
4074
  // When the tool call originates inside a subagent, attribute the eagerly
3961
4075
  // emitted tool_call (and the permission request itself) to the Agent/Task
3962
4076
  // tool call that spawned the subagent, mirroring the streamed subagent
@@ -4654,6 +4768,30 @@ export class ClaudeAcpAgent {
4654
4768
  // below) so the TaskCreated/TaskCompleted hook callbacks can close over
4655
4769
  // the same Map that the streaming message handler will read from.
4656
4770
  const taskState = new Map();
4771
+ // Resolve every workspace root once. The hidden report tool uses this same
4772
+ // set for lexical path validation, and the SDK receives it below.
4773
+ const acpAdditionalDirectories = params.additionalDirectories ?? sessionMeta?.additionalRoots ?? [];
4774
+ const additionalDirectories = [
4775
+ ...(userProvidedOptions?.additionalDirectories ?? []),
4776
+ ...acpAdditionalDirectories,
4777
+ ];
4778
+ const fileChangeAuditSupport = supportsAgentFileChangeReport(this.clientCapabilities)
4779
+ ? createFileChangeAuditSupport({
4780
+ cwd: params.cwd,
4781
+ additionalDirectories,
4782
+ getActiveState: () => this.sessions[sessionId]?.activeTurn?.fileChangeAudit,
4783
+ publish: async (result) => {
4784
+ await this.client.sessionUpdate({
4785
+ sessionId,
4786
+ update: {
4787
+ sessionUpdate: "session_info_update",
4788
+ _meta: agentFileChangeReportMeta(result),
4789
+ },
4790
+ });
4791
+ },
4792
+ logError: (message) => this.logger.error(message),
4793
+ })
4794
+ : undefined;
4657
4795
  // The exact env the query will be created with. Built (and the provider
4658
4796
  // cache key derived from it, below) in one place so the key always
4659
4797
  // describes the backend this query actually talks to: `providers/set`,
@@ -4697,7 +4835,13 @@ export class ClaudeAcpAgent {
4697
4835
  cwd: params.cwd,
4698
4836
  includePartialMessages: true,
4699
4837
  forwardSubagentText,
4700
- mcpServers: { ...(userProvidedOptions?.mcpServers || {}), ...mcpServers },
4838
+ mcpServers: {
4839
+ ...(userProvidedOptions?.mcpServers || {}),
4840
+ ...mcpServers,
4841
+ ...(fileChangeAuditSupport
4842
+ ? { [FILE_CHANGE_AUDIT_SERVER_NAME]: fileChangeAuditSupport.mcpServer }
4843
+ : {}),
4844
+ },
4701
4845
  // If we want bypassPermissions to be an option, we have to allow it here.
4702
4846
  // But it doesn't work in root mode, so we only activate it if it will work.
4703
4847
  allowDangerouslySkipPermissions: ALLOW_BYPASS,
@@ -4731,6 +4875,14 @@ export class ClaudeAcpAgent {
4731
4875
  tools,
4732
4876
  hooks: {
4733
4877
  ...userProvidedOptions?.hooks,
4878
+ ...(fileChangeAuditSupport
4879
+ ? {
4880
+ PreToolUse: [
4881
+ ...(userProvidedOptions?.hooks?.PreToolUse || []),
4882
+ { hooks: [fileChangeAuditSupport.preToolUseHook] },
4883
+ ],
4884
+ }
4885
+ : {}),
4734
4886
  PostToolUse: [
4735
4887
  ...(userProvidedOptions?.hooks?.PostToolUse || []),
4736
4888
  {
@@ -4750,6 +4902,14 @@ export class ClaudeAcpAgent {
4750
4902
  ],
4751
4903
  },
4752
4904
  ],
4905
+ ...(fileChangeAuditSupport
4906
+ ? {
4907
+ Stop: [
4908
+ ...(userProvidedOptions?.hooks?.Stop || []),
4909
+ { hooks: [fileChangeAuditSupport.stopHook] },
4910
+ ],
4911
+ }
4912
+ : {}),
4753
4913
  TaskCreated: [
4754
4914
  ...(userProvidedOptions?.hooks?.TaskCreated || []),
4755
4915
  {
@@ -4780,11 +4940,7 @@ export class ClaudeAcpAgent {
4780
4940
  // legacy `_meta.additionalRoots` extension for clients that haven't been
4781
4941
  // updated yet. Either source is merged with directories supplied via
4782
4942
  // `_meta.claudeCode.options.additionalDirectories` (SDK pass-through).
4783
- const acpAdditionalDirectories = params.additionalDirectories ?? sessionMeta?.additionalRoots ?? [];
4784
- options.additionalDirectories = [
4785
- ...(userProvidedOptions?.additionalDirectories ?? []),
4786
- ...acpAdditionalDirectories,
4787
- ];
4943
+ options.additionalDirectories = additionalDirectories;
4788
4944
  if (creationOpts?.resume === undefined || creationOpts?.forkSession) {
4789
4945
  // Set our own session id if not resuming an existing session.
4790
4946
  options.sessionId = sessionId;
@@ -4997,6 +5153,8 @@ export class ClaudeAcpAgent {
4997
5153
  owedTrailingIdles: 0,
4998
5154
  messageIdToUuid: new Map(),
4999
5155
  sessionFailureState: createSessionFailureState(),
5156
+ fileChangeReportRequestIds: new Set(),
5157
+ fileChangeAuditSupport,
5000
5158
  };
5001
5159
  return {
5002
5160
  sessionId,
@@ -5983,7 +6141,7 @@ function isTaskTool(toolName) {
5983
6141
  * permission-surfaced tool_call for them (see `ensureToolCallEmitted`) must be
5984
6142
  * resolved explicitly at tool_result time. */
5985
6143
  function shouldEmitToolCall(toolName) {
5986
- return toolName !== "TodoWrite" && !isTaskTool(toolName);
6144
+ return toolName !== "TodoWrite" && !isTaskTool(toolName) && !isFileChangeAuditTool(toolName);
5987
6145
  }
5988
6146
  /** Build the Claude Code-specific metadata for a tool call. Bash descriptions
5989
6147
  * are kept out of ACP's standard `title`, which clients may use as the shell
@@ -6136,7 +6294,7 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6136
6294
  const registerHooks = options?.registerHooks !== false;
6137
6295
  const supportsTerminalOutput = options?.clientCapabilities?._meta?.["terminal_output"] === true;
6138
6296
  if (typeof content === "string") {
6139
- if (content.length === 0) {
6297
+ if (content.length === 0 || containsFileChangeAuditMarker(content)) {
6140
6298
  return [];
6141
6299
  }
6142
6300
  const update = {
@@ -6170,6 +6328,13 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6170
6328
  // Unlike `tool_use_result`, entries carry their own tool_use_id, so batched
6171
6329
  // messages need no single-block guard.
6172
6330
  const toolResultMeta = parseToolResultMeta(options?.toolResultMeta);
6331
+ // A report-phase assistant message may contain a short text preface and the
6332
+ // internal tool call in the same content array. Hide the whole message, not
6333
+ // only the tool block, so it stays absent on session replay as well as live.
6334
+ const containsFileChangeAuditToolUse = content.some((chunk) => (chunk.type === "tool_use" ||
6335
+ chunk.type === "server_tool_use" ||
6336
+ chunk.type === "mcp_tool_use") &&
6337
+ isFileChangeAuditTool(chunk.name));
6173
6338
  const output = [];
6174
6339
  // Only handle the first chunk for streaming; extend as needed for batching
6175
6340
  for (const chunk of content) {
@@ -6177,7 +6342,9 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6177
6342
  switch (chunk.type) {
6178
6343
  case "text":
6179
6344
  case "text_delta": {
6180
- if (chunk.text) {
6345
+ if (chunk.text &&
6346
+ !containsFileChangeAuditToolUse &&
6347
+ !containsFileChangeAuditMarker(chunk.text)) {
6181
6348
  update = {
6182
6349
  sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
6183
6350
  content: {
@@ -6189,21 +6356,22 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6189
6356
  break;
6190
6357
  }
6191
6358
  case "image":
6192
- update = {
6193
- sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
6194
- content: {
6195
- type: "image",
6196
- data: chunk.source.type === "base64" ? chunk.source.data : "",
6197
- mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
6198
- uri: chunk.source.type === "url" ? chunk.source.url : undefined,
6199
- },
6200
- };
6359
+ if (!containsFileChangeAuditToolUse)
6360
+ update = {
6361
+ sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
6362
+ content: {
6363
+ type: "image",
6364
+ data: chunk.source.type === "base64" ? chunk.source.data : "",
6365
+ mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
6366
+ uri: chunk.source.type === "url" ? chunk.source.url : undefined,
6367
+ },
6368
+ };
6201
6369
  break;
6202
6370
  case "thinking":
6203
6371
  case "thinking_delta": {
6204
6372
  // Recent models default `thinking.display` to "omitted", which streams
6205
6373
  // signature-only thinking blocks whose text is empty.
6206
- if (chunk.thinking) {
6374
+ if (chunk.thinking && !containsFileChangeAuditToolUse) {
6207
6375
  update = {
6208
6376
  sessionUpdate: "agent_thought_chunk",
6209
6377
  content: {
@@ -6219,7 +6387,11 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6219
6387
  case "mcp_tool_use": {
6220
6388
  const alreadyCached = chunk.id in toolUseCache;
6221
6389
  toolUseCache[chunk.id] = chunk;
6222
- if (chunk.name === "TodoWrite") {
6390
+ if (isFileChangeAuditTool(chunk.name)) {
6391
+ // Wrapper-owned audit protocol: never surface or register generic
6392
+ // PostToolUse callbacks for the internal tool.
6393
+ }
6394
+ else if (chunk.name === "TodoWrite") {
6223
6395
  // @ts-expect-error - sometimes input is empty object or undefined
6224
6396
  if (Array.isArray(chunk.input?.todos)) {
6225
6397
  update = {
@@ -6343,6 +6515,10 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
6343
6515
  logger.error(`[claude-agent-acp] Got a tool result for tool use that wasn't tracked: ${chunk.tool_use_id}`);
6344
6516
  break;
6345
6517
  }
6518
+ if (isFileChangeAuditTool(toolUse.name)) {
6519
+ delete toolUseCache[chunk.tool_use_id];
6520
+ break;
6521
+ }
6346
6522
  // A permission request may have surfaced a plan-rendered (TodoWrite) or
6347
6523
  // suppressed (Task*) tool as a real tool_call so the request referenced
6348
6524
  // a tool call the client knows about (see `ensureToolCallEmitted`,
@@ -0,0 +1,56 @@
1
+ import { type HookCallback, type McpSdkServerConfigWithInstance } from "@anthropic-ai/claude-agent-sdk";
2
+ export declare const AGENT_FILE_CHANGE_REPORT_CAPABILITY = "agentFileChangeReport";
3
+ export declare const FILE_CHANGE_AUDIT_SERVER_NAME = "claude_agent_acp";
4
+ export declare const FILE_CHANGE_AUDIT_TOOL_NAME = "report_changed_files";
5
+ export declare const FILE_CHANGE_AUDIT_WIRE_TOOL_NAME = "mcp__claude_agent_acp__report_changed_files";
6
+ export declare const AGENT_FILE_CHANGE_REPORT_MAX_BYTES: number;
7
+ export type FileChangeAuditTurnState = {
8
+ requestId: string;
9
+ phase: "requested" | "collecting" | "finished";
10
+ };
11
+ export type FileChangeAuditWorkspace = {
12
+ cwd: string;
13
+ additionalDirectories: string[];
14
+ };
15
+ export type AgentFileChangeReport = {
16
+ paths: string[];
17
+ complete: boolean;
18
+ uncertainty?: string;
19
+ };
20
+ export type AgentFileChangeReportResult = {
21
+ version: 1;
22
+ requestId: string;
23
+ } & ({
24
+ status: "reported";
25
+ paths: string[];
26
+ declaredComplete: boolean;
27
+ truncated: boolean;
28
+ uncertainty?: string;
29
+ } | {
30
+ status: "unavailable";
31
+ reason: FileChangeReportUnavailableReason;
32
+ });
33
+ export type FileChangeReportUnavailableReason = "cancelled" | "timeout" | "invalidOutput" | "notReported" | "providerError";
34
+ type FileChangeAuditSupportOptions = {
35
+ cwd: string;
36
+ additionalDirectories: string[];
37
+ getActiveState: () => FileChangeAuditTurnState | undefined;
38
+ publish: (result: AgentFileChangeReportResult) => Promise<void>;
39
+ logError: (message: string) => void;
40
+ };
41
+ export type FileChangeAuditSupport = {
42
+ mcpServer: McpSdkServerConfigWithInstance;
43
+ preToolUseHook: HookCallback;
44
+ stopHook: HookCallback;
45
+ finishUnavailable: (state: FileChangeAuditTurnState, reason: FileChangeReportUnavailableReason) => Promise<void>;
46
+ };
47
+ export declare function agentFileChangeReportRequestId(meta: unknown): string | undefined;
48
+ export declare function supportsAgentFileChangeReport(capabilities: unknown): boolean;
49
+ export declare function agentFileChangeReportMeta(result: AgentFileChangeReportResult): Record<string, unknown>;
50
+ export declare function createFileChangeAuditTurnState(requestId: string): FileChangeAuditTurnState;
51
+ export declare function isFileChangeAuditReportPhase(state: FileChangeAuditTurnState | undefined): boolean;
52
+ export declare function isFileChangeAuditTool(toolName: string): boolean;
53
+ export declare function containsFileChangeAuditMarker(text: string): boolean;
54
+ export declare function createFileChangeAuditSupport(options: FileChangeAuditSupportOptions): FileChangeAuditSupport;
55
+ export {};
56
+ //# sourceMappingURL=file-change-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-change-audit.d.ts","sourceRoot":"","sources":["../src/file-change-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,8BAA8B,EAEpC,MAAM,gCAAgC,CAAC;AAKxC,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAC3E,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAChE,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,gCAAgC,gDAA0E,CAAC;AAKxH,eAAO,MAAM,kCAAkC,QAAa,CAAC;AAG7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,CACA;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,iCAAiC,CAAC;CAC3C,CACJ,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAC3C,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,eAAe,CAAC;AAQ9E,KAAK,6BAA6B,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,cAAc,EAAE,MAAM,wBAAwB,GAAG,SAAS,CAAC;IAC3D,OAAO,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,cAAc,EAAE,YAAY,CAAC;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,iBAAiB,EAAE,CACjB,KAAK,EAAE,wBAAwB,EAC/B,MAAM,EAAE,iCAAiC,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAoBF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBhF;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAW5E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,2BAA2B,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAYD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,wBAAwB,CAK1F;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,wBAAwB,GAAG,SAAS,GAAG,OAAO,CAEjG;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,CAmJxB"}
@@ -0,0 +1,379 @@
1
+ import { createSdkMcpServer, } from "@anthropic-ai/claude-agent-sdk";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { z } from "zod";
5
+ export const AGENT_FILE_CHANGE_REPORT_CAPABILITY = "agentFileChangeReport";
6
+ export const FILE_CHANGE_AUDIT_SERVER_NAME = "claude_agent_acp";
7
+ export const FILE_CHANGE_AUDIT_TOOL_NAME = "report_changed_files";
8
+ export const FILE_CHANGE_AUDIT_WIRE_TOOL_NAME = `mcp__${FILE_CHANGE_AUDIT_SERVER_NAME}__${FILE_CHANGE_AUDIT_TOOL_NAME}`;
9
+ const FILE_CHANGE_AUDIT_MARKER = "claude-agent-acp-file-change-audit";
10
+ const MAX_REPORTED_PATHS = 1024;
11
+ const MAX_REPORTED_PATH_LENGTH = 4096;
12
+ export const AGENT_FILE_CHANGE_REPORT_MAX_BYTES = 256 * 1024;
13
+ const REQUEST_ID_PATTERN = /^[A-Za-z0-9._:-]{1,128}$/;
14
+ const JETBRAINS_META_KEY = "jetbrains";
15
+ const AIR_META_KEY = "air";
16
+ const AIR_EXTENSION_VERSION = 1;
17
+ const AIR_EXTENSION_CAPABILITIES_KEY = "capabilities";
18
+ const AIR_AGENT_FILE_CHANGE_REPORT_KEY = "agentFileChangeReport";
19
+ const reportInputSchema = {
20
+ paths: z
21
+ .array(z.string())
22
+ .describe("Workspace file paths changed during this turn. Use absolute paths or paths relative to cwd."),
23
+ complete: z
24
+ .boolean()
25
+ .describe("True only when paths contains every workspace file changed during this turn."),
26
+ uncertainty: z
27
+ .string()
28
+ .trim()
29
+ .min(1)
30
+ .max(2000)
31
+ .optional()
32
+ .describe("Why the report may be incomplete or uncertain."),
33
+ };
34
+ export function agentFileChangeReportRequestId(meta) {
35
+ const air = airExtension(meta);
36
+ const request = air?.agentFileChangeReportRequest;
37
+ if (!request || typeof request !== "object" || Array.isArray(request))
38
+ return undefined;
39
+ const requestRecord = request;
40
+ const requestKeys = Object.keys(requestRecord);
41
+ if (requestKeys.length !== 2 ||
42
+ !requestKeys.includes("version") ||
43
+ !requestKeys.includes("requestId") ||
44
+ requestRecord.version !== 1)
45
+ return undefined;
46
+ const requestId = requestRecord.requestId;
47
+ return typeof requestId === "string" && REQUEST_ID_PATTERN.test(requestId)
48
+ ? requestId
49
+ : undefined;
50
+ }
51
+ export function supportsAgentFileChangeReport(capabilities) {
52
+ if (!capabilities || typeof capabilities !== "object" || Array.isArray(capabilities)) {
53
+ return false;
54
+ }
55
+ const air = airExtension(capabilities._meta);
56
+ const advertised = air?.[AIR_EXTENSION_CAPABILITIES_KEY];
57
+ return (air?.version === AIR_EXTENSION_VERSION &&
58
+ Array.isArray(advertised) &&
59
+ advertised.includes(AGENT_FILE_CHANGE_REPORT_CAPABILITY));
60
+ }
61
+ export function agentFileChangeReportMeta(result) {
62
+ return {
63
+ [JETBRAINS_META_KEY]: {
64
+ [AIR_META_KEY]: {
65
+ version: AIR_EXTENSION_VERSION,
66
+ [AIR_AGENT_FILE_CHANGE_REPORT_KEY]: result,
67
+ },
68
+ },
69
+ };
70
+ }
71
+ function airExtension(meta) {
72
+ if (!meta || typeof meta !== "object" || Array.isArray(meta))
73
+ return undefined;
74
+ const jetbrains = meta[JETBRAINS_META_KEY];
75
+ if (!jetbrains || typeof jetbrains !== "object" || Array.isArray(jetbrains))
76
+ return undefined;
77
+ const air = jetbrains[AIR_META_KEY];
78
+ return air && typeof air === "object" && !Array.isArray(air)
79
+ ? air
80
+ : undefined;
81
+ }
82
+ export function createFileChangeAuditTurnState(requestId) {
83
+ return {
84
+ requestId,
85
+ phase: "requested",
86
+ };
87
+ }
88
+ export function isFileChangeAuditReportPhase(state) {
89
+ return state?.phase === "collecting" || state?.phase === "finished";
90
+ }
91
+ export function isFileChangeAuditTool(toolName) {
92
+ return toolName === FILE_CHANGE_AUDIT_WIRE_TOOL_NAME;
93
+ }
94
+ export function containsFileChangeAuditMarker(text) {
95
+ return text.includes(`<${FILE_CHANGE_AUDIT_MARKER}>`);
96
+ }
97
+ export function createFileChangeAuditSupport(options) {
98
+ const workspace = normalizeWorkspace(options.cwd, options.additionalDirectories);
99
+ const finishUnavailable = async (state, reason) => {
100
+ // Claim the terminal outcome before the first await. The report tool, a
101
+ // Stop hook, cancellation, and stream teardown can race, but only the
102
+ // winner may publish for this request id. Publication remains fail-open:
103
+ // an audit transport failure must never hold the user prompt open.
104
+ if (state.phase === "finished")
105
+ return;
106
+ state.phase = "finished";
107
+ try {
108
+ await options.publish({
109
+ version: 1,
110
+ requestId: state.requestId,
111
+ status: "unavailable",
112
+ reason,
113
+ });
114
+ }
115
+ catch (error) {
116
+ options.logError(`Failed to publish unavailable report ${state.requestId}: ${error}`);
117
+ }
118
+ };
119
+ const tool = {
120
+ name: FILE_CHANGE_AUDIT_TOOL_NAME,
121
+ description: "Internal audit tool. Call it only when a stop-hook message explicitly requests the file-change audit.",
122
+ inputSchema: reportInputSchema,
123
+ _meta: {
124
+ "anthropic/alwaysLoad": true,
125
+ "claude/endTurn": true,
126
+ },
127
+ handler: async (report) => {
128
+ const state = options.getActiveState();
129
+ if (!state || state.phase !== "collecting") {
130
+ return {
131
+ isError: true,
132
+ content: [
133
+ {
134
+ type: "text",
135
+ text: `<${FILE_CHANGE_AUDIT_MARKER}>No file-change audit is active.</${FILE_CHANGE_AUDIT_MARKER}>`,
136
+ },
137
+ ],
138
+ };
139
+ }
140
+ // Flip before publishing: a client transport failure must not make the
141
+ // model retry the report and produce duplicates. Delivery is audit-only
142
+ // and fail-open; the normal turn must still finish.
143
+ state.phase = "finished";
144
+ const normalized = normalizeReportedPaths(report.paths, workspace);
145
+ const result = fitReportedAgentFileChangeReport({
146
+ version: 1,
147
+ requestId: state.requestId,
148
+ status: "reported",
149
+ paths: normalized.paths,
150
+ declaredComplete: report.complete && !normalized.truncated,
151
+ truncated: normalized.truncated,
152
+ ...(report.uncertainty ? { uncertainty: report.uncertainty } : {}),
153
+ });
154
+ try {
155
+ await options.publish(result);
156
+ }
157
+ catch (error) {
158
+ options.logError(`Failed to publish file-change report ${state.requestId}: ${error}`);
159
+ }
160
+ return {
161
+ content: [
162
+ {
163
+ type: "text",
164
+ text: `<${FILE_CHANGE_AUDIT_MARKER}>File-change audit recorded.</${FILE_CHANGE_AUDIT_MARKER}>`,
165
+ },
166
+ ],
167
+ structuredContent: result,
168
+ };
169
+ },
170
+ };
171
+ // canUseTool is not guaranteed to run for tools that the current permission
172
+ // mode auto-allows (notably bypassPermissions). A PreToolUse hook is the
173
+ // enforcement boundary that keeps the hidden continuation read-only in every
174
+ // mode: it can submit the report, but cannot inspect or mutate more files.
175
+ const preToolUseHook = async (input) => {
176
+ if (input.hook_event_name !== "PreToolUse")
177
+ return {};
178
+ const state = options.getActiveState();
179
+ const isReportTool = isFileChangeAuditTool(input.tool_name);
180
+ if (!isReportTool && !isFileChangeAuditReportPhase(state))
181
+ return {};
182
+ const allowReport = state?.phase === "collecting" && isReportTool;
183
+ return {
184
+ hookSpecificOutput: {
185
+ hookEventName: "PreToolUse",
186
+ permissionDecision: allowReport ? "allow" : "deny",
187
+ ...(!allowReport
188
+ ? {
189
+ permissionDecisionReason: "Only the internal file-change report is allowed during the audit.",
190
+ }
191
+ : {}),
192
+ },
193
+ };
194
+ };
195
+ const stopHook = async (input) => {
196
+ if (input.hook_event_name !== "Stop")
197
+ return {};
198
+ const state = options.getActiveState();
199
+ if (!state || state.phase === "finished")
200
+ return {};
201
+ // A Stop can be only a pause while a background generator is still
202
+ // running. Keep the request pending so a later final Stop can include its
203
+ // writes instead of declaring a prematurely complete path set.
204
+ if (state.phase === "requested" && (input.background_tasks?.length ?? 0) > 0)
205
+ return {};
206
+ if (state.phase === "collecting" || input.stop_hook_active) {
207
+ await finishUnavailable(state, "notReported");
208
+ return {};
209
+ }
210
+ // Set the phase before returning the continuation so every following SDK
211
+ // message is hidden even if the next stream starts immediately.
212
+ state.phase = "collecting";
213
+ return {
214
+ hookSpecificOutput: {
215
+ hookEventName: "Stop",
216
+ additionalContext: `<${FILE_CHANGE_AUDIT_MARKER}>` +
217
+ `Before stopping, call ${FILE_CHANGE_AUDIT_WIRE_TOOL_NAME} exactly once. ` +
218
+ "Report every workspace file changed during this user turn, including files changed " +
219
+ "by commands, generators, version-control operations, and child processes. " +
220
+ "Do not call any other tool and do not emit user-facing prose. " +
221
+ "Set complete to false and explain uncertainty when you are not sure the list is complete." +
222
+ `</${FILE_CHANGE_AUDIT_MARKER}>`,
223
+ },
224
+ };
225
+ };
226
+ return {
227
+ mcpServer: createSdkMcpServer({
228
+ name: FILE_CHANGE_AUDIT_SERVER_NAME,
229
+ version: "1.0.0",
230
+ tools: [tool],
231
+ alwaysLoad: true,
232
+ }),
233
+ preToolUseHook,
234
+ stopHook,
235
+ finishUnavailable,
236
+ };
237
+ }
238
+ function normalizeWorkspace(cwd, additionalDirectories) {
239
+ const normalizedCwd = canonicalizeWorkspaceRoot(path.resolve(cwd));
240
+ const seen = new Set([pathKey(normalizedCwd)]);
241
+ const normalizedAdditionalDirectories = [];
242
+ for (const directory of additionalDirectories) {
243
+ const normalized = canonicalizeWorkspaceRoot(path.resolve(normalizedCwd, directory));
244
+ const key = pathKey(normalized);
245
+ if (seen.has(key))
246
+ continue;
247
+ seen.add(key);
248
+ normalizedAdditionalDirectories.push(normalized);
249
+ }
250
+ return {
251
+ cwd: normalizedCwd,
252
+ additionalDirectories: normalizedAdditionalDirectories,
253
+ };
254
+ }
255
+ function normalizeReportedPaths(reportedPaths, workspace) {
256
+ const roots = [workspace.cwd, ...workspace.additionalDirectories];
257
+ const seen = new Set();
258
+ const result = [];
259
+ let totalBytes = 0;
260
+ let truncated = false;
261
+ for (const reportedPath of reportedPaths) {
262
+ if (reportedPath.trim().length === 0 ||
263
+ reportedPath.length > MAX_REPORTED_PATH_LENGTH ||
264
+ hasControlCharacter(reportedPath)) {
265
+ truncated = true;
266
+ continue;
267
+ }
268
+ let normalized;
269
+ try {
270
+ normalized = canonicalizeReportedPath(path.resolve(workspace.cwd, reportedPath));
271
+ }
272
+ catch {
273
+ truncated = true;
274
+ continue;
275
+ }
276
+ if (normalized.length > MAX_REPORTED_PATH_LENGTH || hasControlCharacter(normalized)) {
277
+ truncated = true;
278
+ continue;
279
+ }
280
+ if (!roots.some((root) => isWithinRoot(normalized, root))) {
281
+ truncated = true;
282
+ continue;
283
+ }
284
+ const key = pathKey(normalized);
285
+ if (roots.some((root) => pathKey(root) === key)) {
286
+ truncated = true;
287
+ continue;
288
+ }
289
+ if (seen.has(key)) {
290
+ continue;
291
+ }
292
+ const pathBytes = Buffer.byteLength(normalized, "utf8");
293
+ if (result.length >= MAX_REPORTED_PATHS ||
294
+ totalBytes + pathBytes > AGENT_FILE_CHANGE_REPORT_MAX_BYTES) {
295
+ truncated = true;
296
+ continue;
297
+ }
298
+ seen.add(key);
299
+ result.push(normalized);
300
+ totalBytes += pathBytes;
301
+ }
302
+ return { paths: result, truncated };
303
+ }
304
+ /** Keep the complete serialized report within AIR's wire limit. */
305
+ function fitReportedAgentFileChangeReport(report) {
306
+ const paths = [...report.paths];
307
+ let fitted = report;
308
+ while (Buffer.byteLength(JSON.stringify(fitted), "utf8") > AGENT_FILE_CHANGE_REPORT_MAX_BYTES) {
309
+ if (paths.length === 0) {
310
+ // The fixed fields and bounded uncertainty are far below the cap. Keep
311
+ // this loud if the wire contract changes without updating this helper.
312
+ throw new Error("Agent file-change report exceeds the wire limit without paths");
313
+ }
314
+ paths.pop();
315
+ fitted = {
316
+ ...report,
317
+ paths: [...paths],
318
+ declaredComplete: false,
319
+ truncated: true,
320
+ };
321
+ }
322
+ return fitted;
323
+ }
324
+ function isWithinRoot(candidate, root) {
325
+ const relative = path.relative(root, candidate);
326
+ return !path.isAbsolute(relative) && !relative.startsWith(`..${path.sep}`) && relative !== "..";
327
+ }
328
+ /**
329
+ * Resolve filesystem aliases in a workspace root, including macOS' /tmp ->
330
+ * /private/tmp alias. For a root that does not exist yet, resolve its nearest
331
+ * existing ancestor and retain the missing suffix.
332
+ */
333
+ function canonicalizeWorkspaceRoot(value) {
334
+ return canonicalizeFromExistingAncestor(value);
335
+ }
336
+ /**
337
+ * Canonicalize the parent but not the leaf itself. A changed path may be
338
+ * deleted, or it may be a symlink whose node (rather than target) changed.
339
+ */
340
+ function canonicalizeReportedPath(value) {
341
+ const parent = canonicalizeFromExistingAncestor(path.dirname(value));
342
+ return path.resolve(parent, path.basename(value));
343
+ }
344
+ function canonicalizeFromExistingAncestor(value) {
345
+ const original = path.resolve(value);
346
+ let current = original;
347
+ const missingSegments = [];
348
+ while (true) {
349
+ try {
350
+ const canonical = fs.realpathSync.native(current);
351
+ return path.resolve(canonical, ...missingSegments.reverse());
352
+ }
353
+ catch (error) {
354
+ if (!isMissingPathError(error))
355
+ return original;
356
+ }
357
+ const parent = path.dirname(current);
358
+ if (parent === current)
359
+ return original;
360
+ missingSegments.push(path.basename(current));
361
+ current = parent;
362
+ }
363
+ }
364
+ function isMissingPathError(error) {
365
+ if (typeof error !== "object" || error === null || !("code" in error))
366
+ return false;
367
+ return error.code === "ENOENT" || error.code === "ENOTDIR";
368
+ }
369
+ function pathKey(value) {
370
+ return process.platform === "win32" ? value.toLowerCase() : value;
371
+ }
372
+ function hasControlCharacter(value) {
373
+ for (let index = 0; index < value.length; index++) {
374
+ const code = value.charCodeAt(index);
375
+ if (code <= 0x1f || (code >= 0x7f && code <= 0x9f))
376
+ return true;
377
+ }
378
+ return false;
379
+ }
@@ -1,6 +1,6 @@
1
1
  import type { ClientCapabilities, SessionNotification } from "@agentclientprotocol/sdk";
2
2
  import { getSessionMessages, type SDKAssistantMessageError } from "@anthropic-ai/claude-agent-sdk";
3
- export declare function airSessionFailureCapabilityMeta(): {
3
+ export declare function airSessionFailureCapabilityMeta(...additionalCapabilities: string[]): {
4
4
  jetbrains: {
5
5
  air: {
6
6
  version: number;
@@ -1 +1 @@
1
- {"version":3,"file":"session-failure-extension.d.ts","sourceRoot":"","sources":["../src/session-failure-extension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-failure-extension.d.ts","sourceRoot":"","sources":["../src/session-failure-extension.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,12 @@ const AIR_EXTENSION_VERSION_KEY = "version";
6
6
  const AIR_EXTENSION_CAPABILITIES_KEY = "capabilities";
7
7
  const AIR_SESSION_FAILURE_KEY = "sessionFailure";
8
8
  const AIR_EXTENSION_VERSION = 1;
9
- export function airSessionFailureCapabilityMeta() {
9
+ export function airSessionFailureCapabilityMeta(...additionalCapabilities) {
10
10
  return {
11
11
  [JETBRAINS_META_KEY]: {
12
12
  [AIR_META_KEY]: {
13
13
  [AIR_EXTENSION_VERSION_KEY]: AIR_EXTENSION_VERSION,
14
- [AIR_EXTENSION_CAPABILITIES_KEY]: [AIR_SESSION_FAILURE_KEY],
14
+ [AIR_EXTENSION_CAPABILITIES_KEY]: [AIR_SESSION_FAILURE_KEY, ...additionalCapabilities],
15
15
  },
16
16
  },
17
17
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.68.0",
6
+ "version": "0.69.0",
7
7
  "description": "An ACP-compatible coding agent powered by the Claude Agent SDK (TypeScript)",
8
8
  "main": "dist/lib.js",
9
9
  "types": "dist/lib.d.ts",