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
package/dist/cli/setup.js CHANGED
@@ -86,8 +86,18 @@ const CLIENTS = {
86
86
  // ─── Server Entry ─────────────────────────────────────────────────────────────
87
87
  const SERVER_ENTRY = {
88
88
  command: 'npx',
89
- args: ['-y', 'cortex-mcp'],
89
+ args: ['-y', 'cortex-mcp@latest'],
90
+ transportType: 'stdio',
90
91
  };
92
+ // Entry with optional env vars (for users who set up OpenRouter)
93
+ function getServerEntryWithEnv() {
94
+ const entry = { ...SERVER_ENTRY };
95
+ // Check if OPENROUTER_API_KEY is set in the system environment
96
+ if (process.env.OPENROUTER_API_KEY) {
97
+ entry.env = { OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY };
98
+ }
99
+ return entry;
100
+ }
91
101
  // ─── Helpers ──────────────────────────────────────────────────────────────────
92
102
  function readJSON(filePath) {
93
103
  try {
@@ -124,7 +134,7 @@ function configureClient(clientKey) {
124
134
  return false;
125
135
  }
126
136
  const config = readJSON(client.configPath);
127
- const updated = setNestedKey(config, client.configKey, SERVER_ENTRY);
137
+ const updated = setNestedKey(config, client.configKey, getServerEntryWithEnv());
128
138
  writeJSON(client.configPath, updated);
129
139
  console.log(`[OK] ${client.name} configured!`);
130
140
  console.log(` Config: ${client.configPath}`);
@@ -141,9 +151,9 @@ function autoDetect() {
141
151
  }
142
152
  // ─── Git Hook Installation ────────────────────────────────────────────────────
143
153
  const HOOKS = {
144
- 'post-commit': '#!/bin/sh\n# Cortex — Auto-capture commits\ncortex-capture 2>/dev/null || true\n',
145
- 'post-checkout': '#!/bin/sh\n# Cortex — Track branch switches\ncortex-hooks checkout "$@" 2>/dev/null || true\n',
146
- 'post-merge': '#!/bin/sh\n# Cortex — Track merges\ncortex-hooks merge "$@" 2>/dev/null || true\n',
154
+ 'post-commit': '#!/bin/sh\n# Cortex — Auto-capture commits\nnpx cortex-capture 2>/dev/null || true\n',
155
+ 'post-checkout': '#!/bin/sh\n# Cortex — Track branch switches\nnpx cortex-hooks checkout "$@" 2>/dev/null || true\n',
156
+ 'post-merge': '#!/bin/sh\n# Cortex — Track merges\nnpx cortex-hooks merge "$@" 2>/dev/null || true\n',
147
157
  };
148
158
  function installGitHooks(workspaceRoot) {
149
159
  const gitDir = path.join(workspaceRoot, '.git');
@@ -164,7 +174,12 @@ function installGitHooks(workspaceRoot) {
164
174
  fs.appendFileSync(hookPath, `\n# Cortex MCP\n${appendLine}\n`);
165
175
  }
166
176
  else {
167
- fs.writeFileSync(hookPath, hookContent, { mode: 0o755 });
177
+ fs.writeFileSync(hookPath, hookContent);
178
+ // Make executable on Unix (safe no-op on Windows)
179
+ try {
180
+ fs.chmodSync(hookPath, 0o755);
181
+ }
182
+ catch { /* Windows ignores chmod */ }
168
183
  }
169
184
  installed++;
170
185
  }
@@ -173,35 +188,35 @@ function installGitHooks(workspaceRoot) {
173
188
  // ─── Prompt Rules Installation ────────────────────────────────────────────────
174
189
  // Each AI client has its own rules file. These tell the AI to auto-call
175
190
  // force_recall at conversation start and auto_learn after every response.
176
- const CORTEX_RULES = `# Cortex Memory Rules
177
-
178
- You have access to Cortex MCP — a persistent memory system that remembers everything across sessions.
179
-
180
- ## At Conversation Start (ALWAYS do this first)
181
- Call \`force_recall\` with the topic of the user's request.
182
- - Returns all stored corrections, decisions, conventions, and bug fixes
183
- - Prevents repeating past mistakes and re-making decisions already made
184
- - Example: force_recall({ topic: "authentication", currentFile: "auth.ts" })
185
-
186
- ## After EVERY Response (ALWAYS do this last)
187
- Call \`auto_learn\` with the full text of your response.
188
- - Automatically extracts and stores decisions, corrections, conventions, bug fixes
189
- - Zero effort — Cortex learns passively just from reading your replies
190
- - Example: auto_learn({ content: "We decided to use Prisma over TypeORM because..." })
191
-
192
- ## Store Critical Items Explicitly (when significant)
193
- Call \`store_memory\` for high-importance items that must never be forgotten:
194
- - Critical architecture decisions type: decision
195
- - Mistakes that must never be repeated type: correction
196
- - Project-wide coding rules → type: convention
197
- - Hard bugs and their root cause → type: bug_fix
198
-
199
- ## Before Writing Code
200
- Call \`verify_code\` to check that packages exist in package.json and functions are exported.
201
- Call \`verify_files\` to confirm file paths are real before referencing them.
202
-
203
- ## Memory Budget
204
- Cortex resets daily limits automatically every 24 hours.
191
+ const CORTEX_RULES = `# Cortex Memory Rules — MANDATORY
192
+
193
+ ## At Conversation Start (ALWAYS)
194
+ 1. ALWAYS call \`mcp_cortex_force_recall\` with the topic of the user's question
195
+ - This returns ALL corrections, decisions, conventions, and bug fixes
196
+ - Plus topic-specific search results
197
+ - DO NOT skip this step. It is mandatory.
198
+
199
+ ## After EVERY Response (ALWAYS)
200
+ 2. ALWAYS call \`mcp_cortex_auto_learn\` with the text of your response
201
+ - Cortex will automatically extract and store any decisions, corrections, conventions, or bug fixes
202
+ - This is how Cortex learns passively zero manual effort required
203
+ - DO NOT skip this step. It is mandatory.
204
+
205
+ ## When Decisions Are Made
206
+ ALSO call \`mcp_cortex_store_memory\` for high-importance items:
207
+ - A critical architectural decision (type: DECISION)
208
+ - A mistake that must never be repeated (type: CORRECTION)
209
+ - A project-wide coding convention (type: CONVENTION)
210
+ - A tricky bug that was hard to find (type: BUG_FIX)
211
+
212
+ ## Before Suggesting Code
213
+ Call \`mcp_cortex_verify_code\` to check:
214
+ - Are import packages real (exist in package.json)?
215
+ - Are imported functions actually exported?
216
+ - Are env variables defined in .env?
217
+
218
+ ## Before Referencing Files
219
+ Call \`mcp_cortex_verify_files\` to check if file paths are real.
205
220
  `;
206
221
  // Map of client → rules file path (relative to project root)
207
222
  const RULES_FILES = {
@@ -220,8 +235,8 @@ function installPromptRules(workspaceRoot, detectedClients) {
220
235
  // Don't overwrite — check if Cortex rules already present
221
236
  if (fs.existsSync(fullPath)) {
222
237
  const existing = fs.readFileSync(fullPath, 'utf-8');
223
- if (existing.includes('mcp_cortex_force_recall') || existing.includes('force_recall') || existing.includes('Cortex Memory Rules'))
224
- continue; // Already installed (old or new format)
238
+ if (existing.includes('mcp_cortex_force_recall'))
239
+ continue; // Already installed
225
240
  // Append to existing rules
226
241
  fs.appendFileSync(fullPath, '\n\n' + CORTEX_RULES);
227
242
  console.log(`[OK] Cortex rules appended to ${rulesFile}`);
@@ -277,7 +292,7 @@ function main() {
277
292
  const count = installGitHooks(cwd);
278
293
  if (count > 0) {
279
294
  console.log(`[OK] ${count} git hook(s) installed (commits, branches, merges)`);
280
- console.log(' Every commit will now be auto-captured as a memory!');
295
+ console.log(' Every code change will now be auto-captured as a memory!');
281
296
  }
282
297
  else {
283
298
  console.log('[OK] Git hooks already installed');
@@ -287,29 +302,12 @@ function main() {
287
302
  console.log('[INFO] No git repo detected in current directory.');
288
303
  console.log(' Run "cortex-setup" inside a git repo to enable auto-capture.');
289
304
  }
305
+ console.log('\nDone! Restart your AI client to activate Cortex.');
290
306
  console.log('');
291
- console.log('══════════════════════════════════════════════════════════');
292
- console.log(' ✅ Cortex MCP is Ready!');
293
- console.log('══════════════════════════════════════════════════════════');
294
- console.log('');
295
- console.log(' NEXT STEPS:');
296
- console.log(' 1. Restart your AI client (Cursor, Claude, etc.)');
297
- console.log(' 2. Start a new conversation — Cortex activates automatically');
298
- console.log(' 3. Open your brain dashboard anytime:');
299
- console.log(' http://localhost:3456');
300
- console.log('');
301
- console.log(' VERIFY IT\'S WORKING:');
302
- console.log(' Ask your AI: "What does Cortex know about this project?"');
303
- console.log(' Or ask: "Call force_recall with topic: test"');
304
- console.log('');
305
- console.log(' HOW MEMORIES ARE STORED:');
306
- console.log(' • Auto: AI calls auto_learn after every response (passive)');
307
- console.log(' • Auto: Git commits captured on every push');
308
- console.log(' • Manual: Tell AI "remember that we use TypeScript strict mode"');
309
- console.log('');
310
- console.log(' RESOURCE URI (for clients that support resource auto-read):');
311
- console.log(' memory://brain/context');
312
- console.log('══════════════════════════════════════════════════════════');
307
+ console.log('💡 TIP: Make Cortex 3x smarter for FREE:');
308
+ console.log(' 1. Get a free API key at https://openrouter.ai/keys');
309
+ console.log(' 2. Add OPENROUTER_API_KEY to your MCP config env');
310
+ console.log(' 3. Cortex will use free LLM for smarter memory extraction');
313
311
  console.log('');
314
312
  }
315
313
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -18,14 +18,14 @@ exports.CONFIG = {
18
18
  // Memory decay
19
19
  INSIGHT_MAX_AGE_DAYS: 30,
20
20
  UNUSED_MAX_AGE_DAYS: 60,
21
- MEMORY_CAP: 10000,
21
+ MEMORY_CAP: 5000,
22
22
  // Cache
23
23
  CACHE_TTL: 60_000, // 1 minute
24
24
  CACHE_MAX: 50,
25
25
  // Embeddings
26
26
  EMBEDDING_TIMEOUT: 30_000, // 30 seconds
27
27
  // Context
28
- MAX_CONTEXT_CHARS: parseInt(process.env.CORTEX_MAX_CONTEXT_CHARS || "12000", 10),
28
+ MAX_CONTEXT_CHARS: 3000,
29
29
  MAX_RECALL_RESULTS: 10,
30
30
  // Server
31
31
  DASHBOARD_PORT: 3456,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,oCAAsC;AAEzB,QAAA,MAAM,GAAG;IAClB,gCAAgC;IAChC,UAAU,EAAE;QACR,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;QAC5B,CAAC,kBAAU,CAAC,QAAQ,CAAC,EAAE,GAAG;QAC1B,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;QAC5B,CAAC,kBAAU,CAAC,OAAO,CAAC,EAAE,GAAG;QACzB,CAAC,kBAAU,CAAC,OAAO,CAAC,EAAE,GAAG;QACzB,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;KACL;IAE3B,eAAe;IACf,oBAAoB,EAAE,EAAE;IACxB,mBAAmB,EAAE,EAAE;IACvB,UAAU,EAAE,GAAG;IAEf,QAAQ;IACR,SAAS,EAAE,MAAM,EAAM,WAAW;IAClC,SAAS,EAAE,EAAE;IAEb,aAAa;IACb,iBAAiB,EAAE,MAAM,EAAE,aAAa;IAExC,UAAU;IACV,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,EAAE;IAEtB,SAAS;IACT,cAAc,EAAE,IAAI;CACvB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,oCAAsC;AAEzB,QAAA,MAAM,GAAG;IAClB,gCAAgC;IAChC,UAAU,EAAE;QACR,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;QAC5B,CAAC,kBAAU,CAAC,QAAQ,CAAC,EAAE,GAAG;QAC1B,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;QAC5B,CAAC,kBAAU,CAAC,OAAO,CAAC,EAAE,GAAG;QACzB,CAAC,kBAAU,CAAC,OAAO,CAAC,EAAE,GAAG;QACzB,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,GAAG;KACL;IAE3B,eAAe;IACf,oBAAoB,EAAE,EAAE;IACxB,mBAAmB,EAAE,EAAE;IACvB,UAAU,EAAE,IAAI;IAEhB,QAAQ;IACR,SAAS,EAAE,MAAM,EAAM,WAAW;IAClC,SAAS,EAAE,EAAE;IAEb,aAAa;IACb,iBAAiB,EAAE,MAAM,EAAE,aAAa;IAExC,UAAU;IACV,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,EAAE;IAEtB,SAAS;IACT,cAAc,EAAE,IAAI;CACvB,CAAC"}
@@ -2,9 +2,17 @@ import type { SqliteDatabase } from '../types';
2
2
  export declare class CognitiveDatabase {
3
3
  private db;
4
4
  private _dbPath;
5
+ private _writeCount;
6
+ private _checkpointTimer;
7
+ private static readonly CHECKPOINT_WRITE_THRESHOLD;
8
+ private static readonly CHECKPOINT_INTERVAL_MS;
5
9
  constructor(storagePath: string);
6
10
  private initialize;
7
11
  private migrate;
12
+ /** Start periodic WAL checkpointing (every 30 min) */
13
+ private startCheckpointTimer;
14
+ /** Track a write operation and auto-checkpoint if threshold reached */
15
+ trackWrite(): void;
8
16
  /** Get the raw database connection for direct queries */
9
17
  get connection(): SqliteDatabase;
10
18
  /** Get database file path */
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0I/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,WAAW,EAAE,MAAM;IAiB/B,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,OAAO;IAMf,yDAAyD;IACzD,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,6BAA6B;IAC7B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,iCAAiC;IACjC,IAAI,SAAS,IAAI,MAAM,CAOtB;IAED,sCAAsC;IACtC,UAAU,IAAI,IAAI;IAIlB,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAId"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0I/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,gBAAgB,CAA+C;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAkB;gBAEpD,WAAW,EAAE,MAAM;IAkB/B,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,OAAO;IAMf,sDAAsD;IACtD,OAAO,CAAC,oBAAoB;IAY5B,uEAAuE;IACvE,UAAU,IAAI,IAAI;IAQlB,yDAAyD;IACzD,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,6BAA6B;IAC7B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,iCAAiC;IACjC,IAAI,SAAS,IAAI,MAAM,CAOtB;IAED,sCAAsC;IACtC,UAAU,IAAI,IAAI;IAIlB,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAQd"}
@@ -44,7 +44,7 @@ exports.CognitiveDatabase = void 0;
44
44
  const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
45
45
  const path = __importStar(require("path"));
46
46
  const fs = __importStar(require("fs"));
47
- const SCHEMA_VERSION = 2;
47
+ const SCHEMA_VERSION = 1;
48
48
  const SCHEMA_SQL = `
49
49
  -- ═══ SETTINGS ═══
50
50
  PRAGMA journal_mode=WAL;
@@ -144,7 +144,6 @@ CREATE TABLE IF NOT EXISTS user_signals (
144
144
  correction TEXT,
145
145
  timestamp INTEGER NOT NULL
146
146
  );
147
- CREATE INDEX IF NOT EXISTS idx_signals_memory ON user_signals(memory_id);
148
147
 
149
148
  -- ═══ RETRIEVAL FEEDBACK ═══
150
149
  CREATE TABLE IF NOT EXISTS feedback_log (
@@ -182,6 +181,10 @@ CREATE TABLE IF NOT EXISTS adaptive_config (
182
181
  class CognitiveDatabase {
183
182
  db;
184
183
  _dbPath;
184
+ _writeCount = 0;
185
+ _checkpointTimer = null;
186
+ static CHECKPOINT_WRITE_THRESHOLD = 100;
187
+ static CHECKPOINT_INTERVAL_MS = 30 * 60 * 1000; // 30 minutes
185
188
  constructor(storagePath) {
186
189
  const dataDir = path.join(storagePath, 'data');
187
190
  if (!fs.existsSync(dataDir)) {
@@ -194,6 +197,7 @@ class CognitiveDatabase {
194
197
  : undefined;
195
198
  this.db = new better_sqlite3_1.default(this._dbPath, { nativeBinding });
196
199
  this.initialize();
200
+ this.startCheckpointTimer();
197
201
  }
198
202
  initialize() {
199
203
  // Execute pragmas first (they can't be in a transaction)
@@ -218,61 +222,34 @@ class CognitiveDatabase {
218
222
  }
219
223
  }
220
224
  }
221
- migrate(fromVersion) {
222
- console.log(`[cortex-mcp] Migrating database from schema v${fromVersion} to v${SCHEMA_VERSION}...`);
223
- // ─── Migration to v2: Add missing columns added after v1.0.4 ─────────────
224
- if (fromVersion < 2) {
225
- const existingCols = this.db.pragma('table_info(memory_units)').map((c) => c.name);
226
- // created_at required by git-hooks, undo_last, memory ordering
227
- if (!existingCols.includes('created_at')) {
228
- this.db.exec('ALTER TABLE memory_units ADD COLUMN created_at INTEGER NOT NULL DEFAULT 0');
229
- // Back-fill with timestamp value for existing rows
230
- this.db.exec('UPDATE memory_units SET created_at = timestamp WHERE created_at = 0');
231
- console.log('[cortex-mcp] Migration: added created_at column');
232
- }
233
- // access_count — required by memory ranker
234
- if (!existingCols.includes('access_count')) {
235
- this.db.exec('ALTER TABLE memory_units ADD COLUMN access_count INTEGER DEFAULT 0');
236
- console.log('[cortex-mcp] Migration: added access_count column');
237
- }
238
- // last_accessed — required by touch()
239
- if (!existingCols.includes('last_accessed')) {
240
- this.db.exec('ALTER TABLE memory_units ADD COLUMN last_accessed INTEGER');
241
- console.log('[cortex-mcp] Migration: added last_accessed column');
242
- }
243
- // confidence — required by confidence decay
244
- if (!existingCols.includes('confidence')) {
245
- this.db.exec('ALTER TABLE memory_units ADD COLUMN confidence REAL DEFAULT 0.5');
246
- console.log('[cortex-mcp] Migration: added confidence column');
247
- }
248
- // importance — required by context builder ordering
249
- if (!existingCols.includes('importance')) {
250
- this.db.exec('ALTER TABLE memory_units ADD COLUMN importance REAL DEFAULT 0.5');
251
- console.log('[cortex-mcp] Migration: added importance column');
252
- }
253
- // tags — required by pin/unpin
254
- if (!existingCols.includes('tags')) {
255
- this.db.exec("ALTER TABLE memory_units ADD COLUMN tags TEXT DEFAULT '[]'");
256
- console.log('[cortex-mcp] Migration: added tags column');
225
+ migrate(_fromVersion) {
226
+ // Future migrations go here
227
+ // if (fromVersion < 2) { ... }
228
+ this.db.prepare('UPDATE schema_version SET version = ?').run(SCHEMA_VERSION);
229
+ }
230
+ /** Start periodic WAL checkpointing (every 30 min) */
231
+ startCheckpointTimer() {
232
+ this._checkpointTimer = setInterval(() => {
233
+ try {
234
+ this.checkpoint();
257
235
  }
258
- // Ensure FTS table exists (may be missing in very old DBs)
259
- const hasFTS = this.db
260
- .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memory_fts'")
261
- .get();
262
- if (!hasFTS) {
263
- this.db.exec(`
264
- CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
265
- id UNINDEXED, intent, action, reason, impact, tags,
266
- content='memory_units', content_rowid='rowid',
267
- tokenize='porter unicode61'
268
- );
269
- INSERT INTO memory_fts(memory_fts) VALUES('rebuild');
270
- `);
271
- console.log('[cortex-mcp] Migration: rebuilt FTS index');
236
+ catch { }
237
+ }, CognitiveDatabase.CHECKPOINT_INTERVAL_MS);
238
+ // Don't block process exit
239
+ if (this._checkpointTimer.unref) {
240
+ this._checkpointTimer.unref();
241
+ }
242
+ }
243
+ /** Track a write operation and auto-checkpoint if threshold reached */
244
+ trackWrite() {
245
+ this._writeCount++;
246
+ if (this._writeCount >= CognitiveDatabase.CHECKPOINT_WRITE_THRESHOLD) {
247
+ this._writeCount = 0;
248
+ try {
249
+ this.checkpoint();
272
250
  }
251
+ catch { }
273
252
  }
274
- this.db.prepare('UPDATE schema_version SET version = ?').run(SCHEMA_VERSION);
275
- console.log(`[cortex-mcp] Database migration complete. Schema is now v${SCHEMA_VERSION}.`);
276
253
  }
277
254
  /** Get the raw database connection for direct queries */
278
255
  get connection() {
@@ -298,6 +275,10 @@ class CognitiveDatabase {
298
275
  }
299
276
  /** Close the database connection */
300
277
  close() {
278
+ if (this._checkpointTimer) {
279
+ clearInterval(this._checkpointTimer);
280
+ this._checkpointTimer = null;
281
+ }
301
282
  this.checkpoint();
302
283
  this.db.close();
303
284
  }
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,oEAAsC;AACtC,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoIlB,CAAC;AAEF,MAAa,iBAAiB;IACpB,EAAE,CAAiB;IACnB,OAAO,CAAS;IAChB,WAAW,GAAW,CAAC,CAAC;IACxB,gBAAgB,GAA0C,IAAI,CAAC;IAC/D,MAAM,CAAU,0BAA0B,GAAG,GAAG,CAAC;IACjD,MAAM,CAAU,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAE9E,YAAY,WAAmB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAElD,kFAAkF;QAClF,MAAM,aAAa,GAAI,OAAe,CAAC,GAAG;YACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;YAClE,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEO,UAAU;QAChB,yDAAyD;QACzD,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAElC,uBAAuB;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE;aAC5B,OAAO,CAAC,6EAA6E,CAAC;aACtF,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAEhE,CAAC;YACd,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,YAAoB;QAClC,4BAA4B;QAC5B,+BAA+B;QAC/B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/E,CAAC;IAED,sDAAsD;IAC9C,oBAAoB;QAC1B,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;QAC7C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,UAAU;QACR,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,0BAA0B,EAAE,CAAC;YACrE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC;gBAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,iCAAiC;IACjC,IAAI,SAAS;QACX,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,UAAU;QACR,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAED,oCAAoC;IACpC,KAAK;QACH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;;AAlHH,8CAmHC"}
@@ -8,6 +8,10 @@ export declare class EventLog {
8
8
  private db;
9
9
  private appendStmt;
10
10
  private markProcessedStmt;
11
+ private getUnprocessedStmt;
12
+ private getByFileStmt;
13
+ private getRecentStmt;
14
+ private countStmt;
11
15
  constructor(database: CognitiveDatabase);
12
16
  /** Append a new event (immutable — never modified after insert) */
13
17
  append(event: BrainEvent): number;
@@ -1 +1 @@
1
- {"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../src/db/event-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,QAAQ;IACjB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,iBAAiB,CAAwC;gBAErD,QAAQ,EAAE,iBAAiB;IAavC,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAcjC,qDAAqD;IACrD,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE;IAW3C,iCAAiC;IACjC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,4CAA4C;IAC5C,cAAc,CAAC,KAAK,GAAE,MAAY,GAAG,UAAU,EAAE;IAQjD,yBAAyB;IACzB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAQ7D,wBAAwB;IACxB,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAQ3C,wBAAwB;IACxB,KAAK,IAAI,MAAM;IAKf,OAAO,CAAC,UAAU;CAarB"}
1
+ {"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../src/db/event-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,QAAQ;IACjB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAM;gBAEX,QAAQ,EAAE,iBAAiB;IAmBvC,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAcjC,qDAAqD;IACrD,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE;IAW3C,iCAAiC;IACjC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,4CAA4C;IAC5C,cAAc,CAAC,KAAK,GAAE,MAAY,GAAG,UAAU,EAAE;IAKjD,yBAAyB;IACzB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAK7D,wBAAwB;IACxB,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAK3C,wBAAwB;IACxB,KAAK,IAAI,MAAM;IAKf,OAAO,CAAC,UAAU;CAarB"}
@@ -5,6 +5,11 @@ class EventLog {
5
5
  db;
6
6
  appendStmt;
7
7
  markProcessedStmt;
8
+ // Cached read-query prepared statements
9
+ getUnprocessedStmt;
10
+ getByFileStmt;
11
+ getRecentStmt;
12
+ countStmt;
8
13
  constructor(database) {
9
14
  this.db = database.connection;
10
15
  this.appendStmt = this.db.prepare(`
@@ -14,6 +19,11 @@ class EventLog {
14
19
  this.markProcessedStmt = this.db.prepare(`
15
20
  UPDATE events SET processed = 1 WHERE id = ?
16
21
  `);
22
+ // Cache read query statements
23
+ this.getUnprocessedStmt = this.db.prepare('SELECT * FROM events WHERE processed = 0 ORDER BY timestamp ASC LIMIT ?');
24
+ this.getByFileStmt = this.db.prepare('SELECT * FROM events WHERE file = ? ORDER BY timestamp DESC LIMIT ?');
25
+ this.getRecentStmt = this.db.prepare('SELECT * FROM events ORDER BY timestamp DESC LIMIT ?');
26
+ this.countStmt = this.db.prepare('SELECT COUNT(*) as cnt FROM events');
17
27
  }
18
28
  /** Append a new event (immutable — never modified after insert) */
19
29
  append(event) {
@@ -45,28 +55,22 @@ class EventLog {
45
55
  }
46
56
  /** Get unprocessed events (oldest first) */
47
57
  getUnprocessed(limit = 100) {
48
- const rows = this.db
49
- .prepare('SELECT * FROM events WHERE processed = 0 ORDER BY timestamp ASC LIMIT ?')
50
- .all(limit);
58
+ const rows = this.getUnprocessedStmt.all(limit);
51
59
  return rows.map(this.rowToEvent);
52
60
  }
53
61
  /** Get events by file */
54
62
  getByFile(filePath, limit = 50) {
55
- const rows = this.db
56
- .prepare('SELECT * FROM events WHERE file = ? ORDER BY timestamp DESC LIMIT ?')
57
- .all(filePath, limit);
63
+ const rows = this.getByFileStmt.all(filePath, limit);
58
64
  return rows.map(this.rowToEvent);
59
65
  }
60
66
  /** Get recent events */
61
67
  getRecent(limit = 50) {
62
- const rows = this.db
63
- .prepare('SELECT * FROM events ORDER BY timestamp DESC LIMIT ?')
64
- .all(limit);
68
+ const rows = this.getRecentStmt.all(limit);
65
69
  return rows.map(this.rowToEvent);
66
70
  }
67
71
  /** Total event count */
68
72
  count() {
69
- const row = this.db.prepare('SELECT COUNT(*) as cnt FROM events').get();
73
+ const row = this.countStmt.get();
70
74
  return row.cnt;
71
75
  }
72
76
  rowToEvent(row) {
@@ -1 +1 @@
1
- {"version":3,"file":"event-log.js","sourceRoot":"","sources":["../../src/db/event-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-log.js","sourceRoot":"","sources":["../../src/db/event-log.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,25 @@ export declare class MemoryStore {
9
9
  private touchStmt;
10
10
  private insertEdgeStmt;
11
11
  private insertVectorStmt;
12
+ private getActiveStmt;
13
+ private getByTypeStmt;
14
+ private getByFileStmt;
15
+ private searchFTSStmt;
16
+ private findByTagStmt;
17
+ private getByTimestampRangeStmt;
18
+ private getByDirectoryStmt;
19
+ private getStaleStmt;
20
+ private getLeastImportantStmt;
21
+ private activeCountStmt;
22
+ private totalCountStmt;
23
+ private findDuplicateStmt;
24
+ private getEdgesFromStmt;
25
+ private getEdgesToStmt;
12
26
  private vectors;
27
+ private _transaction;
13
28
  constructor(database: CognitiveDatabase);
29
+ /** Run multiple operations in a single SQLite transaction (10-100x faster for bulk writes) */
30
+ runTransaction(fn: () => void): void;
14
31
  /** Create a new memory unit (with deduplication) */
15
32
  add(memory: Partial<MemoryUnit> & {
16
33
  type: MemoryType;
@@ -19,8 +36,8 @@ export declare class MemoryStore {
19
36
  }): MemoryUnit;
20
37
  /**
21
38
  * Find a duplicate memory by type + intent similarity.
22
- * Uses word-overlap (Jaccard similarity) no ML needed.
23
- * Returns existing memory if similarity > 0.7, else undefined.
39
+ * Uses HYBRID approach: Jaccard word-overlap + cosine similarity (when vectors available).
40
+ * Returns existing memory if similarity > threshold, else undefined.
24
41
  */
25
42
  private findDuplicate;
26
43
  /** Tokenize text into lowercase words (stop-word filtered) */
@@ -39,7 +56,7 @@ export declare class MemoryStore {
39
56
  getByType(type: MemoryType, limit?: number): MemoryUnit[];
40
57
  /** Get memories related to a file */
41
58
  getByFile(filePath: string, limit?: number): MemoryUnit[];
42
- /** Full-text search via FTS5 */
59
+ /** Full-text search via FTS5 (with query sanitization) */
43
60
  searchFTS(query: string, limit?: number): ScoredMemory[];
44
61
  /** Store a vector embedding */
45
62
  storeVector(id: string, embedding: Float32Array): void;
@@ -55,6 +72,16 @@ export declare class MemoryStore {
55
72
  getEdgesTo(targetId: string): GraphEdge[];
56
73
  /** Graph traversal — find related memories within N hops */
57
74
  getRelated(memoryId: string, maxHops?: number, limit?: number): ScoredMemory[];
75
+ /** Find active memories by tag (SQL LIKE on JSON tags column) */
76
+ findByTag(tag: string, limit?: number): MemoryUnit[];
77
+ /** Get active memories within a timestamp range */
78
+ getActiveByTimestampRange(start: number, end: number, limit?: number): MemoryUnit[];
79
+ /** Get active memories related to files in a directory (SQL LIKE prefix) */
80
+ getByDirectory(dirPrefix: string, limit?: number): MemoryUnit[];
81
+ /** Get active memories with 0 access older than a given age */
82
+ getStaleMemories(maxAgeMs: number, limit?: number): MemoryUnit[];
83
+ /** Get active memories sorted by importance ASC (for cap enforcement) */
84
+ getLeastImportant(limit: number): MemoryUnit[];
58
85
  /** Total active memories */
59
86
  activeCount(): number;
60
87
  /** Total memories (including inactive) */
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/db/memory-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,YAAY,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,WAAW;IACpB,OAAO,CAAC,EAAE,CAAiB;IAG3B,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,gBAAgB,CAAwC;IAGhE,OAAO,CAAC,OAAO,CAAwC;gBAE3C,QAAQ,EAAE,iBAAiB;IAkEvC,oDAAoD;IACpD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAuDnG;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAUhB,gCAAgC;IAChC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAoBtD,yBAAyB;IACzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAKvC,wCAAwC;IACxC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAInD,iDAAiD;IACjD,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIvB,8BAA8B;IAC9B,SAAS,CAAC,KAAK,GAAE,MAAa,GAAG,UAAU,EAAE;IAO7C,2BAA2B;IAC3B,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,GAAE,MAAY,GAAG,UAAU,EAAE;IAO9D,qCAAqC;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAS7D,gCAAgC;IAChC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAqB5D,+BAA+B;IAC/B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAMtD,kCAAkC;IAClC,YAAY,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAoB9E,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;IAWnB,mCAAmC;IACnC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAU9B,qCAAqC;IACrC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAM3C,mCAAmC;IACnC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAMzC,4DAA4D;IAC5D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,EAAE,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAgCrF,4BAA4B;IAC5B,WAAW,IAAI,MAAM;IAOrB,0CAA0C;IAC1C,UAAU,IAAI,MAAM;IASpB,OAAO,CAAC,WAAW;IAwBZ,YAAY,IAAI,IAAI;CAU9B"}
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/db/memory-store.ts"],"names":[],"mappings":"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"}