sensorium-mcp 2.17.25 → 2.17.27

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.
Files changed (69) hide show
  1. package/dist/dashboard/routes/threads.d.ts.map +1 -1
  2. package/dist/dashboard/routes/threads.js +18 -5
  3. package/dist/dashboard/routes/threads.js.map +1 -1
  4. package/dist/data/memory/bootstrap.js +2 -2
  5. package/dist/data/memory/bootstrap.js.map +1 -1
  6. package/dist/data/memory/consolidation.d.ts.map +1 -1
  7. package/dist/data/memory/consolidation.js +75 -4
  8. package/dist/data/memory/consolidation.js.map +1 -1
  9. package/dist/data/memory/index.d.ts +1 -0
  10. package/dist/data/memory/index.d.ts.map +1 -1
  11. package/dist/data/memory/index.js +1 -0
  12. package/dist/data/memory/index.js.map +1 -1
  13. package/dist/data/memory/quality-scoring.d.ts +32 -0
  14. package/dist/data/memory/quality-scoring.d.ts.map +1 -0
  15. package/dist/data/memory/quality-scoring.js +182 -0
  16. package/dist/data/memory/quality-scoring.js.map +1 -0
  17. package/dist/data/memory/semantic.d.ts +12 -0
  18. package/dist/data/memory/semantic.d.ts.map +1 -1
  19. package/dist/data/memory/semantic.js +45 -2
  20. package/dist/data/memory/semantic.js.map +1 -1
  21. package/dist/data/memory/thread-registry.d.ts +7 -0
  22. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  23. package/dist/data/memory/thread-registry.js +11 -1
  24. package/dist/data/memory/thread-registry.js.map +1 -1
  25. package/dist/index.js +17 -5
  26. package/dist/index.js.map +1 -1
  27. package/dist/tools/defs/memory-defs.d.ts.map +1 -1
  28. package/dist/tools/defs/memory-defs.js +19 -0
  29. package/dist/tools/defs/memory-defs.js.map +1 -1
  30. package/dist/tools/delegate-tool.d.ts.map +1 -1
  31. package/dist/tools/delegate-tool.js +6 -3
  32. package/dist/tools/delegate-tool.js.map +1 -1
  33. package/dist/tools/memory-tools.d.ts.map +1 -1
  34. package/dist/tools/memory-tools.js +15 -0
  35. package/dist/tools/memory-tools.js.map +1 -1
  36. package/dist/tools/thread-lifecycle.d.ts.map +1 -1
  37. package/dist/tools/thread-lifecycle.js +52 -32
  38. package/dist/tools/thread-lifecycle.js.map +1 -1
  39. package/package.json +10 -2
  40. package/scripts/install-supervisor.ps1 +67 -0
  41. package/scripts/install-supervisor.sh +43 -0
  42. package/scripts/start-supervisor.ps1 +46 -0
  43. package/scripts/start-supervisor.sh +20 -0
  44. package/supervisor/config.go +140 -0
  45. package/supervisor/go.mod +3 -0
  46. package/supervisor/health.go +390 -0
  47. package/supervisor/health_test.go +93 -0
  48. package/supervisor/keeper.go +303 -0
  49. package/supervisor/keeper_test.go +27 -0
  50. package/supervisor/lock.go +56 -0
  51. package/supervisor/lock_test.go +54 -0
  52. package/supervisor/log.go +114 -0
  53. package/supervisor/log_test.go +45 -0
  54. package/supervisor/main.go +325 -0
  55. package/supervisor/notify.go +53 -0
  56. package/supervisor/process.go +222 -0
  57. package/supervisor/process_test.go +94 -0
  58. package/supervisor/process_unix.go +14 -0
  59. package/supervisor/process_windows.go +15 -0
  60. package/supervisor/updater.go +281 -0
  61. package/templates/coding-task.default.md +12 -0
  62. package/dist/claude-keeper.d.ts +0 -24
  63. package/dist/claude-keeper.d.ts.map +0 -1
  64. package/dist/claude-keeper.js +0 -374
  65. package/dist/claude-keeper.js.map +0 -1
  66. package/dist/watcher-service.d.ts +0 -2
  67. package/dist/watcher-service.d.ts.map +0 -1
  68. package/dist/watcher-service.js +0 -997
  69. package/dist/watcher-service.js.map +0 -1
