cmdr-agent 2.1.1 → 2.2.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.
Files changed (105) hide show
  1. package/dist/bin/cmdr.js +4 -0
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +69 -0
  4. package/dist/src/cli/args.d.ts +4 -0
  5. package/dist/src/cli/args.d.ts.map +1 -1
  6. package/dist/src/cli/args.js +15 -0
  7. package/dist/src/cli/args.js.map +1 -1
  8. package/dist/src/cli/commands.js +20 -0
  9. package/dist/src/cli/commands.js.map +1 -1
  10. package/dist/src/cli/ink/App.d.ts.map +1 -1
  11. package/dist/src/cli/ink/App.js +15 -0
  12. package/dist/src/cli/ink/App.js.map +1 -1
  13. package/dist/src/cli/repl.d.ts +4 -0
  14. package/dist/src/cli/repl.d.ts.map +1 -1
  15. package/dist/src/cli/repl.js +48 -19
  16. package/dist/src/cli/repl.js.map +1 -1
  17. package/dist/src/core/agent-runner.d.ts +5 -0
  18. package/dist/src/core/agent-runner.d.ts.map +1 -1
  19. package/dist/src/core/agent-runner.js +12 -2
  20. package/dist/src/core/agent-runner.js.map +1 -1
  21. package/dist/src/core/agent.d.ts +2 -1
  22. package/dist/src/core/agent.d.ts.map +1 -1
  23. package/dist/src/core/agent.js +5 -1
  24. package/dist/src/core/agent.js.map +1 -1
  25. package/dist/src/core/content-replacement.d.ts +44 -0
  26. package/dist/src/core/content-replacement.d.ts.map +1 -0
  27. package/dist/src/core/content-replacement.js +67 -0
  28. package/dist/src/core/content-replacement.js.map +1 -0
  29. package/dist/src/core/event-bus.d.ts +129 -0
  30. package/dist/src/core/event-bus.d.ts.map +1 -0
  31. package/dist/src/core/event-bus.js +103 -0
  32. package/dist/src/core/event-bus.js.map +1 -0
  33. package/dist/src/core/orchestrator.d.ts +17 -1
  34. package/dist/src/core/orchestrator.d.ts.map +1 -1
  35. package/dist/src/core/orchestrator.js +95 -1
  36. package/dist/src/core/orchestrator.js.map +1 -1
  37. package/dist/src/core/permissions.d.ts +31 -3
  38. package/dist/src/core/permissions.d.ts.map +1 -1
  39. package/dist/src/core/permissions.js +122 -11
  40. package/dist/src/core/permissions.js.map +1 -1
  41. package/dist/src/core/presets.d.ts.map +1 -1
  42. package/dist/src/core/presets.js +1 -0
  43. package/dist/src/core/presets.js.map +1 -1
  44. package/dist/src/core/types.d.ts +17 -1
  45. package/dist/src/core/types.d.ts.map +1 -1
  46. package/dist/src/llm/anthropic.d.ts +27 -0
  47. package/dist/src/llm/anthropic.d.ts.map +1 -0
  48. package/dist/src/llm/anthropic.js +269 -0
  49. package/dist/src/llm/anthropic.js.map +1 -0
  50. package/dist/src/llm/ollama.d.ts.map +1 -1
  51. package/dist/src/llm/ollama.js +16 -4
  52. package/dist/src/llm/ollama.js.map +1 -1
  53. package/dist/src/llm/openai.d.ts +25 -0
  54. package/dist/src/llm/openai.d.ts.map +1 -0
  55. package/dist/src/llm/openai.js +299 -0
  56. package/dist/src/llm/openai.js.map +1 -0
  57. package/dist/src/llm/provider-factory.d.ts +35 -0
  58. package/dist/src/llm/provider-factory.d.ts.map +1 -0
  59. package/dist/src/llm/provider-factory.js +73 -0
  60. package/dist/src/llm/provider-factory.js.map +1 -0
  61. package/dist/src/memory/consolidation.d.ts +37 -0
  62. package/dist/src/memory/consolidation.d.ts.map +1 -0
  63. package/dist/src/memory/consolidation.js +148 -0
  64. package/dist/src/memory/consolidation.js.map +1 -0
  65. package/dist/src/memory/memory-manager.d.ts +39 -0
  66. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  67. package/dist/src/memory/memory-manager.js +96 -0
  68. package/dist/src/memory/memory-manager.js.map +1 -0
  69. package/dist/src/plugins/mcp-client.d.ts +14 -5
  70. package/dist/src/plugins/mcp-client.d.ts.map +1 -1
  71. package/dist/src/plugins/mcp-client.js +197 -43
  72. package/dist/src/plugins/mcp-client.js.map +1 -1
  73. package/dist/src/scheduling/task-scheduler.d.ts +51 -0
  74. package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
  75. package/dist/src/scheduling/task-scheduler.js +127 -0
  76. package/dist/src/scheduling/task-scheduler.js.map +1 -0
  77. package/dist/src/session/prompt-builder.d.ts +6 -0
  78. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  79. package/dist/src/session/prompt-builder.js +21 -2
  80. package/dist/src/session/prompt-builder.js.map +1 -1
  81. package/dist/src/session/prompt-cache.d.ts +33 -0
  82. package/dist/src/session/prompt-cache.d.ts.map +1 -0
  83. package/dist/src/session/prompt-cache.js +54 -0
  84. package/dist/src/session/prompt-cache.js.map +1 -0
  85. package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
  86. package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
  87. package/dist/src/tools/built-in/diagnostics.js +119 -0
  88. package/dist/src/tools/built-in/diagnostics.js.map +1 -0
  89. package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
  90. package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
  91. package/dist/src/tools/built-in/git-worktree.js +75 -0
  92. package/dist/src/tools/built-in/git-worktree.js.map +1 -0
  93. package/dist/src/tools/built-in/index.d.ts +5 -1
  94. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  95. package/dist/src/tools/built-in/index.js +8 -2
  96. package/dist/src/tools/built-in/index.js.map +1 -1
  97. package/dist/src/tools/built-in/memory.d.ts +15 -0
  98. package/dist/src/tools/built-in/memory.d.ts.map +1 -0
  99. package/dist/src/tools/built-in/memory.js +58 -0
  100. package/dist/src/tools/built-in/memory.js.map +1 -0
  101. package/dist/src/tools/built-in/notebook.d.ts +22 -0
  102. package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
  103. package/dist/src/tools/built-in/notebook.js +207 -0
  104. package/dist/src/tools/built-in/notebook.js.map +1 -0
  105. package/package.json +2 -2
