@aman_asmuei/amem 0.3.0 → 0.4.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.
@@ -12,6 +12,43 @@ export interface MemoryStats {
12
12
  total: number;
13
13
  byType: Record<string, number>;
14
14
  }
15
+ export interface LogEntry {
16
+ id: string;
17
+ sessionId: string;
18
+ role: "user" | "assistant" | "system";
19
+ content: string;
20
+ timestamp: number;
21
+ project: string;
22
+ metadata: Record<string, unknown>;
23
+ }
24
+ export interface LogEntryInput {
25
+ sessionId: string;
26
+ role: "user" | "assistant" | "system";
27
+ content: string;
28
+ project: string;
29
+ metadata?: Record<string, unknown>;
30
+ }
31
+ export interface MemoryVersion {
32
+ versionId: string;
33
+ memoryId: string;
34
+ content: string;
35
+ confidence: number;
36
+ editedAt: number;
37
+ reason: string;
38
+ }
39
+ export interface MemoryRelation {
40
+ id: string;
41
+ fromId: string;
42
+ toId: string;
43
+ relationshipType: string;
44
+ strength: number;
45
+ createdAt: number;
46
+ }
47
+ export interface PatchInput {
48
+ field: "content" | "confidence" | "tags" | "type";
49
+ value: string | number | string[];
50
+ reason: string;
51
+ }
15
52
  export interface AmemDatabase {
16
53
  insertMemory(input: MemoryInput): string;
17
54
  getById(id: string): Memory | null;
@@ -28,5 +65,19 @@ export interface AmemDatabase {
28
65
  getAllForProject(project: string): Memory[];
29
66
  listTables(): string[];
30
67
  close(): void;
68
+ appendLog(entry: LogEntryInput): string;
69
+ getLogBySession(sessionId: string): LogEntry[];
70
+ searchLog(query: string, limit?: number): LogEntry[];
71
+ getRecentLog(limit: number, project?: string): LogEntry[];
72
+ snapshotVersion(memoryId: string, reason: string): void;
73
+ getVersionHistory(memoryId: string): MemoryVersion[];
74
+ patchMemory(id: string, patch: PatchInput): boolean;
75
+ addRelation(fromId: string, toId: string, type: string, strength?: number): string;
76
+ getRelations(memoryId: string): MemoryRelation[];
77
+ removeRelation(relationId: string): void;
78
+ getRelatedMemories(memoryId: string): Memory[];
79
+ getMemoriesByDateRange(from: number, to: number): Memory[];
80
+ getMemoriesSince(timestamp: number): Memory[];
81
+ fullTextSearch(query: string, limit?: number, scopeProject?: string): Memory[];
31
82
  }
32
83
  export declare function createDatabase(dbPath: string): AmemDatabase;
package/dist/database.js CHANGED
@@ -20,6 +20,7 @@ function rowToMemory(row) {
20
20
  export function createDatabase(dbPath) {
21
21
  const db = new Database(dbPath);
22
22
  db.pragma("journal_mode = WAL");
23
+ db.pragma("foreign_keys = ON");
23
24
  db.exec(`
24
25
  CREATE TABLE IF NOT EXISTS memories (
25
26
  id TEXT PRIMARY KEY,
@@ -38,6 +39,64 @@ export function createDatabase(dbPath) {
38
39
  CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
39
40
  CREATE INDEX IF NOT EXISTS idx_memories_created_at ON memories(created_at);
40
41
  CREATE INDEX IF NOT EXISTS idx_memories_confidence ON memories(confidence);
42
+
43
+ -- Lossless raw conversation log (append-only)
44
+ CREATE TABLE IF NOT EXISTS conversation_log (
45
+ id TEXT PRIMARY KEY,
46
+ session_id TEXT NOT NULL,
47
+ role TEXT NOT NULL CHECK(role IN ('user','assistant','system')),
48
+ content TEXT NOT NULL,
49
+ timestamp INTEGER NOT NULL,
50
+ project TEXT NOT NULL DEFAULT 'global',
51
+ metadata TEXT NOT NULL DEFAULT '{}'
52
+ );
53
+ CREATE INDEX IF NOT EXISTS idx_log_session ON conversation_log(session_id);
54
+ CREATE INDEX IF NOT EXISTS idx_log_timestamp ON conversation_log(timestamp);
55
+ CREATE INDEX IF NOT EXISTS idx_log_project ON conversation_log(project);
56
+
57
+ -- FTS for full-text search on memories
58
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
59
+ id UNINDEXED,
60
+ content,
61
+ tags,
62
+ content='memories',
63
+ content_rowid='rowid'
64
+ );
65
+
66
+ -- FTS for full-text search on conversation log
67
+ CREATE VIRTUAL TABLE IF NOT EXISTS log_fts USING fts5(
68
+ id UNINDEXED,
69
+ content,
70
+ content='conversation_log',
71
+ content_rowid='rowid'
72
+ );
73
+
74
+ -- Memory version history
75
+ CREATE TABLE IF NOT EXISTS memory_versions (
76
+ version_id TEXT PRIMARY KEY,
77
+ memory_id TEXT NOT NULL,
78
+ content TEXT NOT NULL,
79
+ confidence REAL NOT NULL,
80
+ edited_at INTEGER NOT NULL,
81
+ reason TEXT NOT NULL DEFAULT 'manual edit',
82
+ FOREIGN KEY(memory_id) REFERENCES memories(id) ON DELETE CASCADE
83
+ );
84
+ CREATE INDEX IF NOT EXISTS idx_versions_memory_id ON memory_versions(memory_id);
85
+
86
+ -- Knowledge graph: relations between memories
87
+ CREATE TABLE IF NOT EXISTS memory_relations (
88
+ id TEXT PRIMARY KEY,
89
+ from_id TEXT NOT NULL,
90
+ to_id TEXT NOT NULL,
91
+ relationship_type TEXT NOT NULL,
92
+ strength REAL NOT NULL DEFAULT 0.8,
93
+ created_at INTEGER NOT NULL,
94
+ FOREIGN KEY(from_id) REFERENCES memories(id) ON DELETE CASCADE,
95
+ FOREIGN KEY(to_id) REFERENCES memories(id) ON DELETE CASCADE,
96
+ UNIQUE(from_id, to_id, relationship_type)
97
+ );
98
+ CREATE INDEX IF NOT EXISTS idx_relations_from ON memory_relations(from_id);
99
+ CREATE INDEX IF NOT EXISTS idx_relations_to ON memory_relations(to_id);
41
100
  `);
42
101
  // Migration: add scope column if not present
43
102
  const columns = db.pragma('table_info(memories)');
@@ -69,7 +128,50 @@ export function createDatabase(dbPath) {
69
128
  listTables: db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name`),
70
129
  searchByScope: db.prepare(`SELECT * FROM memories WHERE scope = ? ORDER BY last_accessed DESC`),
71
130
  getAllForProject: db.prepare(`SELECT * FROM memories WHERE scope = 'global' OR scope = ? ORDER BY last_accessed DESC`),
131
+ updateContent: db.prepare(`UPDATE memories SET content = ?, last_accessed = ? WHERE id = ?`),
132
+ updateType: db.prepare(`UPDATE memories SET type = ?, last_accessed = ? WHERE id = ?`),
133
+ updateTags: db.prepare(`UPDATE memories SET tags = ?, last_accessed = ? WHERE id = ?`),
134
+ getByDateRange: db.prepare(`SELECT * FROM memories WHERE created_at BETWEEN ? AND ? ORDER BY created_at DESC`),
135
+ getSince: db.prepare(`SELECT * FROM memories WHERE created_at >= ? ORDER BY created_at DESC`),
136
+ // Log
137
+ insertLog: db.prepare(`
138
+ INSERT INTO conversation_log (id, session_id, role, content, timestamp, project, metadata)
139
+ VALUES (?, ?, ?, ?, ?, ?, ?)
140
+ `),
141
+ getLogBySession: db.prepare(`SELECT * FROM conversation_log WHERE session_id = ? ORDER BY timestamp ASC`),
142
+ getRecentLog: db.prepare(`SELECT * FROM conversation_log ORDER BY timestamp DESC LIMIT ?`),
143
+ getRecentLogByProject: db.prepare(`SELECT * FROM conversation_log WHERE project = ? ORDER BY timestamp DESC LIMIT ?`),
144
+ // Versions
145
+ insertVersion: db.prepare(`
146
+ INSERT INTO memory_versions (version_id, memory_id, content, confidence, edited_at, reason)
147
+ VALUES (?, ?, ?, ?, ?, ?)
148
+ `),
149
+ getVersions: db.prepare(`SELECT * FROM memory_versions WHERE memory_id = ? ORDER BY edited_at DESC`),
150
+ // Relations
151
+ insertRelation: db.prepare(`
152
+ INSERT OR REPLACE INTO memory_relations (id, from_id, to_id, relationship_type, strength, created_at)
153
+ VALUES (?, ?, ?, ?, ?, ?)
154
+ `),
155
+ getRelationsFrom: db.prepare(`SELECT * FROM memory_relations WHERE from_id = ?`),
156
+ getRelationsTo: db.prepare(`SELECT * FROM memory_relations WHERE to_id = ?`),
157
+ deleteRelation: db.prepare(`DELETE FROM memory_relations WHERE id = ?`),
72
158
  };
159
+ // Keep FTS index in sync via triggers
160
+ db.exec(`
161
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
162
+ INSERT INTO memories_fts(id, content, tags) VALUES (new.id, new.content, new.tags);
163
+ END;
164
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
165
+ INSERT INTO memories_fts(memories_fts, id, content, tags) VALUES ('delete', old.id, old.content, old.tags);
166
+ END;
167
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
168
+ INSERT INTO memories_fts(memories_fts, id, content, tags) VALUES ('delete', old.id, old.content, old.tags);
169
+ INSERT INTO memories_fts(id, content, tags) VALUES (new.id, new.content, new.tags);
170
+ END;
171
+ CREATE TRIGGER IF NOT EXISTS log_ai AFTER INSERT ON conversation_log BEGIN
172
+ INSERT INTO log_fts(id, content) VALUES (new.id, new.content);
173
+ END;
174
+ `);
73
175
  return {
74
176
  insertMemory(input) {
75
177
  const id = randomUUID();
@@ -138,6 +240,193 @@ export function createDatabase(dbPath) {
138
240
  close() {
139
241
  db.close();
140
242
  },
243
+ // ── Raw log ──────────────────────────────────────────────
244
+ appendLog(entry) {
245
+ const id = randomUUID();
246
+ stmts.insertLog.run(id, entry.sessionId, entry.role, entry.content, Date.now(), entry.project, JSON.stringify(entry.metadata ?? {}));
247
+ return id;
248
+ },
249
+ getLogBySession(sessionId) {
250
+ const rows = stmts.getLogBySession.all(sessionId);
251
+ return rows.map(r => ({
252
+ id: r.id,
253
+ sessionId: r.session_id,
254
+ role: r.role,
255
+ content: r.content,
256
+ timestamp: r.timestamp,
257
+ project: r.project,
258
+ metadata: JSON.parse(r.metadata),
259
+ }));
260
+ },
261
+ searchLog(query, limit = 20) {
262
+ const mapRow = (r) => ({
263
+ id: r.id,
264
+ sessionId: r.session_id,
265
+ role: r.role,
266
+ content: r.content,
267
+ timestamp: r.timestamp,
268
+ project: r.project,
269
+ metadata: JSON.parse(r.metadata),
270
+ });
271
+ try {
272
+ const stmt = db.prepare(`
273
+ SELECT conversation_log.* FROM log_fts
274
+ JOIN conversation_log ON conversation_log.id = log_fts.id
275
+ WHERE log_fts.content MATCH ?
276
+ ORDER BY rank
277
+ LIMIT ?
278
+ `);
279
+ const rows = stmt.all(query, limit);
280
+ return rows.map(mapRow);
281
+ }
282
+ catch {
283
+ // FTS5 may fail on special characters — fall back to LIKE
284
+ const escaped = query.replace(/[%_]/g, ch => "\\" + ch);
285
+ const pattern = `%${escaped}%`;
286
+ const stmt = db.prepare(`
287
+ SELECT * FROM conversation_log WHERE content LIKE ? ESCAPE '\\' ORDER BY timestamp DESC LIMIT ?
288
+ `);
289
+ const rows = stmt.all(pattern, limit);
290
+ return rows.map(mapRow);
291
+ }
292
+ },
293
+ getRecentLog(limit, project) {
294
+ const rows = (project
295
+ ? stmts.getRecentLogByProject.all(project, limit)
296
+ : stmts.getRecentLog.all(limit));
297
+ return rows.map(r => ({
298
+ id: r.id,
299
+ sessionId: r.session_id,
300
+ role: r.role,
301
+ content: r.content,
302
+ timestamp: r.timestamp,
303
+ project: r.project,
304
+ metadata: JSON.parse(r.metadata),
305
+ }));
306
+ },
307
+ // ── Versioning ──────────────────────────────────────────
308
+ snapshotVersion(memoryId, reason) {
309
+ const mem = this.getById(memoryId);
310
+ if (!mem)
311
+ return;
312
+ stmts.insertVersion.run(randomUUID(), mem.id, mem.content, mem.confidence, Date.now(), reason);
313
+ },
314
+ getVersionHistory(memoryId) {
315
+ const rows = stmts.getVersions.all(memoryId);
316
+ return rows.map(r => ({
317
+ versionId: r.version_id,
318
+ memoryId: r.memory_id,
319
+ content: r.content,
320
+ confidence: r.confidence,
321
+ editedAt: r.edited_at,
322
+ reason: r.reason,
323
+ }));
324
+ },
325
+ patchMemory(id, patch) {
326
+ const mem = this.getById(id);
327
+ if (!mem)
328
+ return false;
329
+ // Snapshot before patching
330
+ this.snapshotVersion(id, `before patch: ${patch.reason}`);
331
+ const now = Date.now();
332
+ switch (patch.field) {
333
+ case "content":
334
+ stmts.updateContent.run(patch.value, now, id);
335
+ break;
336
+ case "confidence":
337
+ stmts.updateConfidence.run(patch.value, now, id);
338
+ break;
339
+ case "tags":
340
+ stmts.updateTags.run(JSON.stringify(patch.value), now, id);
341
+ break;
342
+ case "type":
343
+ stmts.updateType.run(patch.value, now, id);
344
+ break;
345
+ default:
346
+ return false;
347
+ }
348
+ return true;
349
+ },
350
+ // ── Relations ────────────────────────────────────────────
351
+ addRelation(fromId, toId, type, strength = 0.8) {
352
+ const id = randomUUID();
353
+ stmts.insertRelation.run(id, fromId, toId, type, strength, Date.now());
354
+ return id;
355
+ },
356
+ getRelations(memoryId) {
357
+ const from = stmts.getRelationsFrom.all(memoryId);
358
+ const to = stmts.getRelationsTo.all(memoryId);
359
+ return [...from, ...to].map(r => ({
360
+ id: r.id,
361
+ fromId: r.from_id,
362
+ toId: r.to_id,
363
+ relationshipType: r.relationship_type,
364
+ strength: r.strength,
365
+ createdAt: r.created_at,
366
+ }));
367
+ },
368
+ removeRelation(relationId) {
369
+ stmts.deleteRelation.run(relationId);
370
+ },
371
+ getRelatedMemories(memoryId) {
372
+ const relations = this.getRelations(memoryId);
373
+ const ids = relations.map(r => r.fromId === memoryId ? r.toId : r.fromId);
374
+ return ids
375
+ .map(id => this.getById(id))
376
+ .filter((m) => m !== null);
377
+ },
378
+ // ── Temporal queries ─────────────────────────────────────
379
+ getMemoriesByDateRange(from, to) {
380
+ const rows = stmts.getByDateRange.all(from, to);
381
+ return rows.map(rowToMemory);
382
+ },
383
+ getMemoriesSince(timestamp) {
384
+ const rows = stmts.getSince.all(timestamp);
385
+ return rows.map(rowToMemory);
386
+ },
387
+ // ── Full-text search ─────────────────────────────────────
388
+ fullTextSearch(query, limit = 20, scopeProject) {
389
+ try {
390
+ if (scopeProject) {
391
+ const stmt = db.prepare(`
392
+ SELECT memories.* FROM memories_fts
393
+ JOIN memories ON memories.id = memories_fts.id
394
+ WHERE memories_fts MATCH ? AND (memories.scope = 'global' OR memories.scope = ?)
395
+ ORDER BY rank
396
+ LIMIT ?
397
+ `);
398
+ const rows = stmt.all(query, scopeProject, limit);
399
+ return rows.map(rowToMemory);
400
+ }
401
+ const stmt = db.prepare(`
402
+ SELECT memories.* FROM memories_fts
403
+ JOIN memories ON memories.id = memories_fts.id
404
+ WHERE memories_fts MATCH ?
405
+ ORDER BY rank
406
+ LIMIT ?
407
+ `);
408
+ const rows = stmt.all(query, limit);
409
+ return rows.map(rowToMemory);
410
+ }
411
+ catch {
412
+ // FTS may fail on complex queries — fall back to LIKE
413
+ const escaped = query.replace(/[%_]/g, ch => "\\" + ch);
414
+ const pattern = `%${escaped}%`;
415
+ if (scopeProject) {
416
+ const stmt = db.prepare(`
417
+ SELECT * FROM memories WHERE (content LIKE ? ESCAPE '\\' OR tags LIKE ? ESCAPE '\\')
418
+ AND (scope = 'global' OR scope = ?) ORDER BY last_accessed DESC LIMIT ?
419
+ `);
420
+ const rows = stmt.all(pattern, pattern, scopeProject, limit);
421
+ return rows.map(rowToMemory);
422
+ }
423
+ const stmt = db.prepare(`
424
+ SELECT * FROM memories WHERE content LIKE ? ESCAPE '\\' OR tags LIKE ? ESCAPE '\\' ORDER BY last_accessed DESC LIMIT ?
425
+ `);
426
+ const rows = stmt.all(pattern, pattern, limit);
427
+ return rows.map(rowToMemory);
428
+ }
429
+ },
141
430
  };
142
431
  }
143
432
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2IzC,SAAS,WAAW,CAAC,GAAc;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAuB;QACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAa;QACtC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACtB,CAAC,CAAC,IAAI,YAAY,CACd,GAAG,CAAC,SAAS,CAAC,MAAM,EACpB,GAAG,CAAC,SAAS,CAAC,UAAU,EACxB,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAC7B;YACH,CAAC,CAAC,IAAI;QACR,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EP,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAuB,CAAC;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,EAAE,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IAClF,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IAE5E,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;;;KAGlB,CAAC;QACF,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC;QAC1D,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC;QAC7F,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC;QAC/F,oBAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC;QACtF,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC;QACxE,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC;QACF,eAAe,EAAE,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC;QAC7E,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC;;KAEvB,CAAC;QACF,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC;QAC7D,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC;QAC9D,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC;QACrF,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC;QAC3F,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC;QAC/F,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,wFAAwF,CAAC;QACtH,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC;QAC5F,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,8DAA8D,CAAC;QACtF,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,8DAA8D,CAAC;QACtF,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC;QAC9G,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC;QAC7F,MAAM;QACN,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC;;;KAGrB,CAAC;QACF,eAAe,EAAE,EAAE,CAAC,OAAO,CAAC,4EAA4E,CAAC;QACzG,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC;QAC1F,qBAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC;QACrH,WAAW;QACX,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC;;;KAGzB,CAAC;QACF,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC;QACpG,YAAY;QACZ,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC;;;KAG1B,CAAC;QACF,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC;QAChF,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC;QAC5E,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC;KACxE,CAAC;IAEF,sCAAsC;IACtC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;IAEH,OAAO;QACL,YAAY,CAAC,KAAkB;YAC7B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS;gBACrC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC7F,CAAC,CAAC,IAAI,CAAC;YACT,KAAK,CAAC,MAAM,CAAC,GAAG,CACd,EAAE,EACF,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAC1B,KAAK,CAAC,UAAU,EAChB,GAAG,EACH,GAAG,EACH,KAAK,CAAC,MAAM,EACZ,eAAe,EACf,KAAK,CAAC,KAAK,CACZ,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,CAAC,EAAU;YAChB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAA0B,CAAC;YAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;QAED,YAAY,CAAC,IAAqB;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC;YACzD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,WAAW,CAAC,GAAW;YACrB,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAgB,CAAC;YAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,oBAAoB;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAiB,CAAC;YAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM;YACJ,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAiB,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,gBAAgB,CAAC,EAAU,EAAE,UAAkB;YAC7C,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,eAAe,CAAC,EAAU,EAAE,SAAuB;YACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YACzF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,WAAW,CAAC,EAAU;YACpB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,YAAY,CAAC,EAAU;YACrB,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,QAAQ;YACN,MAAM,KAAK,GAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAwB,CAAC,KAAK,CAAC;YAChE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAuC,CAAC;YAChF,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC/B,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;QAED,aAAa,CAAC,KAAa;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAgB,CAAC;YAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,gBAAgB,CAAC,OAAe;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAgB,CAAC;YAChE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,UAAU;YACR,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAwB,CAAC;YAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QAED,4DAA4D;QAC5D,SAAS,CAAC,KAAoB;YAC5B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,KAAK,CAAC,SAAS,CAAC,GAAG,CACjB,EAAE,EACF,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,GAAG,EAAE,EACV,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CACrC,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,eAAe,CAAC,SAAiB;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAa,CAAC;YAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,UAAU;gBACvB,IAAI,EAAE,CAAC,CAAC,IAAwB;gBAChC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAA4B;aAC5D,CAAC,CAAC,CAAC;QACN,CAAC;QAED,SAAS,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;YACjC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAY,EAAE,CAAC,CAAC;gBACvC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,UAAU;gBACvB,IAAI,EAAE,CAAC,CAAC,IAAwB;gBAChC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAA4B;aAC5D,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;SAMvB,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAa,CAAC;gBAChD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;gBAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC;gBAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;SAEvB,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAa,CAAC;gBAClD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,YAAY,CAAC,KAAa,EAAE,OAAgB;YAC1C,MAAM,IAAI,GAAG,CAAC,OAAO;gBACnB,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;gBACjD,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAa,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,UAAU;gBACvB,IAAI,EAAE,CAAC,CAAC,IAAwB;gBAChC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAA4B;aAC5D,CAAC,CAAC,CAAC;QACN,CAAC;QAED,2DAA2D;QAC3D,eAAe,CAAC,QAAgB,EAAE,MAAc;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QACjG,CAAC;QAED,iBAAiB,CAAC,QAAgB;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAiB,CAAC;YAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,SAAS,EAAE,CAAC,CAAC,UAAU;gBACvB,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,WAAW,CAAC,EAAU,EAAE,KAAiB;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,2BAA2B;YAC3B,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACZ,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBACxD,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBACvE,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBACrD,MAAM;gBACR;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4DAA4D;QAC5D,WAAW,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,QAAQ,GAAG,GAAG;YACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,YAAY,CAAC,QAAgB;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAkB,CAAC;YACnE,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAkB,CAAC;YAC/D,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,OAAO;gBACjB,IAAI,EAAE,CAAC,CAAC,KAAK;gBACb,gBAAgB,EAAE,CAAC,CAAC,iBAAiB;gBACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,UAAU;aACxB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,cAAc,CAAC,UAAkB;YAC/B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAED,kBAAkB,CAAC,QAAgB;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1E,OAAO,GAAG;iBACP,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBAC3B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,4DAA4D;QAC5D,sBAAsB,CAAC,IAAY,EAAE,EAAU;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAgB,CAAC;YAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,gBAAgB,CAAC,SAAiB;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAgB,CAAC;YAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,4DAA4D;QAC5D,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE,EAAE,YAAqB;YAC7D,IAAI,CAAC;gBACH,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;WAMvB,CAAC,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAgB,CAAC;oBACjE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;gBACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;SAMvB,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAgB,CAAC;gBACnD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;gBACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC;gBAC/B,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;WAGvB,CAAC,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAgB,CAAC;oBAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;gBACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;SAEvB,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAgB,CAAC;gBAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,9 @@ import { MemoryType } from "./memory.js";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
9
9
  import fs from "node:fs";
10
+ import { createRequire } from "node:module";
11
+ const require = createRequire(import.meta.url);
12
+ const pkg = require("../package.json");
10
13
  const AMEM_DIR = process.env.AMEM_DIR || path.join(os.homedir(), ".amem");
11
14
  const DB_PATH = process.env.AMEM_DB || path.join(AMEM_DIR, "memory.db");
12
15
  fs.mkdirSync(path.dirname(DB_PATH), { recursive: true });
@@ -29,7 +32,7 @@ const db = createDatabase(DB_PATH);
29
32
  const currentProject = detectProject();
30
33
  const server = new McpServer({
31
34
  name: "amem-mcp-server",
32
- version: "0.3.0",
35
+ version: pkg.version,
33
36
  });
34
37
  registerTools(server, db, currentProject);
35
38
  // Register MCP prompts — these teach AI clients how to use Amem effectively
@@ -74,7 +77,26 @@ Call memory_extract with an array of memories. Each memory should be:
74
77
  - Ephemeral task details ("currently debugging X")
75
78
  - Things obvious from the code itself
76
79
  - Sensitive data (API keys, passwords)
77
- - Exact file contents (just reference the path)`,
80
+ - Exact file contents (just reference the path)
81
+
82
+ ## Patching vs. Storing
83
+
84
+ - Memory mostly right but has a wrong detail → **memory_patch** (surgical, auto-versioned)
85
+ - Memory completely wrong → memory_forget then memory_store
86
+ - Always check with memory_search or memory_recall before creating a duplicate
87
+
88
+ ## Building the Knowledge Graph
89
+
90
+ After storing decisions, link connected memories with memory_relate:
91
+ - Decision "supports" Pattern (why code is written a certain way)
92
+ - Correction "caused_by" Decision (why something is off-limits)
93
+ - Topology "depends_on" Topology (how modules relate)
94
+
95
+ ## Lossless Log
96
+
97
+ For raw exchanges not yet ready to distill:
98
+ - Use memory_log to preserve turns verbatim (append-only, nothing lost)
99
+ - Search later with memory_log_recall and promote to proper memories`,
78
100
  },
79
101
  }],
80
102
  }));
@@ -87,12 +109,26 @@ server.registerPrompt("session-start", {
87
109
  type: "text",
88
110
  text: `You have access to Amem memory. At the start of this conversation:
89
111
 
90
- 1. Call memory_context with the likely topic (based on what the user asks about)
91
- 2. Use any corrections as hard constraints they override other context
92
- 3. Use decisions and patterns to inform your approach
93
- 4. Mention relevant memories naturally: "I remember you prefer X" not "According to my memory database..."
112
+ 1. Call memory_inject with the likely topic this surfaces corrections (hard constraints) and decisions first
113
+ 2. Call memory_context for broader preferences, patterns, and topology
114
+ 3. Apply corrections as absolute constraints they override everything else
115
+ 4. Reference memories naturally: "I remember you prefer X" not "According to my memory database..."
116
+ 5. If continuing previous work, call memory_log_recall with the session ID or a keyword to replay raw history
94
117
 
95
- If the user seems to be continuing previous work, call memory_recall to find relevant history.`,
118
+ ## Tool Quick Reference
119
+
120
+ | Goal | Tool |
121
+ |------|------|
122
+ | Load context for a task | memory_inject, memory_context |
123
+ | Find something specific | memory_recall (semantic), memory_search (exact) |
124
+ | Store a new memory | memory_store or memory_extract (batch) |
125
+ | Fix an existing memory | memory_patch (surgical, versioned) |
126
+ | See what changed | memory_since "7d" |
127
+ | Preserve raw conversation | memory_log |
128
+ | Replay a past session | memory_log_recall |
129
+ | Link related memories | memory_relate |
130
+ | View edit history | memory_versions |
131
+ | Clean up the database | memory_consolidate |`,
96
132
  },
97
133
  }],
98
134
  }));
