agentdb 3.0.0-alpha.10 → 3.0.0-alpha.12

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 (648) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2821 -225
  3. package/dist/src/backends/VectorBackend.d.ts +31 -6
  4. package/dist/src/backends/VectorBackend.d.ts.map +1 -1
  5. package/dist/src/backends/detector.js.map +1 -1
  6. package/dist/src/backends/factory.d.ts +16 -33
  7. package/dist/src/backends/factory.d.ts.map +1 -1
  8. package/dist/src/backends/factory.js +138 -108
  9. package/dist/src/backends/factory.js.map +1 -1
  10. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts.map +1 -1
  11. package/dist/src/backends/hnswlib/HNSWLibBackend.js +29 -2
  12. package/dist/src/backends/hnswlib/HNSWLibBackend.js.map +1 -1
  13. package/dist/src/backends/ruvector/RuVectorBackend.d.ts +198 -45
  14. package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
  15. package/dist/src/backends/ruvector/RuVectorBackend.js +612 -277
  16. package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
  17. package/dist/src/backends/ruvector/RuVectorLearning.d.ts +0 -4
  18. package/dist/src/backends/ruvector/RuVectorLearning.d.ts.map +1 -1
  19. package/dist/src/backends/ruvector/RuVectorLearning.js +0 -6
  20. package/dist/src/backends/ruvector/RuVectorLearning.js.map +1 -1
  21. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts +175 -0
  22. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts.map +1 -0
  23. package/dist/src/backends/rvf/AdaptiveIndexTuner.js +559 -0
  24. package/dist/src/backends/rvf/AdaptiveIndexTuner.js.map +1 -0
  25. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts +148 -0
  26. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts.map +1 -0
  27. package/dist/src/backends/rvf/ContrastiveTrainer.js +438 -0
  28. package/dist/src/backends/rvf/ContrastiveTrainer.js.map +1 -0
  29. package/dist/src/backends/rvf/FederatedSessionManager.d.ts +211 -0
  30. package/dist/src/backends/rvf/FederatedSessionManager.d.ts.map +1 -0
  31. package/dist/src/backends/rvf/FederatedSessionManager.js +389 -0
  32. package/dist/src/backends/rvf/FederatedSessionManager.js.map +1 -0
  33. package/dist/src/backends/rvf/FilterBuilder.d.ts +136 -0
  34. package/dist/src/backends/rvf/FilterBuilder.d.ts.map +1 -0
  35. package/dist/src/backends/rvf/FilterBuilder.js +157 -0
  36. package/dist/src/backends/rvf/FilterBuilder.js.map +1 -0
  37. package/dist/src/backends/rvf/NativeAccelerator.d.ts +140 -0
  38. package/dist/src/backends/rvf/NativeAccelerator.d.ts.map +1 -0
  39. package/dist/src/backends/rvf/NativeAccelerator.js +630 -0
  40. package/dist/src/backends/rvf/NativeAccelerator.js.map +1 -0
  41. package/dist/src/backends/rvf/RvfBackend.d.ts +194 -0
  42. package/dist/src/backends/rvf/RvfBackend.d.ts.map +1 -0
  43. package/dist/src/backends/rvf/RvfBackend.js +607 -0
  44. package/dist/src/backends/rvf/RvfBackend.js.map +1 -0
  45. package/dist/src/backends/rvf/RvfSolver.d.ts +175 -0
  46. package/dist/src/backends/rvf/RvfSolver.d.ts.map +1 -0
  47. package/dist/src/backends/rvf/RvfSolver.js +176 -0
  48. package/dist/src/backends/rvf/RvfSolver.js.map +1 -0
  49. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts +143 -0
  50. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts.map +1 -0
  51. package/dist/src/backends/rvf/SelfLearningRvfBackend.js +569 -0
  52. package/dist/src/backends/rvf/SelfLearningRvfBackend.js.map +1 -0
  53. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts +128 -0
  54. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts.map +1 -0
  55. package/dist/src/backends/rvf/SemanticQueryRouter.js +415 -0
  56. package/dist/src/backends/rvf/SemanticQueryRouter.js.map +1 -0
  57. package/dist/src/backends/rvf/SimdFallbacks.d.ts +25 -0
  58. package/dist/src/backends/rvf/SimdFallbacks.d.ts.map +1 -0
  59. package/dist/src/backends/rvf/SimdFallbacks.js +287 -0
  60. package/dist/src/backends/rvf/SimdFallbacks.js.map +1 -0
  61. package/dist/src/backends/rvf/SolverBandit.d.ts +100 -0
  62. package/dist/src/backends/rvf/SolverBandit.d.ts.map +1 -0
  63. package/dist/src/backends/rvf/SolverBandit.js +216 -0
  64. package/dist/src/backends/rvf/SolverBandit.js.map +1 -0
  65. package/dist/src/backends/rvf/SonaLearningBackend.d.ts +157 -0
  66. package/dist/src/backends/rvf/SonaLearningBackend.d.ts.map +1 -0
  67. package/dist/src/backends/rvf/SonaLearningBackend.js +283 -0
  68. package/dist/src/backends/rvf/SonaLearningBackend.js.map +1 -0
  69. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts +77 -0
  70. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +1 -0
  71. package/dist/src/backends/rvf/SqlJsRvfBackend.js +382 -0
  72. package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +1 -0
  73. package/dist/src/backends/rvf/WasmStoreBridge.d.ts +27 -0
  74. package/dist/src/backends/rvf/WasmStoreBridge.d.ts.map +1 -0
  75. package/dist/src/backends/rvf/WasmStoreBridge.js +87 -0
  76. package/dist/src/backends/rvf/WasmStoreBridge.js.map +1 -0
  77. package/dist/src/backends/rvf/validation.d.ts +20 -0
  78. package/dist/src/backends/rvf/validation.d.ts.map +1 -0
  79. package/dist/src/backends/rvf/validation.js +78 -0
  80. package/dist/src/backends/rvf/validation.js.map +1 -0
  81. package/dist/src/benchmark/BenchmarkSuite.d.ts +318 -0
  82. package/dist/src/benchmark/BenchmarkSuite.d.ts.map +1 -0
  83. package/dist/src/benchmark/BenchmarkSuite.js +984 -0
  84. package/dist/src/benchmark/BenchmarkSuite.js.map +1 -0
  85. package/dist/src/benchmark/index.d.ts +29 -0
  86. package/dist/src/benchmark/index.d.ts.map +1 -0
  87. package/dist/src/benchmark/index.js +39 -0
  88. package/dist/src/benchmark/index.js.map +1 -0
  89. package/dist/src/browser/AttentionBrowser.d.ts.map +1 -1
  90. package/dist/src/browser/AttentionBrowser.js +1 -0
  91. package/dist/src/browser/AttentionBrowser.js.map +1 -1
  92. package/dist/src/cli/agentdb-cli.d.ts +13 -0
  93. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  94. package/dist/src/cli/agentdb-cli.js +803 -94
  95. package/dist/src/cli/agentdb-cli.js.map +1 -1
  96. package/dist/src/cli/commands/hyperbolic.d.ts +11 -0
  97. package/dist/src/cli/commands/hyperbolic.d.ts.map +1 -0
  98. package/dist/src/cli/commands/hyperbolic.js +428 -0
  99. package/dist/src/cli/commands/hyperbolic.js.map +1 -0
  100. package/dist/src/cli/commands/learn.d.ts +11 -0
  101. package/dist/src/cli/commands/learn.d.ts.map +1 -0
  102. package/dist/src/cli/commands/learn.js +404 -0
  103. package/dist/src/cli/commands/learn.js.map +1 -0
  104. package/dist/src/cli/commands/migrate.d.ts +15 -0
  105. package/dist/src/cli/commands/migrate.d.ts.map +1 -1
  106. package/dist/src/cli/commands/migrate.js +176 -8
  107. package/dist/src/cli/commands/migrate.js.map +1 -1
  108. package/dist/src/cli/commands/route.d.ts +11 -0
  109. package/dist/src/cli/commands/route.d.ts.map +1 -0
  110. package/dist/src/cli/commands/route.js +414 -0
  111. package/dist/src/cli/commands/route.js.map +1 -0
  112. package/dist/src/cli/commands/rvf.d.ts +21 -0
  113. package/dist/src/cli/commands/rvf.d.ts.map +1 -0
  114. package/dist/src/cli/commands/rvf.js +448 -0
  115. package/dist/src/cli/commands/rvf.js.map +1 -0
  116. package/dist/src/cli/lib/report-store.d.ts +2 -1
  117. package/dist/src/cli/lib/report-store.d.ts.map +1 -1
  118. package/dist/src/cli/lib/report-store.js +85 -65
  119. package/dist/src/cli/lib/report-store.js.map +1 -1
  120. package/dist/src/cli/lib/simulation-runner.d.ts +40 -3
  121. package/dist/src/cli/lib/simulation-runner.d.ts.map +1 -1
  122. package/dist/src/cli/lib/simulation-runner.js +248 -6
  123. package/dist/src/cli/lib/simulation-runner.js.map +1 -1
  124. package/dist/src/compatibility/DeprecationWarnings.d.ts +54 -0
  125. package/dist/src/compatibility/DeprecationWarnings.d.ts.map +1 -0
  126. package/dist/src/compatibility/DeprecationWarnings.js +131 -0
  127. package/dist/src/compatibility/DeprecationWarnings.js.map +1 -0
  128. package/dist/src/compatibility/MigrationUtilities.d.ts +30 -0
  129. package/dist/src/compatibility/MigrationUtilities.d.ts.map +1 -0
  130. package/dist/src/compatibility/MigrationUtilities.js +184 -0
  131. package/dist/src/compatibility/MigrationUtilities.js.map +1 -0
  132. package/dist/src/compatibility/V1toV2Adapter.d.ts +76 -0
  133. package/dist/src/compatibility/V1toV2Adapter.d.ts.map +1 -0
  134. package/dist/src/compatibility/V1toV2Adapter.js +185 -0
  135. package/dist/src/compatibility/V1toV2Adapter.js.map +1 -0
  136. package/dist/src/compatibility/VersionDetector.d.ts +32 -0
  137. package/dist/src/compatibility/VersionDetector.d.ts.map +1 -0
  138. package/dist/src/compatibility/VersionDetector.js +144 -0
  139. package/dist/src/compatibility/VersionDetector.js.map +1 -0
  140. package/dist/src/compatibility/index.d.ts +14 -0
  141. package/dist/src/compatibility/index.d.ts.map +1 -0
  142. package/dist/src/compatibility/index.js +21 -0
  143. package/dist/src/compatibility/index.js.map +1 -0
  144. package/dist/src/compatibility/types.d.ts +103 -0
  145. package/dist/src/compatibility/types.d.ts.map +1 -0
  146. package/dist/src/compatibility/types.js +5 -0
  147. package/dist/src/compatibility/types.js.map +1 -0
  148. package/dist/src/controllers/AttentionService.d.ts +99 -202
  149. package/dist/src/controllers/AttentionService.d.ts.map +1 -1
  150. package/dist/src/controllers/AttentionService.js +450 -558
  151. package/dist/src/controllers/AttentionService.js.map +1 -1
  152. package/dist/src/controllers/CausalMemoryGraph.d.ts +30 -5
  153. package/dist/src/controllers/CausalMemoryGraph.d.ts.map +1 -1
  154. package/dist/src/controllers/CausalMemoryGraph.js +89 -13
  155. package/dist/src/controllers/CausalMemoryGraph.js.map +1 -1
  156. package/dist/src/controllers/CausalRecall.d.ts +4 -0
  157. package/dist/src/controllers/CausalRecall.d.ts.map +1 -1
  158. package/dist/src/controllers/CausalRecall.js +19 -2
  159. package/dist/src/controllers/CausalRecall.js.map +1 -1
  160. package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
  161. package/dist/src/controllers/EmbeddingService.js +28 -11
  162. package/dist/src/controllers/EmbeddingService.js.map +1 -1
  163. package/dist/src/controllers/EnhancedEmbeddingService.d.ts +4 -0
  164. package/dist/src/controllers/EnhancedEmbeddingService.d.ts.map +1 -1
  165. package/dist/src/controllers/EnhancedEmbeddingService.js +17 -3
  166. package/dist/src/controllers/EnhancedEmbeddingService.js.map +1 -1
  167. package/dist/src/controllers/ExplainableRecall.d.ts +1 -1
  168. package/dist/src/controllers/ExplainableRecall.d.ts.map +1 -1
  169. package/dist/src/controllers/ExplainableRecall.js +1 -1
  170. package/dist/src/controllers/ExplainableRecall.js.map +1 -1
  171. package/dist/src/controllers/HNSWIndex.d.ts +20 -2
  172. package/dist/src/controllers/HNSWIndex.d.ts.map +1 -1
  173. package/dist/src/controllers/HNSWIndex.js +82 -6
  174. package/dist/src/controllers/HNSWIndex.js.map +1 -1
  175. package/dist/src/controllers/LearningSystem.d.ts +1 -17
  176. package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
  177. package/dist/src/controllers/LearningSystem.js +18 -135
  178. package/dist/src/controllers/LearningSystem.js.map +1 -1
  179. package/dist/src/controllers/MemoryController.d.ts +161 -0
  180. package/dist/src/controllers/MemoryController.d.ts.map +1 -0
  181. package/dist/src/controllers/MemoryController.js +303 -0
  182. package/dist/src/controllers/MemoryController.js.map +1 -0
  183. package/dist/src/controllers/MincutService.d.ts +92 -0
  184. package/dist/src/controllers/MincutService.d.ts.map +1 -0
  185. package/dist/src/controllers/MincutService.js +336 -0
  186. package/dist/src/controllers/MincutService.js.map +1 -0
  187. package/dist/src/controllers/NightlyLearner.d.ts +5 -1
  188. package/dist/src/controllers/NightlyLearner.d.ts.map +1 -1
  189. package/dist/src/controllers/NightlyLearner.js +17 -3
  190. package/dist/src/controllers/NightlyLearner.js.map +1 -1
  191. package/dist/src/controllers/QUICClient.d.ts +45 -0
  192. package/dist/src/controllers/QUICClient.d.ts.map +1 -1
  193. package/dist/src/controllers/QUICClient.js +190 -0
  194. package/dist/src/controllers/QUICClient.js.map +1 -1
  195. package/dist/src/controllers/ReasoningBank.d.ts +6 -3
  196. package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
  197. package/dist/src/controllers/ReasoningBank.js +47 -41
  198. package/dist/src/controllers/ReasoningBank.js.map +1 -1
  199. package/dist/src/controllers/ReflexionMemory.d.ts +115 -6
  200. package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
  201. package/dist/src/controllers/ReflexionMemory.js +541 -213
  202. package/dist/src/controllers/ReflexionMemory.js.map +1 -1
  203. package/dist/src/controllers/SkillLibrary.d.ts +27 -3
  204. package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
  205. package/dist/src/controllers/SkillLibrary.js +187 -91
  206. package/dist/src/controllers/SkillLibrary.js.map +1 -1
  207. package/dist/src/controllers/SparsificationService.d.ts +151 -0
  208. package/dist/src/controllers/SparsificationService.d.ts.map +1 -0
  209. package/dist/src/controllers/SparsificationService.js +375 -0
  210. package/dist/src/controllers/SparsificationService.js.map +1 -0
  211. package/dist/src/controllers/SyncCoordinator.d.ts.map +1 -1
  212. package/dist/src/controllers/SyncCoordinator.js +115 -3
  213. package/dist/src/controllers/SyncCoordinator.js.map +1 -1
  214. package/dist/src/controllers/WASMVectorSearch.d.ts +12 -30
  215. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  216. package/dist/src/controllers/WASMVectorSearch.js +146 -93
  217. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  218. package/dist/src/controllers/attention/AttentionCache.d.ts +38 -0
  219. package/dist/src/controllers/attention/AttentionCache.d.ts.map +1 -0
  220. package/dist/src/controllers/attention/AttentionCache.js +80 -0
  221. package/dist/src/controllers/attention/AttentionCache.js.map +1 -0
  222. package/dist/src/controllers/attention/AttentionConfig.d.ts +127 -0
  223. package/dist/src/controllers/attention/AttentionConfig.d.ts.map +1 -0
  224. package/dist/src/controllers/attention/AttentionConfig.js +124 -0
  225. package/dist/src/controllers/attention/AttentionConfig.js.map +1 -0
  226. package/dist/src/controllers/attention/AttentionCore.d.ts +89 -0
  227. package/dist/src/controllers/attention/AttentionCore.d.ts.map +1 -0
  228. package/dist/src/controllers/attention/AttentionCore.js +289 -0
  229. package/dist/src/controllers/attention/AttentionCore.js.map +1 -0
  230. package/dist/src/controllers/attention/AttentionHelpers.d.ts +55 -0
  231. package/dist/src/controllers/attention/AttentionHelpers.d.ts.map +1 -0
  232. package/dist/src/controllers/attention/AttentionHelpers.js +148 -0
  233. package/dist/src/controllers/attention/AttentionHelpers.js.map +1 -0
  234. package/dist/src/controllers/attention/AttentionMetrics.d.ts +55 -0
  235. package/dist/src/controllers/attention/AttentionMetrics.d.ts.map +1 -0
  236. package/dist/src/controllers/attention/AttentionMetrics.js +72 -0
  237. package/dist/src/controllers/attention/AttentionMetrics.js.map +1 -0
  238. package/dist/src/controllers/attention/AttentionWASM.d.ts +98 -0
  239. package/dist/src/controllers/attention/AttentionWASM.d.ts.map +1 -0
  240. package/dist/src/controllers/attention/AttentionWASM.js +147 -0
  241. package/dist/src/controllers/attention/AttentionWASM.js.map +1 -0
  242. package/dist/src/controllers/attention/CrossAttentionController.d.ts +141 -0
  243. package/dist/src/controllers/attention/CrossAttentionController.d.ts.map +1 -0
  244. package/dist/src/controllers/attention/CrossAttentionController.js +325 -0
  245. package/dist/src/controllers/attention/CrossAttentionController.js.map +1 -0
  246. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts +137 -0
  247. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts.map +1 -0
  248. package/dist/src/controllers/attention/MultiHeadAttentionController.js +336 -0
  249. package/dist/src/controllers/attention/MultiHeadAttentionController.js.map +1 -0
  250. package/dist/src/controllers/attention/SelfAttentionController.d.ts +117 -0
  251. package/dist/src/controllers/attention/SelfAttentionController.d.ts.map +1 -0
  252. package/dist/src/controllers/attention/SelfAttentionController.js +205 -0
  253. package/dist/src/controllers/attention/SelfAttentionController.js.map +1 -0
  254. package/dist/src/controllers/attention/index.d.ts +24 -0
  255. package/dist/src/controllers/attention/index.d.ts.map +1 -0
  256. package/dist/src/controllers/attention/index.js +20 -0
  257. package/dist/src/controllers/attention/index.js.map +1 -0
  258. package/dist/src/controllers/index.d.ts +14 -27
  259. package/dist/src/controllers/index.d.ts.map +1 -1
  260. package/dist/src/controllers/index.js +10 -18
  261. package/dist/src/controllers/index.js.map +1 -1
  262. package/dist/src/controllers/prerequisites.d.ts +76 -0
  263. package/dist/src/controllers/prerequisites.d.ts.map +1 -0
  264. package/dist/src/controllers/prerequisites.js +235 -0
  265. package/dist/src/controllers/prerequisites.js.map +1 -0
  266. package/dist/src/core/AgentDB.d.ts +27 -19
  267. package/dist/src/core/AgentDB.d.ts.map +1 -1
  268. package/dist/src/core/AgentDB.js +76 -124
  269. package/dist/src/core/AgentDB.js.map +1 -1
  270. package/dist/src/core/QueryCache.d.ts +138 -0
  271. package/dist/src/core/QueryCache.d.ts.map +1 -0
  272. package/dist/src/core/QueryCache.js +309 -0
  273. package/dist/src/core/QueryCache.js.map +1 -0
  274. package/dist/src/db-fallback.d.ts +10 -1
  275. package/dist/src/db-fallback.d.ts.map +1 -1
  276. package/dist/src/db-fallback.js +205 -28
  277. package/dist/src/db-fallback.js.map +1 -1
  278. package/dist/src/examples/quic-sync-example.js +2 -2
  279. package/dist/src/examples/quic-sync-example.js.map +1 -1
  280. package/dist/src/index.d.ts +15 -15
  281. package/dist/src/index.d.ts.map +1 -1
  282. package/dist/src/index.js +39 -11
  283. package/dist/src/index.js.map +1 -1
  284. package/dist/src/mcp/agentdb-mcp-server.js +47 -2
  285. package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
  286. package/dist/src/model/ModelCacheLoader.d.ts +24 -0
  287. package/dist/src/model/ModelCacheLoader.d.ts.map +1 -0
  288. package/dist/src/model/ModelCacheLoader.js +121 -0
  289. package/dist/src/model/ModelCacheLoader.js.map +1 -0
  290. package/dist/src/observability/index.d.ts +8 -0
  291. package/dist/src/observability/index.d.ts.map +1 -0
  292. package/dist/src/observability/index.js +8 -0
  293. package/dist/src/observability/index.js.map +1 -0
  294. package/dist/src/observability/integration.d.ts +32 -0
  295. package/dist/src/observability/integration.d.ts.map +1 -0
  296. package/dist/src/observability/integration.js +159 -0
  297. package/dist/src/observability/integration.js.map +1 -0
  298. package/dist/src/observability/telemetry.d.ts +137 -0
  299. package/dist/src/observability/telemetry.d.ts.map +1 -0
  300. package/dist/src/observability/telemetry.js +416 -0
  301. package/dist/src/observability/telemetry.js.map +1 -0
  302. package/dist/src/optimizations/BatchOperations.d.ts +47 -0
  303. package/dist/src/optimizations/BatchOperations.d.ts.map +1 -1
  304. package/dist/src/optimizations/BatchOperations.js +183 -31
  305. package/dist/src/optimizations/BatchOperations.js.map +1 -1
  306. package/dist/src/optimizations/Quantization.d.ts +330 -0
  307. package/dist/src/optimizations/Quantization.d.ts.map +1 -0
  308. package/dist/src/optimizations/Quantization.js +793 -0
  309. package/dist/src/optimizations/Quantization.js.map +1 -0
  310. package/dist/src/optimizations/index.d.ts +1 -3
  311. package/dist/src/optimizations/index.d.ts.map +1 -1
  312. package/dist/src/optimizations/index.js +0 -1
  313. package/dist/src/optimizations/index.js.map +1 -1
  314. package/dist/src/quantization/index.d.ts +7 -0
  315. package/dist/src/quantization/index.d.ts.map +1 -0
  316. package/dist/src/quantization/index.js +15 -0
  317. package/dist/src/quantization/index.js.map +1 -0
  318. package/dist/src/quantization/vector-quantization.d.ts +388 -0
  319. package/dist/src/quantization/vector-quantization.d.ts.map +1 -0
  320. package/dist/src/quantization/vector-quantization.js +1132 -0
  321. package/dist/src/quantization/vector-quantization.js.map +1 -0
  322. package/dist/src/search/HybridSearch.d.ts +311 -0
  323. package/dist/src/search/HybridSearch.d.ts.map +1 -0
  324. package/dist/src/search/HybridSearch.js +712 -0
  325. package/dist/src/search/HybridSearch.js.map +1 -0
  326. package/dist/src/search/index.d.ts +12 -0
  327. package/dist/src/search/index.d.ts.map +1 -0
  328. package/dist/src/search/index.js +16 -0
  329. package/dist/src/search/index.js.map +1 -0
  330. package/dist/src/services/AttentionService.d.ts +303 -0
  331. package/dist/src/services/AttentionService.d.ts.map +1 -0
  332. package/dist/src/services/AttentionService.js +1165 -0
  333. package/dist/src/services/AttentionService.js.map +1 -0
  334. package/dist/src/services/LLMRouter.d.ts +61 -7
  335. package/dist/src/services/LLMRouter.d.ts.map +1 -1
  336. package/dist/src/services/LLMRouter.js +286 -22
  337. package/dist/src/services/LLMRouter.js.map +1 -1
  338. package/dist/src/services/audit-logger.service.d.ts +168 -0
  339. package/dist/src/services/audit-logger.service.d.ts.map +1 -0
  340. package/dist/src/services/audit-logger.service.js +331 -0
  341. package/dist/src/services/audit-logger.service.js.map +1 -0
  342. package/dist/src/services/enhanced-embeddings.d.ts +271 -0
  343. package/dist/src/services/enhanced-embeddings.d.ts.map +1 -0
  344. package/dist/src/services/enhanced-embeddings.js +1035 -0
  345. package/dist/src/services/enhanced-embeddings.js.map +1 -0
  346. package/dist/src/services/federated-learning.d.ts +172 -0
  347. package/dist/src/services/federated-learning.d.ts.map +1 -0
  348. package/dist/src/services/federated-learning.js +342 -0
  349. package/dist/src/services/federated-learning.js.map +1 -0
  350. package/dist/src/simd/index.d.ts +9 -0
  351. package/dist/src/simd/index.d.ts.map +1 -0
  352. package/dist/src/simd/index.js +27 -0
  353. package/dist/src/simd/index.js.map +1 -0
  354. package/dist/src/simd/simd-vector-ops.d.ts +332 -0
  355. package/dist/src/simd/simd-vector-ops.d.ts.map +1 -0
  356. package/dist/src/simd/simd-vector-ops.js +945 -0
  357. package/dist/src/simd/simd-vector-ops.js.map +1 -0
  358. package/dist/src/types/database.types.d.ts +275 -0
  359. package/dist/src/types/database.types.d.ts.map +1 -0
  360. package/dist/src/types/database.types.js +55 -0
  361. package/dist/src/types/database.types.js.map +1 -0
  362. package/dist/src/types/graph.d.ts +29 -0
  363. package/dist/src/types/graph.d.ts.map +1 -0
  364. package/dist/src/types/graph.js +8 -0
  365. package/dist/src/types/graph.js.map +1 -0
  366. package/dist/src/utils/chalk-fallback.d.ts +3 -0
  367. package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
  368. package/dist/src/utils/chalk-fallback.js +20 -0
  369. package/dist/src/utils/chalk-fallback.js.map +1 -0
  370. package/dist/src/utils/similarity.d.ts +11 -0
  371. package/dist/src/utils/similarity.d.ts.map +1 -0
  372. package/dist/src/utils/similarity.js +25 -0
  373. package/dist/src/utils/similarity.js.map +1 -0
  374. package/dist/src/wasm-loader.d.ts +66 -0
  375. package/dist/src/wasm-loader.d.ts.map +1 -0
  376. package/dist/src/wasm-loader.js +76 -0
  377. package/dist/src/wasm-loader.js.map +1 -0
  378. package/dist/src/wrappers/agentdb-fast.d.ts +139 -0
  379. package/dist/src/wrappers/agentdb-fast.d.ts.map +1 -0
  380. package/dist/src/wrappers/agentdb-fast.js +307 -0
  381. package/dist/src/wrappers/agentdb-fast.js.map +1 -0
  382. package/dist/src/wrappers/attention-fallbacks.d.ts +343 -0
  383. package/dist/src/wrappers/attention-fallbacks.d.ts.map +1 -0
  384. package/dist/src/wrappers/attention-fallbacks.js +1484 -0
  385. package/dist/src/wrappers/attention-fallbacks.js.map +1 -0
  386. package/dist/src/wrappers/attention-native.d.ts +111 -0
  387. package/dist/src/wrappers/attention-native.d.ts.map +1 -0
  388. package/dist/src/wrappers/attention-native.js +273 -0
  389. package/dist/src/wrappers/attention-native.js.map +1 -0
  390. package/dist/src/wrappers/embedding-service.d.ts +117 -0
  391. package/dist/src/wrappers/embedding-service.d.ts.map +1 -0
  392. package/dist/src/wrappers/embedding-service.js +370 -0
  393. package/dist/src/wrappers/embedding-service.js.map +1 -0
  394. package/dist/src/wrappers/gnn-wrapper.d.ts +71 -0
  395. package/dist/src/wrappers/gnn-wrapper.d.ts.map +1 -0
  396. package/dist/src/wrappers/gnn-wrapper.js +236 -0
  397. package/dist/src/wrappers/gnn-wrapper.js.map +1 -0
  398. package/dist/src/wrappers/index.d.ts +48 -0
  399. package/dist/src/wrappers/index.d.ts.map +1 -0
  400. package/dist/src/wrappers/index.js +83 -0
  401. package/dist/src/wrappers/index.js.map +1 -0
  402. package/package.json +77 -76
  403. package/scripts/postinstall.cjs +13 -144
  404. package/dist/agentdb.browser.js +0 -1685
  405. package/dist/agentdb.browser.js.map +0 -7
  406. package/dist/agentdb.browser.min.js +0 -3
  407. package/dist/agentdb.browser.min.js.map +0 -7
  408. package/dist/agentdb.wasm-loader.js +0 -207
  409. package/dist/backends/VectorBackend.d.ts +0 -120
  410. package/dist/backends/VectorBackend.js +0 -14
  411. package/dist/backends/VectorBackend.js.map +0 -1
  412. package/dist/optimizations/RVFOptimizer.d.ts +0 -225
  413. package/dist/optimizations/RVFOptimizer.js +0 -541
  414. package/dist/optimizations/RVFOptimizer.js.map +0 -1
  415. package/dist/schemas/frontier-schema.sql +0 -378
  416. package/dist/schemas/schema.sql +0 -382
  417. package/dist/simulation/cli.d.ts +0 -9
  418. package/dist/simulation/cli.d.ts.map +0 -1
  419. package/dist/simulation/cli.js +0 -68
  420. package/dist/simulation/cli.js.map +0 -1
  421. package/dist/simulation/runner.d.ts +0 -21
  422. package/dist/simulation/runner.d.ts.map +0 -1
  423. package/dist/simulation/runner.js +0 -241
  424. package/dist/simulation/runner.js.map +0 -1
  425. package/dist/simulation/scenarios/aidefence-integration.d.ts +0 -24
  426. package/dist/simulation/scenarios/aidefence-integration.d.ts.map +0 -1
  427. package/dist/simulation/scenarios/aidefence-integration.js +0 -124
  428. package/dist/simulation/scenarios/aidefence-integration.js.map +0 -1
  429. package/dist/simulation/scenarios/bmssp-integration.d.ts +0 -23
  430. package/dist/simulation/scenarios/bmssp-integration.d.ts.map +0 -1
  431. package/dist/simulation/scenarios/bmssp-integration.js +0 -104
  432. package/dist/simulation/scenarios/bmssp-integration.js.map +0 -1
  433. package/dist/simulation/scenarios/causal-reasoning.d.ts +0 -16
  434. package/dist/simulation/scenarios/causal-reasoning.d.ts.map +0 -1
  435. package/dist/simulation/scenarios/causal-reasoning.js +0 -108
  436. package/dist/simulation/scenarios/causal-reasoning.js.map +0 -1
  437. package/dist/simulation/scenarios/consciousness-explorer.d.ts +0 -25
  438. package/dist/simulation/scenarios/consciousness-explorer.d.ts.map +0 -1
  439. package/dist/simulation/scenarios/consciousness-explorer.js +0 -108
  440. package/dist/simulation/scenarios/consciousness-explorer.js.map +0 -1
  441. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts +0 -135
  442. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts.map +0 -1
  443. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js +0 -158
  444. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js.map +0 -1
  445. package/dist/simulation/scenarios/domain-examples/index.d.ts +0 -14
  446. package/dist/simulation/scenarios/domain-examples/index.d.ts.map +0 -1
  447. package/dist/simulation/scenarios/domain-examples/index.js +0 -14
  448. package/dist/simulation/scenarios/domain-examples/index.js.map +0 -1
  449. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts +0 -178
  450. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts.map +0 -1
  451. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js +0 -218
  452. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js.map +0 -1
  453. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts +0 -122
  454. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts.map +0 -1
  455. package/dist/simulation/scenarios/domain-examples/medical-imaging.js +0 -129
  456. package/dist/simulation/scenarios/domain-examples/medical-imaging.js.map +0 -1
  457. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts +0 -166
  458. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts.map +0 -1
  459. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js +0 -161
  460. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js.map +0 -1
  461. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts +0 -151
  462. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts.map +0 -1
  463. package/dist/simulation/scenarios/domain-examples/scientific-research.js +0 -187
  464. package/dist/simulation/scenarios/domain-examples/scientific-research.js.map +0 -1
  465. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts +0 -102
  466. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts.map +0 -1
  467. package/dist/simulation/scenarios/domain-examples/trading-systems.js +0 -100
  468. package/dist/simulation/scenarios/domain-examples/trading-systems.js.map +0 -1
  469. package/dist/simulation/scenarios/goalie-integration.d.ts +0 -24
  470. package/dist/simulation/scenarios/goalie-integration.d.ts.map +0 -1
  471. package/dist/simulation/scenarios/goalie-integration.js +0 -121
  472. package/dist/simulation/scenarios/goalie-integration.js.map +0 -1
  473. package/dist/simulation/scenarios/graph-traversal.d.ts +0 -17
  474. package/dist/simulation/scenarios/graph-traversal.d.ts.map +0 -1
  475. package/dist/simulation/scenarios/graph-traversal.js +0 -101
  476. package/dist/simulation/scenarios/graph-traversal.js.map +0 -1
  477. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts +0 -45
  478. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts.map +0 -1
  479. package/dist/simulation/scenarios/latent-space/attention-analysis.js +0 -435
  480. package/dist/simulation/scenarios/latent-space/attention-analysis.js.map +0 -1
  481. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts +0 -55
  482. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts.map +0 -1
  483. package/dist/simulation/scenarios/latent-space/clustering-analysis.js +0 -606
  484. package/dist/simulation/scenarios/latent-space/clustering-analysis.js.map +0 -1
  485. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts +0 -74
  486. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts.map +0 -1
  487. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js +0 -391
  488. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js.map +0 -1
  489. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts +0 -51
  490. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts.map +0 -1
  491. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js +0 -536
  492. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js.map +0 -1
  493. package/dist/simulation/scenarios/latent-space/index.d.ts +0 -35
  494. package/dist/simulation/scenarios/latent-space/index.d.ts.map +0 -1
  495. package/dist/simulation/scenarios/latent-space/index.js +0 -35
  496. package/dist/simulation/scenarios/latent-space/index.js.map +0 -1
  497. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts +0 -52
  498. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts.map +0 -1
  499. package/dist/simulation/scenarios/latent-space/neural-augmentation.js +0 -472
  500. package/dist/simulation/scenarios/latent-space/neural-augmentation.js.map +0 -1
  501. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts +0 -53
  502. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts.map +0 -1
  503. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js +0 -391
  504. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js.map +0 -1
  505. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts +0 -52
  506. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts.map +0 -1
  507. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js +0 -514
  508. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js.map +0 -1
  509. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts +0 -53
  510. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts.map +0 -1
  511. package/dist/simulation/scenarios/latent-space/traversal-optimization.js +0 -595
  512. package/dist/simulation/scenarios/latent-space/traversal-optimization.js.map +0 -1
  513. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts +0 -18
  514. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts.map +0 -1
  515. package/dist/simulation/scenarios/lean-agentic-swarm.js +0 -132
  516. package/dist/simulation/scenarios/lean-agentic-swarm.js.map +0 -1
  517. package/dist/simulation/scenarios/multi-agent-swarm.d.ts +0 -17
  518. package/dist/simulation/scenarios/multi-agent-swarm.d.ts.map +0 -1
  519. package/dist/simulation/scenarios/multi-agent-swarm.js +0 -111
  520. package/dist/simulation/scenarios/multi-agent-swarm.js.map +0 -1
  521. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts +0 -23
  522. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts.map +0 -1
  523. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js +0 -98
  524. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js.map +0 -1
  525. package/dist/simulation/scenarios/reflexion-learning.d.ts +0 -16
  526. package/dist/simulation/scenarios/reflexion-learning.d.ts.map +0 -1
  527. package/dist/simulation/scenarios/reflexion-learning.js +0 -98
  528. package/dist/simulation/scenarios/reflexion-learning.js.map +0 -1
  529. package/dist/simulation/scenarios/research-swarm.d.ts +0 -24
  530. package/dist/simulation/scenarios/research-swarm.d.ts.map +0 -1
  531. package/dist/simulation/scenarios/research-swarm.js +0 -146
  532. package/dist/simulation/scenarios/research-swarm.js.map +0 -1
  533. package/dist/simulation/scenarios/skill-evolution.d.ts +0 -16
  534. package/dist/simulation/scenarios/skill-evolution.d.ts.map +0 -1
  535. package/dist/simulation/scenarios/skill-evolution.js +0 -109
  536. package/dist/simulation/scenarios/skill-evolution.js.map +0 -1
  537. package/dist/simulation/scenarios/stock-market-emergence.d.ts +0 -33
  538. package/dist/simulation/scenarios/stock-market-emergence.d.ts.map +0 -1
  539. package/dist/simulation/scenarios/stock-market-emergence.js +0 -246
  540. package/dist/simulation/scenarios/stock-market-emergence.js.map +0 -1
  541. package/dist/simulation/scenarios/strange-loops.d.ts +0 -18
  542. package/dist/simulation/scenarios/strange-loops.d.ts.map +0 -1
  543. package/dist/simulation/scenarios/strange-loops.js +0 -133
  544. package/dist/simulation/scenarios/strange-loops.js.map +0 -1
  545. package/dist/simulation/scenarios/sublinear-solver.d.ts +0 -22
  546. package/dist/simulation/scenarios/sublinear-solver.d.ts.map +0 -1
  547. package/dist/simulation/scenarios/sublinear-solver.js +0 -82
  548. package/dist/simulation/scenarios/sublinear-solver.js.map +0 -1
  549. package/dist/simulation/scenarios/temporal-lead-solver.d.ts +0 -23
  550. package/dist/simulation/scenarios/temporal-lead-solver.d.ts.map +0 -1
  551. package/dist/simulation/scenarios/temporal-lead-solver.js +0 -90
  552. package/dist/simulation/scenarios/temporal-lead-solver.js.map +0 -1
  553. package/dist/simulation/scenarios/voting-system-consensus.d.ts +0 -27
  554. package/dist/simulation/scenarios/voting-system-consensus.d.ts.map +0 -1
  555. package/dist/simulation/scenarios/voting-system-consensus.js +0 -175
  556. package/dist/simulation/scenarios/voting-system-consensus.js.map +0 -1
  557. package/dist/simulation/types.d.ts +0 -162
  558. package/dist/simulation/types.d.ts.map +0 -1
  559. package/dist/simulation/types.js +0 -5
  560. package/dist/simulation/types.js.map +0 -1
  561. package/dist/simulation/utils/PerformanceOptimizer.d.ts +0 -115
  562. package/dist/simulation/utils/PerformanceOptimizer.d.ts.map +0 -1
  563. package/dist/simulation/utils/PerformanceOptimizer.js +0 -223
  564. package/dist/simulation/utils/PerformanceOptimizer.js.map +0 -1
  565. package/dist/src/backends/index.cjs +0 -6
  566. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +0 -93
  567. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +0 -1
  568. package/dist/src/backends/ruvector/GuardedVectorBackend.js +0 -182
  569. package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +0 -1
  570. package/dist/src/consensus/RaftConsensus.d.ts +0 -220
  571. package/dist/src/consensus/RaftConsensus.d.ts.map +0 -1
  572. package/dist/src/consensus/RaftConsensus.js +0 -762
  573. package/dist/src/consensus/RaftConsensus.js.map +0 -1
  574. package/dist/src/controllers/HierarchicalMemory.d.ts +0 -197
  575. package/dist/src/controllers/HierarchicalMemory.d.ts.map +0 -1
  576. package/dist/src/controllers/HierarchicalMemory.js +0 -519
  577. package/dist/src/controllers/HierarchicalMemory.js.map +0 -1
  578. package/dist/src/controllers/MemoryConsolidation.d.ts +0 -142
  579. package/dist/src/controllers/MemoryConsolidation.d.ts.map +0 -1
  580. package/dist/src/controllers/MemoryConsolidation.js +0 -479
  581. package/dist/src/controllers/MemoryConsolidation.js.map +0 -1
  582. package/dist/src/controllers/QUICConnection.d.ts +0 -122
  583. package/dist/src/controllers/QUICConnection.d.ts.map +0 -1
  584. package/dist/src/controllers/QUICConnection.js +0 -329
  585. package/dist/src/controllers/QUICConnection.js.map +0 -1
  586. package/dist/src/controllers/QUICConnectionPool.d.ts +0 -83
  587. package/dist/src/controllers/QUICConnectionPool.d.ts.map +0 -1
  588. package/dist/src/controllers/QUICConnectionPool.js +0 -256
  589. package/dist/src/controllers/QUICConnectionPool.js.map +0 -1
  590. package/dist/src/controllers/QUICStreamManager.d.ts +0 -114
  591. package/dist/src/controllers/QUICStreamManager.d.ts.map +0 -1
  592. package/dist/src/controllers/QUICStreamManager.js +0 -267
  593. package/dist/src/controllers/QUICStreamManager.js.map +0 -1
  594. package/dist/src/controllers/StreamingEmbeddingService.d.ts +0 -82
  595. package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +0 -1
  596. package/dist/src/controllers/StreamingEmbeddingService.js +0 -243
  597. package/dist/src/controllers/StreamingEmbeddingService.js.map +0 -1
  598. package/dist/src/controllers/index.cjs +0 -6
  599. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
  600. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
  601. package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
  602. package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
  603. package/dist/src/coordination/index.d.ts +0 -10
  604. package/dist/src/coordination/index.d.ts.map +0 -1
  605. package/dist/src/coordination/index.js +0 -10
  606. package/dist/src/coordination/index.js.map +0 -1
  607. package/dist/src/index.cjs +0 -6
  608. package/dist/src/optimizations/RVFOptimizer.d.ts +0 -226
  609. package/dist/src/optimizations/RVFOptimizer.d.ts.map +0 -1
  610. package/dist/src/optimizations/RVFOptimizer.js +0 -541
  611. package/dist/src/optimizations/RVFOptimizer.js.map +0 -1
  612. package/dist/src/security/AttestationLog.d.ts +0 -70
  613. package/dist/src/security/AttestationLog.d.ts.map +0 -1
  614. package/dist/src/security/AttestationLog.js +0 -174
  615. package/dist/src/security/AttestationLog.js.map +0 -1
  616. package/dist/src/security/MutationGuard.d.ts +0 -83
  617. package/dist/src/security/MutationGuard.d.ts.map +0 -1
  618. package/dist/src/security/MutationGuard.js +0 -364
  619. package/dist/src/security/MutationGuard.js.map +0 -1
  620. package/dist/src/security/index.cjs +0 -6
  621. package/dist/src/security/index.d.ts +0 -15
  622. package/dist/src/security/index.d.ts.map +0 -1
  623. package/dist/src/security/index.js +0 -18
  624. package/dist/src/security/index.js.map +0 -1
  625. package/dist/src/services/GNNService.d.ts +0 -173
  626. package/dist/src/services/GNNService.d.ts.map +0 -1
  627. package/dist/src/services/GNNService.js +0 -639
  628. package/dist/src/services/GNNService.js.map +0 -1
  629. package/dist/src/services/GraphTransformerService.d.ts +0 -80
  630. package/dist/src/services/GraphTransformerService.d.ts.map +0 -1
  631. package/dist/src/services/GraphTransformerService.js +0 -369
  632. package/dist/src/services/GraphTransformerService.js.map +0 -1
  633. package/dist/src/services/SemanticRouter.d.ts +0 -83
  634. package/dist/src/services/SemanticRouter.d.ts.map +0 -1
  635. package/dist/src/services/SemanticRouter.js +0 -160
  636. package/dist/src/services/SemanticRouter.js.map +0 -1
  637. package/dist/src/services/SonaTrajectoryService.d.ts +0 -224
  638. package/dist/src/services/SonaTrajectoryService.d.ts.map +0 -1
  639. package/dist/src/services/SonaTrajectoryService.js +0 -539
  640. package/dist/src/services/SonaTrajectoryService.js.map +0 -1
  641. package/dist/src/utils/LegacyAttentionAdapter.d.ts +0 -93
  642. package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +0 -1
  643. package/dist/src/utils/LegacyAttentionAdapter.js +0 -241
  644. package/dist/src/utils/LegacyAttentionAdapter.js.map +0 -1
  645. package/dist/src/utils/vector-math.d.ts +0 -29
  646. package/dist/src/utils/vector-math.d.ts.map +0 -1
  647. package/dist/src/utils/vector-math.js +0 -66
  648. package/dist/src/utils/vector-math.js.map +0 -1
