sensorium-mcp 2.16.74 → 2.16.76

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 (74) hide show
  1. package/dist/dashboard/routes/data.d.ts +15 -0
  2. package/dist/dashboard/routes/data.d.ts.map +1 -0
  3. package/dist/dashboard/routes/data.js +155 -0
  4. package/dist/dashboard/routes/data.js.map +1 -0
  5. package/dist/dashboard/routes/settings.d.ts +13 -0
  6. package/dist/dashboard/routes/settings.d.ts.map +1 -0
  7. package/dist/dashboard/routes/settings.js +88 -0
  8. package/dist/dashboard/routes/settings.js.map +1 -0
  9. package/dist/dashboard/routes/templates.d.ts +14 -0
  10. package/dist/dashboard/routes/templates.d.ts.map +1 -0
  11. package/dist/dashboard/routes/templates.js +113 -0
  12. package/dist/dashboard/routes/templates.js.map +1 -0
  13. package/dist/dashboard/routes/types.d.ts +29 -0
  14. package/dist/dashboard/routes/types.d.ts.map +1 -0
  15. package/dist/dashboard/routes/types.js +21 -0
  16. package/dist/dashboard/routes/types.js.map +1 -0
  17. package/dist/dashboard/routes.d.ts +10 -20
  18. package/dist/dashboard/routes.d.ts.map +1 -1
  19. package/dist/dashboard/routes.js +54 -344
  20. package/dist/dashboard/routes.js.map +1 -1
  21. package/dist/data/memory/consolidation.js +3 -1
  22. package/dist/data/memory/consolidation.js.map +1 -1
  23. package/dist/http-server.d.ts.map +1 -1
  24. package/dist/http-server.js +95 -114
  25. package/dist/http-server.js.map +1 -1
  26. package/dist/server/factory.d.ts.map +1 -1
  27. package/dist/server/factory.js +100 -105
  28. package/dist/server/factory.js.map +1 -1
  29. package/dist/tools/defs/memory-defs.d.ts +7 -0
  30. package/dist/tools/defs/memory-defs.d.ts.map +1 -0
  31. package/dist/tools/defs/memory-defs.js +166 -0
  32. package/dist/tools/defs/memory-defs.js.map +1 -0
  33. package/dist/tools/defs/session-defs.d.ts +7 -0
  34. package/dist/tools/defs/session-defs.d.ts.map +1 -0
  35. package/dist/tools/defs/session-defs.js +257 -0
  36. package/dist/tools/defs/session-defs.js.map +1 -0
  37. package/dist/tools/defs/utility-defs.d.ts +6 -0
  38. package/dist/tools/defs/utility-defs.d.ts.map +1 -0
  39. package/dist/tools/defs/utility-defs.js +35 -0
  40. package/dist/tools/defs/utility-defs.js.map +1 -0
  41. package/dist/tools/defs/wait-defs.d.ts +6 -0
  42. package/dist/tools/defs/wait-defs.d.ts.map +1 -0
  43. package/dist/tools/defs/wait-defs.js +24 -0
  44. package/dist/tools/defs/wait-defs.js.map +1 -0
  45. package/dist/tools/delegate-tool.d.ts +5 -11
  46. package/dist/tools/delegate-tool.d.ts.map +1 -1
  47. package/dist/tools/delegate-tool.js +7 -216
  48. package/dist/tools/delegate-tool.js.map +1 -1
  49. package/dist/tools/memory-tools.d.ts +3 -1
  50. package/dist/tools/memory-tools.d.ts.map +1 -1
  51. package/dist/tools/memory-tools.js +2 -4
  52. package/dist/tools/memory-tools.js.map +1 -1
  53. package/dist/tools/session-tools.js +2 -1
  54. package/dist/tools/session-tools.js.map +1 -1
  55. package/dist/tools/thread-lifecycle.d.ts +51 -0
  56. package/dist/tools/thread-lifecycle.d.ts.map +1 -0
  57. package/dist/tools/thread-lifecycle.js +226 -0
  58. package/dist/tools/thread-lifecycle.js.map +1 -0
  59. package/dist/tools/wait/drive-handler.d.ts +2 -0
  60. package/dist/tools/wait/drive-handler.d.ts.map +1 -1
  61. package/dist/tools/wait/drive-handler.js +7 -7
  62. package/dist/tools/wait/drive-handler.js.map +1 -1
  63. package/dist/tools/wait/message-processing.d.ts +32 -0
  64. package/dist/tools/wait/message-processing.d.ts.map +1 -0
  65. package/dist/tools/wait/message-processing.js +205 -0
  66. package/dist/tools/wait/message-processing.js.map +1 -0
  67. package/dist/tools/wait/poll-loop.d.ts +2 -3
  68. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  69. package/dist/tools/wait/poll-loop.js +7 -162
  70. package/dist/tools/wait/poll-loop.js.map +1 -1
  71. package/dist/tools/wait/reaction-handler.d.ts.map +1 -1
  72. package/dist/tools/wait/reaction-handler.js +64 -75
  73. package/dist/tools/wait/reaction-handler.js.map +1 -1
  74. package/package.json +1 -1
