teamshare-bridge 0.22.13 → 0.22.15

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.
@@ -127,6 +127,25 @@ export declare function isOurDaemonProcess(pid: number): boolean | null;
127
127
  export declare function listOurDaemonPids(options?: {
128
128
  exclude?: readonly number[];
129
129
  }): number[];
130
+ /**
131
+ * Every pid that is VERIFIABLY a bridge watchdog supervisor (`node
132
+ * …/index.js supervisor`), ascending.
133
+ *
134
+ * The supervisor is excluded from `listOurDaemonPids` on purpose (an upgrade
135
+ * must never kill the watchdog that restarts it) — but a FULL `stop` must
136
+ * take it down too, or its 30 s tick revives the daemon the human just
137
+ * stopped. Same identity discipline as daemons: argv match required, never
138
+ * kill on a guess.
139
+ */
140
+ export declare function listOurSupervisorPids(options?: {
141
+ exclude?: readonly number[];
142
+ }): number[];
143
+ /**
144
+ * true = verifiably one of OUR watchdog supervisors (`node … supervisor`).
145
+ * false = a foreign process (PID reuse) — NEVER kill it.
146
+ * null = unqueryable — callers treat it as "not ours", which fails safe.
147
+ */
148
+ export declare function isOurSupervisorProcess(pid: number): boolean | null;
130
149
  /**
131
150
  * Every pid whose command line references this bridge install - daemons,
132
151
  * supervisor, upgrade helper, launcher stubs, orphaned sessions.
@@ -15,6 +15,8 @@ exports.resolveDaemonInstanceSync = resolveDaemonInstanceSync;
15
15
  exports.pidInfo = pidInfo;
16
16
  exports.isOurDaemonProcess = isOurDaemonProcess;
17
17
  exports.listOurDaemonPids = listOurDaemonPids;
18
+ exports.listOurSupervisorPids = listOurSupervisorPids;
19
+ exports.isOurSupervisorProcess = isOurSupervisorProcess;
18
20
  exports.listBridgeProcessPids = listBridgeProcessPids;
19
21
  exports.killDaemonPid = killDaemonPid;
20
22
  exports.probePortAnswering = probePortAnswering;
@@ -481,7 +483,41 @@ function isOurDaemonProcess(pid) {
481
483
  * "cannot enumerate" as "cannot confirm", which is the safe direction.
482
484
  */
