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.
- package/dist/bridge/daemon-instance.d.ts +19 -0
- package/dist/bridge/daemon-instance.js +39 -3
- package/dist/bridge/daemon-instance.js.map +1 -1
- package/dist/bridge/daemon.js +262 -175
- package/dist/bridge/daemon.js.map +1 -1
- package/dist/bridge/index.js +52 -13
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/local-server.d.ts +7 -1
- package/dist/bridge/local-server.js +25 -5
- package/dist/bridge/local-server.js.map +1 -1
- package/dist/bridge/service.d.ts +49 -2
- package/dist/bridge/service.js +209 -7
- package/dist/bridge/service.js.map +1 -1
- package/dist/bridge/stopped-marker.d.ts +8 -0
- package/dist/bridge/stopped-marker.js +62 -0
- package/dist/bridge/stopped-marker.js.map +1 -0
- package/dist/cli/commands/run.js +82 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/lib/stale-busy.d.ts +22 -0
- package/dist/lib/stale-busy.js +96 -0
- package/dist/lib/stale-busy.js.map +1 -0
- package/dist/lib/workspace/mirror-lease.d.ts +12 -0
- package/dist/lib/workspace/mirror-lease.js +15 -0
- package/dist/lib/workspace/mirror-lease.js.map +1 -1
- package/dist/lib/workspace/mirror.d.ts +46 -0
- package/dist/lib/workspace/mirror.js +96 -0
- package/dist/lib/workspace/mirror.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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 ||
|
|
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 (
|
|
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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"}
|
package/dist/bridge/daemon.js
CHANGED
|
@@ -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
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
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 () => {
|