agentdb 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (519) hide show
  1. package/README.md +208 -2593
  2. package/dist/src/backends/GraphBackend.d.ts +8 -8
  3. package/dist/src/backends/GraphBackend.d.ts.map +1 -1
  4. package/dist/src/backends/GraphBackend.js +15 -16
  5. package/dist/src/backends/GraphBackend.js.map +1 -1
  6. package/dist/src/backends/LearningBackend.d.ts +2 -2
  7. package/dist/src/backends/LearningBackend.d.ts.map +1 -1
  8. package/dist/src/backends/LearningBackend.js +10 -11
  9. package/dist/src/backends/LearningBackend.js.map +1 -1
  10. package/dist/src/backends/VectorBackend.d.ts +10 -0
  11. package/dist/src/backends/VectorBackend.d.ts.map +1 -1
  12. package/dist/src/backends/detector.d.ts +3 -25
  13. package/dist/src/backends/detector.d.ts.map +1 -1
  14. package/dist/src/backends/detector.js +15 -119
  15. package/dist/src/backends/detector.js.map +1 -1
  16. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +55 -1
  17. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
  18. package/dist/src/backends/graph/GraphDatabaseAdapter.js +133 -7
  19. package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
  20. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts +2 -2
  21. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts.map +1 -1
  22. package/dist/src/backends/hnswlib/HNSWLibBackend.js +12 -21
  23. package/dist/src/backends/hnswlib/HNSWLibBackend.js.map +1 -1
  24. package/dist/src/backends/index.d.ts +3 -25
  25. package/dist/src/backends/index.d.ts.map +1 -1
  26. package/dist/src/backends/index.js +1 -23
  27. package/dist/src/backends/index.js.map +1 -1
  28. package/dist/src/backends/ruvector/RuVectorBackend.d.ts +4 -4
  29. package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
  30. package/dist/src/backends/ruvector/RuVectorBackend.js +2 -2
  31. package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
  32. package/dist/src/backends/ruvector/RuVectorLearning.d.ts.map +1 -1
  33. package/dist/src/backends/ruvector/RuVectorLearning.js +5 -10
  34. package/dist/src/backends/ruvector/RuVectorLearning.js.map +1 -1
  35. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts.map +1 -1
  36. package/dist/src/backends/rvf/SelfLearningRvfBackend.js +45 -2
  37. package/dist/src/backends/rvf/SelfLearningRvfBackend.js.map +1 -1
  38. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts +26 -0
  39. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +1 -1
  40. package/dist/src/backends/rvf/SqlJsRvfBackend.js +93 -31
  41. package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +1 -1
  42. package/dist/src/benchmark/BenchmarkSuite.d.ts.map +1 -1
  43. package/dist/src/benchmark/BenchmarkSuite.js +0 -2
  44. package/dist/src/benchmark/BenchmarkSuite.js.map +1 -1
  45. package/dist/src/benchmarks/wasm-vector-benchmark.d.ts +10 -0
  46. package/dist/src/benchmarks/wasm-vector-benchmark.d.ts.map +1 -0
  47. package/dist/src/benchmarks/wasm-vector-benchmark.js +196 -0
  48. package/dist/src/benchmarks/wasm-vector-benchmark.js.map +1 -0
  49. package/dist/src/browser/AdvancedFeatures.d.ts.map +1 -1
  50. package/dist/src/browser/AdvancedFeatures.js +10 -3
  51. package/dist/src/browser/AdvancedFeatures.js.map +1 -1
  52. package/dist/src/browser/AttentionBrowser.d.ts.map +1 -1
  53. package/dist/src/browser/AttentionBrowser.js +13 -5
  54. package/dist/src/browser/AttentionBrowser.js.map +1 -1
  55. package/dist/src/browser/HNSWIndex.d.ts +1 -31
  56. package/dist/src/browser/HNSWIndex.d.ts.map +1 -1
  57. package/dist/src/browser/HNSWIndex.js +18 -136
  58. package/dist/src/browser/HNSWIndex.js.map +1 -1
  59. package/dist/src/browser/ProductQuantization.d.ts.map +1 -1
  60. package/dist/src/browser/ProductQuantization.js +1 -0
  61. package/dist/src/browser/ProductQuantization.js.map +1 -1
  62. package/dist/src/browser/index.d.ts +3 -3
  63. package/dist/src/browser/index.d.ts.map +1 -1
  64. package/dist/src/browser/index.js +1 -2
  65. package/dist/src/browser/index.js.map +1 -1
  66. package/dist/src/cli/agentdb-cli.d.ts +2 -3
  67. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  68. package/dist/src/cli/agentdb-cli.js +142 -96
  69. package/dist/src/cli/agentdb-cli.js.map +1 -1
  70. package/dist/src/cli/commands/attention.js +15 -5
  71. package/dist/src/cli/commands/attention.js.map +1 -1
  72. package/dist/src/cli/commands/doctor.d.ts +0 -2
  73. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  74. package/dist/src/cli/commands/doctor.js +6 -111
  75. package/dist/src/cli/commands/doctor.js.map +1 -1
  76. package/dist/src/cli/commands/hyperbolic.d.ts.map +1 -1
  77. package/dist/src/cli/commands/hyperbolic.js +15 -3
  78. package/dist/src/cli/commands/hyperbolic.js.map +1 -1
  79. package/dist/src/cli/commands/init.d.ts +1 -2
  80. package/dist/src/cli/commands/init.d.ts.map +1 -1
  81. package/dist/src/cli/commands/init.js +7 -30
  82. package/dist/src/cli/commands/init.js.map +1 -1
  83. package/dist/src/cli/commands/install-embeddings.d.ts +1 -1
  84. package/dist/src/cli/commands/install-embeddings.d.ts.map +1 -1
  85. package/dist/src/cli/commands/install-embeddings.js +17 -11
  86. package/dist/src/cli/commands/install-embeddings.js.map +1 -1
  87. package/dist/src/cli/commands/learn.d.ts.map +1 -1
  88. package/dist/src/cli/commands/learn.js +12 -6
  89. package/dist/src/cli/commands/learn.js.map +1 -1
  90. package/dist/src/cli/commands/migrate.d.ts.map +1 -1
  91. package/dist/src/cli/commands/migrate.js +31 -10
  92. package/dist/src/cli/commands/migrate.js.map +1 -1
  93. package/dist/src/cli/commands/route.d.ts.map +1 -1
  94. package/dist/src/cli/commands/route.js +6 -1
  95. package/dist/src/cli/commands/route.js.map +1 -1
  96. package/dist/src/cli/commands/simulate-report.js +14 -2
  97. package/dist/src/cli/commands/simulate-report.js.map +1 -1
  98. package/dist/src/cli/commands/simulate-wizard.js.map +1 -1
  99. package/dist/src/cli/commands/simulate.d.ts +7 -0
  100. package/dist/src/cli/commands/simulate.d.ts.map +1 -0
  101. package/dist/src/cli/commands/simulate.js +100 -0
  102. package/dist/src/cli/commands/simulate.js.map +1 -0
  103. package/dist/src/cli/commands/status.js +1 -5
  104. package/dist/src/cli/commands/status.js.map +1 -1
  105. package/dist/src/cli/lib/attention-config.d.ts +2 -2
  106. package/dist/src/cli/lib/attention-config.d.ts.map +1 -1
  107. package/dist/src/cli/lib/attention-config.js +1 -2
  108. package/dist/src/cli/lib/attention-config.js.map +1 -1
  109. package/dist/src/cli/lib/config-manager.d.ts +110 -0
  110. package/dist/src/cli/lib/config-manager.d.ts.map +1 -0
  111. package/dist/src/cli/lib/config-manager.js +512 -0
  112. package/dist/src/cli/lib/config-manager.js.map +1 -0
  113. package/dist/src/cli/lib/config-validator.d.ts +1 -1
  114. package/dist/src/cli/lib/config-validator.d.ts.map +1 -1
  115. package/dist/src/cli/lib/health-monitor.d.ts +149 -0
  116. package/dist/src/cli/lib/health-monitor.d.ts.map +1 -0
  117. package/dist/src/cli/lib/health-monitor.js +380 -0
  118. package/dist/src/cli/lib/health-monitor.js.map +1 -0
  119. package/dist/src/cli/lib/history-tracker.d.ts +103 -0
  120. package/dist/src/cli/lib/history-tracker.d.ts.map +1 -0
  121. package/dist/src/cli/lib/history-tracker.js +352 -0
  122. package/dist/src/cli/lib/history-tracker.js.map +1 -0
  123. package/dist/src/cli/lib/report-store.d.ts.map +1 -1
  124. package/dist/src/cli/lib/report-store.js +3 -5
  125. package/dist/src/cli/lib/report-store.js.map +1 -1
  126. package/dist/src/cli/lib/simulation-registry.d.ts +1 -1
  127. package/dist/src/cli/lib/simulation-registry.d.ts.map +1 -1
  128. package/dist/src/cli/lib/simulation-registry.js +0 -1
  129. package/dist/src/cli/lib/simulation-registry.js.map +1 -1
  130. package/dist/src/cli/lib/simulation-runner.d.ts +1 -1
  131. package/dist/src/cli/lib/simulation-runner.d.ts.map +1 -1
  132. package/dist/src/cli/lib/simulation-runner.js +1 -4
  133. package/dist/src/cli/lib/simulation-runner.js.map +1 -1
  134. package/dist/src/compatibility/DeprecationWarnings.d.ts.map +1 -1
  135. package/dist/src/compatibility/V1toV2Adapter.d.ts +2 -2
  136. package/dist/src/compatibility/V1toV2Adapter.d.ts.map +1 -1
  137. package/dist/src/compatibility/V1toV2Adapter.js +1 -14
  138. package/dist/src/compatibility/V1toV2Adapter.js.map +1 -1
  139. package/dist/src/compatibility/VersionDetector.d.ts +1 -1
  140. package/dist/src/compatibility/VersionDetector.d.ts.map +1 -1
  141. package/dist/src/compatibility/VersionDetector.js +3 -3
  142. package/dist/src/compatibility/VersionDetector.js.map +1 -1
  143. package/dist/src/compatibility/index.d.ts +3 -0
  144. package/dist/src/compatibility/index.d.ts.map +1 -1
  145. package/dist/src/compatibility/index.js +11 -0
  146. package/dist/src/compatibility/index.js.map +1 -1
  147. package/dist/src/controllers/AttentionService.d.ts +98 -122
  148. package/dist/src/controllers/AttentionService.d.ts.map +1 -1
  149. package/dist/src/controllers/AttentionService.js +463 -238
  150. package/dist/src/controllers/AttentionService.js.map +1 -1
  151. package/dist/src/controllers/CausalMemoryGraph.d.ts +4 -4
  152. package/dist/src/controllers/CausalMemoryGraph.d.ts.map +1 -1
  153. package/dist/src/controllers/CausalMemoryGraph.js +7 -8
  154. package/dist/src/controllers/CausalMemoryGraph.js.map +1 -1
  155. package/dist/src/controllers/CausalRecall.d.ts +3 -2
  156. package/dist/src/controllers/CausalRecall.d.ts.map +1 -1
  157. package/dist/src/controllers/CausalRecall.js +21 -10
  158. package/dist/src/controllers/CausalRecall.js.map +1 -1
  159. package/dist/src/controllers/ContextSynthesizer.d.ts +1 -1
  160. package/dist/src/controllers/ContextSynthesizer.d.ts.map +1 -1
  161. package/dist/src/controllers/EmbeddingService.d.ts +29 -0
  162. package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
  163. package/dist/src/controllers/EmbeddingService.js +149 -34
  164. package/dist/src/controllers/EmbeddingService.js.map +1 -1
  165. package/dist/src/controllers/EnhancedEmbeddingService.d.ts.map +1 -1
  166. package/dist/src/controllers/EnhancedEmbeddingService.js +14 -7
  167. package/dist/src/controllers/EnhancedEmbeddingService.js.map +1 -1
  168. package/dist/src/controllers/ExplainableRecall.d.ts +5 -4
  169. package/dist/src/controllers/ExplainableRecall.d.ts.map +1 -1
  170. package/dist/src/controllers/ExplainableRecall.js +12 -20
  171. package/dist/src/controllers/ExplainableRecall.js.map +1 -1
  172. package/dist/src/controllers/HNSWIndex.d.ts +5 -4
  173. package/dist/src/controllers/HNSWIndex.d.ts.map +1 -1
  174. package/dist/src/controllers/HNSWIndex.js +6 -9
  175. package/dist/src/controllers/HNSWIndex.js.map +1 -1
  176. package/dist/src/controllers/LearningSystem.d.ts +10 -105
  177. package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
  178. package/dist/src/controllers/LearningSystem.js +28 -39
  179. package/dist/src/controllers/LearningSystem.js.map +1 -1
  180. package/dist/src/controllers/MMRDiversityRanker.d.ts +1 -1
  181. package/dist/src/controllers/MMRDiversityRanker.d.ts.map +1 -1
  182. package/dist/src/controllers/MemoryController.d.ts +15 -2
  183. package/dist/src/controllers/MemoryController.d.ts.map +1 -1
  184. package/dist/src/controllers/MemoryController.js +33 -3
  185. package/dist/src/controllers/MemoryController.js.map +1 -1
  186. package/dist/src/controllers/MetadataFilter.d.ts +3 -3
  187. package/dist/src/controllers/MetadataFilter.d.ts.map +1 -1
  188. package/dist/src/controllers/MetadataFilter.js +6 -9
  189. package/dist/src/controllers/MetadataFilter.js.map +1 -1
  190. package/dist/src/controllers/MincutService.d.ts +92 -0
  191. package/dist/src/controllers/MincutService.d.ts.map +1 -0
  192. package/dist/src/controllers/MincutService.js +336 -0
  193. package/dist/src/controllers/MincutService.js.map +1 -0
  194. package/dist/src/controllers/NightlyLearner.d.ts +3 -4
  195. package/dist/src/controllers/NightlyLearner.d.ts.map +1 -1
  196. package/dist/src/controllers/NightlyLearner.js +17 -22
  197. package/dist/src/controllers/NightlyLearner.js.map +1 -1
  198. package/dist/src/controllers/QUICClient.d.ts +7 -10
  199. package/dist/src/controllers/QUICClient.d.ts.map +1 -1
  200. package/dist/src/controllers/QUICClient.js +3 -3
  201. package/dist/src/controllers/QUICClient.js.map +1 -1
  202. package/dist/src/controllers/QUICServer.d.ts +4 -4
  203. package/dist/src/controllers/QUICServer.d.ts.map +1 -1
  204. package/dist/src/controllers/QUICServer.js +14 -22
  205. package/dist/src/controllers/QUICServer.js.map +1 -1
  206. package/dist/src/controllers/ReasoningBank.d.ts +2 -9
  207. package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
  208. package/dist/src/controllers/ReasoningBank.js +39 -35
  209. package/dist/src/controllers/ReasoningBank.js.map +1 -1
  210. package/dist/src/controllers/ReflexionMemory.d.ts +51 -1
  211. package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
  212. package/dist/src/controllers/ReflexionMemory.js +307 -33
  213. package/dist/src/controllers/ReflexionMemory.js.map +1 -1
  214. package/dist/src/controllers/SkillLibrary.d.ts +5 -11
  215. package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
  216. package/dist/src/controllers/SkillLibrary.js +39 -48
  217. package/dist/src/controllers/SkillLibrary.js.map +1 -1
  218. package/dist/src/controllers/SparsificationService.d.ts +151 -0
  219. package/dist/src/controllers/SparsificationService.d.ts.map +1 -0
  220. package/dist/src/controllers/SparsificationService.js +375 -0
  221. package/dist/src/controllers/SparsificationService.js.map +1 -0
  222. package/dist/src/controllers/SyncCoordinator.d.ts +3 -2
  223. package/dist/src/controllers/SyncCoordinator.d.ts.map +1 -1
  224. package/dist/src/controllers/SyncCoordinator.js +2 -2
  225. package/dist/src/controllers/SyncCoordinator.js.map +1 -1
  226. package/dist/src/controllers/WASMVectorSearch.d.ts +7 -6
  227. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  228. package/dist/src/controllers/WASMVectorSearch.js +2 -4
  229. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  230. package/dist/src/controllers/attention/AttentionCache.d.ts +38 -0
  231. package/dist/src/controllers/attention/AttentionCache.d.ts.map +1 -0
  232. package/dist/src/controllers/attention/AttentionCache.js +80 -0
  233. package/dist/src/controllers/attention/AttentionCache.js.map +1 -0
  234. package/dist/src/controllers/attention/AttentionConfig.d.ts +127 -0
  235. package/dist/src/controllers/attention/AttentionConfig.d.ts.map +1 -0
  236. package/dist/src/controllers/attention/AttentionConfig.js +124 -0
  237. package/dist/src/controllers/attention/AttentionConfig.js.map +1 -0
  238. package/dist/src/controllers/attention/AttentionCore.d.ts +89 -0
  239. package/dist/src/controllers/attention/AttentionCore.d.ts.map +1 -0
  240. package/dist/src/controllers/attention/AttentionCore.js +289 -0
  241. package/dist/src/controllers/attention/AttentionCore.js.map +1 -0
  242. package/dist/src/controllers/attention/AttentionHelpers.d.ts +55 -0
  243. package/dist/src/controllers/attention/AttentionHelpers.d.ts.map +1 -0
  244. package/dist/src/controllers/attention/AttentionHelpers.js +148 -0
  245. package/dist/src/controllers/attention/AttentionHelpers.js.map +1 -0
  246. package/dist/src/controllers/attention/AttentionMetrics.d.ts +55 -0
  247. package/dist/src/controllers/attention/AttentionMetrics.d.ts.map +1 -0
  248. package/dist/src/controllers/attention/AttentionMetrics.js +72 -0
  249. package/dist/src/controllers/attention/AttentionMetrics.js.map +1 -0
  250. package/dist/src/controllers/attention/AttentionWASM.d.ts +98 -0
  251. package/dist/src/controllers/attention/AttentionWASM.d.ts.map +1 -0
  252. package/dist/src/controllers/attention/AttentionWASM.js +147 -0
  253. package/dist/src/controllers/attention/AttentionWASM.js.map +1 -0
  254. package/dist/src/controllers/attention/CrossAttentionController.d.ts +1 -1
  255. package/dist/src/controllers/attention/CrossAttentionController.d.ts.map +1 -1
  256. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts +1 -1
  257. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts.map +1 -1
  258. package/dist/src/controllers/attention/MultiHeadAttentionController.js +5 -8
  259. package/dist/src/controllers/attention/MultiHeadAttentionController.js.map +1 -1
  260. package/dist/src/controllers/attention/SelfAttentionController.d.ts +1 -1
  261. package/dist/src/controllers/attention/SelfAttentionController.d.ts.map +1 -1
  262. package/dist/src/controllers/attention/index.d.ts +9 -0
  263. package/dist/src/controllers/attention/index.d.ts.map +1 -1
  264. package/dist/src/controllers/attention/index.js +8 -0
  265. package/dist/src/controllers/attention/index.js.map +1 -1
  266. package/dist/src/controllers/frontier-index.d.ts +14 -0
  267. package/dist/src/controllers/frontier-index.d.ts.map +1 -0
  268. package/dist/src/controllers/frontier-index.js +10 -0
  269. package/dist/src/controllers/frontier-index.js.map +1 -0
  270. package/dist/src/controllers/index.d.ts +7 -1
  271. package/dist/src/controllers/index.d.ts.map +1 -1
  272. package/dist/src/controllers/index.js +5 -1
  273. package/dist/src/controllers/index.js.map +1 -1
  274. package/dist/src/controllers/prerequisites.d.ts +76 -0
  275. package/dist/src/controllers/prerequisites.d.ts.map +1 -0
  276. package/dist/src/controllers/prerequisites.js +235 -0
  277. package/dist/src/controllers/prerequisites.js.map +1 -0
  278. package/dist/src/core/AgentDB.d.ts +11 -36
  279. package/dist/src/core/AgentDB.d.ts.map +1 -1
  280. package/dist/src/core/AgentDB.js +31 -89
  281. package/dist/src/core/AgentDB.js.map +1 -1
  282. package/dist/src/core/QueryCache.d.ts +1 -1
  283. package/dist/src/core/QueryCache.d.ts.map +1 -1
  284. package/dist/src/core/QueryCache.js +2 -6
  285. package/dist/src/core/QueryCache.js.map +1 -1
  286. package/dist/src/db-fallback.d.ts +40 -3
  287. package/dist/src/db-fallback.d.ts.map +1 -1
  288. package/dist/src/db-fallback.js +308 -84
  289. package/dist/src/db-fallback.js.map +1 -1
  290. package/dist/src/db-test.d.ts +13 -0
  291. package/dist/src/db-test.d.ts.map +1 -0
  292. package/dist/src/db-test.js +55 -0
  293. package/dist/src/db-test.js.map +1 -0
  294. package/dist/src/db-unified.d.ts +76 -0
  295. package/dist/src/db-unified.d.ts.map +1 -0
  296. package/dist/src/db-unified.js +281 -0
  297. package/dist/src/db-unified.js.map +1 -0
  298. package/dist/src/embedding/EmbeddingSpaceIdentity.d.ts +58 -0
  299. package/dist/src/embedding/EmbeddingSpaceIdentity.d.ts.map +1 -0
  300. package/dist/src/embedding/EmbeddingSpaceIdentity.js +137 -0
  301. package/dist/src/embedding/EmbeddingSpaceIdentity.js.map +1 -0
  302. package/dist/src/embedding/index.d.ts +3 -0
  303. package/dist/src/embedding/index.d.ts.map +1 -0
  304. package/dist/src/embedding/index.js +2 -0
  305. package/dist/src/embedding/index.js.map +1 -0
  306. package/dist/src/examples/quic-sync-example.d.ts +9 -0
  307. package/dist/src/examples/quic-sync-example.d.ts.map +1 -0
  308. package/dist/src/examples/quic-sync-example.js +169 -0
  309. package/dist/src/examples/quic-sync-example.js.map +1 -0
  310. package/dist/src/examples/wasm-vector-usage.d.ts +12 -0
  311. package/dist/src/examples/wasm-vector-usage.d.ts.map +1 -0
  312. package/dist/src/examples/wasm-vector-usage.js +190 -0
  313. package/dist/src/examples/wasm-vector-usage.js.map +1 -0
  314. package/dist/src/governance/MetaHarnessGateway.d.ts +55 -0
  315. package/dist/src/governance/MetaHarnessGateway.d.ts.map +1 -0
  316. package/dist/src/governance/MetaHarnessGateway.js +65 -0
  317. package/dist/src/governance/MetaHarnessGateway.js.map +1 -0
  318. package/dist/src/governance/RvfExperimentBranch.d.ts +65 -0
  319. package/dist/src/governance/RvfExperimentBranch.d.ts.map +1 -0
  320. package/dist/src/governance/RvfExperimentBranch.js +115 -0
  321. package/dist/src/governance/RvfExperimentBranch.js.map +1 -0
  322. package/dist/src/index.d.ts +7 -25
  323. package/dist/src/index.d.ts.map +1 -1
  324. package/dist/src/index.js +9 -10
  325. package/dist/src/index.js.map +1 -1
  326. package/dist/src/mcp/agentdb-mcp-server.js +162 -159
  327. package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
  328. package/dist/src/mcp/learning-tools-handlers.d.ts +16 -0
  329. package/dist/src/mcp/learning-tools-handlers.d.ts.map +1 -0
  330. package/dist/src/mcp/learning-tools-handlers.js +105 -0
  331. package/dist/src/mcp/learning-tools-handlers.js.map +1 -0
  332. package/dist/src/model/ModelCacheLoader.d.ts +24 -0
  333. package/dist/src/model/ModelCacheLoader.d.ts.map +1 -0
  334. package/dist/src/model/ModelCacheLoader.js +123 -0
  335. package/dist/src/model/ModelCacheLoader.js.map +1 -0
  336. package/dist/src/observability/integration.d.ts +3 -3
  337. package/dist/src/observability/integration.d.ts.map +1 -1
  338. package/dist/src/observability/integration.js +2 -0
  339. package/dist/src/observability/integration.js.map +1 -1
  340. package/dist/src/observability/telemetry.d.ts +3 -3
  341. package/dist/src/observability/telemetry.d.ts.map +1 -1
  342. package/dist/src/observability/telemetry.js +3 -5
  343. package/dist/src/observability/telemetry.js.map +1 -1
  344. package/dist/src/optimizations/BatchOperations.d.ts +6 -6
  345. package/dist/src/optimizations/BatchOperations.d.ts.map +1 -1
  346. package/dist/src/optimizations/BatchOperations.js +6 -5
  347. package/dist/src/optimizations/BatchOperations.js.map +1 -1
  348. package/dist/src/optimizations/Quantization.d.ts +330 -0
  349. package/dist/src/optimizations/Quantization.d.ts.map +1 -0
  350. package/dist/src/optimizations/Quantization.js +793 -0
  351. package/dist/src/optimizations/Quantization.js.map +1 -0
  352. package/dist/src/optimizations/QueryOptimizer.d.ts +4 -4
  353. package/dist/src/optimizations/QueryOptimizer.d.ts.map +1 -1
  354. package/dist/src/optimizations/QueryOptimizer.js +1 -3
  355. package/dist/src/optimizations/QueryOptimizer.js.map +1 -1
  356. package/dist/src/optimizations/ToolCache.d.ts +4 -4
  357. package/dist/src/optimizations/ToolCache.d.ts.map +1 -1
  358. package/dist/src/optimizations/ToolCache.js.map +1 -1
  359. package/dist/src/quantization/vector-quantization.d.ts.map +1 -1
  360. package/dist/src/quantization/vector-quantization.js +1 -5
  361. package/dist/src/quantization/vector-quantization.js.map +1 -1
  362. package/dist/src/schemas/inline.d.ts +3 -0
  363. package/dist/src/schemas/inline.d.ts.map +1 -0
  364. package/dist/src/schemas/inline.js +10 -0
  365. package/dist/src/schemas/inline.js.map +1 -0
  366. package/dist/src/search/HybridSearch.d.ts +6 -6
  367. package/dist/src/search/HybridSearch.d.ts.map +1 -1
  368. package/dist/src/search/HybridSearch.js.map +1 -1
  369. package/dist/src/security/input-validation.d.ts +34 -12
  370. package/dist/src/security/input-validation.d.ts.map +1 -1
  371. package/dist/src/security/input-validation.js +46 -1
  372. package/dist/src/security/input-validation.js.map +1 -1
  373. package/dist/src/security/limits.d.ts +150 -0
  374. package/dist/src/security/limits.d.ts.map +1 -0
  375. package/dist/src/security/limits.js +288 -0
  376. package/dist/src/security/limits.js.map +1 -0
  377. package/dist/src/security/mcp-policy.d.ts +13 -0
  378. package/dist/src/security/mcp-policy.d.ts.map +1 -0
  379. package/dist/src/security/mcp-policy.js +66 -0
  380. package/dist/src/security/mcp-policy.js.map +1 -0
  381. package/dist/src/security/path-security.d.ts +100 -0
  382. package/dist/src/security/path-security.d.ts.map +1 -0
  383. package/dist/src/security/path-security.js +339 -0
  384. package/dist/src/security/path-security.js.map +1 -0
  385. package/dist/src/security/validation.d.ts +95 -0
  386. package/dist/src/security/validation.d.ts.map +1 -0
  387. package/dist/src/security/validation.js +315 -0
  388. package/dist/src/security/validation.js.map +1 -0
  389. package/dist/src/services/AttentionService.d.ts.map +1 -1
  390. package/dist/src/services/AttentionService.js +2 -4
  391. package/dist/src/services/AttentionService.js.map +1 -1
  392. package/dist/src/services/LLMRouter.d.ts +2 -2
  393. package/dist/src/services/LLMRouter.d.ts.map +1 -1
  394. package/dist/src/services/LLMRouter.js +3 -9
  395. package/dist/src/services/LLMRouter.js.map +1 -1
  396. package/dist/src/services/audit-logger.service.d.ts +168 -0
  397. package/dist/src/services/audit-logger.service.d.ts.map +1 -0
  398. package/dist/src/services/audit-logger.service.js +331 -0
  399. package/dist/src/services/audit-logger.service.js.map +1 -0
  400. package/dist/src/services/enhanced-embeddings.d.ts +271 -0
  401. package/dist/src/services/enhanced-embeddings.d.ts.map +1 -0
  402. package/dist/src/services/enhanced-embeddings.js +1035 -0
  403. package/dist/src/services/enhanced-embeddings.js.map +1 -0
  404. package/dist/src/services/federated-learning.d.ts +172 -0
  405. package/dist/src/services/federated-learning.d.ts.map +1 -0
  406. package/dist/src/services/federated-learning.js +342 -0
  407. package/dist/src/services/federated-learning.js.map +1 -0
  408. package/dist/src/simd/simd-vector-ops.d.ts.map +1 -1
  409. package/dist/src/simd/simd-vector-ops.js +0 -2
  410. package/dist/src/simd/simd-vector-ops.js.map +1 -1
  411. package/dist/src/types/attention.d.ts +249 -0
  412. package/dist/src/types/attention.d.ts.map +1 -0
  413. package/dist/src/types/attention.js +43 -0
  414. package/dist/src/types/attention.js.map +1 -0
  415. package/dist/src/types/database.types.d.ts +11 -11
  416. package/dist/src/types/database.types.d.ts.map +1 -1
  417. package/dist/src/types/database.types.js +2 -4
  418. package/dist/src/types/database.types.js.map +1 -1
  419. package/dist/src/types/graph.d.ts +29 -0
  420. package/dist/src/types/graph.d.ts.map +1 -0
  421. package/dist/src/types/graph.js +8 -0
  422. package/dist/src/types/graph.js.map +1 -0
  423. package/dist/src/types/quic.d.ts +518 -0
  424. package/dist/src/types/quic.d.ts.map +1 -0
  425. package/dist/src/types/quic.js +272 -0
  426. package/dist/src/types/quic.js.map +1 -0
  427. package/dist/src/utils/attention-metrics.d.ts +76 -0
  428. package/dist/src/utils/attention-metrics.d.ts.map +1 -0
  429. package/dist/src/utils/attention-metrics.js +178 -0
  430. package/dist/src/utils/attention-metrics.js.map +1 -0
  431. package/dist/src/wasm-loader.d.ts +0 -1
  432. package/dist/src/wasm-loader.d.ts.map +1 -1
  433. package/dist/src/wasm-loader.js +0 -2
  434. package/dist/src/wasm-loader.js.map +1 -1
  435. package/dist/src/wrappers/agentdb-fast.d.ts +5 -4
  436. package/dist/src/wrappers/agentdb-fast.d.ts.map +1 -1
  437. package/dist/src/wrappers/agentdb-fast.js +6 -13
  438. package/dist/src/wrappers/agentdb-fast.js.map +1 -1
  439. package/dist/src/wrappers/attention-fallbacks.d.ts +0 -8
  440. package/dist/src/wrappers/attention-fallbacks.d.ts.map +1 -1
  441. package/dist/src/wrappers/attention-fallbacks.js +3 -6
  442. package/dist/src/wrappers/attention-fallbacks.js.map +1 -1
  443. package/dist/src/wrappers/attention-native.d.ts +111 -0
  444. package/dist/src/wrappers/attention-native.d.ts.map +1 -0
  445. package/dist/src/wrappers/attention-native.js +273 -0
  446. package/dist/src/wrappers/attention-native.js.map +1 -0
  447. package/dist/src/wrappers/embedding-service.d.ts +4 -4
  448. package/dist/src/wrappers/embedding-service.d.ts.map +1 -1
  449. package/dist/src/wrappers/embedding-service.js +2 -8
  450. package/dist/src/wrappers/embedding-service.js.map +1 -1
  451. package/dist/src/wrappers/gnn-wrapper.d.ts.map +1 -1
  452. package/dist/src/wrappers/gnn-wrapper.js +3 -7
  453. package/dist/src/wrappers/gnn-wrapper.js.map +1 -1
  454. package/package.json +87 -18
  455. package/scripts/postinstall.cjs +13 -144
  456. package/dist/src/cli/tests/agentdb-cli.test.d.ts +0 -8
  457. package/dist/src/cli/tests/agentdb-cli.test.d.ts.map +0 -1
  458. package/dist/src/cli/tests/agentdb-cli.test.js +0 -50
  459. package/dist/src/cli/tests/agentdb-cli.test.js.map +0 -1
  460. package/dist/src/cli/tests/attention-cli.test.d.ts +0 -5
  461. package/dist/src/cli/tests/attention-cli.test.d.ts.map +0 -1
  462. package/dist/src/cli/tests/attention-cli.test.js +0 -257
  463. package/dist/src/cli/tests/attention-cli.test.js.map +0 -1
  464. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
  465. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
  466. package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
  467. package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
  468. package/dist/src/coordination/index.d.ts +0 -10
  469. package/dist/src/coordination/index.d.ts.map +0 -1
  470. package/dist/src/coordination/index.js +0 -10
  471. package/dist/src/coordination/index.js.map +0 -1
  472. package/dist/src/tests/attention-service.test.d.ts +0 -7
  473. package/dist/src/tests/attention-service.test.d.ts.map +0 -1
  474. package/dist/src/tests/attention-service.test.js +0 -401
  475. package/dist/src/tests/attention-service.test.js.map +0 -1
  476. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts +0 -7
  477. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts.map +0 -1
  478. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js +0 -283
  479. package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js.map +0 -1
  480. package/dist/src/tests/query-cache.test.d.ts +0 -7
  481. package/dist/src/tests/query-cache.test.d.ts.map +0 -1
  482. package/dist/src/tests/query-cache.test.js +0 -343
  483. package/dist/src/tests/query-cache.test.js.map +0 -1
  484. package/dist/src/tests/ruvector-integration.test.d.ts +0 -14
  485. package/dist/src/tests/ruvector-integration.test.d.ts.map +0 -1
  486. package/dist/src/tests/ruvector-integration.test.js +0 -1156
  487. package/dist/src/tests/ruvector-integration.test.js.map +0 -1
  488. package/dist/src/tests/unit/auth/crypto.utils.test.d.ts +0 -6
  489. package/dist/src/tests/unit/auth/crypto.utils.test.d.ts.map +0 -1
  490. package/dist/src/tests/unit/auth/crypto.utils.test.js +0 -310
  491. package/dist/src/tests/unit/auth/crypto.utils.test.js.map +0 -1
  492. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts +0 -5
  493. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts.map +0 -1
  494. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js +0 -207
  495. package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js.map +0 -1
  496. package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts +0 -5
  497. package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts.map +0 -1
  498. package/dist/src/tests/unit/compatibility/migration-utils.test.js +0 -264
  499. package/dist/src/tests/unit/compatibility/migration-utils.test.js.map +0 -1
  500. package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts +0 -7
  501. package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts.map +0 -1
  502. package/dist/src/tests/unit/compatibility/v1-adapter.test.js +0 -228
  503. package/dist/src/tests/unit/compatibility/v1-adapter.test.js.map +0 -1
  504. package/dist/src/tests/unit/compatibility/version-detector.test.d.ts +0 -10
  505. package/dist/src/tests/unit/compatibility/version-detector.test.d.ts.map +0 -1
  506. package/dist/src/tests/unit/compatibility/version-detector.test.js +0 -162
  507. package/dist/src/tests/unit/compatibility/version-detector.test.js.map +0 -1
  508. package/dist/src/tests/vector-quantization.test.d.ts +0 -5
  509. package/dist/src/tests/vector-quantization.test.d.ts.map +0 -1
  510. package/dist/src/tests/vector-quantization.test.js +0 -338
  511. package/dist/src/tests/vector-quantization.test.js.map +0 -1
  512. package/dist/src/tests/wasm-vector-search.test.d.ts +0 -7
  513. package/dist/src/tests/wasm-vector-search.test.d.ts.map +0 -1
  514. package/dist/src/tests/wasm-vector-search.test.js +0 -193
  515. package/dist/src/tests/wasm-vector-search.test.js.map +0 -1
  516. package/dist/src/utils/crypto.utils.d.ts +0 -122
  517. package/dist/src/utils/crypto.utils.d.ts.map +0 -1
  518. package/dist/src/utils/crypto.utils.js +0 -296
  519. package/dist/src/utils/crypto.utils.js.map +0 -1
