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,47 +0,0 @@
1
- /**
2
- * File Relationship Mapper — Tracks which files are always edited together.
3
- *
4
- * When the AI edits file A and file B in the same session, this module:
5
- * 1. Records the co-edit event
6
- * 2. Over time, builds a map of "these files always change together"
7
- * 3. Surfaces warnings when only one of a pair is being edited
8
- *
9
- * This prevents partial changes — the #1 cause of cascading failures.
10
- * "You changed types.ts but didn't update mcp-handler.ts (edited together 5 times)"
11
- */
12
- import { MemoryStore } from '../db/memory-store';
13
- export interface FileRelationship {
14
- fileA: string;
15
- fileB: string;
16
- coEditCount: number;
17
- lastCoEdit: number;
18
- reason?: string;
19
- }
20
- /**
21
- * Record that a file was edited in this session.
22
- * Automatically tracks co-edit relationships.
23
- */
24
- export declare function recordFileEdit(filePath: string): void;
25
- /**
26
- * Get files that are frequently co-edited with the given file.
27
- * Returns files that should also be checked/edited.
28
- */
29
- export declare function getRelatedFiles(filePath: string, memoryStore: MemoryStore): string[];
30
- /**
31
- * Get all co-edit relationships from this session (for end-of-session storage).
32
- */
33
- export declare function getSessionRelationships(): FileRelationship[];
34
- /**
35
- * Check if any related files are missing from the current edit set.
36
- * Returns warnings about files that should probably also be edited.
37
- */
38
- export declare function checkMissingRelated(currentFile: string, memoryStore: MemoryStore): string[];
39
- /**
40
- * Store accumulated co-edit relationships as persistent memories.
41
- */
42
- export declare function storeRelationships(memoryStore: MemoryStore): number;
43
- /**
44
- * Reset session tracking (call at session end).
45
- */
46
- export declare function resetFileTracking(): void;
47
- //# sourceMappingURL=file-relationships.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-relationships.d.ts","sourceRoot":"","sources":["../../src/memory/file-relationships.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAYrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,CA4BpF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,gBAAgB,EAAE,CAe5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,CAW3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAyBnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC"}
@@ -1,130 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recordFileEdit = recordFileEdit;
4
- exports.getRelatedFiles = getRelatedFiles;
5
- exports.getSessionRelationships = getSessionRelationships;
6
- exports.checkMissingRelated = checkMissingRelated;
7
- exports.storeRelationships = storeRelationships;
8
- exports.resetFileTracking = resetFileTracking;
9
- // In-memory co-edit tracking (per session)
10
- const sessionEdits = new Set();
11
- const coEditMap = new Map();
12
- /**
13
- * Record that a file was edited in this session.
14
- * Automatically tracks co-edit relationships.
15
- */
16
- function recordFileEdit(filePath) {
17
- // Normalize to basename for cross-path matching
18
- const basename = filePath.replace(/\\/g, '/').split('/').pop() || filePath;
19
- // Track co-edits with all previously edited files
20
- for (const existing of sessionEdits) {
21
- if (existing === basename)
22
- continue;
23
- const key = [existing, basename].sort().join('↔');
24
- coEditMap.set(key, (coEditMap.get(key) || 0) + 1);
25
- }
26
- sessionEdits.add(basename);
27
- }
28
- /**
29
- * Get files that are frequently co-edited with the given file.
30
- * Returns files that should also be checked/edited.
31
- */
32
- function getRelatedFiles(filePath, memoryStore) {
33
- const basename = filePath.replace(/\\/g, '/').split('/').pop() || filePath;
34
- const related = [];
35
- // 1. Check session co-edits
36
- for (const [key, count] of coEditMap.entries()) {
37
- if (count < 2)
38
- continue; // Need at least 2 co-edits to be meaningful
39
- const [a, b] = key.split('↔');
40
- if (a === basename)
41
- related.push(b);
42
- else if (b === basename)
43
- related.push(a);
44
- }
45
- // 2. Check stored relationships from past sessions
46
- try {
47
- const results = memoryStore.searchFTS(`file-relationship ${basename}`, 5);
48
- for (const r of results) {
49
- if (r.memory.tags?.includes('file-relationship')) {
50
- // Extract the paired file from the intent
51
- const match = r.memory.intent.match(/(.+?)↔(.+)/);
52
- if (match) {
53
- const other = match[1].trim() === basename ? match[2].trim() : match[1].trim();
54
- if (!related.includes(other))
55
- related.push(other);
56
- }
57
- }
58
- }
59
- }
60
- catch { /* non-fatal */ }
61
- return related;
62
- }
63
- /**
64
- * Get all co-edit relationships from this session (for end-of-session storage).
65
- */
66
- function getSessionRelationships() {
67
- const relationships = [];
68
- for (const [key, count] of coEditMap.entries()) {
69
- if (count < 2)
70
- continue; // Only store meaningful relationships
71
- const [a, b] = key.split('↔');
72
- relationships.push({
73
- fileA: a,
74
- fileB: b,
75
- coEditCount: count,
76
- lastCoEdit: Date.now(),
77
- });
78
- }
79
- return relationships;
80
- }
81
- /**
82
- * Check if any related files are missing from the current edit set.
83
- * Returns warnings about files that should probably also be edited.
84
- */
85
- function checkMissingRelated(currentFile, memoryStore) {
86
- const related = getRelatedFiles(currentFile, memoryStore);
87
- const warnings = [];
88
- for (const file of related) {
89
- if (!sessionEdits.has(file)) {
90
- warnings.push(`⚠️ You're editing ${currentFile} but haven't touched ${file} — they're usually edited together`);
91
- }
92
- }
93
- return warnings;
94
- }
95
- /**
96
- * Store accumulated co-edit relationships as persistent memories.
97
- */
98
- function storeRelationships(memoryStore) {
99
- const rels = getSessionRelationships();
100
- let stored = 0;
101
- for (const rel of rels) {
102
- try {
103
- memoryStore.add({
104
- type: 'INSIGHT',
105
- intent: `${rel.fileA}↔${rel.fileB} — edited together ${rel.coEditCount} times`,
106
- action: `These files are frequently co-edited. When changing one, check the other.`,
107
- reason: `Auto-detected file relationship from ${rel.coEditCount} co-edits`,
108
- tags: ['file-relationship', rel.fileA, rel.fileB],
109
- confidence: Math.min(0.95, 0.5 + rel.coEditCount * 0.1),
110
- importance: Math.min(0.85, 0.4 + rel.coEditCount * 0.1),
111
- timestamp: Date.now(),
112
- isActive: true,
113
- accessCount: 0,
114
- createdAt: Date.now(),
115
- id: '',
116
- });
117
- stored++;
118
- }
119
- catch { /* skip duplicates */ }
120
- }
121
- return stored;
122
- }
123
- /**
124
- * Reset session tracking (call at session end).
125
- */
126
- function resetFileTracking() {
127
- sessionEdits.clear();
128
- coEditMap.clear();
129
- }
130
- //# sourceMappingURL=file-relationships.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-relationships.js","sourceRoot":"","sources":["../../src/memory/file-relationships.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface ImpactResult {
2
- targetFile: string;
3
- directDependents: string[];
4
- indirectDependents: string[];
5
- totalImpact: number;
6
- exports: string[];
7
- riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
8
- }
9
- /**
10
- * Analyze the impact of changing a file.
11
- * Scans for import statements that reference the target file.
12
- */
13
- export declare function analyzeImpact(targetFile: string, workspaceRoot: string): ImpactResult;
14
- /** Format impact analysis for AI consumption */
15
- export declare function formatImpact(result: ImpactResult): string;
16
- //# sourceMappingURL=impact-analyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impact-analyzer.d.ts","sourceRoot":"","sources":["../../src/memory/impact-analyzer.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACtB,YAAY,CA4Ed;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAiCzD"}
@@ -1,189 +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.analyzeImpact = analyzeImpact;
37
- exports.formatImpact = formatImpact;
38
- /**
39
- * Impact Analyzer — Shows what breaks when you change a file.
40
- *
41
- * Before editing file A, this module checks the architecture graph
42
- * to find all files that import from A (dependents).
43
- * Prevents breaking changes by making dependencies visible.
44
- *
45
- * Like checking "who's using this?" before changing an API.
46
- */
47
- const fs = __importStar(require("fs"));
48
- const path = __importStar(require("path"));
49
- /**
50
- * Analyze the impact of changing a file.
51
- * Scans for import statements that reference the target file.
52
- */
53
- function analyzeImpact(targetFile, workspaceRoot) {
54
- const result = {
55
- targetFile,
56
- directDependents: [],
57
- indirectDependents: [],
58
- totalImpact: 0,
59
- exports: [],
60
- riskLevel: 'LOW',
61
- };
62
- if (!workspaceRoot || !fs.existsSync(workspaceRoot))
63
- return result;
64
- // Normalize target for matching
65
- const targetBasename = path.basename(targetFile).replace(/\.(ts|tsx|js|jsx)$/, '');
66
- const targetRelative = path.relative(workspaceRoot, targetFile).replace(/\\/g, '/');
67
- // Get all source files
68
- const allFiles = getAllSourceFiles(workspaceRoot);
69
- // Find what the target exports
70
- try {
71
- const targetContent = fs.readFileSync(fs.existsSync(targetFile) ? targetFile : path.join(workspaceRoot, targetFile), 'utf-8');
72
- const exportMatches = targetContent.match(/export\s+(?:function|class|const|let|type|interface|enum)\s+(\w+)/g);
73
- if (exportMatches) {
74
- result.exports = exportMatches.map(m => {
75
- const name = m.match(/\s(\w+)$/);
76
- return name ? name[1] : m;
77
- });
78
- }
79
- }
80
- catch { /* file read failure is non-fatal */ }
81
- // Scan all files for imports from target
82
- for (const file of allFiles) {
83
- if (file === targetRelative)
84
- continue;
85
- try {
86
- const content = fs.readFileSync(path.join(workspaceRoot, file), 'utf-8');
87
- // Check for imports referencing the target file
88
- const importPattern = new RegExp(`(?:import|require).*(?:${escapeRegex(targetBasename)}|${escapeRegex(targetRelative.replace(/\.(ts|tsx|js|jsx)$/, ''))})`, 'i');
89
- if (importPattern.test(content)) {
90
- result.directDependents.push(file);
91
- }
92
- }
93
- catch { /* ignore read failures */ }
94
- }
95
- // Find indirect dependents (files that import from direct dependents)
96
- const directSet = new Set(result.directDependents);
97
- for (const depFile of result.directDependents) {
98
- const depBasename = path.basename(depFile).replace(/\.(ts|tsx|js|jsx)$/, '');
99
- for (const file of allFiles) {
100
- if (directSet.has(file) || file === targetRelative)
101
- continue;
102
- try {
103
- const content = fs.readFileSync(path.join(workspaceRoot, file), 'utf-8');
104
- if (content.includes(depBasename)) {
105
- result.indirectDependents.push(file);
106
- }
107
- }
108
- catch { /* ignore */ }
109
- }
110
- }
111
- // Deduplicate indirect
112
- result.indirectDependents = [...new Set(result.indirectDependents)];
113
- result.totalImpact = result.directDependents.length + result.indirectDependents.length;
114
- // Risk level
115
- if (result.totalImpact === 0)
116
- result.riskLevel = 'LOW';
117
- else if (result.totalImpact <= 3)
118
- result.riskLevel = 'MEDIUM';
119
- else if (result.totalImpact <= 8)
120
- result.riskLevel = 'HIGH';
121
- else
122
- result.riskLevel = 'CRITICAL';
123
- return result;
124
- }
125
- /** Format impact analysis for AI consumption */
126
- function formatImpact(result) {
127
- const riskEmoji = {
128
- LOW: '🟢', MEDIUM: '🟡', HIGH: '🟠', CRITICAL: '🔴',
129
- };
130
- const lines = [
131
- `# 💥 Impact Analysis: ${path.basename(result.targetFile)}`,
132
- `\n**Risk Level:** ${riskEmoji[result.riskLevel]} ${result.riskLevel} (${result.totalImpact} files affected)`,
133
- ];
134
- if (result.exports.length > 0) {
135
- lines.push(`\n**Exports:** \`${result.exports.slice(0, 10).join('`, `')}\``);
136
- }
137
- if (result.directDependents.length > 0) {
138
- lines.push(`\n## Direct Dependents (${result.directDependents.length} files import this)`);
139
- result.directDependents.forEach(f => lines.push(`- 📁 ${f}`));
140
- }
141
- if (result.indirectDependents.length > 0) {
142
- lines.push(`\n## Indirect Dependents (${result.indirectDependents.length} files)`);
143
- result.indirectDependents.slice(0, 5).forEach(f => lines.push(`- 📁 ${f}`));
144
- if (result.indirectDependents.length > 5) {
145
- lines.push(`_...and ${result.indirectDependents.length - 5} more_`);
146
- }
147
- }
148
- if (result.totalImpact === 0) {
149
- lines.push('\n✅ **No dependents found.** Safe to modify.');
150
- }
151
- else if (result.riskLevel === 'CRITICAL' || result.riskLevel === 'HIGH') {
152
- lines.push('\n> ⚠️ **Caution:** Many files depend on this. Changing exports or signatures may cause cascading failures.');
153
- }
154
- return lines.join('\n');
155
- }
156
- // ─── Helpers ─────────────────────────────────────────────────────────────────
157
- function getAllSourceFiles(root, maxFiles = 200) {
158
- const files = [];
159
- const ignore = new Set(['node_modules', '.git', 'dist', 'coverage', '.next', 'build', 'out']);
160
- const exts = new Set(['.ts', '.tsx', '.js', '.jsx']);
161
- function walk(dir, depth) {
162
- if (depth > 4 || files.length >= maxFiles)
163
- return;
164
- try {
165
- const entries = fs.readdirSync(dir, { withFileTypes: true });
166
- for (const entry of entries) {
167
- if (ignore.has(entry.name) || entry.name.startsWith('.'))
168
- continue;
169
- const full = path.join(dir, entry.name);
170
- if (entry.isDirectory()) {
171
- walk(full, depth + 1);
172
- }
173
- else {
174
- const ext = path.extname(entry.name);
175
- if (exts.has(ext) && !entry.name.endsWith('.d.ts')) {
176
- files.push(path.relative(root, full).replace(/\\/g, '/'));
177
- }
178
- }
179
- }
180
- }
181
- catch { /* ignore */ }
182
- }
183
- walk(root, 0);
184
- return files;
185
- }
186
- function escapeRegex(str) {
187
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
188
- }
189
- //# sourceMappingURL=impact-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impact-analyzer.js","sourceRoot":"","sources":["../../src/memory/impact-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Contextual Instructions Generator — Converts raw memories into direct DO/DON'T rules.
3
- *
4
- * THE GAP THIS FILLS:
5
- * Currently, force_recall dumps memories like:
6
- * "[CONVENTION] Arrow functions preferred over function declarations"
7
- * But the AI has to interpret this. What it actually needs is:
8
- * "DO: Use arrow functions. DON'T: Use function declarations."
9
- *
10
- * This module converts conventions, corrections, and preferences into
11
- * imperative instructions that the AI can follow without thinking.
12
- *
13
- * Like a military briefing: clear, direct, no interpretation needed.
14
- */
15
- import { MemoryStore } from '../db/memory-store';
16
- export interface InstructionSet {
17
- dos: string[];
18
- donts: string[];
19
- watchOuts: string[];
20
- style: string[];
21
- }
22
- /**
23
- * Generate contextual instructions from stored memories.
24
- */
25
- export declare function generateInstructions(memoryStore: MemoryStore): InstructionSet;
26
- /**
27
- * Format instructions as a clear, imperative briefing.
28
- */
29
- export declare function formatInstructions(instructions: InstructionSet): string;
30
- //# sourceMappingURL=instructions-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instructions-generator.d.ts","sourceRoot":"","sources":["../../src/memory/instructions-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc,CAiF7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,cAAc,GAAG,MAAM,CAwBvE"}
@@ -1,117 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateInstructions = generateInstructions;
4
- exports.formatInstructions = formatInstructions;
5
- const types_1 = require("../types");
6
- /**
7
- * Generate contextual instructions from stored memories.
8
- */
9
- function generateInstructions(memoryStore) {
10
- const instructions = {
11
- dos: [],
12
- donts: [],
13
- watchOuts: [],
14
- style: [],
15
- };
16
- const active = memoryStore.getActive(200);
17
- for (const m of active) {
18
- const intent = m.intent.toLowerCase();
19
- const full = `${m.intent} ${m.action || ''} ${m.reason || ''}`;
20
- // ─── Corrections → DON'Ts ──────────────────────────────────────
21
- if (m.type === types_1.MemoryType.CORRECTION) {
22
- // Extract the "don't do X" from corrections
23
- const noMatch = full.match(/(?:no[,.]?\s+use|don'?t\s+use|never\s+use|avoid|instead\s+of)\s+(\w[\w\s]{3,40})/i);
24
- const yesMatch = full.match(/(?:use|prefer|always\s+use|should\s+use|switch\s+to)\s+(\w[\w\s]{3,40})/i);
25
- if (noMatch) {
26
- instructions.donts.push(`DON'T: ${noMatch[1].trim()}`);
27
- }
28
- if (yesMatch) {
29
- instructions.dos.push(`DO: ${yesMatch[1].trim()}`);
30
- }
31
- if (!noMatch && !yesMatch) {
32
- instructions.watchOuts.push(`⚠️ Past correction: ${m.intent.slice(0, 80)}`);
33
- }
34
- }
35
- // ─── Conventions → DOs ─────────────────────────────────────────
36
- if (m.type === types_1.MemoryType.CONVENTION) {
37
- // Check if this is a preference (communication style)
38
- if (m.tags?.includes('preference')) {
39
- instructions.style.push(m.intent.slice(0, 80));
40
- continue;
41
- }
42
- // Auto-detected conventions → direct rules
43
- if (m.tags?.includes('auto-detected')) {
44
- if (intent.includes('arrow function')) {
45
- instructions.dos.push('DO: Use arrow functions (const fn = () => {})');
46
- }
47
- else if (intent.includes('function declaration')) {
48
- instructions.dos.push('DO: Use function declarations (function fn() {})');
49
- }
50
- else if (intent.includes('const over let')) {
51
- instructions.dos.push('DO: Use const by default, let only when reassignment needed');
52
- }
53
- else if (intent.includes('semicolon')) {
54
- if (intent.includes('always'))
55
- instructions.dos.push('DO: Always use semicolons');
56
- else
57
- instructions.dos.push('DO: Omit semicolons (ASI style)');
58
- }
59
- else if (intent.includes('single quote')) {
60
- instructions.dos.push('DO: Use single quotes for strings');
61
- }
62
- else if (intent.includes('double quote')) {
63
- instructions.dos.push('DO: Use double quotes for strings');
64
- }
65
- else {
66
- instructions.dos.push(`DO: ${m.intent.slice(0, 80)}`);
67
- }
68
- continue;
69
- }
70
- instructions.dos.push(`DO: ${m.intent.slice(0, 80)}`);
71
- }
72
- // ─── Bug Fixes → Watch Outs ───────────────────────────────────
73
- if (m.type === types_1.MemoryType.BUG_FIX) {
74
- if (m.tags?.includes('error-pattern')) {
75
- // These are TS error lessons
76
- instructions.watchOuts.push(`⚠️ ${m.intent.replace('[ERROR PATTERN] ', '').slice(0, 80)}`);
77
- }
78
- else {
79
- instructions.watchOuts.push(`⚠️ Known bug: ${m.intent.slice(0, 80)}`);
80
- }
81
- }
82
- }
83
- // Deduplicate
84
- instructions.dos = [...new Set(instructions.dos)].slice(0, 15);
85
- instructions.donts = [...new Set(instructions.donts)].slice(0, 10);
86
- instructions.watchOuts = [...new Set(instructions.watchOuts)].slice(0, 10);
87
- instructions.style = [...new Set(instructions.style)].slice(0, 5);
88
- return instructions;
89
- }
90
- /**
91
- * Format instructions as a clear, imperative briefing.
92
- */
93
- function formatInstructions(instructions) {
94
- const sections = [];
95
- if (instructions.dos.length > 0) {
96
- sections.push('## ✅ Project Rules (DO)');
97
- for (const d of instructions.dos)
98
- sections.push(`- ${d}`);
99
- }
100
- if (instructions.donts.length > 0) {
101
- sections.push('\n## ❌ Avoid (DON\'T)');
102
- for (const d of instructions.donts)
103
- sections.push(`- ${d}`);
104
- }
105
- if (instructions.watchOuts.length > 0) {
106
- sections.push('\n## ⚠️ Watch Out');
107
- for (const w of instructions.watchOuts)
108
- sections.push(`- ${w}`);
109
- }
110
- if (instructions.style.length > 0) {
111
- sections.push('\n## 🎯 Communication Style');
112
- for (const s of instructions.style)
113
- sections.push(`- ${s}`);
114
- }
115
- return sections.length > 0 ? sections.join('\n') : '';
116
- }
117
- //# sourceMappingURL=instructions-generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instructions-generator.js","sourceRoot":"","sources":["../../src/memory/instructions-generator.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { MemoryStore } from '../db/memory-store';
2
- /**
3
- * Generate MEMORY.md from the top memories in the store.
4
- * Only includes high-importance, frequently-accessed, active memories.
5
- */
6
- export declare function generateMemoryMd(memoryStore: MemoryStore, workspaceRoot: string): string;
7
- /**
8
- * Import user-edited MEMORY.md back into the memory store.
9
- * Only imports NEW lines that don't already exist in the store.
10
- */
11
- export declare function importMemoryMd(workspaceRoot: string, memoryStore: MemoryStore): number;
12
- //# sourceMappingURL=memory-export-md.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-export-md.d.ts","sourceRoot":"","sources":["../../src/memory/memory-export-md.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAkExF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CA2DtF"}