cortex-mcp 2.4.0 → 2.6.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 (47) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/README.md +35 -39
  3. package/dist/memory/access-pattern-tracker.d.ts +51 -0
  4. package/dist/memory/access-pattern-tracker.d.ts.map +1 -0
  5. package/dist/memory/access-pattern-tracker.js +92 -0
  6. package/dist/memory/access-pattern-tracker.js.map +1 -0
  7. package/dist/memory/auto-learner.d.ts.map +1 -1
  8. package/dist/memory/auto-learner.js +33 -2
  9. package/dist/memory/auto-learner.js.map +1 -1
  10. package/dist/memory/cross-memory-linker.d.ts +18 -0
  11. package/dist/memory/cross-memory-linker.d.ts.map +1 -0
  12. package/dist/memory/cross-memory-linker.js +115 -0
  13. package/dist/memory/cross-memory-linker.js.map +1 -0
  14. package/dist/memory/daily-diary.d.ts +30 -0
  15. package/dist/memory/daily-diary.d.ts.map +1 -0
  16. package/dist/memory/daily-diary.js +159 -0
  17. package/dist/memory/daily-diary.js.map +1 -0
  18. package/dist/memory/embedding-cache.d.ts +32 -0
  19. package/dist/memory/embedding-cache.d.ts.map +1 -0
  20. package/dist/memory/embedding-cache.js +76 -0
  21. package/dist/memory/embedding-cache.js.map +1 -0
  22. package/dist/memory/memory-decay.d.ts.map +1 -1
  23. package/dist/memory/memory-decay.js +23 -6
  24. package/dist/memory/memory-decay.js.map +1 -1
  25. package/dist/memory/memory-export-md.d.ts +12 -0
  26. package/dist/memory/memory-export-md.d.ts.map +1 -0
  27. package/dist/memory/memory-export-md.js +188 -0
  28. package/dist/memory/memory-export-md.js.map +1 -0
  29. package/dist/memory/memory-ranker.d.ts.map +1 -1
  30. package/dist/memory/memory-ranker.js +7 -2
  31. package/dist/memory/memory-ranker.js.map +1 -1
  32. package/dist/memory/mmr-reranker.d.ts +39 -0
  33. package/dist/memory/mmr-reranker.d.ts.map +1 -0
  34. package/dist/memory/mmr-reranker.js +115 -0
  35. package/dist/memory/mmr-reranker.js.map +1 -0
  36. package/dist/memory/query-expansion.d.ts +28 -0
  37. package/dist/memory/query-expansion.d.ts.map +1 -0
  38. package/dist/memory/query-expansion.js +140 -0
  39. package/dist/memory/query-expansion.js.map +1 -0
  40. package/dist/memory/soul-manager.d.ts +30 -0
  41. package/dist/memory/soul-manager.d.ts.map +1 -0
  42. package/dist/memory/soul-manager.js +171 -0
  43. package/dist/memory/soul-manager.js.map +1 -0
  44. package/dist/server/mcp-handler.d.ts.map +1 -1
  45. package/dist/server/mcp-handler.js +119 -48
  46. package/dist/server/mcp-handler.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.appendDiaryEntry = appendDiaryEntry;
