sensorium-mcp 3.0.2 → 3.0.4

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.
@@ -12,4 +12,5 @@ export declare const handleGetSearch: RouteHandler;
12
12
  export declare const handleGetTopicRegistry: RouteHandler;
13
13
  export declare const handlePostTopicRegistry: RouteHandler;
14
14
  export declare const handleDeleteTopicRegistry: RouteHandler;
15
+ export declare const handlePrepareShutdown: RouteHandler;
15
16
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/dashboard/routes/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBxE,eAAO,MAAM,eAAe,EAAE,YAuB7B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,YAG/B,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,YAY5B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,YAe/B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,YAG7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,YAK7B,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,YAIpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,YAwBrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,YAoBvC,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/dashboard/routes/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBxE,eAAO,MAAM,eAAe,EAAE,YAuB7B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,YAG/B,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,YAY5B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,YAe/B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,YAG7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,YAK7B,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,YAIpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,YAwBrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,YAoBvC,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,YAOnC,CAAC"}
@@ -3,7 +3,8 @@
3
3
  * Covers: status, sessions, notes, episodes, topics, search, topic-registry.
4
4
  */
5
5
  import { getRecentEpisodes, getTopicIndex, getTopSemanticNotes, searchSemanticNotesRanked, } from "../../memory.js";
6
- import { getAllRegisteredTopics, registerTopic, unregisterTopic } from "../../sessions.js";
6
+ import { getAllRegisteredTopics, getActiveThreadIds, registerTopic, unregisterTopic } from "../../sessions.js";
7
+ import { writeReconnectSnapshot } from "../../services/reconnect-snapshot.service.js";
7
8
  import { readBody, safeParseJSON } from "./types.js";
8
9
  import { errorMessage } from "../../utils.js";
9
10
  // ─── Helpers ────────────────────────────────────────────────────────────────
@@ -153,4 +154,13 @@ export const handleDeleteTopicRegistry = ({ req, json }) => {
153
154
  })();
154
155
  return true;
155
156
  };
