zcode-acp-server 0.18.2 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/handlers/sandbox-allow.d.ts +67 -5
  2. package/dist/handlers/sandbox-allow.d.ts.map +1 -1
  3. package/dist/handlers/sandbox-allow.js +136 -29
  4. package/dist/handlers/sandbox-allow.js.map +1 -1
  5. package/dist/handlers/session.d.ts.map +1 -1
  6. package/dist/handlers/session.js +28 -8
  7. package/dist/handlers/session.js.map +1 -1
  8. package/dist/i18n.d.ts +3 -2
  9. package/dist/i18n.d.ts.map +1 -1
  10. package/dist/i18n.js +4 -4
  11. package/dist/i18n.js.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +7 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/remote/config.d.ts +18 -0
  16. package/dist/remote/config.d.ts.map +1 -1
  17. package/dist/remote/config.js +13 -1
  18. package/dist/remote/config.js.map +1 -1
  19. package/dist/remote/endpoint.d.ts.map +1 -1
  20. package/dist/remote/endpoint.js +4 -0
  21. package/dist/remote/endpoint.js.map +1 -1
  22. package/dist/remote/hub-server.d.ts +49 -3
  23. package/dist/remote/hub-server.d.ts.map +1 -1
  24. package/dist/remote/hub-server.js +381 -44
  25. package/dist/remote/hub-server.js.map +1 -1
  26. package/dist/remote/session-list-endpoint.d.ts +51 -0
  27. package/dist/remote/session-list-endpoint.d.ts.map +1 -0
  28. package/dist/remote/session-list-endpoint.js +153 -0
  29. package/dist/remote/session-list-endpoint.js.map +1 -0
  30. package/dist/server.d.ts +15 -3
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +14 -2
  33. package/dist/server.js.map +1 -1
  34. package/docs/REMOTE-CLIENTS.md +88 -26
  35. package/docs/REMOTE.md +30 -8
  36. package/docs/SANDBOX.md +3 -1
  37. package/package.json +1 -1
@@ -12,7 +12,7 @@
12
12
  * directory-granularity with a restart is the closest achievable form.
13
13
  */
14
14
  import type * as acp from "@agentclientprotocol/sdk";
15
- import type { PendingTurn, ZcodeAcpServer } from "../server.js";
15
+ import type { ZcodeAcpServer } from "../server.js";
16
16
  /** A sandbox write-denial observed in tool output. */