37
+ exports.getDiaryForDate = getDiaryForDate;
38
+ exports.getRecentDiary = getRecentDiary;
39
+ exports.formatDiaryContext = formatDiaryContext;
40
+ exports.getDiaryStats = getDiaryStats;
41
+ /**
42
+ * Daily Diary — OpenClaw-style daily Markdown logs.
43
+ *
44
+ * Writes append-only daily notes like OpenClaw's memory/YYYY-MM-DD.md.
45
+ * Each day gets its own file with timestamped entries:
46
+ * - What was learned
47
+ * - What files changed
48
+ * - What decisions were made
49
+ * - What bugs were fixed
50
+ *
51
+ * This gives the AI a "running journal" of recent work.
52
+ * Injected into force_recall as Layer 7.5 (recent context).
53
+ *
54
+ * Stored in: ~/.cortex-memory/diary/YYYY-MM-DD.md
55
+ */
56
+ const fs = __importStar(require("fs"));
57
+ const path = __importStar(require("path"));
58
+ const os = __importStar(require("os"));
59
+ const DIARY_DIR = path.join(os.homedir(), '.cortex-memory', 'diary');
60
+ /**
61
+ * Append an entry to today's diary.
62
+ */
63
+ function appendDiaryEntry(entry) {
64
+ try {
65
+ if (!fs.existsSync(DIARY_DIR))
66
+ fs.mkdirSync(DIARY_DIR, { recursive: true });
67
+ const today = getDateString();
68
+ const diaryPath = path.join(DIARY_DIR, `${today}.md`);
69
+ const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit' });
70
+ const icon = ICONS[entry.type] || '📝';
71
+ const fileSuffix = entry.file ? ` _(${path.basename(entry.file)})_` : '';
72
+ const line = `- ${time} ${icon} **${entry.type.toUpperCase()}**: ${entry.content}${fileSuffix}\n`;
73
+ // Create header if new file
74
+ if (!fs.existsSync(diaryPath)) {
75
+ const header = `# 📔 Cortex Diary — ${today}\n\n`;
76
+ fs.writeFileSync(diaryPath, header, 'utf-8');
77
+ }
78
+ fs.appendFileSync(diaryPath, line, 'utf-8');
79
+ }
80
+ catch { /* diary is non-critical */ }
81
+ }
82
+ /**
83
+ * Get diary content for a specific date.
84
+ */
85
+ function getDiaryForDate(date) {
86
+ try {
87
+ const diaryPath = path.join(DIARY_DIR, `${date}.md`);
88
+ if (fs.existsSync(diaryPath)) {
89
+ return fs.readFileSync(diaryPath, 'utf-8');
90
+ }
91
+ }
92
+ catch { /* */ }
93
+ return null;
94
+ }
95
+ /**
96
+ * Get the last N days of diary entries combined.
97
+ */
98
+ function getRecentDiary(days = 3) {
99
+ const entries = [];
100
+ const now = Date.now();
101
+ const DAY = 24 * 60 * 60 * 1000;
102
+ for (let i = 0; i < days; i++) {
103
+ const date = new Date(now - i * DAY);
104
+ const dateStr = formatDate(date);
105
+ const content = getDiaryForDate(dateStr);
106
+ if (content && content.trim().length > 50) {
107
+ entries.push(content.trim());
108
+ }
109
+ }
110
+ return entries.join('\n\n---\n\n');
111
+ }
112
+ /**
113
+ * Format diary context for injection into force_recall.
114
+ * Returns last 2 days of diary, condensed.
115
+ */
116
+ function formatDiaryContext() {
117
+ const diary = getRecentDiary(2);
118
+ if (!diary || diary.length < 50)
119
+ return '';
120
+ // Truncate to last 20 entries to avoid flooding context
121
+ const lines = diary.split('\n').filter(l => l.startsWith('- '));
122
+ const recent = lines.slice(-20);
123
+ if (recent.length === 0)
124
+ return '';
125
+ return `\n## 📔 Recent Diary (last 2 days)\n${recent.join('\n')}`;
126
+ }
127
+ /**
128
+ * Get diary stats for dashboard.
129
+ */
130
+ function getDiaryStats() {
131
+ try {
132
+ if (!fs.existsSync(DIARY_DIR))
133
+ return { totalDays: 0, todayEntries: 0 };
134
+ const files = fs.readdirSync(DIARY_DIR).filter(f => f.endsWith('.md'));
135
+ const today = getDiaryForDate(getDateString());
136
+ const todayEntries = today ? today.split('\n').filter(l => l.startsWith('- ')).length : 0;
137
+ return { totalDays: files.length, todayEntries };
138
+ }
139
+ catch {
140
+ return { totalDays: 0, todayEntries: 0 };
141
+ }
142
+ }
143
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
144
+ const ICONS = {
145
+ decision: '📌',
146
+ correction: '🔴',
147
+ bug_fix: '🐛',
148
+ convention: '📏',
149
+ insight: '💡',
150
+ task: '📋',
151
+ file_change: '📁',
152
+ };
153
+ function getDateString() {
154
+ return formatDate(new Date());
155
+ }
156
+ function formatDate(d) {
157
+ return d.toISOString().split('T')[0]; // YYYY-MM-DD
158
+ }
159
+ //# sourceMappingURL=daily-diary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-diary.js","sourceRoot":"","sources":["../../src/memory/daily-diary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,4CAoBC;AAKD,0CAQC;AAKD,wCAeC;AAMD,gDAUC;AAKD,sCAYC;AApHD;;;;;;;;;;;;;;GAcG;AACH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAQzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAErE;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAiB;IAC9C,IAAI,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;QAEtD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3G,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,KAAK,CAAC,OAAO,GAAG,UAAU,IAAI,CAAC;QAElG,4BAA4B;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,uBAAuB,KAAK,MAAM,CAAC;YAClD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAY;IACxC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAe,CAAC;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB;IAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;IAE3C,wDAAwD;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,OAAO,uCAAuC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IACzB,IAAI,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAExE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1F,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC7C,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,MAAM,KAAK,GAA2B;IAClC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;CACpB,CAAC;AAEF,SAAS,aAAa;IAClB,OAAO,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,CAAO;IACvB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;AACvD,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Embedding Cache — Avoids re-computing embeddings for identical text.
3
+ *
4
+ * Extracted from OpenClaw's embedding_cache table architecture.
5
+ *
6
+ * Problem: Every recall re-embeds the query, even if it's the exact same text.
7
+ * With MiniLM this takes ~50ms per embedding — adds up fast.
8
+ *
9
+ * Solution: Cache embeddings in memory with an LRU eviction policy.
10
+ * Cache key = hash of the text content.
11
+ */
12
+ /**
13
+ * Get a cached embedding for text, or null if not cached.
14
+ */
15
+ export declare function getCachedEmbedding(text: string): number[] | null;
16
+ /**
17
+ * Store an embedding in the cache.
18
+ * Uses LRU eviction when cache is full.
19
+ */
20
+ export declare function cacheEmbedding(text: string, embedding: number[]): void;
21
+ /**
22
+ * Clear the entire embedding cache.
23
+ */
24
+ export declare function clearEmbeddingCache(): void;
25
+ /**
26
+ * Get cache stats for debugging/dashboard.
27
+ */
28
+ export declare function getEmbeddingCacheStats(): {
29
+ size: number;
30
+ maxSize: number;
31
+ };
32
+ //# sourceMappingURL=embedding-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-cache.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAQhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAE1E"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * Embedding Cache — Avoids re-computing embeddings for identical text.
4
+ *
5
+ * Extracted from OpenClaw's embedding_cache table architecture.
6
+ *
7
+ * Problem: Every recall re-embeds the query, even if it's the exact same text.
8
+ * With MiniLM this takes ~50ms per embedding — adds up fast.
9
+ *
10
+ * Solution: Cache embeddings in memory with an LRU eviction policy.
11
+ * Cache key = hash of the text content.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.getCachedEmbedding = getCachedEmbedding;
15
+ exports.cacheEmbedding = cacheEmbedding;
16
+ exports.clearEmbeddingCache = clearEmbeddingCache;
17
+ exports.getEmbeddingCacheStats = getEmbeddingCacheStats;
18
+ const CACHE_MAX = 256;
19
+ const cache = new Map();
20
+ /**
21
+ * Simple FNV-1a hash — fast and good enough for cache keys.
22
+ */
23
+ function hashText(text) {
24
+ let hash = 0x811c9dc5;
25
+ for (let i = 0; i < text.length; i++) {
26
+ hash ^= text.charCodeAt(i);
27
+ hash = (hash * 0x01000193) >>> 0;
28
+ }
29
+ return hash.toString(36);
30
+ }
31
+ /**
32
+ * Get a cached embedding for text, or null if not cached.
33
+ */
34
+ function getCachedEmbedding(text) {
35
+ const key = hashText(text);
36
+ const entry = cache.get(key);
37
+ if (entry) {
38
+ entry.timestamp = Date.now(); // Touch for LRU
39
+ return entry.embedding;
40
+ }
41
+ return null;
42
+ }
43
+ /**
44
+ * Store an embedding in the cache.
45
+ * Uses LRU eviction when cache is full.
46
+ */
47
+ function cacheEmbedding(text, embedding) {
48
+ const key = hashText(text);
49
+ // LRU eviction if full
50
+ if (cache.size >= CACHE_MAX && !cache.has(key)) {
51
+ let oldestKey = '';
52
+ let oldestTime = Infinity;
53
+ for (const [k, v] of cache) {
54
+ if (v.timestamp < oldestTime) {
55
+ oldestTime = v.timestamp;
56
+ oldestKey = k;
57
+ }
58
+ }
59
+ if (oldestKey)
60
+ cache.delete(oldestKey);
61
+ }
62
+ cache.set(key, { embedding, timestamp: Date.now() });
63
+ }
64
+ /**
65
+ * Clear the entire embedding cache.
66
+ */
67
+ function clearEmbeddingCache() {
68
+ cache.clear();
69
+ }
70
+ /**
71
+ * Get cache stats for debugging/dashboard.
72
+ */
73
+ function getEmbeddingCacheStats() {
74
+ return { size: cache.size, maxSize: CACHE_MAX };
75
+ }
76
+ //# sourceMappingURL=embedding-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-cache.js","sourceRoot":"","sources":["../../src/memory/embedding-cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA0BH,gDAQC;AAMD,wCAiBC;AAKD,kDAEC;AAKD,wDAEC;AArED,MAAM,SAAS,GAAG,GAAG,CAAC;AAOtB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC1B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,gBAAgB;QAC9C,OAAO,KAAK,CAAC,SAAS,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,SAAmB;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3B,uBAAuB;IACvB,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,UAAU,GAAG,QAAQ,CAAC;QAC1B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC3B,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;gBACzB,SAAS,GAAG,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QACD,IAAI,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IAClC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-decay.d.ts","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CA4F9D"}
1
+ {"version":3,"file":"memory-decay.d.ts","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAgH9D"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cleanupMemories = cleanupMemories;
4
- const types_1 = require("../types");
5
4
  const config_1 = require("../config/config");
6
5
  const memory_cache_1 = require("./memory-cache");
7
6
  function cleanupMemories(memoryStore) {
@@ -10,16 +9,34 @@ function cleanupMemories(memoryStore) {
10
9
  let cleaned = 0;
11
10
  // Wrap all writes in a single transaction (10-100x faster for bulk deactivations)
12
11
  memoryStore.runTransaction(() => {
13
- // 1. Deactivate INSIGHT memories > 14 days with 0 access (SQL-targeted)
14
- const staleInsights = memoryStore.getStaleMemories(config_1.CONFIG.INSIGHT_MAX_AGE_DAYS * DAY, 500);
12
+ // 0. Auto-expire CURRENT_TASK memories > 24h (working memory, not permanent)
13
+ // "Currently working on X" should not persist alongside "Always use TypeScript strict mode"
14
+ const TASK_MAX_AGE = 1 * DAY;
15
+ const allForTaskCleanup = memoryStore.getActive(config_1.CONFIG.MEMORY_CAP);
16
+ for (const m of allForTaskCleanup) {
17
+ if (m.type === 'CURRENT_TASK') {
18
+ const age = Date.now() - (m.createdAt || m.timestamp || 0);
19
+ if (age > TASK_MAX_AGE) {
20
+ memoryStore.deactivate(m.id);
21
+ cleaned++;
22
+ }
23
+ }
24
+ }
25
+ // 1. Two-tier OpenClaw-style decay:
26
+ // TRANSACTIONAL (high volume, decays fast): INSIGHT, CONVERSATION
27
+ // OPERATIONAL (low volume, persists): DECISION, CORRECTION, CONVENTION, BUG_FIX
28
+ const OPERATIONAL_TYPES = new Set(['DECISION', 'CORRECTION', 'CONVENTION', 'BUG_FIX', 'PROVEN_PATTERN']);
29
+ const TRANSACTIONAL_MAX_AGE = 5 * DAY; // 5 days for junk
30
+ const OPERATIONAL_MAX_AGE = 60 * DAY; // 60 days for gold (if 0 access)
31
+ const staleInsights = memoryStore.getStaleMemories(TRANSACTIONAL_MAX_AGE, 500);
15
32
  for (const m of staleInsights) {
16
- if (m.type === types_1.MemoryType.INSIGHT) {
33
+ if (!OPERATIONAL_TYPES.has(m.type)) {
17
34
  memoryStore.deactivate(m.id);
18
35
  cleaned++;
19
36
  }
20
37
  }
21
- // 2. Deactivate any memory > 30 days with 0 access (SQL-targeted)
22
- const staleAll = memoryStore.getStaleMemories(config_1.CONFIG.UNUSED_MAX_AGE_DAYS * DAY, 500);
38
+ // 2. Deactivate operational memories > 60 days with 0 access (very old, never used)
39
+ const staleAll = memoryStore.getStaleMemories(OPERATIONAL_MAX_AGE, 500);
23
40
  for (const m of staleAll) {
24
41
  memoryStore.deactivate(m.id);
25
42
  cleaned++;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-decay.js","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":";;AAYA,0CA4FC;AAhGD,oCAAsC;AACtC,6CAA0C;AAC1C,iDAAiD;AAEjD,SAAgB,eAAe,CAAC,WAAwB;IACpD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhC,IAAI,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,kFAAkF;QAClF,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE;YAC5B,wEAAwE;YACxE,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,eAAM,CAAC,oBAAoB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3F,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAU,CAAC,OAAO,EAAE,CAAC;oBAChC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;YAED,kEAAkE;YAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,eAAM,CAAC,mBAAmB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YACrF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACd,CAAC;YAED,oEAAoE;YACpE,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,KAAK,GAAG,eAAM,CAAC,UAAU,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,GAAG,eAAM,CAAC,UAAU,CAAC,CAAC;gBAC1E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACvB,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;YAED,gEAAgE;YAChE,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,eAAM,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;YAC7D,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,QAAQ,EAAE,CAAC;oBACX,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YAED,uDAAuD;YACvD,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;oBAAE,SAAS;gBAEhC,0CAA0C;gBAC1C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAExB,oDAAoD;gBACpD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;oBAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,aAAa,EAAE,GAAG,CAAC;oBAC5D,WAAW,EAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;iBACrD,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC/C,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;YAED,+CAA+C;YAC/C,oEAAoE;YACpE,2DAA2D;YAC3D,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC;YACjC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,eAAM,CAAC,UAAU,CAAC,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;oBAC3D,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;wBACzB,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7B,OAAO,EAAE,CAAC;oBACd,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,2BAA2B,CAAC,CAAC;YACvE,IAAA,8BAAe,GAAE,CAAC;QACtB,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"memory-decay.js","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { MemoryStore } from '../db/memory-store';
2
+ /**
3
+ * Generate MEMORY.md from the top memories in the store.
4
+ * Only includes high-importance, frequently-accessed, active memories.
5
+ */
6
+ export declare function generateMemoryMd(memoryStore: MemoryStore, workspaceRoot: string): string;
7
+ /**
8
+ * Import user-edited MEMORY.md back into the memory store.
9
+ * Only imports NEW lines that don't already exist in the store.
10
+ */
11
+ export declare function importMemoryMd(workspaceRoot: string, memoryStore: MemoryStore): number;
12
+ //# sourceMappingURL=memory-export-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-export-md.d.ts","sourceRoot":"","sources":["../../src/memory/memory-export-md.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAkExF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CA2DtF"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateMemoryMd = generateMemoryMd;
37
+ exports.importMemoryMd = importMemoryMd;
38
+ /**
39
+ * Memory Export MD — OpenClaw-style human-readable knowledge base.
40
+ *
41
+ * Auto-generates a MEMORY.md file with curated, high-value memories.
42
+ * Users can read and edit this file — changes are imported back on next startup.
43
+ *
44
+ * Like OpenClaw's MEMORY.md: the "truth" the agent carries across sessions,
45
+ * stored in plain Markdown that any human can read.
46
+ *
47
+ * Stored in: .cortex/MEMORY.md
48
+ */
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ /**
52
+ * Generate MEMORY.md from the top memories in the store.
53
+ * Only includes high-importance, frequently-accessed, active memories.
54
+ */
55
+ function generateMemoryMd(memoryStore, workspaceRoot) {
56
+ const outPath = path.join(workspaceRoot, '.cortex', 'MEMORY.md');
57
+ try {
58
+ const dir = path.dirname(outPath);
59
+ if (!fs.existsSync(dir))
60
+ fs.mkdirSync(dir, { recursive: true });
61
+ const all = memoryStore.getActive(200);
62
+ // Sort by importance * access count (most valuable first)
63
+ const ranked = all
64
+ .filter(m => m.importance >= 0.6 || (m.accessCount || 0) >= 2)
65
+ .sort((a, b) => {
66
+ const scoreA = (a.importance || 0.5) * (1 + (a.accessCount || 0) * 0.2);
67
+ const scoreB = (b.importance || 0.5) * (1 + (b.accessCount || 0) * 0.2);
68
+ return scoreB - scoreA;
69
+ })
70
+ .slice(0, 50);
71
+ // Group by type
72
+ const groups = {};
73
+ for (const m of ranked) {
74
+ if (!groups[m.type])
75
+ groups[m.type] = [];
76
+ groups[m.type].push(m);
77
+ }
78
+ // Build markdown
79
+ const lines = [
80
+ '# 🧠 Cortex Memory — Curated Knowledge',
81
+ '',
82
+ '> Auto-generated by Cortex. You can edit this file — changes will be imported back.',
83
+ `> Last updated: ${new Date().toISOString().split('T')[0]}`,
84
+ `> Total memories: ${all.length} active, ${ranked.length} shown here`,
85
+ '',
86
+ ];
87
+ const typeEmoji = {
88
+ DECISION: '📌',
89
+ CORRECTION: '🔴',
90
+ BUG_FIX: '🐛',
91
+ CONVENTION: '📏',
92
+ INSIGHT: '💡',
93
+ PROVEN_PATTERN: '✅',
94
+ FAILED_SUGGESTION: '❌',
95
+ CONVERSATION: '💬',
96
+ };
97
+ for (const [type, memories] of Object.entries(groups)) {
98
+ const emoji = typeEmoji[type] || '📝';
99
+ lines.push(`## ${emoji} ${type}`);
100
+ lines.push('');
101
+ for (const m of memories) {
102
+ const reason = m.reason && !m.reason.startsWith('Auto-detected')
103
+ ? ` — _${m.reason}_` : '';
104
+ const age = formatAge(m.timestamp);
105
+ lines.push(`- ${m.intent}${reason} _(${age})_`);
106
+ }
107
+ lines.push('');
108
+ }
109
+ const content = lines.join('\n');
110
+ fs.writeFileSync(outPath, content, 'utf-8');
111
+ return content;
112
+ }
113
+ catch (err) {
114
+ return `Error generating MEMORY.md: ${err.message}`;
115
+ }
116
+ }
117
+ /**
118
+ * Import user-edited MEMORY.md back into the memory store.
119
+ * Only imports NEW lines that don't already exist in the store.
120
+ */
121
+ function importMemoryMd(workspaceRoot, memoryStore) {
122
+ const mdPath = path.join(workspaceRoot, '.cortex', 'MEMORY.md');
123
+ let imported = 0;
124
+ try {
125
+ if (!fs.existsSync(mdPath))
126
+ return 0;
127
+ const content = fs.readFileSync(mdPath, 'utf-8');
128
+ const lines = content.split('\n');
129
+ let currentType = 'INSIGHT';
130
+ const typeMap = {
131
+ 'DECISION': 'DECISION',
132
+ 'CORRECTION': 'CORRECTION',
133
+ 'BUG_FIX': 'BUG_FIX',
134
+ 'CONVENTION': 'CONVENTION',
135
+ 'INSIGHT': 'INSIGHT',
136
+ 'PROVEN_PATTERN': 'PROVEN_PATTERN',
137
+ };
138
+ for (const line of lines) {
139
+ // Detect section headers
140
+ const headerMatch = line.match(/^## .+ (.+)$/);
141
+ if (headerMatch) {
142
+ const typeName = headerMatch[1].trim();
143
+ if (typeMap[typeName])
144
+ currentType = typeMap[typeName];
145
+ continue;
146
+ }
147
+ // Only process bullet lines
148
+ if (!line.startsWith('- '))
149
+ continue;
150
+ // Extract intent (before the reason/age markers)
151
+ let intent = line.slice(2).trim();
152
+ intent = intent.replace(/\s*—\s*_.+?_\s*/g, '').replace(/\s*\(_\d+[dhm]\s+ago_\)\s*/g, '').trim();
153
+ if (intent.length < 10)
154
+ continue;
155
+ // Check if already exists
156
+ const existing = memoryStore.searchFTS(intent.slice(0, 50), 3);
157
+ const isDuplicate = existing.some(e => e.memory.intent.toLowerCase().includes(intent.toLowerCase().slice(0, 30)));
158
+ if (!isDuplicate) {
159
+ try {
160
+ memoryStore.add({
161
+ type: currentType,
162
+ intent: intent.slice(0, 300),
163
+ action: `Imported from MEMORY.md`,
164
+ importance: 0.8,
165
+ confidence: 0.9,
166
+ });
167
+ imported++;
168
+ }
169
+ catch { /* duplicate or quality gate */ }
170
+ }
171
+ }
172
+ }
173
+ catch { /* file not found or parse error */ }
174
+ return imported;
175
+ }
176
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
177
+ function formatAge(timestamp) {
178
+ const diff = Date.now() - timestamp;
179
+ const mins = Math.floor(diff / 60000);
180
+ if (mins < 60)
181
+ return `${mins}m ago`;
182
+ const hours = Math.floor(mins / 60);
183
+ if (hours < 24)
184
+ return `${hours}h ago`;
185
+ const days = Math.floor(hours / 24);
186
+ return `${days}d ago`;
187
+ }
188
+ //# sourceMappingURL=memory-export-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-export-md.js","sourceRoot":"","sources":["../../src/memory/memory-export-md.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-ranker.d.ts","sourceRoot":"","sources":["../../src/memory/memory-ranker.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,UAAU,EAAE,YAAY,EAAE,EAC1B,aAAa,EAAE,YAAY,EAAE,EAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACrB,YAAY,EAAE,CAsDhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ/E"}
1
+ {"version":3,"file":"memory-ranker.d.ts","sourceRoot":"","sources":["../../src/memory/memory-ranker.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,UAAU,EAAE,YAAY,EAAE,EAC1B,aAAa,EAAE,YAAY,EAAE,EAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACrB,YAAY,EAAE,CA4DhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ/E"}
@@ -10,6 +10,7 @@ exports.formatResults = formatResults;
10
10
  * NEW: File-aware ranking — if query mentions a file, related memories boost.
11
11
  */
12
12
  const config_1 = require("../config/config");
13
+ const access_pattern_tracker_1 = require("./access-pattern-tracker");
13
14
  /**
14
15
  * Merge FTS + Vector results, deduplicate, boost by type + recency + access.
15
16
  */
@@ -31,9 +32,11 @@ function rankResults(ftsResults, vectorResults, maxResults, currentFile) {
31
32
  const fileBoost = currentFile && r.memory.relatedFiles?.some((f) => f.includes(currentFile) || currentFile.includes(f)) ? 1.5 : 1.0;
32
33
  // NEW: Resolved penalty — completed/resolved memories score much lower
33
34
  const resolvedPenalty = r.memory.tags?.includes('resolved') ? 0.15 : 1.0;
35
+ // NEW: Personal boost — types the user accesses most get 1.0-1.8x
36
+ const personalBoost = (0, access_pattern_tracker_1.getPersonalBoost)(r.memory.type);
34
37
  merged.push({
35
38
  memory: r.memory,
36
- score: r.score * boost * accessBoost * recencyBoost * fileBoost * resolvedPenalty,
39
+ score: r.score * boost * accessBoost * recencyBoost * fileBoost * resolvedPenalty * personalBoost,
37
40
  });
38
41
  }
39
42
  for (const r of vectorResults) {
@@ -47,9 +50,11 @@ function rankResults(ftsResults, vectorResults, maxResults, currentFile) {
47
50
  const fileBoost = currentFile && r.memory.relatedFiles?.some((f) => f.includes(currentFile) || currentFile.includes(f)) ? 1.5 : 1.0;
48
51
  // Resolved penalty (same as FTS block)
49
52
  const resolvedPenalty = r.memory.tags?.includes('resolved') ? 0.15 : 1.0;
53
+ // Personal boost (same as FTS block)
54
+ const personalBoost = (0, access_pattern_tracker_1.getPersonalBoost)(r.memory.type);
50
55
  merged.push({
51
56
  memory: r.memory,
52
- score: r.score * boost * accessBoost * recencyBoost * fileBoost * resolvedPenalty,
57
+ score: r.score * boost * accessBoost * recencyBoost * fileBoost * resolvedPenalty * personalBoost,
53
58
  });
54
59
  }
55
60
  merged.sort((a, b) => b.score - a.score);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-ranker.js","sourceRoot":"","sources":["../../src/memory/memory-ranker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-ranker.js","sourceRoot":"","sources":["../../src/memory/memory-ranker.ts"],"names":[],"mappings":";;AAmBA,kCAiEC;AAKD,sCAQC;AAjGD;;;;;;GAMG;AACH,6CAA0C;AAC1C,qEAA4D;AAQ5D;;GAEG;AACH,SAAgB,WAAW,CACvB,UAA0B,EAC1B,aAA6B,EAC7B,UAAkB,EAClB,WAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,eAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACtD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QAE1D,wEAAwE;QACxE,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAErE,2EAA2E;QAC3E,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CACxD,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAEd,uEAAuE;QACvE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAEzE,kEAAkE;QAClE,MAAM,aAAa,GAAG,IAAA,yCAAgB,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtD,MAAM,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa;SACpG,CAAC,CAAC;IACP,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,eAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACtD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QAE1D,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAErE,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CACxD,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAEd,uCAAuC;QACvC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAEzE,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAA,yCAAgB,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtD,MAAM,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa;SACpG,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAsB,EAAE,SAAiB;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yBAAyB,SAAS,GAAG,CAAC;AACrE,CAAC"}