cortex-mcp 2.5.0 → 2.7.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 (166) 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 +51 -77
  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 -7
  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 +771 -891
  105. package/dist/server/mcp-handler.js.map +1 -1
  106. package/package.json +8 -18
  107. package/dist/memory/completion-resolver.d.ts +0 -38
  108. package/dist/memory/completion-resolver.d.ts.map +0 -1
  109. package/dist/memory/completion-resolver.js +0 -127
  110. package/dist/memory/completion-resolver.js.map +0 -1
  111. package/dist/memory/convention-detector.d.ts +0 -11
  112. package/dist/memory/convention-detector.d.ts.map +0 -1
  113. package/dist/memory/convention-detector.js +0 -294
  114. package/dist/memory/convention-detector.js.map +0 -1
  115. package/dist/memory/correction-detector.d.ts +0 -33
  116. package/dist/memory/correction-detector.d.ts.map +0 -1
  117. package/dist/memory/correction-detector.js +0 -129
  118. package/dist/memory/correction-detector.js.map +0 -1
  119. package/dist/memory/error-learner.d.ts +0 -26
  120. package/dist/memory/error-learner.d.ts.map +0 -1
  121. package/dist/memory/error-learner.js +0 -145
  122. package/dist/memory/error-learner.js.map +0 -1
  123. package/dist/memory/file-relationships.d.ts +0 -47
  124. package/dist/memory/file-relationships.d.ts.map +0 -1
  125. package/dist/memory/file-relationships.js +0 -130
  126. package/dist/memory/file-relationships.js.map +0 -1
  127. package/dist/memory/impact-analyzer.d.ts +0 -16
  128. package/dist/memory/impact-analyzer.d.ts.map +0 -1
  129. package/dist/memory/impact-analyzer.js +0 -189
  130. package/dist/memory/impact-analyzer.js.map +0 -1
  131. package/dist/memory/instructions-generator.d.ts +0 -30
  132. package/dist/memory/instructions-generator.d.ts.map +0 -1
  133. package/dist/memory/instructions-generator.js +0 -117
  134. package/dist/memory/instructions-generator.js.map +0 -1
  135. package/dist/memory/pre-flight.d.ts +0 -24
  136. package/dist/memory/pre-flight.d.ts.map +0 -1
  137. package/dist/memory/pre-flight.js +0 -121
  138. package/dist/memory/pre-flight.js.map +0 -1
  139. package/dist/memory/preference-learner.d.ts +0 -28
  140. package/dist/memory/preference-learner.d.ts.map +0 -1
  141. package/dist/memory/preference-learner.js +0 -144
  142. package/dist/memory/preference-learner.js.map +0 -1
  143. package/dist/memory/regression-guard.d.ts +0 -35
  144. package/dist/memory/regression-guard.d.ts.map +0 -1
  145. package/dist/memory/regression-guard.js +0 -90
  146. package/dist/memory/regression-guard.js.map +0 -1
  147. package/dist/memory/resume-work.d.ts +0 -37
  148. package/dist/memory/resume-work.d.ts.map +0 -1
  149. package/dist/memory/resume-work.js +0 -141
  150. package/dist/memory/resume-work.js.map +0 -1
  151. package/dist/memory/success-tracker.d.ts +0 -33
  152. package/dist/memory/success-tracker.d.ts.map +0 -1
  153. package/dist/memory/success-tracker.js +0 -75
  154. package/dist/memory/success-tracker.js.map +0 -1
  155. package/dist/memory/tool-recommender.d.ts +0 -29
  156. package/dist/memory/tool-recommender.d.ts.map +0 -1
  157. package/dist/memory/tool-recommender.js +0 -117
  158. package/dist/memory/tool-recommender.js.map +0 -1
  159. package/dist/memory/usage-stats.d.ts +0 -98
  160. package/dist/memory/usage-stats.d.ts.map +0 -1
  161. package/dist/memory/usage-stats.js +0 -345
  162. package/dist/memory/usage-stats.js.map +0 -1
  163. package/dist/utils/extract-tags.d.ts +0 -16
  164. package/dist/utils/extract-tags.d.ts.map +0 -1
  165. package/dist/utils/extract-tags.js +0 -40
  166. package/dist/utils/extract-tags.js.map +0 -1
