zcode-acp-server 0.76.2 → 0.77.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 (53) hide show
  1. package/README.md +67 -29
  2. package/README.zh-CN.md +22 -22
  3. package/dist/account-setup.d.ts +9 -0
  4. package/dist/account-setup.d.ts.map +1 -0
  5. package/dist/account-setup.js +80 -0
  6. package/dist/account-setup.js.map +1 -0
  7. package/dist/backend/credentials.d.ts +3 -3
  8. package/dist/backend/credentials.d.ts.map +1 -1
  9. package/dist/backend/credentials.js +5 -5
  10. package/dist/backend/credentials.js.map +1 -1
  11. package/dist/backend/resolve.d.ts +11 -1
  12. package/dist/backend/resolve.d.ts.map +1 -1
  13. package/dist/backend/resolve.js +14 -1
  14. package/dist/backend/resolve.js.map +1 -1
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +9 -1
  18. package/dist/cli.js.map +1 -1
  19. package/dist/code-fingerprint.json +2 -2
  20. package/dist/config/account-provider.d.ts +32 -0
  21. package/dist/config/account-provider.d.ts.map +1 -1
  22. package/dist/config/account-provider.js +36 -6
  23. package/dist/config/account-provider.js.map +1 -1
  24. package/dist/config/bridge-accounts.d.ts +40 -0
  25. package/dist/config/bridge-accounts.d.ts.map +1 -0
  26. package/dist/config/bridge-accounts.js +193 -0
  27. package/dist/config/bridge-accounts.js.map +1 -0
  28. package/dist/config/options.d.ts.map +1 -1
  29. package/dist/config/options.js +2 -1
  30. package/dist/config/options.js.map +1 -1
  31. package/dist/config/provider-registry.d.ts.map +1 -1
  32. package/dist/config/provider-registry.js +2 -2
  33. package/dist/config/provider-registry.js.map +1 -1
  34. package/dist/handlers/session-titles.d.ts.map +1 -1
  35. package/dist/handlers/session-titles.js +6 -0
  36. package/dist/handlers/session-titles.js.map +1 -1
  37. package/dist/handlers/session.d.ts +0 -26
  38. package/dist/handlers/session.d.ts.map +1 -1
  39. package/dist/handlers/session.js +91 -126
  40. package/dist/handlers/session.js.map +1 -1
  41. package/dist/remote/session-close-endpoint.d.ts.map +1 -1
  42. package/dist/remote/session-close-endpoint.js +5 -2
  43. package/dist/remote/session-close-endpoint.js.map +1 -1
  44. package/dist/server.d.ts +29 -0
  45. package/dist/server.d.ts.map +1 -1
  46. package/dist/server.js +42 -0
  47. package/dist/server.js.map +1 -1
  48. package/dist/tasks-index.d.ts.map +1 -1
  49. package/dist/tasks-index.js +5 -2
  50. package/dist/tasks-index.js.map +1 -1
  51. package/docs/BACKLOG.md +45 -6
  52. package/docs/adr/0006-remote-session-close.md +18 -0
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/config/provider-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/config/provider-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-titles.d.ts","sourceRoot":"","sources":["../../src/handlers/session-titles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoBnD,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAKpD,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;YAWtB,cAAc;CAgE7B"}
1
+ {"version":3,"file":"session-titles.d.ts","sourceRoot":"","sources":["../../src/handlers/session-titles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoBnD,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAKpD,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;YAWtB,cAAc;CAqE7B"}
@@ -100,6 +100,12 @@ export class SessionTitleListener {
100
100
  return;
101
101
  for (const sid of aliases) {
102
102
  this.server.sessionTitles.set(sid, title);
103
+ // A trailing title push from the dying conversation must not resurrect
104
+ // an alias retired by a remote close (ADR-0006) — a summary recreated
105
+ // here with a title would re-advertise it. The stamp clears on the
106
+ // next genuine use (markSessionActive).
107
+ if (this.server.discoveryRetiredAt.has(sid))
108
+ continue;
103
109
  this.server.touchSessionSummary(sid, title);
104
110
  refreshTerminalTabTitle(this.server, sid);
105
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-titles.js","sourceRoot":"","sources":["../../src/handlers/session-titles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-titles.js","sourceRoot":"","sources":["../../src/handlers/session-titles.ts"],"names":[],"mappings":"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"}
@@ -284,32 +284,6 @@ export declare function withPreemptLock(server: ZcodeAcpServer, zcodeSid: string
284
284
  * Exported for unit tests (multi-turn pendingTurns scenarios).
285
285
  */
286
286
  export declare function preemptInFlightTurn(server: ZcodeAcpServer, zcodeSid: string, selfRequestId: number | string): boolean;
287
- /** Concatenate text from ACP ContentBlock[] into a prompt string.
288
- * Legacy compatibility helper; runtime prompts use convertPromptContent instead. */
289
- export declare function extractPromptText(blocks: acp.ContentBlock[] | undefined): string;
290
- /**
291
- * ACP `ContentBlock::Image` → zcode `session/send` attachment.
292
- *
293
- * zcode's per-attachment normalizer accepts either a `localPath` (absolute FS
294
- * path, preferred) or `dataBase64` + `mimeType` (raw base64, no data: prefix).
295
- * ACP `ImageContent` carries `data` (base64) and an optional `uri`; when the
296
- * uri is a file:// pointer we send localPath so the backend streams from disk
297
- * instead of re-encoding.
298
- */
299
- export interface ImageAttachment {
300
- kind: "image";
301
- filename: string;
302
- mimeType: string;
303
- sizeBytes?: number;
304
- dataBase64?: string;
305
- localPath?: string;
306
- }
307
- /**
308
- * Extract image attachments from ACP ContentBlock[]. Non-image blocks are
309
- * ignored (text/resource_link/resource stay owned by `extractPromptText`).
310
- * Exported for unit testing.
311
- */
312
- export declare function extractAttachments(blocks: acp.ContentBlock[] | undefined): ImageAttachment[];
313
287
  /**
314
288
  * Reload a session into the backend subprocess via `session/resume` — the
315
289
  * recovery path after the backend evicted the resident runtime (idle timeout
@@ -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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"}
@@ -19,6 +19,7 @@ import { RequestError } from "@agentclientprotocol/sdk";
19
19
  import { convertPromptContent } from "./prompt-content.js";
20
20
  import { backendCapabilities } from "../backend/adapter.js";
21
21
  import { EventStreamListener, TurnMonitor } from "../backend/listener.js";
22
+ import { disallowedToolList } from "../backend/resolve.js";
22
23
  import { resolveReal } from "../backend/sandbox.js";
23
24
  import { buildModes, buildConfigOptions, DEFAULT_MODEL_ID, DEFAULT_PROVIDER_ID, formatModelValue, loadAllModels, modelContextWindow, parseModelValue, } from "../config/options.js";
24
25
  import { currentModelCached, emitInitialUsage } from "../config/model-cache.js";
@@ -85,6 +86,53 @@ async function workflowFlag(server) {
85
86
  }
86
87
  return { dynamicWorkflowEnabled: true };
87
88
  }
89
+ /**
90
+ * Per-session tool denylist (#340). The app-server command path parses
91
+ * `--disallowed-tools` but never consumes it (upstream cli/src/run.ts hands
92
+ * `toolDisallowlist` to the prompt/TUI paths only), so the merged
93
+ * ZCODE_DISALLOWED_TOOLS + Cron* default list was silently dropped and every
94
+ * "disallowed" tool still reached the model. session/create AND session/resume
95
+ * take `toolDenylist` and project it onto `runtimeConfig.toolDisallowlist` — a
96
+ * registry-level removal (upstream server-operations.ts createRecord), the
97
+ * right layer for a process-wide policy. Resume must carry it too: a cold-
98
+ * recovered runtime is rebuilt from the resume params alone.
99
+ *
100
+ * Deliberately NOT sent on session/send: that per-turn list is only a
101
+ * provider-visibility hint, and a turn list holding every Cron mutation tool
102
+ * is upstream's "automation turn" signal (isAutomationMutationRestrictedTurn),
103
+ * which ordinary prompts must not spoof. Residual: session/fork has no
104
+ * tool-face field and its `inherit` does not copy the list, so a fork runs
105
+ * without it until its next resume.
106
+ *
107
+ * Omitted outright once this backend generation rejected the key
108
+ * (`server.toolDenylistRejected`) — see rejectsToolDenylistKey.
109
+ */
110
+ function toolDenylistParam(server) {
111
+ if (server.toolDenylistRejected)
112
+ return {};
113
+ const list = disallowedToolList();
114
+ return list.length > 0 ? { toolDenylist: list } : {};
115
+ }
116
+ /**
117
+ * Pre-toolDenylist backend: strict zod rejects the key ("Unrecognized key:
118
+ * toolDenylist", quoted or bare). Word-bounded so an unrelated unrecognized
119
+ * key does not trigger the drop-and-retry.
120
+ */
121
+ function rejectsToolDenylistKey(message) {
122
+ return !!message && /unrecognized/i.test(message) && /\btoolDenylist\b/i.test(message);
123
+ }
124
+ /**
125
+ * Record a toolDenylist schema rejection for this backend generation and say
126
+ * so ONCE — the user's tool policy is not applied on such a backend, which
127
+ * must not pass silently.
128
+ */
129
+ function noteToolDenylistRejected(server, method) {
130
+ if (!server.toolDenylistRejected) {
131
+ warn(`${method}: backend rejects toolDenylist — retrying without it; ` +
132
+ `ZCODE_DISALLOWED_TOOLS / the Cron* default are NOT applied on this backend`);
133
+ }
134
+ server.toolDenylistRejected = true;
135
+ }
88
136
  /**
89
137
  * Cold-bridge menu catch-up: the `/` menu snapshot sent at session/new is
90
138
  * filtered against the workflow gate, and on a COLD bridge (lazy session/new,
@@ -104,15 +152,17 @@ export function resendMenuAfterGateSettled(server, acpSid) {
104
152
  }
105
153
  /**
106
154
  * Shared `session/resume` params builder: {sessionId, workspace} + optional
107
- * session-lifetime mcpServers + the conditional dynamic-workflow flag. Every
108
- * resume construction site (session/resume, /resume adoption, session/load,
109
- * eviction/respawn reload) goes through here so the param shape cannot drift.
155
+ * session-lifetime mcpServers + the conditional dynamic-workflow flag + the
156
+ * per-session tool denylist. Every resume construction site (session/resume,
157
+ * /resume adoption, session/load, eviction/respawn reload) goes through here
158
+ * so the param shape cannot drift.
110
159
  */
111
160
  async function resumeParams(server, zcodeSid, cwd, mcpServers) {
112
161
  const params = {
113
162
  sessionId: zcodeSid,
114
163
  workspace: workspaceFor(cwd),
115
164
  ...(await workflowFlag(server)),
165
+ ...toolDenylistParam(server),
116
166
  };
117
167
  if (mcpServers)
118
168
  params.mcpServers = mcpServers;
@@ -652,6 +702,7 @@ export async function ensureRealSession(server, acpSid, opts = {}) {
652
702
  // Dynamic-workflow enable rides create only when the gate says so —
653
703
  // workflowFlag writes nothing otherwise (strict zod).
654
704
  ...(await workflowFlag(server)),
705
+ ...toolDenylistParam(server),
655
706
  };
656
707
  if (pending.mcpServers && pending.mcpServers.length > 0) {
657
708
  createParams.mcpServers = pending.mcpServers;
@@ -666,16 +717,25 @@ export async function ensureRealSession(server, acpSid, opts = {}) {
666
717
  log(`session/create carrying ${remembered.length} remembered client MCP server(s)`);
667
718
  }
668
719
  }
669
- let resp = await backend.request(server.nextId(), "session/create", createParams, 15000);
670
- if (resp.error && createParams.mode === "guarded" && rejectsModeGuarded(resp.error.message)) {
720
+ // Compat retries build on the params ACTUALLY sent last, so a second
721
+ // rejection does not resurrect a key the first retry already dropped.
722
+ let sent = createParams;
723
+ let resp = await backend.request(server.nextId(), "session/create", sent, 15000);
724
+ if (resp.error && sent.mode === "guarded" && rejectsModeGuarded(resp.error.message)) {
671
725
  // 3.15.1's `guarded` on a pre-3.15 backend: the strict mode enum rejects
672
726
  // it and the whole create dies. Retry without the mode key (the backend
673
727
  // default then applies) and say so once — a session that works beats a
674
728
  // configured mode that bricks session/new.
675
729
  warn('session/create: backend rejects mode "guarded" — retrying with its default mode');
676
- const rest = { ...createParams };
677
- delete rest.mode;
678
- resp = await backend.request(server.nextId(), "session/create", rest, 15000);
730
+ sent = { ...sent };
731
+ delete sent.mode;
732
+ resp = await backend.request(server.nextId(), "session/create", sent, 15000);
733
+ }
734
+ if (resp.error && "toolDenylist" in sent && rejectsToolDenylistKey(resp.error.message)) {
735
+ noteToolDenylistRejected(server, "session/create");
736
+ sent = { ...sent };
737
+ delete sent.toolDenylist;
738
+ resp = await backend.request(server.nextId(), "session/create", sent, 15000);
679
739
  }
680
740
  if (resp.error) {
681
741
  throw new Error(`zcode create failed: ${resp.error.message ?? ""}`);
@@ -1833,13 +1893,21 @@ export async function runOneTurn(server, opts) {
1833
1893
  server.pendingTurns.delete(requestId);
1834
1894
  // Turn end = session activity — refresh the discovery summary and mark the
1835
1895
  // session discoverable regardless of outcome (end_turn, cancelled, retries
1836
- // exhausted). Also refresh the backend-loaded verification — but only on
1837
- // an instance this turn proved resident (a successful subscribe) that is
1838
- // STILL the live backend: an unconditional stamp let a failed backend-lost
1839
- // recovery vouch for a session the respawned backend never loaded (empty
1840
- // replays for the whole TTL window — same family as the respawn-stamp
1841
- // bug, found in review 2026-10).
1842
- server.markSessionActive(acpSid);
1896
+ // exhausted). EXCEPT when a remote close retired the conversation while
1897
+ // this turn was running (ADR-0006 force close): the close deletes the
1898
+ // summary and only waits a bounded ~3s for the turn, so a turn settling
1899
+ // after that would re-advertise a conversation the user ended — the
1900
+ // desktop's row that vanished, resurrected, then lingered (2026-10-22).
1901
+ // A turn STARTED after the retirement is genuine new use and re-arms.
1902
+ if (!server.wasDiscoveryRetiredSince(acpSid, turnStartedAt)) {
1903
+ server.markSessionActive(acpSid);
1904
+ }
1905
+ // Refresh the backend-loaded verification — but only on an instance this
1906
+ // turn proved resident (a successful subscribe) that is STILL the live
1907
+ // backend: an unconditional stamp let a failed backend-lost recovery
1908
+ // vouch for a session the respawned backend never loaded (empty replays
1909
+ // for the whole TTL window — same family as the respawn-stamp bug, found
1910
+ // in review 2026-10).
1843
1911
  if (residentBackend && residentBackend === server.backend && !residentBackend.isDead) {
1844
1912
  server.markBackendLoaded(acpSid);
1845
1913
  }
@@ -2571,117 +2639,6 @@ export function preemptInFlightTurn(server, zcodeSid, selfRequestId) {
2571
2639
  return found;
2572
2640
  }
2573
2641
  // ---------- internals ----------
2574
- /** Concatenate text from ACP ContentBlock[] into a prompt string.
2575
- * Legacy compatibility helper; runtime prompts use convertPromptContent instead. */
2576
- export function extractPromptText(blocks) {
2577
- const parts = [];
2578
- for (const block of blocks ?? []) {
2579
- // ACP ContentBlock is a discriminated union on `type`. The resource_link
2580
- // variant carries `name` + `uri` flat on the block itself (NOT nested under
2581
- // a `resource_link` key — see ACP schema $defs.ResourceLink). Accessing
2582
- // `block.resource_link` silently dropped every dragged-file attachment.
2583
- const b = block;
2584
- if (b.type === "text" && b.text) {
2585
- parts.push(b.text);
2586
- }
2587
- else if (b.type === "resource_link" && b.uri) {
2588
- // Convert file:// URIs to absolute paths so the model treats them as
2589
- // readable filesystem locations rather than opaque hyperlinks. Fall
2590
- // back to the path when name is missing OR empty — the ACP schema
2591
- // requires `name`, but a non-compliant client still deserves useful
2592
- // prompt text rather than `[related resource: ](/path)`.
2593
- const path = b.uri.startsWith("file://") ? fileUriToPath(b.uri) : b.uri;
2594
- const label = b.name || path;
2595
- parts.push(`[related resource: ${label}](${path})`);
2596
- }
2597
- else if (b.type === "resource" && b.resource) {
2598
- // Legacy extraction only (not the runtime converter): accept text
2599
- // payloads defensively in case a client sends them anyway. Binary
2600
- // payloads (BlobResourceContents) are never decoded — the base64 blob is
2601
- // useless to the model — so rewrite the resource uri into a readable
2602
- // filesystem location (same treatment as resource_link). Dropping it
2603
- // entirely left the prompt empty, which errored on a binary-only drag.
2604
- const r = b.resource;
2605
- if (r.text) {
2606
- parts.push(r.text);
2607
- }
2608
- else if (r.blob && r.uri) {
2609
- const path = r.uri.startsWith("file://") ? fileUriToPath(r.uri) : r.uri;
2610
- const label = basename(path) || path;
2611
- parts.push(`[related resource: ${label}](${path})`);
2612
- }
2613
- }
2614
- }
2615
- return parts.join("\n").trim();
2616
- }
2617
- /** Extension inferred from mimeType for synthesizing a filename. */
2618
- const MIME_EXT = {
2619
- "image/png": "png",
2620
- "image/jpeg": "jpg",
2621
- "image/gif": "gif",
2622
- "image/webp": "webp",
2623
- "image/bmp": "bmp",
2624
- "image/svg+xml": "svg",
2625
- };
2626
- /**
2627
- * Extract image attachments from ACP ContentBlock[]. Non-image blocks are
2628
- * ignored (text/resource_link/resource stay owned by `extractPromptText`).
2629
- * Exported for unit testing.
2630
- */
2631
- export function extractAttachments(blocks) {
2632
- const out = [];
2633
- let imageIndex = 0;
2634
- for (const block of blocks ?? []) {
2635
- const b = block;
2636
- if (b.type !== "image")
2637
- continue;
2638
- imageIndex += 1;
2639
- const mimeType = b.mimeType ?? "image/png";
2640
- // Prefer a file:// uri → localPath so the backend streams from disk.
2641
- const uri = typeof b.uri === "string" ? b.uri : "";
2642
- if (uri.startsWith("file://")) {
2643
- const localPath = fileUriToPath(uri);
2644
- out.push({
2645
- kind: "image",
2646
- filename: basename(localPath) ?? `image-${imageIndex}.${MIME_EXT[mimeType] ?? "png"}`,
2647
- mimeType,
2648
- localPath,
2649
- });
2650
- continue;
2651
- }
2652
- // Otherwise fall back to the base64 payload.
2653
- if (b.data) {
2654
- out.push({
2655
- kind: "image",
2656
- filename: uri
2657
- ? (basename(uri) ?? `image-${imageIndex}.${MIME_EXT[mimeType] ?? "png"}`)
2658
- : `image-${imageIndex}.${MIME_EXT[mimeType] ?? "png"}`,
2659
- mimeType,
2660
- dataBase64: b.data,
2661
- sizeBytes: Math.floor((b.data.length * 3) / 4),
2662
- });
2663
- }
2664
- // An image block with neither a usable uri nor data is dropped defensively.
2665
- }
2666
- return out;
2667
- }
2668
- /** Best-effort basename from a path/uri (no node:path import for a tiny helper). */
2669
- function basename(p) {
2670
- const clean = p.replace(/\/+$/, "");
2671
- const slash = clean.lastIndexOf("/");
2672
- const name = slash >= 0 ? clean.slice(slash + 1) : clean;
2673
- return name || null;
2674
- }
2675
- /** Convert a file:// URI to an absolute filesystem path. */
2676
- function fileUriToPath(uri) {
2677
- try {
2678
- return decodeURIComponent(new URL(uri).pathname);
2679
- }
2680
- catch {
2681
- // Not a valid URL — return as-is (best-effort).
2682
- return uri;
2683
- }
2684
- }
2685
2642
  /**
2686
2643
  * Resume a zcode session with retry on transient timeouts.
2687
2644
  *
@@ -2702,6 +2659,14 @@ async function resumeBackendSession(server, zcParams) {
2702
2659
  const resp = await backend.request(server.nextId(), "session/resume", zcParams, ATTEMPT_TIMEOUT_MS);
2703
2660
  if (!resp.error)
2704
2661
  return (resp.result ?? {});
2662
+ if ("toolDenylist" in zcParams && rejectsToolDenylistKey(resp.error.message)) {
2663
+ // Schema-compat retry (pre-toolDenylist backend). Bounded by
2664
+ // construction: the stripped params can no longer match this guard.
2665
+ noteToolDenylistRejected(server, "session/resume");
2666
+ const rest = { ...zcParams };
2667
+ delete rest.toolDenylist;
2668
+ return resumeBackendSession(server, rest);
2669
+ }
2705
2670
  const isTimeout = resp.error.message === "timeout";
2706
2671
  if (!isTimeout || attempt === MAX_ATTEMPTS) {
2707
2672
  throw new Error(`zcode resume failed: ${resp.error.message ?? ""}`);