sensorium-mcp 3.1.0-refactor.8 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/agent-settings.d.ts +6 -0
- package/dist/config/agent-settings.d.ts.map +1 -1
- package/dist/config/agent-settings.js +22 -0
- package/dist/config/agent-settings.js.map +1 -1
- package/dist/config/detail-grant.d.ts +39 -0
- package/dist/config/detail-grant.d.ts.map +1 -0
- package/dist/config/detail-grant.js +61 -0
- package/dist/config/detail-grant.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/misc-settings.d.ts +2 -0
- package/dist/config/misc-settings.d.ts.map +1 -1
- package/dist/config/misc-settings.js +22 -0
- package/dist/config/misc-settings.js.map +1 -1
- package/dist/config/settings-store.d.ts +41 -2
- package/dist/config/settings-store.d.ts.map +1 -1
- package/dist/config/settings-store.js +151 -14
- package/dist/config/settings-store.js.map +1 -1
- package/dist/dashboard/routes/copilot.d.ts.map +1 -1
- package/dist/dashboard/routes/copilot.js +17 -1
- package/dist/dashboard/routes/copilot.js.map +1 -1
- package/dist/dashboard/routes/settings.d.ts +2 -0
- package/dist/dashboard/routes/settings.d.ts.map +1 -1
- package/dist/dashboard/routes/settings.js +25 -1
- package/dist/dashboard/routes/settings.js.map +1 -1
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-read.js +15 -3
- package/dist/dashboard/routes/threads-read.js.map +1 -1
- package/dist/dashboard/routes/threads.d.ts.map +1 -1
- package/dist/dashboard/routes/threads.js +13 -4
- package/dist/dashboard/routes/threads.js.map +1 -1
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +14 -5
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +11 -11
- package/dist/data/daily-marker.js +3 -3
- package/dist/data/daily-marker.js.map +1 -1
- package/dist/data/file-storage.d.ts.map +1 -1
- package/dist/data/file-storage.js +3 -3
- package/dist/data/file-storage.js.map +1 -1
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +2 -3
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +4 -7
- package/dist/data/memory/migration-runner.js.map +1 -1
- package/dist/data/memory/schema-ddl.d.ts +1 -1
- package/dist/data/memory/schema-ddl.d.ts.map +1 -1
- package/dist/data/memory/schema-ddl.js +7 -1
- package/dist/data/memory/schema-ddl.js.map +1 -1
- package/dist/data/memory/schema.js +2 -2
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/index.js +67 -21
- package/dist/index.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +21 -2
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/paths.d.ts +29 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +36 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/types.d.ts +1 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/server/factory.js +16 -6
- package/dist/server/factory.js.map +1 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +52 -20
- package/dist/server/http-server.js.map +1 -1
- package/dist/services/agent-spawn.service.d.ts +3 -3
- package/dist/services/agent-spawn.service.d.ts.map +1 -1
- package/dist/services/agent-spawn.service.js +30 -9
- package/dist/services/agent-spawn.service.js.map +1 -1
- package/dist/services/background-runner.d.ts.map +1 -1
- package/dist/services/background-runner.js +22 -12
- package/dist/services/background-runner.js.map +1 -1
- package/dist/services/broker-client.d.ts +209 -0
- package/dist/services/broker-client.d.ts.map +1 -0
- package/dist/services/broker-client.js +359 -0
- package/dist/services/broker-client.js.map +1 -0
- package/dist/services/claude-spawn.service.d.ts +1 -1
- package/dist/services/claude-spawn.service.d.ts.map +1 -1
- package/dist/services/claude-spawn.service.js +25 -25
- package/dist/services/claude-spawn.service.js.map +1 -1
- package/dist/services/codex-spawn.service.d.ts +1 -1
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +19 -24
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/dist/services/copilot-spawn.service.d.ts +1 -1
- package/dist/services/copilot-spawn.service.d.ts.map +1 -1
- package/dist/services/copilot-spawn.service.js +86 -37
- package/dist/services/copilot-spawn.service.js.map +1 -1
- package/dist/services/dispatcher/broker.d.ts +4 -3
- package/dist/services/dispatcher/broker.d.ts.map +1 -1
- package/dist/services/dispatcher/broker.js +23 -11
- package/dist/services/dispatcher/broker.js.map +1 -1
- package/dist/services/dispatcher/lock.js +2 -2
- package/dist/services/dispatcher/lock.js.map +1 -1
- package/dist/services/dispatcher/poller.d.ts.map +1 -1
- package/dist/services/dispatcher/poller.js +24 -5
- package/dist/services/dispatcher/poller.js.map +1 -1
- package/dist/services/flight-recorder.service.d.ts +37 -0
- package/dist/services/flight-recorder.service.d.ts.map +1 -0
- package/dist/services/flight-recorder.service.js +210 -0
- package/dist/services/flight-recorder.service.js.map +1 -0
- package/dist/services/keeper.service.d.ts +9 -0
- package/dist/services/keeper.service.d.ts.map +1 -1
- package/dist/services/keeper.service.js +198 -39
- package/dist/services/keeper.service.js.map +1 -1
- package/dist/services/maintenance-signal.d.ts.map +1 -1
- package/dist/services/maintenance-signal.js +2 -3
- package/dist/services/maintenance-signal.js.map +1 -1
- package/dist/services/process.service.d.ts +76 -61
- package/dist/services/process.service.d.ts.map +1 -1
- package/dist/services/process.service.js +224 -608
- package/dist/services/process.service.js.map +1 -1
- package/dist/services/reconnect-snapshot.service.js +2 -2
- package/dist/services/reconnect-snapshot.service.js.map +1 -1
- package/dist/services/scheduler.d.ts +1 -0
- package/dist/services/scheduler.d.ts.map +1 -1
- package/dist/services/scheduler.js +69 -14
- package/dist/services/scheduler.js.map +1 -1
- package/dist/services/self-update.service.d.ts +113 -15
- package/dist/services/self-update.service.d.ts.map +1 -1
- package/dist/services/self-update.service.js +382 -109
- package/dist/services/self-update.service.js.map +1 -1
- package/dist/services/spawn-common.d.ts +49 -23
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +262 -47
- package/dist/services/spawn-common.js.map +1 -1
- package/dist/services/spawn-exit-watcher.d.ts +43 -0
- package/dist/services/spawn-exit-watcher.d.ts.map +1 -0
- package/dist/services/spawn-exit-watcher.js +127 -0
- package/dist/services/spawn-exit-watcher.js.map +1 -0
- package/dist/services/telegram.d.ts +3 -2
- package/dist/services/telegram.d.ts.map +1 -1
- package/dist/services/telegram.js +8 -5
- package/dist/services/telegram.js.map +1 -1
- package/dist/services/thread-health.service.d.ts +1 -1
- package/dist/services/thread-health.service.d.ts.map +1 -1
- package/dist/services/thread-health.service.js +11 -7
- package/dist/services/thread-health.service.js.map +1 -1
- package/dist/services/thread-lifecycle.service.js +2 -2
- package/dist/services/thread-lifecycle.service.js.map +1 -1
- package/dist/services/topic.service.d.ts +1 -1
- package/dist/services/topic.service.d.ts.map +1 -1
- package/dist/services/topic.service.js +3 -2
- package/dist/services/topic.service.js.map +1 -1
- package/dist/services/worker-cleanup.service.d.ts.map +1 -1
- package/dist/services/worker-cleanup.service.js +25 -99
- package/dist/services/worker-cleanup.service.js.map +1 -1
- package/dist/test-bootstrap.d.ts +39 -0
- package/dist/test-bootstrap.d.ts.map +1 -0
- package/dist/test-bootstrap.js +78 -0
- package/dist/test-bootstrap.js.map +1 -0
- package/dist/tools/defs/session-defs.js +1 -1
- package/dist/tools/defs/session-defs.js.map +1 -1
- package/dist/tools/defs/utility-defs.d.ts.map +1 -1
- package/dist/tools/defs/utility-defs.js +4 -3
- package/dist/tools/defs/utility-defs.js.map +1 -1
- package/dist/tools/delegate-tool.d.ts +1 -1
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +37 -6
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/session-tools.d.ts.map +1 -1
- package/dist/tools/session-tools.js +34 -20
- package/dist/tools/session-tools.js.map +1 -1
- package/dist/tools/utility-tools.js +1 -1
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/wait/context.d.ts +13 -0
- package/dist/tools/wait/context.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.js +2 -3
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/dist/tools/wait/poll-loop.d.ts.map +1 -1
- package/dist/tools/wait/poll-loop.js +8 -1
- package/dist/tools/wait/poll-loop.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.service.js","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"self-update.service.js","sourceRoot":"","sources":["../../src/services/self-update.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
* agent module stay focused on its own CLI invocation without duplicating the
|
|
9
9
|
* lifecycle plumbing.
|
|
10
10
|
*/
|
|
11
|
-
import { type ChildProcess, type SpawnOptions } from "node:child_process";
|
|
12
11
|
import { type ThreadLifecycleService } from "./thread-lifecycle.service.js";
|
|
13
12
|
import type { SensoriumTransport } from "./mcp-config.service.js";
|
|
14
13
|
/** Result shape shared by every spawn function. */
|
|
@@ -28,6 +27,8 @@ export declare const sanitizeSpawnEnv: (extra?: Record<string, string | undefine
|
|
|
28
27
|
* separately and are unaffected.
|
|
29
28
|
*/
|
|
30
29
|
export declare const stripDenylistedEnvVars: (vars: Record<string, string>) => Record<string, string>;
|
|
30
|
+
/** Test hook: clear the CLI resolution cache. */
|
|
31
|
+
export declare function resetCliPathCacheForTest(): void;
|
|
31
32
|
export declare const resolveCliPath: (name: string, prefer?: RegExp) => string | null;
|
|
32
33
|
/** On Windows: prefer .exe, fall back to .cmd, refuse extensionless shims (e.g. Volta). */
|
|
33
34
|
export declare function resolveWindowsCliPath(name: string): string | null;
|
|
@@ -51,14 +52,12 @@ export declare function buildThreadLogPath(name: string, threadId: number, ext:
|
|
|
51
52
|
* delivers its own autonomous-loop prompt over stdin instead). */
|
|
52
53
|
export declare const buildSessionPrompt: (name: string, threadId: number) => string;
|
|
53
54
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* Everything needed to start an agent process, agent-specific policy already
|
|
56
|
+
* applied (env assembly, CLI args, prompt delivery). The SAME plan drives both
|
|
57
|
+
* spawn mechanics: POST /proc/spawn on the supervisor broker (the process
|
|
58
|
+
* owner target state, plan §4.1) and the legacy local `spawn()` fallback.
|
|
58
59
|
*/
|
|
59
|
-
export
|
|
60
|
-
interface RegisterSpawnOpts {
|
|
61
|
-
child: ChildProcess;
|
|
60
|
+
export interface AgentLaunchPlan {
|
|
62
61
|
threadId: number;
|
|
63
62
|
name: string;
|
|
64
63
|
logFilePath: string;
|
|
@@ -66,23 +65,50 @@ interface RegisterSpawnOpts {
|
|
|
66
65
|
agentLabel: string;
|
|
67
66
|
memorySourceThreadId?: number;
|
|
68
67
|
threadType?: "worker" | "branch";
|
|
68
|
+
exe: string;
|
|
69
|
+
args: string[];
|
|
70
|
+
env: NodeJS.ProcessEnv;
|
|
71
|
+
cwd?: string;
|
|
72
|
+
/** Prompt-sized payload written to the child's stdin then EOF'd (Codex);
|
|
73
|
+
* undefined → stdin ignored/NUL. */
|
|
74
|
+
stdinData?: string;
|
|
69
75
|
}
|
|
76
|
+
export type BrokerSpawnMode = "required" | "auto" | "off";
|
|
70
77
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
78
|
+
* Staged cutover switch (plan hard criterion 7 — zero-disruption migration):
|
|
79
|
+
* SENSORIUM_BROKER_SPAWN=1 broker REQUIRED — a broker failure fails the
|
|
80
|
+
* spawn loudly, never a silent local fallback;
|
|
81
|
+
* SENSORIUM_BROKER_SPAWN=0 legacy local spawning only;
|
|
82
|
+
* unset auto — broker first, and if it is unreachable or
|
|
83
|
+
* predates /proc/spawn, WARN and spawn locally so
|
|
84
|
+
* an MCP update cannot strand agents behind an
|
|
85
|
+
* old supervisor binary. Locally-spawned processes
|
|
86
|
+
* are adopted into jobs+registry by the
|
|
87
|
+
* supervisor's boot reconciliation / /proc/adopt.
|
|
88
|
+
* Job objects are Windows-only, so non-Windows resolves to "off" unless forced.
|
|
89
|
+
*/
|
|
90
|
+
export declare function brokerSpawnMode(): BrokerSpawnMode;
|
|
91
|
+
export declare function spawnReconcileDelayForTest(ms: number | null): void;
|
|
92
|
+
/**
|
|
93
|
+
* Launch an agent process for a thread. Broker path first (the supervisor owns
|
|
94
|
+
* spawn/observe/kill; children land in the thread's job object so the whole
|
|
95
|
+
* tree stays killable), legacy local path per the cutover flag above.
|
|
96
|
+
*
|
|
97
|
+
* Duplicate-agent guarantee: the legacy local fallback runs ONLY on definitive
|
|
98
|
+
* evidence that the broker created nothing — a spawn error answer, an absent
|
|
99
|
+
* endpoint (404/401), or a connection that was never established. An uncertain
|
|
100
|
+
* outcome (timeout, dropped connection) goes through reconcileUncertainSpawn
|
|
101
|
+
* instead, so no timeout value can ever yield two agents for one thread.
|
|
74
102
|
*
|
|
75
|
-
* stdout/stderr go to a file descriptor the CHILD owns, not
|
|
76
|
-
* this (ephemeral) server process. A pipe's only reader is
|
|
77
|
-
* when it dies on a self-update/restart the orphaned,
|
|
78
|
-
* writing, the ~64KB OS pipe buffer fills, and the next
|
|
79
|
-
* child's event loop forever — killing MCP polling, the API
|
|
80
|
-
* reconnect (the exact zombie we saw on thread 20869). A file
|
|
81
|
-
* into the child at spawn and drained by the OS, so it
|
|
82
|
-
*
|
|
103
|
+
* In the local path stdout/stderr go to a file descriptor the CHILD owns, not
|
|
104
|
+
* a pipe drained by this (ephemeral) server process. A pipe's only reader is
|
|
105
|
+
* this node process; when it dies on a self-update/restart the orphaned,
|
|
106
|
+
* detached child keeps writing, the ~64KB OS pipe buffer fills, and the next
|
|
107
|
+
* write() blocks the child's event loop forever — killing MCP polling, the API
|
|
108
|
+
* stream and any reconnect (the exact zombie we saw on thread 20869). A file
|
|
109
|
+
* fd is duplicated into the child at spawn and drained by the OS, so it
|
|
110
|
+
* survives our restarts. The broker path keeps the identical design with the
|
|
111
|
+
* supervisor opening the file handle (spawn-to-file-fd, plan §6 "keep").
|
|
83
112
|
*/
|
|
84
|
-
export declare function
|
|
85
|
-
spawnChild: (outFd: number) => ChildProcess;
|
|
86
|
-
}, threadLifecycle: ThreadLifecycleService): SpawnResult;
|
|
87
|
-
export {};
|
|
113
|
+
export declare function launchAgent(plan: AgentLaunchPlan, threadLifecycle: ThreadLifecycleService): Promise<SpawnResult>;
|
|
88
114
|
//# sourceMappingURL=spawn-common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-common.d.ts","sourceRoot":"","sources":["../../src/services/spawn-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"spawn-common.d.ts","sourceRoot":"","sources":["../../src/services/spawn-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA+BlE,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwB/E,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAG,MAAM,CAAC,UAKpF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAI1F,CAAC;AAWF,iDAAiD;AACjD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,IA2BvE,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BjE;AASD,eAAO,MAAM,yBAAyB,GAAI,mBAAmB,MAAM,KAAG,MAAM,GAAG,SAK9E,CAAC;AAOF,eAAO,MAAM,0BAA0B,QAAO,OAAmC,CAAC;AAClF,eAAO,MAAM,2BAA2B,GAAI,GAAG,OAAO,KAAG,IAExD,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB;IAAE,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAYvD;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAMhG;AAED;kEACkE;AAClE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MACkD,CAAC;AAuRvH;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;yCACqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAKjD;AAiDD,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAElE;AA4ED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,eAAe,EAAE,sBAAsB,GACtC,OAAO,CAAC,WAAW,CAAC,CAyCtB"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* agent module stay focused on its own CLI invocation without duplicating the
|
|
9
9
|
* lifecycle plumbing.
|
|
10
10
|
*/
|
|
11
|
-
import { spawnSync } from "node:child_process";
|
|
11
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
12
12
|
import { closeSync, existsSync, fstatSync, openSync, readSync, unlinkSync, writeFileSync, readFileSync, } from "node:fs";
|
|
13
13
|
import { tmpdir } from "node:os";
|
|
14
14
|
import { join } from "node:path";
|
|
@@ -21,6 +21,8 @@ import { errorMessage } from "../lib/utils.js";
|
|
|
21
21
|
import { deleteTelegramTopicByBotApi } from "./topic.service.js";
|
|
22
22
|
import { PROCESS_PIDS_DIR, PENDING_TASKS_DIR, THREAD_LOGS_DIR, spawnedThreads, wasTaskConsumed, clearTaskConsumed, } from "./process.service.js";
|
|
23
23
|
import { ThreadState } from "./thread-lifecycle.service.js";
|
|
24
|
+
import { brokerSpawn, brokerListThread } from "./broker-client.js";
|
|
25
|
+
import { watchBrokerSpawnExit } from "./spawn-exit-watcher.js";
|
|
24
26
|
import { decommissionWorker, clearWorkerGrace } from "./worker-cleanup.service.js";
|
|
25
27
|
import { writeThreadHeartbeatSync, clearThreadHeartbeat } from "../data/file-storage.js";
|
|
26
28
|
// ── Worker respawn (failed MCP-handshake recovery) ──────────────────────────
|
|
@@ -92,54 +94,79 @@ export const stripDenylistedEnvVars = (vars) => {
|
|
|
92
94
|
out[k] = v;
|
|
93
95
|
return out;
|
|
94
96
|
};
|
|
97
|
+
// CLI paths are resolved through a synchronous `where`/`which` child — the one
|
|
98
|
+
// remaining shell-out on the spawn path, and a sync child can block the event
|
|
99
|
+
// loop for its full 5s timeout under AV/EDR pressure. Installed CLI locations
|
|
100
|
+
// do not move during a server's lifetime, so resolve each name ONCE and serve
|
|
101
|
+
// every later spawn from this cache (null results are cached too: a missing CLI
|
|
102
|
+
// stays missing until a restart, and hammering `where` for it each spawn is the
|
|
103
|
+
// exact stall this avoids). The env override is read fresh on every call.
|
|
104
|
+
const cliPathCache = new Map();
|
|
105
|
+
/** Test hook: clear the CLI resolution cache. */
|
|
106
|
+
export function resetCliPathCacheForTest() {
|
|
107
|
+
cliPathCache.clear();
|
|
108
|
+
}
|
|
95
109
|
export const resolveCliPath = (name, prefer) => {
|
|
96
110
|
const envCmd = process.env[`${name.toUpperCase()}_CLI_CMD`];
|
|
97
111
|
if (envCmd)
|
|
98
112
|
return envCmd;
|
|
113
|
+
const cacheKey = `posix:${name}:${prefer?.source ?? ""}`;
|
|
114
|
+
if (cliPathCache.has(cacheKey))
|
|
115
|
+
return cliPathCache.get(cacheKey);
|
|
116
|
+
let resolved = null;
|
|
99
117
|
try {
|
|
100
118
|
const result = spawnSync(process.platform === "win32" ? "where" : "which", [name], {
|
|
101
119
|
timeout: 5000,
|
|
102
120
|
encoding: "utf-8",
|
|
103
121
|
windowsHide: true,
|
|
104
122
|
});
|
|
105
|
-
if (result.status
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
.
|
|
112
|
-
|
|
123
|
+
if (result.status === 0 && result.stdout) {
|
|
124
|
+
const candidates = result.stdout
|
|
125
|
+
.trim()
|
|
126
|
+
.split(/\r?\n/)
|
|
127
|
+
.map((s) => s.trim())
|
|
128
|
+
.filter(Boolean);
|
|
129
|
+
resolved = prefer ? (candidates.find((p) => prefer.test(p)) ?? candidates[0]) : candidates[0];
|
|
130
|
+
}
|
|
113
131
|
}
|
|
114
132
|
catch (err) {
|
|
115
133
|
log.debug(`[spawn] CLI resolution for ${name} failed: ${err instanceof Error ? err.message : err}`);
|
|
116
|
-
return null;
|
|
117
134
|
}
|
|
135
|
+
cliPathCache.set(cacheKey, resolved ?? null);
|
|
136
|
+
return resolved ?? null;
|
|
118
137
|
};
|
|
119
138
|
/** On Windows: prefer .exe, fall back to .cmd, refuse extensionless shims (e.g. Volta). */
|
|
120
139
|
export function resolveWindowsCliPath(name) {
|
|
121
140
|
const envCmd = process.env[`${name.toUpperCase()}_CLI_CMD`];
|
|
122
141
|
if (envCmd)
|
|
123
142
|
return envCmd;
|
|
143
|
+
const cacheKey = `win:${name}`;
|
|
144
|
+
if (cliPathCache.has(cacheKey))
|
|
145
|
+
return cliPathCache.get(cacheKey);
|
|
146
|
+
let resolved = null;
|
|
124
147
|
try {
|
|
125
148
|
const result = spawnSync("where", [name], {
|
|
126
149
|
timeout: 5000,
|
|
127
150
|
encoding: "utf-8",
|
|
128
151
|
windowsHide: true,
|
|
129
152
|
});
|
|
130
|
-
if (result.status
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
153
|
+
if (result.status === 0 && result.stdout) {
|
|
154
|
+
const candidates = result.stdout
|
|
155
|
+
.trim()
|
|
156
|
+
.split(/\r?\n/)
|
|
157
|
+
.map((s) => s.trim())
|
|
158
|
+
.filter(Boolean);
|
|
159
|
+
resolved =
|
|
160
|
+
candidates.find((p) => /\.exe$/i.test(p)) ??
|
|
161
|
+
candidates.find((p) => /\.cmd$/i.test(p)) ??
|
|
162
|
+
null;
|
|
163
|
+
}
|
|
138
164
|
}
|
|
139
165
|
catch (err) {
|
|
140
166
|
log.debug(`[spawn] Windows CLI resolution for ${name} failed: ${err instanceof Error ? err.message : err}`);
|
|
141
|
-
return null;
|
|
142
167
|
}
|
|
168
|
+
cliPathCache.set(cacheKey, resolved);
|
|
169
|
+
return resolved;
|
|
143
170
|
}
|
|
144
171
|
/** Parse MCP transport from env. Returns null if port is not set or invalid. */
|
|
145
172
|
function parseSensoriumTransport() {
|
|
@@ -164,9 +191,10 @@ export const setStartupCleanupInProgress = (v) => {
|
|
|
164
191
|
};
|
|
165
192
|
// ── Shared spawn choreography ───────────────────────────────────────────────
|
|
166
193
|
// The pieces every agent spawn goes through in the same order: preflight
|
|
167
|
-
// checks, log-path construction, common spawn options, and the
|
|
168
|
-
// tail (
|
|
169
|
-
// quirks: env building, argument lists and
|
|
194
|
+
// checks, log-path construction, common spawn options, and the launch/register
|
|
195
|
+
// tail (launchAgent below — broker spawn with a flagged local fallback). Agent
|
|
196
|
+
// modules keep only their own CLI quirks: env building, argument lists and
|
|
197
|
+
// prompt delivery.
|
|
170
198
|
/**
|
|
171
199
|
* Shared spawn preflight: refuse when the dashboard's max-concurrent-threads
|
|
172
200
|
* limit is already reached, then require the MCP HTTP transport. Kept here so
|
|
@@ -200,7 +228,7 @@ export const buildSessionPrompt = (name, threadId) => `Start remote session with
|
|
|
200
228
|
* launched through a shell on Windows. `stdin` defaults to "ignore"; Codex
|
|
201
229
|
* passes "pipe" because it delivers its prompt over stdin.
|
|
202
230
|
*/
|
|
203
|
-
|
|
231
|
+
function detachedChildOptions(cliPath, outFd, env, cwd, stdin = "ignore") {
|
|
204
232
|
return {
|
|
205
233
|
stdio: [stdin, outFd, outFd],
|
|
206
234
|
shell: process.platform === "win32" && /\.(cmd|bat)$/i.test(cliPath),
|
|
@@ -267,7 +295,7 @@ async function handleProcessExit(code, threadId, pid, pidFilePath, entry, proces
|
|
|
267
295
|
const reg = getThread(db, threadId);
|
|
268
296
|
const agentType = (reg?.client ?? getAgentType());
|
|
269
297
|
const { dispatchSpawn } = await import("./agent-spawn.service.js");
|
|
270
|
-
const res = dispatchSpawn(agentType, entry.name, threadId, threadLifecycle, reg?.workingDirectory ?? undefined, entry.memorySourceThreadId ?? reg?.rootThreadId ?? undefined, "worker", db);
|
|
298
|
+
const res = await dispatchSpawn(agentType, entry.name, threadId, threadLifecycle, reg?.workingDirectory ?? undefined, entry.memorySourceThreadId ?? reg?.rootThreadId ?? undefined, "worker", db);
|
|
271
299
|
if ("pid" in res) {
|
|
272
300
|
log.info(`[respawn] worker thread ${threadId} relaunched as PID=${res.pid}`);
|
|
273
301
|
return; // task file preserved for the new process — skip decommission
|
|
@@ -348,7 +376,7 @@ async function handleProcessExit(code, threadId, pid, pidFilePath, entry, proces
|
|
|
348
376
|
}
|
|
349
377
|
}
|
|
350
378
|
function registerSpawnedProcess(opts, threadLifecycle) {
|
|
351
|
-
const pid = opts.
|
|
379
|
+
const pid = opts.pid;
|
|
352
380
|
if (pid === undefined)
|
|
353
381
|
return {
|
|
354
382
|
error: `${opts.agentLabel} process spawned but PID is undefined - spawn may have failed.`,
|
|
@@ -359,7 +387,8 @@ function registerSpawnedProcess(opts, threadLifecycle) {
|
|
|
359
387
|
pid,
|
|
360
388
|
name: opts.name,
|
|
361
389
|
configPath: opts.configPath,
|
|
362
|
-
startedAt:
|
|
390
|
+
startedAt: opts.startedAt,
|
|
391
|
+
...(opts.startTimeTicks ? { startTimeTicks: opts.startTimeTicks } : {}),
|
|
363
392
|
...(opts.threadType ? { threadType: opts.threadType } : {}),
|
|
364
393
|
}), "utf-8");
|
|
365
394
|
}
|
|
@@ -372,7 +401,7 @@ function registerSpawnedProcess(opts, threadLifecycle) {
|
|
|
372
401
|
pid,
|
|
373
402
|
threadId: opts.threadId,
|
|
374
403
|
name: opts.name,
|
|
375
|
-
startedAt:
|
|
404
|
+
startedAt: opts.startedAt,
|
|
376
405
|
createdAt: Date.now(),
|
|
377
406
|
logFile: opts.logFilePath,
|
|
378
407
|
...(opts.memorySourceThreadId !== undefined
|
|
@@ -381,33 +410,205 @@ function registerSpawnedProcess(opts, threadLifecycle) {
|
|
|
381
410
|
...(opts.threadType ? { threadType: opts.threadType } : {}),
|
|
382
411
|
};
|
|
383
412
|
spawnedThreads.push(entry);
|
|
384
|
-
opts.
|
|
413
|
+
opts.attachExit((code) => {
|
|
385
414
|
handleProcessExit(code, opts.threadId, pid, pidFilePath, entry, opts.agentLabel, threadLifecycle).catch((err) => log.warn(`[exit] cleanup failed: ${err}`));
|
|
386
415
|
});
|
|
387
|
-
opts.
|
|
388
|
-
log.info(`[start_thread] Spawned ${opts.agentLabel} process PID=${pid} for thread ${opts.threadId} ("${opts.name}")`);
|
|
416
|
+
opts.unref?.();
|
|
417
|
+
log.info(`[start_thread] Spawned ${opts.agentLabel} process PID=${pid} for thread ${opts.threadId} ("${opts.name}") via ${opts.spawnedVia}`);
|
|
389
418
|
return { pid, logFile: opts.logFilePath };
|
|
390
419
|
}
|
|
391
420
|
/**
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
*
|
|
421
|
+
* Staged cutover switch (plan hard criterion 7 — zero-disruption migration):
|
|
422
|
+
* SENSORIUM_BROKER_SPAWN=1 broker REQUIRED — a broker failure fails the
|
|
423
|
+
* spawn loudly, never a silent local fallback;
|
|
424
|
+
* SENSORIUM_BROKER_SPAWN=0 legacy local spawning only;
|
|
425
|
+
* unset auto — broker first, and if it is unreachable or
|
|
426
|
+
* predates /proc/spawn, WARN and spawn locally so
|
|
427
|
+
* an MCP update cannot strand agents behind an
|
|
428
|
+
* old supervisor binary. Locally-spawned processes
|
|
429
|
+
* are adopted into jobs+registry by the
|
|
430
|
+
* supervisor's boot reconciliation / /proc/adopt.
|
|
431
|
+
* Job objects are Windows-only, so non-Windows resolves to "off" unless forced.
|
|
432
|
+
*/
|
|
433
|
+
export function brokerSpawnMode() {
|
|
434
|
+
const raw = (process.env.SENSORIUM_BROKER_SPAWN ?? "").trim().toLowerCase();
|
|
435
|
+
if (["1", "true", "on", "required"].includes(raw))
|
|
436
|
+
return "required";
|
|
437
|
+
if (["0", "false", "off"].includes(raw))
|
|
438
|
+
return "off";
|
|
439
|
+
return process.platform === "win32" ? "auto" : "off";
|
|
440
|
+
}
|
|
441
|
+
const envToStringRecord = (env) => {
|
|
442
|
+
const out = {};
|
|
443
|
+
for (const [k, v] of Object.entries(env))
|
|
444
|
+
if (v !== undefined)
|
|
445
|
+
out[k] = v;
|
|
446
|
+
return out;
|
|
447
|
+
};
|
|
448
|
+
/** Register a broker-owned process (fresh spawn, idempotent hit, or a reconcile
|
|
449
|
+
* adoption): PID file, spawnedThreads[], and the polling exit watcher. */
|
|
450
|
+
function registerBrokerOwnedProcess(plan, proc, threadLifecycle) {
|
|
451
|
+
return registerSpawnedProcess({
|
|
452
|
+
pid: proc.pid,
|
|
453
|
+
startedAt: proc.startTimeMs,
|
|
454
|
+
startTimeTicks: proc.startTimeTicks || undefined,
|
|
455
|
+
spawnedVia: "broker",
|
|
456
|
+
attachExit: (onExit) => watchBrokerSpawnExit({
|
|
457
|
+
pid: proc.pid,
|
|
458
|
+
threadId: plan.threadId,
|
|
459
|
+
onExit,
|
|
460
|
+
}),
|
|
461
|
+
threadId: plan.threadId,
|
|
462
|
+
name: plan.name,
|
|
463
|
+
logFilePath: plan.logFilePath,
|
|
464
|
+
configPath: plan.configPath,
|
|
465
|
+
agentLabel: plan.agentLabel,
|
|
466
|
+
memorySourceThreadId: plan.memorySourceThreadId,
|
|
467
|
+
threadType: plan.threadType,
|
|
468
|
+
}, threadLifecycle);
|
|
469
|
+
}
|
|
470
|
+
// Reconcile pacing after an UNCERTAIN spawn outcome. The delay matches the
|
|
471
|
+
// broker client's unreachable cooldown so each attempt gets a fresh probe
|
|
472
|
+
// rather than a cached failure. Three rounds bound the worst case (wedged-but-
|
|
473
|
+
// accepting supervisor) to ~2 min; a still-unverifiable spawn then fails LOUDLY
|
|
474
|
+
// and the keeper retries later — safely, because spawn is idempotent.
|
|
475
|
+
const SPAWN_RECONCILE_ATTEMPTS = 3;
|
|
476
|
+
const SPAWN_RECONCILE_DELAY_MS = 5000;
|
|
477
|
+
/** Test hook: shrink the reconcile pacing. Null restores the default. */
|
|
478
|
+
let reconcileDelayOverride = null;
|
|
479
|
+
export function spawnReconcileDelayForTest(ms) {
|
|
480
|
+
reconcileDelayOverride = ms;
|
|
481
|
+
}
|
|
482
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
483
|
+
/**
|
|
484
|
+
* The reconcile contract for an uncertain broker spawn (timeout / connection
|
|
485
|
+
* lost mid-flight): the request MAY have created a process, so a blind local
|
|
486
|
+
* spawn is forbidden — no timeout value may ever produce two agents for one
|
|
487
|
+
* thread. Instead:
|
|
488
|
+
* 1. Ask the broker registry (/proc/list) — a live process there IS the
|
|
489
|
+
* thread's agent: adopt it.
|
|
490
|
+
* 2. Otherwise retry the spawn — idempotent by threadId server-side, so the
|
|
491
|
+
* retry either creates the one process or returns the one that exists.
|
|
492
|
+
* 3. Still unverifiable after the attempts → fail loudly. NEVER local-spawn:
|
|
493
|
+
* the keeper's next cycle retries against the same idempotent contract.
|
|
494
|
+
*/
|
|
495
|
+
async function reconcileUncertainSpawn(plan, spec, threadLifecycle, firstDetail) {
|
|
496
|
+
log.warn(`[spawn] broker spawn outcome UNCERTAIN for ${plan.agentLabel} thread ${plan.threadId} (${firstDetail}) — reconciling against the broker registry; a blind local spawn is forbidden here`);
|
|
497
|
+
for (let attempt = 1; attempt <= SPAWN_RECONCILE_ATTEMPTS; attempt++) {
|
|
498
|
+
const list = await brokerListThread(plan.threadId);
|
|
499
|
+
if (list && list.processes.length > 0) {
|
|
500
|
+
const root = list.processes[0];
|
|
501
|
+
if (root.startTimeTicks || root.startTimeMs) {
|
|
502
|
+
log.warn(`[spawn] reconcile attempt ${attempt}: broker has live pid ${root.pid} for thread ${plan.threadId} — adopting it as the agent (the uncertain spawn DID land)`);
|
|
503
|
+
return registerBrokerOwnedProcess(plan, { pid: root.pid, startTimeTicks: root.startTimeTicks, startTimeMs: root.startTimeMs }, threadLifecycle);
|
|
504
|
+
}
|
|
505
|
+
// Entry without identity: the pid vanished between the broker's job read
|
|
506
|
+
// and its snapshot — likely mid-death. Let the next attempt see clearly.
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
// Broker unreachable OR answered "no live process". Either way the spawn
|
|
510
|
+
// retry is safe: idempotent server-side, it can never create a second
|
|
511
|
+
// process — and if the first request is still in flight it serializes on
|
|
512
|
+
// the broker's per-thread lock and returns that process.
|
|
513
|
+
const retry = await brokerSpawn(spec);
|
|
514
|
+
if ("pid" in retry) {
|
|
515
|
+
if (retry.existing)
|
|
516
|
+
log.warn(`[spawn] reconcile attempt ${attempt}: idempotent spawn returned the EXISTING live pid ${retry.pid} for thread ${plan.threadId} — adopted, no duplicate created`);
|
|
517
|
+
return registerBrokerOwnedProcess(plan, retry, threadLifecycle);
|
|
518
|
+
}
|
|
519
|
+
if ("error" in retry) {
|
|
520
|
+
// Definitive: the broker checked (no live process) and CreateProcess
|
|
521
|
+
// failed. Nothing is running for this thread.
|
|
522
|
+
return {
|
|
523
|
+
error: `Broker spawn failed for ${plan.agentLabel} thread ${plan.threadId}: ${retry.error}`,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
// unavailable/uncertain → the broker may have died AFTER creating the
|
|
527
|
+
// process (it survives — the job handle is pinned into the child). Keep
|
|
528
|
+
// reconciling; never blind-spawn.
|
|
529
|
+
}
|
|
530
|
+
if (attempt < SPAWN_RECONCILE_ATTEMPTS)
|
|
531
|
+
await sleep(reconcileDelayOverride ?? SPAWN_RECONCILE_DELAY_MS);
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
534
|
+
error: `Broker spawn for ${plan.agentLabel} thread ${plan.threadId} remained unverifiable after ` +
|
|
535
|
+
`${SPAWN_RECONCILE_ATTEMPTS} reconcile attempts — refusing a blind local spawn (a broker-side ` +
|
|
536
|
+
`process may exist). The next spawn attempt reconciles again safely.`,
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Launch an agent process for a thread. Broker path first (the supervisor owns
|
|
541
|
+
* spawn/observe/kill; children land in the thread's job object so the whole
|
|
542
|
+
* tree stays killable), legacy local path per the cutover flag above.
|
|
543
|
+
*
|
|
544
|
+
* Duplicate-agent guarantee: the legacy local fallback runs ONLY on definitive
|
|
545
|
+
* evidence that the broker created nothing — a spawn error answer, an absent
|
|
546
|
+
* endpoint (404/401), or a connection that was never established. An uncertain
|
|
547
|
+
* outcome (timeout, dropped connection) goes through reconcileUncertainSpawn
|
|
548
|
+
* instead, so no timeout value can ever yield two agents for one thread.
|
|
395
549
|
*
|
|
396
|
-
* stdout/stderr go to a file descriptor the CHILD owns, not
|
|
397
|
-
* this (ephemeral) server process. A pipe's only reader is
|
|
398
|
-
* when it dies on a self-update/restart the orphaned,
|
|
399
|
-
* writing, the ~64KB OS pipe buffer fills, and the next
|
|
400
|
-
* child's event loop forever — killing MCP polling, the API
|
|
401
|
-
* reconnect (the exact zombie we saw on thread 20869). A file
|
|
402
|
-
* into the child at spawn and drained by the OS, so it
|
|
403
|
-
*
|
|
550
|
+
* In the local path stdout/stderr go to a file descriptor the CHILD owns, not
|
|
551
|
+
* a pipe drained by this (ephemeral) server process. A pipe's only reader is
|
|
552
|
+
* this node process; when it dies on a self-update/restart the orphaned,
|
|
553
|
+
* detached child keeps writing, the ~64KB OS pipe buffer fills, and the next
|
|
554
|
+
* write() blocks the child's event loop forever — killing MCP polling, the API
|
|
555
|
+
* stream and any reconnect (the exact zombie we saw on thread 20869). A file
|
|
556
|
+
* fd is duplicated into the child at spawn and drained by the OS, so it
|
|
557
|
+
* survives our restarts. The broker path keeps the identical design with the
|
|
558
|
+
* supervisor opening the file handle (spawn-to-file-fd, plan §6 "keep").
|
|
404
559
|
*/
|
|
405
|
-
export function
|
|
560
|
+
export async function launchAgent(plan, threadLifecycle) {
|
|
561
|
+
const mode = brokerSpawnMode();
|
|
562
|
+
if (mode !== "off") {
|
|
563
|
+
const role = plan.threadType ?? "agent";
|
|
564
|
+
const spec = {
|
|
565
|
+
threadId: plan.threadId,
|
|
566
|
+
role,
|
|
567
|
+
exe: plan.exe,
|
|
568
|
+
args: plan.args,
|
|
569
|
+
env: envToStringRecord(plan.env),
|
|
570
|
+
cwd: plan.cwd,
|
|
571
|
+
logFilePath: plan.logFilePath,
|
|
572
|
+
stdinData: plan.stdinData,
|
|
573
|
+
};
|
|
574
|
+
const spawned = await brokerSpawn(spec);
|
|
575
|
+
if ("pid" in spawned) {
|
|
576
|
+
if (spawned.existing)
|
|
577
|
+
log.warn(`[spawn] broker returned the EXISTING live pid ${spawned.pid} for thread ${plan.threadId} (idempotent hit) — adopting it instead of double-spawning`);
|
|
578
|
+
return registerBrokerOwnedProcess(plan, spawned, threadLifecycle);
|
|
579
|
+
}
|
|
580
|
+
if ("uncertain" in spawned)
|
|
581
|
+
return reconcileUncertainSpawn(plan, spec, threadLifecycle, spawned.uncertain);
|
|
582
|
+
// A failed spawn must NEVER look like success (hard criterion 5): both
|
|
583
|
+
// remaining outcomes are loud and DEFINITIVE (no process was created);
|
|
584
|
+
// they differ only in whether a legacy local spawn is allowed to take over.
|
|
585
|
+
const detail = "error" in spawned ? spawned.error : spawned.unavailable;
|
|
586
|
+
if (mode === "required") {
|
|
587
|
+
log.error(`[spawn] BROKER spawn FAILED for ${plan.agentLabel} thread ${plan.threadId}: ${detail} — SENSORIUM_BROKER_SPAWN=1 forbids the local fallback; spawn failed`);
|
|
588
|
+
return {
|
|
589
|
+
error: `Broker spawn failed for ${plan.agentLabel} thread ${plan.threadId}: ${detail}`,
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
log.warn(`[spawn] broker spawn unavailable for ${plan.agentLabel} thread ${plan.threadId} (${detail}) — falling back to LOCAL spawn; the process runs outside job containment until the supervisor's boot reconciliation adopts it`);
|
|
593
|
+
}
|
|
594
|
+
return launchLocalChild(plan, threadLifecycle);
|
|
595
|
+
}
|
|
596
|
+
/** Legacy local spawn — the pre-Phase-3 mechanics, kept verbatim behind the flag. */
|
|
597
|
+
function launchLocalChild(plan, threadLifecycle) {
|
|
406
598
|
try {
|
|
407
|
-
const outFd = openSync(
|
|
599
|
+
const outFd = openSync(plan.logFilePath, "a");
|
|
600
|
+
let child;
|
|
408
601
|
try {
|
|
409
|
-
|
|
410
|
-
|
|
602
|
+
child = spawn(plan.exe, plan.args, detachedChildOptions(plan.exe, outFd, plan.env, plan.cwd, plan.stdinData !== undefined ? "pipe" : "ignore"));
|
|
603
|
+
if (plan.stdinData !== undefined) {
|
|
604
|
+
try {
|
|
605
|
+
child.stdin?.write(plan.stdinData);
|
|
606
|
+
child.stdin?.end();
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
/* child died at spawn — the exit handler reports it */
|
|
610
|
+
}
|
|
611
|
+
}
|
|
411
612
|
}
|
|
412
613
|
finally {
|
|
413
614
|
// Parent no longer needs the fd — the child holds its own duplicated handle.
|
|
@@ -415,12 +616,26 @@ export function launchAgentChild(opts, threadLifecycle) {
|
|
|
415
616
|
closeSync(outFd);
|
|
416
617
|
}
|
|
417
618
|
catch (err) {
|
|
418
|
-
log.debug(`[spawn] closeSync log fd failed for thread ${
|
|
619
|
+
log.debug(`[spawn] closeSync log fd failed for thread ${plan.threadId}: ${errorMessage(err)}`);
|
|
419
620
|
}
|
|
420
621
|
}
|
|
622
|
+
return registerSpawnedProcess({
|
|
623
|
+
pid: child.pid,
|
|
624
|
+
startedAt: Date.now(),
|
|
625
|
+
spawnedVia: "local",
|
|
626
|
+
attachExit: (onExit) => child.on("exit", (code) => onExit(code)),
|
|
627
|
+
unref: () => child.unref(),
|
|
628
|
+
threadId: plan.threadId,
|
|
629
|
+
name: plan.name,
|
|
630
|
+
logFilePath: plan.logFilePath,
|
|
631
|
+
configPath: plan.configPath,
|
|
632
|
+
agentLabel: plan.agentLabel,
|
|
633
|
+
memorySourceThreadId: plan.memorySourceThreadId,
|
|
634
|
+
threadType: plan.threadType,
|
|
635
|
+
}, threadLifecycle);
|
|
421
636
|
}
|
|
422
637
|
catch (err) {
|
|
423
|
-
return { error: `Failed to spawn ${
|
|
638
|
+
return { error: `Failed to spawn ${plan.agentLabel} process: ${errorMessage(err)}` };
|
|
424
639
|
}
|
|
425
640
|
}
|
|
426
641
|
//# sourceMappingURL=spawn-common.js.map
|