daedalus-cli 0.4.0
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/Daedalus.bat +18 -0
- package/LICENSE +21 -0
- package/README.md +254 -0
- package/dist/agents/agent.d.ts +10 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +3 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +18 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +171 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/roles.d.ts +14 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +126 -0
- package/dist/agents/roles.js.map +1 -0
- package/dist/config/index.d.ts +485 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +237 -0
- package/dist/config/index.js.map +1 -0
- package/dist/highlight.d.ts +4 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +42 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1386 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/fts.d.ts +40 -0
- package/dist/indexing/fts.d.ts.map +1 -0
- package/dist/indexing/fts.js +121 -0
- package/dist/indexing/fts.js.map +1 -0
- package/dist/indexing/indexer.d.ts +22 -0
- package/dist/indexing/indexer.d.ts.map +1 -0
- package/dist/indexing/indexer.js +518 -0
- package/dist/indexing/indexer.js.map +1 -0
- package/dist/onboarding/wizard.d.ts +2 -0
- package/dist/onboarding/wizard.d.ts.map +1 -0
- package/dist/onboarding/wizard.js +231 -0
- package/dist/onboarding/wizard.js.map +1 -0
- package/dist/router/health.d.ts +6 -0
- package/dist/router/health.d.ts.map +1 -0
- package/dist/router/health.js +74 -0
- package/dist/router/health.js.map +1 -0
- package/dist/router/index.d.ts +33 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +214 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/rate-limiter.d.ts +7 -0
- package/dist/router/rate-limiter.d.ts.map +1 -0
- package/dist/router/rate-limiter.js +36 -0
- package/dist/router/rate-limiter.js.map +1 -0
- package/dist/router/types.d.ts +81 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +3 -0
- package/dist/router/types.js.map +1 -0
- package/dist/session/jsonl.d.ts +20 -0
- package/dist/session/jsonl.d.ts.map +1 -0
- package/dist/session/jsonl.js +61 -0
- package/dist/session/jsonl.js.map +1 -0
- package/dist/session/manager.d.ts +42 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +184 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/memory.d.ts +23 -0
- package/dist/session/memory.d.ts.map +1 -0
- package/dist/session/memory.js +88 -0
- package/dist/session/memory.js.map +1 -0
- package/dist/session/sqlite.d.ts +59 -0
- package/dist/session/sqlite.d.ts.map +1 -0
- package/dist/session/sqlite.js +174 -0
- package/dist/session/sqlite.js.map +1 -0
- package/dist/tools/builtin/delegation.d.ts +17 -0
- package/dist/tools/builtin/delegation.d.ts.map +1 -0
- package/dist/tools/builtin/delegation.js +85 -0
- package/dist/tools/builtin/delegation.js.map +1 -0
- package/dist/tools/builtin/diff-ui.d.ts +21 -0
- package/dist/tools/builtin/diff-ui.d.ts.map +1 -0
- package/dist/tools/builtin/diff-ui.js +211 -0
- package/dist/tools/builtin/diff-ui.js.map +1 -0
- package/dist/tools/builtin/files.d.ts +29 -0
- package/dist/tools/builtin/files.d.ts.map +1 -0
- package/dist/tools/builtin/files.js +286 -0
- package/dist/tools/builtin/files.js.map +1 -0
- package/dist/tools/builtin/git.d.ts +7 -0
- package/dist/tools/builtin/git.d.ts.map +1 -0
- package/dist/tools/builtin/git.js +11 -0
- package/dist/tools/builtin/git.js.map +1 -0
- package/dist/tools/builtin/indexing.d.ts +22 -0
- package/dist/tools/builtin/indexing.d.ts.map +1 -0
- package/dist/tools/builtin/indexing.js +159 -0
- package/dist/tools/builtin/indexing.js.map +1 -0
- package/dist/tools/builtin/project-config.d.ts +17 -0
- package/dist/tools/builtin/project-config.d.ts.map +1 -0
- package/dist/tools/builtin/project-config.js +66 -0
- package/dist/tools/builtin/project-config.js.map +1 -0
- package/dist/tools/builtin/terminal.d.ts +7 -0
- package/dist/tools/builtin/terminal.d.ts.map +1 -0
- package/dist/tools/builtin/terminal.js +99 -0
- package/dist/tools/builtin/terminal.js.map +1 -0
- package/dist/tools/builtin/todo.d.ts +20 -0
- package/dist/tools/builtin/todo.d.ts.map +1 -0
- package/dist/tools/builtin/todo.js +36 -0
- package/dist/tools/builtin/todo.js.map +1 -0
- package/dist/tools/builtin/web.d.ts +10 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js +67 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/daedalus-spinner.d.ts +29 -0
- package/dist/tools/daedalus-spinner.d.ts.map +1 -0
- package/dist/tools/daedalus-spinner.js +77 -0
- package/dist/tools/daedalus-spinner.js.map +1 -0
- package/dist/tools/definitions.d.ts +5 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +296 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/executor.d.ts +4 -0
- package/dist/tools/executor.d.ts.map +1 -0
- package/dist/tools/executor.js +86 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/mcp/http.d.ts +23 -0
- package/dist/tools/mcp/http.d.ts.map +1 -0
- package/dist/tools/mcp/http.js +200 -0
- package/dist/tools/mcp/http.js.map +1 -0
- package/dist/tools/mcp/registry.d.ts +16 -0
- package/dist/tools/mcp/registry.d.ts.map +1 -0
- package/dist/tools/mcp/registry.js +92 -0
- package/dist/tools/mcp/registry.js.map +1 -0
- package/dist/tools/mcp/stdio.d.ts +26 -0
- package/dist/tools/mcp/stdio.d.ts.map +1 -0
- package/dist/tools/mcp/stdio.js +157 -0
- package/dist/tools/mcp/stdio.js.map +1 -0
- package/dist/tools/mcp/tool-executor.d.ts +3 -0
- package/dist/tools/mcp/tool-executor.d.ts.map +1 -0
- package/dist/tools/mcp/tool-executor.js +23 -0
- package/dist/tools/mcp/tool-executor.js.map +1 -0
- package/dist/tools/mcp/types.d.ts +26 -0
- package/dist/tools/mcp/types.d.ts.map +1 -0
- package/dist/tools/mcp/types.js +3 -0
- package/dist/tools/mcp/types.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/router/rate-limiter.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAI5B,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;IACpE,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,MAAc;IAC/D,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,cAAc,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;IACvD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACvE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB,EAAE,MAAc;IAC7D,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export interface ModelEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
endpoint: string;
|
|
4
|
+
model: string;
|
|
5
|
+
priority: number;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
maxTokens?: number;
|
|
9
|
+
supportsTools?: boolean;
|
|
10
|
+
supportsVision?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ModelHealth {
|
|
13
|
+
healthy: boolean;
|
|
14
|
+
lastCheck: number;
|
|
15
|
+
latencyMs?: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
consecutiveFailures: number;
|
|
18
|
+
}
|
|
19
|
+
export interface TokenBucket {
|
|
20
|
+
tokens: number;
|
|
21
|
+
lastRefill: number;
|
|
22
|
+
capacity: number;
|
|
23
|
+
refillRate: number;
|
|
24
|
+
}
|
|
25
|
+
export interface RouteResult {
|
|
26
|
+
model: ModelEntry;
|
|
27
|
+
health: ModelHealth;
|
|
28
|
+
}
|
|
29
|
+
export interface RouterConfig {
|
|
30
|
+
strategy: 'priority' | 'round-robin' | 'fastest';
|
|
31
|
+
chain: ModelEntry[];
|
|
32
|
+
healthCheckInterval: number;
|
|
33
|
+
requestTimeout: number;
|
|
34
|
+
defaultRateLimit: {
|
|
35
|
+
rpm: number;
|
|
36
|
+
tpm: number;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface ChatRequest {
|
|
40
|
+
model?: string;
|
|
41
|
+
messages: any[];
|
|
42
|
+
temperature?: number;
|
|
43
|
+
max_tokens?: number;
|
|
44
|
+
stream?: boolean;
|
|
45
|
+
tools?: any[];
|
|
46
|
+
tool_choice?: any;
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
[key: string]: any;
|
|
49
|
+
}
|
|
50
|
+
export interface ChatResponse {
|
|
51
|
+
id: string;
|
|
52
|
+
object: string;
|
|
53
|
+
created: number;
|
|
54
|
+
model: string;
|
|
55
|
+
choices: Array<{
|
|
56
|
+
index: number;
|
|
57
|
+
message: any;
|
|
58
|
+
finish_reason: string | null;
|
|
59
|
+
}>;
|
|
60
|
+
usage: {
|
|
61
|
+
prompt_tokens: number;
|
|
62
|
+
completion_tokens: number;
|
|
63
|
+
total_tokens: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface StreamChunk {
|
|
67
|
+
id: string;
|
|
68
|
+
object: string;
|
|
69
|
+
created: number;
|
|
70
|
+
model: string;
|
|
71
|
+
choices: Array<{
|
|
72
|
+
index: number;
|
|
73
|
+
delta: {
|
|
74
|
+
role?: string;
|
|
75
|
+
content?: string;
|
|
76
|
+
tool_calls?: any[];
|
|
77
|
+
};
|
|
78
|
+
finish_reason: string | null;
|
|
79
|
+
}>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;IACjD,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,GAAG,CAAC;QACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;IACH,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YACL,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;SACpB,CAAC;QACF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA,8BAA8B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface JsonlTurn {
|
|
3
|
+
turn: number;
|
|
4
|
+
role: string;
|
|
5
|
+
content: string;
|
|
6
|
+
tool_calls?: any[];
|
|
7
|
+
tool_call_id?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
tokens?: {
|
|
11
|
+
in?: number;
|
|
12
|
+
out?: number;
|
|
13
|
+
};
|
|
14
|
+
timestamp?: number;
|
|
15
|
+
}
|
|
16
|
+
/** Export all turns from a session SQLite DB to a JSONL file */
|
|
17
|
+
export declare function exportToJsonl(db: Database.Database, jsonlPath: string): void;
|
|
18
|
+
/** Import turns from a JSONL file into a session SQLite DB */
|
|
19
|
+
export declare function importFromJsonl(db: Database.Database, jsonlPath: string): void;
|
|
20
|
+
//# sourceMappingURL=jsonl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/session/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAmC5E;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAyB9E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// JSONL import/export for session portability
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { getTurns, clearTurns, saveTurn } from './sqlite.js';
|
|
4
|
+
/** Export all turns from a session SQLite DB to a JSONL file */
|
|
5
|
+
export function exportToJsonl(db, jsonlPath) {
|
|
6
|
+
const turns = getTurns(db);
|
|
7
|
+
const stream = fs.createWriteStream(jsonlPath, { encoding: 'utf8' });
|
|
8
|
+
turns.forEach((t, index) => {
|
|
9
|
+
let toolCallsParsed = undefined;
|
|
10
|
+
if (t.tool_calls) {
|
|
11
|
+
try {
|
|
12
|
+
toolCallsParsed = JSON.parse(t.tool_calls);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Ignored
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const tokens = (t.tokens_input || t.tokens_output) ? {
|
|
19
|
+
in: t.tokens_input || undefined,
|
|
20
|
+
out: t.tokens_output || undefined,
|
|
21
|
+
} : undefined;
|
|
22
|
+
const line = {
|
|
23
|
+
turn: index + 1,
|
|
24
|
+
role: t.role,
|
|
25
|
+
content: t.content,
|
|
26
|
+
tool_calls: toolCallsParsed,
|
|
27
|
+
tool_call_id: t.tool_call_id || undefined,
|
|
28
|
+
name: t.name || undefined,
|
|
29
|
+
model: t.model || undefined,
|
|
30
|
+
tokens,
|
|
31
|
+
timestamp: t.created_at,
|
|
32
|
+
};
|
|
33
|
+
stream.write(JSON.stringify(line) + '\n');
|
|
34
|
+
});
|
|
35
|
+
stream.end();
|
|
36
|
+
}
|
|
37
|
+
/** Import turns from a JSONL file into a session SQLite DB */
|
|
38
|
+
export function importFromJsonl(db, jsonlPath) {
|
|
39
|
+
if (!fs.existsSync(jsonlPath)) {
|
|
40
|
+
throw new Error(`JSONL file not found: ${jsonlPath}`);
|
|
41
|
+
}
|
|
42
|
+
const content = fs.readFileSync(jsonlPath, 'utf8');
|
|
43
|
+
const lines = content.split('\n').map(l => l.trim()).filter(Boolean);
|
|
44
|
+
clearTurns(db);
|
|
45
|
+
for (const line of lines) {
|
|
46
|
+
const parsed = JSON.parse(line);
|
|
47
|
+
const turn = {
|
|
48
|
+
role: parsed.role,
|
|
49
|
+
content: parsed.content,
|
|
50
|
+
tool_calls: parsed.tool_calls ? JSON.stringify(parsed.tool_calls) : undefined,
|
|
51
|
+
tool_call_id: parsed.tool_call_id,
|
|
52
|
+
name: parsed.name,
|
|
53
|
+
model: parsed.model,
|
|
54
|
+
tokens_input: parsed.tokens?.in,
|
|
55
|
+
tokens_output: parsed.tokens?.out,
|
|
56
|
+
created_at: parsed.timestamp,
|
|
57
|
+
};
|
|
58
|
+
saveTurn(db, turn);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/session/jsonl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SqliteTodo, SessionMeta } from './sqlite.js';
|
|
2
|
+
import { ProjectMemory } from './memory.js';
|
|
3
|
+
import { ChatMessage } from '../types.js';
|
|
4
|
+
export declare class SessionManager {
|
|
5
|
+
private homedir;
|
|
6
|
+
private baseDir;
|
|
7
|
+
private sessionsDir;
|
|
8
|
+
private memoryDir;
|
|
9
|
+
private indexDbPath;
|
|
10
|
+
private indexDb;
|
|
11
|
+
private sessionDb?;
|
|
12
|
+
projectRoot: string;
|
|
13
|
+
projectHash: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
sessionTitle: string;
|
|
16
|
+
constructor(projectRoot?: string);
|
|
17
|
+
/** Initialize directories and the index database */
|
|
18
|
+
init(): void;
|
|
19
|
+
/** Start a new session or load an existing one */
|
|
20
|
+
startSession(sessionId?: string, title?: string): {
|
|
21
|
+
sessionId: string;
|
|
22
|
+
turns: ChatMessage[];
|
|
23
|
+
activeFiles: Map<string, string>;
|
|
24
|
+
todos: SqliteTodo[];
|
|
25
|
+
};
|
|
26
|
+
/** Get all chat messages formatted for OpenAI SDK compatibility */
|
|
27
|
+
getChatMessages(): ChatMessage[];
|
|
28
|
+
/** Save the current session state (turns, active files, and todos) */
|
|
29
|
+
saveSessionState(messages: ChatMessage[], activeFiles: Map<string, string>, todos: SqliteTodo[]): void;
|
|
30
|
+
/** Import a JSONL session file */
|
|
31
|
+
importSessionFromJsonl(jsonlPath: string): ChatMessage[];
|
|
32
|
+
/** List all sessions for the current project */
|
|
33
|
+
getSessionsForProject(): SessionMeta[];
|
|
34
|
+
/** Delete a session completely */
|
|
35
|
+
deleteSession(sessionId: string): void;
|
|
36
|
+
private getMemoryPath;
|
|
37
|
+
getMemoryPrompt(): string;
|
|
38
|
+
addFact(key: string, value: string, source?: 'user' | 'agent'): void;
|
|
39
|
+
setConvention(key: string, value: string): void;
|
|
40
|
+
loadMemory(): ProjectMemory;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAcL,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAyD,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,WAAW,CAA+C;IAElE,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAoB;IAE/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAG,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAiB;gBAEhC,WAAW,SAAgB;IAKvC,oDAAoD;IAC7C,IAAI,IAAI,IAAI;IAWnB,kDAAkD;IAC3C,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;QACvD,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,EAAE,UAAU,EAAE,CAAC;KACrB;IAkCD,mEAAmE;IAC5D,eAAe,IAAI,WAAW,EAAE;IA8BvC,sEAAsE;IAC/D,gBAAgB,CACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,KAAK,EAAE,UAAU,EAAE,GAClB,IAAI;IA8CP,kCAAkC;IAC3B,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAM/D,gDAAgD;IACzC,qBAAqB,IAAI,WAAW,EAAE;IAK7C,kCAAkC;IAC3B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW7C,OAAO,CAAC,aAAa;IAId,eAAe,IAAI,MAAM;IAIzB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,OAAiB,GAAG,IAAI;IAI7E,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C,UAAU,IAAI,aAAa;CAGnC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// Session manager for Daedalus — persists conversations, active files, and todos
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import crypto from 'crypto';
|
|
6
|
+
import { initIndexDb, initSessionDb, registerSession, listSessionsForProject, deleteSessionFromIndex, getTurns, clearTurns, saveTurn, saveActiveFiles, getActiveFiles, saveTodos, getTodos } from './sqlite.js';
|
|
7
|
+
import { exportToJsonl, importFromJsonl } from './jsonl.js';
|
|
8
|
+
import { loadMemory, addFact, setConvention, getMemoryAsPrompt } from './memory.js';
|
|
9
|
+
export class SessionManager {
|
|
10
|
+
homedir = os.homedir();
|
|
11
|
+
baseDir = path.join(this.homedir, '.daedalus');
|
|
12
|
+
sessionsDir = path.join(this.baseDir, 'sessions');
|
|
13
|
+
memoryDir = path.join(this.baseDir, 'memory');
|
|
14
|
+
indexDbPath = path.join(this.sessionsDir, 'index.sqlite');
|
|
15
|
+
indexDb;
|
|
16
|
+
sessionDb;
|
|
17
|
+
projectRoot;
|
|
18
|
+
projectHash;
|
|
19
|
+
sessionId;
|
|
20
|
+
sessionTitle = 'New Session';
|
|
21
|
+
constructor(projectRoot = process.cwd()) {
|
|
22
|
+
this.projectRoot = path.resolve(projectRoot);
|
|
23
|
+
this.projectHash = crypto.createHash('sha256').update(this.projectRoot).digest('hex').slice(0, 12);
|
|
24
|
+
}
|
|
25
|
+
/** Initialize directories and the index database */
|
|
26
|
+
init() {
|
|
27
|
+
if (!fs.existsSync(this.baseDir))
|
|
28
|
+
fs.mkdirSync(this.baseDir, { recursive: true });
|
|
29
|
+
if (!fs.existsSync(this.sessionsDir))
|
|
30
|
+
fs.mkdirSync(this.sessionsDir, { recursive: true });
|
|
31
|
+
if (!fs.existsSync(this.memoryDir))
|
|
32
|
+
fs.mkdirSync(this.memoryDir, { recursive: true });
|
|
33
|
+
const projectSessionDir = path.join(this.sessionsDir, this.projectHash);
|
|
34
|
+
if (!fs.existsSync(projectSessionDir))
|
|
35
|
+
fs.mkdirSync(projectSessionDir, { recursive: true });
|
|
36
|
+
this.indexDb = initIndexDb(this.indexDbPath);
|
|
37
|
+
}
|
|
38
|
+
/** Start a new session or load an existing one */
|
|
39
|
+
startSession(sessionId, title) {
|
|
40
|
+
const isNew = !sessionId;
|
|
41
|
+
this.sessionId = sessionId || `session-${Date.now()}-${crypto.randomBytes(3).toString('hex')}`;
|
|
42
|
+
this.sessionTitle = title || (isNew ? `Session on ${new Date().toLocaleDateString()}` : 'Loaded Session');
|
|
43
|
+
const sessionDbPath = path.join(this.sessionsDir, this.projectHash, `${this.sessionId}.sqlite`);
|
|
44
|
+
this.sessionDb = initSessionDb(sessionDbPath);
|
|
45
|
+
// If it is a new session, register it in the index DB
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
const meta = {
|
|
48
|
+
id: this.sessionId,
|
|
49
|
+
project_path: this.projectRoot,
|
|
50
|
+
project_hash: this.projectHash,
|
|
51
|
+
title: this.sessionTitle,
|
|
52
|
+
created_at: now,
|
|
53
|
+
updated_at: now,
|
|
54
|
+
};
|
|
55
|
+
registerSession(this.indexDb, meta);
|
|
56
|
+
// Load existing data
|
|
57
|
+
const turns = this.getChatMessages();
|
|
58
|
+
const files = getActiveFiles(this.sessionDb);
|
|
59
|
+
const todos = getTodos(this.sessionDb);
|
|
60
|
+
return {
|
|
61
|
+
sessionId: this.sessionId,
|
|
62
|
+
turns,
|
|
63
|
+
activeFiles: files,
|
|
64
|
+
todos,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Get all chat messages formatted for OpenAI SDK compatibility */
|
|
68
|
+
getChatMessages() {
|
|
69
|
+
if (!this.sessionDb)
|
|
70
|
+
return [];
|
|
71
|
+
const dbTurns = getTurns(this.sessionDb);
|
|
72
|
+
return dbTurns.map(t => {
|
|
73
|
+
let toolCallsParsed = undefined;
|
|
74
|
+
if (t.tool_calls) {
|
|
75
|
+
try {
|
|
76
|
+
toolCallsParsed = JSON.parse(t.tool_calls);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Ignored
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let contentParsed = t.content;
|
|
83
|
+
if (typeof t.content === 'string' && (t.content.startsWith('[') || t.content.startsWith('{'))) {
|
|
84
|
+
try {
|
|
85
|
+
contentParsed = JSON.parse(t.content);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Ignored
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
role: t.role,
|
|
93
|
+
content: contentParsed,
|
|
94
|
+
tool_calls: toolCallsParsed,
|
|
95
|
+
tool_call_id: t.tool_call_id || undefined,
|
|
96
|
+
name: t.name || undefined,
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** Save the current session state (turns, active files, and todos) */
|
|
101
|
+
saveSessionState(messages, activeFiles, todos) {
|
|
102
|
+
if (!this.sessionDb || !this.indexDb)
|
|
103
|
+
return;
|
|
104
|
+
// 1. Save turns to SQLite
|
|
105
|
+
this.sessionDb.transaction(() => {
|
|
106
|
+
clearTurns(this.sessionDb);
|
|
107
|
+
messages.forEach(msg => {
|
|
108
|
+
const turn = {
|
|
109
|
+
role: msg.role,
|
|
110
|
+
content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
|
|
111
|
+
tool_calls: msg.tool_calls ? JSON.stringify(msg.tool_calls) : undefined,
|
|
112
|
+
tool_call_id: msg.tool_call_id,
|
|
113
|
+
name: msg.name,
|
|
114
|
+
model: msg.model || null,
|
|
115
|
+
tokens_input: msg.tokens?.in || null,
|
|
116
|
+
tokens_output: msg.tokens?.out || null,
|
|
117
|
+
latency_ms: msg.latency_ms || null,
|
|
118
|
+
};
|
|
119
|
+
saveTurn(this.sessionDb, turn);
|
|
120
|
+
});
|
|
121
|
+
})();
|
|
122
|
+
// 2. Save active files
|
|
123
|
+
saveActiveFiles(this.sessionDb, activeFiles);
|
|
124
|
+
// 3. Save todos
|
|
125
|
+
saveTodos(this.sessionDb, todos);
|
|
126
|
+
// 4. Update the index DB — preserve the original created_at timestamp
|
|
127
|
+
const now = Date.now();
|
|
128
|
+
const existing = this.getSessionsForProject().find(s => s.id === this.sessionId);
|
|
129
|
+
const meta = {
|
|
130
|
+
id: this.sessionId,
|
|
131
|
+
project_path: this.projectRoot,
|
|
132
|
+
project_hash: this.projectHash,
|
|
133
|
+
title: this.sessionTitle,
|
|
134
|
+
created_at: existing?.created_at ?? now,
|
|
135
|
+
updated_at: now,
|
|
136
|
+
};
|
|
137
|
+
registerSession(this.indexDb, meta);
|
|
138
|
+
// 5. Export to JSONL for portability
|
|
139
|
+
const jsonlPath = path.join(this.sessionsDir, this.projectHash, `${this.sessionId}.jsonl`);
|
|
140
|
+
exportToJsonl(this.sessionDb, jsonlPath);
|
|
141
|
+
}
|
|
142
|
+
/** Import a JSONL session file */
|
|
143
|
+
importSessionFromJsonl(jsonlPath) {
|
|
144
|
+
if (!this.sessionDb)
|
|
145
|
+
throw new Error('No active session database');
|
|
146
|
+
importFromJsonl(this.sessionDb, jsonlPath);
|
|
147
|
+
return this.getChatMessages();
|
|
148
|
+
}
|
|
149
|
+
/** List all sessions for the current project */
|
|
150
|
+
getSessionsForProject() {
|
|
151
|
+
if (!this.indexDb)
|
|
152
|
+
return [];
|
|
153
|
+
return listSessionsForProject(this.indexDb, this.projectHash);
|
|
154
|
+
}
|
|
155
|
+
/** Delete a session completely */
|
|
156
|
+
deleteSession(sessionId) {
|
|
157
|
+
if (!this.indexDb)
|
|
158
|
+
return;
|
|
159
|
+
deleteSessionFromIndex(this.indexDb, sessionId);
|
|
160
|
+
const dbPath = path.join(this.sessionsDir, this.projectHash, `${sessionId}.sqlite`);
|
|
161
|
+
const jsonlPath = path.join(this.sessionsDir, this.projectHash, `${sessionId}.jsonl`);
|
|
162
|
+
if (fs.existsSync(dbPath))
|
|
163
|
+
fs.unlinkSync(dbPath);
|
|
164
|
+
if (fs.existsSync(jsonlPath))
|
|
165
|
+
fs.unlinkSync(jsonlPath);
|
|
166
|
+
}
|
|
167
|
+
// --- Memory Helpers ---
|
|
168
|
+
getMemoryPath() {
|
|
169
|
+
return path.join(this.memoryDir, `${this.projectHash}.json`);
|
|
170
|
+
}
|
|
171
|
+
getMemoryPrompt() {
|
|
172
|
+
return getMemoryAsPrompt(this.getMemoryPath(), this.projectHash);
|
|
173
|
+
}
|
|
174
|
+
addFact(key, value, source = 'agent') {
|
|
175
|
+
addFact(this.getMemoryPath(), this.projectHash, key, value, source);
|
|
176
|
+
}
|
|
177
|
+
setConvention(key, value) {
|
|
178
|
+
setConvention(this.getMemoryPath(), this.projectHash, key, value);
|
|
179
|
+
}
|
|
180
|
+
loadMemory() {
|
|
181
|
+
return loadMemory(this.getMemoryPath(), this.projectHash);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EAIT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AAGnG,MAAM,OAAO,cAAc;IACjB,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAClD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE1D,OAAO,CAAqB;IAC5B,SAAS,CAAqB;IAE/B,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,SAAS,CAAU;IACnB,YAAY,GAAW,aAAa,CAAC;IAE5C,YAAY,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,oDAAoD;IAC7C,IAAI;QACT,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5F,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,kDAAkD;IAC3C,YAAY,CAAC,SAAkB,EAAE,KAAc;QAMpD,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAE1G,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,SAAS,CAAC,CAAC;QAEhG,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAE9C,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAgB;YACxB,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEpC,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK;YACL,WAAW,EAAE,KAAK;YAClB,KAAK;SACN,CAAC;IACJ,CAAC;IAED,mEAAmE;IAC5D,eAAe;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,eAAe,GAAsB,SAAS,CAAC;YACnD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;YAC9B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9F,IAAI,CAAC;oBACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU;gBACZ,CAAC;YACH,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAgD;gBACxD,OAAO,EAAE,aAAa;gBACtB,UAAU,EAAE,eAAe;gBAC3B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,SAAS;gBACzC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;aAC1B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IAC/D,gBAAgB,CACrB,QAAuB,EACvB,WAAgC,EAChC,KAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE7C,0BAA0B;QAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE;YAC9B,UAAU,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;YAC5B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,IAAI,GAAe;oBACvB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;oBACpF,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;oBACvE,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,KAAK,EAAG,GAAW,CAAC,KAAK,IAAI,IAAI;oBACjC,YAAY,EAAG,GAAW,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI;oBAC7C,aAAa,EAAG,GAAW,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;oBAC/C,UAAU,EAAG,GAAW,CAAC,UAAU,IAAI,IAAI;iBAC5C,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,SAAU,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;QAEL,uBAAuB;QACvB,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAE7C,gBAAgB;QAChB,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEjC,sEAAsE;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,IAAI,GAAgB;YACxB,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;YACvC,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEpC,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC;QAC3F,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,kCAAkC;IAC3B,sBAAsB,CAAC,SAAiB;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED,gDAAgD;IACzC,qBAAqB;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAChE,CAAC;IAED,kCAAkC;IAC3B,aAAa,CAAC,SAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;QACtF,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,yBAAyB;IAEjB,aAAa;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,eAAe;QACpB,OAAO,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,SAA2B,OAAO;QAC3E,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAEM,aAAa,CAAC,GAAW,EAAE,KAAa;QAC7C,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAEM,UAAU;QACf,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface Fact {
|
|
2
|
+
key: string;
|
|
3
|
+
value: string;
|
|
4
|
+
source: 'user' | 'agent';
|
|
5
|
+
created: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ProjectMemory {
|
|
8
|
+
projectHash: string;
|
|
9
|
+
facts: Fact[];
|
|
10
|
+
conventions: Record<string, string>;
|
|
11
|
+
updated_at: number;
|
|
12
|
+
}
|
|
13
|
+
/** Load project memory from JSON file */
|
|
14
|
+
export declare function loadMemory(memoryPath: string, projectHash: string): ProjectMemory;
|
|
15
|
+
/** Save project memory to JSON file */
|
|
16
|
+
export declare function saveMemory(memoryPath: string, memory: ProjectMemory): void;
|
|
17
|
+
/** Add a fact to the project memory */
|
|
18
|
+
export declare function addFact(memoryPath: string, projectHash: string, key: string, value: string, source?: 'user' | 'agent'): void;
|
|
19
|
+
/** Set a project coding convention */
|
|
20
|
+
export declare function setConvention(memoryPath: string, projectHash: string, key: string, value: string): void;
|
|
21
|
+
/** Generate a system prompt fragment describing project facts and conventions */
|
|
22
|
+
export declare function getMemoryAsPrompt(memoryPath: string, projectHash: string): string;
|
|
23
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/session/memory.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CA0BjF;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAM1E;AAED,uCAAuC;AACvC,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,OAAiB,GAAG,IAAI,CAmBrI;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKvG;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyBjF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Project memory for Daedalus — facts, conventions, and persistent context
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
/** Load project memory from JSON file */
|
|
5
|
+
export function loadMemory(memoryPath, projectHash) {
|
|
6
|
+
const dir = path.dirname(memoryPath);
|
|
7
|
+
if (!fs.existsSync(dir)) {
|
|
8
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
if (!fs.existsSync(memoryPath)) {
|
|
11
|
+
return {
|
|
12
|
+
projectHash,
|
|
13
|
+
facts: [],
|
|
14
|
+
conventions: {},
|
|
15
|
+
updated_at: Date.now(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const data = JSON.parse(fs.readFileSync(memoryPath, 'utf8'));
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {
|
|
24
|
+
projectHash,
|
|
25
|
+
facts: [],
|
|
26
|
+
conventions: {},
|
|
27
|
+
updated_at: Date.now(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Save project memory to JSON file */
|
|
32
|
+
export function saveMemory(memoryPath, memory) {
|
|
33
|
+
const dir = path.dirname(memoryPath);
|
|
34
|
+
if (!fs.existsSync(dir)) {
|
|
35
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
fs.writeFileSync(memoryPath, JSON.stringify(memory, null, 2), 'utf8');
|
|
38
|
+
}
|
|
39
|
+
/** Add a fact to the project memory */
|
|
40
|
+
export function addFact(memoryPath, projectHash, key, value, source = 'agent') {
|
|
41
|
+
const mem = loadMemory(memoryPath, projectHash);
|
|
42
|
+
const existingIndex = mem.facts.findIndex(f => f.key === key);
|
|
43
|
+
const newFact = {
|
|
44
|
+
key,
|
|
45
|
+
value,
|
|
46
|
+
source,
|
|
47
|
+
created: Date.now(),
|
|
48
|
+
};
|
|
49
|
+
if (existingIndex >= 0) {
|
|
50
|
+
mem.facts[existingIndex] = newFact;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
mem.facts.push(newFact);
|
|
54
|
+
}
|
|
55
|
+
mem.updated_at = Date.now();
|
|
56
|
+
saveMemory(memoryPath, mem);
|
|
57
|
+
}
|
|
58
|
+
/** Set a project coding convention */
|
|
59
|
+
export function setConvention(memoryPath, projectHash, key, value) {
|
|
60
|
+
const mem = loadMemory(memoryPath, projectHash);
|
|
61
|
+
mem.conventions[key] = value;
|
|
62
|
+
mem.updated_at = Date.now();
|
|
63
|
+
saveMemory(memoryPath, mem);
|
|
64
|
+
}
|
|
65
|
+
/** Generate a system prompt fragment describing project facts and conventions */
|
|
66
|
+
export function getMemoryAsPrompt(memoryPath, projectHash) {
|
|
67
|
+
const mem = loadMemory(memoryPath, projectHash);
|
|
68
|
+
if (mem.facts.length === 0 && Object.keys(mem.conventions).length === 0) {
|
|
69
|
+
return '';
|
|
70
|
+
}
|
|
71
|
+
let prompt = '\n--- PROJECT CONTEXT & CONVENTIONS ---\n';
|
|
72
|
+
if (Object.keys(mem.conventions).length > 0) {
|
|
73
|
+
prompt += 'Project Coding Conventions:\n';
|
|
74
|
+
for (const [key, val] of Object.entries(mem.conventions)) {
|
|
75
|
+
prompt += `- ${key}: ${val}\n`;
|
|
76
|
+
}
|
|
77
|
+
prompt += '\n';
|
|
78
|
+
}
|
|
79
|
+
if (mem.facts.length > 0) {
|
|
80
|
+
prompt += 'Project Facts:\n';
|
|
81
|
+
for (const f of mem.facts) {
|
|
82
|
+
prompt += `- ${f.key}: ${f.value} (source: ${f.source})\n`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
prompt += '-------------------------------------\n';
|
|
86
|
+
return prompt;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/session/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface SqliteTurn {
|
|
3
|
+
id?: number;
|
|
4
|
+
role: string;
|
|
5
|
+
content: string;
|
|
6
|
+
tool_calls?: string;
|
|
7
|
+
tool_call_id?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
tokens_input?: number;
|
|
11
|
+
tokens_output?: number;
|
|
12
|
+
latency_ms?: number;
|
|
13
|
+
created_at?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SqliteTodo {
|
|
16
|
+
id: string;
|
|
17
|
+
content: string;
|
|
18
|
+
status: string;
|
|
19
|
+
agent_role?: string;
|
|
20
|
+
created_at?: number;
|
|
21
|
+
updated_at?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SessionMeta {
|
|
24
|
+
id: string;
|
|
25
|
+
project_path: string;
|
|
26
|
+
project_hash: string;
|
|
27
|
+
title: string;
|
|
28
|
+
created_at: number;
|
|
29
|
+
updated_at: number;
|
|
30
|
+
}
|
|
31
|
+
/** Initialize the global sessions index database */
|
|
32
|
+
export declare function initIndexDb(dbPath: string): Database.Database;
|
|
33
|
+
/** Register a session in the global index */
|
|
34
|
+
export declare function registerSession(db: Database.Database, meta: SessionMeta): void;
|
|
35
|
+
/** List all sessions for a specific project */
|
|
36
|
+
export declare function listSessionsForProject(db: Database.Database, projectHash: string): SessionMeta[];
|
|
37
|
+
/** Delete a session from the index */
|
|
38
|
+
export declare function deleteSessionFromIndex(db: Database.Database, sessionId: string): void;
|
|
39
|
+
/** Initialize a specific session database */
|
|
40
|
+
export declare function initSessionDb(dbPath: string): Database.Database;
|
|
41
|
+
/** Save a turn to the session database */
|
|
42
|
+
export declare function saveTurn(db: Database.Database, turn: SqliteTurn): void;
|
|
43
|
+
/** Get all turns from the session database */
|
|
44
|
+
export declare function getTurns(db: Database.Database): SqliteTurn[];
|
|
45
|
+
/** Clear all turns in the session database */
|
|
46
|
+
export declare function clearTurns(db: Database.Database): void;
|
|
47
|
+
/** Save active files context */
|
|
48
|
+
export declare function saveActiveFiles(db: Database.Database, files: Map<string, string>): void;
|
|
49
|
+
/** Get active files context */
|
|
50
|
+
export declare function getActiveFiles(db: Database.Database): Map<string, string>;
|
|
51
|
+
/** Save todos list */
|
|
52
|
+
export declare function saveTodos(db: Database.Database, todos: SqliteTodo[]): void;
|
|
53
|
+
/** Get todos list */
|
|
54
|
+
export declare function getTodos(db: Database.Database): SqliteTodo[];
|
|
55
|
+
/** Save state key-value */
|
|
56
|
+
export declare function saveState(db: Database.Database, key: string, val: any): void;
|
|
57
|
+
/** Get state value */
|
|
58
|
+
export declare function getState(db: Database.Database, key: string): any | null;
|
|
59
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/session/sqlite.ts"],"names":[],"mappings":"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"}
|