@@ -23,13 +23,7 @@ import { registerDashboardSession, updateDashboardActivity, markDashboardSession
23
23
  export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
24
24
  const httpPort = parseInt(process.env.MCP_HTTP_PORT, 10);
25
25
  const httpBind = process.env.MCP_HTTP_BIND ?? "127.0.0.1";
26
- const transports = new Map();
27
- /** Tracks the last time each HTTP session received any request (epoch ms). */
28
- const sessionLastActivity = new Map();
29
- /** Tracks session lifecycle status for dashboard visibility. */
30
- const sessionStatus = new Map();
31
- /** Records the epoch ms when a session became disconnected (for GC). */
32
- const sessionDisconnectedAt = new Map();
26
+ const sessions = new Map();
33
27
  const MCP_HTTP_SECRET = process.env.MCP_HTTP_SECRET;
34
28
  const MAX_BODY_SIZE = 10 * 1024 * 1024; // 10MB
35
29
  const serverStartTime = Date.now();
@@ -119,12 +113,13 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
119
113
  return;
120
114
  }
121
115
  // Existing session
122
- if (sessionId && transports.has(sessionId)) {
123
- sessionLastActivity.set(sessionId, Date.now());
124
- sessionStatus.set(sessionId, "active");
125
- sessionDisconnectedAt.delete(sessionId);
116
+ const existing = sessionId ? sessions.get(sessionId) : undefined;
117
+ if (existing?.transport) {
118
+ existing.lastActivity = Date.now();
119
+ existing.status = "active";
120
+ delete existing.disconnectedAt;
126
121
  updateDashboardActivity(sessionId);
127
- await transports.get(sessionId).handleRequest(req, res, body);
122
+ await existing.transport.handleRequest(req, res, body);
128
123
  return;
129
124
  }
130
125
  // New session OR session adoption after server restart.
@@ -138,9 +133,7 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
138
133
  // tracking state from the previous incarnation.
139
134
  if (sessionId) {
140
135
  log.info(`[http] Session adoption: stale session ${sessionId.slice(0, 8)}… re-initializing`);
141
- sessionLastActivity.delete(sessionId);
142
- sessionStatus.delete(sessionId);
143
- sessionDisconnectedAt.delete(sessionId);
136
+ sessions.delete(sessionId);
144
137
  removeDashboardSession(sessionId);
145
138
  }
146
139
  let capturedSid;
@@ -148,19 +141,20 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
148
141
  sessionIdGenerator: () => randomUUID(),
149
142
  onsessioninitialized: (sid) => {
150
143
  capturedSid = sid;
151
- transports.set(sid, transport);
152
- sessionLastActivity.set(sid, Date.now());
153
- sessionStatus.set(sid, "active");
144
+ sessions.set(sid, { transport, server: null, lastActivity: Date.now(), status: "active" });
154
145
  registerDashboardSession(sid, "http");
155
146
  },
156
147
  });
