@199-bio/engram 0.7.2 → 0.8.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/dist/consolidation/consolidator.d.ts.map +1 -1
- package/dist/index.js +119 -3
- package/dist/retrieval/hybrid.d.ts.map +1 -1
- package/dist/settings.d.ts.map +1 -0
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/web/chat-handler.d.ts.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/consolidation/consolidator.ts +14 -1
- package/src/index.ts +134 -3
- package/src/retrieval/hybrid.ts +152 -15
- package/src/settings.ts +73 -0
- package/src/storage/database.ts +312 -0
- package/src/web/chat-handler.ts +15 -4
- package/src/web/server.ts +49 -3
- package/src/web/static/app.js +100 -0
- package/src/web/static/index.html +35 -0
- package/src/web/static/style.css +243 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consolidator.d.ts","sourceRoot":"","sources":["../../src/consolidation/consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAU,MAAM,EAAW,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"consolidator.d.ts","sourceRoot":"","sources":["../../src/consolidation/consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAU,MAAM,EAAW,MAAM,wBAAwB,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA0FtD,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA6B;gBAGzC,EAAE,EAAE,cAAc,EAClB,KAAK,CAAC,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,YAAY;IAYvB,YAAY,IAAI,OAAO;IAIvB;;;OAGG;IACG,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC;QAC3D,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAwEF;;OAEG;YACW,gBAAgB;IAoE9B;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuHjE;;OAEG;IACH,SAAS,IAAI;QACX,UAAU,EAAE,OAAO,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB,wBAAwB,EAAE,MAAM,CAAC;KAClC;IAeD;;;OAGG;IACG,mBAAmB,CAAC,OAAO,GAAE;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAwFF;;OAEG;YACW,2BAA2B;IAqDzC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CA4BH"}
|
package/dist/index.js
CHANGED
|
@@ -58,7 +58,7 @@ async function initialize() {
|
|
|
58
58
|
// ============ MCP Server ============
|
|
59
59
|
const server = new Server({
|
|
60
60
|
name: "engram",
|
|
61
|
-
version: "0.
|
|
61
|
+
version: "0.8.0",
|
|
62
62
|
}, {
|
|
63
63
|
capabilities: {
|
|
64
64
|
tools: {},
|
|
@@ -257,6 +257,37 @@ const TOOLS = [
|
|
|
257
257
|
openWorldHint: true, // Calls Anthropic API for consolidation
|
|
258
258
|
},
|
|
259
259
|
},
|
|
260
|
+
{
|
|
261
|
+
name: "memory_feedback",
|
|
262
|
+
description: "Signal which memories from a recall were actually useful. Call AFTER using memories to answer user's question. This enables the memory system to learn which memories help together (Hebbian learning). Optional but improves memory quality over time.",
|
|
263
|
+
inputSchema: {
|
|
264
|
+
type: "object",
|
|
265
|
+
properties: {
|
|
266
|
+
recall_id: {
|
|
267
|
+
type: "string",
|
|
268
|
+
description: "The recall_id from the recall response",
|
|
269
|
+
},
|
|
270
|
+
useful_memory_ids: {
|
|
271
|
+
type: "array",
|
|
272
|
+
items: { type: "string" },
|
|
273
|
+
description: "IDs of memories that actually helped answer the question. Empty array if none were useful.",
|
|
274
|
+
},
|
|
275
|
+
need_more: {
|
|
276
|
+
type: "boolean",
|
|
277
|
+
description: "Set true if the memories were insufficient and you need a deeper search with more results",
|
|
278
|
+
default: false,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
required: ["recall_id", "useful_memory_ids"],
|
|
282
|
+
},
|
|
283
|
+
annotations: {
|
|
284
|
+
title: "Memory Feedback",
|
|
285
|
+
readOnlyHint: false,
|
|
286
|
+
destructiveHint: false,
|
|
287
|
+
idempotentHint: true,
|
|
288
|
+
openWorldHint: false,
|
|
289
|
+
},
|
|
290
|
+
},
|
|
260
291
|
];
|
|
261
292
|
// List available tools
|
|
262
293
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -314,11 +345,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
314
345
|
}
|
|
315
346
|
case "recall": {
|
|
316
347
|
const { query, limit = 5, include_graph = true } = args;
|
|
317
|
-
const
|
|
348
|
+
const response = await search.search(query, {
|
|
318
349
|
limit,
|
|
319
350
|
includeGraph: include_graph,
|
|
320
351
|
});
|
|
321
|
-
const formatted = results.map((r) => ({
|
|
352
|
+
const formatted = response.results.map((r) => ({
|
|
322
353
|
id: r.memory.id,
|
|
323
354
|
content: r.memory.content,
|
|
324
355
|
source: r.memory.source,
|
|
@@ -330,14 +361,24 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
330
361
|
.map(([k]) => k)
|
|
331
362
|
.join(", "),
|
|
332
363
|
}));
|
|
364
|
+
// Format connected memories (Hebbian associations)
|
|
365
|
+
const connectedFormatted = response.connected_memories.map((c) => ({
|
|
366
|
+
id: c.memory.id,
|
|
367
|
+
content: c.memory.content,
|
|
368
|
+
connected_to: c.connected_to,
|
|
369
|
+
connection_strength: c.strength.toFixed(2),
|
|
370
|
+
}));
|
|
333
371
|
return {
|
|
334
372
|
content: [
|
|
335
373
|
{
|
|
336
374
|
type: "text",
|
|
337
375
|
text: JSON.stringify({
|
|
376
|
+
recall_id: response.recall_id, // For memory_feedback
|
|
338
377
|
query,
|
|
339
378
|
results: formatted,
|
|
340
379
|
count: formatted.length,
|
|
380
|
+
connected_memories: connectedFormatted,
|
|
381
|
+
hint: formatted.length > 0 ? "Call memory_feedback with useful_memory_ids after answering" : undefined,
|
|
341
382
|
}, null, 2),
|
|
342
383
|
},
|
|
343
384
|
],
|
|
@@ -497,6 +538,81 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
497
538
|
],
|
|
498
539
|
};
|
|
499
540
|
}
|
|
541
|
+
case "memory_feedback": {
|
|
542
|
+
const { recall_id, useful_memory_ids, need_more = false } = args;
|
|
543
|
+
// Update the retrieval log with feedback
|
|
544
|
+
const updated = db.updateRetrievalFeedback(recall_id, useful_memory_ids, need_more);
|
|
545
|
+
if (!updated) {
|
|
546
|
+
return {
|
|
547
|
+
content: [
|
|
548
|
+
{
|
|
549
|
+
type: "text",
|
|
550
|
+
text: JSON.stringify({
|
|
551
|
+
success: false,
|
|
552
|
+
error: `Recall ID not found: ${recall_id}`,
|
|
553
|
+
}),
|
|
554
|
+
},
|
|
555
|
+
],
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
// If need_more is set, do an expanded search
|
|
559
|
+
if (need_more) {
|
|
560
|
+
const expandedResponse = await search.expandSearch(recall_id);
|
|
561
|
+
const formatted = expandedResponse.results.map((r) => ({
|
|
562
|
+
id: r.memory.id,
|
|
563
|
+
content: r.memory.content,
|
|
564
|
+
source: r.memory.source,
|
|
565
|
+
timestamp: r.memory.timestamp.toISOString(),
|
|
566
|
+
relevance_score: r.score.toFixed(4),
|
|
567
|
+
matched_via: Object.entries(r.sources)
|
|
568
|
+
.filter(([, v]) => v !== undefined)
|
|
569
|
+
.map(([k]) => k)
|
|
570
|
+
.join(", "),
|
|
571
|
+
}));
|
|
572
|
+
return {
|
|
573
|
+
content: [
|
|
574
|
+
{
|
|
575
|
+
type: "text",
|
|
576
|
+
text: JSON.stringify({
|
|
577
|
+
success: true,
|
|
578
|
+
feedback_recorded: true,
|
|
579
|
+
useful_count: useful_memory_ids.length,
|
|
580
|
+
expanded_search: true,
|
|
581
|
+
additional_results: formatted,
|
|
582
|
+
additional_count: formatted.length,
|
|
583
|
+
}, null, 2),
|
|
584
|
+
},
|
|
585
|
+
],
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
// Process deferred learning if we have enough feedback
|
|
589
|
+
const unprocessed = db.getUnprocessedRetrievalLogs(50);
|
|
590
|
+
let learningApplied = 0;
|
|
591
|
+
for (const log of unprocessed) {
|
|
592
|
+
if (log.useful_ids && log.useful_ids.length >= 2) {
|
|
593
|
+
// Strengthen connections between useful memories
|
|
594
|
+
db.recordCoUseful(log.useful_ids);
|
|
595
|
+
learningApplied++;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
if (unprocessed.length > 0) {
|
|
599
|
+
db.markRetrievalLogsProcessed(unprocessed.map(l => l.id));
|
|
600
|
+
}
|
|
601
|
+
return {
|
|
602
|
+
content: [
|
|
603
|
+
{
|
|
604
|
+
type: "text",
|
|
605
|
+
text: JSON.stringify({
|
|
606
|
+
success: true,
|
|
607
|
+
feedback_recorded: true,
|
|
608
|
+
useful_count: useful_memory_ids.length,
|
|
609
|
+
learning_applied: learningApplied > 0,
|
|
610
|
+
connections_strengthened: learningApplied,
|
|
611
|
+
}, null, 2),
|
|
612
|
+
},
|
|
613
|
+
],
|
|
614
|
+
};
|
|
615
|
+
}
|
|
500
616
|
default:
|
|
501
617
|
throw new Error(`Unknown tool: ${name}`);
|
|
502
618
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/retrieval/hybrid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA0B,MAAM,cAAc,CAAC;AAEzF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/retrieval/hybrid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA0B,MAAM,cAAc,CAAC;AAEzF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,KAAK,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAwDD,qBAAa,YAAY;IAIrB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,SAAS,CAAS;gBAGhB,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,gBAAgB,GAAG,eAAe;IAMvD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;;;OAKG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;KACnB,GACL,OAAO,CAAC,oBAAoB,CAAC;IAuNhC;;;OAGG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAO,GACzC,OAAO,CAAC,oBAAoB,CAAC;IAyBhC;;OAEG;YACW,UAAU;IASxB;;OAEG;YACW,cAAc;IAS5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAQrB;;;OAGG;YACW,WAAW;IA8BzB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAE5B;AAMD;;GAEG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAU7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAW3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IAChE,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3C,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,IAAI,CAAC;IACjB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAA8C;gBAEnD,MAAM,EAAE,MAAM;IAoB1B,OAAO,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/web/chat-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/web/chat-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAoQtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,YAAY,CAAoG;gBAE5G,OAAO,EAAE;QACnB,EAAE,EAAE,cAAc,CAAC;QACnB,KAAK,EAAE,cAAc,CAAC;QACtB,MAAM,EAAE,YAAY,CAAC;KACtB;IASD;;OAEG;IACH,aAAa,IAAI,IAAI;IASrB,YAAY,IAAI,OAAO;IAIvB,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,IAAI;YAKN,YAAY;IAgBpB,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBzC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;YAsHrD,cAAc;YAgFd,WAAW;CAoQ1B"}
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAyBtD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAmBnD;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,cAAc,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,gBAAgB;IAa/B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAwD9B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IActB,IAAI,IAAI,IAAI;YAQE,aAAa;YA+Bb,SAAS;YAiZT,WAAW;IAgCzB,OAAO,CAAC,SAAS;CAclB"}
|
package/package.json
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import Anthropic from "@anthropic-ai/sdk";
|
|
15
15
|
import { EngramDatabase, Memory, Digest, Episode } from "../storage/database.js";
|
|
16
|
+
import { getAnthropicApiKey } from "../settings.js";
|
|
16
17
|
import { KnowledgeGraph } from "../graph/knowledge-graph.js";
|
|
17
18
|
import { HybridSearch } from "../retrieval/hybrid.js";
|
|
18
19
|
|
|
@@ -124,7 +125,7 @@ export class Consolidator {
|
|
|
124
125
|
this.graph = graph || null;
|
|
125
126
|
this.search = search || null;
|
|
126
127
|
|
|
127
|
-
const apiKey =
|
|
128
|
+
const apiKey = getAnthropicApiKey();
|
|
128
129
|
if (apiKey) {
|
|
129
130
|
this.client = new Anthropic({ apiKey });
|
|
130
131
|
}
|
|
@@ -595,6 +596,8 @@ Respond with JSON only.`;
|
|
|
595
596
|
memoriesCreated: number;
|
|
596
597
|
digestsCreated: number;
|
|
597
598
|
contradictionsFound: number;
|
|
599
|
+
connectionsDecayed: number;
|
|
600
|
+
logsCleanedUp: number;
|
|
598
601
|
}> {
|
|
599
602
|
console.error("[Consolidator] Starting sleep cycle...");
|
|
600
603
|
|
|
@@ -606,11 +609,21 @@ Respond with JSON only.`;
|
|
|
606
609
|
const memoryResult = await this.consolidate();
|
|
607
610
|
console.error(`[Consolidator] Memories: ${memoryResult.memoriesProcessed} → ${memoryResult.digestsCreated} digests`);
|
|
608
611
|
|
|
612
|
+
// Step 3: Decay unused Hebbian connections (memories that haven't fired together recently)
|
|
613
|
+
const connectionsDecayed = this.db.decayConnections(30, 0.9);
|
|
614
|
+
console.error(`[Consolidator] Connections decayed: ${connectionsDecayed}`);
|
|
615
|
+
|
|
616
|
+
// Step 4: Clean up old retrieval logs
|
|
617
|
+
const logsCleanedUp = this.db.cleanupRetrievalLogs(7);
|
|
618
|
+
console.error(`[Consolidator] Retrieval logs cleaned: ${logsCleanedUp}`);
|
|
619
|
+
|
|
609
620
|
return {
|
|
610
621
|
episodesProcessed: episodeResult.episodesProcessed,
|
|
611
622
|
memoriesCreated: episodeResult.memoriesCreated,
|
|
612
623
|
digestsCreated: memoryResult.digestsCreated,
|
|
613
624
|
contradictionsFound: memoryResult.contradictionsFound,
|
|
625
|
+
connectionsDecayed,
|
|
626
|
+
logsCleanedUp,
|
|
614
627
|
};
|
|
615
628
|
}
|
|
616
629
|
}
|
package/src/index.ts
CHANGED
|
@@ -76,7 +76,7 @@ async function initialize(): Promise<void> {
|
|
|
76
76
|
const server = new Server(
|
|
77
77
|
{
|
|
78
78
|
name: "engram",
|
|
79
|
-
version: "0.
|
|
79
|
+
version: "0.8.0",
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
capabilities: {
|
|
@@ -280,6 +280,37 @@ const TOOLS = [
|
|
|
280
280
|
openWorldHint: true, // Calls Anthropic API for consolidation
|
|
281
281
|
},
|
|
282
282
|
},
|
|
283
|
+
{
|
|
284
|
+
name: "memory_feedback",
|
|
285
|
+
description: "Signal which memories from a recall were actually useful. Call AFTER using memories to answer user's question. This enables the memory system to learn which memories help together (Hebbian learning). Optional but improves memory quality over time.",
|
|
286
|
+
inputSchema: {
|
|
287
|
+
type: "object" as const,
|
|
288
|
+
properties: {
|
|
289
|
+
recall_id: {
|
|
290
|
+
type: "string",
|
|
291
|
+
description: "The recall_id from the recall response",
|
|
292
|
+
},
|
|
293
|
+
useful_memory_ids: {
|
|
294
|
+
type: "array",
|
|
295
|
+
items: { type: "string" },
|
|
296
|
+
description: "IDs of memories that actually helped answer the question. Empty array if none were useful.",
|
|
297
|
+
},
|
|
298
|
+
need_more: {
|
|
299
|
+
type: "boolean",
|
|
300
|
+
description: "Set true if the memories were insufficient and you need a deeper search with more results",
|
|
301
|
+
default: false,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
required: ["recall_id", "useful_memory_ids"],
|
|
305
|
+
},
|
|
306
|
+
annotations: {
|
|
307
|
+
title: "Memory Feedback",
|
|
308
|
+
readOnlyHint: false,
|
|
309
|
+
destructiveHint: false,
|
|
310
|
+
idempotentHint: true,
|
|
311
|
+
openWorldHint: false,
|
|
312
|
+
},
|
|
313
|
+
},
|
|
283
314
|
];
|
|
284
315
|
|
|
285
316
|
// List available tools
|
|
@@ -366,12 +397,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
366
397
|
include_graph?: boolean;
|
|
367
398
|
};
|
|
368
399
|
|
|
369
|
-
const
|
|
400
|
+
const response = await search.search(query, {
|
|
370
401
|
limit,
|
|
371
402
|
includeGraph: include_graph,
|
|
372
403
|
});
|
|
373
404
|
|
|
374
|
-
const formatted = results.map((r) => ({
|
|
405
|
+
const formatted = response.results.map((r) => ({
|
|
375
406
|
id: r.memory.id,
|
|
376
407
|
content: r.memory.content,
|
|
377
408
|
source: r.memory.source,
|
|
@@ -384,14 +415,25 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
384
415
|
.join(", "),
|
|
385
416
|
}));
|
|
386
417
|
|
|
418
|
+
// Format connected memories (Hebbian associations)
|
|
419
|
+
const connectedFormatted = response.connected_memories.map((c) => ({
|
|
420
|
+
id: c.memory.id,
|
|
421
|
+
content: c.memory.content,
|
|
422
|
+
connected_to: c.connected_to,
|
|
423
|
+
connection_strength: c.strength.toFixed(2),
|
|
424
|
+
}));
|
|
425
|
+
|
|
387
426
|
return {
|
|
388
427
|
content: [
|
|
389
428
|
{
|
|
390
429
|
type: "text" as const,
|
|
391
430
|
text: JSON.stringify({
|
|
431
|
+
recall_id: response.recall_id, // For memory_feedback
|
|
392
432
|
query,
|
|
393
433
|
results: formatted,
|
|
394
434
|
count: formatted.length,
|
|
435
|
+
connected_memories: connectedFormatted,
|
|
436
|
+
hint: formatted.length > 0 ? "Call memory_feedback with useful_memory_ids after answering" : undefined,
|
|
395
437
|
}, null, 2),
|
|
396
438
|
},
|
|
397
439
|
],
|
|
@@ -575,6 +617,95 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
575
617
|
};
|
|
576
618
|
}
|
|
577
619
|
|
|
620
|
+
case "memory_feedback": {
|
|
621
|
+
const { recall_id, useful_memory_ids, need_more = false } = args as {
|
|
622
|
+
recall_id: string;
|
|
623
|
+
useful_memory_ids: string[];
|
|
624
|
+
need_more?: boolean;
|
|
625
|
+
};
|
|
626
|
+
|
|
627
|
+
// Update the retrieval log with feedback
|
|
628
|
+
const updated = db.updateRetrievalFeedback(recall_id, useful_memory_ids, need_more);
|
|
629
|
+
|
|
630
|
+
if (!updated) {
|
|
631
|
+
return {
|
|
632
|
+
content: [
|
|
633
|
+
{
|
|
634
|
+
type: "text" as const,
|
|
635
|
+
text: JSON.stringify({
|
|
636
|
+
success: false,
|
|
637
|
+
error: `Recall ID not found: ${recall_id}`,
|
|
638
|
+
}),
|
|
639
|
+
},
|
|
640
|
+
],
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// If need_more is set, do an expanded search
|
|
645
|
+
if (need_more) {
|
|
646
|
+
const expandedResponse = await search.expandSearch(recall_id);
|
|
647
|
+
|
|
648
|
+
const formatted = expandedResponse.results.map((r) => ({
|
|
649
|
+
id: r.memory.id,
|
|
650
|
+
content: r.memory.content,
|
|
651
|
+
source: r.memory.source,
|
|
652
|
+
timestamp: r.memory.timestamp.toISOString(),
|
|
653
|
+
relevance_score: r.score.toFixed(4),
|
|
654
|
+
matched_via: Object.entries(r.sources)
|
|
655
|
+
.filter(([, v]) => v !== undefined)
|
|
656
|
+
.map(([k]) => k)
|
|
657
|
+
.join(", "),
|
|
658
|
+
}));
|
|
659
|
+
|
|
660
|
+
return {
|
|
661
|
+
content: [
|
|
662
|
+
{
|
|
663
|
+
type: "text" as const,
|
|
664
|
+
text: JSON.stringify({
|
|
665
|
+
success: true,
|
|
666
|
+
feedback_recorded: true,
|
|
667
|
+
useful_count: useful_memory_ids.length,
|
|
668
|
+
expanded_search: true,
|
|
669
|
+
additional_results: formatted,
|
|
670
|
+
additional_count: formatted.length,
|
|
671
|
+
}, null, 2),
|
|
672
|
+
},
|
|
673
|
+
],
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
// Process deferred learning if we have enough feedback
|
|
678
|
+
const unprocessed = db.getUnprocessedRetrievalLogs(50);
|
|
679
|
+
let learningApplied = 0;
|
|
680
|
+
|
|
681
|
+
for (const log of unprocessed) {
|
|
682
|
+
if (log.useful_ids && log.useful_ids.length >= 2) {
|
|
683
|
+
// Strengthen connections between useful memories
|
|
684
|
+
db.recordCoUseful(log.useful_ids);
|
|
685
|
+
learningApplied++;
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
if (unprocessed.length > 0) {
|
|
690
|
+
db.markRetrievalLogsProcessed(unprocessed.map(l => l.id));
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return {
|
|
694
|
+
content: [
|
|
695
|
+
{
|
|
696
|
+
type: "text" as const,
|
|
697
|
+
text: JSON.stringify({
|
|
698
|
+
success: true,
|
|
699
|
+
feedback_recorded: true,
|
|
700
|
+
useful_count: useful_memory_ids.length,
|
|
701
|
+
learning_applied: learningApplied > 0,
|
|
702
|
+
connections_strengthened: learningApplied,
|
|
703
|
+
}, null, 2),
|
|
704
|
+
},
|
|
705
|
+
],
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
|
|
578
709
|
default:
|
|
579
710
|
throw new Error(`Unknown tool: ${name}`);
|
|
580
711
|
}
|