cortex-mcp 2.6.0 → 2.7.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.
Files changed (198) hide show
  1. package/CHANGELOG.md +58 -279
  2. package/README.md +224 -393
  3. package/dist/cli/setup.js +60 -58
  4. package/dist/cli/setup.js.map +1 -1
  5. package/dist/config/config.js +2 -2
  6. package/dist/config/config.js.map +1 -1
  7. package/dist/db/database.d.ts +0 -8
  8. package/dist/db/database.d.ts.map +1 -1
  9. package/dist/db/database.js +2 -34
  10. package/dist/db/database.js.map +1 -1
  11. package/dist/db/event-log.d.ts +0 -4
  12. package/dist/db/event-log.d.ts.map +1 -1
  13. package/dist/db/event-log.js +10 -14
  14. package/dist/db/event-log.js.map +1 -1
  15. package/dist/db/memory-store.d.ts +3 -30
  16. package/dist/db/memory-store.d.ts.map +1 -1
  17. package/dist/db/memory-store.js +44 -140
  18. package/dist/db/memory-store.js.map +1 -1
  19. package/dist/embedding-worker.js +1 -1
  20. package/dist/embedding-worker.js.map +1 -1
  21. package/dist/hooks/git-capture.js +3 -3
  22. package/dist/hooks/git-hooks.js +2 -5
  23. package/dist/mcp-stdio.js +3 -34
  24. package/dist/mcp-stdio.js.map +1 -1
  25. package/dist/memory/anticipation-engine.d.ts.map +1 -1
  26. package/dist/memory/anticipation-engine.js +10 -18
  27. package/dist/memory/anticipation-engine.js.map +1 -1
  28. package/dist/memory/auto-learner.d.ts.map +1 -1
  29. package/dist/memory/auto-learner.js +43 -190
  30. package/dist/memory/auto-learner.js.map +1 -1
  31. package/dist/memory/confidence-decay.d.ts.map +1 -1
  32. package/dist/memory/confidence-decay.js +9 -13
  33. package/dist/memory/confidence-decay.js.map +1 -1
  34. package/dist/memory/embedding-manager.d.ts.map +1 -1
  35. package/dist/memory/embedding-manager.js +4 -6
  36. package/dist/memory/embedding-manager.js.map +1 -1
  37. package/dist/memory/export-import.js +2 -2
  38. package/dist/memory/export-import.js.map +1 -1
  39. package/dist/memory/git-memory.d.ts.map +1 -1
  40. package/dist/memory/git-memory.js +26 -20
  41. package/dist/memory/git-memory.js.map +1 -1
  42. package/dist/memory/learning-rate.js +7 -8
  43. package/dist/memory/learning-rate.js.map +1 -1
  44. package/dist/memory/llm-enhancer.d.ts +14 -2
  45. package/dist/memory/llm-enhancer.d.ts.map +1 -1
  46. package/dist/memory/llm-enhancer.js +46 -66
  47. package/dist/memory/llm-enhancer.js.map +1 -1
  48. package/dist/memory/memory-cache.d.ts.map +1 -1
  49. package/dist/memory/memory-cache.js +0 -10
  50. package/dist/memory/memory-cache.js.map +1 -1
  51. package/dist/memory/memory-consolidator.d.ts.map +1 -1
  52. package/dist/memory/memory-consolidator.js +14 -20
  53. package/dist/memory/memory-consolidator.js.map +1 -1
  54. package/dist/memory/memory-decay.d.ts.map +1 -1
  55. package/dist/memory/memory-decay.js +52 -82
  56. package/dist/memory/memory-decay.js.map +1 -1
  57. package/dist/memory/memory-quality.d.ts +1 -1
  58. package/dist/memory/memory-quality.d.ts.map +1 -1
  59. package/dist/memory/memory-quality.js +6 -9
  60. package/dist/memory/memory-quality.js.map +1 -1
  61. package/dist/memory/memory-ranker.d.ts.map +1 -1
  62. package/dist/memory/memory-ranker.js +3 -12
  63. package/dist/memory/memory-ranker.js.map +1 -1
  64. package/dist/memory/meta-memory.js +3 -3
  65. package/dist/memory/meta-memory.js.map +1 -1
  66. package/dist/memory/session-tracker.d.ts +0 -2
  67. package/dist/memory/session-tracker.d.ts.map +1 -1
  68. package/dist/memory/session-tracker.js +8 -26
  69. package/dist/memory/session-tracker.js.map +1 -1
  70. package/dist/memory/temporal-engine.d.ts.map +1 -1
  71. package/dist/memory/temporal-engine.js +13 -9
  72. package/dist/memory/temporal-engine.js.map +1 -1
  73. package/dist/retrieval/hybrid-retriever.d.ts +2 -0
  74. package/dist/retrieval/hybrid-retriever.d.ts.map +1 -1
  75. package/dist/retrieval/hybrid-retriever.js +13 -3
  76. package/dist/retrieval/hybrid-retriever.js.map +1 -1
  77. package/dist/scanners/architecture-graph.js +2 -2
  78. package/dist/scanners/architecture-graph.js.map +1 -1
  79. package/dist/scanners/code-verifier.d.ts +0 -1
  80. package/dist/scanners/code-verifier.d.ts.map +1 -1
  81. package/dist/scanners/code-verifier.js +14 -14
  82. package/dist/scanners/code-verifier.js.map +1 -1
  83. package/dist/scanners/context-builder.d.ts.map +1 -1
  84. package/dist/scanners/context-builder.js +45 -33
  85. package/dist/scanners/context-builder.js.map +1 -1
  86. package/dist/scanners/export-map.js +2 -2
  87. package/dist/scanners/export-map.js.map +1 -1
  88. package/dist/scanners/project-scanner.js +2 -2
  89. package/dist/scanners/project-scanner.js.map +1 -1
  90. package/dist/security/encryption.js +1 -1
  91. package/dist/security/encryption.js.map +1 -1
  92. package/dist/security/feature-gate.d.ts.map +1 -1
  93. package/dist/security/feature-gate.js +20 -62
  94. package/dist/security/feature-gate.js.map +1 -1
  95. package/dist/security/license.js +35 -282
  96. package/dist/security/license.js.map +1 -1
  97. package/dist/security/rate-limiter.d.ts +3 -4
  98. package/dist/security/rate-limiter.d.ts.map +1 -1
  99. package/dist/security/rate-limiter.js +29 -11
  100. package/dist/security/rate-limiter.js.map +1 -1
  101. package/dist/server/dashboard.js +327 -166
  102. package/dist/server/dashboard.js.map +1 -1
  103. package/dist/server/mcp-handler.d.ts.map +1 -1
  104. package/dist/server/mcp-handler.js +827 -1002
  105. package/dist/server/mcp-handler.js.map +1 -1
  106. package/package.json +8 -18
  107. package/dist/memory/access-pattern-tracker.d.ts +0 -51
  108. package/dist/memory/access-pattern-tracker.d.ts.map +0 -1
  109. package/dist/memory/access-pattern-tracker.js +0 -92
  110. package/dist/memory/access-pattern-tracker.js.map +0 -1
  111. package/dist/memory/completion-resolver.d.ts +0 -38
  112. package/dist/memory/completion-resolver.d.ts.map +0 -1
  113. package/dist/memory/completion-resolver.js +0 -127
  114. package/dist/memory/completion-resolver.js.map +0 -1
  115. package/dist/memory/convention-detector.d.ts +0 -11
  116. package/dist/memory/convention-detector.d.ts.map +0 -1
  117. package/dist/memory/convention-detector.js +0 -294
  118. package/dist/memory/convention-detector.js.map +0 -1
  119. package/dist/memory/correction-detector.d.ts +0 -33
  120. package/dist/memory/correction-detector.d.ts.map +0 -1
  121. package/dist/memory/correction-detector.js +0 -129
  122. package/dist/memory/correction-detector.js.map +0 -1
  123. package/dist/memory/cross-memory-linker.d.ts +0 -18
  124. package/dist/memory/cross-memory-linker.d.ts.map +0 -1
  125. package/dist/memory/cross-memory-linker.js +0 -115
  126. package/dist/memory/cross-memory-linker.js.map +0 -1
  127. package/dist/memory/daily-diary.d.ts +0 -30
  128. package/dist/memory/daily-diary.d.ts.map +0 -1
  129. package/dist/memory/daily-diary.js +0 -159
  130. package/dist/memory/daily-diary.js.map +0 -1
  131. package/dist/memory/embedding-cache.d.ts +0 -32
  132. package/dist/memory/embedding-cache.d.ts.map +0 -1
  133. package/dist/memory/embedding-cache.js +0 -76
  134. package/dist/memory/embedding-cache.js.map +0 -1
  135. package/dist/memory/error-learner.d.ts +0 -26
  136. package/dist/memory/error-learner.d.ts.map +0 -1
  137. package/dist/memory/error-learner.js +0 -145
  138. package/dist/memory/error-learner.js.map +0 -1
  139. package/dist/memory/file-relationships.d.ts +0 -47
  140. package/dist/memory/file-relationships.d.ts.map +0 -1
  141. package/dist/memory/file-relationships.js +0 -130
  142. package/dist/memory/file-relationships.js.map +0 -1
  143. package/dist/memory/impact-analyzer.d.ts +0 -16
  144. package/dist/memory/impact-analyzer.d.ts.map +0 -1
  145. package/dist/memory/impact-analyzer.js +0 -189
  146. package/dist/memory/impact-analyzer.js.map +0 -1
  147. package/dist/memory/instructions-generator.d.ts +0 -30
  148. package/dist/memory/instructions-generator.d.ts.map +0 -1
  149. package/dist/memory/instructions-generator.js +0 -117
  150. package/dist/memory/instructions-generator.js.map +0 -1
  151. package/dist/memory/memory-export-md.d.ts +0 -12
  152. package/dist/memory/memory-export-md.d.ts.map +0 -1
  153. package/dist/memory/memory-export-md.js +0 -188
  154. package/dist/memory/memory-export-md.js.map +0 -1
  155. package/dist/memory/mmr-reranker.d.ts +0 -39
  156. package/dist/memory/mmr-reranker.d.ts.map +0 -1
  157. package/dist/memory/mmr-reranker.js +0 -115
  158. package/dist/memory/mmr-reranker.js.map +0 -1
  159. package/dist/memory/pre-flight.d.ts +0 -24
  160. package/dist/memory/pre-flight.d.ts.map +0 -1
  161. package/dist/memory/pre-flight.js +0 -121
  162. package/dist/memory/pre-flight.js.map +0 -1
  163. package/dist/memory/preference-learner.d.ts +0 -28
  164. package/dist/memory/preference-learner.d.ts.map +0 -1
  165. package/dist/memory/preference-learner.js +0 -144
  166. package/dist/memory/preference-learner.js.map +0 -1
  167. package/dist/memory/query-expansion.d.ts +0 -28
  168. package/dist/memory/query-expansion.d.ts.map +0 -1
  169. package/dist/memory/query-expansion.js +0 -140
  170. package/dist/memory/query-expansion.js.map +0 -1
  171. package/dist/memory/regression-guard.d.ts +0 -35
  172. package/dist/memory/regression-guard.d.ts.map +0 -1
  173. package/dist/memory/regression-guard.js +0 -90
  174. package/dist/memory/regression-guard.js.map +0 -1
  175. package/dist/memory/resume-work.d.ts +0 -37
  176. package/dist/memory/resume-work.d.ts.map +0 -1
  177. package/dist/memory/resume-work.js +0 -141
  178. package/dist/memory/resume-work.js.map +0 -1
  179. package/dist/memory/soul-manager.d.ts +0 -30
  180. package/dist/memory/soul-manager.d.ts.map +0 -1
  181. package/dist/memory/soul-manager.js +0 -171
  182. package/dist/memory/soul-manager.js.map +0 -1
  183. package/dist/memory/success-tracker.d.ts +0 -33
  184. package/dist/memory/success-tracker.d.ts.map +0 -1
  185. package/dist/memory/success-tracker.js +0 -75
  186. package/dist/memory/success-tracker.js.map +0 -1
  187. package/dist/memory/tool-recommender.d.ts +0 -29
  188. package/dist/memory/tool-recommender.d.ts.map +0 -1
  189. package/dist/memory/tool-recommender.js +0 -117
  190. package/dist/memory/tool-recommender.js.map +0 -1
  191. package/dist/memory/usage-stats.d.ts +0 -98
  192. package/dist/memory/usage-stats.d.ts.map +0 -1
  193. package/dist/memory/usage-stats.js +0 -345
  194. package/dist/memory/usage-stats.js.map +0 -1
  195. package/dist/utils/extract-tags.d.ts +0 -16
  196. package/dist/utils/extract-tags.d.ts.map +0 -1
  197. package/dist/utils/extract-tags.js +0 -40
  198. package/dist/utils/extract-tags.js.map +0 -1