@@ -7,25 +7,39 @@
7
7
  * Based on: "Reflexion: Language Agents with Verbal Reinforcement Learning"
8
8
  * https://arxiv.org/abs/2303.11366
9
9
  */
10
+ import { normalizeRowId } from '../types/database.types.js';
10
11
  import { NodeIdMapper } from '../utils/NodeIdMapper.js';
11
- import { cosineSimilarity } from '../utils/vector-math.js';
12
+ import { QueryCache } from '../core/QueryCache.js';
12
13
  export class ReflexionMemory {
13
14
  db;
14
15
  embedder;
15
16
  vectorBackend;
16
17
  learningBackend;
17
18
  graphBackend;
18
- constructor(db, embedder, vectorBackend, learningBackend, graphBackend) {
19
+ queryCache;
20
+ constructor(db, embedder, vectorBackend, learningBackend, graphBackend, cacheConfig) {
19
21
  this.db = db;
20
22
  this.embedder = embedder;
21
23
  this.vectorBackend = vectorBackend;
22
24
  this.learningBackend = learningBackend;
23
25
  this.graphBackend = graphBackend;
26
+ this.queryCache = new QueryCache(cacheConfig);
24
27
  }
25
28
  /**
26
29
  * Store a new episode with its critique and outcome
30
+ * Invalidates relevant cache entries
31
+ *
32
+ * Persistence guarantee (issue #128 fix):
33
+ * storeEpisode() always writes to the SQLite `episodes` and
34
+ * `episode_embeddings` tables when a SQL-capable connection is present,
35
+ * even when a graph or vector backend handles the primary index. This
36
+ * ensures data survives process restarts (graph/vector backends are
37
+ * often in-memory or rebuildable from SQL).
27
38
  */
28
39
  async storeEpisode(episode) {
40
+ // Invalidate episode caches on write
41
+ this.queryCache.invalidateCategory('episodes');
42
+ this.queryCache.invalidateCategory('task-stats');
29
43
  // Use GraphDatabaseAdapter if available (AgentDB v2)
30
44
  if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
31
45
  // GraphDatabaseAdapter has specialized storeEpisode method
@@ -44,12 +58,15 @@ export class ReflexionMemory {
44
58
  critique: episode.critique,
45
59
  createdAt: episode.ts ? episode.ts * 1000 : Date.now(),
46
60
  tokensUsed: episode.tokensUsed,
47
- latencyMs: episode.latencyMs
61
+ latencyMs: episode.latencyMs,
48
62
  }, taskEmbedding);
49
63
  // Return a numeric ID (parse from string ID)
50
64
  const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
51
65
  // Register mapping for later use by CausalMemoryGraph
52
66
  NodeIdMapper.getInstance().register(numericId, nodeId);
67
+ // #128: dual-write to SQL for restart-safe persistence. Graph adapter
68
+ // index is typically in-memory; SQL is the durable record.
69
+ this.dualWriteEpisodeToSQL(episode, taskEmbedding);
53
70
  return numericId;
54
71
  }
55
72
  // Use generic GraphBackend if available
@@ -69,22 +86,21 @@ export class ReflexionMemory {
69
86
  tokensUsed: episode.tokensUsed || 0,
70
87
  tags: episode.tags ? JSON.stringify(episode.tags) : '[]',
71
88
  metadata: episode.metadata ? JSON.stringify(episode.metadata) : '{}',
72
- createdAt: Date.now()
89
+ createdAt: Date.now(),
73
90
  });