17
17
  export interface SandboxDenial {
18
18
  /** The absolute path the OS refused to write (as printed by the tool). */
@@ -43,6 +43,68 @@ export declare const READ_ONLY_TOOLS: Set<string>;
43
43
  * matched — the ask falls back to a generic hint.
44
44
  */
45
45
  export declare function extractSandboxDenial(text: string): SandboxDenial | null;
46
+ /**
47
+ * How long approvals collect into one restart batch (ADR-0011). The old flow
48
+ * restarted the backend on EVERY approval; a second popup still pending on
49
+ * another denied path was killed by that restart and — worse — its debounce
50
+ * mark permanently muted the re-ask, so the model kept hitting a bare EPERM
51
+ * with no way out. Approvals inside one window now share a single restart
52
+ * and continuation.
53
+ */
54
+ export declare const SANDBOX_RESTART_BATCH_MS = 3000;
55
+ /**
56
+ * Cooldown before a FAILED ask (timeout, dead channel, killed by another
57
+ * grant's restart) may re-ask the same path. No cooldown at all would storm
58
+ * on instantly-rejecting clients; the old permanent mute left the model
59
+ * hitting a bare EPERM with no way out. A USER decision pins the path
60
+ * forever instead (see handleSandboxDenial).
61
+ */
62
+ declare const SANDBOX_ASK_RETRY_MS = 60000;
63
+ export { SANDBOX_ASK_RETRY_MS };
64
+ /**
65
+ * Collects approved grants and fires ONE flush per batch window. Kept here
66
+ * (not in server.ts) so tests drive the batching against a stub flush
67
+ * without constructing a whole ZcodeAcpServer.
68
+ */
69
+ export declare class SandboxRestartBatcher {
70
+ private readonly flush;
71
+ private readonly batchMs;
72
+ private readonly grants;
73
+ private timer;
74
+ constructor(flush: (grants: Map<string, string[]>) => void, batchMs?: number);
75
+ /** Add one approved path for a session; the first add arms the window. */
76
+ add(acpSid: string, grantedReal: string): void;
77
+ }
78
+ /**
79
+ * What flushSandboxGrants needs from the server (satisfied structurally by
80
+ * ZcodeAcpServer; tests stub it). Keeping the flush standalone makes the
81
+ * cancel-wave / continuation / kill sequencing unit-testable without a
82
+ * whole server.
83
+ */
84
+ export interface SandboxFlushTarget {
85
+ cancelAllPendingTurns(): void;
86
+ readonly sandboxContinuations: Map<string, string>;
87
+ /** acpSid → live zcode session id. */
88
+ readonly sessionMap: Map<string, string>;
89
+ /** In-flight turns; entries are deleted when the turn's prompt returns. */
90
+ readonly pendingTurns: Map<number | string, {
91
+ zcodeSid: string;
92
+ }>;
93
+ /** The backend to close; the flush nulls it (respawn stays lazy). */
94
+ backend: {
95
+ close(): Promise<void>;
96
+ readonly isDead: boolean;
97
+ } | null;
98
+ }
99
+ /**
100
+ * One batched sandbox allow-restart (ADR-0011; driven by
101
+ * SandboxRestartBatcher): cancel every in-flight turn — they share the
102
+ * backend and would otherwise hang on the dead reader — queue one
103
+ * continuation per session listing ALL granted paths, and close the backend
104
+ * once. The next ensureBackend() respawns under the widened profile
105
+ * (persisted config entries + bridge-lifetime once-allows).
106
+ */
107
+ export declare function flushSandboxGrants(target: SandboxFlushTarget, grants: Map<string, string[]>): void;
46
108
  /**
47
109
  * Extract the path from an ordinary filesystem-permission failure (EACCES —
48
110
  * "Permission denied"), as printed by POSIX tools (`ls: /a/b: Permission
@@ -63,9 +125,9 @@ export declare function extractPermDeniedPath(text: string): string | null;
63
125
  export declare function protectedSandboxPaths(cwdRoots: Iterable<string>): string[];
64
126
  /**
65
127
  * Ask the user to allow the directory behind a sandbox denial and, on
66
- * approval, arm the restart (kill backend, flag the turn cancelled, queue
67
- * the continuation prompt). Best-effort: any failure keeps the sandbox
68
- * exactly as it was.
128
+ * approval, queue the grant into the batched restart (see
129
+ * SandboxRestartBatcher — one restart per window, not one per approval).
130
+ * Best-effort: any failure keeps the sandbox exactly as it was.
69
131
  */
70
- export declare function handleSandboxDenial(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, turn: PendingTurn, denial: SandboxDenial, toolCallId: string): Promise<void>;
132
+ export declare function handleSandboxDenial(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, denial: SandboxDenial, toolCallId: string): Promise<void>;
71
133
  //# sourceMappingURL=sandbox-allow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-allow.d.ts","sourceRoot":"","sources":["../../src/handlers/sandbox-allow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAYrD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGhE,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb;iEAC6D;IAC7D,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,aAW1B,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmBvE;AAKD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjE;AAkBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAQ1E;AAeD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAkKf"}
1
+ {"version":3,"file":"sandbox-allow.d.ts","sourceRoot":"","sources":["../../src/handlers/sandbox-allow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAYrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb;iEAC6D;IAC7D,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,aAW1B,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmBvE;AAKD;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,QAAS,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;;;GAIG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,KAAK,CAA+B;gBAGzB,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,EAC9C,OAAO,GAAE,MAAiC;IAG7D,0EAA0E;IAC1E,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAc/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,IAAI,IAAI,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,qEAAqE;IACrE,OAAO,EAAE;QAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACtE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC5B,IAAI,CAyCN;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjE;AAkBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAQ1E;AAeD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA6Kf"}
@@ -78,6 +78,107 @@ export function extractSandboxDenial(text) {
78
78
  }
79
79
  /** How long the allow popup may hang before it counts as a rejection. */
80
80
  const ASK_TIMEOUT_MS = 120_000;
81
+ /**
82
+ * How long approvals collect into one restart batch (ADR-0011). The old flow
83
+ * restarted the backend on EVERY approval; a second popup still pending on
84
+ * another denied path was killed by that restart and — worse — its debounce
85
+ * mark permanently muted the re-ask, so the model kept hitting a bare EPERM
86
+ * with no way out. Approvals inside one window now share a single restart
87
+ * and continuation.
88
+ */
89
+ export const SANDBOX_RESTART_BATCH_MS = 3000;
90
+ /**
91
+ * Cooldown before a FAILED ask (timeout, dead channel, killed by another
92
+ * grant's restart) may re-ask the same path. No cooldown at all would storm
93
+ * on instantly-rejecting clients; the old permanent mute left the model
94
+ * hitting a bare EPERM with no way out. A USER decision pins the path
95
+ * forever instead (see handleSandboxDenial).
96
+ */
97
+ const SANDBOX_ASK_RETRY_MS = 60_000;
98
+ export { SANDBOX_ASK_RETRY_MS };
99
+ /**
100
+ * Collects approved grants and fires ONE flush per batch window. Kept here
101
+ * (not in server.ts) so tests drive the batching against a stub flush
102
+ * without constructing a whole ZcodeAcpServer.
103
+ */
104
+ export class SandboxRestartBatcher {
105
+ flush;
106
+ batchMs;
107
+ grants = new Map();
108
+ timer = null;
109
+ constructor(flush, batchMs = SANDBOX_RESTART_BATCH_MS) {
110
+ this.flush = flush;
111
+ this.batchMs = batchMs;
112
+ }
113
+ /** Add one approved path for a session; the first add arms the window. */
114
+ add(acpSid, grantedReal) {
115
+ const list = this.grants.get(acpSid) ?? [];
116
+ if (!list.includes(grantedReal))
117
+ list.push(grantedReal);
118
+ this.grants.set(acpSid, list);
119
+ if (this.timer)
120
+ return;
121
+ this.timer = setTimeout(() => {
122
+ this.timer = null;
123
+ if (this.grants.size === 0)
124
+ return;
125
+ const batch = new Map(this.grants);
126
+ this.grants.clear();
127
+ this.flush(batch);
128
+ }, this.batchMs);
129
+ this.timer.unref?.();
130
+ }
131
+ }
132
+ /**
133
+ * One batched sandbox allow-restart (ADR-0011; driven by
134
+ * SandboxRestartBatcher): cancel every in-flight turn — they share the
135
+ * backend and would otherwise hang on the dead reader — queue one
136
+ * continuation per session listing ALL granted paths, and close the backend
137
+ * once. The next ensureBackend() respawns under the widened profile
138
+ * (persisted config entries + bridge-lifetime once-allows).
139
+ */
140
+ export function flushSandboxGrants(target, grants) {
141
+ const m = messages();
142
+ const count = [...grants.values()].reduce((n, ps) => n + ps.length, 0);
143
+ target.cancelAllPendingTurns();
144
+ // Continuations ONLY for sessions with a turn still in flight: those turn
145
+ // loops unwind on the cancelled flag and prompt() consumes the
146
+ // continuation as it returns. A session whose turn already finished
147
+ // naturally during the batch window has nobody to consume the entry — an
148
+ // orphan would later hijack an UNRELATED cancelled prompt (ESC, preempt,
149
+ // drain gate) into an automatic "continue" round.
150
+ const liveZcode = new Set();
151
+ for (const t of target.pendingTurns.values())
152
+ liveZcode.add(t.zcodeSid);
153
+ for (const [sid, paths] of grants) {
154
+ const z = target.sessionMap.get(sid);
155
+ if (z !== undefined && liveZcode.has(z)) {
156
+ target.sandboxContinuations.set(sid, m.sandboxContinuationPrompt(paths));
157
+ }
158
+ else {
159
+ log(`sandbox: no in-flight turn — ${paths.length} grant(s) apply on next spawn`);
160
+ }
161
+ }
162
+ const dying = target.backend;
163
+ if (!dying || dying.isDead) {
164
+ // Already gone (e.g. a late approval after an earlier batch restarted):
165
+ // the grants live in the config / once-allows, and the next
166
+ // ensureBackend() spawns with them — respawning here just to close the
167
+ // new process again would churn.
168
+ log(`sandbox: backend already gone — ${count} grant(s) apply on next spawn`);
169
+ return;
170
+ }
171
+ // Drop the reference BEFORE the async kill: the turn loops unwind on the
172
+ // cancelled flag while the kill is still in flight, and prompt()'s
173
+ // continuation round reaches ensureBackend() the moment its first round
174
+ // returns — with the old reference still held it would adopt the dying
175
+ // backend instead of respawning under the widened profile.
176
+ target.backend = null;
177
+ log(`sandbox: restarting backend with ${count} granted path(s)`);
178
+ dying
179
+ .close()
180
+ .catch((e) => warn(`sandbox: backend kill failed: ${e instanceof Error ? e.message : String(e)}`));
181
+ }
81
182
  /**
82
183
  * Extract the path from an ordinary filesystem-permission failure (EACCES —
83
184
  * "Permission denied"), as printed by POSIX tools (`ls: /a/b: Permission
@@ -139,11 +240,11 @@ function underAny(target, bases) {
139
240
  }
140
241
  /**
141
242
  * Ask the user to allow the directory behind a sandbox denial and, on
142
- * approval, arm the restart (kill backend, flag the turn cancelled, queue
143
- * the continuation prompt). Best-effort: any failure keeps the sandbox
144
- * exactly as it was.
243
+ * approval, queue the grant into the batched restart (see
244
+ * SandboxRestartBatcher — one restart per window, not one per approval).
245
+ * Best-effort: any failure keeps the sandbox exactly as it was.
145
246
  */
146
- export async function handleSandboxDenial(server, cx, acpSid, turn, denial, toolCallId) {
247
+ export async function handleSandboxDenial(server, cx, acpSid, denial, toolCallId) {
147
248
  // Process-level fact, not the config wish: the caller gates on the same
148
249
  // flag, so a sandbox armed only via project config (no env) still flows.
149
250
  if (!server.backendSandboxed)
@@ -155,20 +256,27 @@ export async function handleSandboxDenial(server, cx, acpSid, turn, denial, tool
155
256
  const cwd = server.sessionCwds.get(acpSid);
156
257
  const wsRoot = cwd;
157
258
  const targetReal = resolveReal(path.isAbsolute(raw) ? raw : path.resolve(cwd ?? process.cwd(), raw));
158
- // Debounce: one ask per path per session — the model retries the same
159
- // denied path and must not spam the popup; rejected/timeout asks count.
259
+ // Debounce: one ask per path per session. The mark carries the ask
260
+ // timestamp — a USER decision pins it forever (Infinity); an ask that died
261
+ // of the environment merely cools down for SANDBOX_ASK_RETRY_MS and may
262
+ // re-ask afterwards.
160
263
  let asked = server.sandboxAskedPaths.get(acpSid);
161
264
  if (!asked) {
162
- asked = new Set();
265
+ asked = new Map();
163
266
  server.sandboxAskedPaths.set(acpSid, asked);
164
267
  }
165
- if (asked.has(targetReal))
268
+ const prior = asked.get(targetReal);
269
+ if (prior !== undefined &&
270
+ (prior === Number.POSITIVE_INFINITY || Date.now() - prior < SANDBOX_ASK_RETRY_MS)) {
166
271
  return;
167
- asked.add(targetReal);
272
+ }
273
+ asked.set(targetReal, Date.now());
168
274
  // Island / strictGit denials are unallowable by construction (their denies
169
275
  // win the last-match). Tell the USER why instead of a doomed popup — the
170
- // model only ever sees the bare EPERM in its tool output.
276
+ // model only ever sees the bare EPERM in its tool output. Structural:
277
+ // hinted once, pinned forever.
171
278
  if (underAny(targetReal, protectedSandboxPaths(server.sandboxRoots()))) {
279
+ asked.set(targetReal, Number.POSITIVE_INFINITY);
172
280
  await sendTextChunk(cx, acpSid, m.sandboxProtectedHint, randomUUID());
173
281
  return;
174
282
  }
@@ -178,12 +286,14 @@ export async function handleSandboxDenial(server, cx, acpSid, turn, denial, tool
178
286
  // the config is the only way to grant something this broad.
179
287
  const home = resolveReal(os.homedir());
180
288
  if (targetReal === "/" || targetReal === home || home.startsWith(targetReal + path.sep)) {
289
+ asked.set(targetReal, Number.POSITIVE_INFINITY);
181
290
  await sendTextChunk(cx, acpSid, m.sandboxOverBroadHint(targetReal), randomUUID());
182
291
  return;
183
292
  }
184
293
  // A persisted "永不放行" decision — VISIBLE config, never hidden bridge
185
294
  // memory: no popup, and the asked-mark above keeps later repeats silent.
186
295
  if (wsRoot && underAny(targetReal, readSandboxConfig(wsRoot).deny.map(resolveReal))) {
296
+ asked.set(targetReal, Number.POSITIVE_INFINITY);
187
297
  await sendTextChunk(cx, acpSid, m.sandboxDenyListedHint(targetReal), randomUUID());
188
298
  return;
189
299
  }
@@ -241,11 +351,18 @@ export async function handleSandboxDenial(server, cx, acpSid, turn, denial, tool
241
351
  decision = "reject_once";
242
352
  }
243
353
  catch (e) {
244
- // Popup failed/timed out or the client rejected the request itself —
245
- // keep the sandbox unchanged; the asked-mark prevents a retry loop.
354
+ // Popup failed/timed out or the client channel died — including a kill
355
+ // by ANOTHER grant's batched restart. This ask never got a user
356
+ // decision; the timestamp stays as-is, so the path merely cools down
357
+ // (SANDBOX_ASK_RETRY_MS) and may re-ask afterwards — never permanently
358
+ // muted, never free to storm.
246
359
  warn(`sandbox: allow ask for ${targetReal} failed: ${e instanceof Error ? e.message : String(e)}`);
247
360
  return;
248
361
  }
362
+ // A real outcome reached the client and came back (including an unknown
363
+ // optionId the user picked): the user SAW this ask — pin the debounce
364
+ // forever, whatever they chose.
365
+ asked.set(targetReal, Number.POSITIVE_INFINITY);
249
366
  if (decision === "reject_always") {
250
367
  // The user's denial is persisted VISIBLY into the project config — never
251
368
  // silently remembered in bridge memory. If the config can't be written,
@@ -277,23 +394,13 @@ export async function handleSandboxDenial(server, cx, acpSid, turn, denial, tool
277
394
  else {
278
395
  server.sandboxOnceAllows.add(targetReal);
279
396
  }
280
- // Arm the restart: flag the turn so the loop unwinds as cancelled instead
281
- // of polling a dead reader, queue the continuation prompt, kill the
282
- // backend process group (next ensureBackend() respawns with the widened
283
- // profile — once-allows and the persisted config are both folded in).
284
- // Other sessions' in-flight turns are cancelled too — they share this
285
- // backend and would otherwise hang on the dead reader.
286
- turn.cancelled = true;
287
- turn.stopSent = true; // no stop pair needed: the whole process group dies
288
- server.cancelAllPendingTurns();
289
- server.sandboxContinuations.set(acpSid, m.sandboxContinuationPrompt(targetReal));
397
+ // Arm the BATCHED restart: this grant joins the current window; the flush
398
+ // (see SandboxRestartBatcher) cancels every pending turn, queues a
399
+ // continuation per session listing ALL granted paths, and closes the
400
+ // backend once (next ensureBackend() respawns with the widened profile —
401
+ // once-allows and the persisted config are both folded in).
402
+ server.sandboxRestartBatcher.add(acpSid, targetReal);
290
403
  await sendTextChunk(cx, acpSid, m.sandboxRestartHint(targetReal), randomUUID());
291
- log(`sandbox: allow granted for ${targetReal} (${decision}) — restarting backend`);
292
- try {
293
- await server.ensureBackend().close();
294
- }
295
- catch (e) {
296
- warn(`sandbox: backend kill failed: ${e instanceof Error ? e.message : String(e)}`);
297
- }
404
+ log(`sandbox: allow granted for ${targetReal} (${decision}) — restart batched`);
298
405
  }
299
406
  //# sourceMappingURL=sandbox-allow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-allow.js","sourceRoot":"","sources":["../../src/handlers/sandbox-allow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-allow.js","sourceRoot":"","sources":["../../src/handlers/sandbox-allow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/handlers/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/handlers/session.ts"],"names":[],"mappings":"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"}
@@ -567,16 +567,27 @@ export async function loadSession(server, params, cx) {
567
567
  * the orphaned continuation bubble.
568
568
  */
569
569
  export async function prompt(server, params, cx, requestId) {
570
- const result = await runPrompt(server, params, cx, requestId);
571
- const continuation = server.sandboxContinuations.get(params.sessionId);
572
- if (continuation && result.stopReason === "cancelled") {
570
+ let result = await runPrompt(server, params, cx, requestId);
571
+ // Sandbox-allow continuation chaining, BOUNDED: each batched restart
572
+ // cancels the in-flight round and queues a continuation for prompt() to
573
+ // consume. A LATER batch (the user approving a second popup seconds after
574
+ // the first window flushed) cancels the continuation round itself and
575
+ // queues its own continuation — with single-shot consumption that entry
576
+ // would be orphaned and later hijack an UNRELATED cancelled prompt (ESC,
577
+ // preempt, drain gate). Loop so each cancelled round adopts the newest
578
+ // continuation; the bound keeps a pathological cycle from chaining
579
+ // forever.
580
+ for (let hop = 0; hop < 3; hop++) {
581
+ const continuation = server.sandboxContinuations.get(params.sessionId);
582
+ if (!continuation || result.stopReason !== "cancelled")
583
+ break;
573
584
  server.sandboxContinuations.delete(params.sessionId);
574
585
  // Same request, fresh round: runPrompt re-enters the whole machinery
575
586
  // (ensureBackend respawns; ensureRealSession/subscribe-recovery reloads
576
587
  // the session into it). The user's preempt/ESC during the continuation
577
588
  // still cancels it — the round registers itself in pendingTurns.
578
589
  try {
579
- return await runPrompt(server, { sessionId: params.sessionId, prompt: [{ type: "text", text: continuation }] }, cx, `sandbox-cont-${randomUUID()}`, true);
590
+ result = await runPrompt(server, { sessionId: params.sessionId, prompt: [{ type: "text", text: continuation }] }, cx, `sandbox-cont-${randomUUID()}`, true);
580
591
  }
581
592
  catch (e) {
582
593
  // The chained round runs right after a sandbox-allow respawn, inside
@@ -589,9 +600,18 @@ export async function prompt(server, params, cx, requestId) {
589
600
  const err = e instanceof Error ? e.message : String(e);
590
601
  warn(`sandbox: continuation prompt failed: ${err}`);
591
602
  await sendTextChunk(cx, params.sessionId, messages().sandboxContinuationFailed(err), randomUUID()).catch(() => undefined);
603
+ // A leftover continuation for THIS cancelled round is now orphaned —
604
+ // drop it rather than let a later cancelled prompt adopt it.
605
+ server.sandboxContinuations.delete(params.sessionId);
592
606
  return { stopReason: "cancelled" };
593
607
  }
594
608
  }
609
+ // prompt() is returning: nothing may consume this session's continuation
610
+ // afterwards, so unconditionally drop any entry that slipped in late
611
+ // (e.g. a flush timer firing inside the end_turn epilogue window, before
612
+ // the finally deletes the pendingTurns entry) — leaving it would let an
613
+ // unrelated cancelled prompt adopt it later.
614
+ server.sandboxContinuations.delete(params.sessionId);
595
615
  return result;
596
616
  }
597
617
  /** One prompt round: subscribe-before-send, run the event-driven turn loop. */
@@ -1829,7 +1849,7 @@ export async function runEventTurn(server, listener, monitor, differ, cx, acpSid
1829
1849
  // ordinary filesystem permissions.
1830
1850
  const denial = extractSandboxDenial(outputText);
1831
1851
  if (denial) {
1832
- await handleSandboxDenial(server, cx, acpSid, turn, denial, toolCallId);
1852
+ await handleSandboxDenial(server, cx, acpSid, denial, toolCallId);
1833
1853
  if (turn.cancelled)
1834
1854
  return { stopReason: "cancelled" };
1835
1855
  }
@@ -1837,11 +1857,11 @@ export async function runEventTurn(server, listener, monitor, differ, cx, acpSid
1837
1857
  // No path parsed — one generic hint per session, not one per retry.
1838
1858
  let asked = server.sandboxAskedPaths.get(acpSid);
1839
1859
  if (!asked) {
1840
- asked = new Set();
1860
+ asked = new Map();
1841
1861
  server.sandboxAskedPaths.set(acpSid, asked);
1842
1862
  }
1843
- if (!asked.has(GENERIC_HINT_KEY)) {
1844
- asked.add(GENERIC_HINT_KEY);
1863
+ if (asked.get(GENERIC_HINT_KEY) === undefined) {
1864
+ asked.set(GENERIC_HINT_KEY, Number.POSITIVE_INFINITY);
1845
1865
  await sendTextChunk(cx, acpSid, messages().sandboxGenericDenialHint, chunkMsgId);
1846
1866
  }
1847
1867
  }