zcode-acp-server 0.60.0 → 0.61.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.
@@ -18,7 +18,12 @@
18
18
  * bridge per workspace — but every bridge of that workspace reads the same
19
19
  * directory, so ONE representative suffices;
20
20
  * - the global saved-workflow directory is machine-wide, so one global group
21
- * is enough.
21
+ * is enough;
22
+ * - and a journal row can LIE about a living run: upstream's orphan
23
+ * reconciliation writes stopped(interrupted) onto runs that are still
24
+ * executing in another process (and the row never flips back mid-run), so
25
+ * rows carrying that signature are cross-checked against the owning
26
+ * process's live read before the overview trusts them (collectLiveOverrides).
22
27
  *
23
28
  * This module folds all of that server-side (the hub owns the instance map):
24
29
  * dedupe instances to one group per workspace, race the pair reads with the
@@ -38,6 +43,8 @@ const FETCH_TIMEOUT_MS = 8_000;
38
43
  const MAX_BODY_BYTES = 2 * 1024 * 1024;
39
44
  /** Journal window for the global read (upstream caps the limit at 50). */
40
45
  const RUNS_LIMIT = 50;
46
+ /** Live-registry statuses — a run reporting either is flying right now. */
47
+ const LIVE_STATUSES = new Set(["running", "pending"]);
41
48
  /** GET one bridge route, parsed as JSON. Rejects on transport/status/parse. */
