sensorium-mcp 3.1.0-refactor.9 → 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.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
|
@@ -30,16 +30,45 @@ export declare const clearTaskConsumed: (threadId: number) => void;
|
|
|
30
30
|
/** Delete a worker's pending-task mailbox (and any in-flight .processing temp)
|
|
31
31
|
* so a retired worker can never be re-fed a late append. */
|
|
32
32
|
export declare function deletePendingTaskMailbox(threadId: number): void;
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Liveness + identity in one question: is `pid` alive AND (when `spawnedAtMs`
|
|
35
|
+
* is given) still the process we spawned?
|
|
36
|
+
*
|
|
37
|
+
* Two-step check, neither of which ever spawns a child process:
|
|
38
|
+
* 1. `process.kill(pid, 0)` — a plain syscall. ESRCH (any non-EPERM error) is
|
|
39
|
+
* a definitive "dead" and needs no broker (this also keeps dev mode
|
|
40
|
+
* without a supervisor fully functional for the common case).
|
|
41
|
+
* 2. Otherwise the answer is NOT trustworthy on Windows — kill(0) succeeds
|
|
42
|
+
* for kernel-zombie PIDs held open by a lingering handle, and EPERM is
|
|
43
|
+
* what a parent sees for its own terminated child. Ask the supervisor's
|
|
44
|
+
* process broker, which answers from a native process snapshot and also
|
|
45
|
+
* verifies creation-time identity (PID-reuse guard).
|
|
46
|
+
*
|
|
47
|
+
* Broker unreachable → "cannot confirm → treat alive", exactly the audited-safe
|
|
48
|
+
* degradation the deleted tasklist/Get-Process breakers had.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isProcessAlive(pid: number, spawnedAtMs?: number): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Thread-scoped liveness — the correct question for a broker-spawned worker.
|
|
53
|
+
*
|
|
54
|
+
* On Windows claude.exe/copilot.exe are LAUNCHERS: they fork the real agent into
|
|
55
|
+
* the thread's Job Object under a NEW pid, then exit. ~20s later the launcher pid
|
|
56
|
+
* we recorded at spawn is gone, so a pid-first `isProcessAlive(launcherPid)`
|
|
57
|
+
* returns false and orphans the still-working child. The thread's JOB is the
|
|
58
|
+
* source of truth; ask the broker by threadId:
|
|
59
|
+
* - null (unreachable) → cannot confirm → treat ALIVE (never kill on unknown),
|
|
60
|
+
* exactly the audited-safe degradation contract.
|
|
61
|
+
* - known:false (404) → the broker has NEVER managed this thread (dev mode /
|
|
62
|
+
* pre-broker process) → fall back to the pid check.
|
|
63
|
+
* - known:true → use the job/registry verdict (kernel truth).
|
|
64
|
+
*
|
|
65
|
+
* Off Windows there is no launcher-fork indirection (the pid IS the real child),
|
|
66
|
+
* so defer straight to the pid check.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isThreadAlive(threadId: number, fallbackPid?: number, spawnedAtMs?: number): Promise<boolean>;
|
|
39
69
|
export declare function readPidFiles(): PidFileEntry[];
|
|
40
|
-
export declare function findAliveThread(threadId: number): SpawnedThread | undefined
|
|
41
|
-
export declare
|
|
42
|
-
export declare function getActiveThreadIds(): number[];
|
|
70
|
+
export declare function findAliveThread(threadId: number): Promise<SpawnedThread | undefined>;
|
|
71
|
+
export declare function getActiveThreadIds(): Promise<number[]>;
|
|
43
72
|
export declare function ensureDirs(): void;
|
|
44
73
|
/** Thread transcripts (logs/threads/*.json) are append-only debug artifacts with
|
|
45
74
|
* one file per thread per day. Nothing consumes them at runtime except the
|
|
@@ -52,10 +81,15 @@ export declare function ensureDirs(): void;
|
|
|
52
81
|
export declare function pruneOldThreadLogs(): void;
|
|
53
82
|
/**
|
|
54
83
|
* Check liveness of a thread directly via its PID file, bypassing the
|
|
55
|
-
* spawnedThreads[] in-memory cache.
|
|
56
|
-
*
|
|
84
|
+
* spawnedThreads[] in-memory cache. Returns the live PID together with its
|
|
85
|
+
* recorded spawn identity (startedAt) so callers can make identity-checked
|
|
86
|
+
* kill/alive calls, or undefined if no PID file exists or the process is dead
|
|
87
|
+
* (stale file is deleted).
|
|
57
88
|
*/
|
|
58
|
-
export declare function findAliveThreadViaPidFile(threadId: number):
|
|
89
|
+
export declare function findAliveThreadViaPidFile(threadId: number): Promise<{
|
|
90
|
+
pid: number;
|
|
91
|
+
startedAt?: number;
|
|
92
|
+
} | undefined>;
|
|
59
93
|
/**
|
|
60
94
|
* Reconcile in-memory state (spawnedThreads[]) with the two authoritative
|
|
61
95
|
* sources of truth at startup:
|
|
@@ -64,58 +98,39 @@ export declare function findAliveThreadViaPidFile(threadId: number): number | un
|
|
|
64
98
|
*
|
|
65
99
|
* Replaces the old restoreFromPidFiles() + cleanupStalePidFiles() pair.
|
|
66
100
|
*/
|
|
67
|
-
export declare function reconcileState(db: Database, threadLifecycle: ThreadLifecycleService): void
|
|
68
|
-
export interface ProcSnapshotEntry {
|
|
69
|
-
ppid: number;
|
|
70
|
-
startMs: number;
|
|
71
|
-
}
|
|
72
|
-
export type ProcSnapshot = Map<number, ProcSnapshotEntry>;
|
|
73
|
-
interface OrphanLineageEntry {
|
|
74
|
-
ownerThreadId: number;
|
|
75
|
-
ownerPid: number;
|
|
76
|
-
ownerStartedAt?: number;
|
|
77
|
-
descendantStartMs: number;
|
|
78
|
-
}
|
|
79
|
-
export interface OrphanSweepTrackedThread {
|
|
80
|
-
threadId: number;
|
|
81
|
-
pid: number;
|
|
82
|
-
startedAt?: number;
|
|
83
|
-
alive: boolean;
|
|
84
|
-
}
|
|
85
|
-
export interface OrphanSweepResult {
|
|
86
|
-
/** Confirmed orphans that passed BOTH pid-reuse guards. */
|
|
87
|
-
orphans: {
|
|
88
|
-
pid: number;
|
|
89
|
-
ownerThreadId: number;
|
|
90
|
-
startMs: number;
|
|
91
|
-
}[];
|
|
92
|
-
/** Recorded descendants whose pid was recycled (start-time mismatch) — dropped, never killed. */
|
|
93
|
-
reusedPidsSkipped: number[];
|
|
94
|
-
/** Candidates rejected by the child-not-older-than-parent guard — never killed. */
|
|
95
|
-
olderThanParentSkipped: number[];
|
|
96
|
-
/** How many descendant lineage entries were (re)recorded this pass. */
|
|
97
|
-
recorded: number;
|
|
98
|
-
}
|
|
101
|
+
export declare function reconcileState(db: Database, threadLifecycle: ThreadLifecycleService): Promise<void>;
|
|
99
102
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
+
* Kill the process tree rooted at `pid` via the supervisor's broker (native
|
|
104
|
+
* TerminateProcess over the whole tree, identity-checked when `spawnedAtMs` is
|
|
105
|
+
* given, outcome recorded in the broker's on-disk registry). Never spawns a
|
|
106
|
+
* child process and never blocks the event loop.
|
|
107
|
+
*
|
|
108
|
+
* Broker unreachable → degraded best-effort: one native `process.kill(pid)`
|
|
109
|
+
* (root only — Node cannot enumerate a tree without shelling out, and that
|
|
110
|
+
* machinery is gone by design) followed by a conservative liveness re-check.
|
|
111
|
+
* A survived kill keeps the PID file so the keeper/cleanup policy loops retry
|
|
112
|
+
* and escalate — same contract as before.
|
|
103
113
|
*/
|
|
104
|
-
export declare function
|
|
105
|
-
snapshot: ProcSnapshot | null;
|
|
106
|
-
trackedThreads: OrphanSweepTrackedThread[];
|
|
107
|
-
lineage: Map<number, OrphanLineageEntry>;
|
|
108
|
-
protectedPids: Set<number>;
|
|
109
|
-
toleranceMs: number;
|
|
110
|
-
}): OrphanSweepResult;
|
|
114
|
+
export declare function killProcessTree(pid: number, threadId: number, caller?: string, spawnedAtMs?: number): Promise<void>;
|
|
111
115
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
116
|
+
* Kill a worker by its THREAD, not by the pid we recorded at spawn.
|
|
117
|
+
*
|
|
118
|
+
* For a launcher-forked worker the recorded pid is the launcher, which has long
|
|
119
|
+
* since exited; `killProcessTree(launcherPid)` therefore routes to the broker's
|
|
120
|
+
* KillByPid, hits its "AlreadyDead" fast-path (the launcher pid is gone) and
|
|
121
|
+
* returns BEFORE the job-kill fallback — so the live forked child is never
|
|
122
|
+
* touched. Routing by threadId (pid omitted) takes the broker's KillByThread
|
|
123
|
+
* path instead: it terminates the whole Job Object (every live member), or, when
|
|
124
|
+
* the job assign failed (Avecto downgrade), the registry-identity survivor the
|
|
125
|
+
* broker adopted. This is the kill that actually reaches the real agent.
|
|
126
|
+
*
|
|
127
|
+
* Broker unreachable → degraded best-effort native kill of `fallbackPid` (self/
|
|
128
|
+
* server-guarded), and we NEVER remove the PID file or claim death: a later sweep
|
|
129
|
+
* retries against fresh evidence. `brokerKillTree` also returns null for an
|
|
130
|
+
* unknown/already-dead thread (HTTP 404); the degraded native kill of a dead pid
|
|
131
|
+
* is a harmless no-op there, and the caller's own `isThreadAlive` gate — not this
|
|
132
|
+
* function — decides teardown.
|
|
117
133
|
*/
|
|
118
|
-
export declare function
|
|
119
|
-
export declare function killProcessTree(pid: number, threadId: number, caller?: string, spawnedAtMs?: number): Promise<void>;
|
|
134
|
+
export declare function killThreadTree(threadId: number, caller?: string, fallbackPid?: number, spawnedAtMs?: number): Promise<void>;
|
|
120
135
|
export {};
|
|
121
136
|
//# sourceMappingURL=process.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.service.d.ts","sourceRoot":"","sources":["../../src/services/process.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process.service.d.ts","sourceRoot":"","sources":["../../src/services/process.service.ts"],"names":[],"mappings":"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"}
|