agent-working-memory 0.3.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +311 -0
  3. package/dist/api/index.d.ts +2 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +2 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/routes.d.ts +53 -0
  8. package/dist/api/routes.d.ts.map +1 -0
  9. package/dist/api/routes.js +388 -0
  10. package/dist/api/routes.js.map +1 -0
  11. package/dist/cli.d.ts +12 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +245 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/core/decay.d.ts +36 -0
  16. package/dist/core/decay.d.ts.map +1 -0
  17. package/dist/core/decay.js +38 -0
  18. package/dist/core/decay.js.map +1 -0
  19. package/dist/core/embeddings.d.ts +33 -0
  20. package/dist/core/embeddings.d.ts.map +1 -0
  21. package/dist/core/embeddings.js +76 -0
  22. package/dist/core/embeddings.js.map +1 -0
  23. package/dist/core/hebbian.d.ts +38 -0
  24. package/dist/core/hebbian.d.ts.map +1 -0
  25. package/dist/core/hebbian.js +74 -0
  26. package/dist/core/hebbian.js.map +1 -0
  27. package/dist/core/index.d.ts +4 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +4 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/query-expander.d.ts +24 -0
  32. package/dist/core/query-expander.d.ts.map +1 -0
  33. package/dist/core/query-expander.js +58 -0
  34. package/dist/core/query-expander.js.map +1 -0
  35. package/dist/core/reranker.d.ts +25 -0
  36. package/dist/core/reranker.d.ts.map +1 -0
  37. package/dist/core/reranker.js +75 -0
  38. package/dist/core/reranker.js.map +1 -0
  39. package/dist/core/salience.d.ts +30 -0
  40. package/dist/core/salience.d.ts.map +1 -0
  41. package/dist/core/salience.js +81 -0
  42. package/dist/core/salience.js.map +1 -0
  43. package/dist/engine/activation.d.ts +38 -0
  44. package/dist/engine/activation.d.ts.map +1 -0
  45. package/dist/engine/activation.js +516 -0
  46. package/dist/engine/activation.js.map +1 -0
  47. package/dist/engine/connections.d.ts +31 -0
  48. package/dist/engine/connections.d.ts.map +1 -0
  49. package/dist/engine/connections.js +74 -0
  50. package/dist/engine/connections.js.map +1 -0
  51. package/dist/engine/consolidation-scheduler.d.ts +31 -0
  52. package/dist/engine/consolidation-scheduler.d.ts.map +1 -0
  53. package/dist/engine/consolidation-scheduler.js +115 -0
  54. package/dist/engine/consolidation-scheduler.js.map +1 -0
  55. package/dist/engine/consolidation.d.ts +62 -0
  56. package/dist/engine/consolidation.d.ts.map +1 -0
  57. package/dist/engine/consolidation.js +368 -0
  58. package/dist/engine/consolidation.js.map +1 -0
  59. package/dist/engine/eval.d.ts +22 -0
  60. package/dist/engine/eval.d.ts.map +1 -0
  61. package/dist/engine/eval.js +79 -0
  62. package/dist/engine/eval.js.map +1 -0
  63. package/dist/engine/eviction.d.ts +29 -0
  64. package/dist/engine/eviction.d.ts.map +1 -0
  65. package/dist/engine/eviction.js +86 -0
  66. package/dist/engine/eviction.js.map +1 -0
  67. package/dist/engine/index.d.ts +7 -0
  68. package/dist/engine/index.d.ts.map +1 -0
  69. package/dist/engine/index.js +7 -0
  70. package/dist/engine/index.js.map +1 -0
  71. package/dist/engine/retraction.d.ts +32 -0
  72. package/dist/engine/retraction.d.ts.map +1 -0
  73. package/dist/engine/retraction.js +77 -0
  74. package/dist/engine/retraction.js.map +1 -0
  75. package/dist/engine/staging.d.ts +33 -0
  76. package/dist/engine/staging.d.ts.map +1 -0
  77. package/dist/engine/staging.js +63 -0
  78. package/dist/engine/staging.js.map +1 -0
  79. package/dist/index.d.ts +2 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +95 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/mcp.d.ts +24 -0
  84. package/dist/mcp.d.ts.map +1 -0
  85. package/dist/mcp.js +532 -0
  86. package/dist/mcp.js.map +1 -0
  87. package/dist/storage/index.d.ts +2 -0
  88. package/dist/storage/index.d.ts.map +1 -0
  89. package/dist/storage/index.js +2 -0
  90. package/dist/storage/index.js.map +1 -0
  91. package/dist/storage/sqlite.d.ts +116 -0
  92. package/dist/storage/sqlite.d.ts.map +1 -0
  93. package/dist/storage/sqlite.js +750 -0
  94. package/dist/storage/sqlite.js.map +1 -0
  95. package/dist/types/agent.d.ts +30 -0
  96. package/dist/types/agent.d.ts.map +1 -0
  97. package/dist/types/agent.js +23 -0
  98. package/dist/types/agent.js.map +1 -0
  99. package/dist/types/checkpoint.d.ts +50 -0
  100. package/dist/types/checkpoint.d.ts.map +1 -0
  101. package/dist/types/checkpoint.js +8 -0
  102. package/dist/types/checkpoint.js.map +1 -0
  103. package/dist/types/engram.d.ts +165 -0
  104. package/dist/types/engram.d.ts.map +1 -0
  105. package/dist/types/engram.js +8 -0
  106. package/dist/types/engram.js.map +1 -0
  107. package/dist/types/eval.d.ts +84 -0
  108. package/dist/types/eval.d.ts.map +1 -0
  109. package/dist/types/eval.js +11 -0
  110. package/dist/types/eval.js.map +1 -0
  111. package/dist/types/index.d.ts +5 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +5 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +55 -0
  116. package/src/api/index.ts +1 -0
  117. package/src/api/routes.ts +528 -0
  118. package/src/cli.ts +260 -0
  119. package/src/core/decay.ts +61 -0
  120. package/src/core/embeddings.ts +82 -0
  121. package/src/core/hebbian.ts +91 -0
  122. package/src/core/index.ts +3 -0
  123. package/src/core/query-expander.ts +64 -0
  124. package/src/core/reranker.ts +99 -0
  125. package/src/core/salience.ts +95 -0
  126. package/src/engine/activation.ts +577 -0
  127. package/src/engine/connections.ts +101 -0
  128. package/src/engine/consolidation-scheduler.ts +123 -0
  129. package/src/engine/consolidation.ts +443 -0
  130. package/src/engine/eval.ts +100 -0
  131. package/src/engine/eviction.ts +99 -0
  132. package/src/engine/index.ts +6 -0
  133. package/src/engine/retraction.ts +98 -0
  134. package/src/engine/staging.ts +72 -0
  135. package/src/index.ts +100 -0
  136. package/src/mcp.ts +635 -0
  137. package/src/storage/index.ts +1 -0
  138. package/src/storage/sqlite.ts +893 -0
  139. package/src/types/agent.ts +65 -0
  140. package/src/types/checkpoint.ts +44 -0
  141. package/src/types/engram.ts +194 -0
  142. package/src/types/eval.ts +98 -0
  143. package/src/types/index.ts +4 -0