@@ -1,42 +1,211 @@
1
1
  /**
2
2
  * MCP Client — connects to external Model Context Protocol servers for tool expansion.
3
3
  *
4
- * MCP servers expose tools over HTTP (SSE or REST).
5
- * This client registers remote tools as local tool definitions.
4
+ * Supports multiple transports:
5
+ * - HTTP REST: GET /tools, POST /tools/{name}
6
+ * - stdio: Spawn a child process, communicate via JSON-RPC over stdin/stdout
7
+ * - SSE: Server-Sent Events for streaming tool discovery and execution
6
8
  */
7
9
  import { z } from 'zod';
10
+ import { spawn } from 'node:child_process';
11
+ import { createInterface } from 'node:readline';
12
+ let rpcIdCounter = 0;
8
13
  export class McpClient {
9
14
  connections = new Map();
10
- /** Connect to an MCP server and discover its tools. */
15
+ /** Connect to an MCP server. Auto-detects transport from config. */
11
16
  async connect(config) {
17
+ const transport = config.transport ?? (config.command ? 'stdio' : 'http');
18
+ switch (transport) {
19
+ case 'stdio': return this.connectStdio(config);
20
+ case 'sse': return this.connectSse(config);
21
+ default: return this.connectHttp(config);
22
+ }
23
+ }
24
+ // ─── HTTP REST transport ────────────────────────────────────
25
+ async connectHttp(config) {
12
26
  const url = config.url.replace(/\/$/, '');
13
- const headers = {
14
- 'Content-Type': 'application/json',
15
- };
16
- if (config.apiKey) {
27
+ const headers = { 'Content-Type': 'application/json' };
28
+ if (config.apiKey)
17
29
  headers['Authorization'] = `Bearer ${config.apiKey}`;
30
+ const response = await fetch(`${url}/tools`, { headers });
31
+ if (!response.ok) {
32
+ throw new Error(`MCP server returned ${response.status}: ${response.statusText}`);
18
33
  }
19
- try {
20
- const response = await fetch(`${url}/tools`, { headers });
21
- if (!response.ok) {
22
- throw new Error(`MCP server returned ${response.status}: ${response.statusText}`);
23
- }
24
- const data = await response.json();
25
- const tools = data.tools ?? [];
26
- this.connections.set(config.name, {
27
- config,
28
- tools,
29
- connected: true,
34
+ const data = await response.json();
35
+ const tools = data.tools ?? [];
36
+ this.connections.set(config.name, { config, tools, connected: true, transport: 'http' });
37
+ return tools;
38
+ }
39
+ async callToolHttp(conn, toolName, input) {
40
+ const url = conn.config.url.replace(/\/$/, '');
41
+ const headers = { 'Content-Type': 'application/json' };
42
+ if (conn.config.apiKey)
43
+ headers['Authorization'] = `Bearer ${conn.config.apiKey}`;
44
+ const response = await fetch(`${url}/tools/${toolName}`, {
45
+ method: 'POST',
46
+ headers,
47
+ body: JSON.stringify({ input }),
48
+ });
49
+ if (!response.ok) {
50
+ const text = await response.text();
51
+ return { data: `MCP tool error (${response.status}): ${text}`, isError: true };
52
+ }
53
+ const data = await response.json();
54
+ if (data.error)
55
+ return { data: data.error, isError: true };
56
+ return { data: data.result ?? JSON.stringify(data) };
57
+ }
58
+ // ─── stdio transport ────────────────────────────────────────
59
+ async connectStdio(config) {
60
+ if (!config.command)
61
+ throw new Error(`stdio transport requires "command" in MCP config for "${config.name}"`);
62
+ const args = config.args ?? [];
63
+ const child = spawn(config.command, args, {
64
+ stdio: ['pipe', 'pipe', 'pipe'],
65
+ env: { ...process.env, ...config.env },
66
+ cwd: config.cwd,
67
+ });
68
+ // Initialize: send JSON-RPC initialize + tools/list
69
+ const tools = await new Promise((resolve, reject) => {
70
+ const timeout = setTimeout(() => reject(new Error(`stdio MCP server "${config.name}" timed out during init`)), 15_000);
71
+ const rl = createInterface({ input: child.stdout });
72
+ const pending = new Map();
73
+ rl.on('line', (line) => {
74
+ try {
75
+ const msg = JSON.parse(line);
76
+ const handler = pending.get(msg.id);
77
+ if (handler) {
78
+ pending.delete(msg.id);
79
+ if (msg.error)
80
+ handler.reject(new Error(msg.error.message));
81
+ else
82
+ handler.resolve(msg.result);
83
+ }
84
+ }
85
+ catch { /* ignore non-JSON lines */ }
86
+ });
87
+ child.on('error', (err) => {
88
+ clearTimeout(timeout);
89
+ reject(new Error(`Failed to spawn MCP server "${config.name}": ${err.message}`));
30
90
  });
31
- return tools;
91
+ const sendRpc = (method, params) => {
92
+ const id = ++rpcIdCounter;
93
+ return new Promise((res, rej) => {
94
+ pending.set(id, { resolve: res, reject: rej });
95
+ const req = { jsonrpc: '2.0', id, method, params };
96
+ child.stdin.write(JSON.stringify(req) + '\n');
97
+ });
98
+ };
99
+ // Step 1: Initialize
100
+ sendRpc('initialize', {
101
+ protocolVersion: '2024-11-05',
102
+ capabilities: {},
103
+ clientInfo: { name: 'cmdr', version: '2.2.0' },
104
+ }).then(() => {
105
+ // Step 2: Send initialized notification (no response expected)
106
+ child.stdin.write(JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' }) + '\n');
107
+ // Step 3: List tools
108
+ return sendRpc('tools/list', {});
109
+ }).then((result) => {
110
+ clearTimeout(timeout);
111
+ const toolsResult = result;
112
+ resolve(toolsResult.tools ?? []);
113
+ }).catch((err) => {
114
+ clearTimeout(timeout);
115
+ reject(err);
116
+ });
117
+ });
118
+ this.connections.set(config.name, { config, tools, connected: true, transport: 'stdio', process: child });
119
+ return tools;
120
+ }
121
+ async callToolStdio(conn, toolName, input) {
122
+ const child = conn.process;
123
+ if (!child || !child.stdin || !child.stdout) {
124
+ return { data: `stdio MCP server "${conn.config.name}" not running`, isError: true };
32
125
  }
33
- catch (err) {
34
- const msg = err instanceof Error ? err.message : String(err);
35
- throw new Error(`Failed to connect to MCP server "${config.name}" at ${config.url}: ${msg}`);
126
+ return new Promise((resolve) => {
127
+ const id = ++rpcIdCounter;
128
+ const timeout = setTimeout(() => {
129
+ resolve({ data: `MCP tool call timed out after 60s`, isError: true });
130
+ }, 60_000);
131
+ const rl = createInterface({ input: child.stdout });
132
+ const onLine = (line) => {
133
+ try {
134
+ const msg = JSON.parse(line);
135
+ if (msg.id === id) {
136
+ clearTimeout(timeout);
137
+ rl.removeListener('line', onLine);
138
+ rl.close();
139
+ if (msg.error) {
140
+ resolve({ data: msg.error.message, isError: true });
141
+ }
142
+ else {
143
+ const result = msg.result;
144
+ const text = result?.content?.map(c => c.text ?? '').join('') ?? JSON.stringify(result);
145
+ resolve({ data: text, isError: result?.isError });
146
+ }
147
+ }
148
+ }
149
+ catch { /* ignore */ }
150
+ };
151
+ rl.on('line', onLine);
152
+ const req = { jsonrpc: '2.0', id, method: 'tools/call', params: { name: toolName, arguments: input } };
153
+ child.stdin.write(JSON.stringify(req) + '\n');
154
+ });
155
+ }
156
+ // ─── SSE transport ──────────────────────────────────────────
157
+ async connectSse(config) {
158
+ const url = config.url.replace(/\/$/, '');
159
+ const headers = {};
160
+ if (config.apiKey)
161
+ headers['Authorization'] = `Bearer ${config.apiKey}`;
162
+ // SSE endpoint for tool listing
163
+ const response = await fetch(`${url}/sse/tools`, { headers });
164
+ if (!response.ok)
165
+ throw new Error(`SSE MCP server returned ${response.status}`);
166
+ const text = await response.text();
167
+ // Parse SSE data lines
168
+ const tools = [];
169
+ for (const line of text.split('\n')) {
170
+ if (line.startsWith('data: ')) {
171
+ try {
172
+ const data = JSON.parse(line.slice(6));
173
+ if (data.tools)
174
+ tools.push(...data.tools);
175
+ else if (data.name)
176
+ tools.push(data);
177
+ }
178
+ catch { /* skip malformed */ }
179
+ }
36
180
  }
181
+ // Fallback: try regular JSON if SSE parsing yields nothing
182
+ if (tools.length === 0) {
183
+ try {
184
+ const jsonData = JSON.parse(text);
185
+ if (jsonData.tools)
186
+ tools.push(...jsonData.tools);
187
+ }
188
+ catch { /* not JSON either */ }
189
+ }
190
+ this.connections.set(config.name, { config, tools, connected: true, transport: 'sse' });
191
+ return tools;
192
+ }
193
+ async callToolSse(conn, toolName, input) {
194
+ // SSE tool calls use POST, response may be SSE stream
195
+ return this.callToolHttp(conn, toolName, input);
37
196
  }
38
197
  /** Disconnect from an MCP server. */
39
198
  disconnect(name) {
199
+ const conn = this.connections.get(name);
200
+ if (!conn)
201
+ return false;
202
+ // Kill stdio child process if running
203
+ if (conn.process) {
204
+ try {
205
+ conn.process.kill();
206
+ }
207
+ catch { /* ignore */ }
208
+ }
40
209
  return this.connections.delete(name);
41
210
  }
42
211
  /** List connected MCP servers. */
@@ -46,35 +215,20 @@ export class McpClient {
46
215
  url: c.config.url,
47
216
  tools: c.tools.length,
48
217
  connected: c.connected,
218
+ transport: c.transport,
49
219
  }));
50
220
  }
51
- /** Call a tool on an MCP server. */
221
+ /** Call a tool on an MCP server. Dispatches to the appropriate transport. */
52
222
  async callTool(serverName, toolName, input) {
53
223
  const conn = this.connections.get(serverName);
54
224
  if (!conn)
55
225
  throw new Error(`Not connected to MCP server "${serverName}"`);
56
- const url = conn.config.url.replace(/\/$/, '');
57
- const headers = {
58
- 'Content-Type': 'application/json',
59
- };
60
- if (conn.config.apiKey) {
61
- headers['Authorization'] = `Bearer ${conn.config.apiKey}`;
62
- }
63
226
  try {
64
- const response = await fetch(`${url}/tools/${toolName}`, {
65
- method: 'POST',
66
- headers,
67
- body: JSON.stringify({ input }),
68
- });
69
- if (!response.ok) {
70
- const text = await response.text();
71
- return { data: `MCP tool error (${response.status}): ${text}`, isError: true };
72
- }
73
- const data = await response.json();
74
- if (data.error) {
75
- return { data: data.error, isError: true };
227
+ switch (conn.transport) {
228
+ case 'stdio': return await this.callToolStdio(conn, toolName, input);
229
+ case 'sse': return await this.callToolSse(conn, toolName, input);
230
+ default: return await this.callToolHttp(conn, toolName, input);
76
231
  }
77
- return { data: data.result ?? JSON.stringify(data) };
78
232
  }
79
233
  catch (err) {
80
234
  const msg = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/plugins/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * TaskScheduler — cron-like background task automation for cmdr.
3
+ *
4
+ * Supports:
5
+ * - Interval-based tasks (run every N seconds/minutes)
6
+ * - One-shot delayed tasks (run after N seconds)
7
+ * - Named tasks with status tracking
8
+ * - Graceful shutdown
9
+ */
10
+ export interface ScheduledTask {
11
+ readonly id: string;
12
+ readonly name: string;
13
+ readonly handler: () => Promise<void> | void;
14
+ readonly intervalMs?: number;
15
+ readonly delayMs?: number;
16
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
17
+ lastRun?: Date;
18
+ nextRun?: Date;
19
+ runCount: number;
20
+ error?: string;
21
+ }
22
+ export declare class TaskScheduler {
23
+ private tasks;
24
+ private running;
25
+ /** Start the scheduler. */
26
+ start(): void;
27
+ /** Stop all scheduled tasks. */
28
+ stop(): void;
29
+ /** Schedule a recurring task. */
30
+ scheduleInterval(name: string, intervalMs: number, handler: () => Promise<void> | void): string;
31
+ /** Schedule a one-shot delayed task. */
32
+ scheduleOnce(name: string, delayMs: number, handler: () => Promise<void> | void): string;
33
+ /** Cancel a specific task. */
34
+ cancel(id: string): boolean;
35
+ /** List all scheduled tasks with their status. */
36
+ list(): Array<{
37
+ id: string;
38
+ name: string;
39
+ status: string;
40
+ runCount: number;
41
+ lastRun?: Date;
42
+ nextRun?: Date;
43
+ error?: string;
44
+ }>;
45
+ /** Get a specific task by ID. */
46
+ get(id: string): ScheduledTask | undefined;
47
+ /** Number of active (pending/running) tasks. */
48
+ get activeCount(): number;
49
+ private arm;
50
+ }
51
+ //# sourceMappingURL=task-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-scheduler.d.ts","sourceRoot":"","sources":["../../../src/scheduling/task-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;IACpE,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAQD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAQ;IAEvB,2BAA2B;IAC3B,KAAK,IAAI,IAAI;IAQb,gCAAgC;IAChC,IAAI,IAAI,IAAI;IAcZ,iCAAiC;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM;IAa/F,wCAAwC;IACxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM;IAaxF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAY3B,kDAAkD;IAClD,IAAI,IAAI,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,IAAI,CAAA;QACd,OAAO,CAAC,EAAE,IAAI,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAC;IAYF,iCAAiC;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,gDAAgD;IAChD,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED,OAAO,CAAC,GAAG;CA0BZ"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * TaskScheduler — cron-like background task automation for cmdr.
3
+ *
4
+ * Supports:
5
+ * - Interval-based tasks (run every N seconds/minutes)
6
+ * - One-shot delayed tasks (run after N seconds)
7
+ * - Named tasks with status tracking
8
+ * - Graceful shutdown
9
+ */
10
+ let taskIdCounter = 0;
11
+ export class TaskScheduler {
12
+ tasks = new Map();
13
+ running = false;
14
+ /** Start the scheduler. */
15
+ start() {
16
+ this.running = true;
17
+ // Arm all pending tasks
18
+ for (const task of this.tasks.values()) {
19
+ if (task.status === 'pending')
20
+ this.arm(task);
21
+ }
22
+ }
23
+ /** Stop all scheduled tasks. */
24
+ stop() {
25
+ this.running = false;
26
+ for (const task of this.tasks.values()) {
27
+ if (task.timer) {
28
+ clearTimeout(task.timer);
29
+ clearInterval(task.timer);
30
+ task.timer = undefined;
31
+ }
32
+ if (task.status === 'pending' || task.status === 'running') {
33
+ task.status = 'cancelled';
34
+ }
35
+ }
36
+ }
37
+ /** Schedule a recurring task. */
38
+ scheduleInterval(name, intervalMs, handler) {
39
+ const id = `task_${++taskIdCounter}_${Date.now()}`;
40
+ const task = {
41
+ id, name, handler, intervalMs,
42
+ status: 'pending',
43
+ runCount: 0,
44
+ nextRun: new Date(Date.now() + intervalMs),
45
+ };
46
+ this.tasks.set(id, task);
47
+ if (this.running)
48
+ this.arm(task);
49
+ return id;
50
+ }
51
+ /** Schedule a one-shot delayed task. */
52
+ scheduleOnce(name, delayMs, handler) {
53
+ const id = `task_${++taskIdCounter}_${Date.now()}`;
54
+ const task = {
55
+ id, name, handler, delayMs,
56
+ status: 'pending',
57
+ runCount: 0,
58
+ nextRun: new Date(Date.now() + delayMs),
59
+ };
60
+ this.tasks.set(id, task);
61
+ if (this.running)
62
+ this.arm(task);
63
+ return id;
64
+ }
65
+ /** Cancel a specific task. */
66
+ cancel(id) {
67
+ const task = this.tasks.get(id);
68
+ if (!task)
69
+ return false;
70
+ if (task.timer) {
71
+ clearTimeout(task.timer);
72
+ clearInterval(task.timer);
73
+ task.timer = undefined;
74
+ }
75
+ task.status = 'cancelled';
76
+ return true;
77
+ }
78
+ /** List all scheduled tasks with their status. */
79
+ list() {
80
+ return Array.from(this.tasks.values()).map(t => ({
81
+ id: t.id,
82
+ name: t.name,
83
+ status: t.status,
84
+ runCount: t.runCount,
85
+ lastRun: t.lastRun,
86
+ nextRun: t.nextRun,
87
+ error: t.error,
88
+ }));
89
+ }
90
+ /** Get a specific task by ID. */
91
+ get(id) {
92
+ return this.tasks.get(id);
93
+ }
94
+ /** Number of active (pending/running) tasks. */
95
+ get activeCount() {
96
+ return Array.from(this.tasks.values()).filter(t => t.status === 'pending' || t.status === 'running').length;
97
+ }
98
+ arm(task) {
99
+ const execute = async () => {
100
+ task.status = 'running';
101
+ task.lastRun = new Date();
102
+ try {
103
+ await task.handler();
104
+ task.runCount++;
105
+ task.error = undefined;
106
+ if (task.intervalMs) {
107
+ task.status = 'pending';
108
+ task.nextRun = new Date(Date.now() + task.intervalMs);
109
+ }
110
+ else {
111
+ task.status = 'completed';
112
+ }
113
+ }
114
+ catch (err) {
115
+ task.error = err instanceof Error ? err.message : String(err);
116
+ task.status = 'failed';
117
+ }
118
+ };
119
+ if (task.intervalMs) {
120
+ task.timer = setInterval(execute, task.intervalMs);
121
+ }
122
+ else if (task.delayMs) {
123
+ task.timer = setTimeout(execute, task.delayMs);
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=task-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-scheduler.js","sourceRoot":"","sources":["../../../src/scheduling/task-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,IAAI,aAAa,GAAG,CAAC,CAAA;AAErB,MAAM,OAAO,aAAa;IAChB,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAA;IACpC,OAAO,GAAG,KAAK,CAAA;IAEvB,2BAA2B;IAC3B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,wBAAwB;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,IAAI,CAAC,KAAsC,CAAC,CAAA;gBACzD,aAAa,CAAC,IAAI,CAAC,KAAuC,CAAC,CAAA;gBAC3D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;YACxB,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3D,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,gBAAgB,CAAC,IAAY,EAAE,UAAkB,EAAE,OAAmC;QACpF,MAAM,EAAE,GAAG,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAClD,MAAM,IAAI,GAAc;YACtB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU;YAC7B,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;SAC3C,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,wCAAwC;IACxC,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,OAAmC;QAC7E,MAAM,EAAE,GAAG,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAClD,MAAM,IAAI,GAAc;YACtB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;YAC1B,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;SACxC,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,EAAU;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QACvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAsC,CAAC,CAAA;YACzD,aAAa,CAAC,IAAI,CAAC,KAAuC,CAAC,CAAA;YAC3D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACxB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,kDAAkD;IAClD,IAAI;QASF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/C,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAA;IACL,CAAC;IAED,iCAAiC;IACjC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,gDAAgD;IAChD,IAAI,WAAW;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACtD,CAAC,MAAM,CAAA;IACV,CAAC;IAEO,GAAG,CAAC,IAAe;QACzB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAA;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBACpB,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;gBACtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;oBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;gBACvD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;gBAC3B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC7D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;YACxB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -5,6 +5,7 @@
5
5
  * Static modules are identical across turns, enabling Ollama KV cache reuse.
6
6
  */
7
7
  import type { ProjectContext } from '../core/types.js';
8
+ import { type CacheStats } from './prompt-cache.js';
8
9
  export interface PromptModule {
9
10
  id: string;
10
11
  content: string;
@@ -22,17 +23,22 @@ export declare const PROMPT_PRIORITIES: {
22
23
  };
23
24
  export declare class PromptBuilder {
24
25
  private modules;
26
+ private readonly cache;
25
27
  addModule(mod: PromptModule): void;
26
28
  updateModule(id: string, content: string): void;
27
29
  removeModule(id: string): void;
28
30
  build(): string;
29
31
  /** Returns only static modules — for KV cache prefix estimation. */
30
32
  getStaticPrefix(): string;
33
+ /** Get prompt cache hit/miss statistics. */
34
+ getCacheStats(): CacheStats;
31
35
  }
32
36
  export interface PromptBuildOptions {
33
37
  basePrompt: string;
34
38
  projectContext: ProjectContext;
35
39
  model: string;
40
+ /** Persistent memory content (from MemoryManager). */
41
+ memoryPrompt?: string;
36
42
  }
37
43
  export declare function buildSystemPrompt(options: PromptBuildOptions): string;
38
44
  //# sourceMappingURL=prompt-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAID,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAA;AAIV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IAEjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAIlC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,MAAM;IAQf,oEAAoE;IACpE,eAAe,IAAI,MAAM;CAQ1B;AAID,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAmErE"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAIhE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAID,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAA;AAIV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAIlC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,MAAM;IAcf,oEAAoE;IACpE,eAAe,IAAI,MAAM;IASzB,4CAA4C;IAC5C,aAAa,IAAI,UAAU;CAG5B;AAID,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA6ErE"}
@@ -4,6 +4,7 @@
4
4
  * Each module has a priority (lower = earlier) and a static flag.
5
5
  * Static modules are identical across turns, enabling Ollama KV cache reuse.
6
6
  */
7
+ import { PromptCache } from './prompt-cache.js';
7
8
  /* ── Priority constants ────────────────────────────────────────────── */
8
9
  export const PROMPT_PRIORITIES = {
9
10
  ROLE: 10,
@@ -17,6 +18,7 @@ export const PROMPT_PRIORITIES = {
17
18
  /* ── PromptBuilder class ───────────────────────────────────────────── */
18
19
  export class PromptBuilder {
19
20
  modules = new Map();
21
+ cache = new PromptCache();
20
22
  addModule(mod) {
21
23
  this.modules.set(mod.id, mod);
22
24
  }
@@ -30,8 +32,12 @@ export class PromptBuilder {
30
32
  this.modules.delete(id);
31
33
  }
32
34
  build() {
33
- return [...this.modules.values()]
34
- .sort((a, b) => a.priority - b.priority)
35
+ const sorted = [...this.modules.values()]
36
+ .sort((a, b) => a.priority - b.priority);
37
+ // Track static prefix for KV cache hit detection
38
+ const staticPrefix = sorted.filter(m => m.isStatic).map(m => m.content).filter(c => c.length > 0).join('\n\n');
39
+ this.cache.checkPrefix(staticPrefix);
40
+ return sorted
35
41
  .map(m => m.content)
36
42
  .filter(c => c.length > 0)
37
43
  .join('\n\n');
@@ -45,6 +51,10 @@ export class PromptBuilder {
45
51
  .filter(c => c.length > 0)
46
52
  .join('\n\n');
47
53
  }
54
+ /** Get prompt cache hit/miss statistics. */
55
+ getCacheStats() {
56
+ return this.cache.getStats();
57
+ }
48
58
  }
49
59
  export function buildSystemPrompt(options) {
50
60
  const builder = new PromptBuilder();
@@ -108,6 +118,15 @@ export function buildSystemPrompt(options) {
108
118
  isStatic: false,
109
119
  });
110
120
  }
121
+ // 25: Persistent memory — cross-session learned context (STATIC per session)
122
+ if (options.memoryPrompt) {
123
+ builder.addModule({
124
+ id: 'memory',
125
+ content: `<persistent_memory>\nThese are your saved notes from previous sessions. Use them to inform your work. Update memory with memory_write when you learn something new about this project.\n\n${options.memoryPrompt}\n</persistent_memory>`,
126
+ priority: 25, // After role, before project instructions
127
+ isStatic: true,
128
+ });
129
+ }
111
130
  return builder.build();
112
131
  }
113
132
  //# sourceMappingURL=prompt-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAA;AAWhE,0EAA0E;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;IACf,oBAAoB,EAAE,EAAE;IACxB,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,EAAE;IACnB,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,EAAE;CACd,CAAA;AAEV,0EAA0E;AAE1E,MAAM,OAAO,aAAa;IAChB,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAA;IAChC,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;IAE1C,SAAS,CAAC,GAAiB;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAe;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QAE1C,iDAAiD;QACjD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9G,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAEpC,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAED,oEAAoE;IACpE,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAED,4CAA4C;IAC5C,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC9B,CAAC;CACF;AAYD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAA;IAElC,yCAAyC;IACzC,OAAO,CAAC,SAAS,CAAC;QAChB,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,OAAO,CAAC,UAAU;QAC3B,QAAQ,EAAE,iBAAiB,CAAC,IAAI;QAChC,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,0DAA0D;IAC1D,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzB,OAAO,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,sBAAsB;YAC1B,OAAO,EAAE,+IAA+I,GAAG,CAAC,gBAAgB,2BAA2B;YACvM,QAAQ,EAAE,iBAAiB,CAAC,oBAAoB;YAChD,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACzC,CAAC,CAAC,qCAAqC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtF,CAAC,CAAC,EAAE,CAAA;YACN,OAAO,gBAAgB,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,YAAY,GAAG,UAAU,YAAY,CAAA;QACrF,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,QAAQ,EAAE,iBAAiB,CAAC,MAAM;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,IAAI,GAAG,CAAC,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IACnE,IAAI,GAAG,CAAC,cAAc;QAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAA;IAEnF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,iBAAiB;YACrB,OAAO,EAAE,qBAAqB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE;YAC7E,QAAQ,EAAE,iBAAiB,CAAC,eAAe;YAC3C,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;IACJ,CAAC;IAED,4DAA4D;IAC5D,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,IAAI,GAAG,CAAC,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAEpE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,iBAAiB;YACrB,OAAO,EAAE,aAAa,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/C,QAAQ,EAAE,iBAAiB,CAAC,eAAe;YAC3C,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,SAAS,CAAC;YAChB,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,6LAA6L,OAAO,CAAC,YAAY,wBAAwB;YAClP,QAAQ,EAAE,EAAE,EAAG,0CAA0C;YACzD,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAA;AACxB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * PromptCache — tracks static prompt prefix hashes to enable KV cache reuse.
3
+ *
4
+ * When the static prefix (system prompt, project instructions, skills) doesn't
5
+ * change between turns, the LLM can reuse its KV cache for those tokens,
6
+ * dramatically reducing input token processing time.
7
+ *
8
+ * Works with PromptBuilder's getStaticPrefix() to detect cache hits/misses.
9
+ */
10
+ export interface CacheStats {
11
+ hits: number;
12
+ misses: number;
13
+ estimatedTokensSaved: number;
14
+ lastPrefixHash: string | null;
15
+ }
16
+ export declare class PromptCache {
17
+ private lastPrefixHash;
18
+ private hits;
19
+ private misses;
20
+ private estimatedTokensSaved;
21
+ /**
22
+ * Check whether the static prefix has changed since last turn.
23
+ * Returns true if prefix is unchanged (cache hit).
24
+ */
25
+ checkPrefix(staticPrefix: string): boolean;
26
+ /** Reset tracking (e.g. on model switch). */
27
+ reset(): void;
28
+ /** Get cache statistics. */
29
+ getStats(): CacheStats;
30
+ /** Hit rate as a percentage (0-100). */
31
+ get hitRate(): number;
32
+ }
33
+ //# sourceMappingURL=prompt-cache.d.ts.map