157
+ // ─── Prepare-shutdown ────────────────────────────────────────────────────────
158
+ export const handlePrepareShutdown = ({ json }) => {
159
+ const threadIds = getActiveThreadIds();
160
+ if (threadIds.length > 0) {
161
+ writeReconnectSnapshot(threadIds);
162
+ }
163
+ json({ ok: true, snapshotThreads: threadIds.length });
164
+ return true;
165
+ };
156
166
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/dashboard/routes/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/dashboard/routes/data.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAQjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA+H1D;;GAEG;AACH,wBAAsB,sBAAsB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,gBAAgB,EACrB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAmClB"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAQjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAmI1D;;GAEG;AACH,wBAAsB,sBAAsB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,gBAAgB,EACrB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAmClB"}
@@ -22,7 +22,7 @@ import { handleGetDmnActivationHours, handleGetClaudeMcpConfig, handlePostClaude
22
22
  // Domain handlers — templates
23
23
  import { handleGetTemplates, handleGetDriveTemplate, handleGetDrivePresets, handleTemplateCrud, } from "./routes/templates.js";
24
24
  // Domain handlers — data
25
- import { handleGetStatus, handleGetSessions, handleGetNotes, handleGetEpisodes, handleGetTopics, handleGetSearch, handleGetTopicRegistry, handlePostTopicRegistry, handleDeleteTopicRegistry, } from "./routes/data.js";
25
+ import { handleGetStatus, handleGetSessions, handleGetNotes, handleGetEpisodes, handleGetTopics, handleGetSearch, handleGetTopicRegistry, handlePostTopicRegistry, handleDeleteTopicRegistry, handlePrepareShutdown, } from "./routes/data.js";
26
26
  // Domain handlers — skills
27
27
  import { handleGetSkills, handleSkillDelete, handleSkillPut, } from "./routes/skills.js";
28
28
  // Domain handlers — threads
@@ -67,6 +67,8 @@ const routeTable = {
67
67
  "GET /api/topic-registry": handleGetTopicRegistry,
68
68
  "POST /api/topic-registry": handlePostTopicRegistry,
69
69
  "DELETE /api/topic-registry": handleDeleteTopicRegistry,
70
+ // Lifecycle
71
+ "POST /api/prepare-shutdown": handlePrepareShutdown,
70
72
  // Skills
71
73
  "GET /api/skills": handleGetSkills,
72
74
  // Threads
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reconnect-snapshot.service.d.ts","sourceRoot":"","sources":["../../src/services/reconnect-snapshot.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAchE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAuB9D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}
1
+ {"version":3,"file":"reconnect-snapshot.service.d.ts","sourceRoot":"","sources":["../../src/services/reconnect-snapshot.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAchE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgC9D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}
@@ -6,13 +6,19 @@
6
6
  * The snapshot is valid for 10 minutes. After that it is either deleted
7
7
  * by the auto-cleanup timer or ignored (too old) by isReconnectCandidate.
8
8
  */
9
- import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
9
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
10
10
  import { homedir } from "node:os";
11
11
  import { join } from "node:path";
12
12
  import { log } from "../logger.js";
13
13
  const DATA_DIR = join(homedir(), ".remote-copilot-mcp");
14
14
  const SNAPSHOT_PATH = join(DATA_DIR, "active-sessions.json");
15
15
  const SNAPSHOT_MAX_AGE_MS = 10 * 60 * 1000; // 10 minutes
16
+ /** Write via temp file + rename to prevent partial reads from concurrent access. */
17
+ function atomicWriteSnapshot(data) {
18
+ const tmp = `${SNAPSHOT_PATH}.tmp.${process.pid}`;
19
+ writeFileSync(tmp, data, "utf-8");
20
+ renameSync(tmp, SNAPSHOT_PATH);
21
+ }
16
22
  /**
17
23
  * Write the set of active thread IDs to the reconnect snapshot file.
18
24
  * Called just before the server process exits.
@@ -24,7 +30,7 @@ export function writeReconnectSnapshot(threadIds) {
24
30
  threadIds,
25
31
  timestamp: new Date().toISOString(),
26
32
  };
27
- writeFileSync(SNAPSHOT_PATH, JSON.stringify(snapshot, null, 2), "utf-8");
33
+ atomicWriteSnapshot(JSON.stringify(snapshot, null, 2));
28
34
  log.info(`[reconnect-snapshot] Wrote snapshot with ${threadIds.length} thread(s): ${threadIds.join(", ")}`);
29
35
  }
30
36
  catch (err) {
@@ -56,7 +62,18 @@ export function isReconnectCandidate(threadId) {
56
62
  }
57
63
  // Consume: remove this threadId so it can't match again
58
64
  snapshot.threadIds = snapshot.threadIds.filter(id => id !== threadId);
59
- writeFileSync(SNAPSHOT_PATH, JSON.stringify(snapshot, null, 2), "utf-8");
65
+ try {
66
+ if (snapshot.threadIds.length === 0) {
67
+ unlinkSync(SNAPSHOT_PATH);
68
+ }
69
+ else {
70
+ atomicWriteSnapshot(JSON.stringify(snapshot, null, 2));
71
+ }
72
+ }
73
+ catch (writeErr) {
74
+ log.warn(`[reconnect-snapshot] Matched thread ${threadId} but failed to persist consume: ${writeErr}`);
75
+ // Still return true — the match was valid, and the 10-min TTL bounds the risk
76
+ }
60
77
  log.info(`[reconnect-snapshot] Consumed reconnect slot for thread ${threadId}.`);
61
78
  return true;
62
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reconnect-snapshot.service.js","sourceRoot":"","sources":["../../src/services/reconnect-snapshot.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconnect-snapshot.service.js","sourceRoot":"","sources":["../../src/services/reconnect-snapshot.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"worker-cleanup.service.d.ts","sourceRoot":"","sources":["../../src/services/worker-cleanup.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAM5E,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,CAAC,cAAc,cAAc,EAAE,YAAY,CAAC,EAC1D,QAAQ,EAAE;IAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAC/E,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,sBAAsB,EACvC,KAAK,GAAE,MAA8B,GACpC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6DhD"}
1
+ {"version":3,"file":"worker-cleanup.service.d.ts","sourceRoot":"","sources":["../../src/services/worker-cleanup.service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAsB5E,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,CAAC,cAAc,cAAc,EAAE,YAAY,CAAC,EAC1D,QAAQ,EAAE;IAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAC/E,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,sBAAsB,EACvC,KAAK,GAAE,MAA8B,GACpC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA+DhD"}
@@ -1,9 +1,32 @@
1
+ import { execSync } from "node:child_process";
2
+ import { unlinkSync } from "node:fs";
3
+ import { join } from "node:path";
1
4
  import { archiveNotesForThread } from "../data/memory/semantic.js";
2
5
  import { getExplicitTelegramTopicId } from "../data/memory/thread-registry.js";
3
6
  import { synthesizeGhostMemory } from "../memory.js";
4
7
  import { errorMessage } from "../utils.js";
5
- import { spawnedThreads } from "./process.service.js";
8
+ import { spawnedThreads, readPidFiles, PROCESS_PIDS_DIR } from "./process.service.js";
6
9
  import { log } from "../logger.js";
10
+ function killProcessTree(pid, threadId) {
11
+ try {
12
+ if (process.platform === "win32") {
13
+ execSync(`taskkill /F /T /PID ${pid}`, { timeout: 10000 });
14
+ }
15
+ else {
16
+ process.kill(pid, "SIGTERM");
17
+ }
18
+ log.info(`[worker-cleanup] Killed process tree for thread ${threadId} PID=${pid}`);
19
+ }
20
+ catch (err) {
21
+ // Process may already be dead — ignore
22
+ log.debug(`[worker-cleanup] Kill process ${pid} (thread ${threadId}): ${errorMessage(err)}`);
23
+ }
24
+ const pidFile = join(PROCESS_PIDS_DIR, `${threadId}.pid`);
25
+ try {
26
+ unlinkSync(pidFile);
27
+ }
28
+ catch { }
29
+ }
7
30
  const DEFAULT_WORKER_TTL_MS = 60 * 60 * 1000;
8
31
  let orphanSweepDone = false;
9
32
  export async function cleanupExpiredWorkers(db, telegram, chatId, threadLifecycle, ttlMs = DEFAULT_WORKER_TTL_MS) {
@@ -26,6 +49,9 @@ export async function cleanupExpiredWorkers(db, telegram, chatId, threadLifecycl
26
49
  if (spawnedThreads.some((t) => t.threadId === row.thread_id))
27
50
  continue;
28
51
  try {
52
+ const pidEntry = readPidFiles().find((e) => e.threadId === row.thread_id);
53
+ if (pidEntry)
54
+ killProcessTree(pidEntry.pid, row.thread_id);
29
55
  try {
30
56
  // For workers, thread_id IS the Telegram topic ID (created via createManagedTopic).
31
57
  // Use explicit telegram_topic_id if set, otherwise fall back to thread_id.
@@ -81,10 +107,7 @@ async function cleanupSingleWorker(thread, db, telegram, chatId, threadLifecycle
81
107
  }
82
108
  catch { }
83
109
  }
84
- try {
85
- process.kill(thread.pid, "SIGTERM");
86
- }
87
- catch { }
110
+ killProcessTree(thread.pid, thread.threadId);
88
111
  try {
89
112
  const topicId = getExplicitTelegramTopicId(db, thread.threadId) ?? thread.threadId;
90
113
  await telegram.deleteForumTopic(chatId, topicId);
@@ -1 +1 @@
1
- {"version":3,"file":"worker-cleanup.service.js","sourceRoot":"","sources":["../../src/services/worker-cleanup.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-cleanup.service.js","sourceRoot":"","sources":["../../src/services/worker-cleanup.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sensorium-mcp",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "description": "MCP server for remote control of AI assistants via Telegram",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -99,6 +99,26 @@ func (m *MCPClient) WaitForReady(ctx context.Context, pollInterval, timeout time
99
99
  }
100
100
  }
101
101
 
102
+ // PrepareShutdown asks the MCP server to write a reconnect snapshot before being killed.
103
+ // Best-effort: returns false on any error so the caller can proceed with the kill.
104
+ func (m *MCPClient) PrepareShutdown(ctx context.Context) bool {
105
+ ctx2, cancel := context.WithTimeout(ctx, 3*time.Second)
106
+ defer cancel()
107
+ resp, err := m.doReq(ctx2, "POST", "/api/prepare-shutdown", nil)
108
+ if err != nil {
109
+ if m.Log != nil {
110
+ m.Log.Debug("PrepareShutdown: POST /api/prepare-shutdown failed: %v", err)
111
+ }
112
+ return false
113
+ }
114
+ defer resp.Body.Close()
115
+ ok := resp.StatusCode == 200
116
+ if m.Log != nil {
117
+ m.Log.Info("PrepareShutdown: POST /api/prepare-shutdown => %d", resp.StatusCode)
118
+ }
119
+ return ok
120
+ }
121
+
102
122
  // GetRootThreads fetches the list of root threads from the server.
103
123
  func (m *MCPClient) GetRootThreads(ctx context.Context) ([]map[string]any, error) {
104
124
  return m.fetchThreadList(ctx, "/api/threads/roots")
@@ -166,17 +166,37 @@ func runSupervisor(runningAsService bool) error {
166
166
  mcp := NewMCPClient(cfg.MCPHttpPort, cfg.MCPHttpSecret)
167
167
  mcp.Log = log
168
168
 
169
- // Clean stale PID files from previous runs
170
- CleanStalePIDs(cfg.Paths.PIDsDir, log)
169
+ // Check if MCP server is already running and healthy — inherit it instead of
170
+ // killing and restarting (allows transparent supervisor binary updates).
171
+ inherited := false
172
+ if oldPid, pidErr := ReadPIDFile(cfg.Paths.ServerPID); pidErr == nil && oldPid > 0 && IsProcessAlive(oldPid) {
173
+ if mcp.IsServerReady(context.Background()) {
174
+ log.Info("Inherited running MCP server (PID %d) — skipping full restart", oldPid)
175
+ inherited = true
176
+ } else {
177
+ log.Info("MCP server process (PID %d) did not pass health check — proceeding with full restart", oldPid)
178
+ }
179
+ }
171
180
 
172
- // Kill orphan process on our port
173
- KillByPort(cfg.MCPHttpPort, log)
181
+ if !inherited {
182
+ // Kill orphan thread processes from previous runs, then clean PID files
183
+ KillOrphanThreads(cfg.Paths.PIDsDir, log)
174
184
 
175
- // Spawn MCP server
176
- _, err = SpawnMCPServer(cfg, log)
177
- if err != nil {
178
- log.Error("Failed to start MCP server: %v", err)
179
- return fmt.Errorf("failed to start MCP server: %w", err)
185
+ // Kill orphan MCP server from previous run
186
+ if oldPid, pidErr := ReadPIDFile(cfg.Paths.ServerPID); pidErr == nil && oldPid > 0 && IsProcessAlive(oldPid) {
187
+ log.Info("Killing orphan MCP server (PID %d) from previous run", oldPid)
188
+ _ = KillProcess(oldPid, log)
189
+ time.Sleep(1 * time.Second) // allow port to release
190
+ }
191
+ _ = os.Remove(cfg.Paths.ServerPID)
192
+ KillByPort(cfg.MCPHttpPort, log)
193
+
194
+ // Spawn MCP server
195
+ _, err = SpawnMCPServer(cfg, log)
196
+ if err != nil {
197
+ log.Error("Failed to start MCP server: %v", err)
198
+ return fmt.Errorf("failed to start MCP server: %w", err)
199
+ }
180
200
  }
181
201
 
182
202
  // Wait for server to be ready
@@ -369,6 +389,9 @@ func runSupervisor(runningAsService bool) error {
369
389
  <-keeperPollerDone
370
390
  <-healthDone
371
391
 
392
+ // Ask MCP to write reconnect snapshot before killing it
393
+ mcp.PrepareShutdown(context.Background())
394
+
372
395
  // Kill server process
373
396
  pid, err := ReadPIDFile(cfg.Paths.ServerPID)
374
397
  if err == nil && pid > 0 {
@@ -242,6 +242,35 @@ func ListThreadPIDs(pidsDir string) map[string]int {
242
242
  return result
243
243
  }
244
244
 
245
+ // KillOrphanThreads kills any alive processes listed in PID files (leftovers from
246
+ // a previous supervisor run) and then removes the PID files. Called on startup
247
+ // before the MCP server is launched, so all thread PIDs are guaranteed to be stale.
248
+ func KillOrphanThreads(pidsDir string, log *Logger) {
249
+ pids := ListThreadPIDs(pidsDir)
250
+ if len(pids) == 0 {
251
+ log.Debug("KillOrphanThreads: no PID files found")
252
+ return
253
+ }
254
+ log.Info("KillOrphanThreads: checking %d PID files for orphan processes", len(pids))
255
+ killed := 0
256
+ for threadID, pid := range pids {
257
+ path := filepath.Join(pidsDir, threadID+".pid")
258
+ if IsProcessAlive(pid) {
259
+ log.Info("Killing orphan thread %s (PID %d)", threadID, pid)
260
+ if err := KillProcess(pid, log); err != nil {
261
+ log.Warn("Failed to kill orphan PID %d: %v", pid, err)
262
+ }
263
+ killed++
264
+ }
265
+ _ = os.Remove(path)
266
+ }
267
+ if killed > 0 {
268
+ log.Info("KillOrphanThreads: killed %d orphan processes, cleaned %d PID files", killed, len(pids))
269
+ } else {
270
+ log.Info("KillOrphanThreads: no orphans found, cleaned %d stale PID files", len(pids))
271
+ }
272
+ }
273
+
245
274
  // CleanStalePIDs removes PID files for processes that are no longer running.
246
275
  func CleanStalePIDs(pidsDir string, log *Logger) {
247
276
  pids := ListThreadPIDs(pidsDir)
@@ -187,7 +187,7 @@ func (u *Updater) checkAndUpdate(ctx context.Context) {
187
187
  u.state.Transition(updateScopeMCP, updatePhaseFailed, remote, local, err.Error())
188
188
  }
189
189
 
190
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: updating sensorium v%s → v%s. Grace period %v...", local, remote, u.cfg.GracePeriod), 0)
190
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: updating MCP server v%s → v%s. Grace period %v. MCP server will restart — threads will reconnect automatically.", local, remote, u.cfg.GracePeriod), 0)
191
191
 
192
192
  // Grace period
193
193
  u.log.Info("Grace period %v...", u.cfg.GracePeriod)
@@ -246,7 +246,7 @@ func (u *Updater) checkAndUpdate(ctx context.Context) {
246
246
  if err != nil {
247
247
  u.log.Error("All spawn attempts failed — server is down!")
248
248
  markFailed(err)
249
- notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: update FAILED — server is down! Manual intervention required.", 0)
249
+ notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: MCP server update FAILED — server is down! Manual intervention required.", 0)
250
250
  return
251
251
  }
252
252
 
@@ -257,7 +257,7 @@ func (u *Updater) checkAndUpdate(ctx context.Context) {
257
257
  u.setLocalVersion(remote)
258
258
  u.state.Transition(updateScopeMCP, updatePhaseIdle, remote, local, "")
259
259
 
260
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("✅ Supervisor: update to v%s complete. Server ready.", remote), 0)
260
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("✅ Supervisor: MCP server updated to v%s. Server ready — threads reconnected.", remote), 0)
261
261
  u.log.Info("Update complete: v%s → v%s", local, remote)
262
262
 
263
263
  // Reset start time for min uptime tracking
@@ -274,7 +274,7 @@ func (u *Updater) verifyUpdatedMCPServerReady(ctx context.Context, remote, local
274
274
  errMsg := fmt.Sprintf("updated MCP server did not become ready within %v after restart (pid=%d)", mcpUpdateReadyTimeout, pid)
275
275
  u.log.Error(errMsg)
276
276
  u.state.Transition(updateScopeMCP, updatePhaseFailed, remote, local, errMsg)
277
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: update to v%s FAILED verification. Server did not become ready after restart.", remote), 0)
277
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: MCP server update to v%s FAILED verification. Server did not become ready after restart.", remote), 0)
278
278
  return false
279
279
  }
280
280
 
@@ -407,7 +407,7 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
407
407
  u.state.Transition(updateScopeSupervisor, updatePhaseFailed, remote, local, err.Error())
408
408
  }
409
409
 
410
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: updating binary %s → %s. Grace period %v...", local, remote, u.cfg.GracePeriod), 0)
410
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: updating supervisor binary %s → %s. Grace period %v. Supervisor process will restart — MCP server unaffected.", local, remote, u.cfg.GracePeriod), 0)
411
411
 
412
412
  select {
413
413
  case <-ctx.Done():
@@ -419,7 +419,7 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
419
419
  if err := u.downloadSupervisorBinary(ctx, downloadURL); err != nil {
420
420
  markFailed(err)
421
421
  u.log.Error("Supervisor binary download failed: %v", err)
422
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: binary update to %s failed during download.", remote), 0)
422
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: supervisor binary update to %s failed during download.", remote), 0)
423
423
  return
424
424
  }
425
425
 
@@ -427,11 +427,11 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
427
427
  _ = os.Remove(u.cfg.Paths.PendingBinary)
428
428
  markFailed(err)
429
429
  u.log.Error("Failed to stage supervisor version %s: %v", remote, err)
430
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: binary update to %s failed during staging.", remote), 0)
430
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("🔴 Supervisor: supervisor binary update to %s failed during staging.", remote), 0)
431
431
  return
432
432
  }
433
433
  u.state.Transition(updateScopeSupervisor, updatePhaseStaged, remote, local, "")
434
- notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: downloaded %s. Restarting supervisor to apply update...", remote), 0)
434
+ notifyUpdaterOperator(u.cfg, u.log, fmt.Sprintf("⚙️ Supervisor: supervisor binary %s downloaded. Restarting supervisor to apply update — MCP server will continue running.", remote), 0)
435
435
 
436
436
  // Reset start time so minimum uptime is re-enforced after restart
437
437
  u.startAt = time.Now()
@@ -440,7 +440,7 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
440
440
  if err != nil {
441
441
  markFailed(err)
442
442
  u.log.Error("Failed to detect service mode for restart: %v", err)
443
- notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: update downloaded but service detection failed.", 0)
443
+ notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: supervisor binary downloaded but service detection failed.", 0)
444
444
  return
445
445
  }
446
446
  u.state.Transition(updateScopeSupervisor, updatePhaseRestarting, remote, local, "")
@@ -449,7 +449,7 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
449
449
  if err := scheduleServiceRestartForUpdate(u.log); err != nil {
450
450
  markFailed(err)
451
451
  u.log.Error("Failed to schedule service restart: %v", err)
452
- notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: update downloaded but service restart scheduling failed.", 0)
452
+ notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: supervisor binary downloaded but service restart scheduling failed.", 0)
453
453
  }
454
454
  return
455
455
  }
@@ -457,7 +457,7 @@ func (u *Updater) checkSupervisorUpdate(ctx context.Context) {
457
457
  if err := requestSupervisorRestart(u.log); err != nil {
458
458
  markFailed(err)
459
459
  u.log.Error("Failed to signal supervisor for restart: %v", err)
460
- notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: update downloaded but restart signal failed.", 0)
460
+ notifyUpdaterOperator(u.cfg, u.log, "🔴 Supervisor: supervisor binary downloaded but restart signal failed.", 0)
461
461
  }
462
462
  }
463
463
 
@@ -552,6 +552,12 @@ func requestSupervisorRestart(log *Logger) error {
552
552
 
553
553
  func (u *Updater) killServer() {
554
554
  u.log.Info("Updater: stopping current MCP server for update")
555
+
556
+ // Ask the MCP server to write a reconnect snapshot before we kill it.
557
+ // On Windows, taskkill /F doesn't allow graceful shutdown, so this is
558
+ // the only way the snapshot gets written.
559
+ u.mcp.PrepareShutdown(context.Background())
560
+
555
561
  pid, err := ReadPIDFile(u.cfg.Paths.ServerPID)
556
562
  if err != nil {
557
563
  u.log.Warn("Could not read server PID file: %v", err)