@@ -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"}
@@ -1,144 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectPreferences = detectPreferences;
4
- exports.getStoredPreferences = getStoredPreferences;
5
- // ─── Preference Detection Patterns ───────────────────────────────────────────
6
- const PREFERENCE_PATTERNS = [
7
- // Communication style
8
- {
9
- category: 'communication',
10
- signals: [
11
- /\b(keep it short|be (more )?(brief|concise)|too (long|verbose)|shorter|less (text|detail))\b/gi,
12
- /\b(tldr|tl;dr|just the (code|answer)|skip the explanation)\b/gi,
13
- ],
14
- preference: 'User prefers concise, short responses — skip long explanations',
15
- confidence: 0.85,
16
- },
17
- {
18
- category: 'communication',
19
- signals: [
20
- /\b(explain (more|why|how)|tell me (more|why)|what does .{3,20} mean|I don'?t understand)\b/gi,
21
- /\b(more detail|elaborate|walk me through|step by step)\b/gi,
22
- ],
23
- preference: 'User prefers detailed explanations — explain reasoning and steps',
24
- confidence: 0.80,
25
- },
26
- // Workflow style
27
- {
28
- category: 'workflow',
29
- signals: [
30
- /\b(just (do|fix|change|build) it|don'?t ask|stop asking|go ahead)\b/gi,
31
- /\b(you decide|your (call|choice)|whatever you think|I trust you)\b/gi,
32
- ],
33
- preference: 'User prefers autonomous execution — do it without asking for approval',
34
- confidence: 0.85,
35
- },
36
- {
37
- category: 'workflow',
38
- signals: [
39
- /\b(ask (me|first)|check with me|don'?t (change|modify) (without|until)|show me (first|before))\b/gi,
40
- /\b(let me (review|see|approve)|wait for (my|approval))\b/gi,
41
- ],
42
- preference: 'User prefers to review before changes — always ask before modifying',
43
- confidence: 0.85,
44
- },
45
- // Coding style
46
- {
47
- category: 'coding',
48
- signals: [
49
- /\b(use (typescript|ts)|type(d|safe|safety)|add types|interface|generic)\b/gi,
50
- ],
51
- preference: 'User values TypeScript strict typing — always add types and interfaces',
52
- confidence: 0.70,
53
- },
54
- {
55
- category: 'coding',
56
- signals: [
57
- /\b(add (tests|test)|test (first|coverage)|write (a )?test|unit test|spec)\b/gi,
58
- ],
59
- preference: 'User values testing — write tests alongside code',
60
- confidence: 0.75,
61
- },
62
- {
63
- category: 'coding',
64
- signals: [
65
- /\b(no (comments|documentation)|don'?t add comments|too many comments|over.?comment)\b/gi,
66
- ],
67
- preference: 'User prefers minimal comments — code should be self-documenting',
68
- confidence: 0.75,
69
- },
70
- {
71
- category: 'coding',
72
- signals: [
73
- /\b(add comments|document|jsdoc|explain the code|comment the|well.?documented)\b/gi,
74
- ],
75
- preference: 'User values code documentation — add comments and JSDoc',
76
- confidence: 0.75,
77
- },
78
- // Style preferences
79
- {
80
- category: 'style',
81
- signals: [
82
- /\b(dark (mode|theme)|prefer dark|use dark)\b/gi,
83
- ],
84
- preference: 'User prefers dark mode/theme',
85
- confidence: 0.80,
86
- },
87
- {
88
- category: 'style',
89
- signals: [
90
- /\b(simple|minimal|minimalist|clean|no (fancy|animation|effect))\b/gi,
91
- ],
92
- preference: 'User prefers simple, minimalist design — avoid complex UI effects',
93
- confidence: 0.70,
94
- },
95
- ];
96
- // ─── Main Detector ───────────────────────────────────────────────────────────
97
- /**
98
- * Detect user preferences from their message text.
99
- * Call this from auto_learn when context is provided.
100
- */
101
- function detectPreferences(userText) {
102
- if (!userText || userText.length < 10)
103
- return [];
104
- const results = [];
105
- const seen = new Set();
106
- for (const pattern of PREFERENCE_PATTERNS) {
107
- for (const signal of pattern.signals) {
108
- signal.lastIndex = 0;
109
- const match = signal.exec(userText);
110
- if (match && !seen.has(pattern.preference)) {
111
- seen.add(pattern.preference);
112
- results.push({
113
- category: pattern.category,
114
- preference: pattern.preference,
115
- confidence: pattern.confidence,
116
- evidence: match[0].trim().slice(0, 100),
117
- });
118
- break;
119
- }
120
- }
121
- }
122
- return results;
123
- }
124
- /**
125
- * Get all stored preferences for injection into force_recall.
126
- */
127
- function getStoredPreferences(memoryStore) {
128
- // Search for preference-tagged memories
129
- try {
130
- const results = memoryStore.searchFTS('preference', 10);
131
- const prefs = results.filter(r => r.memory.tags?.includes('preference') || r.memory.type === 'CONVENTION');
132
- if (prefs.length === 0)
133
- return '';
134
- const lines = ['## 👤 User Preferences'];
135
- for (const p of prefs.slice(0, 5)) {
136
- lines.push(`- ${p.memory.intent}`);
137
- }
138
- return lines.join('\n');
139
- }
140
- catch {
141
- return '';
142
- }
143
- }
144
- //# sourceMappingURL=preference-learner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preference-learner.js","sourceRoot":"","sources":["../../src/memory/preference-learner.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Regression Guard — Stores verification steps alongside bug fixes.
3
- *
4
- * THE GAP THIS FILLS:
5
- * When a bug is fixed, the AI stores WHAT was fixed but not HOW to verify
6
- * it didn't regress. Next time a similar issue appears, the AI has to
7
- * figure out testing from scratch.
8
- *
9
- * This module:
10
- * 1. Attaches verification steps to BUG_FIX memories
11
- * 2. When a similar bug appears, surfaces both the fix AND the test
12
- * 3. Tracks which fixes have been verified vs unverified
13
- */
14
- import { MemoryStore } from '../db/memory-store';
15
- export interface VerificationStep {
16
- command?: string;
17
- check?: string;
18
- file?: string;
19
- }
20
- /**
21
- * Extract verification steps from AI text.
22
- * Looks for build/test commands and their expected outcomes.
23
- */
24
- export declare function extractVerificationSteps(text: string): VerificationStep[];
25
- /**
26
- * Find verification steps for similar past bugs.
27
- * When a new bug appears, search for related fixes and their verification.
28
- */
29
- export declare function findRelatedVerification(memoryStore: MemoryStore, bugDescription: string): string[];
30
- /**
31
- * Attach verification steps to a bug fix description.
32
- * Returns enhanced text with verification section appended.
33
- */
34
- export declare function attachVerification(fixDescription: string, steps: VerificationStep[]): string;
35
- //# sourceMappingURL=regression-guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"regression-guard.d.ts","sourceRoot":"","sources":["../../src/memory/regression-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAsCzE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBlG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAkB5F"}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractVerificationSteps = extractVerificationSteps;
4
- exports.findRelatedVerification = findRelatedVerification;
5
- exports.attachVerification = attachVerification;
6
- const types_1 = require("../types");
7
- /**
8
- * Extract verification steps from AI text.
9
- * Looks for build/test commands and their expected outcomes.
10
- */
11
- function extractVerificationSteps(text) {
12
- const steps = [];
13
- const seen = new Set();
14
- // 1. npm commands
15
- const npmRegex = /npm\s+(?:run\s+)?(\w+)/gi;
16
- let match;
17
- while ((match = npmRegex.exec(text)) !== null) {
18
- const cmd = match[0];
19
- if (seen.has(cmd))
20
- continue;
21
- seen.add(cmd);
22
- // Look for expected result near the command
23
- const nearText = text.slice(Math.max(0, match.index - 100), match.index + 200);
24
- let check = '';
25
- if (/0\s+error|no\s+error|pass|success/i.test(nearText)) {
26
- check = 'Should succeed with 0 errors';
27
- }
28
- else if (/fail|error|broke/i.test(nearText)) {
29
- check = 'Was failing — verify it passes now';
30
- }
31
- steps.push({ command: cmd, check: check || `Run ${cmd} and verify output` });
32
- }
33
- // 2. Test file references
34
- const testRegex = /(\w+\.(?:test|spec)\.\w+)/gi;
35
- while ((match = testRegex.exec(text)) !== null) {
36
- if (seen.has(match[1]))
37
- continue;
38
- seen.add(match[1]);
39
- steps.push({ file: match[1], check: `Run tests in ${match[1]}` });
40
- }
41
- // 3. Build verification
42
- if (/tsc|compile|typescript/i.test(text) && !seen.has('build')) {
43
- steps.push({ command: 'npm run build', check: 'TypeScript compilation should have 0 errors' });
44
- }
45
- return steps.slice(0, 5);
46
- }
47
- /**
48
- * Find verification steps for similar past bugs.
49
- * When a new bug appears, search for related fixes and their verification.
50
- */
51
- function findRelatedVerification(memoryStore, bugDescription) {
52
- const verifications = [];
53
- try {
54
- const results = memoryStore.searchFTS(bugDescription, 10);
55
- for (const r of results) {
56
- if (r.memory.type === types_1.MemoryType.BUG_FIX && r.memory.action) {
57
- // Check if action contains verification info
58
- const action = r.memory.action;
59
- if (/verify|test|check|build|npm|command/i.test(action)) {
60
- verifications.push(`📋 For "${r.memory.intent.slice(0, 60)}": ${action.slice(0, 150)}`);
61
- }
62
- }
63
- }
64
- }
65
- catch { /* non-fatal */ }
66
- return verifications.slice(0, 5);
67
- }
68
- /**
69
- * Attach verification steps to a bug fix description.
70
- * Returns enhanced text with verification section appended.
71
- */
72
- function attachVerification(fixDescription, steps) {
73
- if (steps.length === 0)
74
- return fixDescription;
75
- let enhanced = fixDescription;
76
- enhanced += '\n\n--- Verification ---';
77
- for (const step of steps) {
78
- if (step.command) {
79
- enhanced += `\nRun: ${step.command}`;
80
- }
81
- if (step.file) {
82
- enhanced += `\nCheck: ${step.file}`;
83
- }
84
- if (step.check) {
85
- enhanced += ` → ${step.check}`;
86
- }
87
- }
88
- return enhanced;
89
- }
90
- //# sourceMappingURL=regression-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"regression-guard.js","sourceRoot":"","sources":["../../src/memory/regression-guard.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Resume Work — Context recovery after conversation truncation.
3
- *
4
- * When a long conversation gets cut off, the AI loses context.
5
- * This module surfaces: what was the last session about, what changed,
6
- * what was in progress, and what's still remaining.
7
- *
8
- * Like opening your notebook and seeing "stopped at step 3 of 7".
9
- */
10
- import { MemoryStore } from '../db/memory-store';
11
- export interface ResumeContext {
12
- lastSession: string | null;
13
- recentMemories: Array<{
14
- type: string;
15
- intent: string;
16
- age: string;
17
- }>;
18
- currentTasks: Array<{
19
- intent: string;
20
- age: string;
21
- }>;
22
- recentCorrections: Array<{
23
- intent: string;
24
- age: string;
25
- }>;
26
- recentDecisions: Array<{
27
- intent: string;
28
- age: string;
29
- }>;
30
- }
31
- /**
32
- * Build context for resuming work after a conversation break.
33
- */
34
- export declare function buildResumeContext(memoryStore: MemoryStore): ResumeContext;
35
- /** Format resume context for AI consumption */
36
- export declare function formatResumeContext(ctx: ResumeContext): string;
37
- //# sourceMappingURL=resume-work.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume-work.d.ts","sourceRoot":"","sources":["../../src/memory/resume-work.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,YAAY,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,iBAAiB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAmF1E;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAgD9D"}
@@ -1,141 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildResumeContext = buildResumeContext;
4
- exports.formatResumeContext = formatResumeContext;
5
- const session_tracker_1 = require("./session-tracker");
6
- /**
7
- * Build context for resuming work after a conversation break.
8
- */
9
- function buildResumeContext(memoryStore) {
10
- const result = {
11
- lastSession: null,
12
- recentMemories: [],
13
- currentTasks: [],
14
- recentCorrections: [],
15
- recentDecisions: [],
16
- };
17
- // 1. Get last session summary
18
- try {
19
- const sessions = (0, session_tracker_1.getRecentSessions)(memoryStore, 3);
20
- if (sessions && sessions.length > 0) {
21
- const last = sessions[0];
22
- result.lastSession = typeof last === 'string' ? last :
23
- typeof last === 'object' ? (last.summary || last.topic ||
24
- JSON.stringify(last).slice(0, 200)) : String(last);
25
- }
26
- }
27
- catch { /* session tracking might not have data */ }
28
- // 2. Recent memories (last 24 hours)
29
- const dayAgo = Date.now() - 24 * 60 * 60 * 1000;
30
- try {
31
- const all = memoryStore.getActive(50);
32
- const recent = all.filter(m => m.timestamp >= dayAgo);
33
- result.recentMemories = recent.slice(0, 20).map(m => ({
34
- type: m.type,
35
- intent: m.intent,
36
- age: formatAge(m.timestamp),
37
- }));
38
- }
39
- catch { /* */ }
40
- // 3. Current tasks (CURRENT_TASK type memories)
41
- try {
42
- const tasks = memoryStore.getByType('CURRENT_TASK', 10);
43
- result.currentTasks = tasks
44
- .filter(t => Date.now() - t.timestamp < 7 * 24 * 60 * 60 * 1000) // Last 7 days
45
- .map(t => ({
46
- intent: t.intent,
47
- age: formatAge(t.timestamp),
48
- }));
49
- }
50
- catch { /* type might not exist yet */ }
51
- // 4. Recent corrections (most valuable for not repeating mistakes)
52
- try {
53
- const corrections = memoryStore.getByType('CORRECTION', 10);
54
- result.recentCorrections = corrections
55
- .filter(c => Date.now() - c.timestamp < 3 * 24 * 60 * 60 * 1000) // Last 3 days
56
- .map(c => ({
57
- intent: c.intent,
58
- age: formatAge(c.timestamp),
59
- }));
60
- }
61
- catch { /* */ }
62
- // 5. Recent decisions
63
- try {
64
- const decisions = memoryStore.getByType('DECISION', 10);
65
- result.recentDecisions = decisions
66
- .filter(d => Date.now() - d.timestamp < 7 * 24 * 60 * 60 * 1000) // Last 7 days
67
- .map(d => ({
68
- intent: d.intent,
69
- age: formatAge(d.timestamp),
70
- }));
71
- }
72
- catch { /* */ }
73
- // 6. Recent git commits (what changed since last session)
74
- try {
75
- const { execSync } = require('child_process');
76
- const gitLog = execSync('git log --oneline --since="24 hours ago" -10', { encoding: 'utf-8', timeout: 5000, cwd: process.cwd(), stdio: ['pipe', 'pipe', 'pipe'] }).trim();
77
- if (gitLog) {
78
- const commits = gitLog.split('\n').filter((l) => l.trim());
79
- if (commits.length > 0) {
80
- result.recentCommits = commits.map((c) => c.trim());
81
- }
82
- }
83
- }
84
- catch { /* git not available or no commits */ }
85
- return result;
86
- }
87
- /** Format resume context for AI consumption */
88
- function formatResumeContext(ctx) {
89
- const lines = ['# 🔄 Resume Work — Where We Left Off\n'];
90
- if (ctx.lastSession) {
91
- lines.push(`## Last Session\n${ctx.lastSession}\n`);
92
- }
93
- if (ctx.currentTasks.length > 0) {
94
- lines.push('## 📋 Current Tasks');
95
- ctx.currentTasks.forEach(t => lines.push(`- ${t.intent} _(${t.age})_`));
96
- lines.push('');
97
- }
98
- if (ctx.recentCorrections.length > 0) {
99
- lines.push('## 🔴 Recent Corrections (DON\'T repeat)');
100
- ctx.recentCorrections.forEach(c => lines.push(`- ${c.intent} _(${c.age})_`));
101
- lines.push('');
102
- }
103
- if (ctx.recentDecisions.length > 0) {
104
- lines.push('## 📌 Recent Decisions');
105
- ctx.recentDecisions.forEach(d => lines.push(`- ${d.intent} _(${d.age})_`));
106
- lines.push('');
107
- }
108
- if (ctx.recentMemories.length > 0) {
109
- lines.push(`## 🧠 Recent Activity (${ctx.recentMemories.length} memories in last 24h)`);
110
- const byType = {};
111
- ctx.recentMemories.forEach(m => { byType[m.type] = (byType[m.type] || 0) + 1; });
112
- Object.entries(byType).forEach(([type, count]) => {
113
- lines.push(`- ${type}: ${count}`);
114
- });
115
- lines.push('');
116
- }
117
- // Git commits (what happened since you left)
118
- const commits = ctx.recentCommits;
119
- if (commits && commits.length > 0) {
120
- lines.push('## 📝 Recent Commits (last 24h)');
121
- commits.forEach((c) => lines.push(`- \`${c}\``));
122
- lines.push('');
123
- }
124
- if (lines.length <= 1) {
125
- lines.push('No recent activity found. This may be a fresh session.');
126
- }
127
- return lines.join('\n');
128
- }
129
- // ─── Helper ──────────────────────────────────────────────────────────────────
130
- function formatAge(timestamp) {
131
- const diff = Date.now() - timestamp;
132
- const mins = Math.floor(diff / 60000);
133
- if (mins < 60)
134
- return `${mins}m ago`;
135
- const hours = Math.floor(mins / 60);
136
- if (hours < 24)
137
- return `${hours}h ago`;
138
- const days = Math.floor(hours / 24);
139
- return `${days}d ago`;
140
- }
141
- //# sourceMappingURL=resume-work.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume-work.js","sourceRoot":"","sources":["../../src/memory/resume-work.ts"],"names":[],"mappings":"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"}