@199-bio/engram 0.7.4 → 0.8.1
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 +236 -4
- package/dist/retrieval/hybrid.d.ts.map +1 -1
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/web/chat-handler.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/consolidation/consolidator.ts +50 -10
- package/src/index.ts +260 -4
- package/src/retrieval/hybrid.ts +156 -15
- package/src/storage/database.ts +325 -0
- package/src/web/chat-handler.ts +61 -58
- package/src/web/server.ts +2 -2
|
@@ -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;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;
|
|
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,YAAY,CAAuB;IAC3C,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;IAUvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmBpB,YAAY,IAAI,OAAO;IAKvB;;;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;IAyEF;;OAEG;YACW,gBAAgB;IAqE9B;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwHjE;;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;IAyFF;;OAEG;YACW,2BAA2B;IAsDzC;;;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
|
@@ -10,6 +10,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
10
10
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
11
11
|
import path from "path";
|
|
12
12
|
import os from "os";
|
|
13
|
+
import fs from "fs";
|
|
13
14
|
import { EngramDatabase } from "./storage/database.js";
|
|
14
15
|
import { KnowledgeGraph } from "./graph/knowledge-graph.js";
|
|
15
16
|
import { createRetriever } from "./retrieval/colbert.js";
|
|
@@ -21,6 +22,94 @@ const DB_PATH = process.env.ENGRAM_DB_PATH
|
|
|
21
22
|
? path.resolve(process.env.ENGRAM_DB_PATH.replace("~", os.homedir()))
|
|
22
23
|
: path.join(os.homedir(), ".engram");
|
|
23
24
|
const DB_FILE = path.join(DB_PATH, "engram.db");
|
|
25
|
+
const PID_FILE = path.join(DB_PATH, "engram.pid");
|
|
26
|
+
// ============ Zombie Prevention ============
|
|
27
|
+
/**
|
|
28
|
+
* Kill any existing engram process and clean up stale PID file
|
|
29
|
+
*/
|
|
30
|
+
function cleanupZombies() {
|
|
31
|
+
try {
|
|
32
|
+
if (fs.existsSync(PID_FILE)) {
|
|
33
|
+
const oldPid = parseInt(fs.readFileSync(PID_FILE, "utf-8").trim(), 10);
|
|
34
|
+
if (oldPid && oldPid !== process.pid) {
|
|
35
|
+
try {
|
|
36
|
+
// Check if process exists
|
|
37
|
+
process.kill(oldPid, 0);
|
|
38
|
+
// It exists, kill it
|
|
39
|
+
console.error(`[Engram] Killing old instance (PID ${oldPid})`);
|
|
40
|
+
process.kill(oldPid, "SIGTERM");
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Process doesn't exist, that's fine
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
fs.unlinkSync(PID_FILE);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("[Engram] Error cleaning up zombies:", error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Write our PID file
|
|
55
|
+
*/
|
|
56
|
+
function writePidFile() {
|
|
57
|
+
try {
|
|
58
|
+
// Ensure directory exists
|
|
59
|
+
if (!fs.existsSync(DB_PATH)) {
|
|
60
|
+
fs.mkdirSync(DB_PATH, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
fs.writeFileSync(PID_FILE, String(process.pid));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error("[Engram] Error writing PID file:", error);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Clean up on exit
|
|
70
|
+
*/
|
|
71
|
+
function cleanup() {
|
|
72
|
+
try {
|
|
73
|
+
if (fs.existsSync(PID_FILE)) {
|
|
74
|
+
const storedPid = parseInt(fs.readFileSync(PID_FILE, "utf-8").trim(), 10);
|
|
75
|
+
if (storedPid === process.pid) {
|
|
76
|
+
fs.unlinkSync(PID_FILE);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (webServer) {
|
|
80
|
+
webServer.stop();
|
|
81
|
+
}
|
|
82
|
+
if (db) {
|
|
83
|
+
db.close();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore cleanup errors
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Register signal handlers early
|
|
91
|
+
process.on("SIGTERM", () => {
|
|
92
|
+
console.error("[Engram] Received SIGTERM, shutting down...");
|
|
93
|
+
cleanup();
|
|
94
|
+
process.exit(0);
|
|
95
|
+
});
|
|
96
|
+
process.on("SIGINT", () => {
|
|
97
|
+
console.error("[Engram] Received SIGINT, shutting down...");
|
|
98
|
+
cleanup();
|
|
99
|
+
process.exit(0);
|
|
100
|
+
});
|
|
101
|
+
process.on("exit", cleanup);
|
|
102
|
+
// Detect when parent process (Claude) dies by monitoring stdin
|
|
103
|
+
process.stdin.on("end", () => {
|
|
104
|
+
console.error("[Engram] stdin closed, parent process likely died. Shutting down...");
|
|
105
|
+
cleanup();
|
|
106
|
+
process.exit(0);
|
|
107
|
+
});
|
|
108
|
+
process.stdin.on("close", () => {
|
|
109
|
+
console.error("[Engram] stdin closed, shutting down...");
|
|
110
|
+
cleanup();
|
|
111
|
+
process.exit(0);
|
|
112
|
+
});
|
|
24
113
|
// ============ Initialize Components ============
|
|
25
114
|
let db;
|
|
26
115
|
let graph;
|
|
@@ -58,7 +147,7 @@ async function initialize() {
|
|
|
58
147
|
// ============ MCP Server ============
|
|
59
148
|
const server = new Server({
|
|
60
149
|
name: "engram",
|
|
61
|
-
version: "0.
|
|
150
|
+
version: "0.8.0",
|
|
62
151
|
}, {
|
|
63
152
|
capabilities: {
|
|
64
153
|
tools: {},
|
|
@@ -257,6 +346,37 @@ const TOOLS = [
|
|
|
257
346
|
openWorldHint: true, // Calls Anthropic API for consolidation
|
|
258
347
|
},
|
|
259
348
|
},
|
|
349
|
+
{
|
|
350
|
+
name: "memory_feedback",
|
|
351
|
+
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.",
|
|
352
|
+
inputSchema: {
|
|
353
|
+
type: "object",
|
|
354
|
+
properties: {
|
|
355
|
+
recall_id: {
|
|
356
|
+
type: "string",
|
|
357
|
+
description: "The recall_id from the recall response",
|
|
358
|
+
},
|
|
359
|
+
useful_memory_ids: {
|
|
360
|
+
type: "array",
|
|
361
|
+
items: { type: "string" },
|
|
362
|
+
description: "IDs of memories that actually helped answer the question. Empty array if none were useful.",
|
|
363
|
+
},
|
|
364
|
+
need_more: {
|
|
365
|
+
type: "boolean",
|
|
366
|
+
description: "Set true if the memories were insufficient and you need a deeper search with more results",
|
|
367
|
+
default: false,
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
required: ["recall_id", "useful_memory_ids"],
|
|
371
|
+
},
|
|
372
|
+
annotations: {
|
|
373
|
+
title: "Memory Feedback",
|
|
374
|
+
readOnlyHint: false,
|
|
375
|
+
destructiveHint: false,
|
|
376
|
+
idempotentHint: true,
|
|
377
|
+
openWorldHint: false,
|
|
378
|
+
},
|
|
379
|
+
},
|
|
260
380
|
];
|
|
261
381
|
// List available tools
|
|
262
382
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -314,11 +434,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
314
434
|
}
|
|
315
435
|
case "recall": {
|
|
316
436
|
const { query, limit = 5, include_graph = true } = args;
|
|
317
|
-
const
|
|
437
|
+
const response = await search.search(query, {
|
|
318
438
|
limit,
|
|
319
439
|
includeGraph: include_graph,
|
|
320
440
|
});
|
|
321
|
-
const formatted = results.map((r) => ({
|
|
441
|
+
const formatted = response.results.map((r) => ({
|
|
322
442
|
id: r.memory.id,
|
|
323
443
|
content: r.memory.content,
|
|
324
444
|
source: r.memory.source,
|
|
@@ -330,14 +450,24 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
330
450
|
.map(([k]) => k)
|
|
331
451
|
.join(", "),
|
|
332
452
|
}));
|
|
453
|
+
// Format connected memories (Hebbian associations)
|
|
454
|
+
const connectedFormatted = response.connected_memories.map((c) => ({
|
|
455
|
+
id: c.memory.id,
|
|
456
|
+
content: c.memory.content,
|
|
457
|
+
connected_to: c.connected_to,
|
|
458
|
+
connection_strength: c.strength.toFixed(2),
|
|
459
|
+
}));
|
|
333
460
|
return {
|
|
334
461
|
content: [
|
|
335
462
|
{
|
|
336
463
|
type: "text",
|
|
337
464
|
text: JSON.stringify({
|
|
465
|
+
recall_id: response.recall_id, // For memory_feedback
|
|
338
466
|
query,
|
|
339
467
|
results: formatted,
|
|
340
468
|
count: formatted.length,
|
|
469
|
+
connected_memories: connectedFormatted,
|
|
470
|
+
hint: formatted.length > 0 ? "Call memory_feedback with useful_memory_ids after answering" : undefined,
|
|
341
471
|
}, null, 2),
|
|
342
472
|
},
|
|
343
473
|
],
|
|
@@ -497,6 +627,105 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
497
627
|
],
|
|
498
628
|
};
|
|
499
629
|
}
|
|
630
|
+
case "memory_feedback": {
|
|
631
|
+
const { recall_id, useful_memory_ids, need_more = false } = args;
|
|
632
|
+
// First, get the original recall to validate useful_memory_ids
|
|
633
|
+
const retrievalLog = db.getRetrievalLog(recall_id);
|
|
634
|
+
if (!retrievalLog) {
|
|
635
|
+
return {
|
|
636
|
+
content: [
|
|
637
|
+
{
|
|
638
|
+
type: "text",
|
|
639
|
+
text: JSON.stringify({
|
|
640
|
+
success: false,
|
|
641
|
+
error: `Recall ID not found: ${recall_id}`,
|
|
642
|
+
}),
|
|
643
|
+
},
|
|
644
|
+
],
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
// Validate: only accept IDs that were in the original recall
|
|
648
|
+
const originalIdSet = new Set(retrievalLog.memory_ids);
|
|
649
|
+
const validUsefulIds = useful_memory_ids.filter(id => originalIdSet.has(id));
|
|
650
|
+
const invalidIds = useful_memory_ids.filter(id => !originalIdSet.has(id));
|
|
651
|
+
if (invalidIds.length > 0) {
|
|
652
|
+
console.error(`[Engram] memory_feedback: ${invalidIds.length} IDs not in original recall, ignored: ${invalidIds.join(", ")}`);
|
|
653
|
+
}
|
|
654
|
+
// Update the retrieval log with validated feedback
|
|
655
|
+
const updated = db.updateRetrievalFeedback(recall_id, validUsefulIds, need_more);
|
|
656
|
+
if (!updated) {
|
|
657
|
+
// Should not happen since we already checked above, but handle gracefully
|
|
658
|
+
console.error(`[Engram] memory_feedback: failed to update retrieval log ${recall_id}`);
|
|
659
|
+
return {
|
|
660
|
+
content: [
|
|
661
|
+
{
|
|
662
|
+
type: "text",
|
|
663
|
+
text: JSON.stringify({
|
|
664
|
+
success: false,
|
|
665
|
+
error: `Failed to update feedback for: ${recall_id}`,
|
|
666
|
+
}),
|
|
667
|
+
},
|
|
668
|
+
],
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
// If need_more is set, do an expanded search
|
|
672
|
+
if (need_more) {
|
|
673
|
+
const expandedResponse = await search.expandSearch(recall_id);
|
|
674
|
+
const formatted = expandedResponse.results.map((r) => ({
|
|
675
|
+
id: r.memory.id,
|
|
676
|
+
content: r.memory.content,
|
|
677
|
+
source: r.memory.source,
|
|
678
|
+
timestamp: r.memory.timestamp.toISOString(),
|
|
679
|
+
relevance_score: r.score.toFixed(4),
|
|
680
|
+
matched_via: Object.entries(r.sources)
|
|
681
|
+
.filter(([, v]) => v !== undefined)
|
|
682
|
+
.map(([k]) => k)
|
|
683
|
+
.join(", "),
|
|
684
|
+
}));
|
|
685
|
+
return {
|
|
686
|
+
content: [
|
|
687
|
+
{
|
|
688
|
+
type: "text",
|
|
689
|
+
text: JSON.stringify({
|
|
690
|
+
success: true,
|
|
691
|
+
feedback_recorded: true,
|
|
692
|
+
useful_count: validUsefulIds.length,
|
|
693
|
+
expanded_search: true,
|
|
694
|
+
additional_results: formatted,
|
|
695
|
+
additional_count: formatted.length,
|
|
696
|
+
}, null, 2),
|
|
697
|
+
},
|
|
698
|
+
],
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
// Process deferred learning if we have enough feedback
|
|
702
|
+
const unprocessed = db.getUnprocessedRetrievalLogs(50);
|
|
703
|
+
let learningApplied = 0;
|
|
704
|
+
for (const log of unprocessed) {
|
|
705
|
+
if (log.useful_ids && log.useful_ids.length >= 2) {
|
|
706
|
+
// Strengthen connections between useful memories
|
|
707
|
+
db.recordCoUseful(log.useful_ids);
|
|
708
|
+
learningApplied++;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
if (unprocessed.length > 0) {
|
|
712
|
+
db.markRetrievalLogsProcessed(unprocessed.map(l => l.id));
|
|
713
|
+
}
|
|
714
|
+
return {
|
|
715
|
+
content: [
|
|
716
|
+
{
|
|
717
|
+
type: "text",
|
|
718
|
+
text: JSON.stringify({
|
|
719
|
+
success: true,
|
|
720
|
+
feedback_recorded: true,
|
|
721
|
+
useful_count: validUsefulIds.length,
|
|
722
|
+
learning_applied: learningApplied > 0,
|
|
723
|
+
connections_strengthened: learningApplied,
|
|
724
|
+
}, null, 2),
|
|
725
|
+
},
|
|
726
|
+
],
|
|
727
|
+
};
|
|
728
|
+
}
|
|
500
729
|
default:
|
|
501
730
|
throw new Error(`Unknown tool: ${name}`);
|
|
502
731
|
}
|
|
@@ -516,10 +745,13 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
516
745
|
});
|
|
517
746
|
// ============ Main ============
|
|
518
747
|
async function main() {
|
|
748
|
+
// Kill any zombie instances before starting
|
|
749
|
+
cleanupZombies();
|
|
750
|
+
writePidFile();
|
|
519
751
|
await initialize();
|
|
520
752
|
const transport = new StdioServerTransport();
|
|
521
753
|
await server.connect(transport);
|
|
522
|
-
console.error(
|
|
754
|
+
console.error(`[Engram] MCP server running on stdio (PID ${process.pid})`);
|
|
523
755
|
}
|
|
524
756
|
main().catch((error) => {
|
|
525
757
|
console.error("[Engram] Fatal error:", error);
|
|
@@ -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;IA2NhC;;;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"}
|
|
@@ -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;AAwQtD,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;IAYrB,YAAY,IAAI,OAAO;IAMvB,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,IAAI;YAKN,YAAY;IAgBpB,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBzC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;YA6GrD,cAAc;YAkFd,WAAW;CAoQ1B"}
|
package/package.json
CHANGED
|
@@ -112,6 +112,7 @@ interface ConsolidateOptions {
|
|
|
112
112
|
|
|
113
113
|
export class Consolidator {
|
|
114
114
|
private client: Anthropic | null = null;
|
|
115
|
+
private cachedApiKey: string | null = null;
|
|
115
116
|
private db: EngramDatabase;
|
|
116
117
|
private graph: KnowledgeGraph | null = null;
|
|
117
118
|
private search: HybridSearch | null = null;
|
|
@@ -125,14 +126,36 @@ export class Consolidator {
|
|
|
125
126
|
this.graph = graph || null;
|
|
126
127
|
this.search = search || null;
|
|
127
128
|
|
|
129
|
+
// Initial check
|
|
130
|
+
this.ensureClient();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Ensure client is configured with latest API key
|
|
135
|
+
* Lazy initialization: checks for new/updated API key each call
|
|
136
|
+
*/
|
|
137
|
+
private ensureClient(): Anthropic | null {
|
|
128
138
|
const apiKey = getAnthropicApiKey();
|
|
129
|
-
|
|
139
|
+
|
|
140
|
+
if (!apiKey) {
|
|
141
|
+
this.client = null;
|
|
142
|
+
this.cachedApiKey = null;
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Only recreate client if API key changed
|
|
147
|
+
if (apiKey !== this.cachedApiKey) {
|
|
148
|
+
console.error(`[Engram] Consolidator: API key ${this.cachedApiKey ? "updated" : "configured"}`);
|
|
130
149
|
this.client = new Anthropic({ apiKey });
|
|
150
|
+
this.cachedApiKey = apiKey;
|
|
131
151
|
}
|
|
152
|
+
|
|
153
|
+
return this.client;
|
|
132
154
|
}
|
|
133
155
|
|
|
134
156
|
isConfigured(): boolean {
|
|
135
|
-
|
|
157
|
+
// Re-check in case API key was added after startup
|
|
158
|
+
return this.ensureClient() !== null;
|
|
136
159
|
}
|
|
137
160
|
|
|
138
161
|
/**
|
|
@@ -144,7 +167,8 @@ export class Consolidator {
|
|
|
144
167
|
contradictionsFound: number;
|
|
145
168
|
memoriesProcessed: number;
|
|
146
169
|
}> {
|
|
147
|
-
|
|
170
|
+
const client = this.ensureClient();
|
|
171
|
+
if (!client) {
|
|
148
172
|
throw new Error("Consolidator not configured - set ANTHROPIC_API_KEY");
|
|
149
173
|
}
|
|
150
174
|
|
|
@@ -221,7 +245,8 @@ export class Consolidator {
|
|
|
221
245
|
private async consolidateBatch(
|
|
222
246
|
memories: Memory[]
|
|
223
247
|
): Promise<ConsolidationResult | null> {
|
|
224
|
-
|
|
248
|
+
const client = this.ensureClient();
|
|
249
|
+
if (!client) return null;
|
|
225
250
|
|
|
226
251
|
// Format memories for the prompt
|
|
227
252
|
const memoriesText = memories
|
|
@@ -246,7 +271,7 @@ ${memoriesText}
|
|
|
246
271
|
Create a detailed digest that preserves all important information. Respond with JSON only.`;
|
|
247
272
|
|
|
248
273
|
try {
|
|
249
|
-
const response = await
|
|
274
|
+
const response = await client.messages.create({
|
|
250
275
|
model: "claude-opus-4-5-20251101",
|
|
251
276
|
max_tokens: 16000,
|
|
252
277
|
temperature: 1, // Required for extended thinking
|
|
@@ -290,7 +315,8 @@ Create a detailed digest that preserves all important information. Respond with
|
|
|
290
315
|
* Create an entity profile by consolidating all observations about an entity
|
|
291
316
|
*/
|
|
292
317
|
async consolidateEntity(entityId: string): Promise<Digest | null> {
|
|
293
|
-
|
|
318
|
+
const client = this.ensureClient();
|
|
319
|
+
if (!client) {
|
|
294
320
|
throw new Error("Consolidator not configured - set ANTHROPIC_API_KEY");
|
|
295
321
|
}
|
|
296
322
|
|
|
@@ -335,7 +361,7 @@ ${memoriesText}
|
|
|
335
361
|
Create a rich, detailed profile. Do not summarize away important nuances. Respond with JSON only.`;
|
|
336
362
|
|
|
337
363
|
try {
|
|
338
|
-
const response = await
|
|
364
|
+
const response = await client.messages.create({
|
|
339
365
|
model: "claude-opus-4-5-20251101",
|
|
340
366
|
max_tokens: 16000,
|
|
341
367
|
temperature: 1, // Required for extended thinking
|
|
@@ -444,7 +470,8 @@ Create a rich, detailed profile. Do not summarize away important nuances. Respon
|
|
|
444
470
|
memoriesCreated: number;
|
|
445
471
|
entitiesCreated: number;
|
|
446
472
|
}> {
|
|
447
|
-
|
|
473
|
+
const client = this.ensureClient();
|
|
474
|
+
if (!client) {
|
|
448
475
|
throw new Error("Consolidator not configured - set ANTHROPIC_API_KEY");
|
|
449
476
|
}
|
|
450
477
|
|
|
@@ -537,7 +564,8 @@ Create a rich, detailed profile. Do not summarize away important nuances. Respon
|
|
|
537
564
|
private async extractMemoriesFromEpisodes(
|
|
538
565
|
episodes: Episode[]
|
|
539
566
|
): Promise<EpisodeExtractionResult | null> {
|
|
540
|
-
|
|
567
|
+
const client = this.ensureClient();
|
|
568
|
+
if (!client) return null;
|
|
541
569
|
|
|
542
570
|
// Format conversation
|
|
543
571
|
const conversationText = episodes
|
|
@@ -555,7 +583,7 @@ Respond with JSON only.`;
|
|
|
555
583
|
|
|
556
584
|
try {
|
|
557
585
|
// Use Haiku for speed/cost (no extended thinking needed)
|
|
558
|
-
const response = await
|
|
586
|
+
const response = await client.messages.create({
|
|
559
587
|
model: "claude-haiku-4-5-20251201",
|
|
560
588
|
max_tokens: 4000,
|
|
561
589
|
messages: [
|
|
@@ -596,6 +624,8 @@ Respond with JSON only.`;
|
|
|
596
624
|
memoriesCreated: number;
|
|
597
625
|
digestsCreated: number;
|
|
598
626
|
contradictionsFound: number;
|
|
627
|
+
connectionsDecayed: number;
|
|
628
|
+
logsCleanedUp: number;
|
|
599
629
|
}> {
|
|
600
630
|
console.error("[Consolidator] Starting sleep cycle...");
|
|
601
631
|
|
|
@@ -607,11 +637,21 @@ Respond with JSON only.`;
|
|
|
607
637
|
const memoryResult = await this.consolidate();
|
|
608
638
|
console.error(`[Consolidator] Memories: ${memoryResult.memoriesProcessed} → ${memoryResult.digestsCreated} digests`);
|
|
609
639
|
|
|
640
|
+
// Step 3: Decay unused Hebbian connections (memories that haven't fired together recently)
|
|
641
|
+
const connectionsDecayed = this.db.decayConnections(30, 0.9);
|
|
642
|
+
console.error(`[Consolidator] Connections decayed: ${connectionsDecayed}`);
|
|
643
|
+
|
|
644
|
+
// Step 4: Clean up old retrieval logs
|
|
645
|
+
const logsCleanedUp = this.db.cleanupRetrievalLogs(7);
|
|
646
|
+
console.error(`[Consolidator] Retrieval logs cleaned: ${logsCleanedUp}`);
|
|
647
|
+
|
|
610
648
|
return {
|
|
611
649
|
episodesProcessed: episodeResult.episodesProcessed,
|
|
612
650
|
memoriesCreated: episodeResult.memoriesCreated,
|
|
613
651
|
digestsCreated: memoryResult.digestsCreated,
|
|
614
652
|
contradictionsFound: memoryResult.contradictionsFound,
|
|
653
|
+
connectionsDecayed,
|
|
654
|
+
logsCleanedUp,
|
|
615
655
|
};
|
|
616
656
|
}
|
|
617
657
|
}
|