74
91
  // Store embedding using vectorBackend if available
75
92
  if (this.vectorBackend && taskEmbedding) {
76
- try {
77
- this.vectorBackend.insert(nodeId, taskEmbedding, {
78
- type: 'episode',
79
- sessionId: episode.sessionId
80
- });
81
- }
82
- catch { /* vectorBackend insert failed — graph node still created */ }
93
+ this.vectorBackend.insert(nodeId, taskEmbedding, {
94
+ type: 'episode',
95
+ sessionId: episode.sessionId,
96
+ });
83
97
  }
84
98
  // Return a numeric ID (parse from string ID)
85
99
  const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
86
100
  // Register mapping for later use by CausalMemoryGraph
87
101
  NodeIdMapper.getInstance().register(numericId, nodeId);
102
+ // #128: dual-write to SQL for restart-safe persistence.
103
+ this.dualWriteEpisodeToSQL(episode, taskEmbedding);
88
104
  return numericId;
89
105
  }
90
106
  // Fallback to SQLite (v1 compatibility)
@@ -97,16 +113,13 @@ export class ReflexionMemory {
97
113
  const tags = episode.tags ? JSON.stringify(episode.tags) : null;
98
114
  const metadata = episode.metadata ? JSON.stringify(episode.metadata) : null;
99
115
  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);