42
49
  function fetchBridgeJson(port, path) {
43
50
  return new Promise((resolve, reject) => {
@@ -139,6 +146,11 @@ function invalidOf(list) {
139
146
  */
140
147
  function annotateOwners(rows, instances) {
141
148
  for (const row of rows) {
149
+ // The live-truth owner (set by applyLiveTruth from the instance whose
150
+ // live registry reported the run) is process evidence, not a heuristic —
151
+ // never overwrite it. The heuristic only fills rows it did not correct.
152
+ if (row.ownerInstanceId)
153
+ continue;
142
154
  const acpSid = row.acpSessionId;
143
155
  if (typeof acpSid !== "string" || !acpSid)
144
156
  continue;
@@ -161,6 +173,119 @@ function annotateOwners(rows, instances) {
161
173
  row.ownerInstanceId = best.id;
162
174
  }
163
175
  }
176
+ /**
177
+ * Live overrides for journal rows upstream may have wrongly declared dead.
178
+ *
179
+ * Why this exists: upstream's orphan reconciliation (`reconcileOrphanRuns`,
180
+ * bootstrap.app — it runs at every app construction) assumes "no in-flight
181
+ * run in MY process registry ⇒ every non-terminal row of this session is a
182
+ * dead process's leftover" and writes stopped(interrupted) — even when the
183
+ * run is still executing in ANOTHER process. Observed 2026-10-02: a second
184
+ * process constructed the session at 11:44 and wrote the interrupted verdict
185
+ * onto a run that kept dispatching sub-agents until it completed at 14:21;
186
+ * the row never flips back mid-run, so the whole flight window rendered as
187
+ * already-stopped. The owning process's live read
188
+ * (`/settings/workflow-runs?sessionId=` → `v4/conversation/workflowRuns` →
189
+ * `listRunsForSession`) overlays its live registry onto the journal — upstream
190
+ * built it exactly so "this read would not show a run marked dead by a foreign
191
+ * write" — and that overlay is the only trustworthy status here.
192
+ *
193
+ * Trigger = the reconciliation's signature alone (`stopReason:
194
+ * "interrupted"`); no suspicious row → zero probes. Do NOT gate on the
195
+ * instance showing the session as "running": a workflow keeps flying while its
196
+ * parent session sits idle between turns (exactly how the observed run looked
197
+ * for its last two hours), so a running-gated trigger misses the reported
198
+ * case. When suspicious rows exist, probe the sessions the OWNER WORKSPACE's
199
+ * instances list (any status), with each instance's OWN spelling — probing
200
+ * what it reported to the hub keeps this a same-process read. The row's
201
+ * `acpSessionId` is deliberately NOT used as the probe key: alias spellings
202
+ * differ per bridge (one bridge's `sess_…` is another's backend id), and an id
203
+ * a bridge never listed may still resolve through its durable alias store and
204
+ * cold-resume the conversation — materializing a second runtime for a live
205
+ * conversation, which scrambles the shared event log. The probe result joins
206
+ * on runId (a run's stable identity), so one confirmation corrects the row in
207
+ * every group that carries it.
208
+ */
209
+ async function collectLiveOverrides(instances, rows) {
210
+ const out = new Map();
211
+ const suspicious = rows.filter((r) => r["stopReason"] === "interrupted" &&
212
+ typeof r.runId === "string" &&
213
+ r.runId !== "" &&
214
+ typeof r.cwd === "string" &&
215
+ r.cwd !== "");
216
+ if (suspicious.length === 0)
217
+ return out;
218
+ // The workspace is the ownership evidence: a run's cwd is where its session
219
+ // lives, and the hub already groups instances by that same workspace string.
220
+ const byWorkspace = new Map();
221
+ for (const inst of instances) {
222
+ const list = byWorkspace.get(inst.workspace) ?? [];
223
+ list.push(inst);
224
+ byWorkspace.set(inst.workspace, list);
225
+ }
226
+ for (const list of byWorkspace.values())
227
+ list.sort((a, b) => b.startedAt - a.startedAt);
228
+ /** Hard ceiling on live probes per build (never hit in practice). */
229
+ const MAX_LIVE_PROBES = 24;
230
+ const probes = new Map();
231
+ const probe = (inst, sessionId) => {
232
+ const key = `${inst.id}\u0000${sessionId}`;
233
+ let p = probes.get(key);
234
+ if (!p) {
235
+ if (probes.size >= MAX_LIVE_PROBES)
236
+ return Promise.resolve(undefined);
237
+ p = fetchBridgeJson(inst.port, `/settings/workflow-runs?sessionId=${encodeURIComponent(sessionId)}`).catch(() => undefined);
238
+ probes.set(key, p);
239
+ }
240
+ return p;
241
+ };
242
+ for (const row of suspicious) {
243
+ const runId = row.runId;
244
+ const candidates = byWorkspace.get(row.cwd) ?? [];
245
+ outer: for (const inst of candidates) {
246
+ // Running sessions first (most likely to hold a flying run), then the
247
+ // freshest driving copy — the hub's own dedupe ranks bridges that way.
248
+ const sessions = [...inst.sessions].sort((a, b) => (a.status === "running" ? 0 : 1) - (b.status === "running" ? 0 : 1) ||
249
+ (b.updatedAt ?? 0) - (a.updatedAt ?? 0));
250
+ for (const s of sessions) {
251
+ const body = await probe(inst, s.sessionId);
252
+ if (!body)
253
+ continue; // dead / old bridge — next session or instance
254
+ const runs = Array.isArray(body["runs"]) ? body["runs"] : [];
255
+ const match = runs.find((r) => r.runId === runId);
256
+ if (!match)
257
+ continue; // this process does not know the run
258
+ if (typeof match.status === "string" && LIVE_STATUSES.has(match.status)) {
259
+ out.set(runId, { status: match.status, instanceId: inst.id });
260
+ break outer;
261
+ }
262
+ // Found terminal here — a sibling bridge may still hold the live
263
+ // copy, so keep trying the rest of the workspace's sessions.
264
+ }
265
+ }
266
+ }
267
+ return out;
268
+ }
269
+ /**
270
+ * Apply the live truth to a set of journal rows, in place: a row the live
271
+ * registry reports flying loses the foreign "interrupted" verdict, and a row
272
+ * with no owner gets the instance that actually reported it live (the address
273
+ * for stop/detail from a client attached elsewhere).
274
+ */
275
+ function applyLiveTruth(rows, liveRuns) {
276
+ for (const row of rows) {
277
+ const runId = typeof row.runId === "string" ? row.runId : "";
278
+ if (!runId)
279
+ continue;
280
+ const live = liveRuns.get(runId);
281
+ if (!live)
282
+ continue;
283
+ row.status = live.status;
284
+ delete row["stopReason"];
285
+ if (!row.ownerInstanceId)
286
+ row.ownerInstanceId = live.instanceId;
287
+ }
288
+ }
164
289
  /**
165
290
  * Build the machine-level overview from the hub's instance snapshot.
166
291
  * Never throws for bridge-side failures — only for structural bugs.
@@ -182,8 +307,15 @@ export async function buildWorkflowOverview(instances) {
182
307
  // project (each row carrying `cwd`) — the active-run feed and the global
183
308
  // group's badges come from the same answer.
184
309
  const global = await pickPair(instances, "global");
310
+ // Cross-check the global rows' reconciliation-signature verdicts against
311
+ // the owner's live read (see collectLiveOverrides); the runId-keyed result
312
+ // feeds every group carrying the same row.
313
+ const liveOverrides = global
314
+ ? await collectLiveOverrides(instances, global.pair.runs)
315
+ : new Map();
185
316
  let activeRuns = [];
186
317
  if (global) {
318
+ applyLiveTruth(global.pair.runs, liveOverrides);
187
319
  groups.push({
188
320
  instanceId: global.inst.id,
189
321
  scope: "global",
@@ -193,7 +325,7 @@ export async function buildWorkflowOverview(instances) {
193
325
  lastRuns: lastRunByName(global.pair.runs),
194
326
  error: null,
195
327
  });
196
- activeRuns = global.pair.runs.filter((r) => r.status === "running" || r.status === "pending");
328
+ activeRuns = global.pair.runs.filter((r) => typeof r.status === "string" && LIVE_STATUSES.has(r.status));
197
329
  annotateOwners(activeRuns, instances);
198
330
  }
199
331
  // One project group per workspace, workspace-path order (stable across
@@ -215,6 +347,7 @@ export async function buildWorkflowOverview(instances) {
215
347
  error: "no bridge of this workspace answered",
216
348
  };
217
349
  }
350
+ await applyLiveTruth(picked.pair.runs, liveOverrides);
218
351
  return {
219
352
  instanceId: picked.inst.id,
220
353
  scope: "project",
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-overview.js","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-overview.js","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Quota auto-resume watchdog for dynamic-workflow runs.
3
+ *
4
+ * Why: when a workflow subagent hits a usage cap (GLM 1308 …), upstream stops
5
+ * the WHOLE run as `stopped(provider)` with a `ProviderStopDetails{kind:
6
+ * "quota"}` and its notification instructs the agent to call
7
+ * ResumeWorkflowRun AFTER the reset (workflow-notification-copy.ts:55-64).
8
+ * Nothing schedules that "after" — the run sits stopped until a human acts.
9
+ * The bridge owns the process that can wait, so it does: a small persisted
10
+ * registry of pending resumes, a periodic scan over the project's run journal,
11
+ * and a timer per entry.
12
+ *
13
+ * Detection is deliberately journal-first: the v4 session summary carries the
14
+ * failure message (with the provider's business code in brackets) but NOT the
15
+ * structured providerStop/resetAt, and the workflow progress poller gives up
16
+ * after 10 minutes — long runs would never be seen there. The scan reads
17
+ * `workflows/runs` (one session-less RPC), keeps rows that are
18
+ * `stopped(provider)`, and only then resolves the few parent sessions through
19
+ * `v4/conversation/workflowRuns` to read their failure messages.
20
+ *
21
+ * Firing is defensive at every step: quota card first (a known future reset
22
+ * defers without burning an attempt), then a live state read (a run that is
23
+ * running again / finished / no longer resumable drops the entry), then the
24
+ * same `resumeWorkflowRun` command the App's Resume button uses. An accepted
25
+ * resume is re-verified after {@link VERIFY_AFTER_MS}; only a stopped-again run
26
+ * with no known reset burns an attempt and backs off.
27
+ *
28
+ * Store: `~/.zcode/v2/acp-quota-resumes.json`, shared by every bridge process
29
+ * and written only via temp+rename with merge-at-write (the dismissals-store
30
+ * discipline — a torn write would lose every pending resume).
31
+ */
32
+ import type { QuotaResult } from "../quota/types.js";
33
+ import type { ZcodeAcpServer } from "../server.js";
34
+ /** Scan cadence for newly quota-stopped runs. */
35
+ export declare const QUOTA_RESUME_SCAN_INTERVAL_MS: number;
36
+ /** One pending auto-resume. `attempts` counts resume attempts that did not stick. */
37
+ export interface QuotaResumeEntry {
38
+ runId: string;
39
+ /** Parent backend session (the run's journal parentSessionId). */
40
+ zcodeSid: string;
41
+ /** Workspace the run belongs to — bridges re-arm only their own project's entries. */
42
+ cwd: string;
43
+ /** ACP alias when known at schedule time (re-resolved at fire time anyway). */
44
+ acpSid?: string;
45
+ name?: string;
46
+ /** Epoch ms of the next fire. */
47
+ resumeAt: number;
48
+ /** Failed-attempt counter (drives the backoff ladder). */
49
+ attempts: number;
50
+ /** True while the previous resume attempt is inside its verify window. */
51
+ awaitingVerify?: boolean;
52
+ /**
53
+ * Terminal give-up reason. The journal row stays `stopped(provider)+quota`
54
+ * forever, so without this marker the scan would re-schedule the same run
55
+ * every cycle — a retry/give-up loop. A gave-up entry is skipped by scans,
56
+ * re-arms, and the idle-exit predicate; it expires via the TTL, by which
57
+ * time the row is out of the backfill window anyway.
58
+ */
59
+ gaveUp?: string;
60
+ /**
61
+ * In-flight fire claim (cross-process single-flight). Written under the
62
+ * settings file lock by {@link claimFire}; every normal mutation (updateEntry
63
+ * / reschedule / markGaveUp) clears it. Without it, two bridges of the same
64
+ * workspace (editor + serve/TUI) could both resume one run — a money-level
65
+ * double execution.
66
+ */
67
+ firing?: {
68
+ pid: number;
69
+ at: number;
70
+ };
71
+ scheduledAt: number;
72
+ updatedAt: number;
73
+ }
74
+ export interface QuotaResumeInput {
75
+ runId: string;
76
+ zcodeSid: string;
77
+ cwd: string;
78
+ name?: string;
79
+ acpSid?: string;
80
+ /** Provider-reported reset (Retry-After). Absent → the first fire re-derives. */
81
+ resetAt?: number;
82
+ }
83
+ /**
84
+ * Register (or merge) a pending auto-resume. Idempotent per runId; an earlier
85
+ * resumeAt wins so a duplicate detection never delays an armed timer.
86
+ *
87
+ * The whole read-decide-write runs under the store file lock: the merge must
88
+ * see the CURRENT record (a sibling's in-flight fire claim included — which it
89
+ * must never stomp) rather than a snapshot read before the lock was taken.
90
+ */
91
+ export declare function scheduleQuotaResume(server: ZcodeAcpServer, input: QuotaResumeInput): Promise<void>;
92
+ /**
93
+ * One scan over the project's journal for quota-stopped runs. Best-effort and
94
+ * side-effect free when nothing matches; never spawns a backend (the scan is
95
+ * discovery — only a fire may act).
96
+ */
97
+ export declare function scanQuotaStoppedRuns(server: ZcodeAcpServer): Promise<void>;
98
+ export interface QuotaResumeDeps {
99
+ /** Injectable for tests; defaults to the real quota card. */
100
+ queryQuota?: () => Promise<QuotaResult>;
101
+ }
102
+ /**
103
+ * Fire one pending entry. Everything is re-checked here because the state may
104
+ * have moved since scheduling (user resumed/stopped/dismissed the run, quota
105
+ * already recovered, bridge slept past the reset).
106
+ *
107
+ * Cross-process single-flight: the side-effecting tail runs only under a
108
+ * locked fire claim (see {@link claimFire}); a sibling bridge that loses the
109
+ * claim re-arms its local timer and lets the winner's store write (reschedule
110
+ * / retire) become the truth.
111
+ */
112
+ export declare function fire(server: ZcodeAcpServer, runId: string, deps?: QuotaResumeDeps): Promise<void>;
113
+ /**
114
+ * Arm the watchdog for one bridge: re-arm its project's persisted entries and
115
+ * start the periodic scan. Idempotent per server. Scans never spawn a backend
116
+ * and never throw; a bridge that never sees a backend stays silent.
117
+ */
118
+ export declare function armQuotaResumeWatchdog(server: ZcodeAcpServer): void;
119
+ /** Is a resume armed for this run? (test/observability hook) */
120
+ export declare function quotaResumePending(runId: string): boolean;
121
+ /**
122
+ * Is any resume pending for a workspace? The headless serve bridge consults
123
+ * this in its idle decision: exiting would kill the backend the pending
124
+ * resume must act on, breaking "the bridge owns the wait" exactly when the
125
+ * app is asleep (the case the watchdog exists for). Retired (gave-up) entries
126
+ * do not hold a serve bridge alive.
127
+ */
128
+ export declare function hasQuotaResumePendingForCwd(cwd: string): boolean;
129
+ /** Read one entry (test hook). */
130
+ export declare function quotaResumeEntryForTest(runId: string): QuotaResumeEntry | undefined;
131
+ /** Patch an entry and drop its timer (test hook; patches may include `firing`). */
132
+ export declare function updateQuotaResumeEntryForTest(runId: string, patch: Partial<QuotaResumeEntry>): void;
133
+ /** Drop every timer and the store file (test hook). */
134
+ export declare function resetQuotaResumeForTest(): void;
135
+ //# sourceMappingURL=quota-resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-resume.d.ts","sourceRoot":"","sources":["../../src/workflow/quota-resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAyBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMnD,iDAAiD;AACjD,eAAO,MAAM,6BAA6B,QAAa,CAAC;AA8CxD,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AA8QD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAyDf;AA0CD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EhF;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqIf;AAmED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA2BnE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKhE;AAED,kCAAkC;AAClC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEnF;AAED,mFAAmF;AACnF,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC/B,IAAI,CAQN;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C"}