cortex-mcp 2.7.6 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +305 -58
  2. package/README.md +394 -224
  3. package/dist/cli/setup.js +58 -60
  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 +8 -0
  8. package/dist/db/database.d.ts.map +1 -1
  9. package/dist/db/database.js +35 -54
  10. package/dist/db/database.js.map +1 -1
  11. package/dist/db/event-log.d.ts +4 -0
  12. package/dist/db/event-log.d.ts.map +1 -1
  13. package/dist/db/event-log.js +14 -10
  14. package/dist/db/event-log.js.map +1 -1
  15. package/dist/db/memory-store.d.ts +30 -3
  16. package/dist/db/memory-store.d.ts.map +1 -1
  17. package/dist/db/memory-store.js +153 -55
  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 +5 -2
  23. package/dist/mcp-stdio.js +39 -5
  24. package/dist/mcp-stdio.js.map +1 -1
  25. package/dist/memory/access-pattern-tracker.d.ts +51 -0
  26. package/dist/memory/access-pattern-tracker.d.ts.map +1 -0
  27. package/dist/memory/access-pattern-tracker.js +92 -0
  28. package/dist/memory/access-pattern-tracker.js.map +1 -0
  29. package/dist/memory/anticipation-engine.d.ts.map +1 -1
  30. package/dist/memory/anticipation-engine.js +18 -10
  31. package/dist/memory/anticipation-engine.js.map +1 -1
  32. package/dist/memory/auto-learner.d.ts.map +1 -1
  33. package/dist/memory/auto-learner.js +192 -45
  34. package/dist/memory/auto-learner.js.map +1 -1
  35. package/dist/memory/completion-resolver.d.ts +38 -0
  36. package/dist/memory/completion-resolver.d.ts.map +1 -0
  37. package/dist/memory/completion-resolver.js +127 -0
  38. package/dist/memory/completion-resolver.js.map +1 -0
  39. package/dist/memory/confidence-decay.d.ts.map +1 -1
  40. package/dist/memory/confidence-decay.js +13 -9
  41. package/dist/memory/confidence-decay.js.map +1 -1
  42. package/dist/memory/convention-detector.d.ts +11 -0
  43. package/dist/memory/convention-detector.d.ts.map +1 -0
  44. package/dist/memory/convention-detector.js +294 -0
  45. package/dist/memory/convention-detector.js.map +1 -0
  46. package/dist/memory/correction-detector.d.ts +33 -0
  47. package/dist/memory/correction-detector.d.ts.map +1 -0
  48. package/dist/memory/correction-detector.js +129 -0
  49. package/dist/memory/correction-detector.js.map +1 -0
  50. package/dist/memory/cross-memory-linker.d.ts +18 -0
  51. package/dist/memory/cross-memory-linker.d.ts.map +1 -0
  52. package/dist/memory/cross-memory-linker.js +115 -0
  53. package/dist/memory/cross-memory-linker.js.map +1 -0
  54. package/dist/memory/daily-diary.d.ts +30 -0
  55. package/dist/memory/daily-diary.d.ts.map +1 -0
  56. package/dist/memory/daily-diary.js +159 -0
  57. package/dist/memory/daily-diary.js.map +1 -0
  58. package/dist/memory/embedding-cache.d.ts +32 -0
  59. package/dist/memory/embedding-cache.d.ts.map +1 -0
  60. package/dist/memory/embedding-cache.js +76 -0
  61. package/dist/memory/embedding-cache.js.map +1 -0
  62. package/dist/memory/embedding-manager.d.ts.map +1 -1
  63. package/dist/memory/embedding-manager.js +6 -4
  64. package/dist/memory/embedding-manager.js.map +1 -1
  65. package/dist/memory/error-learner.d.ts +26 -0
  66. package/dist/memory/error-learner.d.ts.map +1 -0
  67. package/dist/memory/error-learner.js +145 -0
  68. package/dist/memory/error-learner.js.map +1 -0
  69. package/dist/memory/export-import.js +2 -2
  70. package/dist/memory/export-import.js.map +1 -1
  71. package/dist/memory/file-relationships.d.ts +47 -0
  72. package/dist/memory/file-relationships.d.ts.map +1 -0
  73. package/dist/memory/file-relationships.js +130 -0
  74. package/dist/memory/file-relationships.js.map +1 -0
  75. package/dist/memory/git-memory.d.ts.map +1 -1
  76. package/dist/memory/git-memory.js +20 -26
  77. package/dist/memory/git-memory.js.map +1 -1
  78. package/dist/memory/impact-analyzer.d.ts +16 -0
  79. package/dist/memory/impact-analyzer.d.ts.map +1 -0
  80. package/dist/memory/impact-analyzer.js +189 -0
  81. package/dist/memory/impact-analyzer.js.map +1 -0
  82. package/dist/memory/instructions-generator.d.ts +30 -0
  83. package/dist/memory/instructions-generator.d.ts.map +1 -0
  84. package/dist/memory/instructions-generator.js +117 -0
  85. package/dist/memory/instructions-generator.js.map +1 -0
  86. package/dist/memory/learning-rate.js +8 -7
  87. package/dist/memory/learning-rate.js.map +1 -1
  88. package/dist/memory/llm-enhancer.d.ts +2 -14
  89. package/dist/memory/llm-enhancer.d.ts.map +1 -1
  90. package/dist/memory/llm-enhancer.js +66 -46
  91. package/dist/memory/llm-enhancer.js.map +1 -1
  92. package/dist/memory/memory-cache.d.ts.map +1 -1
  93. package/dist/memory/memory-cache.js +10 -0
  94. package/dist/memory/memory-cache.js.map +1 -1
  95. package/dist/memory/memory-consolidator.d.ts.map +1 -1
  96. package/dist/memory/memory-consolidator.js +20 -14
  97. package/dist/memory/memory-consolidator.js.map +1 -1
  98. package/dist/memory/memory-decay.d.ts.map +1 -1
  99. package/dist/memory/memory-decay.js +82 -52
  100. package/dist/memory/memory-decay.js.map +1 -1
  101. package/dist/memory/memory-export-md.d.ts +12 -0
  102. package/dist/memory/memory-export-md.d.ts.map +1 -0
  103. package/dist/memory/memory-export-md.js +188 -0
  104. package/dist/memory/memory-export-md.js.map +1 -0
  105. package/dist/memory/memory-quality.d.ts +1 -1
  106. package/dist/memory/memory-quality.d.ts.map +1 -1
  107. package/dist/memory/memory-quality.js +9 -6
  108. package/dist/memory/memory-quality.js.map +1 -1
  109. package/dist/memory/memory-ranker.d.ts.map +1 -1
  110. package/dist/memory/memory-ranker.js +12 -3
  111. package/dist/memory/memory-ranker.js.map +1 -1
  112. package/dist/memory/meta-memory.js +3 -3
  113. package/dist/memory/meta-memory.js.map +1 -1
  114. package/dist/memory/mmr-reranker.d.ts +39 -0
  115. package/dist/memory/mmr-reranker.d.ts.map +1 -0
  116. package/dist/memory/mmr-reranker.js +115 -0
  117. package/dist/memory/mmr-reranker.js.map +1 -0
  118. package/dist/memory/pre-flight.d.ts +24 -0
  119. package/dist/memory/pre-flight.d.ts.map +1 -0
  120. package/dist/memory/pre-flight.js +121 -0
  121. package/dist/memory/pre-flight.js.map +1 -0
  122. package/dist/memory/preference-learner.d.ts +28 -0
  123. package/dist/memory/preference-learner.d.ts.map +1 -0
  124. package/dist/memory/preference-learner.js +144 -0
  125. package/dist/memory/preference-learner.js.map +1 -0
  126. package/dist/memory/query-expansion.d.ts +28 -0
  127. package/dist/memory/query-expansion.d.ts.map +1 -0
  128. package/dist/memory/query-expansion.js +140 -0
  129. package/dist/memory/query-expansion.js.map +1 -0
  130. package/dist/memory/regression-guard.d.ts +35 -0
  131. package/dist/memory/regression-guard.d.ts.map +1 -0
  132. package/dist/memory/regression-guard.js +90 -0
  133. package/dist/memory/regression-guard.js.map +1 -0
  134. package/dist/memory/resume-work.d.ts +37 -0
  135. package/dist/memory/resume-work.d.ts.map +1 -0
  136. package/dist/memory/resume-work.js +141 -0
  137. package/dist/memory/resume-work.js.map +1 -0
  138. package/dist/memory/session-tracker.d.ts +2 -0
  139. package/dist/memory/session-tracker.d.ts.map +1 -1
  140. package/dist/memory/session-tracker.js +26 -8
  141. package/dist/memory/session-tracker.js.map +1 -1
  142. package/dist/memory/soul-manager.d.ts +30 -0
  143. package/dist/memory/soul-manager.d.ts.map +1 -0
  144. package/dist/memory/soul-manager.js +171 -0
  145. package/dist/memory/soul-manager.js.map +1 -0
  146. package/dist/memory/success-tracker.d.ts +33 -0
  147. package/dist/memory/success-tracker.d.ts.map +1 -0
  148. package/dist/memory/success-tracker.js +75 -0
  149. package/dist/memory/success-tracker.js.map +1 -0
  150. package/dist/memory/temporal-engine.d.ts.map +1 -1
  151. package/dist/memory/temporal-engine.js +9 -13
  152. package/dist/memory/temporal-engine.js.map +1 -1
  153. package/dist/memory/tool-recommender.d.ts +29 -0
  154. package/dist/memory/tool-recommender.d.ts.map +1 -0
  155. package/dist/memory/tool-recommender.js +117 -0
  156. package/dist/memory/tool-recommender.js.map +1 -0
  157. package/dist/memory/usage-stats.d.ts +98 -0
  158. package/dist/memory/usage-stats.d.ts.map +1 -0
  159. package/dist/memory/usage-stats.js +345 -0
  160. package/dist/memory/usage-stats.js.map +1 -0
  161. package/dist/retrieval/hybrid-retriever.d.ts +0 -2
  162. package/dist/retrieval/hybrid-retriever.d.ts.map +1 -1
  163. package/dist/retrieval/hybrid-retriever.js +3 -13
  164. package/dist/retrieval/hybrid-retriever.js.map +1 -1
  165. package/dist/scanners/architecture-graph.js +2 -2
  166. package/dist/scanners/architecture-graph.js.map +1 -1
  167. package/dist/scanners/code-verifier.d.ts +1 -0
  168. package/dist/scanners/code-verifier.d.ts.map +1 -1
  169. package/dist/scanners/code-verifier.js +14 -14
  170. package/dist/scanners/code-verifier.js.map +1 -1
  171. package/dist/scanners/context-builder.d.ts.map +1 -1
  172. package/dist/scanners/context-builder.js +33 -45
  173. package/dist/scanners/context-builder.js.map +1 -1
  174. package/dist/scanners/export-map.js +2 -2
  175. package/dist/scanners/export-map.js.map +1 -1
  176. package/dist/scanners/project-scanner.js +2 -2
  177. package/dist/scanners/project-scanner.js.map +1 -1
  178. package/dist/security/encryption.js +1 -1
  179. package/dist/security/encryption.js.map +1 -1
  180. package/dist/security/feature-gate.d.ts.map +1 -1
  181. package/dist/security/feature-gate.js +62 -20
  182. package/dist/security/feature-gate.js.map +1 -1
  183. package/dist/security/license.js +282 -35
  184. package/dist/security/license.js.map +1 -1
  185. package/dist/security/rate-limiter.d.ts +4 -3
  186. package/dist/security/rate-limiter.d.ts.map +1 -1
  187. package/dist/security/rate-limiter.js +11 -29
  188. package/dist/security/rate-limiter.js.map +1 -1
  189. package/dist/server/dashboard.js +166 -327
  190. package/dist/server/dashboard.js.map +1 -1
  191. package/dist/server/mcp-handler.d.ts.map +1 -1
  192. package/dist/server/mcp-handler.js +1000 -792
  193. package/dist/server/mcp-handler.js.map +1 -1
  194. package/dist/utils/extract-tags.d.ts +16 -0
  195. package/dist/utils/extract-tags.d.ts.map +1 -0
  196. package/dist/utils/extract-tags.js +40 -0
  197. package/dist/utils/extract-tags.js.map +1 -0
  198. package/package.json +18 -8
  199. package/dist/core/event-bus.d.ts +0 -19
  200. package/dist/core/event-bus.d.ts.map +0 -1
  201. package/dist/core/event-bus.js +0 -51
  202. package/dist/core/event-bus.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Recommender — Suggests which Cortex tools to use based on context.