@@ -1,188 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-export-md.js","sourceRoot":"","sources":["../../src/memory/memory-export-md.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * MMR Re-ranking — Maximal Marginal Relevance.
3
- *
4
- * Extracted from OpenClaw's mmr.ts architecture.
5
- *
6
- * Problem: Without MMR, recall might return 5 memories all saying
7
- * "use TypeScript strict mode." That's redundant.
8
- *
9
- * Solution: MMR balances RELEVANCE (how well it matches the query)
10
- * with DIVERSITY (how different it is from already-selected results).
11
- *
12
- * Formula: MMR(d) = λ * relevance(d) - (1-λ) * max_similarity(d, selected)
13
- * Where λ = 0.7 means "70% relevance, 30% diversity"
14
- */
15
- export interface MMRConfig {
16
- enabled: boolean;
17
- lambda: number;
18
- diversityWeight: number;
19
- }
20
- export declare const DEFAULT_MMR_CONFIG: MMRConfig;
21
- export interface ScoredItem {
22
- score: number;
23
- memory: {
24
- id: string;
25
- intent: string;
26
- type: string;
27
- tags?: string[];
28
- files?: string[];
29
- };
30
- matchMethod: string;
31
- }
32
- /**
33
- * Apply MMR re-ranking to search results.
34
- * Keeps the top result unchanged, then iteratively picks
35
- * the next result that maximizes relevance while being
36
- * different from already-selected results.
37
- */
38
- export declare function applyMMR<T extends ScoredItem>(results: T[], config?: Partial<MMRConfig>): T[];
39
- //# sourceMappingURL=mmr-reranker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mmr-reranker.d.ts","sourceRoot":"","sources":["../../src/memory/mmr-reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,EACzC,OAAO,EAAE,CAAC,EAAE,EACZ,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,GAChC,CAAC,EAAE,CAuCL"}
@@ -1,115 +0,0 @@
1
- "use strict";
2
- /**
3
- * MMR Re-ranking — Maximal Marginal Relevance.
4
- *
5
- * Extracted from OpenClaw's mmr.ts architecture.
6
- *
7
- * Problem: Without MMR, recall might return 5 memories all saying
8
- * "use TypeScript strict mode." That's redundant.
9
- *
10
- * Solution: MMR balances RELEVANCE (how well it matches the query)
11
- * with DIVERSITY (how different it is from already-selected results).
12
- *
13
- * Formula: MMR(d) = λ * relevance(d) - (1-λ) * max_similarity(d, selected)
14
- * Where λ = 0.7 means "70% relevance, 30% diversity"
15
- */
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.DEFAULT_MMR_CONFIG = void 0;
18
- exports.applyMMR = applyMMR;
19
- exports.DEFAULT_MMR_CONFIG = {
20
- enabled: true,
21
- lambda: 0.7, // OpenClaw default: 70% relevance, 30% diversity
22
- diversityWeight: 0.3,
23
- };
24
- /**
25
- * Apply MMR re-ranking to search results.
26
- * Keeps the top result unchanged, then iteratively picks
27
- * the next result that maximizes relevance while being
28
- * different from already-selected results.
29
- */
30
- function applyMMR(results, config = {}) {
31
- const cfg = { ...exports.DEFAULT_MMR_CONFIG, ...config };
32
- if (!cfg.enabled || results.length <= 2)
33
- return results;
34
- const lambda = cfg.lambda;
35
- const selected = [];
36
- const remaining = [...results];
37
- // Always pick the top result first
38
- selected.push(remaining.shift());
39
- while (remaining.length > 0 && selected.length < results.length) {
40
- let bestIdx = 0;
41
- let bestMMR = -Infinity;
42
- for (let i = 0; i < remaining.length; i++) {
43
- const candidate = remaining[i];
44
- // Relevance score (normalized)
45
- const relevance = candidate.score;
46
- // Max similarity to any already-selected result
47
- const maxSim = Math.max(...selected.map(s => computeSimilarity(candidate, s)));
48
- // MMR formula
49
- const mmrScore = lambda * relevance - (1 - lambda) * maxSim;
50
- if (mmrScore > bestMMR) {
51
- bestMMR = mmrScore;
52
- bestIdx = i;
53
- }
54
- }
55
- selected.push(remaining.splice(bestIdx, 1)[0]);
56
- }
57
- return selected;
58
- }
59
- /**
60
- * Compute similarity between two memories.
61
- * Uses a combination of:
62
- * 1. Word overlap (Jaccard similarity on intent words)
63
- * 2. Type match (same type = more similar)
64
- * 3. File overlap (shared files = more similar)
65
- */
66
- function computeSimilarity(a, b) {
67
- let sim = 0;
68
- // 1. Word overlap (Jaccard) — main signal
69
- const wordsA = new Set(extractWords(a.memory.intent));
70
- const wordsB = new Set(extractWords(b.memory.intent));
71
- if (wordsA.size > 0 && wordsB.size > 0) {
72
- let intersection = 0;
73
- for (const w of wordsA) {
74
- if (wordsB.has(w))
75
- intersection++;
76
- }
77
- const union = wordsA.size + wordsB.size - intersection;
78
- sim += (intersection / union) * 0.6; // 60% weight on word overlap
79
- }
80
- // 2. Same type = similar
81
- if (a.memory.type === b.memory.type) {
82
- sim += 0.2;
83
- }
84
- // 3. File overlap
85
- const filesA = new Set(a.memory.files || []);
86
- const filesB = new Set(b.memory.files || []);
87
- if (filesA.size > 0 && filesB.size > 0) {
88
- let fileOverlap = 0;
89
- for (const f of filesA) {
90
- if (filesB.has(f))
91
- fileOverlap++;
92
- }
93
- if (fileOverlap > 0) {
94
- sim += 0.2 * (fileOverlap / Math.max(filesA.size, filesB.size));
95
- }
96
- }
97
- return Math.min(sim, 1.0);
98
- }
99
- // Stop words to ignore in similarity computation
100
- const STOP_WORDS = new Set([
101
- 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
102
- 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
103
- 'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
104
- 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
105
- 'use', 'used', 'using', 'this', 'that', 'these', 'those', 'it', 'its',
106
- 'not', 'no', 'nor', 'but', 'or', 'and', 'if', 'then', 'else', 'when',
107
- 'up', 'out', 'about', 'so', 'all', 'each', 'every', 'both', 'few',
108
- ]);
109
- function extractWords(text) {
110
- return text.toLowerCase()
111
- .replace(/[^a-z0-9\s]/g, ' ')
112
- .split(/\s+/)
113
- .filter(w => w.length > 2 && !STOP_WORDS.has(w));
114
- }
115
- //# sourceMappingURL=mmr-reranker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mmr-reranker.js","sourceRoot":"","sources":["../../src/memory/mmr-reranker.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Pre-Flight Checks — Convention check BEFORE writing code.
3
- *
4
- * Instead of reviewing code AFTER it's written (review_code),
5
- * this tells the AI what conventions and gotchas exist for a file/task
6
- * BEFORE a single line is written.
7
- *
8
- * Like a pilot's pre-flight checklist — don't take off without checking.
9
- */
10
- import { MemoryStore } from '../db/memory-store';
11
- export interface PreFlightResult {
12
- conventions: string[];
13
- gotchas: string[];
14
- pastBugs: string[];
15
- fileNotes: string[];
16
- recentCorrections: string[];
17
- }
18
- /**
19
- * Get everything the AI needs to know BEFORE writing/editing code for a file.
20
- */
21
- export declare function preFlightCheck(memoryStore: MemoryStore, filename?: string, task?: string): PreFlightResult;
22
- /** Format pre-flight results for AI consumption */
23
- export declare function formatPreFlight(result: PreFlightResult): string;
24
- //# sourceMappingURL=pre-flight.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pre-flight.d.ts","sourceRoot":"","sources":["../../src/memory/pre-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACd,eAAe,CA4EjB;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA8C/D"}
@@ -1,121 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preFlightCheck = preFlightCheck;
4
- exports.formatPreFlight = formatPreFlight;
5
- /**
6
- * Get everything the AI needs to know BEFORE writing/editing code for a file.
7
- */
8
- function preFlightCheck(memoryStore, filename, task) {
9
- const result = {
10
- conventions: [],
11
- gotchas: [],
12
- pastBugs: [],
13
- fileNotes: [],
14
- recentCorrections: [],
15
- };
16
- // 1. Get ALL conventions (these apply everywhere)
17
- const conventions = memoryStore.getByType('CONVENTION', 50);
18
- for (const conv of conventions) {
19
- // Filter by relevance to file type if filename provided
20
- if (filename) {
21
- const ext = filename.split('.').pop()?.toLowerCase() || '';
22
- const intentLower = conv.intent.toLowerCase();
23
- const fileTypeKeywords = {
24
- ts: ['typescript', 'type', 'interface', 'const', 'let', 'var', 'import', 'export'],
25
- tsx: ['react', 'component', 'hook', 'jsx', 'state', 'prop'],
26
- css: ['style', 'css', 'class', 'color', 'font'],
27
- py: ['python', 'def', 'class', 'import'],
28
- js: ['javascript', 'require', 'module', 'function'],
29
- };
30
- const keywords = fileTypeKeywords[ext] || [];
31
- const isRelevant = keywords.length === 0 || keywords.some(k => intentLower.includes(k))
32
- || !Object.values(fileTypeKeywords).flat().some(k => intentLower.includes(k)); // Generic convention
33
- if (!isRelevant)
34
- continue;
35
- }
36
- result.conventions.push(`[${conv.id.slice(0, 8)}] ${conv.intent}`);
37
- }
38
- // 2. Get GOTCHA memories (dangerous patterns)
39
- const gotchas = memoryStore.getByType('GOTCHA', 20);
40
- for (const g of gotchas) {
41
- result.gotchas.push(`⚠️ [${g.id.slice(0, 8)}] ${g.intent}`);
42
- }
43
- // 3. Get past BUG_FIX patterns for this file
44
- const bugFixes = memoryStore.getByType('BUG_FIX', 30);
45
- for (const bug of bugFixes) {
46
- if (filename && bug.relatedFiles?.some(f => f.includes(filename.split(/[\\/]/).pop() || ''))) {
47
- result.pastBugs.push(`🐛 [${bug.id.slice(0, 8)}] ${bug.intent}`);
48
- }
49
- }
50
- // 4. File-specific memories
51
- if (filename) {
52
- const fileMemories = memoryStore.getByFile(filename, 10);
53
- for (const fm of fileMemories) {
54
- result.fileNotes.push(`📄 [${fm.type}] ${fm.intent}`);
55
- }
56
- }
57
- // 5. Recent CORRECTIONS (last 20 — most likely to be repeated)
58
- const corrections = memoryStore.getByType('CORRECTION', 20);
59
- for (const corr of corrections) {
60
- // Only include recent ones (last 7 days)
61
- if (Date.now() - corr.timestamp < 7 * 24 * 60 * 60 * 1000) {
62
- result.recentCorrections.push(`🔄 [${corr.id.slice(0, 8)}] ${corr.intent}`);
63
- }
64
- }
65
- // Task-specific memories via FTS search
66
- if (task) {
67
- try {
68
- const taskResults = memoryStore.searchFTS(task, 5);
69
- for (const r of taskResults) {
70
- const m = r.memory;
71
- if (m.type === 'FAILED_ATTEMPT') {
72
- result.gotchas.push(`❌ [FAILED] ${m.intent}`);
73
- }
74
- }
75
- }
76
- catch { /* FTS failure is non-fatal */ }
77
- }
78
- return result;
79
- }
80
- /** Format pre-flight results for AI consumption */
81
- function formatPreFlight(result) {
82
- const sections = ['# ✈️ Pre-Flight Check\n'];
83
- let hasContent = false;
84
- if (result.recentCorrections.length > 0) {
85
- sections.push('## 🔴 Recent Corrections (DON\'T repeat these)\n');
86
- result.recentCorrections.forEach(c => sections.push(c));
87
- sections.push('');
88
- hasContent = true;
89
- }
90
- if (result.gotchas.length > 0) {
91
- sections.push('## ⚠️ Gotchas & Failed Attempts\n');
92
- result.gotchas.forEach(g => sections.push(g));
93
- sections.push('');
94
- hasContent = true;
95
- }
96
- if (result.pastBugs.length > 0) {
97
- sections.push('## 🐛 Past Bugs in This File\n');
98
- result.pastBugs.forEach(b => sections.push(b));
99
- sections.push('');
100
- hasContent = true;
101
- }
102
- if (result.fileNotes.length > 0) {
103
- sections.push('## 📄 File Context\n');
104
- result.fileNotes.forEach(f => sections.push(f));
105
- sections.push('');
106
- hasContent = true;
107
- }
108
- if (result.conventions.length > 0) {
109
- sections.push(`## 📏 Conventions (${result.conventions.length})\n`);
110
- result.conventions.slice(0, 10).forEach(c => sections.push(c));
111
- if (result.conventions.length > 10) {
112
- sections.push(`_...and ${result.conventions.length - 10} more_`);
113
- }
114
- hasContent = true;
115
- }
116
- if (!hasContent) {
117
- return '# ✈️ Pre-Flight Check\n\n✅ No conventions, gotchas, or past bugs found. Clear for takeoff.';
118
- }
119
- return sections.join('\n');
120
- }
121
- //# sourceMappingURL=pre-flight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pre-flight.js","sourceRoot":"","sources":["../../src/memory/pre-flight.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Preference Learner — Learns how the user likes to work.
3
- *
4
- * Detects communication and coding preferences from user messages:
5
- * - Verbose vs concise responses
6
- * - Asks before changing vs just do it
7
- * - Wants explanations vs just code
8
- * - Framework/library preferences
9
- *
10
- * Stores as PREFERENCE memories for AI to adapt to.
11
- */
12
- import { MemoryStore } from '../db/memory-store';
13
- export interface DetectedPreference {
14
- category: 'communication' | 'coding' | 'workflow' | 'style';
15
- preference: string;
16
- confidence: number;
17
- evidence: string;
18
- }
19
- /**
20
- * Detect user preferences from their message text.
21
- * Call this from auto_learn when context is provided.
22
- */
23
- export declare function detectPreferences(userText: string): DetectedPreference[];
24
- /**
25
- * Get all stored preferences for injection into force_recall.
26
- */
27
- export declare function getStoredPreferences(memoryStore: MemoryStore): string;
28
- //# sourceMappingURL=preference-learner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preference-learner.d.ts","sourceRoot":"","sources":["../../src/memory/preference-learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAyGD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAwBxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAkBrE"}