100
- const episodeId = result.lastInsertRowid;
116
+ const episodeId = normalizeRowId(result.lastInsertRowid);
101
117
  // Generate and store embedding
102
118
  const text = this.buildEpisodeText(episode);
103
119
  const embedding = await this.embedder.embed(text);
104
120
  // Use vector backend if available (150x faster retrieval)
105
121
  if (this.vectorBackend) {
106
- try {
107
- this.vectorBackend.insert(episodeId.toString(), embedding);
108
- }
109
- catch { /* vectorBackend insert failed — SQL fallback used */ }
122
+ this.vectorBackend.insert(episodeId.toString(), embedding);
110
123
  }
111
124
  // Also store in SQL for fallback
112
125
  this.storeEmbedding(episodeId, embedding);
@@ -124,155 +137,198 @@ export class ReflexionMemory {
124
137
  task: episode.task,
125
138
  sessionId: episode.sessionId,
126
139
  latencyMs: episode.latencyMs,
127
- tokensUsed: episode.tokensUsed
128
- }
140
+ tokensUsed: episode.tokensUsed,
141
+ },
129
142
  });
130
143
  }
131
144
  return episodeId;
132
145
  }
133
146
  /**
134
147
  * Retrieve relevant past episodes for a new task attempt
148
+ * Results are cached for improved performance
135
149
  */
