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,19 @@
1
+ /**
2
+ * Anticipation Engine — Proactive memory surfacing.
3
+ *
4
+ * Instead of waiting to be asked, this module predicts what memories
5
+ * are relevant based on the current file, directory, and recent activity.
6
+ *
7
+ * Like how walking into your kitchen makes you remember you need milk.
8
+ */
9
+ import { MemoryStore } from '../db/memory-store';
10
+ import { ScoredMemory } from '../types';
11
+ export interface AnticipationResult {
12
+ fileMemories: ScoredMemory[];
13
+ directoryMemories: ScoredMemory[];
14
+ relatedTypeMemories: ScoredMemory[];
15
+ }
16
+ export declare function anticipate(memoryStore: MemoryStore, currentFile?: string): AnticipationResult;
17
+ /** Format anticipation results for injection */
18
+ export declare function formatAnticipation(result: AnticipationResult): string;
19
+ //# sourceMappingURL=anticipation-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anticipation-engine.d.ts","sourceRoot":"","sources":["../../src/memory/anticipation-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IAC/B,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,mBAAmB,EAAE,YAAY,EAAE,CAAC;CACvC;AAED,wBAAgB,UAAU,CACtB,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,MAAM,GACrB,kBAAkB,CA0DpB;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiBrE"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.anticipate = anticipate;
4
+ exports.formatAnticipation = formatAnticipation;
5
+ const types_1 = require("../types");
6
+ function anticipate(memoryStore, currentFile) {
7
+ const result = {
8
+ fileMemories: [],
9
+ directoryMemories: [],
10
+ relatedTypeMemories: [],
11
+ };
12
+ if (!currentFile)
13
+ return result;
14
+ // 1. Direct file memories — exact file match
15
+ const fileMemories = memoryStore.getByFile(currentFile, 10);
16
+ result.fileMemories = fileMemories.map((m, i) => ({
17
+ memory: m,
18
+ score: 1.0 - (i * 0.05),
19
+ matchMethod: 'anticipation:file',
20
+ }));
21
+ // 2. Directory memories — same folder = likely related
22
+ const dir = currentFile.replace(/[\\/][^\\/]+$/, '');
23
+ if (dir && dir !== currentFile) {
24
+ const allActive = memoryStore.getActive(200);
25
+ const dirMemories = allActive.filter(m => m.relatedFiles?.some(f => f.startsWith(dir) || f.includes(dir)));
26
+ result.directoryMemories = dirMemories.slice(0, 5).map((m, i) => ({
27
+ memory: m,
28
+ score: 0.7 - (i * 0.05),
29
+ matchMethod: 'anticipation:directory',
30
+ }));
31
+ }
32
+ // 3. File type memories — .ts file? surface TS-related conventions
33
+ const ext = currentFile.split('.').pop()?.toLowerCase();
34
+ if (ext) {
35
+ const typeKeywords = {
36
+ ts: ['typescript', 'type', 'interface', 'enum'],
37
+ tsx: ['react', 'component', 'jsx', 'hook', 'state'],
38
+ css: ['style', 'css', 'theme', 'color', 'font'],
39
+ py: ['python', 'pip', 'def', 'class'],
40
+ js: ['javascript', 'node', 'require', 'module'],
41
+ sql: ['database', 'query', 'table', 'migration'],
42
+ json: ['config', 'package', 'settings'],
43
+ };
44
+ const keywords = typeKeywords[ext];
45
+ if (keywords) {
46
+ const conventions = memoryStore.getByType(types_1.MemoryType.CONVENTION, 50);
47
+ const matched = conventions.filter(c => keywords.some(k => c.intent.toLowerCase().includes(k)));
48
+ result.relatedTypeMemories = matched.slice(0, 3).map((m, i) => ({
49
+ memory: m,
50
+ score: 0.5 - (i * 0.05),
51
+ matchMethod: 'anticipation:filetype',
52
+ }));
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ /** Format anticipation results for injection */
58
+ function formatAnticipation(result) {
59
+ const all = [
60
+ ...result.fileMemories,
61
+ ...result.directoryMemories,
62
+ ...result.relatedTypeMemories,
63
+ ];
64
+ if (all.length === 0)
65
+ return '';
66
+ const lines = ['## 🔮 Anticipated Context (for current file)'];
67
+ const seen = new Set();
68
+ for (const m of all.slice(0, 8)) {
69
+ if (seen.has(m.memory.id))
70
+ continue;
71
+ seen.add(m.memory.id);
72
+ lines.push(`- [${m.memory.type}] ${m.memory.intent}${m.memory.reason ? ` — ${m.memory.reason}` : ''}`);
73
+ }
74
+ return lines.join('\n');
75
+ }
76
+ //# sourceMappingURL=anticipation-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anticipation-engine.js","sourceRoot":"","sources":["../../src/memory/anticipation-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Attention Ranker — Re-ranks memories based on what you're doing RIGHT NOW.
3
+ *
4
+ * Debugging? Bug fixes and corrections rise to the top.
5
+ * Coding? Conventions and decisions become priority.
6
+ * Reviewing? Insights and architecture matter most.
7
+ *
8
+ * This is like how your brain filters: at a restaurant, food memories are
9
+ * strong; at a library, book memories are strong. Same data, different priority.
10
+ */
11
+ import { ScoredMemory } from '../types';
12
+ export type ActionContext = 'debugging' | 'coding' | 'reviewing' | 'chatting' | 'exploring' | 'unknown';
13
+ /** Detect action context from topic/file keywords */
14
+ export declare function detectActionContext(topic?: string, currentFile?: string): ActionContext;
15
+ /** Re-rank memories based on current action context */
16
+ export declare function rankByAttention(memories: ScoredMemory[], context: ActionContext): ScoredMemory[];
17
+ /** Format the context indicator for injection */
18
+ export declare function formatAttentionContext(context: ActionContext): string;
19
+ //# sourceMappingURL=attention-ranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-ranker.d.ts","sourceRoot":"","sources":["../../src/memory/attention-ranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AA4CxG,qDAAqD;AACrD,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,CAiBvF;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,aAAa,GACvB,YAAY,EAAE,CAShB;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAUrE"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectActionContext = detectActionContext;
4
+ exports.rankByAttention = rankByAttention;
5
+ exports.formatAttentionContext = formatAttentionContext;
6
+ /**
7
+ * Attention Ranker — Re-ranks memories based on what you're doing RIGHT NOW.
8
+ *
9
+ * Debugging? Bug fixes and corrections rise to the top.
10
+ * Coding? Conventions and decisions become priority.
11
+ * Reviewing? Insights and architecture matter most.
12
+ *
13
+ * This is like how your brain filters: at a restaurant, food memories are
14
+ * strong; at a library, book memories are strong. Same data, different priority.
15
+ */
16
+ const types_1 = require("../types");
17
+ /** Multiplier map: action → memory type → boost factor */
18
+ const ATTENTION_WEIGHTS = {
19
+ debugging: {
20
+ [types_1.MemoryType.BUG_FIX]: 2.0,
21
+ [types_1.MemoryType.CORRECTION]: 1.8,
22
+ [types_1.MemoryType.FAILED_SUGGESTION]: 1.5,
23
+ [types_1.MemoryType.INSIGHT]: 1.2,
24
+ [types_1.MemoryType.DECISION]: 1.0,
25
+ [types_1.MemoryType.CONVENTION]: 0.8,
26
+ },
27
+ coding: {
28
+ [types_1.MemoryType.CONVENTION]: 2.0,
29
+ [types_1.MemoryType.DECISION]: 1.8,
30
+ [types_1.MemoryType.PROVEN_PATTERN]: 1.5,
31
+ [types_1.MemoryType.CORRECTION]: 1.3,
32
+ [types_1.MemoryType.BUG_FIX]: 1.0,
33
+ [types_1.MemoryType.INSIGHT]: 0.9,
34
+ },
35
+ reviewing: {
36
+ [types_1.MemoryType.INSIGHT]: 2.0,
37
+ [types_1.MemoryType.DECISION]: 1.5,
38
+ [types_1.MemoryType.CONVENTION]: 1.3,
39
+ [types_1.MemoryType.CORRECTION]: 1.2,
40
+ [types_1.MemoryType.BUG_FIX]: 1.0,
41
+ },
42
+ chatting: {
43
+ // Balanced for general conversation
44
+ [types_1.MemoryType.DECISION]: 1.3,
45
+ [types_1.MemoryType.CORRECTION]: 1.3,
46
+ [types_1.MemoryType.CONVENTION]: 1.2,
47
+ [types_1.MemoryType.BUG_FIX]: 1.2,
48
+ [types_1.MemoryType.INSIGHT]: 1.1,
49
+ },
50
+ exploring: {
51
+ [types_1.MemoryType.INSIGHT]: 1.8,
52
+ [types_1.MemoryType.DEPENDENCY]: 1.5,
53
+ [types_1.MemoryType.DECISION]: 1.3,
54
+ [types_1.MemoryType.CONVENTION]: 1.0,
55
+ },
56
+ unknown: {}, // No boost — use raw scores
57
+ };
58
+ /** Detect action context from topic/file keywords */
59
+ function detectActionContext(topic, currentFile) {
60
+ const text = `${topic || ''} ${currentFile || ''}`.toLowerCase();
61
+ if (/\b(bug|fix|error|crash|fail|debug|issue|broken|not working)\b/.test(text)) {
62
+ return 'debugging';
63
+ }
64
+ if (/\b(implement|build|add|create|feature|code|function|class)\b/.test(text)) {
65
+ return 'coding';
66
+ }
67
+ if (/\b(review|check|audit|examine|look at|analyze)\b/.test(text)) {
68
+ return 'reviewing';
69
+ }
70
+ if (/\b(explore|understand|how|what|why|explain|learn)\b/.test(text)) {
71
+ return 'exploring';
72
+ }
73
+ return 'chatting'; // default
74
+ }
75
+ /** Re-rank memories based on current action context */
76
+ function rankByAttention(memories, context) {
77
+ const weights = ATTENTION_WEIGHTS[context];
78
+ return memories
79
+ .map(m => ({
80
+ ...m,
81
+ score: m.score * (weights[m.memory.type] || 1.0),
82
+ }))
83
+ .sort((a, b) => b.score - a.score);
84
+ }
85
+ /** Format the context indicator for injection */
86
+ function formatAttentionContext(context) {
87
+ const labels = {
88
+ debugging: '[DEBUG] Debug mode -- bug fixes and corrections prioritized',
89
+ coding: '[CODE] Coding mode -- conventions and decisions prioritized',
90
+ reviewing: '[REVIEW] Review mode -- insights and architecture prioritized',
91
+ chatting: '[CHAT] Chat mode -- balanced context',
92
+ exploring: '[EXPLORE] Explore mode -- insights and stack info prioritized',
93
+ unknown: '',
94
+ };
95
+ return labels[context];
96
+ }
97
+ //# sourceMappingURL=attention-ranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-ranker.js","sourceRoot":"","sources":["../../src/memory/attention-ranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Auto-Learner — Extracts memory-worthy patterns from text automatically.
3
+ *
4
+ * How it works:
5
+ * 1. The AI passes its response text to `auto_learn` tool after every reply
6
+ * 2. This module scans for decision/correction/convention/bug-fix patterns
7
+ * 3. Matching patterns are stored automatically — zero manual effort
8
+ *
9
+ * Pattern detection uses keyword signals + sentence structure analysis.
10
+ * No LLM needed — pure regex + heuristics, fast and reliable.
11
+ */
12
+ export type MemoryType = 'DECISION' | 'CORRECTION' | 'CONVENTION' | 'BUG_FIX' | 'INSIGHT' | 'FAILED_ATTEMPT' | 'BUSINESS_RULE' | 'GOTCHA' | 'CURRENT_TASK';
13
+ export interface ExtractedMemory {
14
+ type: MemoryType;
15
+ content: string;
16
+ confidence: number;
17
+ reason: string;
18
+ }
19
+ export declare function extractMemories(text: string): ExtractedMemory[];
20
+ //# sourceMappingURL=auto-learner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-learner.d.ts","sourceRoot":"","sources":["../../src/memory/auto-learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GACnF,gBAAgB,GAAG,eAAe,GAAG,QAAQ,GAAG,cAAc,CAAC;AAErE,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAiJD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CA8C/D"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-Learner — Extracts memory-worthy patterns from text automatically.
4
+ *
5
+ * How it works:
6
+ * 1. The AI passes its response text to `auto_learn` tool after every reply
7
+ * 2. This module scans for decision/correction/convention/bug-fix patterns
8
+ * 3. Matching patterns are stored automatically — zero manual effort
9
+ *
10
+ * Pattern detection uses keyword signals + sentence structure analysis.
11
+ * No LLM needed — pure regex + heuristics, fast and reliable.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.extractMemories = extractMemories;
15
+ // ─── Signal Patterns ──────────────────────────────────────────────────────────
16
+ const PATTERNS = [
17
+ // CORRECTION — "don't use X", "never do Y", "avoid Z", "wrong approach"
18
+ {
19
+ type: 'CORRECTION',
20
+ signals: [
21
+ /\b(don'?t|do not|never|avoid|stop using|instead of|rather than)\b.{5,80}/gi,
22
+ /\b(wrong|incorrect|mistake|bug|error|issue|problem)\b.{5,60}(fix|correct|should|use|replace)/gi,
23
+ /\b(fixed|corrected|resolved)\b.{5,60}/gi,
24
+ ],
25
+ confidence: 0.75,
26
+ reason: 'Auto-detected correction pattern',
27
+ },
28
+ // DECISION — "we decided", "we'll use", "going with", "chosen"
29
+ {
30
+ type: 'DECISION',
31
+ signals: [
32
+ /\b(we('ll| will| are going to| decided to)?)\s+(use|adopt|switch|go with|choose|pick|implement)\b.{5,80}/gi,
33
+ /\b(decided|chosen|selected|picked|going with|sticking with)\b.{5,80}/gi,
34
+ /\b(use|using)\s+\w+\s+(instead of|over|rather than)\s+\w+/gi,
35
+ ],
36
+ confidence: 0.70,
37
+ reason: 'Auto-detected decision pattern',
38
+ },
39
+ // CONVENTION — "always", "should always", "must", "standard", "convention"
40
+ {
41
+ type: 'CONVENTION',
42
+ signals: [
43
+ /\b(always|must|should always|make sure to|remember to|convention|standard|rule)\b.{5,80}/gi,
44
+ /\b(format|naming|style|pattern|structure)\b.{5,60}(should|must|always|use)/gi,
45
+ /\b(use\s+\w+\s+for\s+all|every\s+\w+\s+should|all\s+\w+\s+must)\b.{5,60}/gi,
46
+ ],
47
+ confidence: 0.65,
48
+ reason: 'Auto-detected convention pattern',
49
+ },
50
+ // BUG_FIX — "the bug was", "root cause", "the fix is", "was causing"
51
+ {
52
+ type: 'BUG_FIX',
53
+ signals: [
54
+ /\b(bug|the (issue|problem|cause) was|root cause|was causing|the fix)\b.{5,80}/gi,
55
+ /\b(fixed by|resolved by|the solution (is|was))\b.{5,80}/gi,
56
+ /\b(crash|exception|error|fail(ed|ure)?)\b.{5,60}(because|due to|caused by|fixed)/gi,
57
+ ],
58
+ confidence: 0.80,
59
+ reason: 'Auto-detected bug fix pattern',
60
+ },
61
+ // INSIGHT — "key insight", "important to note", "worth remembering"
62
+ {
63
+ type: 'INSIGHT',
64
+ signals: [
65
+ /\b(key insight|important(ly)?|worth (noting|remembering)|note that|keep in mind)\b.{5,80}/gi,
66
+ /\b(the reason (is|why)|this (works|happens) because)\b.{5,80}/gi,
67
+ ],
68
+ confidence: 0.55,
69
+ reason: 'Auto-detected insight pattern',
70
+ },
71
+ // ─── NEW PATTERNS ─────────────────────────────────────────────────
72
+ // FAILED_ATTEMPT — "didn't work", "tried X but", "doesn't solve", "abandoned"
73
+ {
74
+ type: 'FAILED_ATTEMPT',
75
+ signals: [
76
+ /\b(didn'?t work|does(n'?t| not) work|failed|not working|broken)\b.{5,80}/gi,
77
+ /\btried\b.{3,60}\b(but|however|didn'?t|failed|abandoned|gave up)\b/gi,
78
+ /\b(abandoned|scrapped|reverted|rolled back|gave up on)\b.{5,80}/gi,
79
+ /\b(doesn'?t solve|won'?t fix|not the (right|correct) approach)\b.{5,80}/gi,
80
+ ],
81
+ confidence: 0.75,
82
+ reason: 'Auto-detected failed attempt — prevents repeating dead ends',
83
+ },
84
+ // BUSINESS_RULE — "users can", "admins have", "when X then Y", domain logic
85
+ {
86
+ type: 'BUSINESS_RULE',
87
+ signals: [
88
+ /\b(users?|admins?|editors?|viewers?|customers?|clients?|members?)\s+(can|cannot|must|should|have|are allowed|are not allowed)\b.{5,80}/gi,
89
+ /\b(role|permission|access|authorization)\b.{5,60}\b(admin|editor|viewer|owner|manager|user)\b/gi,
90
+ /\bwhen\s+.{5,40}\s+(then|must|should|always|never)\b.{5,60}/gi,
91
+ /\b(business rule|domain rule|requirement|constraint)\b.{3,80}/gi,
92
+ /\b(only\s+(admins?|owners?|managers?)\s+can)\b.{5,60}/gi,
93
+ ],
94
+ confidence: 0.70,
95
+ reason: 'Auto-detected business rule / domain logic',
96
+ },
97
+ // GOTCHA — "be careful", "watch out", "NEVER do X on Y", "dangerous"
98
+ {
99
+ type: 'GOTCHA',
100
+ signals: [
101
+ /\b(be careful|watch out|careful with|danger(ous)?|warning|caution)\b.{5,80}/gi,
102
+ /\bNEVER\b.{5,80}/g, // uppercase NEVER = strong warning
103
+ /\b(will (break|crash|delete|corrupt|destroy))\b.{5,60}/gi,
104
+ /\b(cascad(e|ing) delete|data loss|side effect|race condition)\b.{5,60}/gi,
105
+ /\b(gotcha|pitfall|trap|footgun|sharp edge)\b.{5,60}/gi,
106
+ ],
107
+ confidence: 0.80,
108
+ reason: 'Auto-detected gotcha/warning — prevents dangerous operations',
109
+ },
110
+ // CURRENT_TASK — "working on", "current priority", "this week", "next step"
111
+ {
112
+ type: 'CURRENT_TASK',
113
+ signals: [
114
+ /\b(working on|building|implementing|focusing on)\b.{5,80}/gi,
115
+ /\b(current(ly)?|right now|this (week|sprint|phase))\b.{5,60}\b(priority|focus|task|goal)\b/gi,
116
+ /\b(priority is|main (goal|task|focus) is)\b.{5,80}/gi,
117
+ /\b(next step|todo|to-do|need to (build|implement|fix|add))\b.{5,80}/gi,
118
+ ],
119
+ confidence: 0.60,
120
+ reason: 'Auto-detected current task / priority',
121
+ },
122
+ ];
123
+ // ─── Sentence Splitter ────────────────────────────────────────────────────────
124
+ function splitSentences(text) {
125
+ // Split on sentence boundaries, keeping reasonable length
126
+ return text
127
+ .replace(/\n+/g, ' ')
128
+ .split(/(?<=[.!?])\s+/)
129
+ .map(s => s.trim())
130
+ .filter(s => s.length > 20 && s.length < 300);
131
+ }
132
+ // ─── Dedup Filter ─────────────────────────────────────────────────────────────
133
+ function normalize(text) {
134
+ return text.toLowerCase().replace(/[^a-z0-9\s]/g, '').replace(/\s+/g, ' ').trim();
135
+ }
136
+ // ─── Main Extractor ───────────────────────────────────────────────────────────
137
+ function extractMemories(text) {
138
+ if (!text || text.length < 30)
139
+ return [];
140
+ const sentences = splitSentences(text);
141
+ const results = [];
142
+ const seen = new Set();
143
+ for (const sentence of sentences) {
144
+ for (const pattern of PATTERNS) {
145
+ let matched = false;
146
+ for (const signal of pattern.signals) {
147
+ signal.lastIndex = 0; // reset regex state
148
+ if (signal.test(sentence)) {
149
+ matched = true;
150
+ break;
151
+ }
152
+ }
153
+ if (!matched)
154
+ continue;
155
+ // Clean up the sentence for storage
156
+ const content = sentence
157
+ .replace(/^(so|and|but|also|note that|remember that|keep in mind that)\s+/i, '')
158
+ .replace(/\s+/g, ' ')
159
+ .trim();
160
+ if (content.length < 15)
161
+ continue;
162
+ // Dedup by normalized content
163
+ const key = `${pattern.type}:${normalize(content).slice(0, 60)}`;
164
+ if (seen.has(key))
165
+ continue;
166
+ seen.add(key);
167
+ results.push({
168
+ type: pattern.type,
169
+ content,
170
+ confidence: pattern.confidence,
171
+ reason: pattern.reason,
172
+ });
173
+ break; // One match per sentence is enough
174
+ }
175
+ }
176
+ // Return only high-confidence matches (avoid noise)
177
+ return results.filter(r => r.confidence >= 0.55);
178
+ }
179
+ //# sourceMappingURL=auto-learner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-learner.js","sourceRoot":"","sources":["../../src/memory/auto-learner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Confidence Decay + Reinforcement — Time-based memory aging.
3
+ *
4
+ * Memories that are never accessed gradually lose importance.
5
+ * Memories that are frequently accessed get stronger.
6
+ *
7
+ * Like how the brain strengthens neural pathways that are used often
8
+ * and prunes connections that are never activated.
9
+ *
10
+ * Formula: effective_importance = base_importance * decay_factor * access_boost
11
+ * - decay_factor = 1 / (1 + age_in_days * 0.02) — slow exponential decay
12
+ * - access_boost = 1 + (accessCount * 0.1) — capped at 2x
13
+ */
14
+ import { MemoryStore } from '../db/memory-store';
15
+ import { ScoredMemory } from '../types';
16
+ /** Calculate effective importance with decay and reinforcement */
17
+ export declare function effectiveImportance(baseImportance: number, timestamp: number, accessCount: number, lastAccessed?: number): number;
18
+ /** Apply decay + reinforcement scoring to search results */
19
+ export declare function applyConfidenceDecay(memories: ScoredMemory[]): ScoredMemory[];
20
+ /** Run periodic maintenance — decay old, unused memories */
21
+ export declare function runDecayMaintenance(memoryStore: MemoryStore): number;
22
+ //# sourceMappingURL=confidence-decay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-decay.d.ts","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,kEAAkE;AAClE,wBAAgB,mBAAmB,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,MAAM,CAmBR;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAc7E;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAqBpE"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.effectiveImportance = effectiveImportance;
4
+ exports.applyConfidenceDecay = applyConfidenceDecay;
5
+ exports.runDecayMaintenance = runDecayMaintenance;
6
+ const DECAY_RATE = 0.02; // 2% per day
7
+ const ACCESS_BOOST_RATE = 0.1; // 10% per access
8
+ const MAX_ACCESS_BOOST = 2.0;
9
+ const MIN_IMPORTANCE = 0.1; // Never fully forget
10
+ /** Calculate effective importance with decay and reinforcement */
11
+ function effectiveImportance(baseImportance, timestamp, accessCount, lastAccessed) {
12
+ const ageInDays = (Date.now() - timestamp) / 86400000;
13
+ // Decay: older memories lose importance (but slowly)
14
+ const decayFactor = 1 / (1 + ageInDays * DECAY_RATE);
15
+ // Reinforcement: frequently accessed memories get stronger
16
+ const accessBoost = Math.min(MAX_ACCESS_BOOST, 1 + (accessCount * ACCESS_BOOST_RATE));
17
+ // Recent access counteracts decay
18
+ let recencyBoost = 1.0;
19
+ if (lastAccessed) {
20
+ const daysSinceAccess = (Date.now() - lastAccessed) / 86400000;
21
+ if (daysSinceAccess < 1)
22
+ recencyBoost = 1.3; // accessed today
23
+ else if (daysSinceAccess < 7)
24
+ recencyBoost = 1.1; // accessed this week
25
+ }
26
+ const effective = baseImportance * decayFactor * accessBoost * recencyBoost;
27
+ return Math.max(MIN_IMPORTANCE, Math.min(1.0, effective));
28
+ }
29
+ /** Apply decay + reinforcement scoring to search results */
30
+ function applyConfidenceDecay(memories) {
31
+ return memories.map(m => {
32
+ const boost = effectiveImportance(m.memory.importance, m.memory.timestamp, m.memory.accessCount, m.memory.lastAccessed);
33
+ return {
34
+ ...m,
35
+ score: m.score * boost,
36
+ };
37
+ }).sort((a, b) => b.score - a.score);
38
+ }
39
+ /** Run periodic maintenance — decay old, unused memories */
40
+ function runDecayMaintenance(memoryStore) {
41
+ const active = memoryStore.getActive(500);
42
+ let decayed = 0;
43
+ for (const m of active) {
44
+ const current = m.importance;
45
+ const effective = effectiveImportance(current, m.timestamp, m.accessCount, m.lastAccessed);
46
+ // Only update if significant change (>5% difference)
47
+ if (Math.abs(current - effective) > 0.05) {
48
+ memoryStore.update(m.id, { importance: effective });
49
+ decayed++;
50
+ }
51
+ }
52
+ return decayed;
53
+ }
54
+ //# sourceMappingURL=confidence-decay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-decay.js","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function startEmbeddingWorker(): void;
2
+ export declare function embedText(text: string): Promise<number[]>;
3
+ export declare function isWorkerReady(): boolean;
4
+ export declare function terminateWorker(): void;
5
+ //# sourceMappingURL=embedding-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-manager.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"AAaA,wBAAgB,oBAAoB,IAAI,IAAI,CA6B3C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBzD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC"}