483
485
  function listOurDaemonPids(options = {}) {
484
- const exclude = new Set(options.exclude ?? []);
486
+ return enumNodePids((pid) => isOurDaemonProcess(pid) === true, options.exclude);
487
+ }
488
+ /**
489
+ * Every pid that is VERIFIABLY a bridge watchdog supervisor (`node
490
+ * …/index.js supervisor`), ascending.
491
+ *
492
+ * The supervisor is excluded from `listOurDaemonPids` on purpose (an upgrade
493
+ * must never kill the watchdog that restarts it) — but a FULL `stop` must
494
+ * take it down too, or its 30 s tick revives the daemon the human just
495
+ * stopped. Same identity discipline as daemons: argv match required, never
496
+ * kill on a guess.
497
+ */
498
+ function listOurSupervisorPids(options = {}) {
499
+ return enumNodePids((pid) => isOurSupervisorProcess(pid) === true, options.exclude);
500
+ }
501
+ /**
502
+ * true = verifiably one of OUR watchdog supervisors (`node … supervisor`).
503
+ * false = a foreign process (PID reuse) — NEVER kill it.
504
+ * null = unqueryable — callers treat it as "not ours", which fails safe.
505
+ */
506
+ function isOurSupervisorProcess(pid) {
507
+ const info = pidInfo(pid);
508
+ if (!info)
509
+ return null;
510
+ if (info.name && !/^node(?:\.exe)?$/i.test(info.name))
511
+ return false;
512
+ if (info.cmdline) {
513
+ return (/(index\.js|teamshare)/i.test(info.cmdline) &&
514
+ /\bsupervisor\b/i.test(info.cmdline));
515
+ }
516
+ return null;
517
+ }
518
+ /** Shared node-process enumeration for the verified-pid listers above. */
519
+ function enumNodePids(accept, exclude) {
520
+ const excluded = new Set(exclude ?? []);
485
521
  const out = (() => {
486
522
  if (process.platform === 'win32') {
487
523
  const res = (0, node_child_process_1.spawnSync)('powershell.exe', [
@@ -504,11 +540,11 @@ function listOurDaemonPids(options = {}) {
504
540
  for (const line of out.split(/\r?\n/)) {
505
541
  const tab = line.indexOf('\t');
506
542
  const pid = Number(tab >= 0 ? line.slice(0, tab) : line.slice(0, line.indexOf(' ')).trim());
507
- if (!Number.isInteger(pid) || pid <= 0 || exclude.has(pid))
543
+ if (!Number.isInteger(pid) || pid <= 0 || excluded.has(pid))
508
544
  continue;
509
545
  // Re-use the single identity test so "verified" means the same thing here as
510
546
  // everywhere else a pid is about to be killed.
511
- if (isOurDaemonProcess(pid) === true)
547
+ if (accept(pid))
512
548
  pids.push(pid);
513
549
  }
514
550
  return [...new Set(pids)].sort((a, b) => a - b);
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-instance.js","sourceRoot":"","sources":["../../src/bridge/daemon-instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-instance.js","sourceRoot":"","sources":["../../src/bridge/daemon-instance.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ const diagnostics_1 = require("../lib/diagnostics");
66
66
  const cache_cleaner_1 = require("../lib/cache-cleaner");
67
67
  const wake_queue_store_1 = require("./wake-queue-store");
68
68
  const lock_1 = require("../lib/lock");
69
+ const stale_busy_1 = require("../lib/stale-busy");
69
70
  const harness_models_1 = require("../lib/harness/harness-models");
70
71
  const bus_1 = require("../lib/workspace/bus");
71
72
  const local_server_1 = require("./local-server");
@@ -490,6 +491,61 @@ async function runDaemon(portOverride) {
490
491
  (0, lock_1.clearLock)(agentId);
491
492
  handle.api.heartbeat(agentId, 'online', undefined, undefined, true).catch(() => { });
492
493
  handle.pushState();
494
+ }, async () => {
495
+ // Full-stop rescue (2026-10): `teamshare-bridge stop` ends EVERY
496
+ // agent's session with the same rescue the per-agent `session.stop`
497
+ // wake runs (kill + commit + comment), instead of orphaning live
498
+ // harness processes that keep writing with no parent watching them.
499
+ // Sequential per agent — git rescue must not overlap on one machine.
500
+ const stopped = [];
501
+ const seen = new Set();
502
+ for (const agent of (0, config_1.loadConfig)().agents) {
503
+ seen.add(agent.agentId);
504
+ const handle = handles.get(agent.agentId);
505
+ const api = handle?.api ?? api_1.TeamshareApi.forAgent(apiBase, agent);
506
+ const pushState = handle?.pushState ?? (() => { });
507
+ const lock = (0, lock_1.readLock)(agent.agentId);
508
+ await stopAgentSession({ agentId: agent.agentId }, api, {
509
+ sessionRelay,
510
+ settingsByAgent,
511
+ pushState,
512
+ taskId: lock?.taskId ?? null,
513
+ projectId: lock?.projectId ?? null,
514
+ reason: 'full bridge stop',
515
+ });
516
+ stopped.push({ agentId: agent.agentId, hadLock: !!lock });
517
+ }
518
+ // Locks for agents no longer in config: no api key, so no rescue
519
+ // comment is possible — kill the holder and clear the file so no
520
+ // phantom busy survives the stop.
521
+ try {
522
+ for (const entry of (0, node_fs_1.readdirSync)(lock_1.LOCK_DIR)) {
523
+ if (!entry.endsWith('.lock'))
524
+ continue;
525
+ const agentId = entry.slice(0, -'.lock'.length);
526
+ if (seen.has(agentId) || !agentId)
527
+ continue;
528
+ const lock = (0, lock_1.readLock)(agentId);
529
+ if (lock?.pid && lock.pid !== process.pid) {
530
+ try {
531
+ (0, process_tree_1.killTreeExcept)(lock.pid, {
532
+ graceMs: 2_000,
533
+ log: (m) => (0, daemon_support_1.log)(`stop-all ${agentId}: ${m}`),
534
+ });
535
+ }
536
+ catch (err) {
537
+ (0, daemon_support_1.log)(`stop-all ${agentId}: kill failed: ${(0, config_1.msg)(err)}`);
538
+ }
539
+ }
540
+ (0, lock_1.clearLock)(agentId);
541
+ stopped.push({ agentId, hadLock: !!lock });
542
+ }
543
+ }
544
+ catch (err) {
545
+ (0, daemon_support_1.log)(`stop-all-sessions lock sweep failed: ${(0, config_1.msg)(err)}`);
546
+ }
547
+ pushAllStates();
548
+ return { ok: true, stopped };
493
549
  });
494
550
  (0, daemon_support_1.log)(`probe server listening on http://localhost:${boundPort}/ping`);
495
551
  // Publish the BOUND port (not config.port) into daemon.lock + runtime.json.
@@ -804,6 +860,185 @@ async function runDaemon(portOverride) {
804
860
  ensureOrchestratorClient();
805
861
  }, ORCH_HEALTH_INTERVAL_MS);
806
862
  orchHealthTimer.unref?.();
863
+ /**
864
+ * Stop ONE agent's session with rescue (2026-10): the exact routine the
865
+ * `session.stop` wake runs — drop work lanes (keep messages), write the
866
+ * stop file, clear build state, kill the live session tree (browsers
867
+ * excluded, daemon-pid guarded), clear the lock, force-end the relay
868
+ * session, save the stopped run's progress (commit + comment), restore a
869
+ * linked-folder stash, then heartbeat online + push state.
870
+ *
871
+ * Shared by the per-agent `session.stop` wake and the full-stop
872
+ * `/internal/stop-all-sessions` endpoint so "stop everything" rescues
873
+ * work-in-progress instead of orphaning it. Never throws — every step is
874
+ * guarded; a stop must not fail on cleanup.
875
+ */
876
+ async function stopAgentSession(agent, api, deps) {
877
+ const tag = `session-stop(${deps.reason})`;
878
+ try {
879
+ const beforeLanes = (0, wake_outbox_1.readOutbox)(agent.agentId);
880
+ const keptLanes = beforeLanes.filter((l) => !WORK_LANE_EVENTS.has(String(l.event.type)));
881
+ const droppedLanes = beforeLanes.length - keptLanes.length;
882
+ const droppedTriggers = beforeLanes
883
+ .filter((l) => WORK_LANE_EVENTS.has(String(l.event.type)))
884
+ .reduce((n, l) => n + l.triggers.length, 0);
885
+ const keptTriggers = keptLanes.reduce((n, l) => n + l.triggers.length, 0);
886
+ for (const lane of beforeLanes) {
887
+ if (WORK_LANE_EVENTS.has(String(lane.event.type))) {
888
+ (0, wake_outbox_1.removeLane)(agent.agentId, lane.lane);
889
+ }
890
+ }
891
+ if (droppedLanes > 0 || keptLanes.length > 0) {
892
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - dropped ${droppedTriggers} queued work trigger(s) ` +
893
+ `on ${droppedLanes} lane(s), kept ${keptTriggers} message trigger(s) on ${keptLanes.length} lane(s) for later`);
894
+ }
895
+ (0, daemon_support_1.writeAgentStopFile)(agent.agentId);
896
+ (0, daemon_support_1.clearAgentBuildState)(agent.agentId, api);
897
+ const lock = (0, lock_1.readLock)(agent.agentId);
898
+ // Daemon-identity guard (2026-09): never tree-kill a pid that could
899
+ // be THIS daemon (PID reuse on a stale lock would kill the daemon
900
+ // and its whole session subtree). Clear the lock only.
901
+ if (lock?.pid && lock.pid === process.pid) {
902
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - lock pid is the daemon itself (PID reuse); clearing lock without kill`);
903
+ }
904
+ else if (lock?.pid) {
905
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - killing live session pid ${lock.pid}`);
906
+ try {
907
+ (0, process_tree_1.killTreeExcept)(lock.pid, {
908
+ graceMs: 2_000,
909
+ log: (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
910
+ });
911
+ }
912
+ catch (err) {
913
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} kill failed: ${(0, config_1.msg)(err)}`);
914
+ }
915
+ }
916
+ else {
917
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - no live session lock`);
918
+ }
919
+ (0, lock_1.clearLock)(agent.agentId);
920
+ // FORCED SESSION END (2026-10): the kill above is a real force-kill, so
921
+ // the CLI's reporter never runs and the hub's AgentSession row stayed
922
+ // open forever (a leaked "live" build row for this agent). End it here,
923
+ // on the same relay the normal path uses, so the console/run history
924
+ // close the session instead of showing a phantom agent that is busy.
925
+ {
926
+ const liveSessionId = deps.sessionRelay.current(agent.agentId);
927
+ if (liveSessionId) {
928
+ deps.sessionRelay.sessionEnd({ sessionId: liveSessionId, exitCode: null });
929
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - ended session ${liveSessionId} (forced)`);
930
+ }
931
+ }
932
+ // SAVE THE STOPPED RUN'S PROGRESS (2026-09). The kill above is a real
933
+ // force-kill on Windows, so the CLI's `finally` — and with it the mirror
934
+ // detach, which lives in the `try` — never runs. The tree was left on
935
+ // disk holding the only copy of the work-in-progress as uncommitted
936
+ // files, and the lease sweep's later rescue landed on `tasks/<id8>`,
937
+ // a ref no re-run checks out. So do it now, onto the branch the run was
938
+ // delivering on. Never throws; a stop must not fail on cleanup.
939
+ try {
940
+ const saved = await (0, stop_save_1.saveStoppedRun)(lock?.kind === 'task' ? lock.taskId : (deps.taskId ?? undefined), agent.agentId, api, (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
941
+ // Our own kill can leave the pid briefly alive; we are the ones who
942
+ // stopped it, so do not treat it as another owner.
943
+ { skipPids: [lock?.pid ?? -1] });
944
+ const body = (0, stop_save_1.stopSaveComment)(String(lock?.taskId ?? deps.taskId ?? ''), saved);
945
+ if (body && api && (lock?.kind === 'task' || deps.taskId)) {
946
+ // NO MORE `.catch(() => undefined)` (2026-10).
947
+ //
948
+ // The old line silenced the failure, which is why eight identical
949
+ // `[work stopped]` comments went unnoticed: every post timed out
950
+ // (ETIMEDOUT), nothing recorded that it had tried, and each replayed
951
+ // `session.stop` wake posted again. A notification that fails to
952
+ // reach the human is a real fault, so it is now reported through
953
+ // `postBridgeNotice` (server-side `clientRequestId` dedupe) and, if
954
+ // it still fails, escalated to a diagnostic instead of vanishing.
955
+ const outcome = await (0, bridge_notice_1.postBridgeNotice)({
956
+ api,
957
+ noticeKey: saved.noticeKey ?? (0, bridge_notice_1.oneShotKey)('work-stopped', agent.agentId, String(lock?.taskId ?? deps.taskId ?? '')),
958
+ scope: { taskId: String(lock?.taskId ?? deps.taskId) },
959
+ body,
960
+ log: (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
961
+ });
962
+ if (outcome === 'failed') {
963
+ (0, diagnostics_1.reportDiagnosticSafe)({
964
+ kind: 'wake_failure',
965
+ severity: 'warning',
966
+ agentId: agent.agentId,
967
+ errorCode: 'STOP_NOTICE_UNDELIVERED',
968
+ message: `the [work stopped] notice for task ${lock?.taskId ?? deps.taskId ?? '(none)'} ` +
969
+ `could not be delivered - the human does not know where their work went`,
970
+ includeDoctor: false,
971
+ });
972
+ }
973
+ }
974
+ }
975
+ catch (err) {
976
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: stop save failed: ${(0, config_1.msg)(err)}`);
977
+ }
978
+ // Stash restore on stop (IMP-9xx): the CLI's finally block may not
979
+ // run when the process is force-killed. Pop the task's
980
+ // `teamshare:<taskId>` stash from the daemon so the user's changes
981
+ // are restored. Best-effort — logged warnings, never throws.
982
+ if (deps.taskId) {
983
+ const taskIdForStop = deps.taskId;
984
+ try {
985
+ const stopProjectId = deps.projectId;
986
+ let stopCwd;
987
+ if (stopProjectId) {
988
+ stopCwd = (0, config_1.resolveRepoPath)(stopProjectId) ?? (0, config_1.projectCwd)(stopProjectId) ?? undefined;
989
+ if (!stopCwd) {
990
+ const s0 = deps.settingsByAgent.get(agent.agentId);
991
+ try {
992
+ const proj = await api.getProject(stopProjectId);
993
+ const folderLinks = await api.getLinkedFolders(stopProjectId);
994
+ const uid = s0?.userId;
995
+ const match = uid && folderLinks.items?.length ? folderLinks.items.find((fl) => fl.userId === uid) : null;
996
+ stopCwd = match?.path
997
+ ?? (0, config_1.serverFolderCwd)(proj.folderPath ?? null, s0?.folderPath ?? null)
998
+ ?? undefined;
999
+ }
1000
+ catch { /* fall through */ }
1001
+ }
1002
+ }
1003
+ if (stopCwd) {
1004
+ // Only the LINKED FOLDER holds a stash this run created: an
1005
+ // isolated run (mirror/worktree) never stashes, because
1006
+ // `refs/stash` is shared with the main repo — so its "restore"
1007
+ // here could only ever find some OTHER run's entry (the list is
1008
+ // tag-matched to this task, but the tree it would pop into is not
1009
+ // the one the session was working in). Skip it, and say so,
1010
+ // rather than log a restore that never happened.
1011
+ if ((0, mirror_1.isIsolatedTree)(stopCwd)) {
1012
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} - ${stopCwd} is an isolated tree, ` +
1013
+ `so there is no linked-folder stash to restore`);
1014
+ }
1015
+ else {
1016
+ const gitRoots = (0, git_pipeline_1.resolveRunRepos)(stopCwd);
1017
+ for (const root of gitRoots) {
1018
+ const stashes = (0, git_runner_1.listStashes)(root, stopCwd, taskIdForStop);
1019
+ const target = stashes.find((s) => s.taskId === taskIdForStop);
1020
+ if (target) {
1021
+ (0, git_runner_1.popStashByRef)(root, target.stashIndex, (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`));
1022
+ }
1023
+ }
1024
+ }
1025
+ }
1026
+ }
1027
+ catch (err) {
1028
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} stash restore failed: ${(0, config_1.msg)(err)}`);
1029
+ }
1030
+ }
1031
+ // Immediately update agent status to online — don't wait for the
1032
+ // next heartbeat interval. The killed session's finally block may
1033
+ // not run (force-kill), so we do it here. Use force=true to bypass
1034
+ // the status race guard (prevStatus=working blocks online downgrades).
1035
+ api.heartbeat(agent.agentId, 'online', undefined, undefined, true).catch(() => { });
1036
+ deps.pushState();
1037
+ }
1038
+ catch (err) {
1039
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: ${tag} failed: ${(0, config_1.msg)(err)}`);
1040
+ }
1041
+ }
807
1042
  function startAgentLoop(agent) {
808
1043
  if (handles.has(agent.agentId))
809
1044
  return handles.get(agent.agentId);
@@ -994,6 +1229,25 @@ async function runDaemon(portOverride) {
994
1229
  // so a backend restart repopulates), while a BUSY payload re-pushes on
995
1230
  // every tick to stay inside the backend's 5-minute TTL.
996
1231
  agentTimers.push(setInterval(pushState, daemon_support_1.BUSY_REFRESH_MS));
1232
+ // Stale-busy reaper (2026-10): a dead run's lock file outlives it, and
1233
+ // when the OS recycles the pid for a foreign process the daemon keeps
1234
+ // pushing busy:true forever (frozen `since`, three hub sweeps all
1235
+ // deferring to it). Reaps only the provably-foreign shape — old lock,
1236
+ // no live relay session, busy asserted, holder pid not node — then
1237
+ // pushes state so the console clears. Never kills by pid.
1238
+ agentTimers.push(setInterval(() => {
1239
+ try {
1240
+ (0, stale_busy_1.reapStaleBusyLock)({
1241
+ agentId: agent.agentId,
1242
+ hasLiveSession: () => sessionRelay.current(agent.agentId) != null,
1243
+ pushState,
1244
+ log: daemon_support_1.log,
1245
+ });
1246
+ }
1247
+ catch {
1248
+ /* best-effort */
1249
+ }
1250
+ }, stale_busy_1.STALE_BUSY_REAP_INTERVAL_MS));
997
1251
  // Periodic mention poll + stranded-assignment recovery
998
1252
  // (daemon-inbox.ts): catches wakes lost while connected.
999
1253
  agentTimers.push(setInterval(() => void (0, daemon_inbox_1.pollInboxMentions)(inboxDeps()), daemon_inbox_1.MENTION_POLL_MS));
@@ -1050,181 +1304,14 @@ async function runDaemon(portOverride) {
1050
1304
  // run releaseLock(), escalating to /F after 2s if still alive.
1051
1305
  // clearLock() at the end is the safety net.
1052
1306
  if (event.type === 'session.stop') {
1053
- // A stop must leave nothing that can respawn: write the stop file
1054
- // (build/worker loops honor it) and clear any local build state so a
1055
- // later question.answered cannot restart the run. Then kill the live
1056
- // session.
1057
- //
1058
- // 2026-09: the queued wakes are NOT all discarded. Work wakes are, but
1059
- // a chat mention or a task comment is a MESSAGE a person addressed to
1060
- // this agent - wiping it made people lose whatever they had written
1061
- // whenever someone pressed "Stop work". Messages are kept and replayed
1062
- // when the agent is next free.
1063
- //
1064
- // LANE-KEYED (2026-10). `withoutWorkEvents` filtered a FIFO array; the
1065
- // outbox is a lane map, so a lane is dropped whole - and because a lane
1066
- // coalesces several triggers, "how many messages survived" is now the
1067
- // TRIGGER count, not the lane count. Reporting the lane count would tell
1068
- // a human "kept 1" when three messages were waiting.
1069
- const beforeLanes = (0, wake_outbox_1.readOutbox)(agent.agentId);
1070
- const keptLanes = beforeLanes.filter((l) => !WORK_LANE_EVENTS.has(String(l.event.type)));
1071
- const droppedLanes = beforeLanes.length - keptLanes.length;
1072
- const droppedTriggers = beforeLanes
1073
- .filter((l) => WORK_LANE_EVENTS.has(String(l.event.type)))
1074
- .reduce((n, l) => n + l.triggers.length, 0);
1075
- const keptTriggers = keptLanes.reduce((n, l) => n + l.triggers.length, 0);
1076
- for (const lane of beforeLanes) {
1077
- if (WORK_LANE_EVENTS.has(String(lane.event.type))) {
1078
- (0, wake_outbox_1.removeLane)(agent.agentId, lane.lane);
1079
- }
1080
- }
1081
- if (droppedLanes > 0 || keptLanes.length > 0) {
1082
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - dropped ${droppedTriggers} queued work trigger(s) ` +
1083
- `on ${droppedLanes} lane(s), kept ${keptTriggers} message trigger(s) on ${keptLanes.length} lane(s) for later`);
1084
- }
1085
- (0, daemon_support_1.writeAgentStopFile)(agent.agentId);
1086
- (0, daemon_support_1.clearAgentBuildState)(agent.agentId, api);
1087
- const lock = (0, lock_1.readLock)(agent.agentId);
1088
- // Daemon-identity guard (2026-09): never tree-kill a pid that could
1089
- // be THIS daemon (PID reuse on a stale lock would kill the daemon
1090
- // and its whole session subtree). Clear the lock only.
1091
- if (lock?.pid && lock.pid === process.pid) {
1092
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - lock pid is the daemon itself (PID reuse); clearing lock without kill`);
1093
- }
1094
- else if (lock?.pid) {
1095
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - killing live session pid ${lock.pid}`);
1096
- try {
1097
- (0, process_tree_1.killTreeExcept)(lock.pid, {
1098
- graceMs: 2_000,
1099
- log: (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
1100
- });
1101
- }
1102
- catch (err) {
1103
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop kill failed: ${(0, config_1.msg)(err)}`);
1104
- }
1105
- }
1106
- else {
1107
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - no live session lock`);
1108
- }
1109
- (0, lock_1.clearLock)(agent.agentId);
1110
- // FORCED SESSION END (2026-10): the kill above is a real force-kill, so
1111
- // the CLI's reporter never runs and the hub's AgentSession row stayed
1112
- // open forever (a leaked "live" build row for this agent). End it here,
1113
- // on the same relay the normal path uses, so the console/run history
1114
- // close the session instead of showing a phantom agent that is busy.
1115
- {
1116
- const liveSessionId = sessionRelay.current(agent.agentId);
1117
- if (liveSessionId) {
1118
- sessionRelay.sessionEnd({ sessionId: liveSessionId, exitCode: null });
1119
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - ended session ${liveSessionId} (forced)`);
1120
- }
1121
- }
1122
- // SAVE THE STOPPED RUN'S PROGRESS (2026-09). The kill above is a real
1123
- // force-kill on Windows, so the CLI's `finally` — and with it the mirror
1124
- // detach, which lives in the `try` — never runs. The tree was left on
1125
- // disk holding the only copy of the work-in-progress as uncommitted
1126
- // files, and the lease sweep's later rescue landed on `tasks/<id8>`,
1127
- // a ref no re-run checks out. So do it now, onto the branch the run was
1128
- // delivering on. Never throws; a stop must not fail on cleanup.
1129
- void (async () => {
1130
- try {
1131
- const saved = await (0, stop_save_1.saveStoppedRun)(lock?.kind === 'task' ? lock.taskId : event.taskId, agent.agentId, api, (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
1132
- // Our own kill can leave the pid briefly alive; we are the ones who
1133
- // stopped it, so do not treat it as another owner.
1134
- { skipPids: [lock?.pid ?? -1] });
1135
- const body = (0, stop_save_1.stopSaveComment)(String(lock?.taskId ?? event.taskId ?? ''), saved);
1136
- if (body && api && (lock?.kind === 'task' || event.taskId)) {
1137
- // NO MORE `.catch(() => undefined)` (2026-10).
1138
- //
1139
- // The old line silenced the failure, which is why eight identical
1140
- // `[work stopped]` comments went unnoticed: every post timed out
1141
- // (ETIMEDOUT), nothing recorded that it had tried, and each replayed
1142
- // `session.stop` wake posted again. A notification that fails to
1143
- // reach the human is a real fault, so it is now reported through
1144
- // `postBridgeNotice` (server-side `clientRequestId` dedupe) and, if
1145
- // it still fails, escalated to a diagnostic instead of vanishing.
1146
- const outcome = await (0, bridge_notice_1.postBridgeNotice)({
1147
- api,
1148
- noticeKey: saved.noticeKey ?? (0, bridge_notice_1.oneShotKey)('work-stopped', agent.agentId, String(lock?.taskId ?? event.taskId ?? '')),
1149
- scope: { taskId: String(lock?.taskId ?? event.taskId) },
1150
- body,
1151
- log: (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`),
1152
- });
1153
- if (outcome === 'failed') {
1154
- (0, diagnostics_1.reportDiagnosticSafe)({
1155
- kind: 'wake_failure',
1156
- severity: 'warning',
1157
- agentId: agent.agentId,
1158
- errorCode: 'STOP_NOTICE_UNDELIVERED',
1159
- message: `the [work stopped] notice for task ${lock?.taskId ?? event.taskId ?? '(none)'} ` +
1160
- `could not be delivered - the human does not know where their work went`,
1161
- includeDoctor: false,
1162
- });
1163
- }
1164
- }
1165
- }
1166
- catch (err) {
1167
- (0, daemon_support_1.log)(`agent ${agent.agentId}: stop save failed: ${(0, config_1.msg)(err)}`);
1168
- }
1169
- })();
1170
- // Stash restore on stop (IMP-9xx): the CLI's finally block may not
1171
- // run when the process is force-killed. Pop the task's
1172
- // `teamshare:<taskId>` stash from the daemon so the user's changes
1173
- // are restored. Best-effort — logged warnings, never throws.
1174
- if (event.taskId) {
1175
- const taskIdForStop = event.taskId;
1176
- void (async () => {
1177
- const stopProjectId = event.projectId;
1178
- let stopCwd;
1179
- if (stopProjectId) {
1180
- stopCwd = (0, config_1.resolveRepoPath)(stopProjectId) ?? (0, config_1.projectCwd)(stopProjectId) ?? undefined;
1181
- if (!stopCwd) {
1182
- const s0 = settingsByAgent.get(agent.agentId);
1183
- try {
1184
- const proj = await api.getProject(stopProjectId);
1185
- const folderLinks = await api.getLinkedFolders(stopProjectId);
1186
- const uid = s0?.userId;
1187
- const match = uid && folderLinks.items?.length ? folderLinks.items.find((fl) => fl.userId === uid) : null;
1188
- stopCwd = match?.path
1189
- ?? (0, config_1.serverFolderCwd)(proj.folderPath ?? null, s0?.folderPath ?? null)
1190
- ?? undefined;
1191
- }
1192
- catch { /* fall through */ }
1193
- }
1194
- }
1195
- if (stopCwd) {
1196
- // Only the LINKED FOLDER holds a stash this run created: an
1197
- // isolated run (mirror/worktree) never stashes, because
1198
- // `refs/stash` is shared with the main repo — so its "restore"
1199
- // here could only ever find some OTHER run's entry (the list is
1200
- // tag-matched to this task, but the tree it would pop into is not
1201
- // the one the session was working in). Skip it, and say so,
1202
- // rather than log a restore that never happened.
1203
- if ((0, mirror_1.isIsolatedTree)(stopCwd)) {
1204
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop - ${stopCwd} is an isolated tree, ` +
1205
- `so there is no linked-folder stash to restore`);
1206
- }
1207
- else {
1208
- const gitRoots = (0, git_pipeline_1.resolveRunRepos)(stopCwd);
1209
- for (const root of gitRoots) {
1210
- const stashes = (0, git_runner_1.listStashes)(root, stopCwd, taskIdForStop);
1211
- const target = stashes.find((s) => s.taskId === taskIdForStop);
1212
- if (target) {
1213
- (0, git_runner_1.popStashByRef)(root, target.stashIndex, (m) => (0, daemon_support_1.log)(`agent ${agent.agentId}: ${m}`));
1214
- }
1215
- }
1216
- }
1217
- }
1218
- })().catch((err) => {
1219
- (0, daemon_support_1.log)(`agent ${agent.agentId}: session.stop stash restore failed: ${(0, config_1.msg)(err)}`);
1220
- });
1221
- }
1222
- // Immediately update agent status to online — don't wait for the
1223
- // next heartbeat interval. The killed session's finally block may
1224
- // not run (force-kill), so we do it here. Use force=true to bypass
1225
- // the status race guard (prevStatus=working blocks online downgrades).
1226
- api.heartbeat(agent.agentId, 'online', undefined, undefined, true).catch(() => { });
1227
- pushState();
1307
+ void stopAgentSession(agent, api, {
1308
+ sessionRelay,
1309
+ settingsByAgent,
1310
+ pushState,
1311
+ taskId: event.taskId,
1312
+ projectId: event.projectId,
1313
+ reason: 'session.stop wake',
1314
+ });
1228
1315
  return;
1229
1316
  }
1230
1317
  void (async () => {