teamshare-bridge 0.26.21 → 0.26.22
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/bridge/local-server.d.ts +29 -0
- package/dist/bridge/local-server.js +202 -12
- package/dist/bridge/local-server.js.map +1 -1
- package/dist/lib/harness/activity.d.ts +95 -0
- package/dist/lib/harness/activity.js +110 -0
- package/dist/lib/harness/activity.js.map +1 -0
- package/dist/lib/harness/opencode-control.d.ts +22 -0
- package/dist/lib/harness/opencode-control.js +47 -2
- package/dist/lib/harness/opencode-control.js.map +1 -1
- package/dist/lib/harness/spawn.js +237 -12
- package/dist/lib/harness/spawn.js.map +1 -1
- package/dist/lib/workspace/bus.d.ts +9 -0
- package/dist/lib/workspace/bus.js +25 -0
- package/dist/lib/workspace/bus.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Run activity clock (2026-10-27).
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS - the data-collector incident.
|
|
6
|
+
* ----------------------------------------------
|
|
7
|
+
* The harness kill-switch was an IDLE timer, but the idle signal was the child
|
|
8
|
+
* process's stdout/stderr and nothing else. That is wrong for OpenCode V2 in
|
|
9
|
+
* three ways, and all three are silent:
|
|
10
|
+
*
|
|
11
|
+
* 1. V2 is a client/server product. While the SERVICE runs a tool call the
|
|
12
|
+
* CLI client prints nothing, so one long `execute` looks exactly like a
|
|
13
|
+
* dead harness. Live case: `navigate` to a LinkedIn job posting never
|
|
14
|
+
* returned, the console was silent for 60 minutes, and the run was killed
|
|
15
|
+
* with "the harness went silent" at 60m03s.
|
|
16
|
+
* 2. Subagent output is relayed by US (`startSubagentRelay`), not printed by
|
|
17
|
+
* the child, so a working subagent never reset the timer either.
|
|
18
|
+
* 3. A background shell runs on the service too; its output never reaches the
|
|
19
|
+
* parent pipe.
|
|
20
|
+
*
|
|
21
|
+
* So "silence on the pipe" is not "no work". This module makes the run's
|
|
22
|
+
* liveness ONE clock fed by every channel we can actually observe:
|
|
23
|
+
*
|
|
24
|
+
* stdout - a chunk on the child's stdout/stderr (the old signal)
|
|
25
|
+
* subagent - a NEW assistant message in a child session
|
|
26
|
+
* shell - a running background shell in the run's location
|
|
27
|
+
* mcp - a relayed MCP request from this run (see the daemon's
|
|
28
|
+
* `/internal/session-activity`)
|
|
29
|
+
*
|
|
30
|
+
* The idle kill fires only when EVERY channel has been quiet for the budget.
|
|
31
|
+
* The decision stays pure so the regression cannot come back unnoticed.
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.ActivityClock = void 0;
|
|
35
|
+
exports.activityActor = activityActor;
|
|
36
|
+
exports.decideIdleKill = decideIdleKill;
|
|
37
|
+
exports.shouldWarnStall = shouldWarnStall;
|
|
38
|
+
const MAX_DETAIL = 120;
|
|
39
|
+
/** One clock per harness invocation. Never shared across runs. */
|
|
40
|
+
class ActivityClock {
|
|
41
|
+
spawnedAt;
|
|
42
|
+
lastActivityAt;
|
|
43
|
+
lastOutputAt = null;
|
|
44
|
+
lastKind = 'none';
|
|
45
|
+
lastDetail = null;
|
|
46
|
+
constructor(now = Date.now()) {
|
|
47
|
+
this.spawnedAt = now;
|
|
48
|
+
this.lastActivityAt = now;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Record activity. `detail` is the thing that spoke, and it is what the idle
|
|
52
|
+
* kill message names - a bare "no output" is what made the original failure
|
|
53
|
+
* impossible to diagnose.
|
|
54
|
+
*/
|
|
55
|
+
note(kind, detail) {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
this.lastActivityAt = now;
|
|
58
|
+
this.lastKind = kind;
|
|
59
|
+
const cleaned = typeof detail === 'string' ? detail.trim() : '';
|
|
60
|
+
this.lastDetail = cleaned ? cleaned.slice(0, MAX_DETAIL) : null;
|
|
61
|
+
if (kind === 'stdout')
|
|
62
|
+
this.lastOutputAt = now;
|
|
63
|
+
}
|
|
64
|
+
snapshot() {
|
|
65
|
+
return {
|
|
66
|
+
spawnedAt: this.spawnedAt,
|
|
67
|
+
lastActivityAt: this.lastActivityAt,
|
|
68
|
+
lastOutputAt: this.lastOutputAt,
|
|
69
|
+
lastKind: this.lastKind,
|
|
70
|
+
lastDetail: this.lastDetail,
|
|
71
|
+
everOutput: this.lastOutputAt !== null,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.ActivityClock = ActivityClock;
|
|
76
|
+
/** Human label for the newest activity ("mcp (browser_action)"). */
|
|
77
|
+
function activityActor(snapshot) {
|
|
78
|
+
if (snapshot.lastKind === 'none')
|
|
79
|
+
return 'nothing yet';
|
|
80
|
+
return snapshot.lastDetail
|
|
81
|
+
? `${snapshot.lastKind} (${snapshot.lastDetail})`
|
|
82
|
+
: snapshot.lastKind;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The idle decision. Pure on purpose: a test can pin every branch without a
|
|
86
|
+
* child process, a service or a clock.
|
|
87
|
+
*/
|
|
88
|
+
function decideIdleKill(input) {
|
|
89
|
+
const silentMs = Math.max(0, input.now - input.snapshot.lastActivityAt);
|
|
90
|
+
const kill = silentMs >= Math.max(1, input.idleMs);
|
|
91
|
+
return {
|
|
92
|
+
kill,
|
|
93
|
+
// "Cold" means NOTHING has ever spoken on ANY channel - the boot-hang case
|
|
94
|
+
// (an expired token waiting for interactive re-auth). A run that produced
|
|
95
|
+
// tools but no stdout is not cold, and must not be described as one.
|
|
96
|
+
cold: input.snapshot.lastKind === 'none',
|
|
97
|
+
silentMs,
|
|
98
|
+
actor: activityActor(input.snapshot),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* "It has been quiet long enough to warn" - the early console line that turns
|
|
103
|
+
* a 60-minute mystery into a named stall. The caller keeps `lastWarnAt` so a
|
|
104
|
+
* warning is emitted at most once per window.
|
|
105
|
+
*/
|
|
106
|
+
function shouldWarnStall(input) {
|
|
107
|
+
const quietSince = Math.max(input.snapshot.lastActivityAt, input.lastWarnAt);
|
|
108
|
+
return input.now - quietSince >= Math.max(1, input.warnMs);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/lib/harness/activity.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAyEH,sCAKC;AAMD,wCAgBC;AAOD,0CAQC;AApFD,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,kEAAkE;AAClE,MAAa,aAAa;IACP,SAAS,CAAS;IAC3B,cAAc,CAAS;IACvB,YAAY,GAAkB,IAAI,CAAC;IACnC,QAAQ,GAA0B,MAAM,CAAC;IACzC,UAAU,GAAkB,IAAI,CAAC;IAEzC,YAAY,MAAc,IAAI,CAAC,GAAG,EAAE;QAClC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,IAAkB,EAAE,MAAsB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,IAAI,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI;SACvC,CAAC;IACJ,CAAC;CACF;AApCD,sCAoCC;AAED,oEAAoE;AACpE,SAAgB,aAAa,CAAC,QAA0B;IACtD,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC;IACvD,OAAO,QAAQ,CAAC,UAAU;QACxB,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,GAAG;QACjD,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAI9B;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO;QACL,IAAI;QACJ,2EAA2E;QAC3E,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM;QACxC,QAAQ;QACR,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAK/B;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -79,9 +79,31 @@ export declare function listSubagentSessions(parentId: string, cwd: string, time
|
|
|
79
79
|
export declare function listSessionMessages(sessionId: string, cwd: string, limit?: number, timeoutMs?: number): Promise<Array<Record<string, unknown>>>;
|
|
80
80
|
/** Human-readable line for a subagent assistant message (text or tool). */
|
|
81
81
|
export declare function formatSubagentMessage(message: Record<string, unknown>): string;
|
|
82
|
+
/**
|
|
83
|
+
* Every DESCENDANT of a run's main session, breadth-first (2026-10-27).
|
|
84
|
+
*
|
|
85
|
+
* `listSubagentSessions` is one level deep, which left "processes that spin up
|
|
86
|
+
* others" completely invisible: a subagent that spawned its own subagent was
|
|
87
|
+
* never relayed to the console, never counted as run activity, and never
|
|
88
|
+
* interrupted when the run ended - it could keep driving the debug browser
|
|
89
|
+
* after "finished". Depth and session count are BOUNDED so a runaway tree
|
|
90
|
+
* cannot turn the poll into an unbounded fan-out.
|
|
91
|
+
*/
|
|
92
|
+
export interface SubagentTreeEntry extends SubagentSessionInfo {
|
|
93
|
+
/** 1 = a direct child, 2 = a grandchild, ... */
|
|
94
|
+
depth: number;
|
|
95
|
+
}
|
|
96
|
+
export declare function listSubagentTree(parentId: string, cwd: string, opts?: {
|
|
97
|
+
maxDepth?: number;
|
|
98
|
+
maxSessions?: number;
|
|
99
|
+
}): Promise<SubagentTreeEntry[]>;
|
|
82
100
|
/**
|
|
83
101
|
* Interrupt every child session of `parentId` (and any already-known child
|
|
84
102
|
* ids). Returns the number of children found. Best-effort: a child that
|
|
85
103
|
* cannot be interrupted is logged, never thrown.
|
|
104
|
+
*
|
|
105
|
+
* 2026-10-27: walks the WHOLE TREE (`listSubagentTree`), not just direct
|
|
106
|
+
* children - a grandchild kept running after its parent was interrupted and
|
|
107
|
+
* outlived the run.
|
|
86
108
|
*/
|
|
87
109
|
export declare function interruptSubagentSessions(parentId: string, cwd: string, knownIds?: string[]): Promise<number>;
|
|
@@ -16,6 +16,7 @@ exports.buildSessionMessagesArgs = buildSessionMessagesArgs;
|
|
|
16
16
|
exports.listSubagentSessions = listSubagentSessions;
|
|
17
17
|
exports.listSessionMessages = listSessionMessages;
|
|
18
18
|
exports.formatSubagentMessage = formatSubagentMessage;
|
|
19
|
+
exports.listSubagentTree = listSubagentTree;
|
|
19
20
|
exports.interruptSubagentSessions = interruptSubagentSessions;
|
|
20
21
|
/**
|
|
21
22
|
* OpenCode V2 session control (2026-10).
|
|
@@ -363,17 +364,61 @@ function formatSubagentMessage(message) {
|
|
|
363
364
|
}
|
|
364
365
|
return parts.join(' ').replace(/\s+/g, ' ').trim().slice(0, 2000);
|
|
365
366
|
}
|
|
367
|
+
async function listSubagentTree(parentId, cwd, opts = {}) {
|
|
368
|
+
if (!OPENCODE_SESSION_ID.test(parentId) || !cwd)
|
|
369
|
+
return [];
|
|
370
|
+
const maxDepth = Math.max(1, Math.min(5, opts.maxDepth ?? 3));
|
|
371
|
+
const maxSessions = Math.max(1, Math.min(200, opts.maxSessions ?? 50));
|
|
372
|
+
// Each level is one `opencode api` PROCESS PER PARENT, so the traversal needs
|
|
373
|
+
// a probe budget as well as a session cap: a wide tree must not turn a 2.5 s
|
|
374
|
+
// relay poll into hundreds of subprocesses.
|
|
375
|
+
const maxProbes = Math.max(maxSessions, 60);
|
|
376
|
+
const out = [];
|
|
377
|
+
const seen = new Set([parentId]);
|
|
378
|
+
let frontier = [parentId];
|
|
379
|
+
let probes = 0;
|
|
380
|
+
for (let depth = 1; depth <= maxDepth && frontier.length > 0; depth += 1) {
|
|
381
|
+
const next = [];
|
|
382
|
+
for (const id of frontier) {
|
|
383
|
+
if (probes >= maxProbes)
|
|
384
|
+
return out;
|
|
385
|
+
probes += 1;
|
|
386
|
+
for (const child of await listSubagentSessions(id, cwd)) {
|
|
387
|
+
if (seen.has(child.id))
|
|
388
|
+
continue;
|
|
389
|
+
seen.add(child.id);
|
|
390
|
+
out.push({ ...child, depth });
|
|
391
|
+
next.push(child.id);
|
|
392
|
+
if (out.length >= maxSessions)
|
|
393
|
+
return out;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
frontier = next;
|
|
397
|
+
}
|
|
398
|
+
return out;
|
|
399
|
+
}
|
|
366
400
|
/**
|
|
367
401
|
* Interrupt every child session of `parentId` (and any already-known child
|
|
368
402
|
* ids). Returns the number of children found. Best-effort: a child that
|
|
369
403
|
* cannot be interrupted is logged, never thrown.
|
|
404
|
+
*
|
|
405
|
+
* 2026-10-27: walks the WHOLE TREE (`listSubagentTree`), not just direct
|
|
406
|
+
* children - a grandchild kept running after its parent was interrupted and
|
|
407
|
+
* outlived the run.
|
|
370
408
|
*/
|
|
371
409
|
async function interruptSubagentSessions(parentId, cwd, knownIds = []) {
|
|
372
410
|
const ids = new Set(knownIds.filter((id) => OPENCODE_SESSION_ID.test(id)));
|
|
373
|
-
|
|
411
|
+
const tree = await listSubagentTree(parentId, cwd);
|
|
412
|
+
for (const child of tree)
|
|
374
413
|
ids.add(child.id);
|
|
375
|
-
|
|
414
|
+
// Leaves first: interrupting a parent can end its subtree, and the child ids
|
|
415
|
+
// we already know are still safe to interrupt afterwards (idempotent).
|
|
416
|
+
const ordered = [...tree].sort((a, b) => b.depth - a.depth).map((c) => c.id);
|
|
417
|
+
for (const id of ordered)
|
|
418
|
+
await interruptOpencodeSession(id);
|
|
376
419
|
for (const id of ids) {
|
|
420
|
+
if (ordered.includes(id))
|
|
421
|
+
continue;
|
|
377
422
|
await interruptOpencodeSession(id);
|
|
378
423
|
}
|
|
379
424
|
return ids.size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-control.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"opencode-control.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-control.ts"],"names":[],"mappings":";;AA2BA,gEAGC;AAUD,4DA0BC;AA0BD,0CAMC;AAOD,gDAGC;AAED,8CAGC;AAED,oDAGC;AAyDD,gDA8BC;AAGD,4CAQC;AAGD,kDAQC;AAQD,gDAeC;AAmBD,oDAkEC;AAgBD,sDAUC;AAED,4DAWC;AAGD,oDA8BC;AAGD,kDAoBC;AAGD,sDAgCC;AAiBD,4CAgCC;AAWD,8DAiBC;AA9hBD;;;;;;;;;;;;;;GAcG;AACH,2DAA8C;AAC9C,uCAAuC;AAEvC,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACjD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,SAAS,YAAY,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,SAAiB,EACjB,SAAS,GAAG,MAAM;IAElB,MAAM,IAAI,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,IAAA,6BAAQ,EACN,GAAG,CAAC,IAAI,EACR,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,EACjE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAyBD,oFAAoF;AACpF,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,EAAE,GAAG,2DAA2D,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,yDAAyD;AACzD,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,2BAA2B,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,iBAAiB,CAAC,EAAU,EAAE,GAAW;IACvD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,oBAAoB,CAAC,EAAU,EAAE,GAAW;IAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,0EAA0E;AAC1E,SAAS,cAAc,CACrB,IAAqB,EACrB,SAAiB;IAEjB,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,IAAA,6BAAQ,EACN,GAAG,CAAC,IAAI,EACR,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EACrE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAG5B,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3E,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC3D,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;gBAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAqB,EAAE;gBACnC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AACpE,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;YACzC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3D,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;oBAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAqB,EAAE;oBACnC,CAAC,CAAC,EAAE,CAAC;aACoB,CAAC;QAChC,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,iEAAiE;AAC1D,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,GAAW,EACX,SAAS,GAAG,KAAK;IAEjB,OAAO,cAAc,CACnB,MAAM,cAAc,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,oDAAoD;AAC7C,KAAK,UAAU,mBAAmB,CACvC,EAAU,EACV,GAAW,EACX,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,oBAAoB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,6EAA6E;IAC7E,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,IAA8B,EAC9B,YAAY,GAAG,KAAK;IAEpB,IAAI,CAAC,IAAI;QAAE,OAAO,oCAAoC,CAAC;IACvD,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,uCAAuC,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,aAAa,IAAI,CAAC,MAAM,GAAG,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAmBM,KAAK,UAAU,oBAAoB,CAAC,IAQ1C;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,sBAAsB;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,MAAM;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;QAC5B,CAAC,CAAC,6BAA6B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpD,CAAC,CAAC,GAAG,OAAO,8BAA8B,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC;AAgBD,SAAgB,qBAAqB,CACnC,QAAgB,EAChB,GAAW;IAEX,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO;QACL,KAAK;QACL,KAAK;QACL,yBAAyB,kBAAkB,CAAC,QAAQ,CAAC,cAAc,kBAAkB,CAAC,GAAG,CAAC,WAAW;KACtG,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CACtC,SAAiB,EACjB,GAAW,EACX,KAAK,GAAG,EAAE;IAEV,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO;QACL,KAAK;QACL,KAAK;QACL,gBAAgB,SAAS,4CAA4C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE;KACxG,CAAC;AACJ,CAAC;AAED,uEAAuE;AAChE,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,GAAW,EACX,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,EACpC,SAAS,CACV,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;YACzC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,OAAO,IAAI,CAAC;YACd,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnC,CAAC;QAClC,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8EAA8E;AACvE,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,GAAW,EACX,KAAK,GAAG,EAAE,EACV,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B,wBAAwB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,EAC/C,SAAS,CACV,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;aACzE,OAAO,EAAE,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAgB,qBAAqB,CACnC,OAAgC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,IAAI,GAAG,GAA8B,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAC1C,CAAC,CAAE,IAAI,CAAC,KAAiC;gBACzC,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,MAAM,GACV,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,MAAM,GACV,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;gBACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACxD,CAAC,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CACR,UAAU,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAC9C,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAC3B,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AAiBM,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,GAAW,EACX,OAAoD,EAAE;IAEtD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,8EAA8E;IAC9E,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,GAAG,CAAC;YACpC,MAAM,IAAI,CAAC,CAAC;YACZ,KAAK,MAAM,KAAK,IAAI,MAAM,oBAAoB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,IAAI,GAAG,CAAC,MAAM,IAAI,WAAW;oBAAE,OAAO,GAAG,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,GAAW,EACX,WAAqB,EAAE;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,IAAI;QAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,KAAK,MAAM,EAAE,IAAI,OAAO;QAAE,MAAM,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,SAAS;QACnC,MAAM,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
|
|
@@ -26,6 +26,7 @@ const harness_output_1 = require("./harness-output");
|
|
|
26
26
|
const line_assembler_1 = require("./line-assembler");
|
|
27
27
|
const opencode_outcome_1 = require("./opencode-outcome");
|
|
28
28
|
const opencode_control_1 = require("./opencode-control");
|
|
29
|
+
const activity_1 = require("./activity");
|
|
29
30
|
const agy_pty_1 = require("./agy-pty");
|
|
30
31
|
const prompt_file_1 = require("./prompt-file");
|
|
31
32
|
const diagnostics_1 = require("../diagnostics");
|
|
@@ -298,7 +299,21 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
298
299
|
const shellIds = new Set();
|
|
299
300
|
const subagentSessionIds = new Set();
|
|
300
301
|
let lastRunCwd = settings.cwd ?? process.cwd();
|
|
302
|
+
/**
|
|
303
|
+
* Set when THIS invocation ended on the idle/stall kill (exit 124).
|
|
304
|
+
*
|
|
305
|
+
* 2026-10-27: an idle kill used to be treated exactly like a harness
|
|
306
|
+
* failure, so the session record was cleared and the retry started from
|
|
307
|
+
* zero. After a false kill that discarded two hours of harvest the rule is:
|
|
308
|
+
* a kill is OUR decision about idleness, not evidence that the conversation
|
|
309
|
+
* is broken - keep it so the retry can continue. Real harness failures still
|
|
310
|
+
* forget the session.
|
|
311
|
+
*/
|
|
312
|
+
let idleKilled = false;
|
|
301
313
|
const runOnce = async (req) => {
|
|
314
|
+
// One invocation = one idle decision. A continuation that fails starts a
|
|
315
|
+
// FRESH run; that run's kill must not inherit this attempt's flag.
|
|
316
|
+
idleKilled = false;
|
|
302
317
|
// RUN SCOPE (2026-10): a run in a SHARED folder (the human's own project
|
|
303
318
|
// root - plan / chat / tool / document jobs run there on purpose) gets a
|
|
304
319
|
// directory of its OWN, so the opencode service registers a separate
|
|
@@ -494,9 +509,35 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
494
509
|
windowsHide: true,
|
|
495
510
|
});
|
|
496
511
|
const timeoutMs = Math.max(1, settings.timeoutMin ?? 60) * 60_000;
|
|
512
|
+
/**
|
|
513
|
+
* ONE CLOCK FOR THE RUN'S LIVENESS (2026-10-27).
|
|
514
|
+
*
|
|
515
|
+
* The idle kill used to measure the child's stdout only, which is blind
|
|
516
|
+
* to OpenCode V2 work: the CLI prints nothing while the service runs a
|
|
517
|
+
* tool, subagent lines are printed by US, and a shell's output never
|
|
518
|
+
* reaches this pipe. Every channel we can observe feeds this clock; the
|
|
519
|
+
* kill fires only when ALL of them have been quiet for the budget.
|
|
520
|
+
*/
|
|
521
|
+
const activity = new activity_1.ActivityClock();
|
|
522
|
+
const STALL_WARN_MS = Math.max(1, Number(process.env.TEAMSHARE_STALL_WARN_MIN) || 5) * 60_000;
|
|
523
|
+
const HEARTBEAT_MS = 5 * 60_000;
|
|
524
|
+
/**
|
|
525
|
+
* A shell that has said "running" for longer than this stops counting as
|
|
526
|
+
* activity. Work IS activity; a hung process that merely exists is not,
|
|
527
|
+
* and must not hold the run open for the full lock TTL.
|
|
528
|
+
*/
|
|
529
|
+
const SHELL_ACTIVITY_MAX_MS = Math.max(1, Number(process.env.TEAMSHARE_SHELL_ACTIVITY_MAX_MIN) || 120) * 60_000;
|
|
530
|
+
const shellFirstSeen = new Map();
|
|
531
|
+
const longShellWarned = new Set();
|
|
532
|
+
let stallWarnedAt = 0;
|
|
533
|
+
let lastHeartbeatAt = 0;
|
|
534
|
+
let lastRelayActivityAt = 0;
|
|
535
|
+
let relayProbeMisses = 0;
|
|
536
|
+
let activityTimer = null;
|
|
497
537
|
let killTimer = null;
|
|
498
538
|
let settled = false;
|
|
499
|
-
|
|
539
|
+
/** 124 when WE killed it; the close handler must not overwrite it. */
|
|
540
|
+
let forcedExitCode = null;
|
|
500
541
|
let resumeFailure = false;
|
|
501
542
|
/** Set by the scope guard: the run is killed and must report FAILURE. */
|
|
502
543
|
let scopeAborted = false;
|
|
@@ -564,11 +605,15 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
564
605
|
await revokeRelayKey(runKey);
|
|
565
606
|
})();
|
|
566
607
|
};
|
|
567
|
-
// SUBAGENT RELAY (2026-10): child sessions are service-owned. Poll
|
|
568
|
-
//
|
|
569
|
-
//
|
|
608
|
+
// SUBAGENT RELAY (2026-10): child sessions are service-owned. Poll the
|
|
609
|
+
// WHOLE descendant tree (2026-10-27 - a subagent that spawned its own
|
|
610
|
+
// subagent used to be invisible and outlived the run), log every new
|
|
611
|
+
// message with a prefix, feed the activity clock, and remember the ids
|
|
612
|
+
// so they can be interrupted at session end.
|
|
570
613
|
let subagentTimer = null;
|
|
571
614
|
let subagentTicking = false;
|
|
615
|
+
let subagentTree = [];
|
|
616
|
+
let subagentTreeTick = 0;
|
|
572
617
|
const subagentSeen = new Set();
|
|
573
618
|
const startSubagentRelay = (parentId) => {
|
|
574
619
|
if (subagentTimer || !runCwd)
|
|
@@ -579,7 +624,18 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
579
624
|
subagentTicking = true;
|
|
580
625
|
void (async () => {
|
|
581
626
|
try {
|
|
582
|
-
|
|
627
|
+
// The TREE is refreshed every third tick (7.5 s): walking levels
|
|
628
|
+
// costs one service process per parent, and a deep tree must not
|
|
629
|
+
// turn a 2.5 s poll into a fan-out. New descendants are picked up
|
|
630
|
+
// on the next scan, and their MESSAGES still poll every tick.
|
|
631
|
+
if (subagentTree.length === 0 || subagentTreeTick % 3 === 0) {
|
|
632
|
+
subagentTree = await (0, opencode_control_1.listSubagentTree)(parentId, runCwd, {
|
|
633
|
+
maxDepth: 3,
|
|
634
|
+
maxSessions: 50,
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
subagentTreeTick += 1;
|
|
638
|
+
const children = subagentTree;
|
|
583
639
|
for (const child of children) {
|
|
584
640
|
subagentSessionIds.add(child.id);
|
|
585
641
|
const messages = await (0, opencode_control_1.listSessionMessages)(child.id, runCwd, 50);
|
|
@@ -596,9 +652,20 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
596
652
|
for (const shellId of (0, opencode_control_1.extractShellIds)(rawMessage)) {
|
|
597
653
|
shellIds.add(shellId);
|
|
598
654
|
}
|
|
655
|
+
// A NEW subagent message is real work even though the parent
|
|
656
|
+
// CLI printed nothing for it (the line below is OUR log).
|
|
657
|
+
activity.note('subagent', `ses ${shortId(child.id)}`);
|
|
658
|
+
startIdleTimer();
|
|
659
|
+
if (Date.now() - lastHeartbeatAt >= HEARTBEAT_MS) {
|
|
660
|
+
lastHeartbeatAt = Date.now();
|
|
661
|
+
log(`[harness] still working - subagent ${shortId(child.id)} is producing output`, 'stdout');
|
|
662
|
+
}
|
|
599
663
|
const line = (0, opencode_control_1.formatSubagentMessage)(message);
|
|
664
|
+
const prefix = child.depth > 1
|
|
665
|
+
? `[subagent L${child.depth} ${shortId(child.id)}]`
|
|
666
|
+
: `[subagent ${shortId(child.id)}]`;
|
|
600
667
|
if (line)
|
|
601
|
-
log(
|
|
668
|
+
log(`${prefix} ${line}`);
|
|
602
669
|
}
|
|
603
670
|
}
|
|
604
671
|
}
|
|
@@ -668,6 +735,10 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
668
735
|
return;
|
|
669
736
|
settled = true;
|
|
670
737
|
stopSubagentRelay();
|
|
738
|
+
if (activityTimer) {
|
|
739
|
+
clearInterval(activityTimer);
|
|
740
|
+
activityTimer = null;
|
|
741
|
+
}
|
|
671
742
|
// A sink that throws must not prevent resolution - that would leave the
|
|
672
743
|
// caller holding the agent lock, the task claim, the presence row and
|
|
673
744
|
// the mirror lease forever.
|
|
@@ -688,9 +759,24 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
688
759
|
clearTimeout(killTimer);
|
|
689
760
|
killTimer = setTimeout(() => {
|
|
690
761
|
void (async () => {
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
:
|
|
762
|
+
const verdict = (0, activity_1.decideIdleKill)({
|
|
763
|
+
snapshot: activity.snapshot(),
|
|
764
|
+
now: Date.now(),
|
|
765
|
+
idleMs: timeoutMs,
|
|
766
|
+
});
|
|
767
|
+
// Activity landed between arming the timer and it firing (a
|
|
768
|
+
// subagent message, a relayed tool call, a shell): the run is
|
|
769
|
+
// alive, so re-arm instead of killing it.
|
|
770
|
+
if (!verdict.kill) {
|
|
771
|
+
startIdleTimer();
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
idleKilled = true;
|
|
775
|
+
forcedExitCode = 124;
|
|
776
|
+
const minutes = Math.max(1, Math.round(timeoutMs / 60_000));
|
|
777
|
+
log(verdict.cold
|
|
778
|
+
? `[harness] ${adapter.name} produced NO output at all in ${minutes} min and never exited - killing it (silent hang: nothing printed, nothing died)`
|
|
779
|
+
: `[harness] ${adapter.name} killed after ${minutes} min with NO output, tool call, subagent or shell activity (idle timeout - last activity: ${verdict.actor}, ${Math.max(1, Math.round(verdict.silentMs / 60_000))} min ago; total runtime is NOT capped, a run that keeps working never times out)`, 'stderr');
|
|
694
780
|
// OpenCode V2 is client/server: killing the CLI does not stop the
|
|
695
781
|
// shared-service session. Interrupt it first, or the idle kill
|
|
696
782
|
// leaves a silent session driving the browser (2026-10).
|
|
@@ -715,6 +801,105 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
715
801
|
})();
|
|
716
802
|
}, timeoutMs);
|
|
717
803
|
};
|
|
804
|
+
/** A throttled "still working" line so a busy run never looks dead. */
|
|
805
|
+
const heartbeat = (what) => {
|
|
806
|
+
const now = Date.now();
|
|
807
|
+
if (now - lastHeartbeatAt < HEARTBEAT_MS)
|
|
808
|
+
return;
|
|
809
|
+
lastHeartbeatAt = now;
|
|
810
|
+
log(`[harness] still working - ${what}`, 'stdout');
|
|
811
|
+
};
|
|
812
|
+
/**
|
|
813
|
+
* ACTIVITY PROBE (2026-10-27).
|
|
814
|
+
*
|
|
815
|
+
* Two channels the child process cannot show us:
|
|
816
|
+
* - MCP relay calls, which the DAEMON serves (a silent `browser_action`
|
|
817
|
+
* in flight is work, not death);
|
|
818
|
+
* - background shells, whose output stays on the shared service.
|
|
819
|
+
* Both only refresh the clock; they never invent activity.
|
|
820
|
+
*/
|
|
821
|
+
const startActivityPoller = () => {
|
|
822
|
+
if (resolved !== 'opencode')
|
|
823
|
+
return;
|
|
824
|
+
activityTimer = setInterval(() => {
|
|
825
|
+
void (async () => {
|
|
826
|
+
if (settled)
|
|
827
|
+
return;
|
|
828
|
+
const now = Date.now();
|
|
829
|
+
// 1) Relayed MCP/tool activity. Give up after 3 misses (no daemon,
|
|
830
|
+
// or a run wired straight to the API) instead of polling forever.
|
|
831
|
+
if (runKey && relayProbeMisses < 3) {
|
|
832
|
+
const signal = await readRelayActivity(runKey);
|
|
833
|
+
if (!signal) {
|
|
834
|
+
relayProbeMisses += 1;
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
relayProbeMisses = 0;
|
|
838
|
+
if (signal.lastActivityAt > lastRelayActivityAt) {
|
|
839
|
+
lastRelayActivityAt = signal.lastActivityAt;
|
|
840
|
+
activity.note('mcp', signal.lastTool ?? 'tool call');
|
|
841
|
+
startIdleTimer();
|
|
842
|
+
const snap = activity.snapshot();
|
|
843
|
+
const quietFrom = snap.lastOutputAt ?? snap.spawnedAt;
|
|
844
|
+
if (now - quietFrom >= STALL_WARN_MS) {
|
|
845
|
+
heartbeat(`relayed tool activity (${signal.lastTool ?? 'tool call'})`);
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
// 2) A background shell still running in this run's folder. Its
|
|
851
|
+
// output never reaches the parent pipe, so it is invisible
|
|
852
|
+
// unless we ask the service.
|
|
853
|
+
//
|
|
854
|
+
// Only a shell WE saw in this run's stream counts (`shellIds`):
|
|
855
|
+
// the service lists every shell in the folder, and a human's own
|
|
856
|
+
// terminal must not keep a dead run alive. A shell also stops
|
|
857
|
+
// counting after SHELL_ACTIVITY_MAX_MS - a hung `npm install`
|
|
858
|
+
// that merely says "running" must not hold the run open forever.
|
|
859
|
+
const snap = activity.snapshot();
|
|
860
|
+
if (runCwd && now - snap.lastActivityAt >= STALL_WARN_MS) {
|
|
861
|
+
const shells = await (0, opencode_control_1.listOpencodeShells)(runCwd, 4_000);
|
|
862
|
+
for (const shell of shells) {
|
|
863
|
+
if (shell.status !== 'running')
|
|
864
|
+
continue;
|
|
865
|
+
if (!shellIds.has(shell.id))
|
|
866
|
+
continue;
|
|
867
|
+
const first = shellFirstSeen.get(shell.id) ?? now;
|
|
868
|
+
shellFirstSeen.set(shell.id, first);
|
|
869
|
+
if (now - first > SHELL_ACTIVITY_MAX_MS) {
|
|
870
|
+
if (!longShellWarned.has(shell.id)) {
|
|
871
|
+
longShellWarned.add(shell.id);
|
|
872
|
+
log(`[harness] shell ${shell.command ?? shell.id} has run for over ${Math.round(SHELL_ACTIVITY_MAX_MS / 60_000)} min - it no longer counts as run activity`, 'stderr');
|
|
873
|
+
}
|
|
874
|
+
continue;
|
|
875
|
+
}
|
|
876
|
+
activity.note('shell', shell.command ?? shell.id);
|
|
877
|
+
startIdleTimer();
|
|
878
|
+
heartbeat(`background shell ${shell.command ?? shell.id} is still running`);
|
|
879
|
+
break;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
// 3) The early warning that NAMES the stall. It is only a line;
|
|
883
|
+
// the kill still waits for the full idle budget.
|
|
884
|
+
const latest = activity.snapshot();
|
|
885
|
+
if ((0, activity_1.shouldWarnStall)({
|
|
886
|
+
snapshot: latest,
|
|
887
|
+
now,
|
|
888
|
+
warnMs: STALL_WARN_MS,
|
|
889
|
+
lastWarnAt: stallWarnedAt,
|
|
890
|
+
})) {
|
|
891
|
+
stallWarnedAt = now;
|
|
892
|
+
const stdoutMin = latest.lastOutputAt
|
|
893
|
+
? Math.round((now - latest.lastOutputAt) / 60_000)
|
|
894
|
+
: null;
|
|
895
|
+
log(`[harness] ${stdoutMin === null
|
|
896
|
+
? 'no output at all'
|
|
897
|
+
: `no stdout for ${Math.max(1, stdoutMin)} min`} - last activity: ${(0, activity_1.activityActor)(latest)}. Not dead unless the ${Math.max(1, Math.round(timeoutMs / 60_000))} min idle timeout is reached.`, 'stdout');
|
|
898
|
+
}
|
|
899
|
+
})();
|
|
900
|
+
}, 30_000);
|
|
901
|
+
activityTimer.unref?.();
|
|
902
|
+
};
|
|
718
903
|
// ARMED AT SPAWN, not at first output (2026-10). The ONLY caller of
|
|
719
904
|
// this timer used to be `tee` - a stdout/stderr `data` handler - so a
|
|
720
905
|
// child that opened its pipes and then wrote NOTHING (an expired Claude
|
|
@@ -725,8 +910,9 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
725
910
|
// One silent harness therefore wedged the agent for the full 24 h lock
|
|
726
911
|
// TTL, with every wake queued behind it and the hub showing it "working".
|
|
727
912
|
startIdleTimer();
|
|
913
|
+
startActivityPoller();
|
|
728
914
|
const tee = (chunk, level) => {
|
|
729
|
-
|
|
915
|
+
activity.note('stdout');
|
|
730
916
|
startIdleTimer();
|
|
731
917
|
(level === 'stdout' ? outSink : errSink).push(chunk.toString('utf8'));
|
|
732
918
|
};
|
|
@@ -762,7 +948,7 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
762
948
|
/* reporting must never block resolution */
|
|
763
949
|
}
|
|
764
950
|
}
|
|
765
|
-
done(code ?? 1);
|
|
951
|
+
done(forcedExitCode ?? code ?? 1);
|
|
766
952
|
});
|
|
767
953
|
}).catch((err) => {
|
|
768
954
|
// `spawn()` can throw SYNCHRONOUSLY (bad argv, ENOENT before the `error`
|
|
@@ -875,7 +1061,12 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
875
1061
|
const questionStillOpen = failedRun && canHaveQuestion
|
|
876
1062
|
? await hasOpenQuestion(settings, store.taskId)
|
|
877
1063
|
: false;
|
|
878
|
-
|
|
1064
|
+
// AN IDLE KILL IS OUR DECISION, NOT A BROKEN CONVERSATION (2026-10-27).
|
|
1065
|
+
// The kill means "nothing observable happened for the budget", not
|
|
1066
|
+
// "the session is poisoned". Discarding it made the retry repeat hours
|
|
1067
|
+
// of work from zero. Real harness failures still forget the session.
|
|
1068
|
+
const keepForIdleResume = failedRun && idleKilled && Boolean(finalReq?.id ?? result.capturedId);
|
|
1069
|
+
if (failedRun && !questionStillOpen && !keepForIdleResume) {
|
|
879
1070
|
(0, session_store_1.clearHarnessSession)(store.agentId, store.taskId, store.mode);
|
|
880
1071
|
log(`[resume] run failed - forgetting session (next attempt starts fresh)`);
|
|
881
1072
|
}
|
|
@@ -884,6 +1075,10 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
884
1075
|
log(`[resume] run failed but a question is still open - keeping the ` +
|
|
885
1076
|
`session so the human's answer can resume it`);
|
|
886
1077
|
}
|
|
1078
|
+
if (keepForIdleResume) {
|
|
1079
|
+
log(`[resume] idle timeout - keeping the session so a retry can ` +
|
|
1080
|
+
`continue it instead of starting from zero`);
|
|
1081
|
+
}
|
|
887
1082
|
// Prefer the id we already know (resumed or pre-assigned) over a
|
|
888
1083
|
// title re-capture, which could match an older same-titled session.
|
|
889
1084
|
let id = finalReq?.id ?? result.capturedId;
|
|
@@ -939,6 +1134,36 @@ function spawnHarness(harness, prompt, log, settings = {}) {
|
|
|
939
1134
|
function shortId(id) {
|
|
940
1135
|
return id.length > 8 ? `${id.slice(0, 8)}…` : id;
|
|
941
1136
|
}
|
|
1137
|
+
/**
|
|
1138
|
+
* Ask the daemon when this run last made a relayed MCP request (2026-10-27).
|
|
1139
|
+
*
|
|
1140
|
+
* This is the one liveness channel the CLI cannot see: a client/server harness
|
|
1141
|
+
* prints nothing while the service runs a tool, and a `browser_action` that is
|
|
1142
|
+
* still in flight looks exactly like a dead process on the pipe. Returns null
|
|
1143
|
+
* for "no signal" (no daemon, an old daemon, or a run wired straight to the
|
|
1144
|
+
* API) - never throws, so a probe failure can only ever fall back to the old
|
|
1145
|
+
* stdout-only behaviour.
|
|
1146
|
+
*/
|
|
1147
|
+
async function readRelayActivity(runKey) {
|
|
1148
|
+
try {
|
|
1149
|
+
const res = await (0, bus_1.daemonGet)(`/internal/session-activity?session=${encodeURIComponent(runKey)}`, 2_000);
|
|
1150
|
+
if (!res?.ok)
|
|
1151
|
+
return null;
|
|
1152
|
+
const body = (await res.json());
|
|
1153
|
+
if (body?.known !== true)
|
|
1154
|
+
return null;
|
|
1155
|
+
const at = Number(body.lastActivityAt);
|
|
1156
|
+
if (!Number.isFinite(at) || at <= 0)
|
|
1157
|
+
return null;
|
|
1158
|
+
return {
|
|
1159
|
+
lastActivityAt: at,
|
|
1160
|
+
lastTool: typeof body.lastTool === 'string' ? body.lastTool : null,
|
|
1161
|
+
};
|
|
1162
|
+
}
|
|
1163
|
+
catch {
|
|
1164
|
+
return null;
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
942
1167
|
/**
|
|
943
1168
|
* Resolve a just-launched harness session id from the harness's own session
|
|
944
1169
|
* list (opencode `session list --format json`), matched by the unique title
|