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
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { log } from "../lib/logger.js";
|
|
4
|
-
import { findAliveThreadViaPidFile, isProcessAlive,
|
|
4
|
+
import { findAliveThreadViaPidFile, isProcessAlive, isThreadAlive, killThreadTree, PROCESS_LOGS_DIR, THREAD_LOGS_DIR, } from "./process.service.js";
|
|
5
5
|
import { getThreadSessionCount } from "../sessions/mcp-registry.js";
|
|
6
6
|
import { readThreadHeartbeat } from "../data/file-storage.js";
|
|
7
7
|
import { dispatchSpawn } from "./agent-spawn.service.js";
|
|
8
8
|
import { getKeepAliveThreads, getThread } from "../data/memory/thread-registry.js";
|
|
9
9
|
import { ThreadState } from "./thread-lifecycle.service.js";
|
|
10
10
|
import { errorMessage } from "../lib/utils.js";
|
|
11
|
+
import { brokerGetKeeperState, brokerSaveKeeperState } from "./broker-client.js";
|
|
11
12
|
const KEEPER_CHECK_INTERVAL_MS = 120_000; // 2 min
|
|
12
13
|
const KEEPER_MAX_RETRIES = 5;
|
|
13
14
|
const KEEPER_COOLDOWN_MS = 300_000; // 5 min
|
|
@@ -26,8 +27,8 @@ const UNKILLABLE_RENOTIFY_MS = 3_600_000; // 1 hour — re-ping the operator at
|
|
|
26
27
|
// tool calls) after startup. Used to avoid trusting a frozen pre-restart
|
|
27
28
|
// heartbeat as an "untracked live worker" and needlessly delaying restart.
|
|
28
29
|
const SERVER_START_TIME = Date.now();
|
|
29
|
-
/** DIAGNOSTIC (read-only): newest stream-json stdout log
|
|
30
|
-
function
|
|
30
|
+
/** DIAGNOSTIC (read-only): newest stream-json stdout log for a thread (path + mtime + size), or null. */
|
|
31
|
+
function findLatestThreadLog(threadId) {
|
|
31
32
|
let files;
|
|
32
33
|
try {
|
|
33
34
|
files = readdirSync(THREAD_LOGS_DIR);
|
|
@@ -42,15 +43,19 @@ function findLatestThreadLogFile(threadId) {
|
|
|
42
43
|
continue;
|
|
43
44
|
const full = join(THREAD_LOGS_DIR, file);
|
|
44
45
|
try {
|
|
45
|
-
const
|
|
46
|
-
if (!best || mtimeMs > best.mtimeMs)
|
|
47
|
-
best = { path: full, mtimeMs };
|
|
46
|
+
const st = statSync(full);
|
|
47
|
+
if (!best || st.mtimeMs > best.mtimeMs)
|
|
48
|
+
best = { path: full, mtimeMs: st.mtimeMs, sizeBytes: st.size };
|
|
48
49
|
}
|
|
49
50
|
catch {
|
|
50
51
|
/* file vanished between readdir and stat */
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
return best
|
|
54
|
+
return best;
|
|
55
|
+
}
|
|
56
|
+
/** DIAGNOSTIC (read-only): newest stream-json stdout log path for a thread, or null. */
|
|
57
|
+
function findLatestThreadLogFile(threadId) {
|
|
58
|
+
return findLatestThreadLog(threadId)?.path ?? null;
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
56
61
|
* DIAGNOSTIC (logging-only): capture what node knows about a STUCK thread at the
|
|
@@ -61,7 +66,7 @@ function findLatestThreadLogFile(threadId) {
|
|
|
61
66
|
* NEVER affect the kill. This runs only when the keeper has ALREADY decided the
|
|
62
67
|
* thread is stuck; it triggers no new kills.
|
|
63
68
|
*/
|
|
64
|
-
function writeWedgeSnapshot(threadId, pid, reason, heartbeat, now) {
|
|
69
|
+
async function writeWedgeSnapshot(threadId, pid, reason, heartbeat, now) {
|
|
65
70
|
try {
|
|
66
71
|
const dir = join(PROCESS_LOGS_DIR, "wedge-snapshots");
|
|
67
72
|
mkdirSync(dir, { recursive: true });
|
|
@@ -72,7 +77,7 @@ function writeWedgeSnapshot(threadId, pid, reason, heartbeat, now) {
|
|
|
72
77
|
lines.push(`timestamp: ${new Date(now).toISOString()}`);
|
|
73
78
|
let alive;
|
|
74
79
|
try {
|
|
75
|
-
alive = isProcessAlive(pid);
|
|
80
|
+
alive = await isProcessAlive(pid);
|
|
76
81
|
}
|
|
77
82
|
catch (err) {
|
|
78
83
|
alive = `error: ${errorMessage(err)}`;
|
|
@@ -163,7 +168,7 @@ export class KeeperService {
|
|
|
163
168
|
// Add new keepers
|
|
164
169
|
for (const thread of threads) {
|
|
165
170
|
if (!this.keepers.has(thread.threadId)) {
|
|
166
|
-
|
|
171
|
+
const entry = {
|
|
167
172
|
threadId: thread.threadId,
|
|
168
173
|
retryCount: 0,
|
|
169
174
|
fastExitCount: 0,
|
|
@@ -175,15 +180,23 @@ export class KeeperService {
|
|
|
175
180
|
limboWarned: false,
|
|
176
181
|
survivedKillCount: 0,
|
|
177
182
|
lastUnkillableNotifyMs: 0,
|
|
178
|
-
|
|
183
|
+
lastLogSizeBytes: 0,
|
|
184
|
+
lastHeartbeatMs: 0,
|
|
185
|
+
};
|
|
186
|
+
this.keepers.set(thread.threadId, entry);
|
|
179
187
|
log.info(`[keeper] Started keeper for thread ${thread.threadId} ('${thread.name}')`);
|
|
188
|
+
// Hydrate backoff counters from the broker's registry (plan §4.3): they
|
|
189
|
+
// used to reset to zero on every MCP restart — during the Jul 25 wave 15
|
|
190
|
+
// resets in 2h19m meant no backoff ever matured. Fire-and-forget; until
|
|
191
|
+
// it lands the entry runs on defaults (today's behavior).
|
|
192
|
+
void this.hydrateFromRegistry(entry);
|
|
180
193
|
}
|
|
181
194
|
}
|
|
182
195
|
// Check all active keepers (skip if already in-flight to prevent duplicate spawns)
|
|
183
196
|
for (const entry of this.keepers.values()) {
|
|
184
197
|
if (!entry.stopped && !entry.checking) {
|
|
185
198
|
entry.checking = true;
|
|
186
|
-
this.
|
|
199
|
+
this.runKeeperCycle(entry)
|
|
187
200
|
.catch((err) => {
|
|
188
201
|
log.warn(`[keeper] checkAndRestart error for thread ${entry.threadId}: ${errorMessage(err)}`);
|
|
189
202
|
})
|
|
@@ -193,6 +206,64 @@ export class KeeperService {
|
|
|
193
206
|
}
|
|
194
207
|
}
|
|
195
208
|
}
|
|
209
|
+
/** One keeper cycle with persistence: whenever a cycle changed any durable
|
|
210
|
+
* policy counter, push the new state to the broker's registry so it survives
|
|
211
|
+
* an MCP restart (plan §4.3). Single choke point — the cycle body has many
|
|
212
|
+
* early returns and each mutation site would otherwise need its own save. */
|
|
213
|
+
async runKeeperCycle(entry) {
|
|
214
|
+
const before = KeeperService.durableStateOf(entry);
|
|
215
|
+
try {
|
|
216
|
+
await this.checkAndRestart(entry);
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
const after = KeeperService.durableStateOf(entry);
|
|
220
|
+
if (JSON.stringify(before) !== JSON.stringify(after)) {
|
|
221
|
+
void brokerSaveKeeperState(after).catch(() => {
|
|
222
|
+
/* unreachable broker already WARN-logged by the client */
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
static durableStateOf(entry) {
|
|
228
|
+
return {
|
|
229
|
+
threadId: entry.threadId,
|
|
230
|
+
retryCount: entry.retryCount,
|
|
231
|
+
fastExitCount: entry.fastExitCount,
|
|
232
|
+
fastExitEscalation: entry.fastExitEscalation,
|
|
233
|
+
cooldownUntilMs: entry.cooldownUntil > 0 ? entry.cooldownUntil : null,
|
|
234
|
+
survivedKillCount: entry.survivedKillCount,
|
|
235
|
+
lastStartAtMs: entry.lastStartTime > 0 ? entry.lastStartTime : null,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/** Restore persisted counters when a keeper starts (max-merge so counters that
|
|
239
|
+
* already advanced in this session are never rolled back). */
|
|
240
|
+
async hydrateFromRegistry(entry) {
|
|
241
|
+
try {
|
|
242
|
+
const state = await brokerGetKeeperState(entry.threadId);
|
|
243
|
+
if (!state || entry.stopped)
|
|
244
|
+
return;
|
|
245
|
+
entry.retryCount = Math.max(entry.retryCount, state.retryCount);
|
|
246
|
+
entry.fastExitCount = Math.max(entry.fastExitCount, state.fastExitCount);
|
|
247
|
+
entry.fastExitEscalation = Math.max(entry.fastExitEscalation, state.fastExitEscalation);
|
|
248
|
+
entry.survivedKillCount = Math.max(entry.survivedKillCount, state.survivedKillCount);
|
|
249
|
+
if (state.cooldownUntilMs !== null && state.cooldownUntilMs > entry.cooldownUntil)
|
|
250
|
+
entry.cooldownUntil = state.cooldownUntilMs;
|
|
251
|
+
if (state.lastStartAtMs !== null && entry.lastStartTime === 0)
|
|
252
|
+
entry.lastStartTime = state.lastStartAtMs;
|
|
253
|
+
if (state.retryCount > 0 ||
|
|
254
|
+
state.fastExitCount > 0 ||
|
|
255
|
+
state.fastExitEscalation > 0 ||
|
|
256
|
+
state.survivedKillCount > 0 ||
|
|
257
|
+
(state.cooldownUntilMs !== null && state.cooldownUntilMs > Date.now())) {
|
|
258
|
+
log.info(`[keeper] Thread ${entry.threadId}: restored persisted keeper state (retry=${state.retryCount}, fastExit=${state.fastExitCount}, escalation=${state.fastExitEscalation}, survivedKill=${state.survivedKillCount}${state.cooldownUntilMs !== null && state.cooldownUntilMs > Date.now()
|
|
259
|
+
? `, cooldown until ${new Date(state.cooldownUntilMs).toISOString()}`
|
|
260
|
+
: ""})`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
log.debug(`[keeper] keeper-state hydration failed for thread ${entry.threadId}: ${errorMessage(err)}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
196
267
|
async checkAndRestart(entry) {
|
|
197
268
|
const now = Date.now();
|
|
198
269
|
// 1. Check cooldown
|
|
@@ -201,33 +272,80 @@ export class KeeperService {
|
|
|
201
272
|
return;
|
|
202
273
|
}
|
|
203
274
|
// 2. Check if thread is running — reads PID file directly (authoritative OS evidence)
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
//
|
|
213
|
-
//
|
|
275
|
+
const aliveProc = await findAliveThreadViaPidFile(entry.threadId);
|
|
276
|
+
const alivePid = aliveProc?.pid;
|
|
277
|
+
// 2a. PID file shows no live tracked process. A fresh heartbeat USED to be
|
|
278
|
+
// trusted alone as "someone is actively serving this thread" — but with the
|
|
279
|
+
// tracked PID gone, a heartbeat < 1h old is NOT proof of life: the heartbeat
|
|
280
|
+
// file is only rewritten in the wait poll loop and on tool calls, so a long
|
|
281
|
+
// final model turn freezes it, and if the process then dies (e.g. Claude's
|
|
282
|
+
// 5-hour org limit 429s it) the frozen-but-recent heartbeat lingers for up to
|
|
283
|
+
// STUCK_THRESHOLD_MS. That is exactly how thread 1327's death was silently
|
|
284
|
+
// swallowed for ~67 minutes on 2026-07-27: the limbo guard fired every ~2-min
|
|
285
|
+
// cycle while BOTH the restart AND the operator-facing 💀 notification were
|
|
286
|
+
// suppressed, until the frozen heartbeat finally crossed 1h.
|
|
287
|
+
//
|
|
288
|
+
// The ONLY signals that prove a worker is alive RIGHT NOW are CROSS-CYCLE
|
|
289
|
+
// deltas measured between keeper cycles (~2 min apart) — symmetric to the
|
|
290
|
+
// 2026-07-26 stuck-branch fix, which likewise learned that a stale heartbeat
|
|
291
|
+
// alone does not prove/disprove a wedge because a long model turn freezes it:
|
|
292
|
+
// • heartbeat ADVANCED since the previous cycle — a live untracked worker
|
|
293
|
+
// idle in the long-poll rewrites it every ~2s, so it keeps advancing, OR
|
|
294
|
+
// • stdout GREW in bytes since the previous cycle (sizeGrew) — a live worker
|
|
295
|
+
// mid model turn emits tokens even while its heartbeat is frozen.
|
|
296
|
+
// A genuinely dead worker shows BOTH frozen: no heartbeat advance AND no
|
|
297
|
+
// stdout growth → fall through to the normal restart + notifyDeath path so the
|
|
298
|
+
// operator is warned within ~2 keeper cycles instead of ~1 hour. (mtime < 1h
|
|
299
|
+
// is deliberately NOT used here: a just-died process leaves a log whose mtime
|
|
300
|
+
// is recent for up to an hour — the same failure mode as the frozen heartbeat.)
|
|
214
301
|
if (alivePid === undefined) {
|
|
215
302
|
const heartbeat = readThreadHeartbeat(entry.threadId);
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
303
|
+
// Upper sanity bound: no heartbeat, a pre-restart heartbeat from an older
|
|
304
|
+
// server generation, or a heartbeat already older than 1h is definitely not
|
|
305
|
+
// a live untracked worker → fall through to the cleanup + restart path.
|
|
306
|
+
const heartbeatPlausiblyLive = heartbeat !== null && heartbeat > SERVER_START_TIME && now - heartbeat < STUCK_THRESHOLD_MS;
|
|
307
|
+
if (heartbeatPlausiblyLive) {
|
|
308
|
+
const streamLog = findLatestThreadLog(entry.threadId);
|
|
309
|
+
const heartbeatAdvanced = entry.lastHeartbeatMs > 0 && heartbeat > entry.lastHeartbeatMs;
|
|
310
|
+
const sizeGrew = entry.lastLogSizeBytes > 0 &&
|
|
311
|
+
streamLog !== null &&
|
|
312
|
+
streamLog.sizeBytes > entry.lastLogSizeBytes;
|
|
313
|
+
// First cycle of this episode: no baseline yet, so no cross-cycle delta can
|
|
314
|
+
// be measured. Record the baselines and grant exactly ONE ~2-min grace
|
|
315
|
+
// cycle (vs. the old up-to-1-hour hole) before demanding evidence of life.
|
|
316
|
+
const noBaseline = entry.lastHeartbeatMs === 0 && entry.lastLogSizeBytes === 0;
|
|
317
|
+
if (noBaseline || heartbeatAdvanced || sizeGrew) {
|
|
318
|
+
// Still (or possibly) a live untracked worker — refresh baselines so the
|
|
319
|
+
// next cycle measures a fresh delta, then skip the restart.
|
|
320
|
+
entry.lastHeartbeatMs = heartbeat;
|
|
321
|
+
if (streamLog !== null)
|
|
322
|
+
entry.lastLogSizeBytes = streamLog.sizeBytes;
|
|
323
|
+
const evidence = noBaseline
|
|
324
|
+
? "first cycle — baselining"
|
|
325
|
+
: heartbeatAdvanced
|
|
326
|
+
? "heartbeat advanced"
|
|
327
|
+
: "stdout grew";
|
|
328
|
+
if (!entry.limboWarned) {
|
|
329
|
+
log.warn(`[keeper] Thread ${entry.threadId}: no live tracked PID but a worker still shows life (${evidence}, heartbeat ${Math.round((now - heartbeat) / 1000)}s ago) — a live worker is still serving it under an untracked PID. Skipping restart to avoid a duplicate process.`);
|
|
330
|
+
entry.limboWarned = true;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
log.debug(`[keeper] Thread ${entry.threadId}: still in untracked-live-worker limbo (${evidence}, heartbeat ${Math.round((now - heartbeat) / 1000)}s ago) — skipping restart.`);
|
|
334
|
+
}
|
|
335
|
+
return;
|
|
225
336
|
}
|
|
226
|
-
|
|
337
|
+
// Heartbeat recent but FROZEN across cycles AND stdout static → the worker
|
|
338
|
+
// is dead (the 2026-07-27 thread-1327 case). Do NOT skip — fall through to
|
|
339
|
+
// the cleanup + normal restart + notifyDeath path below.
|
|
227
340
|
}
|
|
228
341
|
// Process is genuinely gone — any prior survived-kill episode is over.
|
|
229
342
|
entry.survivedKillCount = 0;
|
|
230
343
|
entry.lastUnkillableNotifyMs = 0;
|
|
344
|
+
// A restart writes a fresh (empty) stdout log; drop the byte baseline so the
|
|
345
|
+
// next episode never compares sizes across two different log files.
|
|
346
|
+
entry.lastLogSizeBytes = 0;
|
|
347
|
+
// Drop the heartbeat liveness baseline too — the next episode measures fresh.
|
|
348
|
+
entry.lastHeartbeatMs = 0;
|
|
231
349
|
}
|
|
232
350
|
// Not in limbo (PID alive, or heartbeat stale/absent) — clear the flag so a
|
|
233
351
|
// future episode logs afresh.
|
|
@@ -235,7 +353,7 @@ export class KeeperService {
|
|
|
235
353
|
if (alivePid !== undefined) {
|
|
236
354
|
// 3. Check if stuck via heartbeat
|
|
237
355
|
const heartbeat = readThreadHeartbeat(entry.threadId);
|
|
238
|
-
const
|
|
356
|
+
const heartbeatStale = heartbeat !== null
|
|
239
357
|
? now - heartbeat > STUCK_THRESHOLD_MS
|
|
240
358
|
: // No parseable heartbeat but process is alive — treat as stuck unless
|
|
241
359
|
// freshly spawned by THIS keeper instance (lastStartTime within threshold).
|
|
@@ -246,6 +364,35 @@ export class KeeperService {
|
|
|
246
364
|
: // Restored from PID file (lastStartTime=0): no heartbeat data at all
|
|
247
365
|
// means the process never wrote one — definitely stuck.
|
|
248
366
|
true;
|
|
367
|
+
// A stale heartbeat alone does NOT prove a wedge. The heartbeat file is only
|
|
368
|
+
// rewritten on MCP tool calls and inside the wait poll loop; a single long
|
|
369
|
+
// model turn (heavy thinking / a large generation) makes no tool calls and is
|
|
370
|
+
// not in the poll loop, so the heartbeat freezes for the whole turn even
|
|
371
|
+
// though the agent is alive and productively streaming tokens. The agent's
|
|
372
|
+
// stdout stream-json log grows on every emitted line, giving an INDEPENDENT
|
|
373
|
+
// liveness signal. We read it two ways so neither can silently fail:
|
|
374
|
+
// (a) mtime advanced within the window, and
|
|
375
|
+
// (b) the log GREW in bytes since the previous keeper cycle — immune to
|
|
376
|
+
// Windows buffering the inherited-fd write so mtime lags behind output.
|
|
377
|
+
// Only declare a wedge when the heartbeat is stale AND neither stream signal
|
|
378
|
+
// shows life — otherwise the keeper decapitates a working agent mid-answer
|
|
379
|
+
// (exactly what killed thread 1327 at 61m on 2026-07-26). Checked only when
|
|
380
|
+
// the heartbeat is already stale, so the healthy common case does no extra I/O.
|
|
381
|
+
const streamLog = heartbeatStale ? findLatestThreadLog(entry.threadId) : null;
|
|
382
|
+
const streamAgeMs = streamLog !== null ? now - streamLog.mtimeMs : null;
|
|
383
|
+
const mtimeFresh = streamAgeMs !== null && streamAgeMs >= 0 && streamAgeMs < STUCK_THRESHOLD_MS;
|
|
384
|
+
const sizeGrew = streamLog !== null &&
|
|
385
|
+
entry.lastLogSizeBytes > 0 &&
|
|
386
|
+
streamLog.sizeBytes > entry.lastLogSizeBytes;
|
|
387
|
+
if (streamLog !== null)
|
|
388
|
+
entry.lastLogSizeBytes = streamLog.sizeBytes;
|
|
389
|
+
const streamFresh = mtimeFresh || sizeGrew;
|
|
390
|
+
if (heartbeatStale && streamFresh) {
|
|
391
|
+
log.info(`[keeper] Thread ${entry.threadId} heartbeat is stale (${heartbeat !== null ? Math.round((now - heartbeat) / 60000) + "m" : "none"}) but its stdout stream shows life (${mtimeFresh
|
|
392
|
+
? `mtime ${Math.round(streamAgeMs / 1000)}s ago`
|
|
393
|
+
: "grew in bytes"}) — agent is mid-turn (streaming), not wedged. Skipping kill.`);
|
|
394
|
+
}
|
|
395
|
+
const isStuck = heartbeatStale && !streamFresh;
|
|
249
396
|
if (isStuck) {
|
|
250
397
|
const reason = heartbeat !== null
|
|
251
398
|
? `no heartbeat for ${Math.round((now - heartbeat) / 60000)}m`
|
|
@@ -265,11 +412,21 @@ export class KeeperService {
|
|
|
265
412
|
// DIAGNOSTIC (logging-only): forensic snapshot BEFORE the kill so we can
|
|
266
413
|
// see whether the stuck agent was still MCP-connected or already orphaned,
|
|
267
414
|
// plus the tail of its stdout. Best-effort; never blocks/affects the kill.
|
|
268
|
-
writeWedgeSnapshot(entry.threadId, alivePid, reason, heartbeat, now);
|
|
269
|
-
|
|
270
|
-
//
|
|
271
|
-
//
|
|
272
|
-
|
|
415
|
+
await writeWedgeSnapshot(entry.threadId, alivePid, reason, heartbeat, now);
|
|
416
|
+
// THREAD-scoped kill: the recorded alivePid is a launcher that has long
|
|
417
|
+
// since exited while its forked child lives on in the thread's job, so a
|
|
418
|
+
// killProcessTree(alivePid) routes to the broker's KillByPid AlreadyDead
|
|
419
|
+
// fast-path and never touches the live child — then isProcessAlive(launcherPid)
|
|
420
|
+
// reads false and the keeper falsely concludes success → duplicate spawn +
|
|
421
|
+
// orphaned wedged child. Route by threadId (broker KillByThread → job kill of
|
|
422
|
+
// the real child); pass the launcher pid + PID-file startedAt as the
|
|
423
|
+
// identity-checked degraded fallback.
|
|
424
|
+
await killThreadTree(entry.threadId, "keeper-stuck", alivePid, aliveProc?.startedAt);
|
|
425
|
+
// Verify kill succeeded before restarting — if the thread still has a live
|
|
426
|
+
// member, do NOT spawn a second instance. Keeper will retry next cycle.
|
|
427
|
+
// THREAD-scoped so a broker-unreachable/unknown verdict treats the thread as
|
|
428
|
+
// alive (never a false "killed" → never a duplicate spawn).
|
|
429
|
+
if (await isThreadAlive(entry.threadId, alivePid, aliveProc?.startedAt)) {
|
|
273
430
|
entry.survivedKillCount++;
|
|
274
431
|
log.warn(`[keeper] Thread ${entry.threadId} PID=${alivePid} survived kill (${entry.survivedKillCount}x) — skipping restart (will retry next cycle)`);
|
|
275
432
|
// Escalate: a process that repeatedly refuses to die needs operator
|
|
@@ -290,6 +447,8 @@ export class KeeperService {
|
|
|
290
447
|
entry.survivedKillCount = 0;
|
|
291
448
|
entry.lastUnkillableNotifyMs = 0;
|
|
292
449
|
entry.retryCount = 0;
|
|
450
|
+
// Restart writes a fresh stdout log — drop the byte baseline (see above).
|
|
451
|
+
entry.lastLogSizeBytes = 0;
|
|
293
452
|
// Fall through to restart
|
|
294
453
|
}
|
|
295
454
|
else {
|
|
@@ -355,7 +514,7 @@ export class KeeperService {
|
|
|
355
514
|
? `last keeper-start ${Math.round((now - entry.lastStartTime) / 1000)}s ago`
|
|
356
515
|
: "never started by this server (inherited PID file)";
|
|
357
516
|
log.info(`[keeper] Thread ${entry.threadId} not running — restarting (attempt ${entry.retryCount + 1}/${KEEPER_MAX_RETRIES}, ${lastStartLabel})`);
|
|
358
|
-
const result = dispatchSpawn((thread.client || "claude"), thread.name, entry.threadId, this.deps.threadLifecycle, thread.workingDirectory ?? undefined);
|
|
517
|
+
const result = await dispatchSpawn((thread.client || "claude"), thread.name, entry.threadId, this.deps.threadLifecycle, thread.workingDirectory ?? undefined);
|
|
359
518
|
if ("pid" in result) {
|
|
360
519
|
entry.lastStartTime = Date.now();
|
|
361
520
|
entry.retryCount = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keeper.service.js","sourceRoot":"","sources":["../../src/services/keeper.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keeper.service.js","sourceRoot":"","sources":["../../src/services/keeper.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-signal.d.ts","sourceRoot":"","sources":["../../src/services/maintenance-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"maintenance-signal.d.ts","sourceRoot":"","sources":["../../src/services/maintenance-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8BH,2DAA2D;AAC3D,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAYD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;+EAC+E;AAC/E,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG9D"}
|
|
@@ -9,10 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { EventEmitter } from "node:events";
|
|
11
11
|
import { watch } from "node:fs";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
import { join } from "node:path";
|
|
14
12
|
import { log } from "../lib/logger.js";
|
|
15
|
-
|
|
13
|
+
import { dataDir } from "../lib/paths.js";
|
|
14
|
+
const DATA_DIR = dataDir();
|
|
16
15
|
const FLAG_NAME = "maintenance.flag";
|
|
17
16
|
const emitter = new EventEmitter();
|
|
18
17
|
// Many poll loops (one per active thread) may subscribe simultaneously.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-signal.js","sourceRoot":"","sources":["../../src/services/maintenance-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"maintenance-signal.js","sourceRoot":"","sources":["../../src/services/maintenance-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;AAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AACnC,wEAAwE;AACxE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAE7B,yEAAyE;AACzE,yEAAyE;AACzE,6EAA6E;AAC7E,IAAI,OAAO,GAAoC,IAAI,CAAC;AACpD,IAAI,CAAC;IACH,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;QACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,uEAAuE;IACvE,qEAAqE;IACrE,GAAG,CAAC,IAAI,CAAC,wCAAwC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,uBAAuB;IACrC,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAE7E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,wBAAwB;IACtC,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAc;IAChD,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|