4
+ *
5
+ * THE GAP THIS FILLS:
6
+ * The AI has 20 tools but often doesn't know WHEN to use which.
7
+ * This module analyzes the current situation and recommends the right tools.
8
+ *
9
+ * Like a flight checklist: "Before takeoff: check instruments, fuel, clearance."
10
+ * Here: "Before editing auth.ts: run pre_check, check_impact, verify_code."
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.recommendTools = recommendTools;
14
+ exports.formatRecommendations = formatRecommendations;
15
+ /**
16
+ * Recommend tools based on what the user is doing.
17
+ */
18
+ function recommendTools(context) {
19
+ const recommendations = [];
20
+ // ─── New conversation? Always force_recall first ────────────────
21
+ if (context.isNewConversation) {
22
+ recommendations.push({
23
+ tool: 'force_recall',
24
+ reason: 'Start of conversation — load all context (corrections, decisions, conventions)',
25
+ priority: 'must',
26
+ });
27
+ }
28
+ // ─── About to edit a file? Pre-check it ────────────────────────
29
+ if (context.currentFile) {
30
+ recommendations.push({
31
+ tool: 'pre_check',
32
+ reason: `Check conventions, gotchas, and past bugs for ${context.currentFile}`,
33
+ priority: 'should',
34
+ });
35
+ recommendations.push({
36
+ tool: 'check_impact',
37
+ reason: `See what depends on ${context.currentFile} before changing it`,
38
+ priority: 'should',
39
+ });
40
+ }
41
+ // ─── Topic suggests specific tools ─────────────────────────────
42
+ if (context.topic) {
43
+ const lower = context.topic.toLowerCase();
44
+ if (lower.includes('debug') || lower.includes('error') || lower.includes('bug') || lower.includes('fix')) {
45
+ recommendations.push({
46
+ tool: 'recall_memory',
47
+ reason: 'Search for similar past bugs and failed attempts',
48
+ priority: 'must',
49
+ });
50
+ }
51
+ if (lower.includes('review') || lower.includes('check')) {
52
+ recommendations.push({
53
+ tool: 'review_code',
54
+ reason: 'Review against stored conventions and past bug patterns',
55
+ priority: 'should',
56
+ });
57
+ }
58
+ if (lower.includes('new') || lower.includes('create') || lower.includes('build') || lower.includes('add')) {
59
+ recommendations.push({
60
+ tool: 'scan_project',
61
+ reason: 'Ensure project context is loaded before building new features',
62
+ priority: 'could',
63
+ });
64
+ }
65
+ if (lower.includes('import') || lower.includes('package') || lower.includes('dependency')) {
66
+ recommendations.push({
67
+ tool: 'verify_code',
68
+ reason: 'Check if imports are valid and packages exist',
69
+ priority: 'must',
70
+ });
71
+ }
72
+ if (lower.includes('where') || lower.includes('left off') || lower.includes('continue') || lower.includes('resume')) {
73
+ recommendations.push({
74
+ tool: 'resume_work',
75
+ reason: 'Recover context from previous session',
76
+ priority: 'must',
77
+ });
78
+ }
79
+ }
80
+ // ─── After making changes ──────────────────────────────────────
81
+ if (context.recentAction === 'code_written') {
82
+ recommendations.push({
83
+ tool: 'auto_learn',
84
+ reason: 'Store decisions and patterns from this response',
85
+ priority: 'must',
86
+ });
87
+ recommendations.push({
88
+ tool: 'verify_code',
89
+ reason: 'Verify imports and exports in the code you just wrote',
90
+ priority: 'should',
91
+ });
92
+ }
93
+ // Deduplicate by tool name, keeping highest priority
94
+ const seen = new Map();
95
+ const priorityOrder = { must: 0, should: 1, could: 2 };
96
+ for (const rec of recommendations) {
97
+ const existing = seen.get(rec.tool);
98
+ if (!existing || priorityOrder[rec.priority] < priorityOrder[existing.priority]) {
99
+ seen.set(rec.tool, rec);
100
+ }
101
+ }
102
+ return [...seen.values()].sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
103
+ }
104
+ /**
105
+ * Format tool recommendations for injection.
106
+ */
107
+ function formatRecommendations(recs) {
108
+ if (recs.length === 0)
109
+ return '';
110
+ const lines = ['## 🛠️ Recommended Tools'];
111
+ for (const rec of recs) {
112
+ const badge = rec.priority === 'must' ? '🔴' : rec.priority === 'should' ? '🟡' : '🟢';
113
+ lines.push(`- ${badge} **${rec.tool}** — ${rec.reason}`);
114
+ }
115
+ return lines.join('\n');
116
+ }
117
+ //# sourceMappingURL=tool-recommender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-recommender.js","sourceRoot":"","sources":["../../src/memory/tool-recommender.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAWH,wCAqGC;AAKD,sDASC;AAtHD;;GAEG;AACH,SAAgB,cAAc,CAAC,OAK9B;IACG,MAAM,eAAe,GAAyB,EAAE,CAAC;IAEjD,mEAAmE;IACnE,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,eAAe,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,gFAAgF;YACxF,QAAQ,EAAE,MAAM;SACnB,CAAC,CAAC;IACP,CAAC;IAED,kEAAkE;IAClE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,iDAAiD,OAAO,CAAC,WAAW,EAAE;YAC9E,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,eAAe,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,uBAAuB,OAAO,CAAC,WAAW,qBAAqB;YACvE,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;IACP,CAAC;IAED,kEAAkE;IAClE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvG,eAAe,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,kDAAkD;gBAC1D,QAAQ,EAAE,MAAM;aACnB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,eAAe,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,yDAAyD;gBACjE,QAAQ,EAAE,QAAQ;aACrB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxG,eAAe,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,+DAA+D;gBACvE,QAAQ,EAAE,OAAO;aACpB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxF,eAAe,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,+CAA+C;gBACvD,QAAQ,EAAE,MAAM;aACnB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClH,eAAe,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,uCAAuC;gBAC/C,QAAQ,EAAE,MAAM;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,IAAI,OAAO,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;QAC1C,eAAe,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,iDAAiD;YACzD,QAAQ,EAAE,MAAM;SACnB,CAAC,CAAC;QACH,eAAe,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,uDAAuD;YAC/D,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;IACP,CAAC;IAED,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;IACnD,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpG,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAA0B;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,KAAK,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Usage Stats — Tracks Cortex usage metrics for impact visibility.
3
+ *
4
+ * THE KEY TO ADDICTION: Users must SEE the value Cortex provides.
5
+ * Every force_recall response now ends with a stats footer showing:
6
+ * - "Cortex Saved You X times"
7
+ * - "Brain Health: 87/100"
8
+ * - Time saved estimate
9
+ * - Memory milestones
10
+ *
11
+ * Stats are PERSISTED in the database so they survive restarts.
12
+ */
13
+ import { MemoryStore } from '../db/memory-store';
14
+ declare const lifetimeStats: {
15
+ totalRecalls: number;
16
+ totalMemoriesServed: number;
17
+ totalHallucationsCaught: number;
18
+ totalMemoriesStored: number;
19
+ totalSessions: number;
20
+ savedYouCount: number;
21
+ totalAutoLearns: number;
22
+ totalMilestonesHit: number;
23
+ firstUsed: number;
24
+ currentStreak: number;
25
+ longestStreak: number;
26
+ lastActiveDate: string;
27
+ totalSuccessPatterns: number;
28
+ totalErrorsLearned: number;
29
+ };
30
+ /** Record a recall event */
31
+ export declare function trackRecall(memoriesReturned: number): void;
32
+ /** Record a memory store event — checks for milestones */
33
+ export declare function trackStore(): string;
34
+ /** Record a hallucination catch — this is a "saved you" moment */
35
+ export declare function trackCatch(): void;
36
+ /** Record a "saved you" moment (correction recalled → mistake prevented) */
37
+ export declare function trackSaved(): void;
38
+ /** Record a scan */
39
+ export declare function trackScan(): void;
40
+ /** Record a code review */
41
+ export declare function trackReview(): void;
42
+ /** Record an auto_learn */
43
+ export declare function trackAutoLearn(): void;
44
+ /** Record a success pattern learned */
45
+ export declare function trackSuccess(): void;
46
+ /** Record an error pattern learned */
47
+ export declare function trackErrorLearned(): void;
48
+ /** Get streak display string */
49
+ export declare function getStreakDisplay(): string;
50
+ export declare function getTipOfTheDay(memoryStore: MemoryStore): string;
51
+ export declare function calculateBrainHealth(memoryStore: MemoryStore): {
52
+ score: number;
53
+ grade: string;
54
+ tips: string[];
55
+ };
56
+ export declare function estimateTimeSaved(): {
57
+ seconds: number;
58
+ formatted: string;
59
+ };
60
+ export declare function formatStatsFooter(memoryStore?: MemoryStore): string;
61
+ export declare function getUsageStats(): {
62
+ session: {
63
+ recallCount: number;
64
+ memoriesServed: number;
65
+ hallucationsCaught: number;
66
+ memoriesStored: number;
67
+ projectsScanned: number;
68
+ codeReviews: number;
69
+ sessionStart: number;
70
+ };
71
+ lifetime: {
72
+ totalRecalls: number;
73
+ totalMemoriesServed: number;
74
+ totalHallucationsCaught: number;
75
+ totalMemoriesStored: number;
76
+ totalSessions: number;
77
+ savedYouCount: number;
78
+ totalAutoLearns: number;
79
+ totalMilestonesHit: number;
80
+ firstUsed: number;
81
+ currentStreak: number;
82
+ longestStreak: number;
83
+ lastActiveDate: string;
84
+ totalSuccessPatterns: number;
85
+ totalErrorsLearned: number;
86
+ };
87
+ timeSaved: {
88
+ seconds: number;
89
+ formatted: string;
90
+ };
91
+ };
92
+ export declare function resetSessionStats(): void;
93
+ /** Initialize lifetime stats from stored data */
94
+ export declare function initLifetimeStats(stored: Partial<typeof lifetimeStats>): void;
95
+ /** Get raw lifetime stats for persistence */
96
+ export declare function getLifetimeStats(): typeof lifetimeStats;
97
+ export {};
98
+ //# sourceMappingURL=usage-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-stats.d.ts","sourceRoot":"","sources":["../../src/memory/usage-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;CAgBlB,CAAC;AAIF,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,kEAAkE;AAClE,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,oBAAoB;AACpB,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,2BAA2B;AAC3B,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,2BAA2B;AAC3B,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,uCAAuC;AACvC,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AA4BD,gCAAgC;AAChC,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAKD,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAe/D;AAMD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAkDA;AA2BD,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1E;AAID,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,CA4CnE;AAID,wBAAgB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA9DmB,MAAM;mBAAa,MAAM;;EAoExE;AAID,wBAAgB,iBAAiB,IAAI,IAAI,CAWxC;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,aAAa,CAAC,GAAG,IAAI,CAU7E;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,IAAI,OAAO,aAAa,CAEvD"}
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ /**
3
+ * Usage Stats — Tracks Cortex usage metrics for impact visibility.
4
+ *
5
+ * THE KEY TO ADDICTION: Users must SEE the value Cortex provides.
6
+ * Every force_recall response now ends with a stats footer showing:
7
+ * - "Cortex Saved You X times"
8
+ * - "Brain Health: 87/100"
9
+ * - Time saved estimate
10
+ * - Memory milestones
11
+ *
12
+ * Stats are PERSISTED in the database so they survive restarts.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.trackRecall = trackRecall;
16
+ exports.trackStore = trackStore;
17
+ exports.trackCatch = trackCatch;
18
+ exports.trackSaved = trackSaved;
19
+ exports.trackScan = trackScan;
20
+ exports.trackReview = trackReview;
21
+ exports.trackAutoLearn = trackAutoLearn;
22
+ exports.trackSuccess = trackSuccess;
23
+ exports.trackErrorLearned = trackErrorLearned;
24
+ exports.getStreakDisplay = getStreakDisplay;
25
+ exports.getTipOfTheDay = getTipOfTheDay;
26
+ exports.calculateBrainHealth = calculateBrainHealth;
27
+ exports.estimateTimeSaved = estimateTimeSaved;
28
+ exports.formatStatsFooter = formatStatsFooter;
29
+ exports.getUsageStats = getUsageStats;
30
+ exports.resetSessionStats = resetSessionStats;
31
+ exports.initLifetimeStats = initLifetimeStats;
32
+ exports.getLifetimeStats = getLifetimeStats;
33
+ // ─── Session Stats (in-memory, per session) ──────────────────────────────────
34
+ let sessionStats = {
35
+ recallCount: 0,
36
+ memoriesServed: 0,
37
+ hallucationsCaught: 0,
38
+ memoriesStored: 0,
39
+ projectsScanned: 0,
40
+ codeReviews: 0,
41
+ sessionStart: Date.now(),
42
+ };
43
+ // ─── Lifetime Stats (persisted via special DB memory) ────────────────────────
44
+ const lifetimeStats = {
45
+ totalRecalls: 0,
46
+ totalMemoriesServed: 0,
47
+ totalHallucationsCaught: 0,
48
+ totalMemoriesStored: 0,
49
+ totalSessions: 0,
50
+ savedYouCount: 0,
51
+ totalAutoLearns: 0,
52
+ totalMilestonesHit: 0,
53
+ firstUsed: Date.now(),
54
+ // STREAK TRACKING — "Don't break the chain!"
55
+ currentStreak: 0, // Days in a row Cortex was used
56
+ longestStreak: 0, // Personal best streak
57
+ lastActiveDate: '', // ISO date string 'YYYY-MM-DD'
58
+ totalSuccessPatterns: 0, // Proven approaches tracked
59
+ totalErrorsLearned: 0, // Error patterns captured
60
+ };
61
+ // ─── Track Events ────────────────────────────────────────────────────────────
62
+ /** Record a recall event */
63
+ function trackRecall(memoriesReturned) {
64
+ sessionStats.recallCount++;
65
+ sessionStats.memoriesServed += memoriesReturned;
66
+ lifetimeStats.totalRecalls++;
67
+ lifetimeStats.totalMemoriesServed += memoriesReturned;
68
+ }
69
+ /** Record a memory store event — checks for milestones */
70
+ function trackStore() {
71
+ sessionStats.memoriesStored++;
72
+ lifetimeStats.totalMemoriesStored++;
73
+ return checkMilestone(lifetimeStats.totalMemoriesStored, 'memories stored');
74
+ }
75
+ /** Record a hallucination catch — this is a "saved you" moment */
76
+ function trackCatch() {
77
+ sessionStats.hallucationsCaught++;
78
+ lifetimeStats.totalHallucationsCaught++;
79
+ lifetimeStats.savedYouCount++;
80
+ }
81
+ /** Record a "saved you" moment (correction recalled → mistake prevented) */
82
+ function trackSaved() {
83
+ lifetimeStats.savedYouCount++;
84
+ }
85
+ /** Record a scan */
86
+ function trackScan() {
87
+ sessionStats.projectsScanned++;
88
+ }
89
+ /** Record a code review */
90
+ function trackReview() {
91
+ sessionStats.codeReviews++;
92
+ }
93
+ /** Record an auto_learn */
94
+ function trackAutoLearn() {
95
+ lifetimeStats.totalAutoLearns++;
96
+ updateStreak();
97
+ }
98
+ /** Record a success pattern learned */
99
+ function trackSuccess() {
100
+ lifetimeStats.totalSuccessPatterns++;
101
+ }
102
+ /** Record an error pattern learned */
103
+ function trackErrorLearned() {
104
+ lifetimeStats.totalErrorsLearned++;
105
+ }
106
+ // ─── Daily Streak ────────────────────────────────────────────────────────────
107
+ // Users LOVE streaks. "7 day streak! 🔥" makes them come back.
108
+ function updateStreak() {
109
+ const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
110
+ const lastDate = lifetimeStats.lastActiveDate;
111
+ if (lastDate === today)
112
+ return; // Already tracked today
113
+ if (lastDate) {
114
+ const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];
115
+ if (lastDate === yesterday) {
116
+ lifetimeStats.currentStreak++;
117
+ }
118
+ else {
119
+ lifetimeStats.currentStreak = 1; // Streak broken
120
+ }
121
+ }
122
+ else {
123
+ lifetimeStats.currentStreak = 1; // First day
124
+ }
125
+ lifetimeStats.lastActiveDate = today;
126
+ if (lifetimeStats.currentStreak > lifetimeStats.longestStreak) {
127
+ lifetimeStats.longestStreak = lifetimeStats.currentStreak;
128
+ }
129
+ }
130
+ /** Get streak display string */
131
+ function getStreakDisplay() {
132
+ const s = lifetimeStats.currentStreak;
133
+ if (s <= 0)
134
+ return '';
135
+ if (s >= 30)
136
+ return `🔥 ${s}-day streak! LEGENDARY!`;
137
+ if (s >= 14)
138
+ return `🔥 ${s}-day streak! On fire!`;
139
+ if (s >= 7)
140
+ return `🔥 ${s}-day streak!`;
141
+ if (s >= 3)
142
+ return `✨ ${s}-day streak`;
143
+ return `Day ${s}`;
144
+ }
145
+ // ─── Tip of the Day ──────────────────────────────────────────────────────────
146
+ // Surface a random useful memory to remind users of past knowledge
147
+ function getTipOfTheDay(memoryStore) {
148
+ try {
149
+ const memories = memoryStore.getActive(100);
150
+ const useful = memories.filter(m => ['DECISION', 'CONVENTION', 'BUG_FIX', 'INSIGHT'].includes(m.type) &&
151
+ m.intent && m.intent.length > 20);
152
+ if (useful.length === 0)
153
+ return '';
154
+ // Deterministic daily pick (same tip all day)
155
+ const dayIndex = Math.floor(Date.now() / 86400000) % useful.length;
156
+ const tip = useful[dayIndex];
157
+ return `\n> 💡 **Tip of the day:** [${tip.type}] ${tip.intent}`;
158
+ }
159
+ catch {
160
+ return '';
161
+ }
162
+ }
163
+ // ─── Brain Health Score ──────────────────────────────────────────────────────
164
+ // Composite score 0-100 based on how well Cortex is being used.
165
+ // Higher score = more addictive (users want to keep it high)
166
+ function calculateBrainHealth(memoryStore) {
167
+ const tips = [];
168
+ let score = 0;
169
+ const activeCount = memoryStore.activeCount();
170
+ // 1. Memory count (0-25 pts) — more memories = healthier brain
171
+ if (activeCount >= 100)
172
+ score += 25;
173
+ else if (activeCount >= 50)
174
+ score += 20;
175
+ else if (activeCount >= 20)
176
+ score += 15;
177
+ else if (activeCount >= 5)
178
+ score += 10;
179
+ else {
180
+ score += Math.min(activeCount * 2, 5);
181
+ tips.push('Store more memories to improve brain health');
182
+ }
183
+ // 2. Memory diversity (0-25 pts) — multiple types = better coverage
184
+ const typeCount = getMemoryTypeDiversity(memoryStore);
185
+ score += Math.min(typeCount * 5, 25);
186
+ if (typeCount < 3)
187
+ tips.push('Add different memory types (decisions, corrections, conventions)');
188
+ // 3. Usage frequency (0-25 pts) — regular use = healthier
189
+ if (lifetimeStats.totalSessions >= 20)
190
+ score += 25;
191
+ else if (lifetimeStats.totalSessions >= 10)
192
+ score += 20;
193
+ else if (lifetimeStats.totalSessions >= 5)
194
+ score += 15;
195
+ else if (lifetimeStats.totalSessions >= 2)
196
+ score += 10;
197
+ else {
198
+ score += lifetimeStats.totalSessions * 5;
199
+ tips.push('Use Cortex regularly — memory quality improves with each session');
200
+ }
201
+ // 4. Auto-learn engagement (0-25 pts) — AI is learning from conversations
202
+ if (lifetimeStats.totalAutoLearns >= 50)
203
+ score += 25;
204
+ else if (lifetimeStats.totalAutoLearns >= 20)
205
+ score += 20;
206
+ else if (lifetimeStats.totalAutoLearns >= 10)
207
+ score += 15;
208
+ else if (lifetimeStats.totalAutoLearns >= 3)
209
+ score += 10;
210
+ else {
211
+ score += lifetimeStats.totalAutoLearns * 3;
212
+ tips.push('Make sure auto_learn is called after every response');
213
+ }
214
+ // Grade
215
+ let grade;
216
+ if (score >= 90)
217
+ grade = '🧠 Genius';
218
+ else if (score >= 75)
219
+ grade = '🔥 Sharp';
220
+ else if (score >= 50)
221
+ grade = '💡 Growing';
222
+ else if (score >= 25)
223
+ grade = '🌱 Seedling';
224
+ else
225
+ grade = '🥚 Newborn';
226
+ return { score: Math.min(score, 100), grade, tips };
227
+ }
228
+ function getMemoryTypeDiversity(memoryStore) {
229
+ try {
230
+ const memories = memoryStore.getActive(200);
231
+ const types = new Set(memories.map(m => m.type));
232
+ return types.size;
233
+ }
234
+ catch {
235
+ return 1;
236
+ }
237
+ }
238
+ // ─── Memory Milestones ───────────────────────────────────────────────────────
239
+ // Celebrate: 10, 25, 50, 100, 250, 500, 1000, 2500, 5000
240
+ const MILESTONES = [10, 25, 50, 100, 250, 500, 1000, 2500, 5000];
241
+ function checkMilestone(count, label) {
242
+ if (MILESTONES.includes(count)) {
243
+ lifetimeStats.totalMilestonesHit++;
244
+ return `\n🎉 **Milestone!** ${count} ${label}! Your AI brain is getting stronger.`;
245
+ }
246
+ return '';
247
+ }
248
+ // ─── Time Saved ──────────────────────────────────────────────────────────────
249
+ function estimateTimeSaved() {
250
+ // Each recalled memory ≈ 15s of re-explanation
251
+ // Each hallucination caught ≈ 5min of debugging
252
+ const recallSeconds = lifetimeStats.totalMemoriesServed * 15;
253
+ const catchSeconds = lifetimeStats.totalHallucationsCaught * 300;
254
+ const totalSeconds = recallSeconds + catchSeconds;
255
+ if (totalSeconds < 60)
256
+ return { seconds: totalSeconds, formatted: `${totalSeconds}s` };
257
+ if (totalSeconds < 3600)
258
+ return { seconds: totalSeconds, formatted: `${Math.round(totalSeconds / 60)} min` };
259
+ return { seconds: totalSeconds, formatted: `${(totalSeconds / 3600).toFixed(1)} hours` };
260
+ }
261
+ // ─── Stats Footer (shown in every force_recall) ─────────────────────────────
262
+ function formatStatsFooter(memoryStore) {
263
+ const parts = [];
264
+ const timeSaved = estimateTimeSaved();
265
+ // "Saved You" counter (the most addictive metric)
266
+ if (lifetimeStats.savedYouCount > 0) {
267
+ parts.push(`🛡️ Saved you ${lifetimeStats.savedYouCount} time${lifetimeStats.savedYouCount > 1 ? 's' : ''}`);
268
+ }
269
+ // Brain Health Score
270
+ if (memoryStore) {
271
+ const health = calculateBrainHealth(memoryStore);
272
+ parts.push(`${health.grade} Brain: ${health.score}/100`);
273
+ }
274
+ // Memories + Time saved
275
+ if (lifetimeStats.totalMemoriesServed > 0) {
276
+ parts.push(`${lifetimeStats.totalMemoriesServed} memories served`);
277
+ }
278
+ if (timeSaved.seconds > 0) {
279
+ parts.push(`~${timeSaved.formatted} saved`);
280
+ }
281
+ // Hallucinations caught
282
+ if (lifetimeStats.totalHallucationsCaught > 0) {
283
+ parts.push(`${lifetimeStats.totalHallucationsCaught} hallucination${lifetimeStats.totalHallucationsCaught > 1 ? 's' : ''} caught`);
284
+ }
285
+ if (parts.length === 0) {
286
+ return '\n> 🧠 Cortex is active — memories will build up as you work.';
287
+ }
288
+ // Add streak
289
+ const streak = getStreakDisplay();
290
+ if (streak)
291
+ parts.push(streak);
292
+ let footer = `\n> 🧠 Cortex: ${parts.join(' | ')}`;
293
+ // Add tip of the day
294
+ if (memoryStore) {
295
+ footer += getTipOfTheDay(memoryStore);
296
+ }
297
+ return footer;
298
+ }
299
+ // ─── Full Stats ──────────────────────────────────────────────────────────────
300
+ function getUsageStats() {
301
+ return {
302
+ session: { ...sessionStats },
303
+ lifetime: { ...lifetimeStats },
304
+ timeSaved: estimateTimeSaved(),
305
+ };
306
+ }
307
+ // ─── Session Management ──────────────────────────────────────────────────────
308
+ function resetSessionStats() {
309
+ lifetimeStats.totalSessions++;
310
+ sessionStats = {
311
+ recallCount: 0,
312
+ memoriesServed: 0,
313
+ hallucationsCaught: 0,
314
+ memoriesStored: 0,
315
+ projectsScanned: 0,
316
+ codeReviews: 0,
317
+ sessionStart: Date.now(),
318
+ };
319
+ }
320
+ /** Initialize lifetime stats from stored data */
321
+ function initLifetimeStats(stored) {
322
+ if (stored.totalRecalls)
323
+ lifetimeStats.totalRecalls = stored.totalRecalls;
324
+ if (stored.totalMemoriesServed)
325
+ lifetimeStats.totalMemoriesServed = stored.totalMemoriesServed;
326
+ if (stored.totalHallucationsCaught)
327
+ lifetimeStats.totalHallucationsCaught = stored.totalHallucationsCaught;
328
+ if (stored.totalMemoriesStored)
329
+ lifetimeStats.totalMemoriesStored = stored.totalMemoriesStored;
330
+ if (stored.totalSessions)
331
+ lifetimeStats.totalSessions = stored.totalSessions;
332
+ if (stored.savedYouCount)
333
+ lifetimeStats.savedYouCount = stored.savedYouCount;
334
+ if (stored.totalAutoLearns)
335
+ lifetimeStats.totalAutoLearns = stored.totalAutoLearns;
336
+ if (stored.totalMilestonesHit)
337
+ lifetimeStats.totalMilestonesHit = stored.totalMilestonesHit;
338
+ if (stored.firstUsed)
339
+ lifetimeStats.firstUsed = stored.firstUsed;
340
+ }
341
+ /** Get raw lifetime stats for persistence */
342
+ function getLifetimeStats() {
343
+ return { ...lifetimeStats };
344
+ }
345
+ //# sourceMappingURL=usage-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-stats.js","sourceRoot":"","sources":["../../src/memory/usage-stats.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,5 @@ export declare class HybridRetriever {
17
17
  private mergeResults;
