sensorium-mcp 2.16.164 → 2.16.166

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 (48) hide show
  1. package/dist/claude-keeper.d.ts.map +1 -1
  2. package/dist/claude-keeper.js +10 -4
  3. package/dist/claude-keeper.js.map +1 -1
  4. package/dist/daily-session.d.ts +36 -0
  5. package/dist/daily-session.d.ts.map +1 -0
  6. package/dist/daily-session.js +134 -0
  7. package/dist/daily-session.js.map +1 -0
  8. package/dist/dashboard/routes/threads.d.ts +17 -0
  9. package/dist/dashboard/routes/threads.d.ts.map +1 -0
  10. package/dist/dashboard/routes/threads.js +229 -0
  11. package/dist/dashboard/routes/threads.js.map +1 -0
  12. package/dist/dashboard/routes.d.ts.map +1 -1
  13. package/dist/dashboard/routes.js +21 -0
  14. package/dist/dashboard/routes.js.map +1 -1
  15. package/dist/dashboard/spa.html +10 -10
  16. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  17. package/dist/data/memory/bootstrap.js +4 -1
  18. package/dist/data/memory/bootstrap.js.map +1 -1
  19. package/dist/data/memory/episodes.d.ts +1 -0
  20. package/dist/data/memory/episodes.d.ts.map +1 -1
  21. package/dist/data/memory/episodes.js +4 -0
  22. package/dist/data/memory/episodes.js.map +1 -1
  23. package/dist/data/memory/index.d.ts +1 -0
  24. package/dist/data/memory/index.d.ts.map +1 -1
  25. package/dist/data/memory/index.js +1 -0
  26. package/dist/data/memory/index.js.map +1 -1
  27. package/dist/data/memory/schema.d.ts.map +1 -1
  28. package/dist/data/memory/schema.js +121 -4
  29. package/dist/data/memory/schema.js.map +1 -1
  30. package/dist/data/memory/thread-registry.d.ts +51 -0
  31. package/dist/data/memory/thread-registry.d.ts.map +1 -0
  32. package/dist/data/memory/thread-registry.js +135 -0
  33. package/dist/data/memory/thread-registry.js.map +1 -0
  34. package/dist/http-server.js +1 -1
  35. package/dist/http-server.js.map +1 -1
  36. package/dist/index.js +31 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/tools/delegate-tool.d.ts.map +1 -1
  39. package/dist/tools/delegate-tool.js +17 -3
  40. package/dist/tools/delegate-tool.js.map +1 -1
  41. package/dist/tools/thread-lifecycle.d.ts +4 -3
  42. package/dist/tools/thread-lifecycle.d.ts.map +1 -1
  43. package/dist/tools/thread-lifecycle.js +16 -7
  44. package/dist/tools/thread-lifecycle.js.map +1 -1
  45. package/dist/watcher-service.d.ts.map +1 -1
  46. package/dist/watcher-service.js +62 -143
  47. package/dist/watcher-service.js.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"claude-keeper.d.ts","sourceRoot":"","sources":["../src/claude-keeper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,UAAU,YAAY;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAyFD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAwInF"}