@@ -26,7 +26,7 @@ export interface Episode {
26
26
  latencyMs?: number;
27
27
  tokensUsed?: number;
28
28
  tags?: string[];
29
- metadata?: Record<string, unknown>;
29
+ metadata?: Record<string, any>;
30
30
  }
31
31
  export interface EpisodeWithEmbedding extends Episode {
32
32
  embedding?: Float32Array;
@@ -52,6 +52,13 @@ export declare class ReflexionMemory {
52
52
  /**
53
53
  * Store a new episode with its critique and outcome
54
54
  * Invalidates relevant cache entries
55
+ *
56
+ * Persistence guarantee (issue #128 fix):
57
+ * storeEpisode() always writes to the SQLite `episodes` and
58
+ * `episode_embeddings` tables when a SQL-capable connection is present,
59
+ * even when a graph or vector backend handles the primary index. This
60
+ * ensures data survives process restarts (graph/vector backends are
61
+ * often in-memory or rebuildable from SQL).
55
62
  */
56
63
  storeEpisode(episode: Episode): Promise<number>;
57
64
  /**
@@ -193,5 +200,48 @@ export declare class ReflexionMemory {
193
200
  * Warm cache with common queries
194
201
  */
195
202
  warmCache(sessionId?: string): Promise<void>;
203
+ /**
204
+ * Delete an episode by id. Closes the gap from issue #150 (downstream:
205
+ * ruflo#1784, RuVector#427) — once an episode is written there was no
206
+ * first-class way to remove it through any backend.
207
+ *
208
+ * Strategy mirrors storeEpisode: when a graph backend is present we go
209
+ * through it (`graphAdapter.deleteNode` / `graphBackend.deleteNode` —
210
+ * both Cypher-backed under the hood), and we ALWAYS also purge the SQL
211
+ * `episodes` and `episode_embeddings` rows so durable storage stays in
212
+ * sync. Vector backend entries are removed too when present.
213
+ *
214
+ * @returns True if the episode existed in any backend and was removed.
215
+ */
216
+ deleteEpisode(id: number | string): Promise<boolean>;
217
+ /**
218
+ * Dual-write helper for issue #128.
219
+ *
220
+ * Inserts the given episode into the SQLite `episodes` and
221
+ * `episode_embeddings` tables when the underlying connection supports it.
222
+ * Used when a graph or vector backend handles the primary index but the
223
+ * caller still wants restart-safe persistence.
224
+ *
225
+ * Errors are swallowed and logged — the primary write to the graph/vector
226
+ * backend has already succeeded, and we don't want to fail the caller if
227
+ * SQL persistence is unavailable (e.g. read-only DB, schema not present).
228
+ */
229
+ private dualWriteEpisodeToSQL;
230
+ /**
231
+ * Rebuild the in-memory vector index from the SQLite `episodes` /
232
+ * `episode_embeddings` tables, going through the proper backend channels
233
+ * so `retrieveRelevant()` sees the data afterwards.
234
+ *
235
+ * Fixes the user's recovery use-case from issue #129: rather than calling
236
+ * `vectorBackend.getInner().insert()` directly (which bypasses the
237
+ * GuardedBackend wrapper and confuses retrieveRelevant), call this method
238
+ * to re-hydrate the vector and graph indices from durable storage.
239
+ *
240
+ * Returns the number of episodes re-indexed. No-ops cleanly when the SQL
241
+ * tables are empty or absent.
242
+ */
243
+ rebuildIndex(options?: {
244
+ fromTimestamp?: number;
245
+ }): Promise<number>;
196
246
  }
197
247
  //# sourceMappingURL=ReflexionMemory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,6BAA6B,CAAC;AAG3E,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAY1E,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,UAAU,CAAa;gBAG7B,EAAE,EAAE,mBAAmB,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,eAAe,CAAC,EAAE,eAAe,EACjC,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,gBAAgB;IAUhC;;;;;;;;;;OAUG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkJrD;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4C9E;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;YACW,wBAAwB;IAsBtC;;OAEG;YACW,wBAAwB;IAatC;;OAEG;YACW,yBAAyB;IA0CvC;;OAEG;YACW,uBAAuB;IA6BrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,GACtB;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IA0ED;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChE;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAqClE;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BlF;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,MAAM;IAmCV,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;YACW,sBAAsB;IA4EpC;;OAEG;YACW,mBAAmB;IAoDjC;;OAEG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IA4BF;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5D;;OAEG;IACH,gBAAgB;IAOhB;;OAEG;IACH,aAAa;IAOb;;OAEG;IACH,aAAa;IAIb;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;;;;;;;;;;;OAYG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgF1D;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAwG9E"}
@@ -10,7 +10,17 @@
10
10
  import { normalizeRowId } from '../types/database.types.js';
11
11
  import { NodeIdMapper } from '../utils/NodeIdMapper.js';
12
12
  import { QueryCache } from '../core/QueryCache.js';
13
- import { cosineSimilarity } from '../utils/similarity.js';
13
+ /** Parse JSON from DB row values without throwing on malformed data. */
14
+ function safeJsonParse(value, fallback) {
15
+ if (!value)
16
+ return fallback;
17
+ try {
18
+ return JSON.parse(value);
19
+ }
20
+ catch {
21
+ return fallback;
22
+ }
23
+ }
14
24
  export class ReflexionMemory {
15
25
  db;
16
26
  embedder;
@@ -29,6 +39,13 @@ export class ReflexionMemory {
29
39
  /**
30
40
  * Store a new episode with its critique and outcome
31
41
  * Invalidates relevant cache entries
42
+ *
43
+ * Persistence guarantee (issue #128 fix):
44
+ * storeEpisode() always writes to the SQLite `episodes` and
45
+ * `episode_embeddings` tables when a SQL-capable connection is present,
46
+ * even when a graph or vector backend handles the primary index. This
47
+ * ensures data survives process restarts (graph/vector backends are
48
+ * often in-memory or rebuildable from SQL).
32
49
  */
33
50
  async storeEpisode(episode) {
34
51
  // Invalidate episode caches on write
@@ -39,7 +56,7 @@ export class ReflexionMemory {
39
56
  // GraphDatabaseAdapter has specialized storeEpisode method
40
57
  const graphAdapter = this.graphBackend;
41
58
  // Generate embedding for the task
42
- const taskEmbedding = await this.embedder.embed(episode.task);
59
+ const taskEmbedding = await this.embedder.embedPassage(episode.task);
43
60
  // Create episode node using GraphDatabaseAdapter
44
61
  const nodeId = await graphAdapter.storeEpisode({
45
62
  id: episode.id ? `episode-${episode.id}` : `episode-${Date.now()}-${Math.random()}`,
@@ -58,12 +75,15 @@ export class ReflexionMemory {
58
75
  const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
59
76
  // Register mapping for later use by CausalMemoryGraph
60
77
  NodeIdMapper.getInstance().register(numericId, nodeId);
78
+ // #128: dual-write to SQL for restart-safe persistence. Graph adapter
79
+ // index is typically in-memory; SQL is the durable record.
80
+ this.dualWriteEpisodeToSQL(episode, taskEmbedding);
61
81
  return numericId;
62
82
  }
63
83
  // Use generic GraphBackend if available
64
84
  if (this.graphBackend) {
65
85
  // Generate embedding for the task
66
- const taskEmbedding = await this.embedder.embed(episode.task);
86
+ const taskEmbedding = await this.embedder.embedPassage(episode.task);
67
87
  // Create episode node ID
68
88
  const nodeId = await this.graphBackend.createNode(['Episode'], {
69
89
  sessionId: episode.sessionId,
@@ -90,6 +110,8 @@ export class ReflexionMemory {
90
110
  const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
91
111
  // Register mapping for later use by CausalMemoryGraph
92
112
  NodeIdMapper.getInstance().register(numericId, nodeId);
113
+ // #128: dual-write to SQL for restart-safe persistence.
114
+ this.dualWriteEpisodeToSQL(episode, taskEmbedding);
93
115
  return numericId;
94
116
  }
95
117
  // Fallback to SQLite (v1 compatibility)
@@ -105,7 +127,7 @@ export class ReflexionMemory {
105
127
  const episodeId = normalizeRowId(result.lastInsertRowid);
106
128
  // Generate and store embedding
107
129
  const text = this.buildEpisodeText(episode);
108
- const embedding = await this.embedder.embed(text);
130
+ const embedding = await this.embedder.embedPassage(text);
109
131
  // Use vector backend if available (150x faster retrieval)
110
132
  if (this.vectorBackend) {
111
133
  this.vectorBackend.insert(episodeId.toString(), embedding);
@@ -169,7 +191,7 @@ export class ReflexionMemory {
169
191
  */
170
192
  async prepareQueryEmbedding(task, currentState, k) {
171
193
  const queryText = currentState ? `${task}\n${currentState}` : task;
172
- let queryEmbedding = await this.embedder.embed(queryText);
194
+ let queryEmbedding = await this.embedder.embedQuery(queryText);
173
195
  // Enhance query with GNN if learning backend available
174
196
  if (this.learningBackend) {
175
197
  queryEmbedding = await this.enhanceQueryWithGNN(queryEmbedding, k);
@@ -184,9 +206,8 @@ export class ReflexionMemory {
184
206
  const graphAdapter = this.graphBackend;
185
207
  // Search using vector similarity
186
208
  const results = await graphAdapter.searchSimilarEpisodes(queryEmbedding, k * 3);
187
- // Apply filters (cast from graph results to typed format)
188
- const typedResults = results;
189
- const filtered = this.applyEpisodeFilters(typedResults, {
209
+ // Apply filters
210
+ const filtered = this.applyEpisodeFilters(results, {
190
211
  minReward,
191
212
  onlyFailures,
192
213
  onlySuccesses,
@@ -371,25 +392,24 @@ export class ReflexionMemory {
371
392
  * Convert Cypher query result to EpisodeWithEmbedding
372
393
  */
373
394
  convertCypherEpisode(node) {
374
- const props = node.properties;
375
395
  return {
376
396
  id: parseInt(node.id.split('-').pop() || '0', 36),
377
- sessionId: props.sessionId,
378
- task: props.task,
379
- input: props.input,
380
- output: props.output,
381
- critique: props.critique,
382
- reward: typeof props.reward === 'string'
383
- ? parseFloat(props.reward)
384
- : props.reward,
385
- success: typeof props.success === 'string'
386
- ? props.success === 'true'
387
- : props.success,
388
- latencyMs: props.latencyMs,
389
- tokensUsed: props.tokensUsed,
390
- tags: props.tags ? JSON.parse(props.tags) : [],
391
- metadata: props.metadata ? JSON.parse(props.metadata) : {},
392
- ts: Math.floor(props.createdAt / 1000),
397
+ sessionId: node.properties.sessionId,
398
+ task: node.properties.task,
399
+ input: node.properties.input,
400
+ output: node.properties.output,
401
+ critique: node.properties.critique,
402
+ reward: typeof node.properties.reward === 'string'
403
+ ? parseFloat(node.properties.reward)
404
+ : node.properties.reward,
405
+ success: typeof node.properties.success === 'string'
406
+ ? node.properties.success === 'true'
407
+ : node.properties.success,
408
+ latencyMs: node.properties.latencyMs,
409
+ tokensUsed: node.properties.tokensUsed,
410
+ tags: safeJsonParse(node.properties.tags, []),
411
+ metadata: safeJsonParse(node.properties.metadata, {}),
412
+ ts: Math.floor(node.properties.createdAt / 1000),
393
413
  };
394
414
  }
395
415
  /**
@@ -408,8 +428,8 @@ export class ReflexionMemory {
408
428
  success: row.success === 1,
409
429
  latencyMs: row.latency_ms ?? undefined,
410
430
  tokensUsed: row.tokens_used ?? undefined,
411
- tags: row.tags ? JSON.parse(row.tags) : undefined,
412
- metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
431
+ tags: safeJsonParse(row.tags, undefined),
432
+ metadata: safeJsonParse(row.metadata, undefined),
413
433
  embedding,
414
434
  similarity,
415
435
  };
@@ -450,7 +470,7 @@ export class ReflexionMemory {
450
470
  WHERE task = ? ${windowFilter}
451
471
  `);
452
472
  const trend = trendStmt.get(task);
453
- const improvementTrend = trend?.recent_reward && trend?.older_reward
473
+ const improvementTrend = trend.recent_reward && trend.older_reward
454
474
  ? (trend.recent_reward - trend.older_reward) / trend.older_reward
455
475
  : 0;
456
476
  const results = {
@@ -544,8 +564,8 @@ export class ReflexionMemory {
544
564
  success: row.success === 1,
545
565
  latencyMs: row.latency_ms ?? undefined,
546
566
  tokensUsed: row.tokens_used ?? undefined,
547
- tags: row.tags ? JSON.parse(row.tags) : undefined,
548
- metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
567
+ tags: safeJsonParse(row.tags, undefined),
568
+ metadata: safeJsonParse(row.metadata, undefined),
549
569
  }));
550
570
  }
551
571
  /**
@@ -607,7 +627,15 @@ export class ReflexionMemory {
607
627
  return new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
608
628
  }
609
629
  cosineSimilarity(a, b) {
610
- return cosineSimilarity(a, b);
630
+ let dotProduct = 0;
631
+ let normA = 0;
632
+ let normB = 0;
633
+ for (let i = 0; i < a.length; i++) {
634
+ dotProduct += a[i] * b[i];
635
+ normA += a[i] * a[i];
636
+ normB += b[i] * b[i];
637
+ }
638
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
611
639
  }
612
640
  // ========================================================================
613
641
  // GNN and Graph Integration Methods
@@ -799,13 +827,259 @@ export class ReflexionMemory {
799
827
  * Warm cache with common queries
800
828
  */
801
829
  async warmCache(sessionId) {
802
- await this.queryCache.warm(async (_cache) => {
830
+ await this.queryCache.warm(async (cache) => {
803
831
  // Warm cache with recent sessions if sessionId provided
804
832
  if (sessionId) {
805
- await this.getRecentEpisodes(sessionId, 10);
833
+ const recent = await this.getRecentEpisodes(sessionId, 10);
806
834
  // Episodes are already loaded, cache will be populated on next access
807
835
  }
808
836
  });
809
837
  }
838
+ /**
839
+ * Delete an episode by id. Closes the gap from issue #150 (downstream:
840
+ * ruflo#1784, RuVector#427) — once an episode is written there was no
841
+ * first-class way to remove it through any backend.
842
+ *
843
+ * Strategy mirrors storeEpisode: when a graph backend is present we go
844
+ * through it (`graphAdapter.deleteNode` / `graphBackend.deleteNode` —
845
+ * both Cypher-backed under the hood), and we ALWAYS also purge the SQL
846
+ * `episodes` and `episode_embeddings` rows so durable storage stays in
847
+ * sync. Vector backend entries are removed too when present.
848
+ *
849
+ * @returns True if the episode existed in any backend and was removed.
850
+ */
851
+ async deleteEpisode(id) {
852
+ const numericId = typeof id === 'number' ? id : parseInt(String(id), 10);
853
+ const stringId = String(id);
854
+ // Invalidate caches up front — failures below shouldn't leave stale reads.
855
+ this.queryCache.invalidateCategory('episodes');
856
+ this.queryCache.invalidateCategory('task-stats');
857
+ let removed = false;
858
+ // 1. Graph adapter (AgentDB v2 fast path)
859
+ if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
860
+ const adapter = this.graphBackend;
861
+ if (typeof adapter.deleteNode === 'function') {
862
+ try {
863
+ // Adapter accepts either the canonical "episode-<id>" key or a raw
864
+ // id; try the canonical form first since that's what storeEpisode
865
+ // emits.
866
+ const r = await adapter.deleteNode(`episode-${numericId}`, { cascade: true });
867
+ if (r?.deletedNode)
868
+ removed = true;
869
+ if (!removed) {
870
+ const r2 = await adapter.deleteNode(stringId, { cascade: true });
871
+ if (r2?.deletedNode)
872
+ removed = true;
873
+ }
874
+ }
875
+ catch (err) {
876
+ const msg = err instanceof Error ? err.message : String(err);
877
+ // eslint-disable-next-line no-console
878
+ console.warn(`[ReflexionMemory] deleteEpisode: graph adapter delete failed: ${msg}`);
879
+ }
880
+ }
881
+ }
882
+ // 2. Generic graph backend
883
+ else if (this.graphBackend && typeof this.graphBackend.deleteNode === 'function') {
884
+ try {
885
+ const r = await this.graphBackend.deleteNode(stringId);
886
+ if (r === true)
887
+ removed = true;
888
+ }
889
+ catch (err) {
890
+ const msg = err instanceof Error ? err.message : String(err);
891
+ // eslint-disable-next-line no-console
892
+ console.warn(`[ReflexionMemory] deleteEpisode: graph backend delete failed: ${msg}`);
893
+ }
894
+ }
895
+ // 3. Vector backend (HNSW/RuVector); some implementations don't expose
896
+ // delete — guard with a feature check.
897
+ if (this.vectorBackend && typeof this.vectorBackend.delete === 'function') {
898
+ try {
899
+ const r = await this.vectorBackend.delete(String(numericId));
900
+ if (r === true)
901
+ removed = true;
902
+ }
903
+ catch (err) {
904
+ const msg = err instanceof Error ? err.message : String(err);
905
+ // eslint-disable-next-line no-console
906
+ console.warn(`[ReflexionMemory] deleteEpisode: vector backend delete failed: ${msg}`);
907
+ }
908
+ }
909
+ // 4. SQL durable storage — always attempt so persistence stays clean
910
+ // even when the primary backend was a no-op.
911
+ if (this.db && typeof this.db.prepare === 'function' && Number.isFinite(numericId)) {
912
+ try {
913
+ const embStmt = this.db.prepare(`DELETE FROM episode_embeddings WHERE episode_id = ?`);
914
+ embStmt.run(numericId);
915
+ const stmt = this.db.prepare(`DELETE FROM episodes WHERE id = ?`);
916
+ const r = stmt.run(numericId);
917
+ const changes = r?.changes ?? 0;
918
+ if (changes > 0)
919
+ removed = true;
920
+ }
921
+ catch (err) {
922
+ const msg = err instanceof Error ? err.message : String(err);
923
+ if (!/no such table/i.test(msg)) {
924
+ // eslint-disable-next-line no-console
925
+ console.warn(`[ReflexionMemory] deleteEpisode: SQL delete failed: ${msg}`);
926
+ }
927
+ }
928
+ }
929
+ return removed;
930
+ }
931
+ /**
932
+ * Dual-write helper for issue #128.
933
+ *
934
+ * Inserts the given episode into the SQLite `episodes` and
935
+ * `episode_embeddings` tables when the underlying connection supports it.
936
+ * Used when a graph or vector backend handles the primary index but the
937
+ * caller still wants restart-safe persistence.
938
+ *
939
+ * Errors are swallowed and logged — the primary write to the graph/vector
940
+ * backend has already succeeded, and we don't want to fail the caller if
941
+ * SQL persistence is unavailable (e.g. read-only DB, schema not present).
942
+ */
943
+ dualWriteEpisodeToSQL(episode, embedding) {
944
+ if (!this.db || typeof this.db.prepare !== 'function')
945
+ return;
946
+ try {
947
+ const stmt = this.db.prepare(`
948
+ INSERT INTO episodes (
949
+ session_id, task, input, output, critique, reward, success,
950
+ latency_ms, tokens_used, tags, metadata
951
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
952
+ `);
953
+ const tags = episode.tags ? JSON.stringify(episode.tags) : null;
954
+ const metadata = episode.metadata ? JSON.stringify(episode.metadata) : null;
955
+ const result = stmt.run(episode.sessionId, episode.task, episode.input ?? null, episode.output ?? null, episode.critique ?? null, episode.reward, episode.success ? 1 : 0, episode.latencyMs ?? null, episode.tokensUsed ?? null, tags, metadata);
956
+ if (embedding) {
957
+ const episodeId = normalizeRowId(result.lastInsertRowid);
958
+ this.storeEmbedding(episodeId, embedding);
959
+ }
960
+ }
961
+ catch (err) {
962
+ // The expected failure here is "no such table: episodes" on databases
963
+ // that intentionally don't carry the v1 schema. Don't escalate — the
964
+ // primary backend already has the data.
965
+ const msg = err instanceof Error ? err.message : String(err);
966
+ if (!/no such table/i.test(msg)) {
967
+ // eslint-disable-next-line no-console
968
+ console.warn('[ReflexionMemory] dualWriteEpisodeToSQL failed:', msg);
969
+ }
970
+ }
971
+ }
972
+ /**
973
+ * Rebuild the in-memory vector index from the SQLite `episodes` /
974
+ * `episode_embeddings` tables, going through the proper backend channels
975
+ * so `retrieveRelevant()` sees the data afterwards.
976
+ *
977
+ * Fixes the user's recovery use-case from issue #129: rather than calling
978
+ * `vectorBackend.getInner().insert()` directly (which bypasses the
979
+ * GuardedBackend wrapper and confuses retrieveRelevant), call this method
980
+ * to re-hydrate the vector and graph indices from durable storage.
981
+ *
982
+ * Returns the number of episodes re-indexed. No-ops cleanly when the SQL
983
+ * tables are empty or absent.
984
+ */
985
+ async rebuildIndex(options = {}) {
986
+ if (!this.db || typeof this.db.prepare !== 'function')
987
+ return 0;
988
+ const where = options.fromTimestamp !== undefined ? 'WHERE e.ts >= ?' : '';
989
+ const params = options.fromTimestamp !== undefined ? [options.fromTimestamp] : [];
990
+ let rows = [];
991
+ try {
992
+ const stmt = this.db.prepare(`
993
+ SELECT
994
+ e.id, e.ts, e.session_id, e.task, e.input, e.output, e.critique,
995
+ e.reward, e.success, e.latency_ms, e.tokens_used, e.tags, e.metadata,
996
+ ee.embedding
997
+ FROM episodes e
998
+ LEFT JOIN episode_embeddings ee ON ee.episode_id = e.id
999
+ ${where}
1000
+ ORDER BY e.id ASC
1001
+ `);
1002
+ rows = stmt.all(...params);
1003
+ }
1004
+ catch (err) {
1005
+ const msg = err instanceof Error ? err.message : String(err);
1006
+ if (/no such table/i.test(msg))
1007
+ return 0;
1008
+ throw err;
1009
+ }
1010
+ let reindexed = 0;
1011
+ for (const row of rows) {
1012
+ const episode = {
1013
+ id: row.id,
1014
+ ts: row.ts,
1015
+ sessionId: row.session_id,
1016
+ task: row.task,
1017
+ input: row.input ?? undefined,
1018
+ output: row.output ?? undefined,
1019
+ critique: row.critique ?? undefined,
1020
+ reward: row.reward,
1021
+ success: row.success === 1,
1022
+ latencyMs: row.latency_ms ?? undefined,
1023
+ tokensUsed: row.tokens_used ?? undefined,
1024
+ tags: safeJsonParse(row.tags, undefined),
1025
+ metadata: safeJsonParse(row.metadata, undefined),
1026
+ };
1027
+ // Prefer the stored embedding; fall back to recomputing if missing.
1028
+ let embedding;
1029
+ if (row.embedding) {
1030
+ const buf = row.embedding;
1031
+ embedding = new Float32Array(buf.buffer, buf.byteOffset, buf.length / 4);
1032
+ }
1033
+ else {
1034
+ embedding = await this.embedder.embedPassage(this.buildEpisodeText(episode));
1035
+ }
1036
+ // Re-insert through the proper public APIs so the GuardedBackend
1037
+ // wrapper, graph adapter, and HNSW all stay in sync.
1038
+ if (this.vectorBackend) {
1039
+ try {
1040
+ this.vectorBackend.insert(String(row.id), embedding, {
1041
+ type: 'episode',
1042
+ sessionId: episode.sessionId,
1043
+ reward: episode.reward,
1044
+ success: episode.success,
1045
+ });
1046
+ }
1047
+ catch (err) {
1048
+ const msg = err instanceof Error ? err.message : String(err);
1049
+ // eslint-disable-next-line no-console
1050
+ console.warn(`[ReflexionMemory] rebuildIndex: vector insert failed for ${row.id}: ${msg}`);
1051
+ }
1052
+ }
1053
+ if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
1054
+ const adapter = this.graphBackend;
1055
+ try {
1056
+ await adapter.storeEpisode({
1057
+ id: `episode-${row.id}`,
1058
+ sessionId: episode.sessionId,
1059
+ task: episode.task,
1060
+ reward: episode.reward,
1061
+ success: episode.success,
1062
+ input: episode.input,
1063
+ output: episode.output,
1064
+ critique: episode.critique,
1065
+ createdAt: (episode.ts ?? Date.now() / 1000) * 1000,
1066
+ tokensUsed: episode.tokensUsed,
1067
+ latencyMs: episode.latencyMs,
1068
+ }, embedding);
1069
+ }
1070
+ catch (err) {
1071
+ const msg = err instanceof Error ? err.message : String(err);
1072
+ // eslint-disable-next-line no-console
1073
+ console.warn(`[ReflexionMemory] rebuildIndex: graph store failed for ${row.id}: ${msg}`);
1074
+ }
1075
+ }
1076
+ reindexed++;
1077
+ }
1078
+ // Bust any stale read caches so the next retrieveRelevant sees the
1079
+ // freshly-rebuilt index.
1080
+ this.queryCache.invalidateCategory('episodes');
1081
+ this.queryCache.invalidateCategory('task-stats');
1082
+ return reindexed;
1083
+ }
810
1084
  }
811
1085
  //# sourceMappingURL=ReflexionMemory.js.map