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.
- package/dist/claude-keeper.d.ts.map +1 -1
- package/dist/claude-keeper.js +10 -4
- package/dist/claude-keeper.js.map +1 -1
- package/dist/daily-session.d.ts +36 -0
- package/dist/daily-session.d.ts.map +1 -0
- package/dist/daily-session.js +134 -0
- package/dist/daily-session.js.map +1 -0
- package/dist/dashboard/routes/threads.d.ts +17 -0
- package/dist/dashboard/routes/threads.d.ts.map +1 -0
- package/dist/dashboard/routes/threads.js +229 -0
- package/dist/dashboard/routes/threads.js.map +1 -0
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +21 -0
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +10 -10
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +4 -1
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/episodes.d.ts +1 -0
- package/dist/data/memory/episodes.d.ts.map +1 -1
- package/dist/data/memory/episodes.js +4 -0
- package/dist/data/memory/episodes.js.map +1 -1
- package/dist/data/memory/index.d.ts +1 -0
- package/dist/data/memory/index.d.ts.map +1 -1
- package/dist/data/memory/index.js +1 -0
- package/dist/data/memory/index.js.map +1 -1
- package/dist/data/memory/schema.d.ts.map +1 -1
- package/dist/data/memory/schema.js +121 -4
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/data/memory/thread-registry.d.ts +51 -0
- package/dist/data/memory/thread-registry.d.ts.map +1 -0
- package/dist/data/memory/thread-registry.js +135 -0
- package/dist/data/memory/thread-registry.js.map +1 -0
- package/dist/http-server.js +1 -1
- package/dist/http-server.js.map +1 -1
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +17 -3
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/thread-lifecycle.d.ts +4 -3
- package/dist/tools/thread-lifecycle.d.ts.map +1 -1
- package/dist/tools/thread-lifecycle.js +16 -7
- package/dist/tools/thread-lifecycle.js.map +1 -1
- package/dist/watcher-service.d.ts.map +1 -1
- package/dist/watcher-service.js +62 -143
- package/dist/watcher-service.js.map +1 -1
- 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,
|
|
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"}
|
package/dist/claude-keeper.js
CHANGED
|
@@ -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) =>
|
|
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
|
-
//
|
|
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",
|
|
178
|
+
args = ["--mcp-config", config.mcpConfigPath, "-p", safePrompt];
|
|
173
179
|
spawnEnv = undefined;
|
|
174
180
|
}
|
|
175
181
|
else {
|
|
176
182
|
cmd = copilotCmd;
|
|
177
|
-
args = ["-p",
|
|
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;
|
|
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"}
|
package/dist/dashboard/routes.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS9C,6BAA6B;AAC7B,OAAO,EACH,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,+BAA+B,EAC/B,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,8BAA8B;AAC9B,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,yBAAyB;AACzB,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,GAC5B,MAAM,kBAAkB,CAAC;AAE1B,2BAA2B;AAC3B,OAAO,EACH,eAAe,EACf,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAE5B,+EAA+E;AAE/E,MAAM,UAAU,GAAiC;IAC7C,OAAO;IACP,iBAAiB,EAAQ,eAAe;IACxC,mBAAmB,EAAM,iBAAiB;IAC1C,gBAAgB,EAAS,cAAc;IACvC,mBAAmB,EAAM,iBAAiB;IAC1C,iBAAiB,EAAQ,eAAe;IACxC,iBAAiB,EAAQ,eAAe;IAExC,YAAY;IACZ,oBAAoB,EAAe,kBAAkB;IACrD,0BAA0B,EAAS,sBAAsB;IACzD,kCAAkC,EAAE,qBAAqB;IAEzD,WAAW;IACX,wCAAwC,EAAG,2BAA2B;IACtE,qCAAqC,EAAM,wBAAwB;IACnE,sCAAsC,EAAK,yBAAyB;IACpE,8BAA8B,EAAa,kBAAkB;IAC7D,+BAA+B,EAAY,mBAAmB;IAC9D,sCAAsC,EAAK,yBAAyB;IACpE,sCAAsC,EAAK,yBAAyB;IACpE,8BAA8B,EAAgB,0BAA0B;IACxE,+BAA+B,EAAe,2BAA2B;IACzE,2CAA2C,EAAG,8BAA8B;IAC5E,4CAA4C,EAAE,+BAA+B;IAC7E,8BAA8B,EAAgB,kBAAkB;IAChE,+BAA+B,EAAe,mBAAmB;IACjE,qCAAqC,EAAS,wBAAwB;IACtE,sCAAsC,EAAQ,yBAAyB;IAEvE,iBAAiB;IACjB,yBAAyB,EAAK,sBAAsB;IACpD,0BAA0B,EAAI,uBAAuB;IACrD,4BAA4B,EAAE,yBAAyB;IAEvD,SAAS;IACT,iBAAiB,EAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/dashboard/routes.ts"],"names":[],"mappings":"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"}
|