@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.
- package/dist/acp-agent.d.ts +14 -18
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +81 -213
- package/dist/file-change-audit.d.ts +15 -24
- package/dist/file-change-audit.d.ts.map +1 -1
- package/dist/file-change-audit.js +70 -172
- package/package.json +1 -1
package/dist/acp-agent.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
|
|
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
|
-
/**
|
|
223
|
-
|
|
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;
|
package/dist/acp-agent.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
...(
|
|
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
|
-
/**
|
|
2311
|
-
*
|
|
2312
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
4589
|
-
//
|
|
4590
|
-
//
|
|
4591
|
-
//
|
|
4592
|
-
//
|
|
4593
|
-
//
|
|
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
|
-
|
|
4600
|
-
|
|
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:
|
|
4639
|
-
...(
|
|
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
|
|
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
|
|
6054
|
-
?
|
|
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
|
-
|
|
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)
|
|
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
|
|
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
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
45
|
+
options.logError(`Failed to publish file-change report ${state.requestId}: ${error}`);
|
|
88
46
|
}
|
|
89
47
|
};
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
|
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