18
18
  /** Apply query filters */
19
19
  private applyFilters;
20
- /** Clean user query for FTS5 syntax */
21
- private cleanFTSQuery;
22
20
  }
23
21
  //# sourceMappingURL=hybrid-retriever.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retriever.d.ts","sourceRoot":"","sources":["../../src/retrieval/hybrid-retriever.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,eAAe;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAmB;gBAEvB,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB;IAKhE,0CAA0C;IACpC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA+B3C,YAAY;YAUZ,aAAa;YAWb,UAAU;IASxB,8DAA8D;IAC9D,OAAO,CAAC,YAAY;IA6BpB,0BAA0B;IAC1B,OAAO,CAAC,YAAY;IAapB,uCAAuC;IACvC,OAAO,CAAC,aAAa;CAQxB"}
1
+ {"version":3,"file":"hybrid-retriever.d.ts","sourceRoot":"","sources":["../../src/retrieval/hybrid-retriever.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,eAAe;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAmB;gBAEvB,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB;IAKhE,0CAA0C;IACpC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA+B3C,YAAY;YAUZ,aAAa;YAUb,UAAU;IASxB,8DAA8D;IAC9D,OAAO,CAAC,YAAY;IA6BpB,0BAA0B;IAC1B,OAAO,CAAC,YAAY;CAYvB"}
@@ -10,7 +10,7 @@ class HybridRetriever {
10
10
  }
11
11
  /** Recall memories relevant to a query */
12
12
  async recall(query) {
13
- const startTime = Date.now();
13
+ const _startTime = Date.now();
14
14
  const limit = query.maxResults || 20;
15
15
  // Run all search methods in parallel
16
16
  const [vectorResults, ftsResults, fileResults] = await Promise.all([
@@ -46,9 +46,8 @@ class HybridRetriever {
46
46
  }
47
47
  async keywordSearch(query, limit) {
48
48
  try {
49
- // Clean query for FTS5 syntax
50
- const ftsQuery = this.cleanFTSQuery(query);
51
- return this.memoryStore.searchFTS(ftsQuery, limit);
49
+ // searchFTS already sanitizes FTS5 special chars internally
50
+ return this.memoryStore.searchFTS(query, limit);
52
51
  }
53
52
  catch (err) {
54
53
  console.error('[CognitiveMemory] FTS search error:', err);
@@ -106,15 +105,6 @@ class HybridRetriever {
106
105
  return true;
107
106
  });
108
107
  }
109
- /** Clean user query for FTS5 syntax */
110
- cleanFTSQuery(query) {
111
- // Remove special FTS5 characters, keep words
112
- return query
113
- .replace(/[^\w\s]/g, ' ')
114
- .split(/\s+/)
115
- .filter((w) => w.length > 2)
116
- .join(' OR ');
117
- }
118
108
  }
119
109
  exports.HybridRetriever = HybridRetriever;
120
110
  //# sourceMappingURL=hybrid-retriever.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retriever.js","sourceRoot":"","sources":["../../src/retrieval/hybrid-retriever.ts"],"names":[],"mappings":";;;AAOA,MAAa,eAAe;IAChB,WAAW,CAAc;IACzB,QAAQ,CAAmB;IAEnC,YAAY,WAAwB,EAAE,QAA0B;QAC5D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;QAErC,qCAAqC;QACrC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YACtC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAC7B,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;YACvC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;YACrC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;SACzC,CAAC,CAAC;QAEH,gBAAgB;QAChB,IAAI,QAAQ,GAAG,MAAM,CAAC;QACtB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE3C,qBAAqB;QACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,KAAa;QACnD,IAAI,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,KAAa;QACpD,IAAI,CAAC;YACD,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAa;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,qBAAqB;YAC9C,WAAW,EAAE,MAAM;SACtB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,8DAA8D;IACtD,YAAY,CAChB,OAA2D;QAE3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgF,CAAC;QAEzG,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,QAAQ,EAAE,CAAC;oBACX,mDAAmD;oBACnD,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;oBACnC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;wBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM;wBACvB,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;qBAC3B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;SACnC,CAAC,CAAC,CAAC;IACR,CAAC;IAED,0BAA0B;IAClB,YAAY,CAAC,OAAuB,EAAE,OAA+B;QACzE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC3E,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACvE,IAAI,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YACxF,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YACvE,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uCAAuC;IAC/B,aAAa,CAAC,KAAa;QAC/B,6CAA6C;QAC7C,OAAO,KAAK;aACP,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;aACxB,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;CACJ;AA5HD,0CA4HC"}
1
+ {"version":3,"file":"hybrid-retriever.js","sourceRoot":"","sources":["../../src/retrieval/hybrid-retriever.ts"],"names":[],"mappings":"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"}