cortex-mcp 2.6.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 (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,127 +0,0 @@
1
- "use strict";
2
- /**
3
- * Completion Resolver — Detects when work is DONE and demotes old related memories.
4
- *
5
- * THE CRITICAL GAP: Cortex stores PROBLEMS ("need SEO", "fix auth bug") but
6
- * never marks them as RESOLVED. So force_recall keeps suggesting old tasks
7
- * that were already completed — making the AI feel "dumb" and repetitive.
8
- *
9
- * How it works:
10
- * 1. Scans text for completion signals: "done", "finished", "completed", "shipped"
11
- * 2. Extracts the TOPIC of what was completed (e.g., "SEO", "auth", "refactoring")
12
- * 3. Searches existing memories for that topic
13
- * 4. Demotes old memories about the completed topic (importance → 0.2)
14
- * 5. Tags them as "resolved" so force_recall can deprioritize
15
- *
16
- * This makes Cortex behave like a real brain — once you finish something,
17
- * it stops nagging you about it.
18
- */
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.detectCompletion = detectCompletion;
21
- exports.resolveRelatedMemories = resolveRelatedMemories;
22
- const types_1 = require("../types");
23
- // ─── Completion Detection Patterns ───────────────────────────────────────────
24
- const COMPLETION_PATTERNS = [
25
- // Explicit completion: "I finished X", "X is done", "completed the X"
26
- { regex: /\b(?:I|we)\s+(?:finished|completed|done with|wrapped up|shipped)\s+(?:the\s+)?(.{3,60})/i, confidence: 0.90 },
27
- { regex: /\b(?:the\s+)?(.{3,40})\s+(?:is|are)\s+(?:done|finished|completed|shipped|deployed|live)\b/i, confidence: 0.90 },
28
- { regex: /\b(?:just|already|finally)\s+(?:finished|completed|fixed|done with)\s+(?:the\s+)?(.{3,60})/i, confidence: 0.90 },
29
- // Task-specific completion: "fixed the SEO", "resolved the bug"
30
- { regex: /\b(?:fixed|resolved|addressed|handled|took care of)\s+(?:the\s+|all\s+(?:the\s+)?)?(.{3,60})/i, confidence: 0.85 },
31
- { regex: /\b(?:the\s+)?(.{3,40})\s+(?:has been|have been|was|were)\s+(?:fixed|resolved|completed|addressed|handled)\b/i, confidence: 0.85 },
32
- // Implicit completion: "SEO is working now", "auth works fine"
33
- { regex: /\b(?:the\s+)?(.{3,40})\s+(?:is|are)\s+(?:working|running|passing|good)\s+(?:now|fine|great|properly)\b/i, confidence: 0.80 },
34
- { regex: /\b(?:no more|no longer any?)\s+(?:issues?|problems?|bugs?)\s+(?:with|in|on)\s+(?:the\s+)?(.{3,40})\b/i, confidence: 0.80 },
35
- // Past tense markers: "we already did X", "X was already done"
36
- { regex: /\b(?:already|previously)\s+(?:did|done|fixed|handled|completed|finished)\s+(?:the\s+)?(.{3,60})/i, confidence: 0.85 },
37
- ];
38
- /**
39
- * Detect completion signals from text.
40
- * Returns topics that were identified as "done/completed".
41
- */
42
- function detectCompletion(text) {
43
- const signals = [];
44
- const seenTopics = new Set();
45
- for (const pattern of COMPLETION_PATTERNS) {
46
- const match = text.match(pattern.regex);
47
- if (match && match[1]) {
48
- const topic = cleanTopic(match[1]);
49
- if (topic.length < 3 || topic.length > 50)
50
- continue;
51
- if (seenTopics.has(topic.toLowerCase()))
52
- continue;
53
- seenTopics.add(topic.toLowerCase());
54
- signals.push({
55
- topic,
56
- trigger: match[0].trim(),
57
- confidence: pattern.confidence,
58
- });
59
- }
60
- }
61
- return signals;
62
- }
63
- /**
64
- * Resolve (demote) old memories about a completed topic.
65
- *
66
- * Searches for active memories whose intent mentions the topic,
67
- * then demotes their importance and tags them as "resolved".
68
- *
69
- * Returns the number of memories resolved.
70
- */
71
- function resolveRelatedMemories(memoryStore, topic, _confidence = 0.85) {
72
- const topicLower = topic.toLowerCase();
73
- const topicWords = topicLower.split(/\s+/).filter(w => w.length > 2);
74
- if (topicWords.length === 0)
75
- return 0;
76
- // Search by FTS for the topic
77
- let candidates;
78
- try {
79
- candidates = memoryStore.searchFTS(topic, 50);
80
- }
81
- catch {
82
- // FTS failed, fall back to getActive
83
- candidates = memoryStore.getActive(200).map(m => ({
84
- memory: m,
85
- score: 0,
86
- matchMethod: 'fallback',
87
- }));
88
- }
89
- let resolved = 0;
90
- for (const candidate of candidates) {
91
- const m = candidate.memory;
92
- const intentLower = m.intent.toLowerCase();
93
- // Check if this memory's intent is about the completed topic
94
- const matchingWords = topicWords.filter(w => intentLower.includes(w));
95
- const matchRatio = matchingWords.length / topicWords.length;
96
- // Require at least half the topic words to match, minimum 1
97
- if (matchRatio < 0.5 || matchingWords.length === 0)
98
- continue;
99
- // Don't demote if already resolved or very recent (< 1 hour)
100
- if (m.tags?.includes('resolved'))
101
- continue;
102
- if (Date.now() - m.createdAt < 3600000)
103
- continue;
104
- // Don't demote high-confidence CORRECTION or CONVENTION memories
105
- // (those are permanent lessons, not tasks)
106
- if ((m.type === types_1.MemoryType.CORRECTION || m.type === types_1.MemoryType.CONVENTION) && m.confidence >= 0.8)
107
- continue;
108
- // Demote importance and tag as resolved
109
- const newTags = [...(m.tags || []), 'resolved'];
110
- const demotedImportance = Math.min(m.importance, 0.2);
111
- memoryStore.update(m.id, {
112
- importance: demotedImportance,
113
- tags: newTags,
114
- });
115
- resolved++;
116
- }
117
- return resolved;
118
- }
119
- // ─── Helpers ─────────────────────────────────────────────────────────────────
120
- function cleanTopic(raw) {
121
- return raw
122
- .replace(/[.!?,;:'"()[\]{}]/g, '')
123
- .replace(/\b(the|a|an|this|that|those|these|some|any|all|my|our|your)\b/gi, '')
124
- .replace(/\s+/g, ' ')
125
- .trim();
126
- }
127
- //# sourceMappingURL=completion-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion-resolver.js","sourceRoot":"","sources":["../../src/memory/completion-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export interface DetectedConvention {
2
- pattern: string;
3
- evidence: string;
4
- confidence: number;
5
- category: 'functions' | 'variables' | 'imports' | 'errors' | 'naming' | 'structure';
6
- }
7
- /**
8
- * Scan source files and detect coding conventions.
9
- */
10
- export declare function detectConventions(workspaceRoot: string): DetectedConvention[];
11
- //# sourceMappingURL=convention-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convention-detector.d.ts","sourceRoot":"","sources":["../../src/memory/convention-detector.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;CACvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAuN7E"}
@@ -1,294 +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.detectConventions = detectConventions;
37
- /**
38
- * Convention Detector — Auto-discovers coding patterns from source code.
39
- *
40
- * Scans actual project code to detect coding conventions:
41
- * - Arrow functions vs function declarations
42
- * - const vs let vs var usage
43
- * - Error handling patterns (try/catch, .catch(), Result type)
44
- * - Import style (named vs default, relative vs absolute)
45
- * - Naming conventions (camelCase, PascalCase, snake_case)
46
- * - File organization patterns
47
- *
48
- * Stores detected patterns as CONVENTION memories so the AI follows
49
- * the project's actual style, not generic defaults.
50
- */
51
- const fs = __importStar(require("fs"));
52
- const path = __importStar(require("path"));
53
- /**
54
- * Scan source files and detect coding conventions.
55
- */
56
- function detectConventions(workspaceRoot) {
57
- const conventions = [];
58
- const files = getSourceFiles(workspaceRoot);
59
- if (files.length === 0)
60
- return conventions;
61
- // Counters for pattern detection
62
- const counts = {
63
- arrowFunctions: 0,
64
- functionDeclarations: 0,
65
- constUsage: 0,
66
- letUsage: 0,
67
- varUsage: 0,
68
- tryCatch: 0,
69
- dotCatch: 0,
70
- namedImports: 0,
71
- defaultImports: 0,
72
- relativeImports: 0,
73
- absoluteImports: 0,
74
- semicolons: 0,
75
- noSemicolons: 0,
76
- singleQuotes: 0,
77
- doubleQuotes: 0,
78
- asyncAwait: 0,
79
- thenChain: 0,
80
- typeAnnotations: 0,
81
- interfaceCount: 0,
82
- enumCount: 0,
83
- classCount: 0,
84
- };
85
- // Sample up to 20 files for speed
86
- const sampleFiles = files.slice(0, 20);
87
- let _totalLines = 0;
88
- for (const file of sampleFiles) {
89
- try {
90
- const content = fs.readFileSync(path.join(workspaceRoot, file), 'utf-8');
91
- const lines = content.split('\n');
92
- _totalLines += lines.length;
93
- // Count patterns
94
- counts.arrowFunctions += (content.match(/=>\s*{/g) || []).length;
95
- counts.functionDeclarations += (content.match(/function\s+\w+/g) || []).length;
96
- counts.constUsage += (content.match(/\bconst\s+/g) || []).length;
97
- counts.letUsage += (content.match(/\blet\s+/g) || []).length;
98
- counts.varUsage += (content.match(/\bvar\s+/g) || []).length;
99
- counts.tryCatch += (content.match(/try\s*{/g) || []).length;
100
- counts.dotCatch += (content.match(/\.catch\(/g) || []).length;
101
- counts.namedImports += (content.match(/import\s+{/g) || []).length;
102
- counts.defaultImports += (content.match(/import\s+\w+\s+from/g) || []).length;
103
- counts.relativeImports += (content.match(/from\s+['"]\.\//g) || []).length;
104
- counts.absoluteImports += (content.match(/from\s+['"](?!\.)/g) || []).length;
105
- counts.asyncAwait += (content.match(/\basync\s+/g) || []).length;
106
- counts.thenChain += (content.match(/\.then\(/g) || []).length;
107
- counts.typeAnnotations += (content.match(/:\s*(string|number|boolean|any|void|never)/g) || []).length;
108
- counts.interfaceCount += (content.match(/\binterface\s+\w+/g) || []).length;
109
- counts.enumCount += (content.match(/\benum\s+\w+/g) || []).length;
110
- counts.classCount += (content.match(/\bclass\s+\w+/g) || []).length;
111
- // Sample lines for semicolon and quote detection
112
- for (const line of lines.slice(0, 50)) {
113
- const trimmed = line.trim();
114
- if (trimmed.length > 5 && !trimmed.startsWith('//') && !trimmed.startsWith('*')) {
115
- if (trimmed.endsWith(';'))
116
- counts.semicolons++;
117
- else
118
- counts.noSemicolons++;
119
- if (trimmed.includes("'"))
120
- counts.singleQuotes++;
121
- if (trimmed.includes('"'))
122
- counts.doubleQuotes++;
123
- }
124
- }
125
- }
126
- catch { /* skip unreadable files */ }
127
- }
128
- // ─── Derive Conventions ──────────────────────────────────────────────────
129
- const total = (a, b) => a + b || 1;
130
- const ratio = (a, b) => a / total(a, b);
131
- // Function style
132
- const arrowRatio = ratio(counts.arrowFunctions, counts.functionDeclarations);
133
- if (arrowRatio > 0.7) {
134
- conventions.push({
135
- pattern: 'Use arrow functions (=>) — this project strongly prefers arrow functions over function declarations',
136
- evidence: `${counts.arrowFunctions} arrow functions vs ${counts.functionDeclarations} function declarations (${Math.round(arrowRatio * 100)}% arrow)`,
137
- confidence: Math.min(0.9, 0.6 + arrowRatio * 0.3),
138
- category: 'functions',
139
- });
140
- }
141
- else if (arrowRatio < 0.3) {
142
- conventions.push({
143
- pattern: 'Use function declarations — this project prefers traditional function declarations over arrow functions',
144
- evidence: `${counts.functionDeclarations} function declarations vs ${counts.arrowFunctions} arrow functions`,
145
- confidence: Math.min(0.9, 0.6 + (1 - arrowRatio) * 0.3),
146
- category: 'functions',
147
- });
148
- }
149
- // Variable declarations
150
- if (counts.varUsage > 0 && counts.constUsage + counts.letUsage > 0) {
151
- const varRatio = counts.varUsage / total(counts.varUsage, counts.constUsage + counts.letUsage);
152
- if (varRatio < 0.1) {
153
- conventions.push({
154
- pattern: 'Never use var — this project uses const/let exclusively',
155
- evidence: `${counts.constUsage} const, ${counts.letUsage} let, only ${counts.varUsage} var`,
156
- confidence: 0.90,
157
- category: 'variables',
158
- });
159
- }
160
- }
161
- if (counts.constUsage > 0 && counts.letUsage > 0) {
162
- const constRatio = ratio(counts.constUsage, counts.letUsage);
163
- if (constRatio > 0.8) {
164
- conventions.push({
165
- pattern: 'Prefer const over let — this project heavily favors immutable bindings',
166
- evidence: `${counts.constUsage} const vs ${counts.letUsage} let (${Math.round(constRatio * 100)}% const)`,
167
- confidence: 0.80,
168
- category: 'variables',
169
- });
170
- }
171
- }
172
- // Async patterns
173
- const asyncRatio = ratio(counts.asyncAwait, counts.thenChain);
174
- if (asyncRatio > 0.8 && counts.asyncAwait > 3) {
175
- conventions.push({
176
- pattern: 'Use async/await — this project uses async/await pattern, avoid .then() chains',
177
- evidence: `${counts.asyncAwait} async/await vs ${counts.thenChain} .then() chains`,
178
- confidence: 0.85,
179
- category: 'functions',
180
- });
181
- }
182
- // Error handling
183
- if (counts.tryCatch > 3) {
184
- conventions.push({
185
- pattern: 'Use try/catch for error handling — project uses structured error handling',
186
- evidence: `${counts.tryCatch} try/catch blocks, ${counts.dotCatch} .catch() handlers`,
187
- confidence: 0.75,
188
- category: 'errors',
189
- });
190
- }
191
- // Import style
192
- if (counts.namedImports > counts.defaultImports * 2) {
193
- conventions.push({
194
- pattern: 'Prefer named imports over default imports: import { X } from "..."',
195
- evidence: `${counts.namedImports} named imports vs ${counts.defaultImports} default imports`,
196
- confidence: 0.75,
197
- category: 'imports',
198
- });
199
- }
200
- // TypeScript strictness
201
- if (counts.typeAnnotations > 10 && counts.interfaceCount > 3) {
202
- conventions.push({
203
- pattern: 'Use explicit TypeScript types — project uses strong typing with interfaces',
204
- evidence: `${counts.typeAnnotations} type annotations, ${counts.interfaceCount} interfaces, ${counts.enumCount} enums`,
205
- confidence: 0.85,
206
- category: 'naming',
207
- });
208
- }
209
- // Semicolons
210
- const semiRatio = ratio(counts.semicolons, counts.noSemicolons);
211
- if (semiRatio > 0.8) {
212
- conventions.push({
213
- pattern: 'Always use semicolons at end of statements',
214
- evidence: `${Math.round(semiRatio * 100)}% of lines end with semicolons`,
215
- confidence: 0.80,
216
- category: 'structure',
217
- });
218
- }
219
- else if (semiRatio < 0.2) {
220
- conventions.push({
221
- pattern: 'No semicolons — project uses ASI (automatic semicolon insertion)',
222
- evidence: `Only ${Math.round(semiRatio * 100)}% of lines have semicolons`,
223
- confidence: 0.80,
224
- category: 'structure',
225
- });
226
- }
227
- // Quote style
228
- const quoteRatio = ratio(counts.singleQuotes, counts.doubleQuotes);
229
- if (quoteRatio > 0.7) {
230
- conventions.push({
231
- pattern: 'Use single quotes for strings',
232
- evidence: `${counts.singleQuotes} single-quoted vs ${counts.doubleQuotes} double-quoted strings`,
233
- confidence: 0.75,
234
- category: 'structure',
235
- });
236
- }
237
- else if (quoteRatio < 0.3) {
238
- conventions.push({
239
- pattern: 'Use double quotes for strings',
240
- evidence: `${counts.doubleQuotes} double-quoted vs ${counts.singleQuotes} single-quoted strings`,
241
- confidence: 0.75,
242
- category: 'structure',
243
- });
244
- }
245
- // Class vs functional style
246
- if (counts.classCount > 5) {
247
- conventions.push({
248
- pattern: 'Uses class-based architecture (OOP style)',
249
- evidence: `${counts.classCount} classes found across ${sampleFiles.length} files`,
250
- confidence: 0.70,
251
- category: 'structure',
252
- });
253
- }
254
- else if (counts.classCount === 0 && counts.arrowFunctions > 10) {
255
- conventions.push({
256
- pattern: 'Uses functional architecture — no classes, prefer pure functions',
257
- evidence: `0 classes, ${counts.arrowFunctions} arrow functions`,
258
- confidence: 0.70,
259
- category: 'structure',
260
- });
261
- }
262
- return conventions;
263
- }
264
- // ─── Helpers ─────────────────────────────────────────────────────────────────
265
- function getSourceFiles(root) {
266
- const files = [];
267
- const ignore = new Set(['node_modules', '.git', 'dist', 'coverage', '.next', 'build']);
268
- const exts = new Set(['.ts', '.tsx', '.js', '.jsx']);
269
- function walk(dir, depth) {
270
- if (depth > 3 || files.length >= 30)
271
- return;
272
- try {
273
- const entries = fs.readdirSync(dir, { withFileTypes: true });
274
- for (const entry of entries) {
275
- if (ignore.has(entry.name) || entry.name.startsWith('.'))
276
- continue;
277
- const full = path.join(dir, entry.name);
278
- if (entry.isDirectory()) {
279
- walk(full, depth + 1);
280
- }
281
- else {
282
- const ext = path.extname(entry.name);
283
- if (exts.has(ext) && !entry.name.endsWith('.d.ts')) {
284
- files.push(path.relative(root, full).replace(/\\/g, '/'));
285
- }
286
- }
287
- }
288
- }
289
- catch { /* ignore */ }
290
- }
291
- walk(root, 0);
292
- return files;
293
- }
294
- //# sourceMappingURL=convention-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convention-detector.js","sourceRoot":"","sources":["../../src/memory/convention-detector.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Correction Detector — Catches user corrections automatically.
3
- *
4
- * The #1 gap in Cortex: when a user says "no, use X instead of Y",
5
- * that correction is LOST when the conversation ends.
6
- *
7
- * This module scans text (both AI responses and user context) for
8
- * correction patterns and auto-stores them as high-importance CORRECTION memories.
9
- *
10
- * Examples it catches:
11
- * - "no, use vectors not vectorCache"
12
- * - "that's wrong, it should be const"
13
- * - "actually the file is in src/db/"
14
- * - "I meant to use path.join"
15
- */
16
- export interface DetectedCorrection {
17
- original: string;
18
- corrected: string;
19
- fullContext: string;
20
- confidence: number;
21
- source: 'user_correction' | 'ai_acknowledgment';
22
- }
23
- /**
24
- * Detect corrections from user context text.
25
- * Call this when auto_learn receives context about what the user said.
26
- */
27
- export declare function detectUserCorrections(userText: string): DetectedCorrection[];
28
- /**
29
- * Detect when the AI acknowledges a mistake in its own response.
30
- * Call this from auto_learn on the AI's response text.
31
- */
32
- export declare function detectAIAcknowledgments(aiText: string): DetectedCorrection[];
33
- //# sourceMappingURL=correction-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"correction-detector.d.ts","sourceRoot":"","sources":["../../src/memory/correction-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;CACnD;AA4DD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAyB5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAuB5E"}
@@ -1,129 +0,0 @@
1
- "use strict";
2
- /**
3
- * Correction Detector — Catches user corrections automatically.
4
- *
5
- * The #1 gap in Cortex: when a user says "no, use X instead of Y",
6
- * that correction is LOST when the conversation ends.
7
- *
8
- * This module scans text (both AI responses and user context) for
9
- * correction patterns and auto-stores them as high-importance CORRECTION memories.
10
- *
11
- * Examples it catches:
12
- * - "no, use vectors not vectorCache"
13
- * - "that's wrong, it should be const"
14
- * - "actually the file is in src/db/"
15
- * - "I meant to use path.join"
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.detectUserCorrections = detectUserCorrections;
19
- exports.detectAIAcknowledgments = detectAIAcknowledgments;
20
- // ─── Correction Patterns ─────────────────────────────────────────────────────
21
- const USER_CORRECTION_PATTERNS = [
22
- // "no, use X not Y" / "no use X instead of Y"
23
- {
24
- regex: /\bno[,.]?\s+(use|it'?s|it should be|should be|change to|switch to)\s+(.{3,50}?)(?:\s+(?:not|instead of|rather than)\s+(.{3,50}))?[.!]?\s*$/gim,
25
- extractGroups: (m) => ({ corrected: m[2]?.trim(), original: m[3]?.trim() }),
26
- confidence: 0.90,
27
- },
28
- // "that's wrong" / "that's incorrect" / "that's not right"
29
- {
30
- regex: /\b(that'?s|this is)\s+(wrong|incorrect|not right|not correct|a mistake)\b.{0,80}/gi,
31
- extractGroups: () => ({}),
32
- confidence: 0.85,
33
- },
34
- // "actually, X" / "actually it should be X"
35
- {
36
- regex: /\bactually[,.]?\s+(it\s+)?(should be|is|use|the\s+\w+\s+is)\s+(.{5,80})/gi,
37
- extractGroups: (m) => ({ corrected: m[3]?.trim() }),
38
- confidence: 0.80,
39
- },
40
- // "I meant X" / "I mean X"
41
- {
42
- regex: /\bI\s+mean[t]?\s+(.{5,80})/gi,
43
- extractGroups: (m) => ({ corrected: m[1]?.trim() }),
44
- confidence: 0.75,
45
- },
46
- // "not X, but Y" / "not X, Y"
47
- {
48
- regex: /\bnot\s+(.{3,40}?)[,]\s*(but\s+)?(.{3,40})/gi,
49
- extractGroups: (m) => ({ original: m[1]?.trim(), corrected: m[3]?.trim() }),
50
- confidence: 0.70,
51
- },
52
- // "X is wrong" / "X is incorrect"
53
- {
54
- regex: /\b(.{5,40})\s+is\s+(wrong|incorrect|broken|outdated|deprecated)/gi,
55
- extractGroups: (m) => ({ original: m[1]?.trim() }),
56
- confidence: 0.75,
57
- },
58
- ];
59
- // AI acknowledgment patterns — when the AI itself admits a mistake
60
- const AI_ACKNOWLEDGMENT_PATTERNS = [
61
- { regex: /\b(I apologize|sorry|my mistake|my bad|you'?re right|good catch)\b/gi, confidence: 0.85 },
62
- { regex: /\b(let me fix that|let me correct|I was wrong|I made an error)\b/gi, confidence: 0.90 },
63
- { regex: /\b(should have (used|been|done)|instead of .{3,30} I should)\b/gi, confidence: 0.85 },
64
- { regex: /\b(the (correct|right|actual|proper) (way|approach|method|answer) is)\b/gi, confidence: 0.80 },
65
- ];
66
- // ─── Main Detector ───────────────────────────────────────────────────────────
67
- /**
68
- * Detect corrections from user context text.
69
- * Call this when auto_learn receives context about what the user said.
70
- */
71
- function detectUserCorrections(userText) {
72
- if (!userText || userText.length < 10)
73
- return [];
74
- const results = [];
75
- const sentences = splitIntoSentences(userText);
76
- for (const sentence of sentences) {
77
- for (const pattern of USER_CORRECTION_PATTERNS) {
78
- pattern.regex.lastIndex = 0;
79
- const match = pattern.regex.exec(sentence);
80
- if (match) {
81
- const groups = pattern.extractGroups(match);
82
- results.push({
83
- original: groups.original || '',
84
- corrected: groups.corrected || '',
85
- fullContext: sentence.trim().slice(0, 200),
86
- confidence: pattern.confidence,
87
- source: 'user_correction',
88
- });
89
- break; // One match per sentence
90
- }
91
- }
92
- }
93
- return results;
94
- }
95
- /**
96
- * Detect when the AI acknowledges a mistake in its own response.
97
- * Call this from auto_learn on the AI's response text.
98
- */
99
- function detectAIAcknowledgments(aiText) {
100
- if (!aiText || aiText.length < 15)
101
- return [];
102
- const results = [];
103
- const sentences = splitIntoSentences(aiText);
104
- for (const sentence of sentences) {
105
- for (const pattern of AI_ACKNOWLEDGMENT_PATTERNS) {
106
- pattern.regex.lastIndex = 0;
107
- if (pattern.regex.test(sentence)) {
108
- results.push({
109
- original: '',
110
- corrected: '',
111
- fullContext: sentence.trim().slice(0, 200),
112
- confidence: pattern.confidence,
113
- source: 'ai_acknowledgment',
114
- });
115
- break;
116
- }
117
- }
118
- }
119
- return results;
120
- }
121
- // ─── Helper ──────────────────────────────────────────────────────────────────
122
- function splitIntoSentences(text) {
123
- return text
124
- .replace(/\n+/g, '. ')
125
- .split(/(?<=[.!?])\s+/)
126
- .map(s => s.trim())
127
- .filter(s => s.length > 8 && s.length < 300);
128
- }
129
- //# sourceMappingURL=correction-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"correction-detector.js","sourceRoot":"","sources":["../../src/memory/correction-detector.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Cross-Memory Linker — Automatically creates edges between related memories.
3
- *
4
- * When a new memory is stored, this module finds existing memories that share
5
- * topics, files, or keywords and creates graph edges between them.
6
- *
7
- * This transforms isolated memories into a connected knowledge graph.
8
- * When the user asks "tell me about auth", they get a connected story
9
- * instead of random fragments.
10
- */
11
- import { MemoryStore } from '../db/memory-store';
12
- import type { MemoryUnit } from '../types';
13
- /**
14
- * After storing a new memory, auto-link it to related existing memories.
15
- * Uses 3 signals: shared files, shared tags, and word overlap.
16
- */
17
- export declare function autoLinkMemory(memoryStore: MemoryStore, newMemory: MemoryUnit): number;
18
- //# sourceMappingURL=cross-memory-linker.d.ts.map