package/dist/mcp.js ADDED
@@ -0,0 +1,532 @@
1
+ /**
2
+ * MCP Server — Model Context Protocol interface for AgentWorkingMemory.
3
+ *
4
+ * Runs as a stdio-based MCP server that Claude Code connects to directly.
5
+ * Uses the storage and engine layers in-process (no HTTP overhead).
6
+ *
7
+ * Tools exposed (11):
8
+ * memory_write — store a memory (salience filter decides disposition)
9
+ * memory_recall — activate memories by context (cognitive retrieval)
10
+ * memory_feedback — report whether a recalled memory was useful
11
+ * memory_retract — invalidate a wrong memory with optional correction
12
+ * memory_stats — get memory health metrics
13
+ * memory_checkpoint — save structured execution state (survives compaction)
14
+ * memory_restore — restore state + targeted recall after compaction
15
+ * memory_task_add — create a prioritized task
16
+ * memory_task_update — change task status, priority, or blocking
17
+ * memory_task_list — list tasks filtered by status
18
+ * memory_task_next — get the highest-priority actionable task
19
+ *
20
+ * Run: npx tsx src/mcp.ts
21
+ * Config: add to ~/.claude.json or .mcp.json
22
+ */
23
+ import { readFileSync } from 'node:fs';
24
+ import { resolve } from 'node:path';
25
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
26
+ // Load .env file if present (no external dependency)
27
+ try {
28
+ const envPath = resolve(process.cwd(), '.env');
29
+ const envContent = readFileSync(envPath, 'utf-8');
30
+ for (const line of envContent.split('\n')) {
31
+ const trimmed = line.trim();
32
+ if (!trimmed || trimmed.startsWith('#'))
33
+ continue;
34
+ const eqIdx = trimmed.indexOf('=');
35
+ if (eqIdx === -1)
36
+ continue;
37
+ const key = trimmed.slice(0, eqIdx).trim();
38
+ const val = trimmed.slice(eqIdx + 1).trim().replace(/^["']|["']$/g, '');
39
+ if (!process.env[key])
40
+ process.env[key] = val;
41
+ }
42
+ }
43
+ catch { /* No .env file */ }
44
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
45
+ import { z } from 'zod';
46
+ import { EngramStore } from './storage/sqlite.js';
47
+ import { ActivationEngine } from './engine/activation.js';
48
+ import { ConnectionEngine } from './engine/connections.js';
49
+ import { StagingBuffer } from './engine/staging.js';
50
+ import { EvictionEngine } from './engine/eviction.js';
51
+ import { RetractionEngine } from './engine/retraction.js';
52
+ import { EvalEngine } from './engine/eval.js';
53
+ import { ConsolidationEngine } from './engine/consolidation.js';
54
+ import { ConsolidationScheduler } from './engine/consolidation-scheduler.js';
55
+ import { evaluateSalience } from './core/salience.js';
56
+ import { DEFAULT_AGENT_CONFIG } from './types/agent.js';
57
+ import { embed } from './core/embeddings.js';
58
+ // --- Setup ---
59
+ const DB_PATH = process.env.AWM_DB_PATH ?? 'memory.db';
60
+ const AGENT_ID = process.env.AWM_AGENT_ID ?? 'claude-code';
61
+ const store = new EngramStore(DB_PATH);
62
+ const activationEngine = new ActivationEngine(store);
63
+ const connectionEngine = new ConnectionEngine(store, activationEngine);
64
+ const stagingBuffer = new StagingBuffer(store, activationEngine);
65
+ const evictionEngine = new EvictionEngine(store);
66
+ const retractionEngine = new RetractionEngine(store);
67
+ const evalEngine = new EvalEngine(store);
68
+ const consolidationEngine = new ConsolidationEngine(store);
69
+ const consolidationScheduler = new ConsolidationScheduler(store, consolidationEngine);
70
+ stagingBuffer.start(DEFAULT_AGENT_CONFIG.stagingTtlMs);
71
+ consolidationScheduler.start();
72
+ const server = new McpServer({
73
+ name: 'agent-working-memory',
74
+ version: '0.3.0',
75
+ });
76
+ // --- Tools ---
77
+ server.tool('memory_write', `Store a memory. The salience filter decides whether it's worth keeping (active), needs more evidence (staging), or should be discarded.
78
+
79
+ Use this when you learn something that might be useful later:
80
+ - Discoveries about the codebase, bugs, or architecture
81
+ - Decisions you made and why
82
+ - Errors encountered and how they were resolved
83
+ - User preferences or project patterns
84
+
85
+ The concept should be a short label (3-8 words). The content should be the full detail.`, {
86
+ concept: z.string().describe('Short label for this memory (3-8 words)'),
87
+ content: z.string().describe('Full detail of what was learned'),
88
+ tags: z.array(z.string()).optional().describe('Optional tags for categorization'),
89
+ event_type: z.enum(['observation', 'decision', 'friction', 'surprise', 'causal'])
90
+ .optional().default('observation')
91
+ .describe('Type of event: observation (default), decision, friction (error/blocker), surprise, causal (root cause)'),
92
+ surprise: z.number().min(0).max(1).optional().default(0.3)
93
+ .describe('How surprising was this? 0=expected, 1=very unexpected'),
94
+ decision_made: z.boolean().optional().default(false)
95
+ .describe('Was a decision made? True boosts importance'),
96
+ causal_depth: z.number().min(0).max(1).optional().default(0.3)
97
+ .describe('How deep is the causal understanding? 0=surface, 1=root cause'),
98
+ resolution_effort: z.number().min(0).max(1).optional().default(0.3)
99
+ .describe('How much effort to resolve? 0=trivial, 1=significant debugging'),
100
+ }, async (params) => {
101
+ const salience = evaluateSalience({
102
+ content: params.content,
103
+ eventType: params.event_type,
104
+ surprise: params.surprise,
105
+ decisionMade: params.decision_made,
106
+ causalDepth: params.causal_depth,
107
+ resolutionEffort: params.resolution_effort,
108
+ });
109
+ if (salience.disposition === 'discard') {
110
+ return {
111
+ content: [{
112
+ type: 'text',
113
+ text: `Memory discarded (salience ${salience.score.toFixed(2)} below threshold). Not worth storing.`,
114
+ }],
115
+ };
116
+ }
117
+ const engram = store.createEngram({
118
+ agentId: AGENT_ID,
119
+ concept: params.concept,
120
+ content: params.content,
121
+ tags: params.tags,
122
+ salience: salience.score,
123
+ salienceFeatures: salience.features,
124
+ reasonCodes: salience.reasonCodes,
125
+ ttl: salience.disposition === 'staging' ? DEFAULT_AGENT_CONFIG.stagingTtlMs : undefined,
126
+ });
127
+ if (salience.disposition === 'staging') {
128
+ store.updateStage(engram.id, 'staging');
129
+ }
130
+ else {
131
+ connectionEngine.enqueue(engram.id);
132
+ }
133
+ // Generate embedding asynchronously (don't block response)
134
+ embed(`${params.concept} ${params.content}`).then(vec => {
135
+ store.updateEmbedding(engram.id, vec);
136
+ }).catch(() => { }); // Embedding failure is non-fatal
137
+ // Auto-checkpoint: track write
138
+ try {
139
+ store.updateAutoCheckpointWrite(AGENT_ID, engram.id);
140
+ }
141
+ catch { /* non-fatal */ }
142
+ return {
143
+ content: [{
144
+ type: 'text',
145
+ text: `Memory stored (${salience.disposition}). ID: ${engram.id}\nConcept: ${params.concept}\nSalience: ${salience.score.toFixed(2)}`,
146
+ }],
147
+ };
148
+ });
149
+ server.tool('memory_recall', `Recall memories relevant to a context. Uses cognitive activation — not keyword search.
150
+
151
+ Use this when you need to remember something:
152
+ - Starting a new task (recall relevant past experience)
153
+ - Debugging (recall similar errors and solutions)
154
+ - Making decisions (recall past decisions and outcomes)
155
+
156
+ Returns the most relevant memories ranked by a composite score of text relevance, temporal recency, and associative strength.`, {
157
+ context: z.string().describe('What are you thinking about? Describe the current situation or question'),
158
+ limit: z.number().optional().default(5).describe('Max memories to return (default 5)'),
159
+ min_score: z.number().optional().default(0.05).describe('Minimum relevance score (default 0.05)'),
160
+ include_staging: z.boolean().optional().default(false).describe('Include weak/unconfirmed memories?'),
161
+ use_reranker: z.boolean().optional().default(true).describe('Use cross-encoder re-ranking for better relevance (default true)'),
162
+ use_expansion: z.boolean().optional().default(true).describe('Expand query with synonyms for better recall (default true)'),
163
+ }, async (params) => {
164
+ const results = await activationEngine.activate({
165
+ agentId: AGENT_ID,
166
+ context: params.context,
167
+ limit: params.limit,
168
+ minScore: params.min_score,
169
+ includeStaging: params.include_staging,
170
+ useReranker: params.use_reranker,
171
+ useExpansion: params.use_expansion,
172
+ });
173
+ // Auto-checkpoint: track recall
174
+ try {
175
+ const ids = results.map(r => r.engram.id);
176
+ store.updateAutoCheckpointRecall(AGENT_ID, params.context, ids);
177
+ }
178
+ catch { /* non-fatal */ }
179
+ if (results.length === 0) {
180
+ return {
181
+ content: [{
182
+ type: 'text',
183
+ text: 'No relevant memories found.',
184
+ }],
185
+ };
186
+ }
187
+ const lines = results.map((r, i) => {
188
+ const tags = r.engram.tags?.length ? ` [${r.engram.tags.join(', ')}]` : '';
189
+ return `${i + 1}. **${r.engram.concept}** (score: ${r.score.toFixed(3)})${tags}\n ${r.engram.content}\n _${r.why}_\n ID: ${r.engram.id}`;
190
+ });
191
+ return {
192
+ content: [{
193
+ type: 'text',
194
+ text: `Recalled ${results.length} memories:\n\n${lines.join('\n\n')}`,
195
+ }],
196
+ };
197
+ });
198
+ server.tool('memory_feedback', `Report whether a recalled memory was actually useful. This updates the memory's confidence score — useful memories become stronger, useless ones weaken.
199
+
200
+ Always call this after using a recalled memory so the system learns what's valuable.`, {
201
+ engram_id: z.string().describe('ID of the memory (from memory_recall results)'),
202
+ useful: z.boolean().describe('Was this memory actually helpful?'),
203
+ context: z.string().optional().describe('Brief note on why it was/wasn\'t useful'),
204
+ }, async (params) => {
205
+ store.logRetrievalFeedback(null, params.engram_id, params.useful, params.context ?? '');
206
+ const engram = store.getEngram(params.engram_id);
207
+ if (engram) {
208
+ const delta = params.useful
209
+ ? DEFAULT_AGENT_CONFIG.feedbackPositiveBoost
210
+ : -DEFAULT_AGENT_CONFIG.feedbackNegativePenalty;
211
+ store.updateConfidence(engram.id, engram.confidence + delta);
212
+ }
213
+ return {
214
+ content: [{
215
+ type: 'text',
216
+ text: `Feedback recorded: ${params.useful ? 'useful' : 'not useful'}. Confidence ${params.useful ? 'increased' : 'decreased'}.`,
217
+ }],
218
+ };
219
+ });
220
+ server.tool('memory_retract', `Retract a memory that turned out to be wrong. Creates a correction and reduces confidence of related memories.
221
+
222
+ Use this when you discover a memory contains incorrect information.`, {
223
+ engram_id: z.string().describe('ID of the wrong memory'),
224
+ reason: z.string().describe('Why is this memory wrong?'),
225
+ correction: z.string().optional().describe('What is the correct information? (creates a new memory)'),
226
+ }, async (params) => {
227
+ const result = retractionEngine.retract({
228
+ agentId: AGENT_ID,
229
+ targetEngramId: params.engram_id,
230
+ reason: params.reason,
231
+ counterContent: params.correction,
232
+ });
233
+ const parts = [`Memory ${params.engram_id} retracted.`];
234
+ if (result.correctionId) {
235
+ parts.push(`Correction stored as ${result.correctionId}.`);
236
+ }
237
+ parts.push(`${result.associatesAffected} related memories had confidence reduced.`);
238
+ return {
239
+ content: [{
240
+ type: 'text',
241
+ text: parts.join(' '),
242
+ }],
243
+ };
244
+ });
245
+ server.tool('memory_stats', `Get memory health stats — how many memories, confidence levels, association count, and system performance.`, {}, async () => {
246
+ const metrics = evalEngine.computeMetrics(AGENT_ID);
247
+ const lines = [
248
+ `Agent: ${AGENT_ID}`,
249
+ `Active memories: ${metrics.activeEngramCount}`,
250
+ `Staging: ${metrics.stagingEngramCount}`,
251
+ `Retracted: ${metrics.retractedCount}`,
252
+ `Avg confidence: ${metrics.avgConfidence.toFixed(3)}`,
253
+ `Total edges: ${metrics.totalEdges}`,
254
+ `Edge utility: ${(metrics.edgeUtilityRate * 100).toFixed(1)}%`,
255
+ `Activations (24h): ${metrics.activationCount}`,
256
+ `Avg latency: ${metrics.avgLatencyMs.toFixed(1)}ms`,
257
+ ];
258
+ return {
259
+ content: [{
260
+ type: 'text',
261
+ text: lines.join('\n'),
262
+ }],
263
+ };
264
+ });
265
+ // --- Checkpointing Tools ---
266
+ server.tool('memory_checkpoint', `Save your current execution state so you can recover after context compaction.
267
+
268
+ Use this when:
269
+ - You're about to do something that might fill the context window
270
+ - You've made important decisions you don't want to lose
271
+ - You want to preserve your working state before a long operation
272
+
273
+ The state is saved per-agent and overwrites any previous checkpoint.`, {
274
+ current_task: z.string().describe('What you are currently working on'),
275
+ decisions: z.array(z.string()).optional().default([])
276
+ .describe('Key decisions made so far'),
277
+ active_files: z.array(z.string()).optional().default([])
278
+ .describe('Files you are currently working with'),
279
+ next_steps: z.array(z.string()).optional().default([])
280
+ .describe('What needs to happen next'),
281
+ related_memory_ids: z.array(z.string()).optional().default([])
282
+ .describe('IDs of memories relevant to current work'),
283
+ notes: z.string().optional().default('')
284
+ .describe('Any other context worth preserving'),
285
+ episode_id: z.string().optional()
286
+ .describe('Current episode ID if known'),
287
+ }, async (params) => {
288
+ const state = {
289
+ currentTask: params.current_task,
290
+ decisions: params.decisions,
291
+ activeFiles: params.active_files,
292
+ nextSteps: params.next_steps,
293
+ relatedMemoryIds: params.related_memory_ids,
294
+ notes: params.notes,
295
+ episodeId: params.episode_id ?? null,
296
+ };
297
+ store.saveCheckpoint(AGENT_ID, state);
298
+ return {
299
+ content: [{
300
+ type: 'text',
301
+ text: `Checkpoint saved.\nTask: ${params.current_task}\nDecisions: ${params.decisions.length}\nNext steps: ${params.next_steps.length}\nFiles: ${params.active_files.length}`,
302
+ }],
303
+ };
304
+ });
305
+ server.tool('memory_restore', `Restore your previous execution state after context compaction or at session start.
306
+
307
+ Returns:
308
+ - Your saved execution state (task, decisions, next steps, files)
309
+ - Recently recalled memories for context
310
+ - Your last write for continuity
311
+ - How long you were idle
312
+
313
+ Use this at the start of every session or after compaction to pick up where you left off.`, {}, async () => {
314
+ const checkpoint = store.getCheckpoint(AGENT_ID);
315
+ const now = Date.now();
316
+ const idleMs = checkpoint
317
+ ? now - checkpoint.auto.lastActivityAt.getTime()
318
+ : 0;
319
+ // Get last written engram
320
+ let lastWrite = null;
321
+ if (checkpoint?.auto.lastWriteId) {
322
+ const engram = store.getEngram(checkpoint.auto.lastWriteId);
323
+ if (engram) {
324
+ lastWrite = { id: engram.id, concept: engram.concept, content: engram.content };
325
+ }
326
+ }
327
+ // Recall memories using last context
328
+ let recalledMemories = [];
329
+ const recallContext = checkpoint?.auto.lastRecallContext
330
+ ?? checkpoint?.executionState?.currentTask
331
+ ?? null;
332
+ if (recallContext) {
333
+ try {
334
+ const results = await activationEngine.activate({
335
+ agentId: AGENT_ID,
336
+ context: recallContext,
337
+ limit: 5,
338
+ minScore: 0.05,
339
+ useReranker: true,
340
+ useExpansion: true,
341
+ });
342
+ recalledMemories = results.map(r => ({
343
+ id: r.engram.id,
344
+ concept: r.engram.concept,
345
+ content: r.engram.content,
346
+ score: r.score,
347
+ }));
348
+ }
349
+ catch { /* recall failure is non-fatal */ }
350
+ }
351
+ // Trigger mini-consolidation if idle >5min
352
+ const MINI_IDLE_MS = 5 * 60_000;
353
+ let miniConsolidationTriggered = false;
354
+ if (idleMs > MINI_IDLE_MS) {
355
+ miniConsolidationTriggered = true;
356
+ consolidationScheduler.runMiniConsolidation(AGENT_ID).catch(() => { });
357
+ }
358
+ // Format response
359
+ const parts = [];
360
+ const idleMin = Math.round(idleMs / 60_000);
361
+ parts.push(`Idle: ${idleMin}min${miniConsolidationTriggered ? ' (mini-consolidation triggered)' : ''}`);
362
+ if (checkpoint?.executionState) {
363
+ const s = checkpoint.executionState;
364
+ parts.push(`\n**Current task:** ${s.currentTask}`);
365
+ if (s.decisions.length)
366
+ parts.push(`**Decisions:** ${s.decisions.join('; ')}`);
367
+ if (s.nextSteps.length)
368
+ parts.push(`**Next steps:** ${s.nextSteps.map((st, i) => `${i + 1}. ${st}`).join(', ')}`);
369
+ if (s.activeFiles.length)
370
+ parts.push(`**Active files:** ${s.activeFiles.join(', ')}`);
371
+ if (s.notes)
372
+ parts.push(`**Notes:** ${s.notes}`);
373
+ if (checkpoint.checkpointAt)
374
+ parts.push(`_Saved at: ${checkpoint.checkpointAt.toISOString()}_`);
375
+ }
376
+ else {
377
+ parts.push('\nNo explicit checkpoint saved.');
378
+ }
379
+ if (lastWrite) {
380
+ parts.push(`\n**Last write:** ${lastWrite.concept}\n${lastWrite.content}`);
381
+ }
382
+ if (recalledMemories.length > 0) {
383
+ parts.push(`\n**Recalled memories (${recalledMemories.length}):**`);
384
+ for (const m of recalledMemories) {
385
+ parts.push(`- **${m.concept}** (${m.score.toFixed(3)}): ${m.content.slice(0, 150)}${m.content.length > 150 ? '...' : ''}`);
386
+ }
387
+ }
388
+ return {
389
+ content: [{
390
+ type: 'text',
391
+ text: parts.join('\n'),
392
+ }],
393
+ };
394
+ });
395
+ // --- Task Management Tools ---
396
+ server.tool('memory_task_add', `Create a task that you need to come back to. Tasks are memories with status and priority tracking.
397
+
398
+ Use this when:
399
+ - You identify work that needs doing but can't do it right now
400
+ - The user mentions something to do later
401
+ - You want to park a sub-task while focusing on something more urgent
402
+
403
+ Tasks automatically get high salience so they won't be discarded.`, {
404
+ concept: z.string().describe('Short task title (3-10 words)'),
405
+ content: z.string().describe('Full task description — what needs doing, context, acceptance criteria'),
406
+ tags: z.array(z.string()).optional().describe('Tags for categorization'),
407
+ priority: z.enum(['urgent', 'high', 'medium', 'low']).default('medium')
408
+ .describe('Task priority: urgent (do now), high (do soon), medium (normal), low (backlog)'),
409
+ blocked_by: z.string().optional().describe('ID of a task that must finish first'),
410
+ }, async (params) => {
411
+ const engram = store.createEngram({
412
+ agentId: AGENT_ID,
413
+ concept: params.concept,
414
+ content: params.content,
415
+ tags: [...(params.tags ?? []), 'task'],
416
+ salience: 0.9, // Tasks always high salience
417
+ confidence: 0.8,
418
+ salienceFeatures: {
419
+ surprise: 0.5,
420
+ decisionMade: true,
421
+ causalDepth: 0.5,
422
+ resolutionEffort: 0.5,
423
+ eventType: 'decision',
424
+ },
425
+ reasonCodes: ['task-created'],
426
+ taskStatus: params.blocked_by ? 'blocked' : 'open',
427
+ taskPriority: params.priority,
428
+ blockedBy: params.blocked_by,
429
+ });
430
+ connectionEngine.enqueue(engram.id);
431
+ // Generate embedding asynchronously
432
+ embed(`${params.concept} ${params.content}`).then(vec => {
433
+ store.updateEmbedding(engram.id, vec);
434
+ }).catch(() => { });
435
+ return {
436
+ content: [{
437
+ type: 'text',
438
+ text: `Task created: ${engram.id}\nTitle: ${params.concept}\nPriority: ${params.priority}\nStatus: ${engram.taskStatus}`,
439
+ }],
440
+ };
441
+ });
442
+ server.tool('memory_task_update', `Update a task's status or priority. Use this to:
443
+ - Start working on a task (open → in_progress)
444
+ - Mark a task done (→ done)
445
+ - Block a task on another (→ blocked)
446
+ - Reprioritize (change priority)
447
+ - Unblock a task (clear blocked_by)`, {
448
+ task_id: z.string().describe('ID of the task to update'),
449
+ status: z.enum(['open', 'in_progress', 'blocked', 'done']).optional()
450
+ .describe('New status'),
451
+ priority: z.enum(['urgent', 'high', 'medium', 'low']).optional()
452
+ .describe('New priority'),
453
+ blocked_by: z.string().optional().describe('ID of blocking task (set to empty string to unblock)'),
454
+ }, async (params) => {
455
+ const engram = store.getEngram(params.task_id);
456
+ if (!engram || !engram.taskStatus) {
457
+ return { content: [{ type: 'text', text: `Task not found: ${params.task_id}` }] };
458
+ }
459
+ if (params.blocked_by !== undefined) {
460
+ store.updateBlockedBy(params.task_id, params.blocked_by || null);
461
+ }
462
+ if (params.status) {
463
+ store.updateTaskStatus(params.task_id, params.status);
464
+ }
465
+ if (params.priority) {
466
+ store.updateTaskPriority(params.task_id, params.priority);
467
+ }
468
+ const updated = store.getEngram(params.task_id);
469
+ return {
470
+ content: [{
471
+ type: 'text',
472
+ text: `Task updated: ${updated.concept}\nStatus: ${updated.taskStatus}\nPriority: ${updated.taskPriority}${updated.blockedBy ? `\nBlocked by: ${updated.blockedBy}` : ''}`,
473
+ }],
474
+ };
475
+ });
476
+ server.tool('memory_task_list', `List tasks with optional status filter. Shows tasks ordered by priority (urgent first).
477
+
478
+ Use at the start of a session to see what's pending, or to check blocked/done tasks.`, {
479
+ status: z.enum(['open', 'in_progress', 'blocked', 'done']).optional()
480
+ .describe('Filter by status (omit to see all active tasks)'),
481
+ include_done: z.boolean().optional().default(false)
482
+ .describe('Include completed tasks?'),
483
+ }, async (params) => {
484
+ let tasks = store.getTasks(AGENT_ID, params.status);
485
+ if (!params.include_done && !params.status) {
486
+ tasks = tasks.filter(t => t.taskStatus !== 'done');
487
+ }
488
+ if (tasks.length === 0) {
489
+ return { content: [{ type: 'text', text: 'No tasks found.' }] };
490
+ }
491
+ const lines = tasks.map((t, i) => {
492
+ const blocked = t.blockedBy ? ` [blocked by ${t.blockedBy}]` : '';
493
+ const tags = t.tags?.filter(tag => tag !== 'task').join(', ');
494
+ return `${i + 1}. [${t.taskStatus}] **${t.concept}** (${t.taskPriority})${blocked}\n ${t.content.slice(0, 120)}${t.content.length > 120 ? '...' : ''}\n ${tags ? `Tags: ${tags} | ` : ''}ID: ${t.id}`;
495
+ });
496
+ return {
497
+ content: [{
498
+ type: 'text',
499
+ text: `Tasks (${tasks.length}):\n\n${lines.join('\n\n')}`,
500
+ }],
501
+ };
502
+ });
503
+ server.tool('memory_task_next', `Get the single most important task to work on next.
504
+
505
+ Prioritizes: in_progress tasks first (finish what you started), then by priority level, then oldest first. Skips blocked and done tasks.
506
+
507
+ Use this when you finish a task or need to decide what to do next.`, {}, async () => {
508
+ const next = store.getNextTask(AGENT_ID);
509
+ if (!next) {
510
+ return { content: [{ type: 'text', text: 'No actionable tasks. All clear!' }] };
511
+ }
512
+ const blocked = next.blockedBy ? `\nBlocked by: ${next.blockedBy}` : '';
513
+ const tags = next.tags?.filter(tag => tag !== 'task').join(', ');
514
+ return {
515
+ content: [{
516
+ type: 'text',
517
+ text: `Next task:\n**${next.concept}** (${next.taskPriority})\nStatus: ${next.taskStatus}\n${next.content}${blocked}\n${tags ? `Tags: ${tags}\n` : ''}ID: ${next.id}`,
518
+ }],
519
+ };
520
+ });
521
+ // --- Start ---
522
+ async function main() {
523
+ const transport = new StdioServerTransport();
524
+ await server.connect(transport);
525
+ // Log to stderr (stdout is reserved for MCP protocol)
526
+ console.error(`AgentWorkingMemory MCP server started (agent: ${AGENT_ID}, db: ${DB_PATH})`);
527
+ }
528
+ main().catch(err => {
529
+ console.error('MCP server failed:', err);
530
+ process.exit(1);
531
+ });
532
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './sqlite.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './sqlite.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}