136
150
  async retrieveRelevant(query) {
137
- const { task, currentState = '', k = 5, minReward, onlyFailures = false, onlySuccesses = false, timeWindowDays } = query;
138
- // Generate query embedding
151
+ const { task, currentState = '', k = 5, minReward, onlyFailures = false, onlySuccesses = false, timeWindowDays, } = query;
152
+ // Check cache first
153
+ const cacheKey = this.queryCache.generateKey('retrieveRelevant', [task, currentState, k, minReward, onlyFailures, onlySuccesses, timeWindowDays], 'episodes');
154
+ const cached = this.queryCache.get(cacheKey);
155
+ if (cached) {
156
+ return cached;
157
+ }
158
+ // Generate and enhance query embedding
159
+ const queryEmbedding = await this.prepareQueryEmbedding(task, currentState, k);
160
+ // Try different retrieval strategies in order of preference
161
+ let episodes = [];
162
+ if (this.graphBackend && 'searchSimilarEpisodes' in this.graphBackend) {
163
+ episodes = await this.retrieveFromGraphAdapter(queryEmbedding, query);
164
+ }
165
+ else if (this.graphBackend && 'execute' in this.graphBackend) {
166
+ episodes = await this.retrieveFromGenericGraph(query);
167
+ }
168
+ else if (this.vectorBackend) {
169
+ episodes = await this.retrieveFromVectorBackend(queryEmbedding, query);
170
+ }
171
+ else {
172
+ episodes = await this.retrieveFromSQLFallback(queryEmbedding, query);
173
+ }
174
+ // Cache and return results
175
+ this.queryCache.set(cacheKey, episodes);
176
+ return episodes;
177
+ }
178
+ /**
179
+ * Prepare and enhance query embedding for search
180
+ */
181
+ async prepareQueryEmbedding(task, currentState, k) {
139
182
  const queryText = currentState ? `${task}\n${currentState}` : task;
140
183
  let queryEmbedding = await this.embedder.embed(queryText);
141
184
  // Enhance query with GNN if learning backend available
142
185
  if (this.learningBackend) {
143
186
  queryEmbedding = await this.enhanceQueryWithGNN(queryEmbedding, k);
144
187
  }
145
- // Use GraphDatabaseAdapter if available (AgentDB v2)
146
- if (this.graphBackend && 'searchSimilarEpisodes' in this.graphBackend) {
147
- const graphAdapter = this.graphBackend;
148
- // Search using vector similarity
149
- const results = await graphAdapter.searchSimilarEpisodes(queryEmbedding, k * 3);
150
- // Apply filters
151
- const filtered = results.filter((ep) => {
152
- if (minReward !== undefined && ep.reward < minReward)
153
- return false;
154
- if (onlyFailures && ep.success)
155
- return false;
156
- if (onlySuccesses && !ep.success)
157
- return false;
158
- if (timeWindowDays && ep.createdAt < (Date.now() - timeWindowDays * 86400000))
159
- return false;
160
- return true;
161
- });
162
- // Convert to EpisodeWithEmbedding format
163
- const episodes = filtered.slice(0, k).map((ep) => ({
164
- id: parseInt(ep.id.split('-').pop() || '0', 36),
165
- sessionId: ep.sessionId,
166
- task: ep.task,
167
- input: ep.input,
168
- output: ep.output,
169
- critique: ep.critique,
170
- reward: ep.reward,
171
- success: ep.success,
172
- latencyMs: ep.latencyMs,
173
- tokensUsed: ep.tokensUsed,
174
- ts: Math.floor(ep.createdAt / 1000)
175
- }));
176
- return episodes;
188
+ return queryEmbedding;
189
+ }
190
+ /**
191
+ * Retrieve episodes using GraphDatabaseAdapter (AgentDB v2)
192
+ */
193
+ async retrieveFromGraphAdapter(queryEmbedding, query) {
194
+ const { k = 5, minReward, onlyFailures, onlySuccesses, timeWindowDays } = query;
195
+ const graphAdapter = this.graphBackend;
196
+ // Search using vector similarity
197
+ const results = await graphAdapter.searchSimilarEpisodes(queryEmbedding, k * 3);
198
+ // Apply filters
199
+ const filtered = this.applyEpisodeFilters(results, {
200
+ minReward,
201
+ onlyFailures,
202
+ onlySuccesses,
203
+ timeWindowDays,
204
+ });
205
+ // Convert to EpisodeWithEmbedding format
206
+ return filtered.slice(0, k).map((ep) => this.convertGraphEpisode(ep));
207
+ }
208
+ /**
209
+ * Retrieve episodes using generic GraphBackend
210
+ */
211
+ async retrieveFromGenericGraph(query) {
212
+ const { k = 5 } = query;
213
+ const cypherQuery = this.buildCypherQuery(query);
214
+ const result = await this.graphBackend.execute(cypherQuery);
215
+ // Convert to EpisodeWithEmbedding format
216
+ const episodes = result.rows.map((row) => this.convertCypherEpisode(row.e));
217
+ return episodes.slice(0, k);
218
+ }
219
+ /**
220
+ * Retrieve episodes using VectorBackend (150x faster)
221
+ */
222
+ async retrieveFromVectorBackend(queryEmbedding, query) {
223
+ const { k = 5, minReward, onlyFailures, onlySuccesses, timeWindowDays } = query;
224
+ // Get candidates from vector backend
225
+ const searchResults = this.vectorBackend.search(queryEmbedding, k * 3, {
226
+ threshold: 0.0,
227
+ });
228
+ // Fetch full episode data from DB
229
+ const episodeIds = searchResults.map((r) => parseInt(r.id));
230
+ if (episodeIds.length === 0) {
231
+ return [];
177
232
  }
178
- // Use generic GraphBackend if available
179
- if (this.graphBackend && 'execute' in this.graphBackend) {
180
- // Build Cypher query with filters
181
- let cypherQuery = 'MATCH (e:Episode) WHERE 1=1';
182
- if (minReward !== undefined) {
183
- cypherQuery += ` AND e.reward >= ${minReward}`;
184
- }
185
- if (onlyFailures) {
186
- cypherQuery += ` AND e.success = false`;
187
- }
188
- if (onlySuccesses) {
189
- cypherQuery += ` AND e.success = true`;
190
- }
191
- if (timeWindowDays) {
192
- const cutoff = Date.now() - timeWindowDays * 86400000;
193
- cypherQuery += ` AND e.createdAt >= ${cutoff}`;
233
+ const rows = this.fetchEpisodesByIds(episodeIds);
234
+ const episodeMap = new Map(rows.map((r) => [r.id.toString(), r]));
235
+ // Map results with similarity scores and apply filters
236
+ const episodes = [];
237
+ for (const result of searchResults) {
238
+ const row = episodeMap.get(result.id);
239
+ if (!row)
240
+ continue;
241
+ // Apply filters
242
+ if (!this.passesEpisodeFilters(row, { minReward, onlyFailures, onlySuccesses, timeWindowDays })) {
243
+ continue;
194
244
  }
195
- cypherQuery += ` RETURN e LIMIT ${k * 3}`;
196
- const result = await this.graphBackend.execute(cypherQuery);
197
- // Convert to EpisodeWithEmbedding format
198
- const episodes = result.rows.map((row) => {
199
- const node = row.e;
200
- return {
201
- id: parseInt(node.id.split('-').pop() || '0', 36),
202
- sessionId: node.properties.sessionId,
203
- task: node.properties.task,
204
- input: node.properties.input,
205
- output: node.properties.output,
206
- critique: node.properties.critique,
207
- reward: typeof node.properties.reward === 'string' ? parseFloat(node.properties.reward) : node.properties.reward,
208
- success: typeof node.properties.success === 'string' ? node.properties.success === 'true' : node.properties.success,
209
- latencyMs: node.properties.latencyMs,
210
- tokensUsed: node.properties.tokensUsed,
211
- tags: node.properties.tags ? JSON.parse(node.properties.tags) : [],
212
- metadata: node.properties.metadata ? JSON.parse(node.properties.metadata) : {},
213
- ts: Math.floor(node.properties.createdAt / 1000)
214
- };
215
- });
216
- return episodes.slice(0, k);
245
+ episodes.push(this.convertDatabaseEpisode(row, result.similarity));
246
+ if (episodes.length >= k)
247
+ break;
217
248
  }
218
- // Use optimized vector backend if available (150x faster)
219
- if (this.vectorBackend) {
220
- try {
221
- // Get candidates from vector backend
222
- const searchResults = this.vectorBackend.search(queryEmbedding, k * 3, {
223
- threshold: 0.0
224
- });
225
- // Fetch full episode data from DB
226
- const episodeIds = searchResults.map(r => parseInt(r.id));
227
- if (episodeIds.length === 0) {
228
- return [];
229
- }
230
- const placeholders = episodeIds.map(() => '?').join(',');
231
- const stmt = this.db.prepare(`
232
- SELECT * FROM episodes
233
- WHERE id IN (${placeholders})
234
- `);
235
- const rows = stmt.all(...episodeIds);
236
- const episodeMap = new Map(rows.map(r => [r.id.toString(), r]));
237
- // Map results back with similarity scores and apply filters
238
- const episodes = [];
239
- for (const result of searchResults) {
240
- const row = episodeMap.get(result.id);
241
- if (!row)
242
- continue;
243
- // Apply additional filters
244
- if (minReward !== undefined && row.reward < minReward)
245
- continue;
246
- if (onlyFailures && row.success === 1)
247
- continue;
248
- if (onlySuccesses && row.success === 0)
249
- continue;
250
- if (timeWindowDays && row.ts < (Date.now() / 1000 - timeWindowDays * 86400))
251
- continue;
252
- episodes.push({
253
- id: row.id,
254
- ts: row.ts,
255
- sessionId: row.session_id,
256
- task: row.task,
257
- input: row.input,
258
- output: row.output,
259
- critique: row.critique,
260
- reward: row.reward,
261
- success: row.success === 1,
262
- latencyMs: row.latency_ms,
263
- tokensUsed: row.tokens_used,
264
- tags: row.tags ? JSON.parse(row.tags) : undefined,
265
- metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
266
- similarity: result.similarity
267
- });
268
- if (episodes.length >= k)
269
- break;
270
- }
271
- return episodes;
272
- }
273
- catch { /* vectorBackend search failed — fall through to SQL */ }
249
+ return episodes;
250
+ }
251
+ /**
252
+ * Retrieve episodes using SQL-based similarity search (fallback)
253
+ */
254
+ async retrieveFromSQLFallback(queryEmbedding, query) {
255
+ const { k = 5 } = query;
256
+ const { whereClause, params } = this.buildSQLFilters(query);
257
+ const stmt = this.db.prepare(`
258
+ SELECT e.*, ee.embedding
259
+ FROM episodes e
260
+ JOIN episode_embeddings ee ON e.id = ee.episode_id
261
+ ${whereClause}
262
+ ORDER BY e.reward DESC
263
+ `);
264
+ const rows = stmt.all(...params);
265
+ // Calculate similarities and convert
266
+ const episodes = rows.map((row) => {
267
+ const embedding = this.deserializeEmbedding(row.embedding);
268
+ const similarity = this.cosineSimilarity(queryEmbedding, embedding);
269
+ return this.convertDatabaseEpisode(row, similarity, embedding);
270
+ });
271
+ // Sort by similarity and return top-k
272
+ episodes.sort((a, b) => (b.similarity || 0) - (a.similarity || 0));
273
+ return episodes.slice(0, k);
274
+ }
275
+ /**
276
+ * Apply episode filters to search results
277
+ */
278
+ applyEpisodeFilters(episodes, filters) {
279
+ return episodes.filter((ep) => {
280
+ if (filters.minReward !== undefined && ep.reward < filters.minReward)
281
+ return false;
282
+ if (filters.onlyFailures && ep.success)
283
+ return false;
284
+ if (filters.onlySuccesses && !ep.success)
285
+ return false;
286
+ if (filters.timeWindowDays && ep.createdAt < Date.now() - filters.timeWindowDays * 86400000)
287
+ return false;
288
+ return true;
289
+ });
290
+ }
291
+ /**
292
+ * Check if database row passes episode filters
293
+ */
294
+ passesEpisodeFilters(row, filters) {
295
+ if (filters.minReward !== undefined && row.reward < filters.minReward)
296
+ return false;
297
+ if (filters.onlyFailures && row.success === 1)
298
+ return false;
299
+ if (filters.onlySuccesses && row.success === 0)
300
+ return false;
301
+ if (filters.timeWindowDays && row.ts < Date.now() / 1000 - filters.timeWindowDays * 86400)
302
+ return false;
303
+ return true;
304
+ }
305
+ /**
306
+ * Build Cypher query with filters
307
+ */
308
+ buildCypherQuery(query) {
309
+ const { k = 5, minReward, onlyFailures, onlySuccesses, timeWindowDays } = query;
310
+ let cypherQuery = 'MATCH (e:Episode) WHERE 1=1';
311
+ if (minReward !== undefined) {
312
+ cypherQuery += ` AND e.reward >= ${minReward}`;
313
+ }
314
+ if (onlyFailures) {
315
+ cypherQuery += ` AND e.success = false`;
316
+ }
317
+ if (onlySuccesses) {
318
+ cypherQuery += ` AND e.success = true`;
274
319
  }
275
- // Fallback to SQL-based similarity search
320
+ if (timeWindowDays) {
321
+ const cutoff = Date.now() - timeWindowDays * 86400000;
322
+ cypherQuery += ` AND e.createdAt >= ${cutoff}`;
323
+ }
324
+ cypherQuery += ` RETURN e LIMIT ${k * 3}`;
325
+ return cypherQuery;
326
+ }
327
+ /**
328
+ * Build SQL WHERE clause and parameters for filters
329
+ */
330
+ buildSQLFilters(query) {
331
+ const { minReward, onlyFailures, onlySuccesses, timeWindowDays } = query;
276
332
  const filters = [];
277
333
  const params = [];
278
334
  if (minReward !== undefined) {
@@ -290,46 +346,93 @@ export class ReflexionMemory {
290
346
  params.push(timeWindowDays * 86400);
291
347
  }
292
348
  const whereClause = filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';
349
+ return { whereClause, params };
350
+ }
351
+ /**
352
+ * Fetch episodes by IDs from database
353
+ */
354
+ fetchEpisodesByIds(episodeIds) {
355
+ const placeholders = episodeIds.map(() => '?').join(',');
293
356
  const stmt = this.db.prepare(`
294
- SELECT
295
- e.*,
296
- ee.embedding
297
- FROM episodes e
298
- JOIN episode_embeddings ee ON e.id = ee.episode_id
299
- ${whereClause}
300
- ORDER BY e.reward DESC
357
+ SELECT * FROM episodes
358
+ WHERE id IN (${placeholders})
301
359
  `);
302
- const rows = stmt.all(...params);
303
- // Calculate similarities manually
304
- const episodes = rows.map(row => {
305
- const embedding = this.deserializeEmbedding(row.embedding);
306
- const similarity = cosineSimilarity(queryEmbedding, embedding);
307
- return {
308
- id: row.id,
309
- ts: row.ts,
310
- sessionId: row.session_id,
311
- task: row.task,
312
- input: row.input,
313
- output: row.output,
314
- critique: row.critique,
315
- reward: row.reward,
316
- success: row.success === 1,
317
- latencyMs: row.latency_ms,
318
- tokensUsed: row.tokens_used,
319
- tags: row.tags ? JSON.parse(row.tags) : undefined,
320
- metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
321
- embedding,
322
- similarity
323
- };
324
- });
325
- // Sort by similarity and return top-k
326
- episodes.sort((a, b) => (b.similarity || 0) - (a.similarity || 0));
327
- return episodes.slice(0, k);
360
+ return stmt.all(...episodeIds);
361
+ }
362
+ /**
363
+ * Convert GraphDatabaseAdapter episode to EpisodeWithEmbedding
364
+ */
365
+ convertGraphEpisode(ep) {
366
+ return {
367
+ id: parseInt(ep.id.split('-').pop() || '0', 36),
368
+ sessionId: ep.sessionId,
369
+ task: ep.task,
370
+ input: ep.input,
371
+ output: ep.output,
372
+ critique: ep.critique,
373
+ reward: ep.reward,
374
+ success: ep.success,
375
+ latencyMs: ep.latencyMs,
376
+ tokensUsed: ep.tokensUsed,
377
+ ts: Math.floor(ep.createdAt / 1000),
378
+ };
379
+ }
380
+ /**
381
+ * Convert Cypher query result to EpisodeWithEmbedding
382
+ */
383
+ convertCypherEpisode(node) {
384
+ return {
385
+ id: parseInt(node.id.split('-').pop() || '0', 36),
386
+ sessionId: node.properties.sessionId,
387
+ task: node.properties.task,
388
+ input: node.properties.input,
389
+ output: node.properties.output,
390
+ critique: node.properties.critique,
391
+ reward: typeof node.properties.reward === 'string'
392
+ ? parseFloat(node.properties.reward)
393
+ : node.properties.reward,
394
+ success: typeof node.properties.success === 'string'
395
+ ? node.properties.success === 'true'
396
+ : node.properties.success,
397
+ latencyMs: node.properties.latencyMs,
398
+ tokensUsed: node.properties.tokensUsed,
399
+ tags: node.properties.tags ? JSON.parse(node.properties.tags) : [],
400
+ metadata: node.properties.metadata ? JSON.parse(node.properties.metadata) : {},
401
+ ts: Math.floor(node.properties.createdAt / 1000),
402
+ };
403
+ }
404
+ /**
405
+ * Convert database row to EpisodeWithEmbedding
406
+ */
407
+ convertDatabaseEpisode(row, similarity, embedding) {
408
+ return {
409
+ id: row.id,
410
+ ts: row.ts,
411
+ sessionId: row.session_id,
412
+ task: row.task,
413
+ input: row.input ?? undefined,
414
+ output: row.output ?? undefined,
415
+ critique: row.critique ?? undefined,
416
+ reward: row.reward,
417
+ success: row.success === 1,
418
+ latencyMs: row.latency_ms ?? undefined,
419
+ tokensUsed: row.tokens_used ?? undefined,
420
+ tags: row.tags ? JSON.parse(row.tags) : undefined,
421
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
422
+ embedding,
423
+ similarity,
424
+ };
328
425
  }
329
426
  /**
330
- * Get statistics for a task
427
+ * Get statistics for a task (cached)
331
428
  */
332
429
  getTaskStats(task, timeWindowDays) {
430
+ // Check cache first
431
+ const cacheKey = this.queryCache.generateKey('getTaskStats', [task, timeWindowDays], 'task-stats');
432
+ const cached = this.queryCache.get(cacheKey);
433
+ if (cached) {
434
+ return cached;
435
+ }
333
436
  const windowFilter = timeWindowDays
334
437
  ? `AND ts > strftime('%s', 'now') - ${timeWindowDays * 86400}`
335
438
  : '';
@@ -359,41 +462,59 @@ export class ReflexionMemory {
359
462
  const improvementTrend = trend.recent_reward && trend.older_reward
360
463
  ? (trend.recent_reward - trend.older_reward) / trend.older_reward
361
464
  : 0;
362
- return {
363
- totalAttempts: stats.total || 0,
364
- successRate: stats.success_rate || 0,
365
- avgReward: stats.avg_reward || 0,
366
- avgLatency: stats.avg_latency || 0,
367
- improvementTrend
465
+ const results = {
466
+ totalAttempts: stats?.total ?? 0,
467
+ successRate: stats?.success_rate ?? 0,
468
+ avgReward: stats?.avg_reward ?? 0,
469
+ avgLatency: stats?.avg_latency ?? 0,
470
+ improvementTrend,
368
471
  };
472
+ // Cache the results
473
+ this.queryCache.set(cacheKey, results);
474
+ return results;
369
475
  }
370
476
  /**
371
- * Build critique summary from similar failed episodes
477
+ * Build critique summary from similar failed episodes (cached)
372
478
  */
373
479
  async getCritiqueSummary(query) {
480
+ // Check cache first
481
+ const cacheKey = this.queryCache.generateKey('getCritiqueSummary', [query.task, query.k], 'episodes');
482
+ const cached = this.queryCache.get(cacheKey);
483
+ if (cached) {
484
+ return cached;
485
+ }
374
486
  const failures = await this.retrieveRelevant({
375
487
  ...query,
376
488
  onlyFailures: true,
377
- k: 3
489
+ k: 3,
378
490
  });
379
491
  if (failures.length === 0) {
380
492
  return 'No prior failures found for this task.';
381
493
  }
382
494
  const critiques = failures
383
- .filter(ep => ep.critique)
495
+ .filter((ep) => ep.critique)
384
496
  .map((ep, i) => `${i + 1}. ${ep.critique} (reward: ${ep.reward.toFixed(2)})`)
385
497
  .join('\n');
386
- return `Prior failures and lessons learned:\n${critiques}`;
498
+ const result = `Prior failures and lessons learned:\n${critiques}`;
499
+ // Cache the result
500
+ this.queryCache.set(cacheKey, result);
501
+ return result;
387
502
  }
388
503
  /**
389
- * Get successful strategies for a task
504
+ * Get successful strategies for a task (cached)
390
505
  */
391
506
  async getSuccessStrategies(query) {
507
+ // Check cache first
508
+ const cacheKey = this.queryCache.generateKey('getSuccessStrategies', [query.task, query.k], 'episodes');
509
+ const cached = this.queryCache.get(cacheKey);
510
+ if (cached) {
511
+ return cached;
512
+ }
392
513
  const successes = await this.retrieveRelevant({
393
514
  ...query,
394
515
  onlySuccesses: true,
395
516
  minReward: 0.7,
396
- k: 3
517
+ k: 3,
397
518
  });
398
519
  if (successes.length === 0) {
399
520
  return 'No successful strategies found for this task.';
@@ -404,7 +525,10 @@ export class ReflexionMemory {
404
525
  return `${i + 1}. Approach (reward ${ep.reward.toFixed(2)}): ${approach}...`;
405
526
  })
406
527
  .join('\n');
407
- return `Successful strategies:\n${strategies}`;
528
+ const result = `Successful strategies:\n${strategies}`;
529
+ // Cache the result
530
+ this.queryCache.set(cacheKey, result);
531
+ return result;
408
532
  }
409
533
  /**
410
534
  * Get recent episodes for a session
@@ -417,24 +541,25 @@ export class ReflexionMemory {
417
541
  LIMIT ?
418
542
  `);
419
543
  const rows = stmt.all(sessionId, limit);
420
- return rows.map(row => ({
544
+ return rows.map((row) => ({
421
545
  id: row.id,
422
546
  ts: row.ts,
423
547
  sessionId: row.session_id,
424
548
  task: row.task,
425
- input: row.input,
426
- output: row.output,
427
- critique: row.critique,
549
+ input: row.input ?? undefined,
550
+ output: row.output ?? undefined,
551
+ critique: row.critique ?? undefined,
428
552
  reward: row.reward,
429
553
  success: row.success === 1,
430
- latencyMs: row.latency_ms,
431
- tokensUsed: row.tokens_used,
554
+ latencyMs: row.latency_ms ?? undefined,
555
+ tokensUsed: row.tokens_used ?? undefined,
432
556
  tags: row.tags ? JSON.parse(row.tags) : undefined,
433
- metadata: row.metadata ? JSON.parse(row.metadata) : undefined
557
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
434
558
  }));
435
559
  }
436
560
  /**
437
561
  * Prune low-quality episodes based on TTL and quality threshold
562
+ * Invalidates cache on completion
438
563
  */
439
564
  pruneEpisodes(config) {
440
565
  const { minReward = 0.3, maxAgeDays = 30, keepMinPerTask = 5 } = config;
@@ -455,6 +580,11 @@ export class ReflexionMemory {
455
580
  )
456
581
  `);
457
582
  const result = stmt.run(minReward, maxAgeDays * 86400, keepMinPerTask);
583
+ // Invalidate caches after pruning
584
+ if (result.changes > 0) {
585
+ this.queryCache.invalidateCategory('episodes');
586
+ this.queryCache.invalidateCategory('task-stats');
587
+ }
458
588
  return result.changes;
459
589
  }
460
590
  // ========================================================================
@@ -485,6 +615,17 @@ export class ReflexionMemory {
485
615
  deserializeEmbedding(buffer) {
486
616
  return new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4);
487
617
  }
618
+ cosineSimilarity(a, b) {
619
+ let dotProduct = 0;
620
+ let normA = 0;
621
+ let normB = 0;
622
+ for (let i = 0; i < a.length; i++) {
623
+ dotProduct += a[i] * b[i];
624
+ normA += a[i] * a[i];
625
+ normB += b[i] * b[i];
626
+ }
627
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
628
+ }
488
629
  // ========================================================================
489
630
  // GNN and Graph Integration Methods
490
631
  // ========================================================================
@@ -503,7 +644,7 @@ export class ReflexionMemory {
503
644
  success: episode.success,
504
645
  timestamp: episode.ts || Date.now(),
505
646
  latencyMs: episode.latencyMs,
506
- tokensUsed: episode.tokensUsed
647
+ tokensUsed: episode.tokensUsed,
507
648
  });
508
649
  // Find similar episodes using graph vector search
509
650
  const similarEpisodes = await this.graphBackend.vectorSearch(embedding, 5, nodeId);
@@ -511,8 +652,8 @@ export class ReflexionMemory {
511
652
  for (const similar of similarEpisodes) {
512
653
  if (similar.id !== nodeId && similar.properties.episodeId !== episodeId) {
513
654
  await this.graphBackend.createRelationship(nodeId, similar.id, 'SIMILAR_TO', {
514
- similarity: cosineSimilarity(embedding, similar.embedding || new Float32Array()),
515
- createdAt: Date.now()
655
+ similarity: this.cosineSimilarity(embedding, similar.embedding || new Float32Array()),
656
+ createdAt: Date.now(),
516
657
  });
517
658
  }
518
659
  }
@@ -523,13 +664,15 @@ export class ReflexionMemory {
523
664
  // Create session node if doesn't exist
524
665
  sessionNodeId = await this.graphBackend.createNode(['Session'], {
525
666
  sessionId: episode.sessionId,
526
- startTime: episode.ts || Date.now()
667
+ startTime: episode.ts || Date.now(),
527
668
  });
528
669
  }
529
670
  else {
530
671
  sessionNodeId = sessionNodes.rows[0].s.id;
531
672
  }
532
- await this.graphBackend.createRelationship(nodeId, sessionNodeId, 'BELONGS_TO_SESSION', { timestamp: episode.ts || Date.now() });
673
+ await this.graphBackend.createRelationship(nodeId, sessionNodeId, 'BELONGS_TO_SESSION', {
674
+ timestamp: episode.ts || Date.now(),
675
+ });
533
676
  // If episode has critique, create causal relationship to previous failures
534
677
  if (episode.critique && !episode.success) {
535
678
  const previousFailures = await this.graphBackend.execute(`MATCH (e:Episode:Failure {sessionId: $sessionId})
@@ -540,7 +683,7 @@ export class ReflexionMemory {
540
683
  for (const prevFailure of previousFailures.rows) {
541
684
  await this.graphBackend.createRelationship(nodeId, prevFailure.e.id, 'LEARNED_FROM', {
542
685
  critique: episode.critique,
543
- improvementAttempt: true
686
+ improvementAttempt: true,
544
687
  });
545
688
  }
546
689
  }
@@ -555,7 +698,7 @@ export class ReflexionMemory {
555
698
  try {
556
699
  // Get initial neighbors
557
700
  const initialResults = this.vectorBackend.search(queryEmbedding, k * 2, {
558
- threshold: 0.0
701
+ threshold: 0.0,
559
702
  });
560
703
  if (initialResults.length === 0) {
561
704
  return queryEmbedding;
@@ -563,14 +706,16 @@ export class ReflexionMemory {
563
706
  // Fetch neighbor embeddings
564
707
  const neighborEmbeddings = [];
565
708
  const weights = [];
566
- const episodeIds = initialResults.map(r => r.id);
709
+ const episodeIds = initialResults.map((r) => r.id);
567
710
  const placeholders = episodeIds.map(() => '?').join(',');
568
- const episodes = this.db.prepare(`
711
+ const episodes = this.db
712
+ .prepare(`
569
713
  SELECT ee.embedding, e.reward
570
714
  FROM episode_embeddings ee
571
715
  JOIN episodes e ON e.id = ee.episode_id
572
716
  WHERE ee.episode_id IN (${placeholders})
573
- `).all(...episodeIds);
717
+ `)
718
+ .all(...episodeIds);
574
719
  for (const ep of episodes) {
575
720
  const embedding = this.deserializeEmbedding(ep.embedding);
576
721
  neighborEmbeddings.push(embedding);
@@ -607,7 +752,7 @@ export class ReflexionMemory {
607
752
  return {
608
753
  similar: (row.similar || []).filter((id) => id != null),
609
754
  session: row.session || '',
610
- learnedFrom: (row.learnedFrom || []).filter((id) => id != null)
755
+ learnedFrom: (row.learnedFrom || []).filter((id) => id != null),
611
756
  };
612
757
  }
613
758
  /**
@@ -628,7 +773,7 @@ export class ReflexionMemory {
628
773
  epochs: result.epochs,
629
774
  finalLoss: result.finalLoss.toFixed(4),
630
775
  improvement: `${(result.improvement * 100).toFixed(1)}%`,
631
- duration: `${result.duration}ms`
776
+ duration: `${result.duration}ms`,
632
777
  });
633
778
  }
634
779
  /**
@@ -649,5 +794,188 @@ export class ReflexionMemory {
649
794
  }
650
795
  return this.graphBackend.getStats();
651
796
  }
797
+ /**
798
+ * Get query cache statistics
799
+ */
800
+ getCacheStats() {
801
+ return this.queryCache.getStatistics();
802
+ }
803
+ /**
804
+ * Clear query cache
805
+ */
806
+ clearCache() {
807
+ this.queryCache.clear();
808
+ }
809
+ /**
810
+ * Prune expired cache entries
811
+ */
812
+ pruneCache() {
813
+ return this.queryCache.pruneExpired();
814
+ }
815
+ /**
816
+ * Warm cache with common queries
817
+ */
818
+ async warmCache(sessionId) {
819
+ await this.queryCache.warm(async (cache) => {
820
+ // Warm cache with recent sessions if sessionId provided
821
+ if (sessionId) {
822
+ const recent = await this.getRecentEpisodes(sessionId, 10);
823
+ // Episodes are already loaded, cache will be populated on next access
824
+ }
825
+ });
826
+ }
827
+ /**
828
+ * Dual-write helper for issue #128.
829
+ *
830
+ * Inserts the given episode into the SQLite `episodes` and
831
+ * `episode_embeddings` tables when the underlying connection supports it.
832
+ * Used when a graph or vector backend handles the primary index but the
833
+ * caller still wants restart-safe persistence.
834
+ *
835
+ * Errors are swallowed and logged — the primary write to the graph/vector
836
+ * backend has already succeeded, and we don't want to fail the caller if
837
+ * SQL persistence is unavailable (e.g. read-only DB, schema not present).
838
+ */
839
+ dualWriteEpisodeToSQL(episode, embedding) {
840
+ if (!this.db || typeof this.db.prepare !== 'function')
841
+ return;
842
+ try {
843
+ const stmt = this.db.prepare(`
844
+ INSERT INTO episodes (
845
+ session_id, task, input, output, critique, reward, success,
846
+ latency_ms, tokens_used, tags, metadata
847
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
848
+ `);
849
+ const tags = episode.tags ? JSON.stringify(episode.tags) : null;
850
+ const metadata = episode.metadata ? JSON.stringify(episode.metadata) : null;
851
+ 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);
852
+ if (embedding) {
853
+ const episodeId = normalizeRowId(result.lastInsertRowid);
854
+ this.storeEmbedding(episodeId, embedding);
855
+ }
856
+ }
857
+ catch (err) {
858
+ // The expected failure here is "no such table: episodes" on databases
859
+ // that intentionally don't carry the v1 schema. Don't escalate — the
860
+ // primary backend already has the data.
861
+ const msg = err instanceof Error ? err.message : String(err);
862
+ if (!/no such table/i.test(msg)) {
863
+ // eslint-disable-next-line no-console
864
+ console.warn('[ReflexionMemory] dualWriteEpisodeToSQL failed:', msg);
865
+ }
866
+ }
867
+ }
868
+ /**
869
+ * Rebuild the in-memory vector index from the SQLite `episodes` /
870
+ * `episode_embeddings` tables, going through the proper backend channels
871
+ * so `retrieveRelevant()` sees the data afterwards.
872
+ *
873
+ * Fixes the user's recovery use-case from issue #129: rather than calling
874
+ * `vectorBackend.getInner().insert()` directly (which bypasses the
875
+ * GuardedBackend wrapper and confuses retrieveRelevant), call this method
876
+ * to re-hydrate the vector and graph indices from durable storage.
877
+ *
878
+ * Returns the number of episodes re-indexed. No-ops cleanly when the SQL
879
+ * tables are empty or absent.
880
+ */
881
+ async rebuildIndex(options = {}) {
882
+ if (!this.db || typeof this.db.prepare !== 'function')
883
+ return 0;
884
+ const where = options.fromTimestamp !== undefined ? 'WHERE e.ts >= ?' : '';
885
+ const params = options.fromTimestamp !== undefined ? [options.fromTimestamp] : [];
886
+ let rows = [];
887
+ try {
888
+ const stmt = this.db.prepare(`
889
+ SELECT
890
+ e.id, e.ts, e.session_id, e.task, e.input, e.output, e.critique,
891
+ e.reward, e.success, e.latency_ms, e.tokens_used, e.tags, e.metadata,
892
+ ee.embedding
893
+ FROM episodes e
894
+ LEFT JOIN episode_embeddings ee ON ee.episode_id = e.id
895
+ ${where}
896
+ ORDER BY e.id ASC
897
+ `);
898
+ rows = stmt.all(...params);
899
+ }
900
+ catch (err) {
901
+ const msg = err instanceof Error ? err.message : String(err);
902
+ if (/no such table/i.test(msg))
903
+ return 0;
904
+ throw err;
905
+ }
906
+ let reindexed = 0;
907
+ for (const row of rows) {
908
+ const episode = {
909
+ id: row.id,
910
+ ts: row.ts,
911
+ sessionId: row.session_id,
912
+ task: row.task,
913
+ input: row.input ?? undefined,
914
+ output: row.output ?? undefined,
915
+ critique: row.critique ?? undefined,
916
+ reward: row.reward,
917
+ success: row.success === 1,
918
+ latencyMs: row.latency_ms ?? undefined,
919
+ tokensUsed: row.tokens_used ?? undefined,
920
+ tags: row.tags ? JSON.parse(row.tags) : undefined,
921
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
922
+ };
923
+ // Prefer the stored embedding; fall back to recomputing if missing.
924
+ let embedding;
925
+ if (row.embedding) {
926
+ const buf = row.embedding;
927
+ embedding = new Float32Array(buf.buffer, buf.byteOffset, buf.length / 4);
928
+ }
929
+ else {
930
+ embedding = await this.embedder.embed(this.buildEpisodeText(episode));
931
+ }
932
+ // Re-insert through the proper public APIs so the GuardedBackend
933
+ // wrapper, graph adapter, and HNSW all stay in sync.
934
+ if (this.vectorBackend) {
935
+ try {
936
+ this.vectorBackend.insert(String(row.id), embedding, {
937
+ type: 'episode',
938
+ sessionId: episode.sessionId,
939
+ reward: episode.reward,
940
+ success: episode.success,
941
+ });
942
+ }
943
+ catch (err) {
944
+ const msg = err instanceof Error ? err.message : String(err);
945
+ // eslint-disable-next-line no-console
946
+ console.warn(`[ReflexionMemory] rebuildIndex: vector insert failed for ${row.id}: ${msg}`);
947
+ }
948
+ }
949
+ if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
950
+ const adapter = this.graphBackend;
951
+ try {
952
+ await adapter.storeEpisode({
953
+ id: `episode-${row.id}`,
954
+ sessionId: episode.sessionId,
955
+ task: episode.task,
956
+ reward: episode.reward,
957
+ success: episode.success,
958
+ input: episode.input,
959
+ output: episode.output,
960
+ critique: episode.critique,
961
+ createdAt: (episode.ts ?? Date.now() / 1000) * 1000,
962
+ tokensUsed: episode.tokensUsed,
963
+ latencyMs: episode.latencyMs,
964
+ }, embedding);
965
+ }
966
+ catch (err) {
967
+ const msg = err instanceof Error ? err.message : String(err);
968
+ // eslint-disable-next-line no-console
969
+ console.warn(`[ReflexionMemory] rebuildIndex: graph store failed for ${row.id}: ${msg}`);
970
+ }
971
+ }
972
+ reindexed++;
973
+ }
974
+ // Bust any stale read caches so the next retrieveRelevant sees the
975
+ // freshly-rebuilt index.
976
+ this.queryCache.invalidateCategory('episodes');
977
+ this.queryCache.invalidateCategory('task-stats');
978
+ return reindexed;
979
+ }
652
980
  }
653
981
  //# sourceMappingURL=ReflexionMemory.js.map