157
148
  transport.onclose = () => {
158
149
  const sid = transport.sessionId;
159
150
  if (sid) {
160
- transports.delete(sid);
161
- // Keep in sessionLastActivity & sessionStatus for dashboard visibility
162
- sessionStatus.set(sid, "disconnected");
163
- sessionDisconnectedAt.set(sid, Date.now());
151
+ const entry = sessions.get(sid);
152
+ if (entry) {
153
+ // Keep entry for dashboard visibility but clear transport
154
+ entry.transport = null;
155
+ entry.status = "disconnected";
156
+ entry.disconnectedAt = Date.now();
157
+ }
164
158
  markDashboardSessionDisconnected(sid);
165
159
  }
166
160
  };
@@ -171,6 +165,12 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
171
165
  }
172
166
  catch (_) { /* best-effort */ } });
173
167
  await sessionServer.connect(transport);
168
+ // Store server reference so it can be closed during shutdown
169
+ if (capturedSid) {
170
+ const entry = sessions.get(capturedSid);
171
+ if (entry)
172
+ entry.server = sessionServer;
173
+ }
174
174
  await transport.handleRequest(req, res, body);
175
175
  return;
176
176
  }
@@ -196,34 +196,37 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
196
196
  return;
197
197
  }
198
198
  if (req.method === "GET") {
199
- if (!sessionId || !transports.has(sessionId)) {
199
+ const getEntry = sessionId ? sessions.get(sessionId) : undefined;
200
+ if (!getEntry?.transport) {
200
201
  res.writeHead(400, { "Content-Type": "text/plain" });
201
202
  res.end("Invalid or missing session ID");
202
203
  return;
203
204
  }
204
- sessionLastActivity.set(sessionId, Date.now());
205
+ getEntry.lastActivity = Date.now();
205
206
  // Detect SSE stream close — mark session as disconnected
206
207
  const sseSid = sessionId;
207
208
  res.on("close", () => {
208
- if (sessionStatus.has(sseSid)) {
209
- sessionStatus.set(sseSid, "disconnected");
210
- if (!sessionDisconnectedAt.has(sseSid)) {
211
- sessionDisconnectedAt.set(sseSid, Date.now());
209
+ const sseEntry = sessions.get(sseSid);
210
+ if (sseEntry) {
211
+ sseEntry.status = "disconnected";
212
+ if (sseEntry.disconnectedAt == null) {
213
+ sseEntry.disconnectedAt = Date.now();
212
214
  }
213
215
  markDashboardSessionDisconnected(sseSid);
214
216
  }
215
217
  });
216
- await transports.get(sessionId).handleRequest(req, res);
218
+ await getEntry.transport.handleRequest(req, res);
217
219
  return;
218
220
  }
219
221
  if (req.method === "DELETE") {
220
- if (!sessionId || !transports.has(sessionId)) {
222
+ const delEntry = sessionId ? sessions.get(sessionId) : undefined;
223
+ if (!delEntry?.transport) {
221
224
  res.writeHead(400, { "Content-Type": "text/plain" });
222
225
  res.end("Invalid or missing session ID");
223
226
  return;
224
227
  }
225
- sessionLastActivity.set(sessionId, Date.now());
226
- await transports.get(sessionId).handleRequest(req, res);
228
+ delEntry.lastActivity = Date.now();
229
+ await delEntry.transport.handleRequest(req, res);
227
230
  return;
228
231
  }
229
232
  res.writeHead(405, { "Content-Type": "text/plain" });
@@ -240,96 +243,68 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
240
243
  httpServer.listen(httpPort, httpBind, () => {
241
244
  log.info(`Remote Copilot MCP server running on http://${httpBind}:${httpPort}/mcp`);
242
245
  });
243
- // ── TTL sweepermark idle active sessions as disconnected every 5 min ──
244
- // Use the configured wait timeout so sessions waiting up to WAIT_TIMEOUT_MINUTES aren't prematurely marked dead
246
+ // ── Unified session sweep runs every 60 s ────────────────────────────
247
+ // Combines the former TTL sweeper, Session GC, and Session reaper into a
248
+ // single pass so there is only one interval to manage.
245
249
  const SESSION_IDLE_TTL_MS = config.WAIT_TIMEOUT_MINUTES * 60 * 1000;
246
- const ttlSweeperInterval = setInterval(() => {
247
- const now = Date.now();
248
- for (const [sid, status] of sessionStatus) {
249
- if (status === "active" && !transports.has(sid)) {
250
- // Transport already gone but status wasn't updated — fix it
251
- sessionStatus.set(sid, "disconnected");
252
- if (!sessionDisconnectedAt.has(sid)) {
253
- sessionDisconnectedAt.set(sid, now);
254
- }
255
- markDashboardSessionDisconnected(sid);
256
- }
257
- else if (status === "active") {
258
- const lastActive = sessionLastActivity.get(sid) ?? 0;
259
- if (now - lastActive > SESSION_IDLE_TTL_MS) {
260
- log.info(`[session-ttl] Marking session ${sid.slice(0, 8)} as disconnected (idle ${Math.round((now - lastActive) / 60000)}m)`);
261
- sessionStatus.set(sid, "disconnected");
262
- sessionDisconnectedAt.set(sid, now);
263
- markDashboardSessionDisconnected(sid);
264
- }
265
- }
266
- }
267
- }, 5 * 60 * 1000);
268
- // ── Session GC — remove disconnected sessions after grace period ─────────
269
- // Sessions with a recent lastWaitCallAt (within WAIT_LIVENESS_MS) are
270
- // considered "truly alive" even if the transport shows disconnected.
271
- // Grace period matches wait timeout so long-polling sessions aren't reaped.
272
250
  const SESSION_GC_GRACE_MS = config.WAIT_TIMEOUT_MINUTES * 60 * 1000;
273
- const sessionGcInterval = setInterval(() => {
251
+ const STALE_SESSION_MS = 2 * config.WAIT_TIMEOUT_MINUTES * 60 * 1000;
252
+ function sweepSessions() {
274
253
  const now = Date.now();
275
- let removed = 0;
276
- // Check global dashboard sessions for wait-liveness before GC
254
+ // Build wait-liveness set so GC doesn't reap sessions still polling
277
255
  const liveByWait = new Set();
278
256
  for (const ds of getDashboardSessions()) {
279
257
  if (ds.lastWaitCallAt && now - ds.lastWaitCallAt < WAIT_LIVENESS_MS) {
280
258
  liveByWait.add(ds.mcpSessionId);
281
259
  }
282
260
  }
283
- for (const [sid, disconnectTime] of sessionDisconnectedAt) {
284
- if (now - disconnectTime > SESSION_GC_GRACE_MS) {
285
- // Skip GC if session is still alive via wait heartbeat
286
- if (liveByWait.has(sid))
287
- continue;
288
- // Only GC if actually disconnected (safety check)
289
- if (sessionStatus.get(sid) !== "active" && !transports.has(sid)) {
290
- sessionStatus.delete(sid);
291
- sessionLastActivity.delete(sid);
292
- sessionDisconnectedAt.delete(sid);
293
- removeDashboardSession(sid);
294
- removed++;
295
- }
296
- }
297
- }
298
- if (removed > 0) {
299
- log.info(`[session-gc] Removed ${removed} disconnected session(s)`);
300
- }
301
- }, 60 * 1000);
302
- // ── Session reaper — close abandoned SSE sessions every 10 minutes ──────
303
- const STALE_SESSION_MS = 2 * config.WAIT_TIMEOUT_MINUTES * 60 * 1000;
304
- const sessionReaperInterval = setInterval(() => {
305
- const now = Date.now();
306
- for (const [sid, transport] of transports) {
307
- const lastActive = sessionLastActivity.get(sid) ?? 0;
308
- if (now - lastActive > STALE_SESSION_MS) {
309
- log.info(`[session-reaper] Closing stale session ${sid} (idle ${Math.round((now - lastActive) / 60000)}m)`);
261
+ let marked = 0;
262
+ let removed = 0;
263
+ let reaped = 0;
264
+ for (const [sid, entry] of sessions) {
265
+ // 1. Close truly stale transports (was session-reaper)
266
+ if (entry.transport && now - entry.lastActivity > STALE_SESSION_MS) {
267
+ log.info(`[session-sweep] Closing stale session ${sid.slice(0, 8)}… (idle ${Math.round((now - entry.lastActivity) / 60000)}m)`);
310
268
  try {
311
- transport.close();
269
+ entry.transport.close();
312
270
  }
313
271
  catch (_) { /* best-effort */ }
314
- transports.delete(sid);
315
- sessionLastActivity.delete(sid);
316
- sessionStatus.delete(sid);
272
+ sessions.delete(sid);
317
273
  removeDashboardSession(sid);
274
+ reaped++;
275
+ continue;
318
276
  }
319
- }
320
- // Also purge long-disconnected sessions from tracking maps
321
- for (const [sid, status] of sessionStatus) {
322
- if (status === "disconnected" && !transports.has(sid)) {
323
- const lastActive = sessionLastActivity.get(sid) ?? 0;
324
- if (now - lastActive > STALE_SESSION_MS) {
325
- sessionLastActivity.delete(sid);
326
- sessionStatus.delete(sid);
327
- sessionDisconnectedAt.delete(sid);
328
- removeDashboardSession(sid);
329
- }
277
+ // 2. Mark idle active sessions as disconnected (was TTL sweeper)
278
+ if (entry.status === "active" && !entry.transport) {
279
+ entry.status = "disconnected";
280
+ if (entry.disconnectedAt == null)
281
+ entry.disconnectedAt = now;
282
+ markDashboardSessionDisconnected(sid);
283
+ marked++;
284
+ }
285
+ else if (entry.status === "active" && now - entry.lastActivity > SESSION_IDLE_TTL_MS) {
286
+ log.info(`[session-sweep] Marking session ${sid.slice(0, 8)}… as disconnected (idle ${Math.round((now - entry.lastActivity) / 60000)}m)`);
287
+ entry.status = "disconnected";
288
+ entry.disconnectedAt = now;
289
+ markDashboardSessionDisconnected(sid);
290
+ marked++;
291
+ }
292
+ // 3. GC disconnected sessions past grace period (was session-gc)
293
+ if (entry.disconnectedAt != null &&
294
+ now - entry.disconnectedAt > SESSION_GC_GRACE_MS &&
295
+ !liveByWait.has(sid) &&
296
+ entry.status !== "active" &&
297
+ !entry.transport) {
298
+ sessions.delete(sid);
299
+ removeDashboardSession(sid);
300
+ removed++;
330
301
  }
331
302
  }
332
- }, 10 * 60 * 1000);
303
+ if (marked > 0 || removed > 0 || reaped > 0) {
304
+ log.info(`[session-sweep] marked=${marked} removed=${removed} reaped=${reaped}`);
305
+ }
306
+ }
307
+ const sessionSweepInterval = setInterval(sweepSessions, 60 * 1000);
333
308
  // ── Graceful shutdown — abort in-flight TTS, drain, then exit ──────────
334
309
  let shuttingDown = false;
335
310
  const shutdown = async (reason) => {
@@ -337,9 +312,7 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
337
312
  return;
338
313
  shuttingDown = true;
339
314
  log.info(`[shutdown] Graceful shutdown initiated (${reason}) — aborting in-flight TTS…`);
340
- clearInterval(ttlSweeperInterval);
341
- clearInterval(sessionGcInterval);
342
- clearInterval(sessionReaperInterval);
315
+ clearInterval(sessionSweepInterval);
343
316
  clearInterval(maintenancePollInterval);
344
317
  // 1. Abort any pending TTS / transcription requests so they fail fast.
345
318
  abortPendingSpeech();
@@ -350,12 +323,20 @@ export function startHttpServer(createMcpServerFn, getMemoryDb, closeMemoryDb) {
350
323
  await new Promise(r => setTimeout(r, 100));
351
324
  }
352
325
  // 3. Tear down transports and HTTP server.
353
- for (const [sid, t] of transports) {
354
- try {
355
- t.close();
326
+ for (const [sid, entry] of sessions) {
327
+ if (entry.transport) {
328
+ try {
329
+ entry.transport.close();
330
+ }
331
+ catch (_) { /* best-effort */ }
332
+ }
333
+ if (entry.server) {
334
+ try {
335
+ await entry.server.close();
336
+ }
337
+ catch (_) { /* best-effort */ }
356
338
  }
357
- catch (_) { /* best-effort */ }
358
- transports.delete(sid);
339
+ sessions.delete(sid);
359
340
  }
360
341
  httpServer.close();
361
342
  closeMemoryDb();
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/server/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgB/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,QAAQ,GAC1B,iBAAiB,CAGnB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/server/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgB/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWrD,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,aAAa,CAAC;AAMjE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,QAAQ,GAC1B,iBAAiB,CAGnB"}
@@ -117,28 +117,49 @@ function createMcpServer(telegram, telegramChatId, getMemoryDb, getMcpSessionId,
117
117
  getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
118
118
  getMemoryDb,
119
119
  errorResult,
120
+ apiKey: config.OPENAI_API_KEY || undefined,
120
121
  onConsolidation: () => { lastConsolidationAt = Date.now(); },
121
122
  };
122
- const srv = new Server({ name: "sensorium-mcp", version: PKG_VERSION }, { capabilities: { tools: {} } });
123
- // ── Tool definitions ──────────────────────────────────────────────────────
124
- srv.setRequestHandler(ListToolsRequestSchema, async () => ({
125
- tools: getToolDefinitions(),
126
- }));
127
- // ── Tool implementations ──────────────────────────────────────────────────
128
- // ToolResult intentionally omits `[key: string]: unknown` for internal type
129
- // safety; assert structural compatibility at the SDK boundary.
130
- // @ts-expect-error — ToolResult is structurally compatible but lacks index signature
131
- srv.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
132
- const { name, arguments: args } = request.params;
133
- // Verbose logging: tool call dispatch
134
- const argsSummary = args ? JSON.stringify(args).slice(0, 200) : "{}";
135
- log.verbose("dispatch", `Tool call: ${name} args=${argsSummary}`);
136
- lastToolCallAt = Date.now();
137
- // Track tool calls for activity monitoring
138
- toolCallsSinceLastDelivery++;
139
- // ── start_session ───────────────────────────────────────────────────────
140
- if (name === "start_session") {
141
- const startSessionCtx = {
123
+ // ── Context builder helpers (capture current mutable state per-call) ────
124
+ function buildUtilityCtx() {
125
+ return {
126
+ resolveThreadId,
127
+ getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
128
+ errorResult,
129
+ telegram,
130
+ config,
131
+ sessionStartedAt,
132
+ };
133
+ }
134
+ function buildSessionToolCtx() {
135
+ return {
136
+ resolveThreadId,
137
+ getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
138
+ errorResult,
139
+ telegram,
140
+ telegramChatId,
141
+ peekThreadMessages,
142
+ readThreadMessages,
143
+ appendToThread,
144
+ checkMaintenanceFlag,
145
+ checkDueTasks,
146
+ generateDmnReflection,
147
+ get lastOperatorMessageAt() { return lastOperatorMessageAt; },
148
+ set lastOperatorMessageAt(v) { lastOperatorMessageAt = v; },
149
+ get lastOperatorMessageText() { return lastOperatorMessageText; },
150
+ set lastOperatorMessageText(v) { lastOperatorMessageText = v; },
151
+ previewedUpdateIds,
152
+ addPreviewedId,
153
+ };
154
+ }
155
+ // ── Dispatch table ────────────────────────────────────────────────────
156
+ // Maps tool names to handler functions. Each receives typed args and the
157
+ // SDK `extra` object, returning a ToolResult (or Promise thereof).
158
+ const delegateCtx = { telegram, telegramChatId };
159
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
+ const toolHandlers = {
161
+ start_session: (typedArgs) => {
162
+ const ctx = {
142
163
  session: {
143
164
  get currentThreadId() { return currentThreadId; },
144
165
  set currentThreadId(v) { currentThreadId = v; },
@@ -166,8 +187,7 @@ function createMcpServer(telegram, telegramChatId, getMemoryDb, getMcpSessionId,
166
187
  getMcpSessionId,
167
188
  closeTransport,
168
189
  };
169
- return handleStartSession((args ?? {}), startSessionCtx).then(result => {
170
- // Update the dashboard registry with the resolved threadId
190
+ return handleStartSession(typedArgs, ctx).then(result => {
171
191
  const sid = getMcpSessionId?.();
172
192
  if (sid && currentThreadId !== undefined) {
173
193
  updateDashboardThreadId(sid, currentThreadId);
@@ -175,10 +195,8 @@ function createMcpServer(telegram, telegramChatId, getMemoryDb, getMcpSessionId,
175
195
  }
176
196
  return result;
177
197
  });
178
- }
179
- // ── remote_copilot_wait_for_instructions ────────────────────────────────
180
- if (name === "remote_copilot_wait_for_instructions") {
181
- // Update wait heartbeat for dashboard liveness tracking
198
+ },
199
+ remote_copilot_wait_for_instructions: (typedArgs, extra) => {
182
200
  const waitSid = getMcpSessionId?.();
183
201
  if (waitSid)
184
202
  updateLastWaitCall(waitSid);
@@ -215,87 +233,64 @@ function createMcpServer(telegram, telegramChatId, getMemoryDb, getMcpSessionId,
215
233
  config,
216
234
  errorResult,
217
235
  };
218
- return handleWaitForInstructions((args ?? {}), waitCtx, extra);
219
- }
220
- // ── report_progress / hibernate ─────────────────────────────────────────
221
- if (name === "report_progress" || name === "hibernate") {
222
- const typedArgs = (args ?? {});
223
- if (name === "report_progress") {
224
- const scopeErr = enforceThreadScope(typedArgs);
225
- if (scopeErr)
226
- return errorResult(scopeErr);
227
- }
228
- const sessionToolCtx = {
229
- resolveThreadId,
230
- getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
231
- errorResult,
232
- telegram,
233
- telegramChatId,
234
- peekThreadMessages,
235
- readThreadMessages,
236
- appendToThread,
237
- checkMaintenanceFlag,
238
- checkDueTasks,
239
- generateDmnReflection,
240
- get lastOperatorMessageAt() { return lastOperatorMessageAt; },
241
- set lastOperatorMessageAt(v) { lastOperatorMessageAt = v; },
242
- get lastOperatorMessageText() { return lastOperatorMessageText; },
243
- set lastOperatorMessageText(v) { lastOperatorMessageText = v; },
244
- previewedUpdateIds,
245
- addPreviewedId,
246
- };
247
- return handleSessionTool(name, typedArgs, sessionToolCtx, extra);
248
- }
249
- // ── send_file / send_voice / schedule_wake_up ───────────────────────────
250
- if (["send_file", "send_voice", "schedule_wake_up", "send_sticker"].includes(name)) {
251
- const typedArgs = (args ?? {});
252
- if (name === "send_file" || name === "send_voice" || name === "send_sticker") {
253
- const scopeErr = enforceThreadScope(typedArgs);
254
- if (scopeErr)
255
- return errorResult(scopeErr);
256
- }
257
- const utilityCtx = {
258
- resolveThreadId,
259
- getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
260
- errorResult,
261
- telegram,
262
- config,
263
- sessionStartedAt,
264
- };
265
- return handleUtilityTool(name, typedArgs, utilityCtx);
266
- }
267
- // ── memory_* tools ────────────────────────────────────────────────────
236
+ return handleWaitForInstructions(typedArgs, waitCtx, extra);
237
+ },
238
+ report_progress: (typedArgs, extra) => {
239
+ const scopeErr = enforceThreadScope(typedArgs);
240
+ if (scopeErr)
241
+ return errorResult(scopeErr);
242
+ return handleSessionTool("report_progress", typedArgs, buildSessionToolCtx(), extra);
243
+ },
244
+ hibernate: (typedArgs, extra) => handleSessionTool("hibernate", typedArgs, buildSessionToolCtx(), extra),
245
+ send_file: (typedArgs) => {
246
+ const scopeErr = enforceThreadScope(typedArgs);
247
+ if (scopeErr)
248
+ return errorResult(scopeErr);
249
+ return handleUtilityTool("send_file", typedArgs, buildUtilityCtx());
250
+ },
251
+ send_voice: (typedArgs) => {
252
+ const scopeErr = enforceThreadScope(typedArgs);
253
+ if (scopeErr)
254
+ return errorResult(scopeErr);
255
+ return handleUtilityTool("send_voice", typedArgs, buildUtilityCtx());
256
+ },
257
+ send_sticker: (typedArgs) => {
258
+ const scopeErr = enforceThreadScope(typedArgs);
259
+ if (scopeErr)
260
+ return errorResult(scopeErr);
261
+ return handleUtilityTool("send_sticker", typedArgs, buildUtilityCtx());
262
+ },
263
+ schedule_wake_up: (typedArgs) => handleUtilityTool("schedule_wake_up", typedArgs, buildUtilityCtx()),
264
+ start_thread: (typedArgs) => handleStartThread(typedArgs, delegateCtx),
265
+ send_message_to_thread: (typedArgs) => handleSendMessageToThreadFile(typedArgs),
266
+ get_version: (typedArgs) => handleUtilityTool("get_version", typedArgs, buildUtilityCtx()),
267
+ };
268
+ const srv = new Server({ name: "sensorium-mcp", version: PKG_VERSION }, { capabilities: { tools: {} } });
269
+ // ── Tool definitions ──────────────────────────────────────────────────────
270
+ srv.setRequestHandler(ListToolsRequestSchema, async () => ({
271
+ tools: getToolDefinitions(),
272
+ }));
273
+ // ── Tool implementations ──────────────────────────────────────────────────
274
+ // ToolResult intentionally omits `[key: string]: unknown` for internal type
275
+ // safety; assert structural compatibility at the SDK boundary.
276
+ // @ts-expect-error — ToolResult is structurally compatible but lacks index signature
277
+ srv.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
278
+ const { name, arguments: args } = request.params;
279
+ // Verbose logging: tool call dispatch
280
+ const argsSummary = args ? JSON.stringify(args).slice(0, 200) : "{}";
281
+ log.verbose("dispatch", `Tool call: ${name} args=${argsSummary}`);
282
+ lastToolCallAt = Date.now();
283
+ // Track tool calls for activity monitoring
284
+ toolCallsSinceLastDelivery++;
285
+ // ── Dispatch ─────────────────────────────────────────────────────────
286
+ const typedArgs = (args ?? {});
287
+ const handler = toolHandlers[name];
288
+ if (handler)
289
+ return handler(typedArgs, extra);
290
+ // Prefix-based fallback for memory_* tools
268
291
  if (name.startsWith("memory_")) {
269
- return handleMemoryTool(name, (args ?? {}), memoryToolCtx);
270
- }
271
- // ── start_thread ───────────────────────────────────────────────────────
272
- if (name === "start_thread") {
273
- const typedArgs = (args ?? {});
274
- const delegateCtx = {
275
- telegram,
276
- telegramChatId,
277
- };
278
- return handleStartThread(typedArgs, delegateCtx);
279
- }
280
- // ── send_message_to_thread ─────────────────────────────────────────────
281
- if (name === "send_message_to_thread") {
282
- const typedArgs = (args ?? {});
283
- return handleSendMessageToThreadFile(typedArgs);
284
- }
285
- // ── get_version ────────────────────────────────────────────────────────
286
- if (name === "get_version") {
287
- const typedArgs = (args ?? {});
288
- const utilityCtx = {
289
- resolveThreadId,
290
- getShortReminder: (threadId) => getShortReminder(threadId, sessionStartedAt),
291
- errorResult,
292
- telegram,
293
- config,
294
- sessionStartedAt,
295
- };
296
- return handleUtilityTool(name, typedArgs, utilityCtx);
292
+ return handleMemoryTool(name, typedArgs, memoryToolCtx);
297
293
  }
298
- // Unknown tool
299
294
  return errorResult(`Unknown tool: ${name}`);
300
295
  });
301
296
  return srv;