@@ -1,374 +0,0 @@
1
- /**
2
- * Thread keeper — monitors keep-alive threads and restarts them
3
- * via the start_thread MCP tool when they stop running.
4
- *
5
- * No direct process spawning — delegates to start_thread which handles
6
- * all lifecycle concerns (PID tracking, registry updates, MCP config).
7
- */
8
- import { LATEST_PROTOCOL_VERSION } from "@modelcontextprotocol/sdk/types.js";
9
- import { readFileSync } from "node:fs";
10
- import { homedir } from "node:os";
11
- import { join } from "node:path";
12
- import { errorMessage } from "./utils.js";
13
- // ─── Constants ───────────────────────────────────────────────────────────────
14
- const BASE_BACKOFF_MS = 5_000;
15
- const MAX_BACKOFF_MS = 5 * 60_000;
16
- const HEALTH_CHECK_INTERVAL_MS = 2 * 60_000;
17
- const DEFAULT_MAX_RETRIES = 5;
18
- const DEFAULT_COOLDOWN_MS = 300_000;
19
- const MCP_READY_POLL_INTERVAL_MS = 3_000;
20
- const MCP_READY_TIMEOUT_MS = 120_000;
21
- const FAST_EXIT_THRESHOLD_MS = 60_000; // process died within 60s = fast exit
22
- const FAST_EXIT_MAX_COUNT = 3; // 3 fast exits = escalating cooldown
23
- const FAST_EXIT_BASE_COOLDOWN_MS = 10 * 60_000; // 10 min initial, doubles each time
24
- // ─── Helpers ──────────────────────────────────────────────────────────────────
25
- function keeperLog(level, msg) {
26
- const ts = new Date().toISOString();
27
- console.log(`[${ts}] [KEEPER/${level}] ${msg}`);
28
- }
29
- function authHeaders(secret) {
30
- const h = {
31
- "Content-Type": "application/json",
32
- "Accept": "application/json, text/event-stream",
33
- };
34
- if (secret)
35
- h["Authorization"] = `Bearer ${secret}`;
36
- return h;
37
- }
38
- /**
39
- * Parse a fetch Response that may be JSON or SSE (text/event-stream).
40
- * The MCP Streamable HTTP transport returns SSE when the Accept header
41
- * includes text/event-stream. Each SSE "data:" line contains a JSON-RPC
42
- * message. We extract the last data line as the result.
43
- */
44
- async function parseJsonOrSse(res) {
45
- const ct = res.headers.get("content-type") ?? "";
46
- if (ct.includes("text/event-stream")) {
47
- const text = await res.text();
48
- // Extract all "data:" lines and parse the last one (the final result)
49
- const dataLines = text.split("\n")
50
- .filter(line => line.startsWith("data:"))
51
- .map(line => line.slice(5).trim());
52
- for (let i = dataLines.length - 1; i >= 0; i--) {
53
- try {
54
- return JSON.parse(dataLines[i]);
55
- }
56
- catch { /* try previous line */ }
57
- }
58
- return {};
59
- }
60
- return await res.json();
61
- }
62
- async function waitForMcpReady(port, secret) {
63
- const deadline = Date.now() + MCP_READY_TIMEOUT_MS;
64
- while (Date.now() < deadline) {
65
- try {
66
- const res = await fetch(`http://127.0.0.1:${port}/api/threads/roots`, {
67
- headers: authHeaders(secret),
68
- signal: AbortSignal.timeout(5_000),
69
- });
70
- if (res.ok)
71
- return true;
72
- }
73
- catch { /* server not ready */ }
74
- await new Promise(r => setTimeout(r, MCP_READY_POLL_INTERVAL_MS));
75
- }
76
- return false;
77
- }
78
- async function isThreadRunning(port, secret, threadId) {
79
- try {
80
- const res = await fetch(`http://127.0.0.1:${port}/api/threads/${threadId}/running`, {
81
- headers: authHeaders(secret),
82
- signal: AbortSignal.timeout(5_000),
83
- });
84
- if (!res.ok)
85
- return false;
86
- const data = await res.json();
87
- return data.running === true;
88
- }
89
- catch {
90
- return false;
91
- }
92
- }
93
- const STUCK_THRESHOLD_MS = 10 * 60_000; // 10 minutes without MCP activity = stuck
94
- async function isThreadStuck(port, secret, threadId) {
95
- try {
96
- const res = await fetch(`http://127.0.0.1:${port}/api/threads/${threadId}/heartbeat`, {
97
- headers: authHeaders(secret),
98
- signal: AbortSignal.timeout(5_000),
99
- });
100
- if (!res.ok)
101
- return false;
102
- const data = await res.json();
103
- if (data.lastActivity == null)
104
- return false; // no heartbeat yet, just started
105
- return Date.now() - data.lastActivity > STUCK_THRESHOLD_MS;
106
- }
107
- catch {
108
- return false;
109
- }
110
- }
111
- async function killThread(port, secret, threadId) {
112
- // Read PID file and kill the process directly
113
- try {
114
- const pidFile = join(homedir(), ".remote-copilot-mcp", "pids", `${threadId}.pid`);
115
- const raw = readFileSync(pidFile, "utf-8").trim();
116
- let pid;
117
- try {
118
- pid = JSON.parse(raw).pid;
119
- }
120
- catch {
121
- pid = Number(raw);
122
- }
123
- if (Number.isFinite(pid)) {
124
- if (process.platform === "win32") {
125
- // On Windows, process.kill throws EPERM for child processes.
126
- // Use taskkill which works reliably.
127
- const { execSync } = await import("child_process");
128
- try {
129
- execSync(`taskkill /F /T /PID ${pid}`, { stdio: "ignore", timeout: 10_000 });
130
- }
131
- catch { /* already dead */ }
132
- }
133
- else {
134
- try {
135
- process.kill(pid, "SIGKILL");
136
- }
137
- catch { /* already dead */ }
138
- }
139
- keeperLog("INFO", `Killed stuck process PID=${pid} for thread ${threadId}`);
140
- }
141
- }
142
- catch { /* PID file missing or unreadable */ }
143
- }
144
- async function openMcpSession(port, secret) {
145
- try {
146
- const res = await fetch(`http://127.0.0.1:${port}/mcp`, {
147
- method: "POST",
148
- headers: authHeaders(secret),
149
- body: JSON.stringify({
150
- jsonrpc: "2.0",
151
- id: `keeper-init-${Date.now()}`,
152
- method: "initialize",
153
- params: {
154
- protocolVersion: LATEST_PROTOCOL_VERSION,
155
- capabilities: {},
156
- clientInfo: {
157
- name: "thread-keeper",
158
- version: "1.0.0",
159
- },
160
- },
161
- }),
162
- signal: AbortSignal.timeout(30_000),
163
- });
164
- if (!res.ok) {
165
- keeperLog("WARN", `initialize HTTP ${res.status}: ${res.statusText}`);
166
- return null;
167
- }
168
- // Consume the body (may be SSE or JSON) to avoid connection stalls
169
- await res.text();
170
- const sessionId = res.headers.get("mcp-session-id");
171
- if (!sessionId) {
172
- keeperLog("WARN", "initialize succeeded but did not return an MCP session ID");
173
- return null;
174
- }
175
- await fetch(`http://127.0.0.1:${port}/mcp`, {
176
- method: "POST",
177
- headers: {
178
- ...authHeaders(secret),
179
- "mcp-session-id": sessionId,
180
- },
181
- body: JSON.stringify({
182
- jsonrpc: "2.0",
183
- method: "notifications/initialized",
184
- params: {},
185
- }),
186
- signal: AbortSignal.timeout(30_000),
187
- });
188
- return sessionId;
189
- }
190
- catch (err) {
191
- keeperLog("ERROR", `initialize failed: ${errorMessage(err)}`);
192
- return null;
193
- }
194
- }
195
- async function closeMcpSession(port, secret, sessionId) {
196
- try {
197
- await fetch(`http://127.0.0.1:${port}/mcp`, {
198
- method: "DELETE",
199
- headers: {
200
- ...authHeaders(secret),
201
- "mcp-session-id": sessionId,
202
- },
203
- signal: AbortSignal.timeout(10_000),
204
- });
205
- }
206
- catch {
207
- // Best-effort cleanup.
208
- }
209
- }
210
- async function callStartThread(config) {
211
- const { mcpHttpPort: port, mcpHttpSecret: secret, threadId, sessionName, client, workingDirectory } = config;
212
- const sessionId = await openMcpSession(port, secret);
213
- if (!sessionId)
214
- return false;
215
- try {
216
- const body = JSON.stringify({
217
- jsonrpc: "2.0",
218
- method: "tools/call",
219
- params: {
220
- name: "start_thread",
221
- arguments: {
222
- name: sessionName,
223
- targetThreadId: threadId,
224
- agentType: client,
225
- mode: "resume",
226
- ...(workingDirectory !== undefined ? { workingDirectory } : {}),
227
- },
228
- },
229
- id: `keeper-${threadId}-${Date.now()}`,
230
- });
231
- const res = await fetch(`http://127.0.0.1:${port}/mcp`, {
232
- method: "POST",
233
- headers: {
234
- ...authHeaders(secret),
235
- "mcp-session-id": sessionId,
236
- },
237
- body,
238
- signal: AbortSignal.timeout(30_000),
239
- });
240
- if (!res.ok) {
241
- keeperLog("WARN", `start_thread HTTP ${res.status}: ${res.statusText}`);
242
- return false;
243
- }
244
- const result = await parseJsonOrSse(res);
245
- if (result.error) {
246
- keeperLog("WARN", `start_thread RPC error ${result.error.code ?? "unknown"}: ${result.error.message ?? "unknown error"}`);
247
- return false;
248
- }
249
- const text = result?.result?.content?.[0]?.text ?? "";
250
- if (!text.trim()) {
251
- keeperLog("WARN", "start_thread returned an empty response");
252
- return false;
253
- }
254
- keeperLog("INFO", `start_thread response: ${text.slice(0, 200)}`);
255
- return !text.toLowerCase().includes("error");
256
- }
257
- catch (err) {
258
- keeperLog("ERROR", `start_thread call failed: ${errorMessage(err)}`);
259
- return false;
260
- }
261
- finally {
262
- await closeMcpSession(port, secret, sessionId);
263
- }
264
- }
265
- // ─── Core keeper ──────────────────────────────────────────────────────────────
266
- export async function startClaudeKeeper(config) {
267
- const maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
268
- const cooldownMs = config.cooldownMs ?? DEFAULT_COOLDOWN_MS;
269
- keeperLog("INFO", `Starting keeper for thread ${config.threadId} ('${config.sessionName}') [client=${config.client}]`);
270
- let stopped = false;
271
- let retryCount = 0;
272
- let consecutiveNotRunning = 0;
273
- let consecutiveStuck = 0;
274
- let timer = null;
275
- let lastStartTime = 0; // epoch ms when the last process was started
276
- let fastExitCount = 0; // consecutive fast exits (< 60s lifetime)
277
- let fastExitEscalation = 0; // escalation level for exponential backoff
278
- keeperLog("INFO", "Waiting for MCP server to be ready...");
279
- const ready = await waitForMcpReady(config.mcpHttpPort, config.mcpHttpSecret);
280
- if (!ready)
281
- keeperLog("WARN", "MCP server did not respond in time — attempting start_thread anyway.");
282
- else
283
- keeperLog("INFO", "MCP server ready.");
284
- async function checkAndStart() {
285
- if (stopped)
286
- return;
287
- const running = await isThreadRunning(config.mcpHttpPort, config.mcpHttpSecret, config.threadId);
288
- if (running) {
289
- consecutiveNotRunning = 0;
290
- // Check for stuck process (alive but no MCP activity for 10+ min)
291
- const stuck = await isThreadStuck(config.mcpHttpPort, config.mcpHttpSecret, config.threadId);
292
- if (stuck) {
293
- consecutiveStuck++;
294
- if (consecutiveStuck < 3) {
295
- // Require 3 consecutive stuck checks (~6 min) before killing
296
- keeperLog("INFO", `Thread ${config.threadId} appears stuck (${consecutiveStuck}/3) — rechecking in 2 min`);
297
- scheduleCheck();
298
- return;
299
- }
300
- keeperLog("WARN", `Thread ${config.threadId} confirmed stuck (no MCP activity for ${STUCK_THRESHOLD_MS / 60_000}+ min, ${consecutiveStuck} checks) — killing process`);
301
- await killThread(config.mcpHttpPort, config.mcpHttpSecret, config.threadId);
302
- consecutiveStuck = 0;
303
- // Wait for process to actually die, then restart on next normal check
304
- scheduleCheck();
305
- return;
306
- }
307
- consecutiveStuck = 0;
308
- scheduleCheck();
309
- return;
310
- }
311
- consecutiveNotRunning++;
312
- if (consecutiveNotRunning === 1) {
313
- // First detection — notify operator immediately
314
- config.onDeath?.(config.threadId, config.sessionName);
315
- }
316
- if (consecutiveNotRunning < 2) {
317
- // Single failure may be a timeout; recheck quickly before restarting
318
- timer = setTimeout(() => void checkAndStart(), 10_000);
319
- return;
320
- }
321
- if (retryCount >= maxRetries) {
322
- keeperLog("WARN", `Max retries (${maxRetries}) exceeded — cooling down for ${Math.round(cooldownMs / 1000)}s`);
323
- retryCount = 0;
324
- timer = setTimeout(() => void checkAndStart(), cooldownMs);
325
- return;
326
- }
327
- retryCount++;
328
- keeperLog("INFO", `Thread ${config.threadId} not running — calling start_thread (attempt ${retryCount}/${maxRetries})`);
329
- // Fast-exit detection: if the process died quickly, use exponential backoff.
330
- if (lastStartTime > 0 && (Date.now() - lastStartTime) < FAST_EXIT_THRESHOLD_MS) {
331
- fastExitCount++;
332
- if (fastExitCount >= FAST_EXIT_MAX_COUNT) {
333
- const cooldown = Math.min(FAST_EXIT_BASE_COOLDOWN_MS * 2 ** fastExitEscalation, 4 * 60 * 60_000); // cap 4h
334
- fastExitEscalation++;
335
- keeperLog("WARN", `Thread ${config.threadId}: ${fastExitCount} consecutive fast exits — backing off ${Math.round(cooldown / 60_000)} min`);
336
- config.onDeath?.(config.threadId, `${config.sessionName} (repeated fast exits — check credits/API key)`);
337
- fastExitCount = 0;
338
- retryCount = 0;
339
- timer = setTimeout(() => void checkAndStart(), cooldown);
340
- return;
341
- }
342
- }
343
- else {
344
- fastExitCount = 0;
345
- fastExitEscalation = 0; // reset if the process ran long enough
346
- }
347
- lastStartTime = Date.now();
348
- const ok = await callStartThread(config);
349
- if (ok) {
350
- retryCount = 0;
351
- consecutiveNotRunning = 0;
352
- scheduleCheck();
353
- }
354
- else {
355
- const delay = Math.min(BASE_BACKOFF_MS * 2 ** retryCount, MAX_BACKOFF_MS);
356
- keeperLog("INFO", `Scheduling retry in ${delay}ms`);
357
- timer = setTimeout(() => void checkAndStart(), delay);
358
- }
359
- }
360
- function scheduleCheck() {
361
- if (stopped)
362
- return;
363
- timer = setTimeout(() => void checkAndStart(), HEALTH_CHECK_INTERVAL_MS);
364
- }
365
- void checkAndStart();
366
- return {
367
- async stop() {
368
- stopped = true;
369
- if (timer)
370
- clearTimeout(timer);
371
- },
372
- };
373
- }
374
- //# sourceMappingURL=claude-keeper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-keeper.js","sourceRoot":"","sources":["../src/claude-keeper.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function startWatcherService(): Promise<void>;
2
- //# sourceMappingURL=watcher-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watcher-service.d.ts","sourceRoot":"","sources":["../src/watcher-service.ts"],"names":[],"mappings":"AA0xBA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmDzD"}