cortex-mcp 1.0.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 (176) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +21 -0
  3. package/README.md +202 -0
  4. package/dist/cli/setup.d.ts +12 -0
  5. package/dist/cli/setup.d.ts.map +1 -0
  6. package/dist/cli/setup.js +293 -0
  7. package/dist/cli/setup.js.map +1 -0
  8. package/dist/config/config.d.ts +13 -0
  9. package/dist/config/config.d.ts.map +1 -0
  10. package/dist/config/config.js +33 -0
  11. package/dist/config/config.js.map +1 -0
  12. package/dist/core/event-bus.d.ts +19 -0
  13. package/dist/core/event-bus.d.ts.map +1 -0
  14. package/dist/core/event-bus.js +51 -0
  15. package/dist/core/event-bus.js.map +1 -0
  16. package/dist/db/database.d.ts +19 -0
  17. package/dist/db/database.d.ts.map +1 -0
  18. package/dist/db/database.js +254 -0
  19. package/dist/db/database.js.map +1 -0
  20. package/dist/db/event-log.d.ts +28 -0
  21. package/dist/db/event-log.d.ts.map +1 -0
  22. package/dist/db/event-log.js +87 -0
  23. package/dist/db/event-log.js.map +1 -0
  24. package/dist/db/memory-store.d.ts +65 -0
  25. package/dist/db/memory-store.d.ts.map +1 -0
  26. package/dist/db/memory-store.js +370 -0
  27. package/dist/db/memory-store.js.map +1 -0
  28. package/dist/embedding-worker.d.ts +3 -0
  29. package/dist/embedding-worker.d.ts.map +1 -0
  30. package/dist/embedding-worker.js +94 -0
  31. package/dist/embedding-worker.js.map +1 -0
  32. package/dist/hooks/cortex-run.d.ts +15 -0
  33. package/dist/hooks/cortex-run.d.ts.map +1 -0
  34. package/dist/hooks/cortex-run.js +148 -0
  35. package/dist/hooks/cortex-run.js.map +1 -0
  36. package/dist/hooks/git-capture.d.ts +21 -0
  37. package/dist/hooks/git-capture.d.ts.map +1 -0
  38. package/dist/hooks/git-capture.js +178 -0
  39. package/dist/hooks/git-capture.js.map +1 -0
  40. package/dist/hooks/git-hooks.d.ts +12 -0
  41. package/dist/hooks/git-hooks.d.ts.map +1 -0
  42. package/dist/hooks/git-hooks.js +130 -0
  43. package/dist/hooks/git-hooks.js.map +1 -0
  44. package/dist/mcp-stdio.d.ts +10 -0
  45. package/dist/mcp-stdio.d.ts.map +1 -0
  46. package/dist/mcp-stdio.js +247 -0
  47. package/dist/mcp-stdio.js.map +1 -0
  48. package/dist/memory/anticipation-engine.d.ts +19 -0
  49. package/dist/memory/anticipation-engine.d.ts.map +1 -0
  50. package/dist/memory/anticipation-engine.js +76 -0
  51. package/dist/memory/anticipation-engine.js.map +1 -0
  52. package/dist/memory/attention-ranker.d.ts +19 -0
  53. package/dist/memory/attention-ranker.d.ts.map +1 -0
  54. package/dist/memory/attention-ranker.js +97 -0
  55. package/dist/memory/attention-ranker.js.map +1 -0
  56. package/dist/memory/auto-learner.d.ts +20 -0
  57. package/dist/memory/auto-learner.d.ts.map +1 -0
  58. package/dist/memory/auto-learner.js +179 -0
  59. package/dist/memory/auto-learner.js.map +1 -0
  60. package/dist/memory/confidence-decay.d.ts +22 -0
  61. package/dist/memory/confidence-decay.d.ts.map +1 -0
  62. package/dist/memory/confidence-decay.js +54 -0
  63. package/dist/memory/confidence-decay.js.map +1 -0
  64. package/dist/memory/embedding-manager.d.ts +5 -0
  65. package/dist/memory/embedding-manager.d.ts.map +1 -0
  66. package/dist/memory/embedding-manager.js +118 -0
  67. package/dist/memory/embedding-manager.js.map +1 -0
  68. package/dist/memory/export-import.d.ts +49 -0
  69. package/dist/memory/export-import.d.ts.map +1 -0
  70. package/dist/memory/export-import.js +131 -0
  71. package/dist/memory/export-import.js.map +1 -0
  72. package/dist/memory/git-memory.d.ts +15 -0
  73. package/dist/memory/git-memory.d.ts.map +1 -0
  74. package/dist/memory/git-memory.js +178 -0
  75. package/dist/memory/git-memory.js.map +1 -0
  76. package/dist/memory/learning-rate.d.ts +24 -0
  77. package/dist/memory/learning-rate.d.ts.map +1 -0
  78. package/dist/memory/learning-rate.js +95 -0
  79. package/dist/memory/learning-rate.js.map +1 -0
  80. package/dist/memory/llm-enhancer.d.ts +54 -0
  81. package/dist/memory/llm-enhancer.d.ts.map +1 -0
  82. package/dist/memory/llm-enhancer.js +270 -0
  83. package/dist/memory/llm-enhancer.js.map +1 -0
  84. package/dist/memory/memory-cache.d.ts +5 -0
  85. package/dist/memory/memory-cache.d.ts.map +1 -0
  86. package/dist/memory/memory-cache.js +37 -0
  87. package/dist/memory/memory-cache.js.map +1 -0
  88. package/dist/memory/memory-consolidator.d.ts +14 -0
  89. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  90. package/dist/memory/memory-consolidator.js +156 -0
  91. package/dist/memory/memory-consolidator.js.map +1 -0
  92. package/dist/memory/memory-decay.d.ts +10 -0
  93. package/dist/memory/memory-decay.d.ts.map +1 -0
  94. package/dist/memory/memory-decay.js +79 -0
  95. package/dist/memory/memory-decay.js.map +1 -0
  96. package/dist/memory/memory-quality.d.ts +37 -0
  97. package/dist/memory/memory-quality.d.ts.map +1 -0
  98. package/dist/memory/memory-quality.js +203 -0
  99. package/dist/memory/memory-quality.js.map +1 -0
  100. package/dist/memory/memory-ranker.d.ts +14 -0
  101. package/dist/memory/memory-ranker.d.ts.map +1 -0
  102. package/dist/memory/memory-ranker.js +68 -0
  103. package/dist/memory/memory-ranker.js.map +1 -0
  104. package/dist/memory/meta-memory.d.ts +11 -0
  105. package/dist/memory/meta-memory.d.ts.map +1 -0
  106. package/dist/memory/meta-memory.js +141 -0
  107. package/dist/memory/meta-memory.js.map +1 -0
  108. package/dist/memory/session-tracker.d.ts +39 -0
  109. package/dist/memory/session-tracker.d.ts.map +1 -0
  110. package/dist/memory/session-tracker.js +127 -0
  111. package/dist/memory/session-tracker.js.map +1 -0
  112. package/dist/memory/temporal-engine.d.ts +25 -0
  113. package/dist/memory/temporal-engine.d.ts.map +1 -0
  114. package/dist/memory/temporal-engine.js +106 -0
  115. package/dist/memory/temporal-engine.js.map +1 -0
  116. package/dist/retrieval/hybrid-retriever.d.ts +23 -0
  117. package/dist/retrieval/hybrid-retriever.d.ts.map +1 -0
  118. package/dist/retrieval/hybrid-retriever.js +120 -0
  119. package/dist/retrieval/hybrid-retriever.js.map +1 -0
  120. package/dist/scanners/architecture-graph.d.ts +30 -0
  121. package/dist/scanners/architecture-graph.d.ts.map +1 -0
  122. package/dist/scanners/architecture-graph.js +315 -0
  123. package/dist/scanners/architecture-graph.js.map +1 -0
  124. package/dist/scanners/code-verifier.d.ts +70 -0
  125. package/dist/scanners/code-verifier.d.ts.map +1 -0
  126. package/dist/scanners/code-verifier.js +374 -0
  127. package/dist/scanners/code-verifier.js.map +1 -0
  128. package/dist/scanners/context-builder.d.ts +19 -0
  129. package/dist/scanners/context-builder.d.ts.map +1 -0
  130. package/dist/scanners/context-builder.js +102 -0
  131. package/dist/scanners/context-builder.js.map +1 -0
  132. package/dist/scanners/export-map.d.ts +22 -0
  133. package/dist/scanners/export-map.d.ts.map +1 -0
  134. package/dist/scanners/export-map.js +249 -0
  135. package/dist/scanners/export-map.js.map +1 -0
  136. package/dist/scanners/file-verifier.d.ts +22 -0
  137. package/dist/scanners/file-verifier.d.ts.map +1 -0
  138. package/dist/scanners/file-verifier.js +140 -0
  139. package/dist/scanners/file-verifier.js.map +1 -0
  140. package/dist/scanners/project-scanner.d.ts +31 -0
  141. package/dist/scanners/project-scanner.d.ts.map +1 -0
  142. package/dist/scanners/project-scanner.js +398 -0
  143. package/dist/scanners/project-scanner.js.map +1 -0
  144. package/dist/security/encryption.d.ts +15 -0
  145. package/dist/security/encryption.d.ts.map +1 -0
  146. package/dist/security/encryption.js +116 -0
  147. package/dist/security/encryption.js.map +1 -0
  148. package/dist/security/feature-gate.d.ts +30 -0
  149. package/dist/security/feature-gate.d.ts.map +1 -0
  150. package/dist/security/feature-gate.js +91 -0
  151. package/dist/security/feature-gate.js.map +1 -0
  152. package/dist/security/license.d.ts +24 -0
  153. package/dist/security/license.d.ts.map +1 -0
  154. package/dist/security/license.js +168 -0
  155. package/dist/security/license.js.map +1 -0
  156. package/dist/security/rate-limiter.d.ts +20 -0
  157. package/dist/security/rate-limiter.d.ts.map +1 -0
  158. package/dist/security/rate-limiter.js +60 -0
  159. package/dist/security/rate-limiter.js.map +1 -0
  160. package/dist/server/dashboard.d.ts +3 -0
  161. package/dist/server/dashboard.d.ts.map +1 -0
  162. package/dist/server/dashboard.js +258 -0
  163. package/dist/server/dashboard.js.map +1 -0
  164. package/dist/server/mcp-handler.d.ts +12 -0
  165. package/dist/server/mcp-handler.d.ts.map +1 -0
  166. package/dist/server/mcp-handler.js +1392 -0
  167. package/dist/server/mcp-handler.js.map +1 -0
  168. package/dist/strategies/embedders/local-minilm.d.ts +35 -0
  169. package/dist/strategies/embedders/local-minilm.d.ts.map +1 -0
  170. package/dist/strategies/embedders/local-minilm.js +176 -0
  171. package/dist/strategies/embedders/local-minilm.js.map +1 -0
  172. package/dist/types.d.ts +207 -0
  173. package/dist/types.d.ts.map +1 -0
  174. package/dist/types.js +83 -0
  175. package/dist/types.js.map +1 -0
  176. package/package.json +87 -0