1
+ {"version":3,"file":"claude-keeper.d.ts","sourceRoot":"","sources":["../src/claude-keeper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,UAAU,YAAY;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAyFD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA+InF"}
@@ -72,7 +72,7 @@ function readWarmContext(dataDir, threadId) {
72
72
  if (!texts.length)
73
73
  return "";
74
74
  return (`[Warm context: last ${texts.length} messages from thread ${threadId}]\n` +
75
- texts.map((t) => `> ${t}`).join("\n") +
75
+ texts.map((t) => `- ${t}`).join("\n") +
76
76
  "\n\n");
77
77
  }
78
78
  catch {
@@ -162,19 +162,25 @@ export async function startClaudeKeeper(config) {
162
162
  return;
163
163
  const warmContext = readWarmContext(config.dataDir, config.threadId);
164
164
  const prompt = `${warmContext}Start remote session with sensorium. Thread name = '${config.sessionName}'`;
165
- // Build client-specific spawn arguments and environment.
165
+ // Pass prompt via args array with shell: false to prevent cmd.exe interpreting
166
+ // shell metacharacters (> | & ^) in warm context message text.
167
+ // On Windows, claude/copilot are .cmd shims — they need shell: true, so we
168
+ // sanitize the prompt instead by replacing shell-unsafe chars.
169
+ const safePrompt = process.platform === "win32"
170
+ ? prompt.replace(/[>|&^<"]/g, " ")
171
+ : prompt;
166
172
  const useShell = process.platform === "win32";
167
173
  let cmd;
168
174
  let args;
169
175
  let spawnEnv;
170
176
  if (client === "claude") {
171
177
  cmd = config.claudeCmd;
172
- args = ["--mcp-config", config.mcpConfigPath, "-p", prompt];
178
+ args = ["--mcp-config", config.mcpConfigPath, "-p", safePrompt];
173
179
  spawnEnv = undefined;
174
180
  }
175
181
  else {
176
182
  cmd = copilotCmd;
177
- args = ["-p", prompt, "--allow-all-tools", "--model", copilotModel];
183
+ args = ["-p", safePrompt, "--allow-all-tools", "--model", copilotModel];
178
184
  spawnEnv = { ...process.env, COPILOT_HOME: copilotHome };
179
185
  }
180
186
  keeperLog("INFO", `Spawning ${cmd} [${client}] with ${warmContext ? "warm context" : "cold start"}`);
@@ -1 +1 @@
1
- {"version":3,"file":"claude-keeper.js","sourceRoot":"","sources":["../src/claude-keeper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-keeper.js","sourceRoot":"","sources":["../src/claude-keeper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Daily Session Rotation
3
+ *
4
+ * Manages automatic daily rotation of agent sessions for root threads.
5
+ * The rotation: consolidate → reset session timestamp → restart keeper.
6
+ * The Telegram topic stays the same — only the LLM context refreshes.
7
+ *
8
+ * The `session_reset_at` column on thread_registry tracks the boundary.
9
+ * Bootstrap uses it to filter the message buffer to today's messages only.
10
+ */
11
+ export interface DailyRotationResult {
12
+ rootThreadId: number;
13
+ previousSessionResetAt: string | null;
14
+ newSessionResetAt: string;
15
+ consolidated: boolean;
16
+ error?: string;
17
+ }
18
+ /**
19
+ * Rotate a single root thread's daily session.
20
+ * 1. Run consolidation (distill episodes into knowledge)
21
+ * 2. Run reflection + narrative generation (best-effort)
22
+ * 3. Update session_reset_at on the thread_registry row
23
+ */
24
+ export declare function rotateDailySession(rootThreadId: number): Promise<DailyRotationResult>;
25
+ /**
26
+ * Check and rotate all root threads that have keepAlive enabled.
27
+ * Called from the watcher service on a schedule (e.g., 4 AM daily).
28
+ */
29
+ export declare function rotateAllDailySessions(): Promise<DailyRotationResult[]>;
30
+ /**
31
+ * Get the current daily session's start time for a root thread.
32
+ * Used by bootstrap to filter the message buffer to today's messages only.
33
+ * Returns null if no session reset has occurred (backward compat — show all).
34
+ */
35
+ export declare function getDailySessionStart(rootThreadId: number): string | null;
36
+ //# sourceMappingURL=daily-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-session.d.ts","sourceRoot":"","sources":["../src/daily-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAsD9B;AAOD;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA2C7E;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Daily Session Rotation
3
+ *
4
+ * Manages automatic daily rotation of agent sessions for root threads.
5
+ * The rotation: consolidate → reset session timestamp → restart keeper.
6
+ * The Telegram topic stays the same — only the LLM context refreshes.
7
+ *
8
+ * The `session_reset_at` column on thread_registry tracks the boundary.
9
+ * Bootstrap uses it to filter the message buffer to today's messages only.
10
+ */
11
+ import { log } from "./logger.js";
12
+ import { getRootThreads, getThread, resetDailySession, } from "./data/memory/thread-registry.js";
13
+ import { runIntelligentConsolidation } from "./data/memory/consolidation.js";
14
+ import { runNarrativeGeneration } from "./data/memory/narrative.js";
15
+ import { runReflection } from "./data/memory/reflection.js";
16
+ import { initMemoryDb } from "./data/memory/schema.js";
17
+ // ─── Single-thread rotation ──────────────────────────────────────────────────
18
+ /**
19
+ * Rotate a single root thread's daily session.
20
+ * 1. Run consolidation (distill episodes into knowledge)
21
+ * 2. Run reflection + narrative generation (best-effort)
22
+ * 3. Update session_reset_at on the thread_registry row
23
+ */
24
+ export async function rotateDailySession(rootThreadId) {
25
+ const db = initMemoryDb();
26
+ const now = new Date().toISOString();
27
+ const result = {
28
+ rootThreadId,
29
+ previousSessionResetAt: null,
30
+ newSessionResetAt: now,
31
+ consolidated: false,
32
+ };
33
+ try {
34
+ // Capture current session_reset_at before overwriting
35
+ const thread = getThread(db, rootThreadId);
36
+ if (!thread) {
37
+ result.error = `Thread ${rootThreadId} not found`;
38
+ log.error(result.error);
39
+ return result;
40
+ }
41
+ result.previousSessionResetAt = thread.sessionResetAt;
42
+ // 1. Run consolidation on the root thread (distill episodes into knowledge)
43
+ try {
44
+ await runIntelligentConsolidation(db, rootThreadId);
45
+ result.consolidated = true;
46
+ log.info(`Consolidation completed for root ${rootThreadId}`);
47
+ }
48
+ catch (err) {
49
+ log.error(`Consolidation failed during daily rotation: ${err instanceof Error ? err.message : String(err)}`);
50
+ }
51
+ // 2. Run reflection and narrative generation (best-effort, non-blocking)
52
+ try {
53
+ await runReflection(db, rootThreadId);
54
+ }
55
+ catch (err) {
56
+ log.warn(`Reflection failed during daily rotation for root ${rootThreadId}: ${err instanceof Error ? err.message : String(err)}`);
57
+ }
58
+ try {
59
+ await runNarrativeGeneration(db, rootThreadId);
60
+ }
61
+ catch (err) {
62
+ log.warn(`Narrative generation failed during daily rotation for root ${rootThreadId}: ${err instanceof Error ? err.message : String(err)}`);
63
+ }
64
+ // 3. Reset the daily session timestamp (only if consolidation succeeded)
65
+ if (result.consolidated) {
66
+ resetDailySession(db, rootThreadId);
67
+ result.newSessionResetAt = new Date().toISOString();
68
+ log.info(`Daily session reset for root ${rootThreadId} at ${result.newSessionResetAt}`);
69
+ }
70
+ }
71
+ catch (err) {
72
+ result.error = err instanceof Error ? err.message : String(err);
73
+ log.error(`Daily rotation failed for root ${rootThreadId}: ${result.error}`);
74
+ }
75
+ return result;
76
+ }
77
+ // ─── Rotate all ──────────────────────────────────────────────────────────────
78
+ let _rotating = false;
79
+ let _lastRotationDate = null;
80
+ /**
81
+ * Check and rotate all root threads that have keepAlive enabled.
82
+ * Called from the watcher service on a schedule (e.g., 4 AM daily).
83
+ */
84
+ export async function rotateAllDailySessions() {
85
+ const todayDate = new Date().toISOString().slice(0, 10);
86
+ // Prevent running twice in the same day
87
+ if (_lastRotationDate === todayDate) {
88
+ log.info(`Daily rotation already completed for ${todayDate}, skipping`);
89
+ return [];
90
+ }
91
+ // Concurrency guard — prevent overlapping executions
92
+ if (_rotating) {
93
+ log.warn("rotateAllDailySessions already in progress, skipping");
94
+ return [];
95
+ }
96
+ _rotating = true;
97
+ try {
98
+ const db = initMemoryDb();
99
+ const roots = getRootThreads(db);
100
+ const results = [];
101
+ for (const root of roots) {
102
+ if (!root.keepAlive)
103
+ continue;
104
+ // Skip if already rotated today
105
+ if (root.sessionResetAt) {
106
+ const resetDate = root.sessionResetAt.slice(0, 10);
107
+ const todayDate = new Date().toISOString().slice(0, 10);
108
+ if (resetDate === todayDate) {
109
+ log.info(`Root ${root.threadId} already rotated today, skipping`);
110
+ continue;
111
+ }
112
+ }
113
+ const result = await rotateDailySession(root.threadId);
114
+ results.push(result);
115
+ }
116
+ _lastRotationDate = todayDate;
117
+ return results;
118
+ }
119
+ finally {
120
+ _rotating = false;
121
+ }
122
+ }
123
+ // ─── Query helper ────────────────────────────────────────────────────────────
124
+ /**
125
+ * Get the current daily session's start time for a root thread.
126
+ * Used by bootstrap to filter the message buffer to today's messages only.
127
+ * Returns null if no session reset has occurred (backward compat — show all).
128
+ */
129
+ export function getDailySessionStart(rootThreadId) {
130
+ const db = initMemoryDb();
131
+ const thread = getThread(db, rootThreadId);
132
+ return thread?.sessionResetAt ?? null;
133
+ }
134
+ //# sourceMappingURL=daily-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-session.js","sourceRoot":"","sources":["../src/daily-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Dashboard API — thread registry route handlers.
3
+ * Covers: listing, creating, updating, archiving, and deleting threads.
4
+ */
5
+ import { type RouteHandler, type RouteArgs } from "./types.js";
6
+ export declare const handleGetThreads: RouteHandler;
7
+ export declare const handleGetRootThreads: RouteHandler;
8
+ export declare const handleCreateThread: RouteHandler;
9
+ /** GET /api/threads/:threadId — get single thread */
10
+ export declare function handleGetThread(args: RouteArgs, threadId: number): boolean;
11
+ /** GET /api/threads/:threadId/children — get children of a root */
12
+ export declare function handleGetThreadChildren(args: RouteArgs, rootThreadId: number): boolean;
13
+ /** PATCH /api/threads/:threadId — update a thread */
14
+ export declare function handleUpdateThread(args: RouteArgs, threadId: number): boolean;
15
+ /** DELETE /api/threads/:threadId — archive or delete a thread */
16
+ export declare function handleDeleteThread(args: RouteArgs, threadId: number): boolean;
17
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/dashboard/routes/threads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AA4CxF,eAAO,MAAM,gBAAgB,EAAE,YAY9B,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,YAGlC,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,YAyDhC,CAAC;AAIF,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQ1E;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAItF;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAwC7E;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkB7E"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Dashboard API — thread registry route handlers.
3
+ * Covers: listing, creating, updating, archiving, and deleting threads.
4
+ */
5
+ import { registerThread, getThread, getRootThreads, getActiveThreads, getThreadsByRoot, updateThread, archiveThread, deleteThread, } from "../../data/memory/thread-registry.js";
6
+ import { setKeepAliveEnabled, setKeepAliveThreadId, setKeepAliveClient, setKeepAliveMaxRetries, setKeepAliveCooldownMs, setThreadKeepAlive, removeThreadKeepAlive, } from "../../config.js";
7
+ import { readBody, safeParseJSON } from "./types.js";
8
+ // ─── Helpers ────────────────────────────────────────────────────────────────
9
+ const VALID_STATUSES = ["active", "archived", "expired"];
10
+ const VALID_CLIENTS = ["claude", "copilot", "codex"];
11
+ /** Extract valid update fields from a request body. Returns an error string on validation failure. */
12
+ function buildThreadUpdates(body) {
13
+ const updates = {};
14
+ if (typeof body.name === "string" && body.name.trim())
15
+ updates.name = body.name.trim();
16
+ if (typeof body.status === "string") {
17
+ if (!VALID_STATUSES.includes(body.status)) {
18
+ return `status must be one of: ${VALID_STATUSES.join(", ")}`;
19
+ }
20
+ updates.status = body.status;
21
+ }
22
+ if (typeof body.keepAlive === "boolean")
23
+ updates.keepAlive = body.keepAlive;
24
+ if (typeof body.client === "string") {
25
+ if (!VALID_CLIENTS.includes(body.client)) {
26
+ return `client must be one of: ${VALID_CLIENTS.join(", ")}`;
27
+ }
28
+ updates.client = body.client;
29
+ }
30
+ if (typeof body.maxRetries === "number") {
31
+ if (!Number.isFinite(body.maxRetries) || !Number.isInteger(body.maxRetries) || body.maxRetries < 0) {
32
+ return "maxRetries must be a non-negative integer";
33
+ }
34
+ updates.maxRetries = body.maxRetries;
35
+ }
36
+ if (typeof body.cooldownMs === "number") {
37
+ if (!Number.isFinite(body.cooldownMs) || !Number.isInteger(body.cooldownMs) || body.cooldownMs < 0) {
38
+ return "cooldownMs must be a non-negative integer";
39
+ }
40
+ updates.cooldownMs = body.cooldownMs;
41
+ }
42
+ if (typeof body.badge === "string")
43
+ updates.badge = body.badge;
44
+ return updates;
45
+ }
46
+ // ─── GET /api/threads — list all active threads grouped ─────────────────────
47
+ export const handleGetThreads = ({ json, db }) => {
48
+ const threads = getActiveThreads(db);
49
+ const roots = threads.filter(t => t.type === "root");
50
+ const grouped = roots.map(root => ({
51
+ ...root,
52
+ children: threads.filter(t => t.rootThreadId === root.threadId && t.type !== "root"),
53
+ }));
54
+ const orphans = threads.filter(t => t.type !== "root" && !threads.some(r => r.type === "root" && r.threadId === t.rootThreadId));
55
+ json({ threads: grouped, orphans });
56
+ return true;
57
+ };
58
+ // ─── GET /api/threads/roots — list root threads only ────────────────────────
59
+ export const handleGetRootThreads = ({ json, db }) => {
60
+ json({ threads: getRootThreads(db) });
61
+ return true;
62
+ };
63
+ // ─── POST /api/threads — create/register a thread ──────────────────────────
64
+ export const handleCreateThread = ({ req, json, db }) => {
65
+ void (async () => {
66
+ try {
67
+ const raw = await readBody(req);
68
+ const body = safeParseJSON(raw);
69
+ if (!body || typeof body !== "object") {
70
+ json({ error: "Invalid request body" }, 400);
71
+ return;
72
+ }
73
+ const threadId = body.threadId;
74
+ if (typeof threadId !== "number" || !Number.isFinite(threadId) || !Number.isInteger(threadId) || threadId <= 0) {
75
+ json({ error: "threadId must be a positive integer" }, 400);
76
+ return;
77
+ }
78
+ const name = body.name;
79
+ if (typeof name !== "string" || !name.trim()) {
80
+ json({ error: "name is required" }, 400);
81
+ return;
82
+ }
83
+ const validTypes = ["root", "daily", "branch", "worker"];
84
+ const type = body.type;
85
+ if (typeof type !== "string" || !validTypes.includes(type)) {
86
+ json({ error: `type must be one of: ${validTypes.join(", ")}` }, 400);
87
+ return;
88
+ }
89
+ // Check for duplicate
90
+ const existing = getThread(db, threadId);
91
+ if (existing) {
92
+ json({ error: `Thread ${threadId} already exists` }, 409);
93
+ return;
94
+ }
95
+ const entry = registerThread(db, {
96
+ threadId,
97
+ name: name.trim(),
98
+ type: type,
99
+ rootThreadId: typeof body.rootThreadId === "number" ? body.rootThreadId : undefined,
100
+ badge: typeof body.badge === "string" ? body.badge : undefined,
101
+ client: typeof body.client === "string" && VALID_CLIENTS.includes(body.client) ? body.client : undefined,
102
+ keepAlive: typeof body.keepAlive === "boolean" ? body.keepAlive : undefined,
103
+ });
104
+ json(entry, 201);
105
+ // Sync keepAlive to settings.json for watcher backward compatibility
106
+ if (entry.keepAlive) {
107
+ syncKeepAliveToSettings(db);
108
+ }
109
+ }
110
+ catch (err) {
111
+ json({ error: err instanceof Error ? err.message : String(err) }, 500);
112
+ }
113
+ })();
114
+ return true;
115
+ };
116
+ // ─── Dynamic handlers (threadId extracted by caller) ────────────────────────
117
+ /** GET /api/threads/:threadId — get single thread */
118
+ export function handleGetThread(args, threadId) {
119
+ const thread = getThread(args.db, threadId);
120
+ if (thread) {
121
+ args.json(thread);
122
+ }
123
+ else {
124
+ args.json({ error: `Thread ${threadId} not found` }, 404);
125
+ }
126
+ return true;
127
+ }
128
+ /** GET /api/threads/:threadId/children — get children of a root */
129
+ export function handleGetThreadChildren(args, rootThreadId) {
130
+ const children = getThreadsByRoot(args.db, rootThreadId);
131
+ args.json({ threads: children });
132
+ return true;
133
+ }
134
+ /** PATCH /api/threads/:threadId — update a thread */
135
+ export function handleUpdateThread(args, threadId) {
136
+ const { req, json, db } = args;
137
+ void (async () => {
138
+ try {
139
+ const raw = await readBody(req);
140
+ const body = safeParseJSON(raw);
141
+ if (!body || typeof body !== "object") {
142
+ json({ error: "Invalid request body" }, 400);
143
+ return;
144
+ }
145
+ const existing = getThread(db, threadId);
146
+ if (!existing) {
147
+ json({ error: `Thread ${threadId} not found` }, 404);
148
+ return;
149
+ }
150
+ const updates = buildThreadUpdates(body);
151
+ if (typeof updates === "string") {
152
+ json({ error: updates }, 400);
153
+ return;
154
+ }
155
+ const updated = updateThread(db, threadId, updates);
156
+ if (!updated) {
157
+ json({ error: "No changes applied" }, 400);
158
+ return;
159
+ }
160
+ json(getThread(db, threadId));
161
+ // Sync keepAlive to settings.json for watcher backward compatibility
162
+ if ("keepAlive" in updates || "client" in updates) {
163
+ syncKeepAliveToSettings(db);
164
+ }
165
+ }
166
+ catch (err) {
167
+ json({ error: err instanceof Error ? err.message : String(err) }, 500);
168
+ }
169
+ })();
170
+ return true;
171
+ }
172
+ /** DELETE /api/threads/:threadId — archive or delete a thread */
173
+ export function handleDeleteThread(args, threadId) {
174
+ const { db, json, url } = args;
175
+ const hard = url.searchParams.get("hard") === "true";
176
+ const existing = getThread(db, threadId);
177
+ if (!existing) {
178
+ json({ error: `Thread ${threadId} not found` }, 404);
179
+ return true;
180
+ }
181
+ if (hard) {
182
+ deleteThread(db, threadId);
183
+ json({ ok: true, action: "deleted", threadId });
184
+ }
185
+ else {
186
+ archiveThread(db, threadId);
187
+ json({ ok: true, action: "archived", threadId });
188
+ }
189
+ return true;
190
+ }
191
+ // ─── Settings.json sync for watcher backward compatibility ──────────────────
192
+ /**
193
+ * Sync thread_registry keepAlive settings to settings.json for watcher backward compatibility.
194
+ * The watcher's readKeeperSettingsFromFile() reads settings.json during startup before the MCP server is ready.
195
+ */
196
+ function syncKeepAliveToSettings(db) {
197
+ try {
198
+ const roots = getRootThreads(db);
199
+ const activeKeepAlive = roots.find(r => r.keepAlive);
200
+ if (activeKeepAlive) {
201
+ setKeepAliveEnabled(true);
202
+ setKeepAliveThreadId(activeKeepAlive.threadId);
203
+ setKeepAliveClient(activeKeepAlive.client);
204
+ setKeepAliveMaxRetries(activeKeepAlive.maxRetries);
205
+ setKeepAliveCooldownMs(activeKeepAlive.cooldownMs);
206
+ }
207
+ else {
208
+ setKeepAliveEnabled(false);
209
+ }
210
+ // Sync per-thread overrides
211
+ for (const root of roots) {
212
+ if (root.keepAlive) {
213
+ setThreadKeepAlive(root.threadId, {
214
+ enabled: true,
215
+ client: root.client,
216
+ maxRetries: root.maxRetries,
217
+ cooldownMs: root.cooldownMs,
218
+ });
219
+ }
220
+ else {
221
+ removeThreadKeepAlive(root.threadId);
222
+ }
223
+ }
224
+ }
225
+ catch {
226
+ // Best-effort sync — don't fail the API call
227
+ }
228
+ }
229
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/dashboard/routes/threads.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;AA6F1D;;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;AA6G1D;;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"}
@@ -25,6 +25,8 @@ import { handleGetTemplates, handleGetDriveTemplate, handleGetDrivePresets, hand
25
25
  import { handleGetStatus, handleGetSessions, handleGetNotes, handleGetEpisodes, handleGetTopics, handleGetSearch, handleGetTopicRegistry, handlePostTopicRegistry, handleDeleteTopicRegistry, } from "./routes/data.js";
26
26
  // Domain handlers — skills
27
27
  import { handleGetSkills, handleSkillPut, } from "./routes/skills.js";
28
+ // Domain handlers — threads
29
+ import { handleGetThreads, handleGetRootThreads, handleCreateThread, handleGetThread, handleGetThreadChildren, handleUpdateThread, handleDeleteThread, } from "./routes/threads.js";
28
30
  // ─── Route table ────────────────────────────────────────────────────────────
29
31
  const routeTable = {
30
32
  // Data
@@ -60,6 +62,10 @@ const routeTable = {
60
62
  "DELETE /api/topic-registry": handleDeleteTopicRegistry,
61
63
  // Skills
62
64
  "GET /api/skills": handleGetSkills,
65
+ // Threads
66
+ "GET /api/threads": handleGetThreads,
67
+ "GET /api/threads/roots": handleGetRootThreads,
68
+ "POST /api/threads": handleCreateThread,
63
69
  };
64
70
  // ─── Public entry point ─────────────────────────────────────────────────────
65
71
  /**
@@ -131,6 +137,21 @@ async function dispatchApiRoute(req, path, url, res, ctx) {
131
137
  if (result)
132
138
  return true;
133
139
  }
140
+ // 4. Dynamic thread routes: /api/threads/:threadId[/children]
141
+ const threadChildrenMatch = /^\/api\/threads\/(\d+)\/children$/.exec(path);
142
+ if (threadChildrenMatch) {
143
+ return handleGetThreadChildren(args, Number.parseInt(threadChildrenMatch[1], 10));
144
+ }
145
+ const threadMatch = /^\/api\/threads\/(\d+)$/.exec(path);
146
+ if (threadMatch) {
147
+ const tid = Number.parseInt(threadMatch[1], 10);
148
+ if (method === "GET")
149
+ return handleGetThread(args, tid);
150
+ if (method === "PATCH")
151
+ return handleUpdateThread(args, tid);
152
+ if (method === "DELETE")
153
+ return handleDeleteThread(args, tid);
154
+ }
134
155
  json({ error: "Not found" }, 404);
135
156
  return true;
136
157
  }
@@ -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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"}