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.
@@ -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
- for (const child of await listSubagentSessions(parentId, cwd)) {
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":"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"}
@@ -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
- let everOutput = false;
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 their
568
- // assistant messages while the run is active, log them with a prefix,
569
- // and remember their ids so they can be interrupted at session end.
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
- const children = await (0, opencode_control_1.listSubagentSessions)(parentId, runCwd);
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(`[subagent ${shortId(child.id)}] ${line}`);
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
- log(everOutput
692
- ? `[harness] ${adapter.name} killed after ${settings.timeoutMin ?? 60} min of no output (idle timeout - it went silent; total runtime is NOT capped, a run that keeps producing output never times out)`
693
- : `[harness] ${adapter.name} produced NO output at all in ${settings.timeoutMin ?? 60} min and never exited - killing it (silent hang: nothing printed, nothing died)`, 'stderr');
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
- everOutput = true;
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
- if (failedRun && !questionStillOpen) {
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