@@ -0,0 +1,118 @@
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.startEmbeddingWorker = startEmbeddingWorker;
37
+ exports.embedText = embedText;
38
+ exports.isWorkerReady = isWorkerReady;
39
+ exports.terminateWorker = terminateWorker;
40
+ /**
41
+ * Embedding Manager — Worker thread lifecycle for MiniLM embeddings.
42
+ * Extracted from standalone.ts L591-643.
43
+ */
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const worker_threads_1 = require("worker_threads");
47
+ const config_1 = require("../config/config");
48
+ let embeddingWorker = null;
49
+ let workerReady = false;
50
+ const pendingEmbeddings = new Map();
51
+ function startEmbeddingWorker() {
52
+ try {
53
+ // Worker compiles to dist/embedding-worker.js, manager is in dist/memory/
54
+ const workerPath = path.join(__dirname, '..', 'embedding-worker.js');
55
+ if (!fs.existsSync(workerPath)) {
56
+ console.log(' [cortex-mcp] Embedding worker not found, running FTS-only mode');
57
+ return;
58
+ }
59
+ embeddingWorker = new worker_threads_1.Worker(workerPath);
60
+ embeddingWorker.on('message', (msg) => {
61
+ if (msg.type === 'ready') {
62
+ workerReady = true;
63
+ console.log(' [cortex-mcp] Embedding model loaded (worker thread)');
64
+ }
65
+ else if (msg.type === 'result') {
66
+ const pending = pendingEmbeddings.get(msg.id);
67
+ if (pending) {
68
+ pending.resolve(msg.vector);
69
+ pendingEmbeddings.delete(msg.id);
70
+ }
71
+ }
72
+ else if (msg.type === 'error') {
73
+ const pending = pendingEmbeddings.get(msg.id);
74
+ if (pending) {
75
+ pending.reject(new Error(msg.message));
76
+ pendingEmbeddings.delete(msg.id);
77
+ }
78
+ }
79
+ });
80
+ embeddingWorker.on('error', (err) => {
81
+ console.error(' [cortex-mcp] Embedding worker error:', err.message);
82
+ workerReady = false;
83
+ });
84
+ console.log(' [cortex-mcp] Loading embedding model in background...');
85
+ }
86
+ catch (err) {
87
+ console.log(' [cortex-mcp] Could not start embedding worker:', err.message);
88
+ }
89
+ }
90
+ function embedText(text) {
91
+ return new Promise((resolve, reject) => {
92
+ if (!embeddingWorker || !workerReady) {
93
+ reject(new Error('Worker not ready'));
94
+ return;
95
+ }
96
+ const id = `embed_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
97
+ const timeout = setTimeout(() => {
98
+ pendingEmbeddings.delete(id);
99
+ reject(new Error('Embedding timeout'));
100
+ }, config_1.CONFIG.EMBEDDING_TIMEOUT);
101
+ pendingEmbeddings.set(id, {
102
+ resolve: (v) => { clearTimeout(timeout); resolve(v); },
103
+ reject: (e) => { clearTimeout(timeout); reject(e); },
104
+ });
105
+ embeddingWorker.postMessage({ type: 'embed', id, text });
106
+ });
107
+ }
108
+ function isWorkerReady() {
109
+ return workerReady;
110
+ }
111
+ function terminateWorker() {
112
+ if (embeddingWorker) {
113
+ embeddingWorker.terminate();
114
+ embeddingWorker = null;
115
+ workerReady = false;
116
+ }
117
+ }
118
+ //# sourceMappingURL=embedding-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { MemoryStore } from '../db/memory-store';
2
+ export interface ExportedMemory {
3
+ id: string;
4
+ type: string;
5
+ intent: string;
6
+ action: string;
7
+ reason: string | null;
8
+ tags: string[];
9
+ relatedFiles: string[];
10
+ confidence: number;
11
+ importance: number;
12
+ accessCount: number;
13
+ createdAt: number;
14
+ timestamp: string;
15
+ }
16
+ export interface ExportBundle {
17
+ version: 1;
18
+ exportedAt: string;
19
+ memoryCount: number;
20
+ memories: ExportedMemory[];
21
+ }
22
+ /**
23
+ * Export all active memories to a JSON bundle
24
+ */
25
+ export declare function exportMemories(memoryStore: MemoryStore): ExportBundle;
26
+ /**
27
+ * Export memories to a file
28
+ */
29
+ export declare function exportToFile(memoryStore: MemoryStore, filePath: string): {
30
+ count: number;
31
+ path: string;
32
+ };
33
+ /**
34
+ * Import memories from a JSON bundle, skipping duplicates
35
+ */
36
+ export declare function importMemories(memoryStore: MemoryStore, bundle: ExportBundle): {
37
+ imported: number;
38
+ skipped: number;
39
+ errors: number;
40
+ };
41
+ /**
42
+ * Import memories from a file
43
+ */
44
+ export declare function importFromFile(memoryStore: MemoryStore, filePath: string): {
45
+ imported: number;
46
+ skipped: number;
47
+ errors: number;
48
+ };
49
+ //# sourceMappingURL=export-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,CAwBrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKxG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,YAAY,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqCvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,GACjB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAUvD"}
@@ -0,0 +1,131 @@
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.exportMemories = exportMemories;
37
+ exports.exportToFile = exportToFile;
38
+ exports.importMemories = importMemories;
39
+ exports.importFromFile = importFromFile;
40
+ /**
41
+ * Memory Export/Import — Backup, share, and transfer memories.
42
+ *
43
+ * Export: Writes all active memories to a JSON file
44
+ * Import: Reads a JSON file and merges memories (dedup-aware)
45
+ */
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ /**
49
+ * Export all active memories to a JSON bundle
50
+ */
51
+ function exportMemories(memoryStore) {
52
+ const active = memoryStore.getActive(5000);
53
+ const memories = active.map(m => ({
54
+ id: m.id,
55
+ type: m.type,
56
+ intent: m.intent,
57
+ action: m.action,
58
+ reason: m.reason || null,
59
+ tags: m.tags || [],
60
+ relatedFiles: m.relatedFiles || [],
61
+ confidence: m.confidence,
62
+ importance: m.importance,
63
+ accessCount: m.accessCount,
64
+ createdAt: m.createdAt,
65
+ timestamp: new Date(m.createdAt).toISOString(),
66
+ }));
67
+ return {
68
+ version: 1,
69
+ exportedAt: new Date().toISOString(),
70
+ memoryCount: memories.length,
71
+ memories,
72
+ };
73
+ }
74
+ /**
75
+ * Export memories to a file
76
+ */
77
+ function exportToFile(memoryStore, filePath) {
78
+ const bundle = exportMemories(memoryStore);
79
+ const resolved = path.resolve(filePath);
80
+ fs.writeFileSync(resolved, JSON.stringify(bundle, null, 2), 'utf-8');
81
+ return { count: bundle.memoryCount, path: resolved };
82
+ }
83
+ /**
84
+ * Import memories from a JSON bundle, skipping duplicates
85
+ */
86
+ function importMemories(memoryStore, bundle) {
87
+ let imported = 0;
88
+ let skipped = 0;
89
+ let errors = 0;
90
+ // Load active memories ONCE — O(n) instead of O(n²)
91
+ const active = memoryStore.getActive(5000);
92
+ const existingKeys = new Set(active.map(e => `${e.type}::${e.intent.toLowerCase().trim()}`));
93
+ for (const m of bundle.memories) {
94
+ try {
95
+ const key = `${m.type}::${m.intent.toLowerCase().trim()}`;
96
+ if (existingKeys.has(key)) {
97
+ skipped++;
98
+ continue;
99
+ }
100
+ memoryStore.add({
101
+ type: m.type,
102
+ intent: m.intent,
103
+ action: m.action,
104
+ reason: m.reason || undefined,
105
+ tags: m.tags,
106
+ relatedFiles: m.relatedFiles,
107
+ confidence: m.confidence,
108
+ importance: m.importance,
109
+ });
110
+ existingKeys.add(key); // Prevent dupes within the same import batch
111
+ imported++;
112
+ }
113
+ catch {
114
+ errors++;
115
+ }
116
+ }
117
+ return { imported, skipped, errors };
118
+ }
119
+ /**
120
+ * Import memories from a file
121
+ */
122
+ function importFromFile(memoryStore, filePath) {
123
+ const resolved = path.resolve(filePath);
124
+ const content = fs.readFileSync(resolved, 'utf-8');
125
+ const bundle = JSON.parse(content);
126
+ if (bundle.version !== 1) {
127
+ throw new Error(`Unsupported export version: ${bundle.version}`);
128
+ }
129
+ return importMemories(memoryStore, bundle);
130
+ }
131
+ //# sourceMappingURL=export-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { MemoryStore } from '../db/memory-store';
2
+ interface FileChangeReport {
3
+ newFiles: string[];
4
+ deletedFiles: string[];
5
+ modifiedFiles: string[];
6
+ totalChanges: number;
7
+ }
8
+ /** Capture recent git commits as memories */
9
+ export declare function captureGitCommits(memoryStore: MemoryStore, workspaceRoot: string, maxCommits?: number): number;
10
+ /** Detect file changes since last session */
11
+ export declare function detectFileChanges(workspaceRoot: string): FileChangeReport;
12
+ /** Format file changes for injection */
13
+ export declare function formatFileChanges(report: FileChangeReport): string;
14
+ export {};
15
+ //# sourceMappingURL=git-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-memory.d.ts","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD,UAAU,gBAAgB;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACxB;AAKD,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CA0DjH;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAkCzE;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBlE"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.captureGitCommits = captureGitCommits;
4
+ exports.detectFileChanges = detectFileChanges;
5
+ exports.formatFileChanges = formatFileChanges;
6
+ const types_1 = require("../types");
7
+ // Track the last processed commit hash to avoid duplicates
8
+ let lastProcessedCommit = null;
9
+ /** Capture recent git commits as memories */
10
+ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
11
+ if (!workspaceRoot)
12
+ return 0;
13
+ try {
14
+ const { execSync } = require('child_process');
15
+ // Get recent commits with file changes
16
+ const gitLog = execSync(`git log --oneline --name-only -${maxCommits} --no-merges 2>nul`, { cwd: workspaceRoot, encoding: 'utf-8', timeout: 5000 }).trim();
17
+ if (!gitLog)
18
+ return 0;
19
+ const commits = parseGitLog(gitLog);
20
+ let stored = 0;
21
+ for (const commit of commits) {
22
+ // Skip if already processed
23
+ if (commit.hash === lastProcessedCommit)
24
+ break;
25
+ // Classify commit type based on message
26
+ const type = classifyCommit(commit.message);
27
+ // Check for duplicate — skip if already stored
28
+ const existing = memoryStore.getActive(200).find(m => m.tags?.includes(`commit:${commit.hash}`));
29
+ if (existing)
30
+ continue;
31
+ memoryStore.add({
32
+ type,
33
+ intent: `Git commit: ${commit.message}`,
34
+ action: commit.filesChanged.length > 0
35
+ ? `Changed: ${commit.filesChanged.slice(0, 5).join(', ')}`
36
+ : commit.message,
37
+ reason: 'Auto-captured from git history',
38
+ tags: ['git-commit', `commit:${commit.hash}`, ...extractTopicTags(commit.message)],
39
+ relatedFiles: commit.filesChanged.slice(0, 10),
40
+ confidence: 0.8,
41
+ importance: type === types_1.MemoryType.BUG_FIX ? 0.85 : 0.6,
42
+ timestamp: Date.now(),
43
+ isActive: true,
44
+ accessCount: 0,
45
+ createdAt: Date.now(),
46
+ id: '',
47
+ });
48
+ stored++;
49
+ }
50
+ if (commits.length > 0) {
51
+ lastProcessedCommit = commits[0].hash;
52
+ }
53
+ return stored;
54
+ }
55
+ catch {
56
+ return 0;
57
+ }
58
+ }
59
+ /** Detect file changes since last session */
60
+ function detectFileChanges(workspaceRoot) {
61
+ const report = { newFiles: [], deletedFiles: [], modifiedFiles: [], totalChanges: 0 };
62
+ if (!workspaceRoot)
63
+ return report;
64
+ try {
65
+ const { execSync } = require('child_process');
66
+ // Get uncommitted changes (working tree vs HEAD)
67
+ const status = execSync('git status --porcelain 2>nul', {
68
+ cwd: workspaceRoot,
69
+ encoding: 'utf-8',
70
+ timeout: 5000,
71
+ }).trim();
72
+ if (!status)
73
+ return report;
74
+ for (const line of status.split('\n')) {
75
+ const code = line.slice(0, 2).trim();
76
+ const file = line.slice(3).trim();
77
+ if (!file)
78
+ continue;
79
+ switch (code) {
80
+ case '??':
81
+ case 'A':
82
+ report.newFiles.push(file);
83
+ break;
84
+ case 'D':
85
+ report.deletedFiles.push(file);
86
+ break;
87
+ case 'M':
88
+ case 'MM':
89
+ report.modifiedFiles.push(file);
90
+ break;
91
+ default:
92
+ report.modifiedFiles.push(file);
93
+ break;
94
+ }
95
+ }
96
+ report.totalChanges = report.newFiles.length + report.deletedFiles.length + report.modifiedFiles.length;
97
+ return report;
98
+ }
99
+ catch {
100
+ return report;
101
+ }
102
+ }
103
+ /** Format file changes for injection */
104
+ function formatFileChanges(report) {
105
+ if (report.totalChanges === 0)
106
+ return '';
107
+ const lines = [`## 📝 Uncommitted Changes (${report.totalChanges} files)`];
108
+ if (report.newFiles.length > 0) {
109
+ lines.push(`**New:** ${report.newFiles.slice(0, 5).join(', ')}`);
110
+ }
111
+ if (report.deletedFiles.length > 0) {
112
+ lines.push(`**Deleted:** ${report.deletedFiles.slice(0, 5).join(', ')}`);
113
+ }
114
+ if (report.modifiedFiles.length > 0) {
115
+ lines.push(`**Modified:** ${report.modifiedFiles.slice(0, 5).join(', ')}`);
116
+ }
117
+ return lines.join('\n');
118
+ }
119
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
120
+ function parseGitLog(log) {
121
+ const commits = [];
122
+ const lines = log.split('\n');
123
+ let current = null;
124
+ for (const line of lines) {
125
+ // Commit line: "abc1234 Fix auth bug"
126
+ const commitMatch = line.match(/^([a-f0-9]{7,12})\s+(.+)$/);
127
+ if (commitMatch) {
128
+ if (current)
129
+ commits.push(current);
130
+ current = {
131
+ hash: commitMatch[1],
132
+ message: commitMatch[2],
133
+ author: '',
134
+ date: '',
135
+ filesChanged: [],
136
+ };
137
+ }
138
+ else if (current && line.trim()) {
139
+ // File change line
140
+ current.filesChanged.push(line.trim());
141
+ }
142
+ }
143
+ if (current)
144
+ commits.push(current);
145
+ return commits;
146
+ }
147
+ function classifyCommit(message) {
148
+ const lower = message.toLowerCase();
149
+ if (/\b(fix|bug|patch|hotfix|resolve|crash|error|issue)\b/.test(lower))
150
+ return types_1.MemoryType.BUG_FIX;
151
+ if (/\b(refactor|clean|lint|format|style|rename)\b/.test(lower))
152
+ return types_1.MemoryType.CONVENTION;
153
+ if (/\b(add|feat|implement|create|support|enable)\b/.test(lower))
154
+ return types_1.MemoryType.DECISION;
155
+ if (/\b(doc|readme|comment|note)\b/.test(lower))
156
+ return types_1.MemoryType.INSIGHT;
157
+ return types_1.MemoryType.DECISION;
158
+ }
159
+ function extractTopicTags(message) {
160
+ const tags = [];
161
+ const lower = message.toLowerCase();
162
+ const patterns = [
163
+ [/\b(auth|login|session|token|jwt)\b/, 'auth'],
164
+ [/\b(database|sql|query|migration)\b/, 'database'],
165
+ [/\b(api|endpoint|route)\b/, 'api'],
166
+ [/\b(ui|component|style|css)\b/, 'ui'],
167
+ [/\b(test|spec|coverage)\b/, 'testing'],
168
+ [/\b(deploy|ci|docker)\b/, 'devops'],
169
+ [/\b(security|permission)\b/, 'security'],
170
+ [/\b(perf|cache|optimize)\b/, 'performance'],
171
+ ];
172
+ for (const [pattern, tag] of patterns) {
173
+ if (pattern.test(lower))
174
+ tags.push(tag);
175
+ }
176
+ return tags;
177
+ }
178
+ //# sourceMappingURL=git-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Learning Rate Adjuster — Tracks correction frequency and auto-boosts importance.
3
+ *
4
+ * If the AI gets corrected 3 times about "auth", auth corrections become
5
+ * ultra-priority and surface at the very top of every recall.
6
+ *
7
+ * Like how your brain learns faster from repeated mistakes:
8
+ * burn your hand once = careful. Burn it 3 times = NEVER touch stove.
9
+ */
10
+ import { MemoryStore } from '../db/memory-store';
11
+ interface CorrectionFrequency {
12
+ topic: string;
13
+ count: number;
14
+ lastCorrected: number;
15
+ memoryIds: string[];
16
+ }
17
+ /** Analyze correction frequency across all memories */
18
+ export declare function analyzeCorrectionFrequency(memoryStore: MemoryStore): CorrectionFrequency[];
19
+ /** Auto-boost importance of frequently corrected topics */
20
+ export declare function boostFrequentCorrections(memoryStore: MemoryStore): number;
21
+ /** Format hot corrections for injection */
22
+ export declare function formatHotCorrections(memoryStore: MemoryStore): string;
23
+ export {};
24
+ //# sourceMappingURL=learning-rate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-rate.d.ts","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,UAAU,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,uDAAuD;AACvD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB,EAAE,CAiC1F;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CA2BzE;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAYrE"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeCorrectionFrequency = analyzeCorrectionFrequency;
4
+ exports.boostFrequentCorrections = boostFrequentCorrections;
5
+ exports.formatHotCorrections = formatHotCorrections;
6
+ const types_1 = require("../types");
7
+ /** Analyze correction frequency across all memories */
8
+ function analyzeCorrectionFrequency(memoryStore) {
9
+ const corrections = memoryStore.getByType(types_1.MemoryType.CORRECTION, 200);
10
+ if (corrections.length < 2)
11
+ return [];
12
+ // Extract topic keywords from each correction
13
+ const topicMap = new Map();
14
+ for (const c of corrections) {
15
+ const words = extractTopicWords(c.intent);
16
+ for (const word of words) {
17
+ const existing = topicMap.get(word);
18
+ if (existing) {
19
+ existing.count++;
20
+ existing.lastCorrected = Math.max(existing.lastCorrected, c.timestamp);
21
+ if (!existing.memoryIds.includes(c.id)) {
22
+ existing.memoryIds.push(c.id);
23
+ }
24
+ }
25
+ else {
26
+ topicMap.set(word, {
27
+ topic: word,
28
+ count: 1,
29
+ lastCorrected: c.timestamp,
30
+ memoryIds: [c.id],
31
+ });
32
+ }
33
+ }
34
+ }
35
+ // Only return topics with 2+ corrections
36
+ return [...topicMap.values()]
37
+ .filter(t => t.count >= 2)
38
+ .sort((a, b) => b.count - a.count)
39
+ .slice(0, 10);
40
+ }
41
+ /** Auto-boost importance of frequently corrected topics */
42
+ function boostFrequentCorrections(memoryStore) {
43
+ const freqs = analyzeCorrectionFrequency(memoryStore);
44
+ let boosted = 0;
45
+ for (const freq of freqs) {
46
+ if (freq.count >= 3) {
47
+ // 3+ corrections = ultra-priority
48
+ for (const id of freq.memoryIds) {
49
+ const m = memoryStore.get(id);
50
+ if (m && m.importance < 0.95) {
51
+ memoryStore.update(id, { importance: 0.95 });
52
+ boosted++;
53
+ }
54
+ }
55
+ }
56
+ else if (freq.count >= 2) {
57
+ // 2 corrections = high priority
58
+ for (const id of freq.memoryIds) {
59
+ const m = memoryStore.get(id);
60
+ if (m && m.importance < 0.85) {
61
+ memoryStore.update(id, { importance: 0.85 });
62
+ boosted++;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return boosted;
68
+ }
69
+ /** Format hot corrections for injection */
70
+ function formatHotCorrections(memoryStore) {
71
+ const freqs = analyzeCorrectionFrequency(memoryStore);
72
+ const hot = freqs.filter(f => f.count >= 2);
73
+ if (hot.length === 0)
74
+ return '';
75
+ const lines = ['## Hot Corrections (repeatedly corrected -- CRITICAL)'];
76
+ for (const h of hot.slice(0, 5)) {
77
+ const emoji = h.count >= 3 ? '[CRITICAL]' : '[WARN]';
78
+ lines.push(`${emoji} "${h.topic}" — corrected ${h.count}x`);
79
+ }
80
+ return lines.join('\n');
81
+ }
82
+ /** Extract meaningful topic words from correction text */
83
+ function extractTopicWords(text) {
84
+ const stopWords = new Set([
85
+ 'the', 'a', 'an', 'is', 'was', 'are', 'were', 'to', 'of', 'in', 'for',
86
+ 'on', 'with', 'at', 'by', 'from', 'it', 'this', 'that', 'and', 'or',
87
+ 'but', 'not', 'do', 'does', 'did', 'don', 'dont', 'use', 'using',
88
+ 'should', 'must', 'never', 'always', 'avoid', 'instead',
89
+ ]);
90
+ return text.toLowerCase()
91
+ .replace(/[^a-z0-9\s]/g, ' ')
92
+ .split(/\s+/)
93
+ .filter(w => w.length > 3 && !stopWords.has(w));
94
+ }
95
+ //# sourceMappingURL=learning-rate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-rate.js","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":"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"}