@@ -153,6 +189,43 @@ server.registerResource("summary", "amem://summary", { mimeType: "text/plain", d
153
189
  contents: [{ uri: "amem://summary", mimeType: "text/plain", text }],
154
190
  };
155
191
  });
192
+ server.registerResource("log-recent", "amem://log/recent", { mimeType: "text/plain", description: "Recent raw conversation log entries — lossless, append-only history" }, () => {
193
+ const entries = db.getRecentLog(50, currentProject);
194
+ if (entries.length === 0) {
195
+ return { contents: [{ uri: "amem://log/recent", mimeType: "text/plain", text: "No log entries yet. Use memory_log to preserve conversation turns." }] };
196
+ }
197
+ const lines = [`# Recent Conversation Log (${entries.length} entries)\n`];
198
+ for (const e of entries) {
199
+ const ts = new Date(e.timestamp).toISOString().slice(0, 16).replace("T", " ");
200
+ lines.push(`[${ts}] ${e.role.toUpperCase()} (session: ${e.sessionId.slice(0, 8)})`);
201
+ lines.push(e.content.length > 200 ? e.content.slice(0, 200) + "…" : e.content);
202
+ lines.push("");
203
+ }
204
+ return { contents: [{ uri: "amem://log/recent", mimeType: "text/plain", text: lines.join("\n") }] };
205
+ });
206
+ server.registerResource("graph-overview", "amem://graph", { mimeType: "text/plain", description: "Knowledge graph overview — all explicit memory relationships" }, () => {
207
+ const all = db.getAll();
208
+ const lines = [`# Knowledge Graph (${all.length} nodes)\n`];
209
+ let edgeCount = 0;
210
+ for (const mem of all) {
211
+ const relations = db.getRelations(mem.id);
212
+ const outgoing = relations.filter(r => r.fromId === mem.id);
213
+ if (outgoing.length > 0) {
214
+ lines.push(`[${mem.id.slice(0, 8)}] "${mem.content.slice(0, 60)}"`);
215
+ for (const r of outgoing) {
216
+ const target = db.getById(r.toId);
217
+ lines.push(` → [${r.relationshipType}] "${target?.content.slice(0, 50) ?? r.toId.slice(0, 8)}"`);
218
+ edgeCount++;
219
+ }
220
+ lines.push("");
221
+ }
222
+ }
223
+ if (edgeCount === 0) {
224
+ return { contents: [{ uri: "amem://graph", mimeType: "text/plain", text: "No memory relations yet. Use memory_relate to build the knowledge graph." }] };
225
+ }
226
+ lines.unshift(`${edgeCount} edges\n`);
227
+ return { contents: [{ uri: "amem://graph", mimeType: "text/plain", text: lines.join("\n") }] };
228
+ });
156
229
  process.on("SIGINT", () => {
157
230
  db.close();
158
231
  process.exit(0);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}