@agentclientprotocol/claude-agent-acp 0.77.1-preview.3 → 0.77.1-preview.4

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.
@@ -12,7 +12,7 @@ import { SettingsManager } from "./settings.js";
12
12
  import { ContextCompactionMetadata } from "./context-compaction-meta.js";
13
13
  import { type SessionFailureState } from "./session-failure-extension.js";
14
14
  import { type ClaudeSubscriptionGuardState } from "./hide-claude-auth.js";
15
- import { type FileChangeAuditSupport, type FileChangeAuditTurnState } from "./file-change-audit.js";
15
+ import { type FileChangeReportTurnState, type NativeFileChangeReporter } from "./file-change-audit.js";
16
16
  import { ContextCompactionLifecycle } from "./context-compaction.js";
17
17
  import { TaskState } from "./tools.js";
18
18
  import { Pushable } from "./utils.js";
@@ -98,13 +98,20 @@ type Turn = {
98
98
  * publish the structured replacement at most once. */
99
99
  usageMarkdownDelivered?: boolean;
100
100
  usageOriginalOutput?: string;
101
- /** Optional hidden, model-authored file-change audit requested by the ACP
102
- * client for this turn. The state is turn-owned so a late tool call can
103
- * never be rebound to a newer prompt. */
104
- fileChangeAudit?: FileChangeAuditTurnState;
101
+ /** Optional native checkpoint preview requested by the ACP client for this
102
+ * turn. The state is turn-owned so a late control response can never be
103
+ * rebound to a newer prompt. */
104
+ fileChangeReport?: FileChangeReportTurnState;
105
105
  /** Set once the deferred has been resolved/rejected, so the consumer never
106
106
  * settles a turn twice (idle + handoff + stream-end can all race). */
107
107
  settled: boolean;
108
+ /** Set while the terminal checkpoint preview is in flight. The consumer can
109
+ * observe another terminal signal during that bounded await; only the first
110
+ * one may continue into settlement. */
111
+ settling?: boolean;
112
+ /** Outcome captured before the checkpoint preview await, so cancel() can
113
+ * preserve its usage and metadata while atomically winning that race. */
114
+ settlingOutcome?: PromptResponse;
108
115
  /** Set when a `command_lifecycle` "started" frame arrives for this turn's
109
116
  * uuid (msg_lifecycle_v1 CLIs): the SDK dispatched the command into a turn.
110
117
  * Read by cancel() to seed the orphan's state — a started orphan's turn may
@@ -219,14 +226,8 @@ export type Session = {
219
226
  /** The turn whose messages the consumer is currently attributing output to
220
227
  * (the head of `turnQueue` once its user message has been echoed). */
221
228
  activeTurn?: Turn | null;
222
- /** Request ids already accepted for hidden agent file-change reports. Kept
223
- * for the session lifetime so a redelivered prompt cannot publish the same
224
- * audit twice or bind a late report to another turn. */
225
- fileChangeReportRequestIds: Set<string>;
226
- /** Session-owned publisher for negotiated file-change audits. Turn state
227
- * stays on each Turn; this controller supplies the single idempotent
228
- * unavailable terminal used by every non-report settlement path. */
229
- fileChangeAuditSupport?: FileChangeAuditSupport;
229
+ /** Session-owned native checkpoint reporter. Turn state stays on each Turn. */
230
+ fileChangeReporter?: NativeFileChangeReporter;
230
231
  /** Optimistic goal state published for a submitted `/goal` command whose
231
232
  * matching runtime update has not arrived yet. Runtime updates for the old
232
233
  * goal are suppressed until this command is echoed or completes, otherwise
@@ -1023,11 +1024,6 @@ export declare class ClaudeAcpAgent {
1023
1024
  * `startedNewTurn` result are preserved for compatibility. */
1024
1025
  steer(params: SteerRequest): Promise<SteerResponse>;
1025
1026
  stopAsyncTask(params: AsyncTaskStopRequest): Promise<AsyncTaskStopResponse>;
1026
- /** Publish the audit terminal for every turn path that did not reach the
1027
- * report tool. The support flips the turn state synchronously before its
1028
- * transport await, so callers can stay fail-open and settle the ACP prompt
1029
- * immediately without allowing a racing lifecycle path to publish twice. */
1030
- private finishFileChangeAudit;
1031
1027
  /** Lazily start the per-session consumer that drains the SDK query stream for
1032
1028
  * the session's whole life. Idempotent: only the first `prompt()` starts it. */
1033
1029
  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":"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"}
package/dist/acp-agent.js CHANGED
@@ -27,7 +27,7 @@ import { decodeClaudePermissionResponse } from "./permissions/response.js";
27
27
  import { SettingsManager } from "./settings.js";
28
28
  import { activeUsageLimitMessage, airSessionFailureCapabilityMeta, assistantMessageText, createSessionFailureState, isSyntheticUsageLimitMessage, providerFailureCategory, SessionFailureController, sessionFailureMeta, supportsAirSessionFailures, } from "./session-failure-extension.js";
29
29
  import { billsClaudeSubscription, CLAUDE_SUBSCRIPTION_NOT_SUPPORTED_MESSAGE, CLAUDE_SUBSCRIPTION_NOT_SUPPORTED_REASON, claudeLoginRequiredError, claudeSubscriptionNotSupportedError, holdsNonSubscriptionCredential, refuseClaudeSubscriptionTurn, shouldHideClaudeAuth, warnClaudeSubscriptionGuardDegraded, } from "./hide-claude-auth.js";
30
- import { AGENT_FILE_CHANGE_REPORT_CAPABILITY, agentFileChangeReportMeta, agentFileChangeReportRequestId, containsFileChangeAuditMarker, createFileChangeAuditSupport, createFileChangeAuditTurnState, FILE_CHANGE_AUDIT_SERVER_NAME, isFileChangeAuditReportPhase, isFileChangeAuditTool, supportsAgentFileChangeReport, } from "./file-change-audit.js";
30
+ import { AGENT_FILE_CHANGE_REPORT_CAPABILITY, agentFileChangeReportMeta, createNativeFileChangeReporter, supportsAgentFileChangeReport, } from "./file-change-audit.js";
31
31
  import { ContextCompactionLifecycle, clientSupportsCompactionUpdates, contextCompactionMetadataFromBoundary, isCompactSummaryMessage, } from "./context-compaction.js";
32
32
  import { applyTaskCreate, applyTaskList, applyTaskUpdate, clearHookCallbacks, completeHookCallback, createPostToolUseHook, createTaskHook, parseTaskCreateOutput, parseTaskListOutput, parseTaskUpdateOutput, planEntries, registerHookCallback, taskStateToPlanEntries, toolInfoFromToolUse, toolUpdateFromToolResult, unregisterHookCallback, } from "./tools.js";
33
33
  import { toolUpdateFromDiffToolResponse } from "./diff.js";
@@ -780,13 +780,13 @@ export class ClaudeAcpAgent {
780
780
  },
781
781
  settleCancelledTurn: (original, session, turn) => {
782
782
  disarmForceCancel(session);
783
- this.finishFileChangeAudit(session, turn, "cancelled");
783
+ session.fileChangeReporter?.finish(turn.fileChangeReport, "cancelled");
784
784
  turn.settled = true;
785
785
  turn.resolve({ stopReason: "cancelled", usage: sessionUsage(original) });
786
786
  },
787
787
  settleFailedTurn: (session, turn, error) => {
788
788
  disarmForceCancel(session);
789
- this.finishFileChangeAudit(session, turn, "providerError");
789
+ session.fileChangeReporter?.finish(turn.fileChangeReport, "providerError");
790
790
  turn.settled = true;
791
791
  turn.reject(error);
792
792
  },
@@ -1421,15 +1421,7 @@ export class ClaudeAcpAgent {
1421
1421
  // user message, so the consumer can't promote the turn from the echo.
1422
1422
  const firstText = params.prompt[0]?.type === "text" ? params.prompt[0].text : "";
1423
1423
  const isLocalOnlyCommand = firstText.startsWith("/") && LOCAL_ONLY_COMMANDS.has(firstText.split(" ", 1)[0]);
1424
- const fileChangeReportRequestId = supportsAgentFileChangeReport(this.clientCapabilities)
1425
- ? agentFileChangeReportRequestId(params._meta)
1426
- : undefined;
1427
- let fileChangeAudit;
1428
- if (fileChangeReportRequestId &&
1429
- !session.fileChangeReportRequestIds.has(fileChangeReportRequestId)) {
1430
- session.fileChangeReportRequestIds.add(fileChangeReportRequestId);
1431
- fileChangeAudit = createFileChangeAuditTurnState(fileChangeReportRequestId);
1432
- }
1424
+ const fileChangeReport = session.fileChangeReporter?.request(params._meta);
1433
1425
  const isUsageCommand = params.prompt.length === 1 &&
1434
1426
  params.prompt[0]?.type === "text" &&
1435
1427
  isUsageCommandText(params.prompt[0].text);
@@ -1444,7 +1436,7 @@ export class ClaudeAcpAgent {
1444
1436
  isLocalOnlyCommand,
1445
1437
  ...(isUsageCommand ? { isUsageCommand: true } : {}),
1446
1438
  ...(usageMarkdownAbort ? { usageMarkdownAbort } : {}),
1447
- ...(fileChangeAudit ? { fileChangeAudit } : {}),
1439
+ ...(fileChangeReport ? { fileChangeReport } : {}),
1448
1440
  settled: false,
1449
1441
  resolve: () => { },
1450
1442
  reject: () => { },
@@ -1804,15 +1796,6 @@ export class ClaudeAcpAgent {
1804
1796
  throw error;
1805
1797
  }
1806
1798
  }
1807
- /** Publish the audit terminal for every turn path that did not reach the
1808
- * report tool. The support flips the turn state synchronously before its
1809
- * transport await, so callers can stay fail-open and settle the ACP prompt
1810
- * immediately without allowing a racing lifecycle path to publish twice. */
1811
- finishFileChangeAudit(session, turn, reason) {
1812
- if (!turn.fileChangeAudit || !session.fileChangeAuditSupport)
1813
- return;
1814
- void session.fileChangeAuditSupport.finishUnavailable(turn.fileChangeAudit, reason);
1815
- }
1816
1799
  /** Lazily start the per-session consumer that drains the SDK query stream for
1817
1800
  * the session's whole life. Idempotent: only the first `prompt()` starts it. */
1818
1801
  ensureConsumer(session, sessionId) {
@@ -1916,16 +1899,6 @@ export class ClaudeAcpAgent {
1916
1899
  }
1917
1900
  return;
1918
1901
  }
1919
- if (isFileChangeAuditReportPhase(session.activeTurn?.fileChangeAudit) &&
1920
- (update.sessionUpdate === "agent_message_chunk" ||
1921
- update.sessionUpdate === "agent_thought_chunk" ||
1922
- update.sessionUpdate === "user_message_chunk" ||
1923
- update.sessionUpdate === "tool_call" ||
1924
- update.sessionUpdate === "tool_call_update" ||
1925
- update.sessionUpdate === "compaction_update" ||
1926
- update.sessionUpdate === "compaction_summary_chunk")) {
1927
- return;
1928
- }
1929
1902
  if (update.sessionUpdate === "agent_message_chunk") {
1930
1903
  if (!claudeMeta?.parentToolUseId &&
1931
1904
  update.content.type === "text" &&
@@ -2094,7 +2067,7 @@ export class ClaudeAcpAgent {
2094
2067
  * a stamp naming an orphaned command consumes the result outright, and a
2095
2068
  * stamp naming anything else positively refutes "this is a dead turn's
2096
2069
  * result", so the dup-over-loss one-skip must not eat it. */
2097
- const ensureActiveTurn = (resultUserMessageUuid) => {
2070
+ const ensureActiveTurn = async (resultUserMessageUuid) => {
2098
2071
  if (session.activeTurn) {
2099
2072
  if (!isHeldOpen(session.activeTurn)) {
2100
2073
  return;
@@ -2116,7 +2089,7 @@ export class ClaudeAcpAgent {
2116
2089
  // promoted command's own delivery decision is not judged against the
2117
2090
  // held turn's followup text (issue #453) — the caller snapshots the
2118
2091
  // flag AFTER this runs.
2119
- settleActive(session.activeTurn.deferredSettle);
2092
+ await settleActive(session.activeTurn.deferredSettle);
2120
2093
  }
2121
2094
  // Orphan accounting runs BEFORE the head check: an orphan's echo-less
2122
2095
  // result can arrive with an EMPTY queue (the common post-cancel
@@ -2277,10 +2250,10 @@ export class ClaudeAcpAgent {
2277
2250
  /** Settle the active turn's stored deferred outcome once none of its
2278
2251
  * spawned subagents is live. The single drain rule shared by the
2279
2252
  * followup-result and idle settle sites, so the two lanes can't drift. */
2280
- const settleDeferredIfDrained = () => {
2253
+ const settleDeferredIfDrained = async () => {
2281
2254
  const turn = session.activeTurn;
2282
2255
  if (isHeldOpen(turn) && !turnAwaitingSubagents(turn)) {
2283
- settleActive(turn.deferredSettle);
2256
+ await settleActive(turn.deferredSettle);
2284
2257
  }
2285
2258
  };
2286
2259
  /** Settle the active turn with `outcome` now — unless subagents it
@@ -2289,7 +2262,7 @@ export class ClaudeAcpAgent {
2289
2262
  * turn that can have spawned subagents must route through here: a site
2290
2263
  * calling settleActive directly bypasses the hold and re-opens the
2291
2264
  * out-of-turn permission deadlock (issue #866) through its lane. */
2292
- const settleOrDefer = (outcome) => {
2265
+ const settleOrDefer = async (outcome) => {
2293
2266
  // No result ends a steered turn: the steer aborted the cycle this result
2294
2267
  // may belong to, and the steered one is still to come. Record the outcome
2295
2268
  // for the idle lane (see Turn.steeredEchoes); later cycles overwrite it,
@@ -2304,19 +2277,29 @@ export class ClaudeAcpAgent {
2304
2277
  session.activeTurn.deferredSettle = outcome;
2305
2278
  }
2306
2279
  else {
2307
- settleActive(outcome);
2280
+ await settleActive(outcome);
2308
2281
  }
2309
2282
  };
2310
- /** Settle the active turn's deferred exactly once, disarm the force-cancel
2311
- * backstop (the turn is over), and drop it from the queue. */
2312
- const settleActive = (result, auditReason = result.stopReason === "cancelled"
2283
+ /** At the actual turn boundary, preview its checkpoint, settle the active
2284
+ * turn exactly once, disarm the force-cancel backstop, and drop it from
2285
+ * the queue. Cancellation and provider failures skip checkpoint I/O. */
2286
+ const settleActive = async (result, reportReason = result.stopReason === "cancelled"
2313
2287
  ? "cancelled"
2314
2288
  : "notReported") => {
2315
2289
  const turn = session.activeTurn;
2316
- if (!turn || turn.settled) {
2290
+ if (!turn || turn.settled || turn.settling) {
2317
2291
  return;
2318
2292
  }
2319
- this.finishFileChangeAudit(session, turn, auditReason);
2293
+ turn.settling = true;
2294
+ turn.settlingOutcome = result;
2295
+ if (reportReason === "notReported") {
2296
+ await session.fileChangeReporter?.report(turn, session.query);
2297
+ // cancel() can settle a held turn while the bounded checkpoint preview
2298
+ // is in flight. Its cancellation outcome wins; never settle twice.
2299
+ if (turn.settled || session.activeTurn !== turn)
2300
+ return;
2301
+ }
2302
+ session.fileChangeReporter?.finish(turn.fileChangeReport, reportReason);
2320
2303
  // Captured before the settled flip below (isHeldOpen tests !settled).
2321
2304
  const wasHeld = isHeldOpen(turn);
2322
2305
  turn.settled = true;
@@ -2351,7 +2334,7 @@ export class ClaudeAcpAgent {
2351
2334
  this.logger.error(`Session ${params.sessionId}: cannot fail active turn because no unsettled active turn exists: ${error}`);
2352
2335
  return;
2353
2336
  }
2354
- this.finishFileChangeAudit(session, turn, "providerError");
2337
+ session.fileChangeReporter?.finish(turn.fileChangeReport, "providerError");
2355
2338
  turn.settled = true;
2356
2339
  session.turnQueue = (session.turnQueue ?? []).filter((t) => t !== turn);
2357
2340
  session.activeTurn = null;
@@ -2414,7 +2397,7 @@ export class ClaudeAcpAgent {
2414
2397
  return;
2415
2398
  }
2416
2399
  sessionFailures.recordActive(failure);
2417
- settleActive(turnOutcome(session, "end_turn", sessionFailureMeta(failure)), "providerError");
2400
+ await settleActive(turnOutcome(session, "end_turn", sessionFailureMeta(failure)), "providerError");
2418
2401
  };
2419
2402
  /** Reject every in-flight turn — used when the stream dies. */
2420
2403
  const failAllTurns = (error) => {
@@ -2426,7 +2409,7 @@ export class ClaudeAcpAgent {
2426
2409
  session.turnQueue = [];
2427
2410
  for (const turn of turns) {
2428
2411
  if (!turn.settled) {
2429
- this.finishFileChangeAudit(session, turn, "providerError");
2412
+ session.fileChangeReporter?.finish(turn.fileChangeReport, "providerError");
2430
2413
  const wasHeld = isHeldOpen(turn);
2431
2414
  turn.settled = true;
2432
2415
  if (wasHeld) {
@@ -2513,7 +2496,7 @@ export class ClaudeAcpAgent {
2513
2496
  this.trackOrphanCommand(session, active.promptUuid, "started");
2514
2497
  }
2515
2498
  }
2516
- settleActive(turnOutcome(session, "cancelled"));
2499
+ await settleActive(turnOutcome(session, "cancelled"));
2517
2500
  // The cancelled turn's result may never come (that's why the
2518
2501
  // backstop fired) — close its delivery stretch here so partial
2519
2502
  // streamed text can't suppress the next turn's issue-#453 fallback.
@@ -2568,7 +2551,7 @@ export class ClaudeAcpAgent {
2568
2551
  // it), but the stored one is the authoritative source.
2569
2552
  const inFlight = session.activeTurn;
2570
2553
  await finishLifecycle(session.cancelled ? "cancelled" : "failed", session.cancelled ? "stopped" : "failed", "at end of stream");
2571
- settleActive(session.cancelled
2554
+ await settleActive(session.cancelled
2572
2555
  ? turnOutcome(session, "cancelled")
2573
2556
  : (inFlight?.deferredSettle ?? turnOutcome(session, stopReason)));
2574
2557
  // Queued turns the SDK never started never ran, so reject them rather
@@ -2578,7 +2561,7 @@ export class ClaudeAcpAgent {
2578
2561
  // still here was enqueued afterward and was not part of the cancel.)
2579
2562
  for (const queued of [...(session.turnQueue ?? [])]) {
2580
2563
  if (!queued.settled) {
2581
- this.finishFileChangeAudit(session, queued, "providerError");
2564
+ session.fileChangeReporter?.finish(queued.fileChangeReport, "providerError");
2582
2565
  queued.settled = true;
2583
2566
  queued.reject(RequestError.internalError(undefined, SESSION_ENDED_MESSAGE));
2584
2567
  }
@@ -2850,7 +2833,7 @@ export class ClaudeAcpAgent {
2850
2833
  // when the cancel pre-empted the result (wedge/force-cancel).
2851
2834
  if (session.cancelled && session.activeTurn && !session.activeTurn.settled) {
2852
2835
  await compaction.reset();
2853
- settleActive(turnOutcome(session, "cancelled"));
2836
+ await settleActive(turnOutcome(session, "cancelled"));
2854
2837
  // An interrupt can pre-empt the turn's result entirely
2855
2838
  // (nothing ran the result-case `finally`), so close the
2856
2839
  // delivery stretch here: idle is the SDK's authoritative
@@ -2876,7 +2859,7 @@ export class ClaudeAcpAgent {
2876
2859
  if (session.owedTrailingIdles > 0) {
2877
2860
  session.owedTrailingIdles--;
2878
2861
  }
2879
- settleDeferredIfDrained();
2862
+ await settleDeferredIfDrained();
2880
2863
  }
2881
2864
  else if (session.owedTrailingIdles > 0) {
2882
2865
  // Absorb a settled turn's trailing idle. Also covers a
@@ -2908,7 +2891,7 @@ export class ClaudeAcpAgent {
2908
2891
  steered.deferredSettle = steered.steeredSettle;
2909
2892
  steered.steeredEchoes = undefined;
2910
2893
  steered.steeredSettle = undefined;
2911
- settleDeferredIfDrained();
2894
+ await settleDeferredIfDrained();
2912
2895
  }
2913
2896
  }
2914
2897
  else if (!session.cancelled &&
@@ -3391,7 +3374,7 @@ export class ClaudeAcpAgent {
3391
3374
  // the map in that case).
3392
3375
  if (!isAutonomousResult) {
3393
3376
  recordResultForOrphanCommands();
3394
- ensureActiveTurn(message.user_message_uuid);
3377
+ await ensureActiveTurn(message.user_message_uuid);
3395
3378
  // Once the submitted goal command has produced its own result,
3396
3379
  // no older runtime update can still precede it in the ordered
3397
3380
  // SDK stream. Stop suppressing updates even when this runtime
@@ -3561,7 +3544,7 @@ export class ClaudeAcpAgent {
3561
3544
  // failActive a live turn (the held one, or the user's next
3562
3545
  // prompt) whose own result recorded a different outcome.
3563
3546
  if (isAutonomousResult) {
3564
- settleDeferredIfDrained();
3547
+ await settleDeferredIfDrained();
3565
3548
  // With no turn in flight OR QUEUED (also after the settle
3566
3549
  // above), the stretch holds only autonomous prose — close
3567
3550
  // it, so a replayed next prompt isn't silently suppressed by
@@ -3636,7 +3619,7 @@ export class ClaudeAcpAgent {
3636
3619
  return;
3637
3620
  }
3638
3621
  stopReason = "cancelled";
3639
- settleOrDefer(turnOutcome(session, "cancelled"));
3622
+ await settleOrDefer(turnOutcome(session, "cancelled"));
3640
3623
  break;
3641
3624
  }
3642
3625
  if (pendingExitPlanModeInterruption) {
@@ -3668,7 +3651,7 @@ export class ClaudeAcpAgent {
3668
3651
  // settling it out from under them would strand their output
3669
3652
  // and permission requests out-of-turn (issue #866's deadlock,
3670
3653
  // through the refusal lane).
3671
- settleOrDefer(turnOutcome(session, "refusal"));
3654
+ await settleOrDefer(turnOutcome(session, "refusal"));
3672
3655
  break;
3673
3656
  }
3674
3657
  // A priority:'now' steer can make the SDK terminate the
@@ -3679,7 +3662,7 @@ export class ClaudeAcpAgent {
3679
3662
  if (message.is_error &&
3680
3663
  isSteering(session.activeTurn) &&
3681
3664
  session.activeTurn.steeredEchoes.size > 0) {
3682
- settleOrDefer(turnOutcome(session, "end_turn"));
3665
+ await settleOrDefer(turnOutcome(session, "end_turn"));
3683
3666
  break;
3684
3667
  }
3685
3668
  if (!message.is_error && lastAssistantModel !== null) {
@@ -3817,7 +3800,7 @@ export class ClaudeAcpAgent {
3817
3800
  await compaction.reset();
3818
3801
  }
3819
3802
  if (!session.cancelled) {
3820
- settleOrDefer(turnOutcome(session, stopReason));
3803
+ await settleOrDefer(turnOutcome(session, stopReason));
3821
3804
  }
3822
3805
  }
3823
3806
  finally {
@@ -4011,7 +3994,7 @@ export class ClaudeAcpAgent {
4011
3994
  session.owedTrailingIdles++;
4012
3995
  // Before activateTurn resets the accumulator, so the
4013
3996
  // usage still belongs to the cancelled turn.
4014
- settleActive(turnOutcome(session, "cancelled"));
3997
+ await settleActive(turnOutcome(session, "cancelled"));
4015
3998
  }
4016
3999
  else if (isHeldOpen(session.activeTurn)) {
4017
4000
  // A turn held open for its background subagents (see
@@ -4021,7 +4004,7 @@ export class ClaudeAcpAgent {
4021
4004
  // subagent, but it must not rewrite the stop reason
4022
4005
  // either. Its trailing-idle debt stands and is absorbed
4023
4006
  // when the drain idle eventually arrives.
4024
- settleActive(session.activeTurn.deferredSettle);
4007
+ await settleActive(session.activeTurn.deferredSettle);
4025
4008
  }
4026
4009
  else if (isSteering(session.activeTurn) &&
4027
4010
  session.activeTurn.steeredSettle !== undefined) {
@@ -4037,10 +4020,10 @@ export class ClaudeAcpAgent {
4037
4020
  // turn and false-fails it (issue #825). Harmless if it
4038
4021
  // never comes: the debt absorbs one future idle.
4039
4022
  session.owedTrailingIdles++;
4040
- settleActive(session.activeTurn.steeredSettle);
4023
+ await settleActive(session.activeTurn.steeredSettle);
4041
4024
  }
4042
4025
  else {
4043
- settleActive(turnOutcome(session, "end_turn"));
4026
+ await settleActive(turnOutcome(session, "end_turn"));
4044
4027
  }
4045
4028
  }
4046
4029
  // Unlike the no-result teardown lanes, this hand-off must
@@ -4513,7 +4496,7 @@ export class ClaudeAcpAgent {
4513
4496
  if (session.turnQueue) {
4514
4497
  for (const turn of session.turnQueue) {
4515
4498
  if (turn !== session.activeTurn && !turn.settled) {
4516
- this.finishFileChangeAudit(session, turn, "cancelled");
4499
+ session.fileChangeReporter?.finish(turn.fileChangeReport, "cancelled");
4517
4500
  turn.settled = true;
4518
4501
  // Deliberately no `usage`: a queued turn never ran, so the session
4519
4502
  // accumulator (the active turn's tally) is not its spend.
@@ -4584,20 +4567,18 @@ export class ClaudeAcpAgent {
4584
4567
  session.pendingEmptyInterruptionDiagnosticCommands.add(turn.promptUuid);
4585
4568
  }
4586
4569
  }
4587
- // A deferred active turn (see Turn.deferredSettle) already has its
4588
- // result — it is only held open for its background subagents, which the
4589
- // interrupt below tears down. Settle it "cancelled" NOW: during the hold
4590
- // the session is typically already in state idle (the CLI's trailer
4591
- // fired at the result), so the interrupt may produce no fresh idle for
4592
- // the consumer's cancelled-settle path to run on, and the cancel would
4593
- // otherwise stall until the force-cancel backstop. Any outstanding
4594
- // trailer debt is absorbed by the idle handler when its idle does come.
4595
- // The turn's own usage snapshot is reported per the cancelled-usage
4596
- // contract (issue #844).
4570
+ // A deferred active turn (see Turn.deferredSettle) already has its result
4571
+ // and is only held open for subagents. A settling turn likewise has its
4572
+ // result but is awaiting the bounded checkpoint preview. Settle either one
4573
+ // "cancelled" NOW: the consumer cannot process the interrupt's trailing
4574
+ // idle while blocked in that preview, and a held turn may already be idle.
4575
+ // The captured outcome preserves usage and metadata (issue #844), while
4576
+ // reporter state makes a late checkpoint response harmless.
4597
4577
  {
4598
4578
  const active = session.activeTurn;
4599
- if (isHeldOpen(active)) {
4600
- this.finishFileChangeAudit(session, active, "cancelled");
4579
+ const pendingOutcome = active?.deferredSettle ?? active?.settlingOutcome;
4580
+ if (active && pendingOutcome && (isHeldOpen(active) || active.settling)) {
4581
+ session.fileChangeReporter?.finish(active.fileChangeReport, "cancelled");
4601
4582
  active.settled = true;
4602
4583
  // Mirror settleActive's invariants (it is consumer-scoped and
4603
4584
  // unreachable from here): disarm the backstop — none should be
@@ -4635,8 +4616,8 @@ export class ClaudeAcpAgent {
4635
4616
  // from it here.
4636
4617
  active.resolve({
4637
4618
  stopReason: "cancelled",
4638
- usage: active.deferredSettle.usage,
4639
- ...(active.deferredSettle._meta ? { _meta: active.deferredSettle._meta } : {}),
4619
+ usage: pendingOutcome.usage,
4620
+ ...(pendingOutcome._meta ? { _meta: pendingOutcome._meta } : {}),
4640
4621
  });
4641
4622
  }
4642
4623
  }
@@ -4918,13 +4899,6 @@ export class ClaudeAcpAgent {
4918
4899
  })
4919
4900
  : undefined;
4920
4901
  let replayTurnId;
4921
- // Stop-hook additionalContext is persisted as an internal user message.
4922
- // Once that marker (or the internal tool itself) appears, suppress the
4923
- // whole audit exchange until its tool result. This also hides a disobedient
4924
- // model's separate prose message, while an ordinary next user prompt safely
4925
- // ends an incomplete audit lane.
4926
- let replayingFileChangeAudit = false;
4927
- const replayFileChangeAuditToolUseIds = new Set();
4928
4902
  const nativeReplayEnabled = clientSupportsSubagents(this.clientCapabilities);
4929
4903
  const replayCompactionUpdates = clientSupportsCompactionUpdates(this.clientCapabilities);
4930
4904
  const replayTerminalStates = new Map();
@@ -5076,57 +5050,6 @@ export class ClaudeAcpAgent {
5076
5050
  if (content === null)
5077
5051
  continue;
5078
5052
  }
5079
- const auditBlocks = Array.isArray(content)
5080
- ? content.filter((block) => typeof block === "object" && block !== null)
5081
- : [];
5082
- const hasFileChangeAuditMarker = (typeof content === "string" && containsFileChangeAuditMarker(content)) ||
5083
- auditBlocks.some((block) => typeof block.text === "string" && containsFileChangeAuditMarker(block.text));
5084
- const fileChangeAuditToolUseIds = auditBlocks.flatMap((block) => (block.type === "tool_use" ||
5085
- block.type === "server_tool_use" ||
5086
- block.type === "mcp_tool_use") &&
5087
- typeof block.name === "string" &&
5088
- isFileChangeAuditTool(block.name) &&
5089
- typeof block.id === "string"
5090
- ? [block.id]
5091
- : []);
5092
- const replayMessageRole = message.message
5093
- ?.role;
5094
- if (hasFileChangeAuditMarker || fileChangeAuditToolUseIds.length > 0) {
5095
- replayingFileChangeAudit = true;
5096
- for (const toolUseId of fileChangeAuditToolUseIds) {
5097
- replayFileChangeAuditToolUseIds.add(toolUseId);
5098
- }
5099
- continue;
5100
- }
5101
- if (replayingFileChangeAudit) {
5102
- const toolResultIds = auditBlocks.flatMap((block) => (block.type === "tool_result" || block.type === "mcp_tool_result") &&
5103
- typeof block.tool_use_id === "string"
5104
- ? [block.tool_use_id]
5105
- : []);
5106
- let completedReport = false;
5107
- for (const toolUseId of toolResultIds) {
5108
- if (replayFileChangeAuditToolUseIds.delete(toolUseId))
5109
- completedReport = true;
5110
- }
5111
- if (completedReport && replayFileChangeAuditToolUseIds.size === 0) {
5112
- replayingFileChangeAudit = false;
5113
- continue;
5114
- }
5115
- // A denied attempt to call another tool is still part of the hidden
5116
- // lane. Its result must not end replay suppression before the report.
5117
- if (toolResultIds.length > 0) {
5118
- continue;
5119
- }
5120
- // The next real user prompt is already represented by the client and
5121
- // starts a new turn; do not let a missing audit result hide it or the
5122
- // rest of the replay.
5123
- if (replayMessageRole === "user") {
5124
- replayingFileChangeAudit = false;
5125
- }
5126
- else {
5127
- continue;
5128
- }
5129
- }
5130
5053
  // Claude persists the retained summary as a user message framed with
5131
5054
  // continuation instructions for the model. Clients on the compaction
5132
5055
  // contract get it materialized as the completed compaction entity at
@@ -5309,26 +5232,6 @@ export class ClaudeAcpAgent {
5309
5232
  message: "Session not found",
5310
5233
  };
5311
5234
  }
5312
- const fileChangeAudit = session.activeTurn?.fileChangeAudit;
5313
- if (isFileChangeAuditReportPhase(fileChangeAudit)) {
5314
- // The hidden continuation is an audit-only lane: it may submit the
5315
- // wrapper-owned report, but it must not run another command after the
5316
- // user-visible answer has already completed.
5317
- if (isFileChangeAuditTool(toolName) && fileChangeAudit?.phase === "collecting") {
5318
- return { behavior: "allow", updatedInput: toolInput };
5319
- }
5320
- return {
5321
- behavior: "deny",
5322
- message: "Only the internal file-change report is allowed during the audit.",
5323
- };
5324
- }
5325
- // The tool is intentionally unusable outside a negotiated audit turn.
5326
- if (isFileChangeAuditTool(toolName)) {
5327
- return {
5328
- behavior: "deny",
5329
- message: "No file-change report was requested for this turn.",
5330
- };
5331
- }
5332
5235
  // When the tool call originates inside a subagent, attribute the eagerly
5333
5236
  // emitted tool_call (and the permission request itself) to the Agent/Task
5334
5237
  // tool call that spawned the subagent, mirroring the streamed subagent
@@ -6043,18 +5946,17 @@ export class ClaudeAcpAgent {
6043
5946
  // below) so the TaskCreated/TaskCompleted hook callbacks can close over
6044
5947
  // the same Map that the streaming message handler will read from.
6045
5948
  const taskState = new Map();
6046
- // Resolve every workspace root once. The hidden report tool uses this same
6047
- // set for lexical path validation, and the SDK receives it below.
5949
+ // Resolve every workspace root once. The native checkpoint report uses
5950
+ // this same set for lexical path validation, and the SDK receives it below.
6048
5951
  const acpAdditionalDirectories = params.additionalDirectories ?? sessionMeta?.additionalRoots ?? [];
6049
5952
  const additionalDirectories = [
6050
5953
  ...(userProvidedOptions?.additionalDirectories ?? []),
6051
5954
  ...acpAdditionalDirectories,
6052
5955
  ];
6053
- const fileChangeAuditSupport = supportsAgentFileChangeReport(this.clientCapabilities)
6054
- ? createFileChangeAuditSupport({
5956
+ const fileChangeReporter = supportsAgentFileChangeReport(this.clientCapabilities)
5957
+ ? createNativeFileChangeReporter({
6055
5958
  cwd: params.cwd,
6056
5959
  additionalDirectories,
6057
- getActiveState: () => this.sessions[sessionId]?.activeTurn?.fileChangeAudit,
6058
5960
  publish: async (result) => {
6059
5961
  await this.client.sessionUpdate({
6060
5962
  sessionId,
@@ -6119,6 +6021,10 @@ export class ClaudeAcpAgent {
6119
6021
  settingSources: ["user", "project", "local"],
6120
6022
  ...(thinking !== undefined && { thinking }),
6121
6023
  ...userProvidedOptions,
6024
+ // Claude Code uses the same checkpoint store for /rewind. Enable it only
6025
+ // for clients that negotiated per-turn file-change reports; this avoids
6026
+ // snapshot I/O for every other session.
6027
+ ...(fileChangeReporter ? { enableFileCheckpointing: true } : {}),
6122
6028
  ...(settings && { settings }),
6123
6029
  env,
6124
6030
  // Override certain fields that must be controlled by ACP
@@ -6128,9 +6034,6 @@ export class ClaudeAcpAgent {
6128
6034
  mcpServers: {
6129
6035
  ...(userProvidedOptions?.mcpServers || {}),
6130
6036
  ...mcpServers,
6131
- ...(fileChangeAuditSupport
6132
- ? { [FILE_CHANGE_AUDIT_SERVER_NAME]: fileChangeAuditSupport.mcpServer }
6133
- : {}),
6134
6037
  },
6135
6038
  allowDangerouslySkipPermissions: allowBypass,
6136
6039
  permissionMode: initialPermissionMode,
@@ -6163,14 +6066,6 @@ export class ClaudeAcpAgent {
6163
6066
  tools,
6164
6067
  hooks: {
6165
6068
  ...userProvidedOptions?.hooks,
6166
- ...(fileChangeAuditSupport
6167
- ? {
6168
- PreToolUse: [
6169
- ...(userProvidedOptions?.hooks?.PreToolUse || []),
6170
- { hooks: [fileChangeAuditSupport.preToolUseHook] },
6171
- ],
6172
- }
6173
- : {}),
6174
6069
  PostToolUse: [
6175
6070
  ...(userProvidedOptions?.hooks?.PostToolUse || []),
6176
6071
  {
@@ -6241,14 +6136,6 @@ export class ClaudeAcpAgent {
6241
6136
  ],
6242
6137
  },
6243
6138
  ],
6244
- ...(fileChangeAuditSupport
6245
- ? {
6246
- Stop: [
6247
- ...(userProvidedOptions?.hooks?.Stop || []),
6248
- { hooks: [fileChangeAuditSupport.stopHook] },
6249
- ],
6250
- }
6251
- : {}),
6252
6139
  TaskCreated: [
6253
6140
  ...(userProvidedOptions?.hooks?.TaskCreated || []),
6254
6141
  {
@@ -6504,8 +6391,7 @@ export class ClaudeAcpAgent {
6504
6391
  sessionFailureState: createSessionFailureState(),
6505
6392
  claudeSubscriptionGuard,
6506
6393
  accountKind: fromAccountInfo(initializationResult.account)?.kind,
6507
- fileChangeReportRequestIds: new Set(),
6508
- fileChangeAuditSupport,
6394
+ fileChangeReporter,
6509
6395
  };
6510
6396
  timing.phase("register");
6511
6397
  return {
@@ -7185,7 +7071,7 @@ function isTaskTool(toolName) {
7185
7071
  * permission-surfaced tool_call for them (see `ensureToolCallEmitted`) must be
7186
7072
  * resolved explicitly at tool_result time. */
7187
7073
  function shouldEmitToolCall(toolName) {
7188
- return toolName !== "TodoWrite" && !isTaskTool(toolName) && !isFileChangeAuditTool(toolName);
7074
+ return toolName !== "TodoWrite" && !isTaskTool(toolName);
7189
7075
  }
7190
7076
  /** Build the Claude Code-specific metadata for a tool call. Bash descriptions
7191
7077
  * are kept out of ACP's standard `title`, which clients may use as the shell
@@ -7355,7 +7241,7 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7355
7241
  const registerHooks = options?.registerHooks !== false;
7356
7242
  const supportsTerminalOutput = options?.clientCapabilities?._meta?.["terminal_output"] === true;
7357
7243
  if (typeof content === "string") {
7358
- if (content.length === 0 || containsFileChangeAuditMarker(content)) {
7244
+ if (content.length === 0) {
7359
7245
  return [];
7360
7246
  }
7361
7247
  const update = {
@@ -7389,13 +7275,6 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7389
7275
  // Unlike `tool_use_result`, entries carry their own tool_use_id, so batched
7390
7276
  // messages need no single-block guard.
7391
7277
  const toolResultMeta = parseToolResultMeta(options?.toolResultMeta);
7392
- // A report-phase assistant message may contain a short text preface and the
7393
- // internal tool call in the same content array. Hide the whole message, not
7394
- // only the tool block, so it stays absent on session replay as well as live.
7395
- const containsFileChangeAuditToolUse = content.some((chunk) => (chunk.type === "tool_use" ||
7396
- chunk.type === "server_tool_use" ||
7397
- chunk.type === "mcp_tool_use") &&
7398
- isFileChangeAuditTool(chunk.name));
7399
7278
  const output = [];
7400
7279
  // Only handle the first chunk for streaming; extend as needed for batching
7401
7280
  for (const chunk of content) {
@@ -7403,9 +7282,7 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7403
7282
  switch (chunk.type) {
7404
7283
  case "text":
7405
7284
  case "text_delta": {
7406
- if (chunk.text &&
7407
- !containsFileChangeAuditToolUse &&
7408
- !containsFileChangeAuditMarker(chunk.text)) {
7285
+ if (chunk.text) {
7409
7286
  update = {
7410
7287
  sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
7411
7288
  content: {
@@ -7417,22 +7294,21 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7417
7294
  break;
7418
7295
  }
7419
7296
  case "image":
7420
- if (!containsFileChangeAuditToolUse)
7421
- update = {
7422
- sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
7423
- content: {
7424
- type: "image",
7425
- data: chunk.source.type === "base64" ? chunk.source.data : "",
7426
- mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
7427
- uri: chunk.source.type === "url" ? chunk.source.url : undefined,
7428
- },
7429
- };
7297
+ update = {
7298
+ sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
7299
+ content: {
7300
+ type: "image",
7301
+ data: chunk.source.type === "base64" ? chunk.source.data : "",
7302
+ mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
7303
+ uri: chunk.source.type === "url" ? chunk.source.url : undefined,
7304
+ },
7305
+ };
7430
7306
  break;
7431
7307
  case "thinking":
7432
7308
  case "thinking_delta": {
7433
7309
  // Recent models default `thinking.display` to "omitted", which streams
7434
7310
  // signature-only thinking blocks whose text is empty.
7435
- if (chunk.thinking && !containsFileChangeAuditToolUse) {
7311
+ if (chunk.thinking) {
7436
7312
  update = {
7437
7313
  sessionUpdate: "agent_thought_chunk",
7438
7314
  content: {
@@ -7448,11 +7324,7 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7448
7324
  case "mcp_tool_use": {
7449
7325
  const alreadyCached = chunk.id in toolUseCache;
7450
7326
  toolUseCache[chunk.id] = chunk;
7451
- if (isFileChangeAuditTool(chunk.name)) {
7452
- // Wrapper-owned audit protocol: never surface or register generic
7453
- // PostToolUse callbacks for the internal tool.
7454
- }
7455
- else if (chunk.name === "TodoWrite") {
7327
+ if (chunk.name === "TodoWrite") {
7456
7328
  // @ts-expect-error - sometimes input is empty object or undefined
7457
7329
  if (Array.isArray(chunk.input?.todos)) {
7458
7330
  update = {
@@ -7580,10 +7452,6 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
7580
7452
  logger.error(`[claude-agent-acp] Got a tool result for tool use that wasn't tracked: ${chunk.tool_use_id}`);
7581
7453
  break;
7582
7454
  }
7583
- if (isFileChangeAuditTool(toolUse.name)) {
7584
- delete toolUseCache[chunk.tool_use_id];
7585
- break;
7586
- }
7587
7455
  // A permission request may have surfaced a plan-rendered (TodoWrite) or
7588
7456
  // suppressed (Task*) tool as a real tool_call so the request referenced
7589
7457
  // a tool call the client knows about (see `ensureToolCallEmitted`,
@@ -1,22 +1,19 @@
1
- import { type HookCallback, type McpSdkServerConfigWithInstance } from "@anthropic-ai/claude-agent-sdk";
1
+ import type { Query } from "@anthropic-ai/claude-agent-sdk";
2
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
3
  export declare const AGENT_FILE_CHANGE_REPORT_MAX_BYTES: number;
7
- export type FileChangeAuditTurnState = {
4
+ export declare const AGENT_FILE_CHANGE_REPORT_TIMEOUT_MS = 2000;
5
+ export type FileChangeReportTurnState = {
8
6
  requestId: string;
9
7
  phase: "requested" | "collecting" | "finished";
10
8
  };
11
- export type FileChangeAuditWorkspace = {
9
+ export type NativeFileChangeReportTurn = {
10
+ promptUuid: string;
11
+ fileChangeReport?: FileChangeReportTurnState;
12
+ };
13
+ export type FileChangeReportWorkspace = {
12
14
  cwd: string;
13
15
  additionalDirectories: string[];
14
16
  };
15
- export type AgentFileChangeReport = {
16
- paths: string[];
17
- complete: boolean;
18
- uncertainty?: string;
19
- };
20
17
  export type AgentFileChangeReportResult = {
21
18
  version: 1;
22
19
  requestId: string;
@@ -25,32 +22,26 @@ export type AgentFileChangeReportResult = {
25
22
  paths: string[];
26
23
  declaredComplete: boolean;
27
24
  truncated: boolean;
28
- uncertainty?: string;
29
25
  } | {
30
26
  status: "unavailable";
31
27
  reason: FileChangeReportUnavailableReason;
32
28
  });
33
29
  export type FileChangeReportUnavailableReason = "cancelled" | "timeout" | "invalidOutput" | "notReported" | "providerError";
34
- type FileChangeAuditSupportOptions = {
30
+ type NativeFileChangeReporterOptions = {
35
31
  cwd: string;
36
32
  additionalDirectories: string[];
37
- getActiveState: () => FileChangeAuditTurnState | undefined;
38
33
  publish: (result: AgentFileChangeReportResult) => Promise<void>;
39
34
  logError: (message: string) => void;
35
+ timeoutMs?: number;
40
36
  };
41
- export type FileChangeAuditSupport = {
42
- mcpServer: McpSdkServerConfigWithInstance;
43
- preToolUseHook: HookCallback;
44
- stopHook: HookCallback;
45
- finishUnavailable: (state: FileChangeAuditTurnState, reason: FileChangeReportUnavailableReason) => Promise<void>;
37
+ export type NativeFileChangeReporter = {
38
+ request(meta: unknown): FileChangeReportTurnState | undefined;
39
+ report(turn: NativeFileChangeReportTurn | null | undefined, query: Pick<Query, "rewindFiles">): Promise<void>;
40
+ finish(state: FileChangeReportTurnState | undefined, reason: FileChangeReportUnavailableReason): void;
46
41
  };
47
42
  export declare function agentFileChangeReportRequestId(meta: unknown): string | undefined;
48
43
  export declare function supportsAgentFileChangeReport(capabilities: unknown): boolean;
49
44
  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;
45
+ export declare function createNativeFileChangeReporter(options: NativeFileChangeReporterOptions): NativeFileChangeReporter;
55
46
  export {};
56
47
  //# sourceMappingURL=file-change-audit.d.ts.map
@@ -1 +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;AAMxC,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;AAE9E,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,CAE5E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,2BAA2B,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED,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"}
1
+ {"version":3,"file":"file-change-audit.d.ts","sourceRoot":"","sources":["../src/file-change-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,gCAAgC,CAAC;AAK/E,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAI3E,eAAO,MAAM,kCAAkC,QAAa,CAAC;AAC7D,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAGzD,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC,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;CACpB,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;AAE9E,KAAK,+BAA+B,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,yBAAyB,GAAG,SAAS,CAAC;IAC9D,MAAM,CACJ,IAAI,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,EACnD,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CACJ,KAAK,EAAE,yBAAyB,GAAG,SAAS,EAC5C,MAAM,EAAE,iCAAiC,GACxC,IAAI,CAAC;CACT,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBhF;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAE5E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,2BAA2B,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,wBAAwB,CA4F1B"}
@@ -1,32 +1,12 @@
1
- import { createSdkMcpServer, } from "@anthropic-ai/claude-agent-sdk";
2
1
  import * as fs from "node:fs";
3
2
  import * as path from "node:path";
4
- import { z } from "zod";
5
3
  import { airExtensionMeta, clientSupportsAirCapability, withAirMeta } from "./air-extension.js";
6
4
  export const AGENT_FILE_CHANGE_REPORT_CAPABILITY = "agentFileChangeReport";
7
- export const FILE_CHANGE_AUDIT_SERVER_NAME = "claude_agent_acp";
8
- export const FILE_CHANGE_AUDIT_TOOL_NAME = "report_changed_files";
9
- export const FILE_CHANGE_AUDIT_WIRE_TOOL_NAME = `mcp__${FILE_CHANGE_AUDIT_SERVER_NAME}__${FILE_CHANGE_AUDIT_TOOL_NAME}`;
10
- const FILE_CHANGE_AUDIT_MARKER = "claude-agent-acp-file-change-audit";
11
5
  const MAX_REPORTED_PATHS = 1024;
12
6
  const MAX_REPORTED_PATH_LENGTH = 4096;
13
7
  export const AGENT_FILE_CHANGE_REPORT_MAX_BYTES = 256 * 1024;
8
+ export const AGENT_FILE_CHANGE_REPORT_TIMEOUT_MS = 2_000;
14
9
  const REQUEST_ID_PATTERN = /^[A-Za-z0-9._:-]{1,128}$/;
15
- const reportInputSchema = {
16
- paths: z
17
- .array(z.string())
18
- .describe("Workspace file paths changed during this turn. Use absolute paths or paths relative to cwd."),
19
- complete: z
20
- .boolean()
21
- .describe("True only when paths contains every workspace file changed during this turn."),
22
- uncertainty: z
23
- .string()
24
- .trim()
25
- .min(1)
26
- .max(2000)
27
- .optional()
28
- .describe("Why the report may be incomplete or uncertain."),
29
- };
30
10
  export function agentFileChangeReportRequestId(meta) {
31
11
  const air = airExtensionMeta(meta);
32
12
  const request = air?.agentFileChangeReportRequest;
@@ -50,160 +30,90 @@ export function supportsAgentFileChangeReport(capabilities) {
50
30
  export function agentFileChangeReportMeta(result) {
51
31
  return withAirMeta(undefined, AGENT_FILE_CHANGE_REPORT_CAPABILITY, result);
52
32
  }
53
- export function createFileChangeAuditTurnState(requestId) {
54
- return {
55
- requestId,
56
- phase: "requested",
57
- };
58
- }
59
- export function isFileChangeAuditReportPhase(state) {
60
- return state?.phase === "collecting" || state?.phase === "finished";
61
- }
62
- export function isFileChangeAuditTool(toolName) {
63
- return toolName === FILE_CHANGE_AUDIT_WIRE_TOOL_NAME;
64
- }
65
- export function containsFileChangeAuditMarker(text) {
66
- return text.includes(`<${FILE_CHANGE_AUDIT_MARKER}>`);
67
- }
68
- export function createFileChangeAuditSupport(options) {
33
+ export function createNativeFileChangeReporter(options) {
69
34
  const workspace = normalizeWorkspace(options.cwd, options.additionalDirectories);
70
- const finishUnavailable = async (state, reason) => {
71
- // Claim the terminal outcome before the first await. The report tool, a
72
- // Stop hook, cancellation, and stream teardown can race, but only the
73
- // winner may publish for this request id. Publication remains fail-open:
74
- // an audit transport failure must never hold the user prompt open.
35
+ const timeoutMs = options.timeoutMs ?? AGENT_FILE_CHANGE_REPORT_TIMEOUT_MS;
36
+ const requestIds = new Set();
37
+ const publish = async (state, result) => {
75
38
  if (state.phase === "finished")
76
39
  return;
77
40
  state.phase = "finished";
78
41
  try {
79
- await options.publish({
80
- version: 1,
81
- requestId: state.requestId,
82
- status: "unavailable",
83
- reason,
84
- });
42
+ await options.publish(result);
85
43
  }
86
44
  catch (error) {
87
- options.logError(`Failed to publish unavailable report ${state.requestId}: ${error}`);
45
+ options.logError(`Failed to publish file-change report ${state.requestId}: ${error}`);
88
46
  }
89
47
  };
90
- const tool = {
91
- name: FILE_CHANGE_AUDIT_TOOL_NAME,
92
- description: "Internal audit tool. Call it only when a stop-hook message explicitly requests the file-change audit.",
93
- inputSchema: reportInputSchema,
94
- _meta: {
95
- "anthropic/alwaysLoad": true,
96
- "claude/endTurn": true,
97
- },
98
- handler: async (report) => {
99
- const state = options.getActiveState();
100
- if (!state || state.phase !== "collecting") {
101
- return {
102
- isError: true,
103
- content: [
104
- {
105
- type: "text",
106
- text: `<${FILE_CHANGE_AUDIT_MARKER}>No file-change audit is active.</${FILE_CHANGE_AUDIT_MARKER}>`,
107
- },
108
- ],
109
- };
48
+ const finishUnavailable = async (state, reason) => {
49
+ await publish(state, {
50
+ version: 1,
51
+ requestId: state.requestId,
52
+ status: "unavailable",
53
+ reason,
54
+ });
55
+ };
56
+ const report = async (turn, query) => {
57
+ const state = turn?.fileChangeReport;
58
+ if (!state || state.phase !== "requested")
59
+ return;
60
+ state.phase = "collecting";
61
+ let timer;
62
+ const previewPromise = query.rewindFiles(turn.promptUuid, { dryRun: true });
63
+ // A timed-out control request may still settle later. Observe it so a late
64
+ // rejection cannot become unhandled, but never let it publish a second terminal.
65
+ void previewPromise.catch(() => { });
66
+ try {
67
+ const preview = await Promise.race([
68
+ previewPromise,
69
+ new Promise((resolve) => {
70
+ timer = setTimeout(() => resolve(null), timeoutMs);
71
+ timer.unref?.();
72
+ }),
73
+ ]);
74
+ if (preview === null) {
75
+ await finishUnavailable(state, "timeout");
76
+ return;
77
+ }
78
+ if (!preview.canRewind || !Array.isArray(preview.filesChanged)) {
79
+ await finishUnavailable(state, "invalidOutput");
80
+ return;
110
81
  }
111
- // Flip before publishing: a client transport failure must not make the
112
- // model retry the report and produce duplicates. Delivery is audit-only
113
- // and fail-open; the normal turn must still finish.
114
- state.phase = "finished";
115
- const normalized = normalizeReportedPaths(report.paths, workspace);
116
- const result = fitReportedAgentFileChangeReport({
82
+ const normalized = normalizeReportedPaths(preview.filesChanged, workspace);
83
+ await publish(state, fitReportedAgentFileChangeReport({
117
84
  version: 1,
118
85
  requestId: state.requestId,
119
86
  status: "reported",
120
87
  paths: normalized.paths,
121
- declaredComplete: report.complete && !normalized.truncated,
88
+ // Checkpoints cover Claude file tools, but not every mutation source
89
+ // (notably Bash and most subagents), so this list is never exhaustive.
90
+ declaredComplete: false,
122
91
  truncated: normalized.truncated,
123
- ...(report.uncertainty ? { uncertainty: report.uncertainty } : {}),
124
- });
125
- try {
126
- await options.publish(result);
127
- }
128
- catch (error) {
129
- options.logError(`Failed to publish file-change report ${state.requestId}: ${error}`);
130
- }
131
- return {
132
- content: [
133
- {
134
- type: "text",
135
- text: `<${FILE_CHANGE_AUDIT_MARKER}>File-change audit recorded.</${FILE_CHANGE_AUDIT_MARKER}>`,
136
- },
137
- ],
138
- structuredContent: result,
139
- };
140
- },
141
- };
142
- // canUseTool is not guaranteed to run for tools that the current permission
143
- // mode auto-allows (notably bypassPermissions). A PreToolUse hook is the
144
- // enforcement boundary that keeps the hidden continuation read-only in every
145
- // mode: it can submit the report, but cannot inspect or mutate more files.
146
- const preToolUseHook = async (input) => {
147
- if (input.hook_event_name !== "PreToolUse")
148
- return {};
149
- const state = options.getActiveState();
150
- const isReportTool = isFileChangeAuditTool(input.tool_name);
151
- if (!isReportTool && !isFileChangeAuditReportPhase(state))
152
- return {};
153
- const allowReport = state?.phase === "collecting" && isReportTool;
154
- return {
155
- hookSpecificOutput: {
156
- hookEventName: "PreToolUse",
157
- permissionDecision: allowReport ? "allow" : "deny",
158
- ...(!allowReport
159
- ? {
160
- permissionDecisionReason: "Only the internal file-change report is allowed during the audit.",
161
- }
162
- : {}),
163
- },
164
- };
165
- };
166
- const stopHook = async (input) => {
167
- if (input.hook_event_name !== "Stop")
168
- return {};
169
- const state = options.getActiveState();
170
- if (!state || state.phase === "finished")
171
- return {};
172
- // A Stop can be only a pause while a background generator is still
173
- // running. Keep the request pending so a later final Stop can include its
174
- // writes instead of declaring a prematurely complete path set.
175
- if (state.phase === "requested" && (input.background_tasks?.length ?? 0) > 0)
176
- return {};
177
- if (state.phase === "collecting" || input.stop_hook_active) {
178
- await finishUnavailable(state, "notReported");
179
- return {};
92
+ }));
93
+ }
94
+ catch (error) {
95
+ options.logError(`Failed to inspect Claude file checkpoint ${turn.promptUuid}: ${error}`);
96
+ await finishUnavailable(state, "providerError");
97
+ }
98
+ finally {
99
+ if (timer)
100
+ clearTimeout(timer);
180
101
  }
181
- // Set the phase before returning the continuation so every following SDK
182
- // message is hidden even if the next stream starts immediately.
183
- state.phase = "collecting";
184
- return {
185
- hookSpecificOutput: {
186
- hookEventName: "Stop",
187
- additionalContext: `<${FILE_CHANGE_AUDIT_MARKER}>` +
188
- `Before stopping, call ${FILE_CHANGE_AUDIT_WIRE_TOOL_NAME} exactly once. ` +
189
- "Report every workspace file changed during this user turn, including files changed " +
190
- "by commands, generators, version-control operations, and child processes. " +
191
- "Do not call any other tool and do not emit user-facing prose. " +
192
- "Set complete to false and explain uncertainty when you are not sure the list is complete." +
193
- `</${FILE_CHANGE_AUDIT_MARKER}>`,
194
- },
195
- };
196
102
  };
197
103
  return {
198
- mcpServer: createSdkMcpServer({
199
- name: FILE_CHANGE_AUDIT_SERVER_NAME,
200
- version: "1.0.0",
201
- tools: [tool],
202
- alwaysLoad: true,
203
- }),
204
- preToolUseHook,
205
- stopHook,
206
- finishUnavailable,
104
+ request(meta) {
105
+ const requestId = agentFileChangeReportRequestId(meta);
106
+ if (!requestId || requestIds.has(requestId))
107
+ return undefined;
108
+ requestIds.add(requestId);
109
+ return { requestId, phase: "requested" };
110
+ },
111
+ report,
112
+ finish(state, reason) {
113
+ if (!state)
114
+ return;
115
+ void finishUnavailable(state, reason);
116
+ },
207
117
  };
208
118
  }
209
119
  function normalizeWorkspace(cwd, additionalDirectories) {
@@ -230,7 +140,8 @@ function normalizeReportedPaths(reportedPaths, workspace) {
230
140
  let totalBytes = 0;
231
141
  let truncated = false;
232
142
  for (const reportedPath of reportedPaths) {
233
- if (reportedPath.trim().length === 0 ||
143
+ if (typeof reportedPath !== "string" ||
144
+ reportedPath.trim().length === 0 ||
234
145
  reportedPath.length > MAX_REPORTED_PATH_LENGTH ||
235
146
  hasControlCharacter(reportedPath)) {
236
147
  truncated = true;
@@ -257,9 +168,8 @@ function normalizeReportedPaths(reportedPaths, workspace) {
257
168
  truncated = true;
258
169
  continue;
259
170
  }
260
- if (seen.has(key)) {
171
+ if (seen.has(key))
261
172
  continue;
262
- }
263
173
  const pathBytes = Buffer.byteLength(normalized, "utf8");
264
174
  if (result.length >= MAX_REPORTED_PATHS ||
265
175
  totalBytes + pathBytes > AGENT_FILE_CHANGE_REPORT_MAX_BYTES) {
@@ -272,14 +182,11 @@ function normalizeReportedPaths(reportedPaths, workspace) {
272
182
  }
273
183
  return { paths: result, truncated };
274
184
  }
275
- /** Keep the complete serialized report within AIR's wire limit. */
276
185
  function fitReportedAgentFileChangeReport(report) {
277
186
  const paths = [...report.paths];
278
187
  let fitted = report;
279
188
  while (Buffer.byteLength(JSON.stringify(fitted), "utf8") > AGENT_FILE_CHANGE_REPORT_MAX_BYTES) {
280
189
  if (paths.length === 0) {
281
- // The fixed fields and bounded uncertainty are far below the cap. Keep
282
- // this loud if the wire contract changes without updating this helper.
283
190
  throw new Error("Agent file-change report exceeds the wire limit without paths");
284
191
  }
285
192
  paths.pop();
@@ -296,18 +203,9 @@ function isWithinRoot(candidate, root) {
296
203
  const relative = path.relative(root, candidate);
297
204
  return !path.isAbsolute(relative) && !relative.startsWith(`..${path.sep}`) && relative !== "..";
298
205
  }
299
- /**
300
- * Resolve filesystem aliases in a workspace root, including macOS' /tmp ->
301
- * /private/tmp alias. For a root that does not exist yet, resolve its nearest
302
- * existing ancestor and retain the missing suffix.
303
- */
304
206
  function canonicalizeWorkspaceRoot(value) {
305
207
  return canonicalizeFromExistingAncestor(value);
306
208
  }
307
- /**
308
- * Canonicalize the parent but not the leaf itself. A changed path may be
309
- * deleted, or it may be a symlink whose node (rather than target) changed.
310
- */
311
209
  function canonicalizeReportedPath(value) {
312
210
  const parent = canonicalizeFromExistingAncestor(path.dirname(value));
313
211
  return path.resolve(parent, path.basename(value));
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.77.1-preview.3",
6
+ "version": "0.77.1-preview.4",
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",