kynjal-cli 3.1.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/core/planner.md +2 -2
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/core/reviewer.md +1 -1
  5. package/.claude/agents/core/tester.md +1 -1
  6. package/.claude/agents/data/data-ml-model.md +4 -4
  7. package/.claude/agents/development/dev-backend-api.md +4 -4
  8. package/.claude/agents/documentation/docs-api-openapi.md +4 -4
  9. package/.claude/agents/github/code-review-swarm.md +2 -2
  10. package/.claude/agents/github/issue-tracker.md +2 -2
  11. package/.claude/agents/github/pr-manager.md +2 -2
  12. package/.claude/agents/github/release-manager.md +2 -2
  13. package/.claude/agents/github/workflow-automation.md +2 -2
  14. package/.claude/agents/sparc/architecture.md +3 -3
  15. package/.claude/agents/sparc/pseudocode.md +2 -2
  16. package/.claude/agents/sparc/refinement.md +3 -3
  17. package/.claude/agents/sparc/specification.md +2 -2
  18. package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
  19. package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
  20. package/.claude/agents/swarm/mesh-coordinator.md +1 -1
  21. package/.claude/agents/templates/base-template-generator.md +25 -4
  22. package/.claude/agents/templates/sparc-coordinator.md +3 -3
  23. package/.claude/helpers/auto-commit.sh +1 -1
  24. package/.claude/helpers/auto-memory-hook.mjs +27 -9
  25. package/.claude/helpers/hook-handler.cjs +58 -18
  26. package/.claude/helpers/statusline.cjs +14 -33
  27. package/.claude/helpers/statusline.js +3 -3
  28. package/.claude/settings.json +9 -9
  29. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  30. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  31. package/README.md +383 -170
  32. package/bin/cli.js +6 -6
  33. package/bin/mcp-server.js +1 -1
  34. package/bin/preinstall.cjs +2 -0
  35. package/dist/src/appliance/gguf-engine.js +664 -0
  36. package/dist/src/appliance/gguf-engine.js.map +1 -0
  37. package/dist/src/appliance/ruvllm-bridge.js +492 -0
  38. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  39. package/dist/src/appliance/rvfa-builder.js +383 -0
  40. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  41. package/dist/src/appliance/rvfa-distribution.js +533 -0
  42. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  43. package/dist/src/appliance/rvfa-format.js +465 -0
  44. package/dist/src/appliance/rvfa-format.js.map +1 -0
  45. package/dist/src/appliance/rvfa-runner.js +373 -0
  46. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  47. package/dist/src/appliance/rvfa-signing.js +469 -0
  48. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  49. package/dist/src/benchmarks/pretrain/index.js +542 -331
  50. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  51. package/dist/src/commands/agent.d.ts.map +1 -1
  52. package/dist/src/commands/agent.js +725 -502
  53. package/dist/src/commands/agent.js.map +1 -1
  54. package/dist/src/commands/analyze.js +1548 -1218
  55. package/dist/src/commands/analyze.js.map +1 -1
  56. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  57. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  58. package/dist/src/commands/appliance-advanced.js +324 -0
  59. package/dist/src/commands/appliance-advanced.js.map +1 -0
  60. package/dist/src/commands/appliance.d.ts +8 -0
  61. package/dist/src/commands/appliance.d.ts.map +1 -0
  62. package/dist/src/commands/appliance.js +581 -0
  63. package/dist/src/commands/appliance.js.map +1 -0
  64. package/dist/src/commands/benchmark.js +523 -372
  65. package/dist/src/commands/benchmark.js.map +1 -1
  66. package/dist/src/commands/claims.js +364 -274
  67. package/dist/src/commands/claims.js.map +1 -1
  68. package/dist/src/commands/cleanup.d.ts +13 -0
  69. package/dist/src/commands/cleanup.d.ts.map +1 -0
  70. package/dist/src/commands/cleanup.js +262 -0
  71. package/dist/src/commands/cleanup.js.map +1 -0
  72. package/dist/src/commands/completions.js +118 -477
  73. package/dist/src/commands/completions.js.map +1 -1
  74. package/dist/src/commands/config.js +303 -237
  75. package/dist/src/commands/config.js.map +1 -1
  76. package/dist/src/commands/daemon.d.ts.map +1 -1
  77. package/dist/src/commands/daemon.js +597 -425
  78. package/dist/src/commands/daemon.js.map +1 -1
  79. package/dist/src/commands/deployment.js +275 -194
  80. package/dist/src/commands/deployment.js.map +1 -1
  81. package/dist/src/commands/doctor.d.ts.map +1 -1
  82. package/dist/src/commands/doctor.js +690 -460
  83. package/dist/src/commands/doctor.js.map +1 -1
  84. package/dist/src/commands/embeddings.js +1543 -1293
  85. package/dist/src/commands/embeddings.js.map +1 -1
  86. package/dist/src/commands/guidance.js +596 -449
  87. package/dist/src/commands/guidance.js.map +1 -1
  88. package/dist/src/commands/hive-mind.js +938 -854
  89. package/dist/src/commands/hive-mind.js.map +1 -1
  90. package/dist/src/commands/hooks.d.ts.map +1 -1
  91. package/dist/src/commands/hooks.js +3677 -2570
  92. package/dist/src/commands/hooks.js.map +1 -1
  93. package/dist/src/commands/index.js +322 -122
  94. package/dist/src/commands/index.js.map +1 -1
  95. package/dist/src/commands/init.d.ts +1 -1
  96. package/dist/src/commands/init.d.ts.map +1 -1
  97. package/dist/src/commands/init.js +943 -787
  98. package/dist/src/commands/init.js.map +1 -1
  99. package/dist/src/commands/issues.js +558 -383
  100. package/dist/src/commands/issues.js.map +1 -1
  101. package/dist/src/commands/mcp.d.ts.map +1 -1
  102. package/dist/src/commands/mcp.js +605 -475
  103. package/dist/src/commands/mcp.js.map +1 -1
  104. package/dist/src/commands/memory.d.ts.map +1 -1
  105. package/dist/src/commands/memory.js +1031 -814
  106. package/dist/src/commands/memory.js.map +1 -1
  107. package/dist/src/commands/migrate.js +347 -282
  108. package/dist/src/commands/migrate.js.map +1 -1
  109. package/dist/src/commands/neural.d.ts.map +1 -1
  110. package/dist/src/commands/neural.js +1563 -1283
  111. package/dist/src/commands/neural.js.map +1 -1
  112. package/dist/src/commands/performance.js +643 -497
  113. package/dist/src/commands/performance.js.map +1 -1
  114. package/dist/src/commands/plugins.js +841 -668
  115. package/dist/src/commands/plugins.js.map +1 -1
  116. package/dist/src/commands/process.js +447 -392
  117. package/dist/src/commands/process.js.map +1 -1
  118. package/dist/src/commands/progress.js +256 -162
  119. package/dist/src/commands/progress.js.map +1 -1
  120. package/dist/src/commands/providers.js +220 -150
  121. package/dist/src/commands/providers.js.map +1 -1
  122. package/dist/src/commands/route.js +665 -520
  123. package/dist/src/commands/route.js.map +1 -1
  124. package/dist/src/commands/ruvector/backup.js +651 -505
  125. package/dist/src/commands/ruvector/backup.js.map +1 -1
  126. package/dist/src/commands/ruvector/benchmark.js +401 -349
  127. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  128. package/dist/src/commands/ruvector/import.js +267 -225
  129. package/dist/src/commands/ruvector/import.js.map +1 -1
  130. package/dist/src/commands/ruvector/index.js +75 -37
  131. package/dist/src/commands/ruvector/index.js.map +1 -1
  132. package/dist/src/commands/ruvector/init.js +359 -336
  133. package/dist/src/commands/ruvector/init.js.map +1 -1
  134. package/dist/src/commands/ruvector/migrate.js +322 -335
  135. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  136. package/dist/src/commands/ruvector/optimize.js +431 -375
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  138. package/dist/src/commands/ruvector/setup.js +117 -703
  139. package/dist/src/commands/ruvector/setup.js.map +1 -1
  140. package/dist/src/commands/ruvector/status.js +419 -364
  141. package/dist/src/commands/ruvector/status.js.map +1 -1
  142. package/dist/src/commands/security.d.ts.map +1 -1
  143. package/dist/src/commands/security.js +610 -456
  144. package/dist/src/commands/security.js.map +1 -1
  145. package/dist/src/commands/session.d.ts +1 -1
  146. package/dist/src/commands/session.js +627 -505
  147. package/dist/src/commands/session.js.map +1 -1
  148. package/dist/src/commands/start.d.ts +1 -1
  149. package/dist/src/commands/start.js +368 -271
  150. package/dist/src/commands/start.js.map +1 -1
  151. package/dist/src/commands/status.d.ts +1 -1
  152. package/dist/src/commands/status.d.ts.map +1 -1
  153. package/dist/src/commands/status.js +492 -379
  154. package/dist/src/commands/status.js.map +1 -1
  155. package/dist/src/commands/swarm.js +488 -408
  156. package/dist/src/commands/swarm.js.map +1 -1
  157. package/dist/src/commands/task.d.ts +1 -1
  158. package/dist/src/commands/task.js +539 -424
  159. package/dist/src/commands/task.js.map +1 -1
  160. package/dist/src/commands/transfer-store.js +412 -322
  161. package/dist/src/commands/transfer-store.js.map +1 -1
  162. package/dist/src/commands/update.js +291 -196
  163. package/dist/src/commands/update.js.map +1 -1
  164. package/dist/src/commands/workflow.js +486 -386
  165. package/dist/src/commands/workflow.js.map +1 -1
  166. package/dist/src/config-adapter.js +40 -39
  167. package/dist/src/config-adapter.js.map +1 -1
  168. package/dist/src/index.js +416 -312
  169. package/dist/src/index.js.map +1 -1
  170. package/dist/src/infrastructure/in-memory-repositories.js +507 -246
  171. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  172. package/dist/src/init/claudemd-generator.js +78 -368
  173. package/dist/src/init/claudemd-generator.js.map +1 -1
  174. package/dist/src/init/executor.js +1019 -1345
  175. package/dist/src/init/executor.js.map +1 -1
  176. package/dist/src/init/helpers-generator.js +60 -635
  177. package/dist/src/init/helpers-generator.js.map +1 -1
  178. package/dist/src/init/index.d.ts +1 -1
  179. package/dist/src/init/index.d.ts.map +1 -1
  180. package/dist/src/init/index.js +1 -1
  181. package/dist/src/init/index.js.map +1 -1
  182. package/dist/src/init/mcp-generator.d.ts +0 -1
  183. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  184. package/dist/src/init/mcp-generator.js +62 -42
  185. package/dist/src/init/mcp-generator.js.map +1 -1
  186. package/dist/src/init/settings-generator.d.ts.map +1 -1
  187. package/dist/src/init/settings-generator.js +167 -100
  188. package/dist/src/init/settings-generator.js.map +1 -1
  189. package/dist/src/init/statusline-generator.d.ts +16 -8
  190. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  191. package/dist/src/init/statusline-generator.js +20 -1300
  192. package/dist/src/init/statusline-generator.js.map +1 -1
  193. package/dist/src/init/types.d.ts +15 -5
  194. package/dist/src/init/types.d.ts.map +1 -1
  195. package/dist/src/init/types.js +66 -76
  196. package/dist/src/init/types.js.map +1 -1
  197. package/dist/src/mcp-client.js +130 -76
  198. package/dist/src/mcp-client.js.map +1 -1
  199. package/dist/src/mcp-server.js +758 -445
  200. package/dist/src/mcp-server.js.map +1 -1
  201. package/dist/src/mcp-tools/agent-tools.js +492 -391
  202. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  204. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
  205. package/dist/src/mcp-tools/agentdb-tools.js +758 -0
  206. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
  207. package/dist/src/mcp-tools/analyze-tools.js +236 -172
  208. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/auto-install.js +142 -80
  210. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  211. package/dist/src/mcp-tools/browser-tools.js +375 -252
  212. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/claims-tools.js +565 -473
  214. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  216. package/dist/src/mcp-tools/config-tools.js +284 -190
  217. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  218. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  219. package/dist/src/mcp-tools/coordination-tools.js +600 -349
  220. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/daa-tools.js +367 -289
  222. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/embeddings-tools.js +693 -582
  224. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/github-tools.js +312 -261
  226. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  228. package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
  229. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  230. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  231. package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
  232. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  233. package/dist/src/mcp-tools/index.d.ts +2 -0
  234. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/index.js +2 -0
  236. package/dist/src/mcp-tools/index.js.map +1 -1
  237. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  238. package/dist/src/mcp-tools/memory-tools.js +514 -329
  239. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  240. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  241. package/dist/src/mcp-tools/neural-tools.js +428 -326
  242. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  243. package/dist/src/mcp-tools/performance-tools.js +480 -420
  244. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  245. package/dist/src/mcp-tools/progress-tools.js +278 -204
  246. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  248. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
  249. package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
  250. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
  251. package/dist/src/mcp-tools/security-tools.js +429 -297
  252. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/session-tools.js +234 -185
  254. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
  256. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/swarm-tools.js +303 -64
  258. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/system-tools.js +352 -200
  261. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  262. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/task-tools.js +357 -189
  264. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/terminal-tools.js +196 -148
  266. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  267. package/dist/src/mcp-tools/transfer-tools.js +333 -186
  268. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  269. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  270. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
  271. package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
  272. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
  273. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  274. package/dist/src/mcp-tools/workflow-tools.js +471 -335
  275. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  276. package/dist/src/memory/ewc-consolidation.js +345 -173
  277. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  278. package/dist/src/memory/intelligence.js +841 -359
  279. package/dist/src/memory/intelligence.js.map +1 -1
  280. package/dist/src/memory/memory-bridge.js +1964 -0
  281. package/dist/src/memory/memory-bridge.js.map +1 -0
  282. package/dist/src/memory/memory-initializer.js +1895 -1602
  283. package/dist/src/memory/memory-initializer.js.map +1 -1
  284. package/dist/src/memory/sona-optimizer.js +329 -199
  285. package/dist/src/memory/sona-optimizer.js.map +1 -1
  286. package/dist/src/output.d.ts +2 -2
  287. package/dist/src/output.d.ts.map +1 -1
  288. package/dist/src/output.js +273 -242
  289. package/dist/src/output.js.map +1 -1
  290. package/dist/src/parser.js +217 -124
  291. package/dist/src/parser.js.map +1 -1
  292. package/dist/src/plugins/manager.js +531 -278
  293. package/dist/src/plugins/manager.js.map +1 -1
  294. package/dist/src/plugins/store/discovery.js +362 -275
  295. package/dist/src/plugins/store/discovery.js.map +1 -1
  296. package/dist/src/plugins/store/index.js +105 -48
  297. package/dist/src/plugins/store/index.js.map +1 -1
  298. package/dist/src/plugins/store/search.js +107 -69
  299. package/dist/src/plugins/store/search.js.map +1 -1
  300. package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
  301. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  302. package/dist/src/plugins/tests/standalone-test.js +223 -172
  303. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  304. package/dist/src/plugins/tests/test-plugin-store.js +228 -190
  305. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  306. package/dist/src/production/circuit-breaker.js +126 -62
  307. package/dist/src/production/circuit-breaker.js.map +1 -1
  308. package/dist/src/production/error-handler.js +156 -86
  309. package/dist/src/production/error-handler.js.map +1 -1
  310. package/dist/src/production/monitoring.js +220 -139
  311. package/dist/src/production/monitoring.js.map +1 -1
  312. package/dist/src/production/rate-limiter.js +93 -74
  313. package/dist/src/production/rate-limiter.js.map +1 -1
  314. package/dist/src/production/retry.js +167 -75
  315. package/dist/src/production/retry.js.map +1 -1
  316. package/dist/src/prompt.js +560 -436
  317. package/dist/src/prompt.js.map +1 -1
  318. package/dist/src/runtime/headless.js +289 -200
  319. package/dist/src/runtime/headless.js.map +1 -1
  320. package/dist/src/ruvector/agent-wasm.js +511 -0
  321. package/dist/src/ruvector/agent-wasm.js.map +1 -0
  322. package/dist/src/ruvector/ast-analyzer.js +232 -145
  323. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  324. package/dist/src/ruvector/coverage-router.js +419 -287
  325. package/dist/src/ruvector/coverage-router.js.map +1 -1
  326. package/dist/src/ruvector/coverage-tools.js +101 -56
  327. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  328. package/dist/src/ruvector/diff-classifier.js +451 -324
  329. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  330. package/dist/src/ruvector/enhanced-model-router.js +337 -251
  331. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  332. package/dist/src/ruvector/flash-attention.js +254 -223
  333. package/dist/src/ruvector/flash-attention.js.map +1 -1
  334. package/dist/src/ruvector/graph-analyzer.js +680 -486
  335. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  336. package/dist/src/ruvector/index.js +113 -27
  337. package/dist/src/ruvector/index.js.map +1 -1
  338. package/dist/src/ruvector/lora-adapter.js +248 -155
  339. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  340. package/dist/src/ruvector/model-router.js +248 -175
  341. package/dist/src/ruvector/model-router.js.map +1 -1
  342. package/dist/src/ruvector/moe-router.js +286 -228
  343. package/dist/src/ruvector/moe-router.js.map +1 -1
  344. package/dist/src/ruvector/q-learning-router.js +338 -257
  345. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  346. package/dist/src/ruvector/ruvllm-wasm.js +527 -0
  347. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
  348. package/dist/src/ruvector/semantic-router.js +67 -60
  349. package/dist/src/ruvector/semantic-router.js.map +1 -1
  350. package/dist/src/ruvector/vector-db.js +205 -119
  351. package/dist/src/ruvector/vector-db.js.map +1 -1
  352. package/dist/src/services/agentic-flow-bridge.js +168 -0
  353. package/dist/src/services/agentic-flow-bridge.js.map +1 -0
  354. package/dist/src/services/claim-service.js +940 -615
  355. package/dist/src/services/claim-service.js.map +1 -1
  356. package/dist/src/services/container-worker-pool.js +669 -399
  357. package/dist/src/services/container-worker-pool.js.map +1 -1
  358. package/dist/src/services/headless-worker-executor.js +467 -441
  359. package/dist/src/services/headless-worker-executor.js.map +1 -1
  360. package/dist/src/services/index.d.ts +5 -5
  361. package/dist/src/services/index.d.ts.map +1 -1
  362. package/dist/src/services/index.js +4 -4
  363. package/dist/src/services/index.js.map +1 -1
  364. package/dist/src/services/registry-api.js +201 -93
  365. package/dist/src/services/registry-api.js.map +1 -1
  366. package/dist/src/services/ruvector-training.js +414 -144
  367. package/dist/src/services/ruvector-training.js.map +1 -1
  368. package/dist/src/services/worker-daemon.js +928 -531
  369. package/dist/src/services/worker-daemon.js.map +1 -1
  370. package/dist/src/services/worker-queue.js +550 -331
  371. package/dist/src/services/worker-queue.js.map +1 -1
  372. package/dist/src/suggest.js +55 -45
  373. package/dist/src/suggest.js.map +1 -1
  374. package/dist/src/transfer/anonymization/index.js +37 -29
  375. package/dist/src/transfer/anonymization/index.js.map +1 -1
  376. package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
  377. package/dist/src/transfer/deploy-seraphine.js +156 -129
  378. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  379. package/dist/src/transfer/export.js +142 -84
  380. package/dist/src/transfer/export.js.map +1 -1
  381. package/dist/src/transfer/index.d.ts +1 -1
  382. package/dist/src/transfer/index.d.ts.map +1 -1
  383. package/dist/src/transfer/index.js +2 -0
  384. package/dist/src/transfer/index.js.map +1 -1
  385. package/dist/src/transfer/ipfs/client.js +337 -179
  386. package/dist/src/transfer/ipfs/client.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.js +434 -290
  388. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  389. package/dist/src/transfer/models/seraphine.js +58 -58
  390. package/dist/src/transfer/models/seraphine.js.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +37 -33
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.js +248 -139
  394. package/dist/src/transfer/storage/gcs.js.map +1 -1
  395. package/dist/src/transfer/store/discovery.js +353 -243
  396. package/dist/src/transfer/store/discovery.js.map +1 -1
  397. package/dist/src/transfer/store/download.js +365 -243
  398. package/dist/src/transfer/store/download.js.map +1 -1
  399. package/dist/src/transfer/store/index.js +130 -63
  400. package/dist/src/transfer/store/index.js.map +1 -1
  401. package/dist/src/transfer/store/publish.js +258 -184
  402. package/dist/src/transfer/store/publish.js.map +1 -1
  403. package/dist/src/transfer/store/registry.js +73 -51
  404. package/dist/src/transfer/store/registry.js.map +1 -1
  405. package/dist/src/transfer/store/search.js +96 -64
  406. package/dist/src/transfer/store/search.js.map +1 -1
  407. package/dist/src/transfer/store/tests/standalone-test.js +231 -174
  408. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  409. package/dist/src/transfer/test-seraphine.js +130 -95
  410. package/dist/src/transfer/test-seraphine.js.map +1 -1
  411. package/dist/src/transfer/tests/test-store.js +239 -194
  412. package/dist/src/transfer/tests/test-store.js.map +1 -1
  413. package/dist/src/types.js +56 -27
  414. package/dist/src/types.js.map +1 -1
  415. package/dist/src/update/checker.js +183 -106
  416. package/dist/src/update/checker.js.map +1 -1
  417. package/dist/src/update/executor.js +198 -135
  418. package/dist/src/update/executor.js.map +1 -1
  419. package/dist/src/update/index.js +85 -38
  420. package/dist/src/update/index.js.map +1 -1
  421. package/dist/src/update/rate-limiter.js +31 -19
  422. package/dist/src/update/rate-limiter.js.map +1 -1
  423. package/dist/src/update/validator.js +64 -38
  424. package/dist/src/update/validator.js.map +1 -1
  425. package/dist/tsconfig.tsbuildinfo +1 -1
  426. package/package.json +13 -10
  427. package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
  428. package/.claude/agents/custom/design-architect.yaml +0 -48
  429. package/.claude/agents/custom/ui-developer.yaml +0 -46
  430. package/.claude/agents/custom/ux-researcher.yaml +0 -60
  431. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  432. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  433. package/dist/src/commands/index.d.ts +0 -108
  434. package/dist/src/commands/index.d.ts.map +0 -1
  435. package/dist/src/config-adapter.d.ts +0 -15
  436. package/dist/src/config-adapter.d.ts.map +0 -1
  437. package/dist/src/index.d.ts +0 -76
  438. package/dist/src/index.d.ts.map +0 -1
  439. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  440. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  441. package/dist/src/init/claudemd-generator.d.ts +0 -25
  442. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  443. package/dist/src/init/executor.d.ts +0 -41
  444. package/dist/src/init/executor.d.ts.map +0 -1
  445. package/dist/src/init/helpers-generator.d.ts +0 -60
  446. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  447. package/dist/src/mcp-client.d.ts +0 -92
  448. package/dist/src/mcp-client.d.ts.map +0 -1
  449. package/dist/src/mcp-server.d.ts +0 -161
  450. package/dist/src/mcp-server.d.ts.map +0 -1
  451. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  452. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  453. package/dist/src/mcp-tools/types.d.ts +0 -31
  454. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  455. package/dist/src/memory/ewc-consolidation.d.ts +0 -271
  456. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  457. package/dist/src/memory/intelligence.d.ts +0 -285
  458. package/dist/src/memory/intelligence.d.ts.map +0 -1
  459. package/dist/src/memory/memory-initializer.d.ts +0 -396
  460. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  461. package/dist/src/memory/sona-optimizer.d.ts +0 -227
  462. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  463. package/dist/src/parser.d.ts +0 -41
  464. package/dist/src/parser.d.ts.map +0 -1
  465. package/dist/src/plugins/manager.d.ts +0 -133
  466. package/dist/src/plugins/manager.d.ts.map +0 -1
  467. package/dist/src/plugins/store/discovery.d.ts +0 -88
  468. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  469. package/dist/src/plugins/store/index.d.ts +0 -76
  470. package/dist/src/plugins/store/index.d.ts.map +0 -1
  471. package/dist/src/plugins/store/search.d.ts +0 -46
  472. package/dist/src/plugins/store/search.d.ts.map +0 -1
  473. package/dist/src/plugins/store/types.d.ts +0 -274
  474. package/dist/src/plugins/store/types.d.ts.map +0 -1
  475. package/dist/src/production/circuit-breaker.d.ts +0 -101
  476. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  477. package/dist/src/production/error-handler.d.ts +0 -92
  478. package/dist/src/production/error-handler.d.ts.map +0 -1
  479. package/dist/src/production/monitoring.d.ts +0 -161
  480. package/dist/src/production/monitoring.d.ts.map +0 -1
  481. package/dist/src/production/rate-limiter.d.ts +0 -80
  482. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  483. package/dist/src/production/retry.d.ts +0 -48
  484. package/dist/src/production/retry.d.ts.map +0 -1
  485. package/dist/src/prompt.d.ts +0 -44
  486. package/dist/src/prompt.d.ts.map +0 -1
  487. package/dist/src/runtime/headless.d.ts +0 -60
  488. package/dist/src/runtime/headless.d.ts.map +0 -1
  489. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  490. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  491. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  492. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  493. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  494. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  495. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
  496. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  497. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  498. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  499. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  500. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  501. package/dist/src/ruvector/index.d.ts +0 -34
  502. package/dist/src/ruvector/index.d.ts.map +0 -1
  503. package/dist/src/ruvector/lora-adapter.d.ts +0 -218
  504. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  505. package/dist/src/ruvector/model-router.d.ts +0 -220
  506. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  507. package/dist/src/ruvector/moe-router.d.ts +0 -206
  508. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  509. package/dist/src/ruvector/q-learning-router.d.ts +0 -211
  510. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  511. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  512. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  513. package/dist/src/ruvector/vector-db.d.ts +0 -69
  514. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  515. package/dist/src/services/claim-service.d.ts +0 -204
  516. package/dist/src/services/claim-service.d.ts.map +0 -1
  517. package/dist/src/services/container-worker-pool.d.ts +0 -197
  518. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  519. package/dist/src/services/headless-worker-executor.d.ts +0 -304
  520. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  521. package/dist/src/services/registry-api.d.ts +0 -58
  522. package/dist/src/services/registry-api.d.ts.map +0 -1
  523. package/dist/src/services/ruvector-training.d.ts +0 -213
  524. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  525. package/dist/src/services/worker-daemon.d.ts +0 -203
  526. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  527. package/dist/src/services/worker-queue.d.ts +0 -194
  528. package/dist/src/services/worker-queue.d.ts.map +0 -1
  529. package/dist/src/suggest.d.ts +0 -53
  530. package/dist/src/suggest.d.ts.map +0 -1
  531. package/dist/src/transfer/export.d.ts +0 -25
  532. package/dist/src/transfer/export.d.ts.map +0 -1
  533. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  534. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  535. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  536. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  537. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  538. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  539. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  540. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  541. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  542. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  543. package/dist/src/transfer/store/discovery.d.ts +0 -84
  544. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  545. package/dist/src/transfer/store/download.d.ts +0 -70
  546. package/dist/src/transfer/store/download.d.ts.map +0 -1
  547. package/dist/src/transfer/store/index.d.ts +0 -84
  548. package/dist/src/transfer/store/index.d.ts.map +0 -1
  549. package/dist/src/transfer/store/publish.d.ts +0 -76
  550. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  551. package/dist/src/transfer/store/search.d.ts +0 -54
  552. package/dist/src/transfer/store/search.d.ts.map +0 -1
  553. package/dist/src/transfer/types.d.ts +0 -245
  554. package/dist/src/transfer/types.d.ts.map +0 -1
  555. package/dist/src/types.d.ts +0 -198
  556. package/dist/src/types.d.ts.map +0 -1
  557. package/dist/src/update/checker.d.ts +0 -34
  558. package/dist/src/update/checker.d.ts.map +0 -1
  559. package/dist/src/update/executor.d.ts +0 -32
  560. package/dist/src/update/executor.d.ts.map +0 -1
  561. package/dist/src/update/index.d.ts +0 -33
  562. package/dist/src/update/index.d.ts.map +0 -1
  563. package/dist/src/update/rate-limiter.d.ts +0 -20
  564. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  565. package/dist/src/update/validator.d.ts +0 -17
  566. package/dist/src/update/validator.d.ts.map +0 -1
@@ -0,0 +1,1964 @@
1
+ /**
2
+ * Memory Bridge — Routes CLI memory operations through ControllerRegistry + AgentDB v3
3
+ *
4
+ * Per ADR-053 Phases 1-6: Full controller activation pipeline.
5
+ * CLI → ControllerRegistry → AgentDB v3 controllers.
6
+ *
7
+ * Phase 1: Core CRUD + embeddings + HNSW + controller access (complete)
8
+ * Phase 2: BM25 hybrid search, TieredCache read/write, MutationGuard validation
9
+ * Phase 3: ReasoningBank pattern store, recordFeedback, CausalMemoryGraph edges
10
+ * Phase 4: SkillLibrary promotion, ExplainableRecall provenance, AttestationLog
11
+ * Phase 5: ReflexionMemory session lifecycle, WitnessChain attestation
12
+ * Phase 6: AgentDB MCP tools (separate file), COW branching
13
+ *
14
+ * Uses better-sqlite3 API (synchronous .all()/.get()/.run()) since that's
15
+ * what AgentDB v3 uses internally.
16
+ *
17
+ * @module v3/cli/memory-bridge
18
+ */
19
+ var __assign = (this && this.__assign) || function () {
20
+ __assign = Object.assign || function(t) {
21
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
22
+ s = arguments[i];
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
24
+ t[p] = s[p];
25
+ }
26
+ return t;
27
+ };
28
+ return __assign.apply(this, arguments);
29
+ };
30
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
31
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
32
+ return new (P || (P = Promise))(function (resolve, reject) {
33
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
34
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
35
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
36
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
37
+ });
38
+ };
39
+ var __generator = (this && this.__generator) || function (thisArg, body) {
40
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
41
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
42
+ function verb(n) { return function (v) { return step([n, v]); }; }
43
+ function step(op) {
44
+ if (f) throw new TypeError("Generator is already executing.");
45
+ while (_) try {
46
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
47
+ if (y = 0, t) op = [op[0] & 2, t.value];
48
+ switch (op[0]) {
49
+ case 0: case 1: t = op; break;
50
+ case 4: _.label++; return { value: op[1], done: false };
51
+ case 5: _.label++; y = op[1]; op = [0]; continue;
52
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
53
+ default:
54
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
55
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
56
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
57
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
58
+ if (t[2]) _.ops.pop();
59
+ _.trys.pop(); continue;
60
+ }
61
+ op = body.call(thisArg, _);
62
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
63
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
64
+ }
65
+ };
66
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
67
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
68
+ if (ar || !(i in from)) {
69
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
70
+ ar[i] = from[i];
71
+ }
72
+ }
73
+ return to.concat(ar || Array.prototype.slice.call(from));
74
+ };
75
+ import * as path from 'path';
76
+ import * as crypto from 'crypto';
77
+ // ===== Lazy singleton =====
78
+ var registryPromise = null;
79
+ var registryInstance = null;
80
+ var bridgeAvailable = null;
81
+ /**
82
+ * Resolve database path with path traversal protection.
83
+ * Only allows paths within or below the project's .swarm directory,
84
+ * or the special ':memory:' path.
85
+ */
86
+ function getDbPath(customPath) {
87
+ var swarmDir = path.resolve(process.cwd(), '.swarm');
88
+ if (!customPath)
89
+ return path.join(swarmDir, 'memory.db');
90
+ if (customPath === ':memory:')
91
+ return ':memory:';
92
+ var resolved = path.resolve(customPath);
93
+ // Ensure the path doesn't escape the working directory
94
+ var cwd = process.cwd();
95
+ if (!resolved.startsWith(cwd)) {
96
+ return path.join(swarmDir, 'memory.db'); // fallback to safe default
97
+ }
98
+ return resolved;
99
+ }
100
+ /**
101
+ * Generate a secure random ID for memory entries.
102
+ */
103
+ function generateId(prefix) {
104
+ return prefix + "_" + Date.now() + "_" + crypto.randomBytes(8).toString('hex');
105
+ }
106
+ /**
107
+ * Lazily initialize the ControllerRegistry singleton.
108
+ * Returns null if @claude-flow/memory is not available.
109
+ */
110
+ function getRegistry(dbPath) {
111
+ return __awaiter(this, void 0, Promise, function () {
112
+ var _this = this;
113
+ return __generator(this, function (_a) {
114
+ if (bridgeAvailable === false)
115
+ return [2 /*return*/, null];
116
+ if (registryInstance)
117
+ return [2 /*return*/, registryInstance];
118
+ if (!registryPromise) {
119
+ registryPromise = (function () { return __awaiter(_this, void 0, void 0, function () {
120
+ var ControllerRegistry, registry, origLog_1, _a;
121
+ return __generator(this, function (_b) {
122
+ switch (_b.label) {
123
+ case 0:
124
+ _b.trys.push([0, 6, , 7]);
125
+ return [4 /*yield*/, import('@claude-flow/memory')];
126
+ case 1:
127
+ ControllerRegistry = (_b.sent()).ControllerRegistry;
128
+ registry = new ControllerRegistry();
129
+ origLog_1 = console.log;
130
+ console.log = function () {
131
+ var _a;
132
+ var args = [];
133
+ for (var _i = 0; _i < arguments.length; _i++) {
134
+ args[_i] = arguments[_i];
135
+ }
136
+ var msg = String((_a = args[0]) !== null && _a !== void 0 ? _a : '');
137
+ if (msg.includes('Transformers.js') ||
138
+ msg.includes('better-sqlite3') ||
139
+ msg.includes('[AgentDB]') ||
140
+ msg.includes('[HNSWLibBackend]') ||
141
+ msg.includes('RuVector graph'))
142
+ return;
143
+ origLog_1.apply(console, args);
144
+ };
145
+ _b.label = 2;
146
+ case 2:
147
+ _b.trys.push([2, , 4, 5]);
148
+ return [4 /*yield*/, registry.initialize({
149
+ dbPath: dbPath || getDbPath(),
150
+ dimension: 384,
151
+ controllers: {
152
+ reasoningBank: true,
153
+ learningBridge: false,
154
+ tieredCache: true,
155
+ hierarchicalMemory: true,
156
+ memoryConsolidation: true,
157
+ memoryGraph: true
158
+ }
159
+ })];
160
+ case 3:
161
+ _b.sent();
162
+ return [3 /*break*/, 5];
163
+ case 4:
164
+ console.log = origLog_1;
165
+ return [7 /*endfinally*/];
166
+ case 5:
167
+ registryInstance = registry;
168
+ bridgeAvailable = true;
169
+ return [2 /*return*/, registry];
170
+ case 6:
171
+ _a = _b.sent();
172
+ bridgeAvailable = false;
173
+ registryPromise = null;
174
+ return [2 /*return*/, null];
175
+ case 7: return [2 /*return*/];
176
+ }
177
+ });
178
+ }); })();
179
+ }
180
+ return [2 /*return*/, registryPromise];
181
+ });
182
+ });
183
+ }
184
+ // ===== Phase 2: BM25 hybrid scoring =====
185
+ /**
186
+ * BM25 scoring for keyword-based search.
187
+ * Replaces naive String.includes() with proper information retrieval scoring.
188
+ * Parameters tuned for short memory entries (k1=1.2, b=0.75).
189
+ */
190
+ function bm25Score(queryTerms, docContent, avgDocLength, docCount, termDocFreqs) {
191
+ var k1 = 1.2;
192
+ var b = 0.75;
193
+ var docWords = docContent.toLowerCase().split(/\s+/);
194
+ var docLength = docWords.length;
195
+ var score = 0;
196
+ var _loop_1 = function (term) {
197
+ var tf = docWords.filter(function (w) { return w === term || w.includes(term); }).length;
198
+ if (tf === 0)
199
+ return "continue";
200
+ var df = termDocFreqs.get(term) || 1;
201
+ var idf = Math.log((docCount - df + 0.5) / (df + 0.5) + 1);
202
+ var tfNorm = (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * (docLength / Math.max(1, avgDocLength))));
203
+ score += idf * tfNorm;
204
+ };
205
+ for (var _i = 0, queryTerms_1 = queryTerms; _i < queryTerms_1.length; _i++) {
206
+ var term = queryTerms_1[_i];
207
+ _loop_1(term);
208
+ }
209
+ return score;
210
+ }
211
+ /**
212
+ * Compute BM25 term document frequencies for a set of rows.
213
+ */
214
+ function computeTermDocFreqs(queryTerms, rows) {
215
+ var termDocFreqs = new Map();
216
+ var totalLength = 0;
217
+ for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
218
+ var row = rows_1[_i];
219
+ var content = (row.content || '').toLowerCase();
220
+ var words = content.split(/\s+/);
221
+ totalLength += words.length;
222
+ for (var _a = 0, queryTerms_2 = queryTerms; _a < queryTerms_2.length; _a++) {
223
+ var term = queryTerms_2[_a];
224
+ if (content.includes(term)) {
225
+ termDocFreqs.set(term, (termDocFreqs.get(term) || 0) + 1);
226
+ }
227
+ }
228
+ }
229
+ return { termDocFreqs: termDocFreqs, avgDocLength: rows.length > 0 ? totalLength / rows.length : 1 };
230
+ }
231
+ // ===== Phase 2: TieredCache helpers =====
232
+ /**
233
+ * Try to read from TieredCache before hitting DB.
234
+ * Returns cached value or null if cache miss.
235
+ */
236
+ function cacheGet(registry, cacheKey) {
237
+ var _a;
238
+ return __awaiter(this, void 0, Promise, function () {
239
+ var cache;
240
+ return __generator(this, function (_b) {
241
+ try {
242
+ cache = registry.get('tieredCache');
243
+ if (!cache || typeof cache.get !== 'function')
244
+ return [2 /*return*/, null];
245
+ return [2 /*return*/, (_a = cache.get(cacheKey)) !== null && _a !== void 0 ? _a : null];
246
+ }
247
+ catch (_c) {
248
+ return [2 /*return*/, null];
249
+ }
250
+ return [2 /*return*/];
251
+ });
252
+ });
253
+ }
254
+ /**
255
+ * Write to TieredCache after DB write.
256
+ */
257
+ function cacheSet(registry, cacheKey, value) {
258
+ return __awaiter(this, void 0, Promise, function () {
259
+ var cache;
260
+ return __generator(this, function (_a) {
261
+ try {
262
+ cache = registry.get('tieredCache');
263
+ if (cache && typeof cache.set === 'function') {
264
+ cache.set(cacheKey, value);
265
+ }
266
+ }
267
+ catch (_b) {
268
+ // Non-fatal
269
+ }
270
+ return [2 /*return*/];
271
+ });
272
+ });
273
+ }
274
+ /**
275
+ * Invalidate a cache key after mutation.
276
+ */
277
+ function cacheInvalidate(registry, cacheKey) {
278
+ return __awaiter(this, void 0, Promise, function () {
279
+ var cache;
280
+ return __generator(this, function (_a) {
281
+ try {
282
+ cache = registry.get('tieredCache');
283
+ if (cache && typeof cache["delete"] === 'function') {
284
+ cache["delete"](cacheKey);
285
+ }
286
+ }
287
+ catch (_b) {
288
+ // Non-fatal
289
+ }
290
+ return [2 /*return*/];
291
+ });
292
+ });
293
+ }
294
+ // ===== Phase 2: MutationGuard helpers =====
295
+ /**
296
+ * Validate a mutation through MutationGuard before executing.
297
+ * Returns true if the mutation is allowed, false if rejected.
298
+ * When guard is unavailable (not installed), mutations are allowed.
299
+ * When guard is present but throws, mutations are DENIED (fail-closed).
300
+ */
301
+ function guardValidate(registry, operation, params) {
302
+ return __awaiter(this, void 0, Promise, function () {
303
+ var guard, result;
304
+ return __generator(this, function (_a) {
305
+ try {
306
+ guard = registry.get('mutationGuard');
307
+ if (!guard || typeof guard.validate !== 'function') {
308
+ return [2 /*return*/, { allowed: true }]; // No guard installed = allow (degraded mode)
309
+ }
310
+ result = guard.validate({ operation: operation, params: params, timestamp: Date.now() });
311
+ return [2 /*return*/, { allowed: (result === null || result === void 0 ? void 0 : result.allowed) === true, reason: result === null || result === void 0 ? void 0 : result.reason }];
312
+ }
313
+ catch (_b) {
314
+ return [2 /*return*/, { allowed: false, reason: 'MutationGuard validation error' }]; // Fail-closed
315
+ }
316
+ return [2 /*return*/];
317
+ });
318
+ });
319
+ }
320
+ // ===== Phase 3: AttestationLog helpers =====
321
+ /**
322
+ * Log a write operation to AttestationLog/WitnessChain.
323
+ */
324
+ function logAttestation(registry, operation, entryId, metadata) {
325
+ return __awaiter(this, void 0, Promise, function () {
326
+ var attestation;
327
+ return __generator(this, function (_a) {
328
+ try {
329
+ attestation = registry.get('attestationLog');
330
+ if (!attestation)
331
+ return [2 /*return*/];
332
+ if (typeof attestation.record === 'function') {
333
+ attestation.record(__assign({ operation: operation, entryId: entryId, timestamp: Date.now() }, metadata));
334
+ }
335
+ else if (typeof attestation.log === 'function') {
336
+ attestation.log(operation, entryId, metadata);
337
+ }
338
+ }
339
+ catch (_b) {
340
+ // Non-fatal — attestation is observability, not correctness
341
+ }
342
+ return [2 /*return*/];
343
+ });
344
+ });
345
+ }
346
+ /**
347
+ * Get the AgentDB database handle and ensure memory_entries table exists.
348
+ * Returns null if not available.
349
+ */
350
+ function getDb(registry) {
351
+ var agentdb = registry.getAgentDB();
352
+ if (!(agentdb === null || agentdb === void 0 ? void 0 : agentdb.database))
353
+ return null;
354
+ var db = agentdb.database;
355
+ // Ensure memory_entries table exists (idempotent)
356
+ try {
357
+ db.exec("CREATE TABLE IF NOT EXISTS memory_entries (\n id TEXT PRIMARY KEY,\n key TEXT NOT NULL,\n namespace TEXT DEFAULT 'default',\n content TEXT NOT NULL,\n type TEXT DEFAULT 'semantic',\n embedding TEXT,\n embedding_model TEXT DEFAULT 'local',\n embedding_dimensions INTEGER,\n tags TEXT,\n metadata TEXT,\n owner_id TEXT,\n created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),\n updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),\n expires_at INTEGER,\n last_accessed_at INTEGER,\n access_count INTEGER DEFAULT 0,\n status TEXT DEFAULT 'active',\n UNIQUE(namespace, key)\n )");
358
+ // Ensure indexes
359
+ db.exec("CREATE INDEX IF NOT EXISTS idx_bridge_ns ON memory_entries(namespace)");
360
+ db.exec("CREATE INDEX IF NOT EXISTS idx_bridge_key ON memory_entries(key)");
361
+ db.exec("CREATE INDEX IF NOT EXISTS idx_bridge_status ON memory_entries(status)");
362
+ }
363
+ catch (_a) {
364
+ // Table already exists or db is read-only — that's fine
365
+ }
366
+ return { db: db, agentdb: agentdb };
367
+ }
368
+ // ===== Bridge functions — match memory-initializer.ts signatures =====
369
+ /**
370
+ * Store an entry via AgentDB v3.
371
+ * Phase 2-5: Routes through MutationGuard → TieredCache → DB → AttestationLog.
372
+ * Returns null to signal fallback to sql.js.
373
+ */
374
+ export function bridgeStoreEntry(options) {
375
+ return __awaiter(this, void 0, Promise, function () {
376
+ var registry, ctx, key, value, _a, namespace, _b, tags, ttl, id, now, guardResult, embeddingJson, dimensions, model, embedder, emb, _c, insertSql, stmt, safeNs, safeKey, cacheKey, _d;
377
+ return __generator(this, function (_e) {
378
+ switch (_e.label) {
379
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
380
+ case 1:
381
+ registry = _e.sent();
382
+ if (!registry)
383
+ return [2 /*return*/, null];
384
+ ctx = getDb(registry);
385
+ if (!ctx)
386
+ return [2 /*return*/, null];
387
+ _e.label = 2;
388
+ case 2:
389
+ _e.trys.push([2, 11, , 12]);
390
+ key = options.key, value = options.value, _a = options.namespace, namespace = _a === void 0 ? 'default' : _a, _b = options.tags, tags = _b === void 0 ? [] : _b, ttl = options.ttl;
391
+ id = generateId('entry');
392
+ now = Date.now();
393
+ return [4 /*yield*/, guardValidate(registry, 'store', { key: key, namespace: namespace, size: value.length })];
394
+ case 3:
395
+ guardResult = _e.sent();
396
+ if (!guardResult.allowed) {
397
+ return [2 /*return*/, { success: false, id: id, error: "MutationGuard rejected: " + guardResult.reason }];
398
+ }
399
+ embeddingJson = null;
400
+ dimensions = 0;
401
+ model = 'local';
402
+ if (!(options.generateEmbeddingFlag !== false && value.length > 0)) return [3 /*break*/, 8];
403
+ _e.label = 4;
404
+ case 4:
405
+ _e.trys.push([4, 7, , 8]);
406
+ embedder = ctx.agentdb.embedder;
407
+ if (!embedder) return [3 /*break*/, 6];
408
+ return [4 /*yield*/, embedder.embed(value)];
409
+ case 5:
410
+ emb = _e.sent();
411
+ if (emb) {
412
+ embeddingJson = JSON.stringify(Array.from(emb));
413
+ dimensions = emb.length;
414
+ model = 'Xenova/all-MiniLM-L6-v2';
415
+ }
416
+ _e.label = 6;
417
+ case 6: return [3 /*break*/, 8];
418
+ case 7:
419
+ _c = _e.sent();
420
+ return [3 /*break*/, 8];
421
+ case 8:
422
+ insertSql = options.upsert
423
+ ? "INSERT OR REPLACE INTO memory_entries (\n id, key, namespace, content, type,\n embedding, embedding_dimensions, embedding_model,\n tags, metadata, created_at, updated_at, expires_at, status\n ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')"
424
+ : "INSERT INTO memory_entries (\n id, key, namespace, content, type,\n embedding, embedding_dimensions, embedding_model,\n tags, metadata, created_at, updated_at, expires_at, status\n ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')";
425
+ stmt = ctx.db.prepare(insertSql);
426
+ stmt.run(id, key, namespace, value, embeddingJson, dimensions || null, model, tags.length > 0 ? JSON.stringify(tags) : null, '{}', now, now, ttl ? now + (ttl * 1000) : null);
427
+ safeNs = String(namespace).replace(/:/g, '_');
428
+ safeKey = String(key).replace(/:/g, '_');
429
+ cacheKey = "entry:" + safeNs + ":" + safeKey;
430
+ return [4 /*yield*/, cacheSet(registry, cacheKey, { id: id, key: key, namespace: namespace, content: value, embedding: embeddingJson })];
431
+ case 9:
432
+ _e.sent();
433
+ // Phase 4: AttestationLog write audit
434
+ return [4 /*yield*/, logAttestation(registry, 'store', id, { key: key, namespace: namespace, hasEmbedding: !!embeddingJson })];
435
+ case 10:
436
+ // Phase 4: AttestationLog write audit
437
+ _e.sent();
438
+ return [2 /*return*/, {
439
+ success: true,
440
+ id: id,
441
+ embedding: embeddingJson ? { dimensions: dimensions, model: model } : undefined,
442
+ guarded: true,
443
+ cached: true,
444
+ attested: true
445
+ }];
446
+ case 11:
447
+ _d = _e.sent();
448
+ return [2 /*return*/, null];
449
+ case 12: return [2 /*return*/];
450
+ }
451
+ });
452
+ });
453
+ }
454
+ /**
455
+ * Search entries via AgentDB v3.
456
+ * Phase 2: BM25 hybrid scoring replaces naive String.includes() keyword fallback.
457
+ * Combines cosine similarity (semantic) with BM25 (lexical) via reciprocal rank fusion.
458
+ */
459
+ export function bridgeSearchEntries(options) {
460
+ return __awaiter(this, void 0, Promise, function () {
461
+ var registry, ctx, queryStr, _a, namespace, _b, limit, _c, threshold, startTime, queryEmbedding, embedder, emb, _d, nsFilter, rows, stmt, queryTerms, _e, termDocFreqs, avgDocLength, docCount, results, _i, rows_2, row, semanticScore, bm25ScoreVal, embedding, score, provenance, _f;
462
+ return __generator(this, function (_g) {
463
+ switch (_g.label) {
464
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
465
+ case 1:
466
+ registry = _g.sent();
467
+ if (!registry)
468
+ return [2 /*return*/, null];
469
+ ctx = getDb(registry);
470
+ if (!ctx)
471
+ return [2 /*return*/, null];
472
+ _g.label = 2;
473
+ case 2:
474
+ _g.trys.push([2, 8, , 9]);
475
+ queryStr = options.query, _a = options.namespace, namespace = _a === void 0 ? 'default' : _a, _b = options.limit, limit = _b === void 0 ? 10 : _b, _c = options.threshold, threshold = _c === void 0 ? 0.3 : _c;
476
+ startTime = Date.now();
477
+ queryEmbedding = null;
478
+ _g.label = 3;
479
+ case 3:
480
+ _g.trys.push([3, 6, , 7]);
481
+ embedder = ctx.agentdb.embedder;
482
+ if (!embedder) return [3 /*break*/, 5];
483
+ return [4 /*yield*/, embedder.embed(queryStr)];
484
+ case 4:
485
+ emb = _g.sent();
486
+ queryEmbedding = Array.from(emb);
487
+ _g.label = 5;
488
+ case 5: return [3 /*break*/, 7];
489
+ case 6:
490
+ _d = _g.sent();
491
+ return [3 /*break*/, 7];
492
+ case 7:
493
+ nsFilter = namespace !== 'all'
494
+ ? "AND namespace = ?"
495
+ : '';
496
+ rows = void 0;
497
+ try {
498
+ stmt = ctx.db.prepare("\n SELECT id, key, namespace, content, embedding\n FROM memory_entries\n WHERE status = 'active' " + nsFilter + "\n LIMIT 1000\n ");
499
+ rows = namespace !== 'all' ? stmt.all(namespace) : stmt.all();
500
+ }
501
+ catch (_h) {
502
+ return [2 /*return*/, null];
503
+ }
504
+ queryTerms = queryStr.toLowerCase().split(/\s+/).filter(function (t) { return t.length > 1; });
505
+ _e = computeTermDocFreqs(queryTerms, rows), termDocFreqs = _e.termDocFreqs, avgDocLength = _e.avgDocLength;
506
+ docCount = rows.length;
507
+ results = [];
508
+ for (_i = 0, rows_2 = rows; _i < rows_2.length; _i++) {
509
+ row = rows_2[_i];
510
+ semanticScore = 0;
511
+ bm25ScoreVal = 0;
512
+ // Semantic scoring via cosine similarity
513
+ if (queryEmbedding && row.embedding) {
514
+ try {
515
+ embedding = JSON.parse(row.embedding);
516
+ semanticScore = cosineSim(queryEmbedding, embedding);
517
+ }
518
+ catch (_j) {
519
+ // Invalid embedding
520
+ }
521
+ }
522
+ // Phase 2: BM25 keyword scoring (replaces String.includes fallback)
523
+ if (queryTerms.length > 0 && row.content) {
524
+ bm25ScoreVal = bm25Score(queryTerms, row.content, avgDocLength, docCount, termDocFreqs);
525
+ // Normalize BM25 to 0-1 range (cap at 10 for normalization)
526
+ bm25ScoreVal = Math.min(bm25ScoreVal / 10, 1.0);
527
+ }
528
+ score = queryEmbedding
529
+ ? (0.7 * semanticScore + 0.3 * bm25ScoreVal)
530
+ : bm25ScoreVal;
531
+ if (score >= threshold) {
532
+ provenance = queryEmbedding
533
+ ? "semantic:" + semanticScore.toFixed(3) + "+bm25:" + bm25ScoreVal.toFixed(3)
534
+ : "bm25:" + bm25ScoreVal.toFixed(3);
535
+ results.push({
536
+ id: String(row.id).substring(0, 12),
537
+ key: row.key || String(row.id).substring(0, 15),
538
+ content: (row.content || '').substring(0, 60) + ((row.content || '').length > 60 ? '...' : ''),
539
+ score: score,
540
+ namespace: row.namespace || 'default',
541
+ provenance: provenance
542
+ });
543
+ }
544
+ }
545
+ results.sort(function (a, b) { return b.score - a.score; });
546
+ return [2 /*return*/, {
547
+ success: true,
548
+ results: results.slice(0, limit),
549
+ searchTime: Date.now() - startTime,
550
+ searchMethod: queryEmbedding ? 'hybrid-bm25-semantic' : 'bm25-only'
551
+ }];
552
+ case 8:
553
+ _f = _g.sent();
554
+ return [2 /*return*/, null];
555
+ case 9: return [2 /*return*/];
556
+ }
557
+ });
558
+ });
559
+ }
560
+ /**
561
+ * List entries via AgentDB v3.
562
+ */
563
+ export function bridgeListEntries(options) {
564
+ var _a, _b;
565
+ return __awaiter(this, void 0, Promise, function () {
566
+ var registry, ctx, namespace, _c, limit, _d, offset, nsFilter, nsParams, total, countStmt, countRow, entries, stmt, rows, _i, rows_3, row;
567
+ return __generator(this, function (_e) {
568
+ switch (_e.label) {
569
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
570
+ case 1:
571
+ registry = _e.sent();
572
+ if (!registry)
573
+ return [2 /*return*/, null];
574
+ ctx = getDb(registry);
575
+ if (!ctx)
576
+ return [2 /*return*/, null];
577
+ try {
578
+ namespace = options.namespace, _c = options.limit, limit = _c === void 0 ? 20 : _c, _d = options.offset, offset = _d === void 0 ? 0 : _d;
579
+ nsFilter = namespace ? "AND namespace = ?" : '';
580
+ nsParams = namespace ? [namespace] : [];
581
+ total = 0;
582
+ try {
583
+ countStmt = ctx.db.prepare("SELECT COUNT(*) as cnt FROM memory_entries WHERE status = 'active' " + nsFilter);
584
+ countRow = countStmt.get.apply(countStmt, nsParams);
585
+ total = (_a = countRow === null || countRow === void 0 ? void 0 : countRow.cnt) !== null && _a !== void 0 ? _a : 0;
586
+ }
587
+ catch (_f) {
588
+ return [2 /*return*/, null];
589
+ }
590
+ entries = [];
591
+ try {
592
+ stmt = ctx.db.prepare("\n SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at\n FROM memory_entries\n WHERE status = 'active' " + nsFilter + "\n ORDER BY updated_at DESC\n LIMIT ? OFFSET ?\n ");
593
+ rows = stmt.all.apply(stmt, __spreadArray(__spreadArray([], nsParams, false), [limit, offset], false));
594
+ for (_i = 0, rows_3 = rows; _i < rows_3.length; _i++) {
595
+ row = rows_3[_i];
596
+ entries.push({
597
+ id: String(row.id).substring(0, 20),
598
+ key: row.key || String(row.id).substring(0, 15),
599
+ namespace: row.namespace || 'default',
600
+ size: (row.content || '').length,
601
+ accessCount: (_b = row.access_count) !== null && _b !== void 0 ? _b : 0,
602
+ createdAt: row.created_at || new Date().toISOString(),
603
+ updatedAt: row.updated_at || new Date().toISOString(),
604
+ hasEmbedding: !!(row.embedding && String(row.embedding).length > 10)
605
+ });
606
+ }
607
+ }
608
+ catch (_g) {
609
+ return [2 /*return*/, null];
610
+ }
611
+ return [2 /*return*/, { success: true, entries: entries, total: total }];
612
+ }
613
+ catch (_h) {
614
+ return [2 /*return*/, null];
615
+ }
616
+ return [2 /*return*/];
617
+ }
618
+ });
619
+ });
620
+ }
621
+ /**
622
+ * Get a specific entry via AgentDB v3.
623
+ * Phase 2: TieredCache consulted before DB hit.
624
+ */
625
+ export function bridgeGetEntry(options) {
626
+ var _a, _b;
627
+ return __awaiter(this, void 0, Promise, function () {
628
+ var registry, ctx, key, _c, namespace, safeNs, safeKey, cacheKey, cached, row, stmt, tags, entry, _d;
629
+ return __generator(this, function (_e) {
630
+ switch (_e.label) {
631
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
632
+ case 1:
633
+ registry = _e.sent();
634
+ if (!registry)
635
+ return [2 /*return*/, null];
636
+ ctx = getDb(registry);
637
+ if (!ctx)
638
+ return [2 /*return*/, null];
639
+ _e.label = 2;
640
+ case 2:
641
+ _e.trys.push([2, 5, , 6]);
642
+ key = options.key, _c = options.namespace, namespace = _c === void 0 ? 'default' : _c;
643
+ safeNs = String(namespace).replace(/:/g, '_');
644
+ safeKey = String(key).replace(/:/g, '_');
645
+ cacheKey = "entry:" + safeNs + ":" + safeKey;
646
+ return [4 /*yield*/, cacheGet(registry, cacheKey)];
647
+ case 3:
648
+ cached = _e.sent();
649
+ if (cached && cached.content) {
650
+ return [2 /*return*/, {
651
+ success: true,
652
+ found: true,
653
+ cacheHit: true,
654
+ entry: {
655
+ id: String(cached.id || ''),
656
+ key: cached.key || key,
657
+ namespace: cached.namespace || namespace,
658
+ content: cached.content || '',
659
+ accessCount: (_a = cached.accessCount) !== null && _a !== void 0 ? _a : 0,
660
+ createdAt: cached.createdAt || new Date().toISOString(),
661
+ updatedAt: cached.updatedAt || new Date().toISOString(),
662
+ hasEmbedding: !!cached.embedding,
663
+ tags: cached.tags || []
664
+ }
665
+ }];
666
+ }
667
+ row = void 0;
668
+ try {
669
+ stmt = ctx.db.prepare("\n SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at, tags\n FROM memory_entries\n WHERE status = 'active' AND key = ? AND namespace = ?\n LIMIT 1\n ");
670
+ row = stmt.get(key, namespace);
671
+ }
672
+ catch (_f) {
673
+ return [2 /*return*/, null];
674
+ }
675
+ if (!row) {
676
+ return [2 /*return*/, { success: true, found: false }];
677
+ }
678
+ // Update access count
679
+ try {
680
+ ctx.db.prepare("UPDATE memory_entries SET access_count = access_count + 1, last_accessed_at = ? WHERE id = ?").run(Date.now(), row.id);
681
+ }
682
+ catch (_g) {
683
+ // Non-fatal
684
+ }
685
+ tags = [];
686
+ if (row.tags) {
687
+ try {
688
+ tags = JSON.parse(row.tags);
689
+ }
690
+ catch ( /* invalid */_h) { /* invalid */ }
691
+ }
692
+ entry = {
693
+ id: String(row.id),
694
+ key: row.key || String(row.id),
695
+ namespace: row.namespace || 'default',
696
+ content: row.content || '',
697
+ accessCount: ((_b = row.access_count) !== null && _b !== void 0 ? _b : 0) + 1,
698
+ createdAt: row.created_at || new Date().toISOString(),
699
+ updatedAt: row.updated_at || new Date().toISOString(),
700
+ hasEmbedding: !!(row.embedding && String(row.embedding).length > 10),
701
+ tags: tags
702
+ };
703
+ // Phase 2: Populate cache for next read
704
+ return [4 /*yield*/, cacheSet(registry, cacheKey, entry)];
705
+ case 4:
706
+ // Phase 2: Populate cache for next read
707
+ _e.sent();
708
+ return [2 /*return*/, { success: true, found: true, cacheHit: false, entry: entry }];
709
+ case 5:
710
+ _d = _e.sent();
711
+ return [2 /*return*/, null];
712
+ case 6: return [2 /*return*/];
713
+ }
714
+ });
715
+ });
716
+ }
717
+ /**
718
+ * Delete an entry via AgentDB v3.
719
+ * Phase 5: MutationGuard validation, cache invalidation, attestation logging.
720
+ */
721
+ export function bridgeDeleteEntry(options) {
722
+ var _a, _b;
723
+ return __awaiter(this, void 0, Promise, function () {
724
+ var registry, ctx, key, _c, namespace, guardResult, changes, result, safeNs, safeKey, remaining, row, _d;
725
+ return __generator(this, function (_e) {
726
+ switch (_e.label) {
727
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
728
+ case 1:
729
+ registry = _e.sent();
730
+ if (!registry)
731
+ return [2 /*return*/, null];
732
+ ctx = getDb(registry);
733
+ if (!ctx)
734
+ return [2 /*return*/, null];
735
+ _e.label = 2;
736
+ case 2:
737
+ _e.trys.push([2, 7, , 8]);
738
+ key = options.key, _c = options.namespace, namespace = _c === void 0 ? 'default' : _c;
739
+ return [4 /*yield*/, guardValidate(registry, 'delete', { key: key, namespace: namespace })];
740
+ case 3:
741
+ guardResult = _e.sent();
742
+ if (!guardResult.allowed) {
743
+ return [2 /*return*/, { success: false, deleted: false, key: key, namespace: namespace, remainingEntries: 0, error: "MutationGuard rejected: " + guardResult.reason }];
744
+ }
745
+ changes = 0;
746
+ try {
747
+ result = ctx.db.prepare("\n UPDATE memory_entries\n SET status = 'deleted', updated_at = ?\n WHERE key = ? AND namespace = ? AND status = 'active'\n ").run(Date.now(), key, namespace);
748
+ changes = (_a = result === null || result === void 0 ? void 0 : result.changes) !== null && _a !== void 0 ? _a : 0;
749
+ }
750
+ catch (_f) {
751
+ return [2 /*return*/, null];
752
+ }
753
+ safeNs = String(namespace).replace(/:/g, '_');
754
+ safeKey = String(key).replace(/:/g, '_');
755
+ return [4 /*yield*/, cacheInvalidate(registry, "entry:" + safeNs + ":" + safeKey)];
756
+ case 4:
757
+ _e.sent();
758
+ if (!(changes > 0)) return [3 /*break*/, 6];
759
+ return [4 /*yield*/, logAttestation(registry, 'delete', key, { namespace: namespace })];
760
+ case 5:
761
+ _e.sent();
762
+ _e.label = 6;
763
+ case 6:
764
+ remaining = 0;
765
+ try {
766
+ row = ctx.db.prepare("SELECT COUNT(*) as cnt FROM memory_entries WHERE status = 'active'").get();
767
+ remaining = (_b = row === null || row === void 0 ? void 0 : row.cnt) !== null && _b !== void 0 ? _b : 0;
768
+ }
769
+ catch (_g) {
770
+ // Non-fatal
771
+ }
772
+ return [2 /*return*/, {
773
+ success: true,
774
+ deleted: changes > 0,
775
+ key: key,
776
+ namespace: namespace,
777
+ remainingEntries: remaining,
778
+ guarded: true
779
+ }];
780
+ case 7:
781
+ _d = _e.sent();
782
+ return [2 /*return*/, null];
783
+ case 8: return [2 /*return*/];
784
+ }
785
+ });
786
+ });
787
+ }
788
+ // ===== Phase 2: Embedding bridge =====
789
+ /**
790
+ * Generate embedding via AgentDB v3's embedder.
791
+ * Returns null if bridge unavailable — caller falls back to own ONNX/hash.
792
+ */
793
+ export function bridgeGenerateEmbedding(text, dbPath) {
794
+ return __awaiter(this, void 0, Promise, function () {
795
+ var registry, agentdb, embedder, emb, _a;
796
+ return __generator(this, function (_b) {
797
+ switch (_b.label) {
798
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
799
+ case 1:
800
+ registry = _b.sent();
801
+ if (!registry)
802
+ return [2 /*return*/, null];
803
+ _b.label = 2;
804
+ case 2:
805
+ _b.trys.push([2, 4, , 5]);
806
+ agentdb = registry.getAgentDB();
807
+ embedder = agentdb === null || agentdb === void 0 ? void 0 : agentdb.embedder;
808
+ if (!embedder)
809
+ return [2 /*return*/, null];
810
+ return [4 /*yield*/, embedder.embed(text)];
811
+ case 3:
812
+ emb = _b.sent();
813
+ if (!emb)
814
+ return [2 /*return*/, null];
815
+ return [2 /*return*/, {
816
+ embedding: Array.from(emb),
817
+ dimensions: emb.length,
818
+ model: 'Xenova/all-MiniLM-L6-v2'
819
+ }];
820
+ case 4:
821
+ _a = _b.sent();
822
+ return [2 /*return*/, null];
823
+ case 5: return [2 /*return*/];
824
+ }
825
+ });
826
+ });
827
+ }
828
+ /**
829
+ * Load embedding model via AgentDB v3 (it loads on init).
830
+ * Returns null if unavailable.
831
+ */
832
+ export function bridgeLoadEmbeddingModel(dbPath) {
833
+ return __awaiter(this, void 0, Promise, function () {
834
+ var startTime, registry, agentdb, embedder, test, _a;
835
+ return __generator(this, function (_b) {
836
+ switch (_b.label) {
837
+ case 0:
838
+ startTime = Date.now();
839
+ return [4 /*yield*/, getRegistry(dbPath)];
840
+ case 1:
841
+ registry = _b.sent();
842
+ if (!registry)
843
+ return [2 /*return*/, null];
844
+ _b.label = 2;
845
+ case 2:
846
+ _b.trys.push([2, 4, , 5]);
847
+ agentdb = registry.getAgentDB();
848
+ embedder = agentdb === null || agentdb === void 0 ? void 0 : agentdb.embedder;
849
+ if (!embedder)
850
+ return [2 /*return*/, null];
851
+ return [4 /*yield*/, embedder.embed('test')];
852
+ case 3:
853
+ test = _b.sent();
854
+ if (!test)
855
+ return [2 /*return*/, null];
856
+ return [2 /*return*/, {
857
+ success: true,
858
+ dimensions: test.length,
859
+ modelName: 'Xenova/all-MiniLM-L6-v2',
860
+ loadTime: Date.now() - startTime
861
+ }];
862
+ case 4:
863
+ _a = _b.sent();
864
+ return [2 /*return*/, null];
865
+ case 5: return [2 /*return*/];
866
+ }
867
+ });
868
+ });
869
+ }
870
+ // ===== Phase 3: HNSW bridge =====
871
+ /**
872
+ * Get HNSW status from AgentDB v3's vector backend or HNSW index.
873
+ * Returns null if unavailable.
874
+ */
875
+ export function bridgeGetHNSWStatus(dbPath) {
876
+ var _a;
877
+ return __awaiter(this, void 0, Promise, function () {
878
+ var registry, ctx, entryCount, row;
879
+ return __generator(this, function (_b) {
880
+ switch (_b.label) {
881
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
882
+ case 1:
883
+ registry = _b.sent();
884
+ if (!registry)
885
+ return [2 /*return*/, null];
886
+ try {
887
+ ctx = getDb(registry);
888
+ if (!ctx)
889
+ return [2 /*return*/, null];
890
+ entryCount = 0;
891
+ try {
892
+ row = ctx.db.prepare("SELECT COUNT(*) as cnt FROM memory_entries WHERE status = 'active' AND embedding IS NOT NULL").get();
893
+ entryCount = (_a = row === null || row === void 0 ? void 0 : row.cnt) !== null && _a !== void 0 ? _a : 0;
894
+ }
895
+ catch (_c) {
896
+ // Table might not exist
897
+ }
898
+ return [2 /*return*/, {
899
+ available: true,
900
+ initialized: true,
901
+ entryCount: entryCount,
902
+ dimensions: 384
903
+ }];
904
+ }
905
+ catch (_d) {
906
+ return [2 /*return*/, null];
907
+ }
908
+ return [2 /*return*/];
909
+ }
910
+ });
911
+ });
912
+ }
913
+ /**
914
+ * Search using AgentDB v3's embedder + SQLite entries.
915
+ * This is the HNSW-equivalent search through the bridge.
916
+ * Returns null if unavailable.
917
+ */
918
+ export function bridgeSearchHNSW(queryEmbedding, options, dbPath) {
919
+ var _a, _b;
920
+ return __awaiter(this, void 0, Promise, function () {
921
+ var registry, ctx, k, threshold, nsFilter, rows, stmt, results, _i, rows_4, row, emb, score;
922
+ return __generator(this, function (_c) {
923
+ switch (_c.label) {
924
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
925
+ case 1:
926
+ registry = _c.sent();
927
+ if (!registry)
928
+ return [2 /*return*/, null];
929
+ ctx = getDb(registry);
930
+ if (!ctx)
931
+ return [2 /*return*/, null];
932
+ try {
933
+ k = (_a = options === null || options === void 0 ? void 0 : options.k) !== null && _a !== void 0 ? _a : 10;
934
+ threshold = (_b = options === null || options === void 0 ? void 0 : options.threshold) !== null && _b !== void 0 ? _b : 0.3;
935
+ nsFilter = (options === null || options === void 0 ? void 0 : options.namespace) && options.namespace !== 'all'
936
+ ? "AND namespace = ?"
937
+ : '';
938
+ rows = void 0;
939
+ try {
940
+ stmt = ctx.db.prepare("\n SELECT id, key, namespace, content, embedding\n FROM memory_entries\n WHERE status = 'active' AND embedding IS NOT NULL " + nsFilter + "\n LIMIT 10000\n ");
941
+ rows = nsFilter
942
+ ? stmt.all(options.namespace)
943
+ : stmt.all();
944
+ }
945
+ catch (_d) {
946
+ return [2 /*return*/, null];
947
+ }
948
+ results = [];
949
+ for (_i = 0, rows_4 = rows; _i < rows_4.length; _i++) {
950
+ row = rows_4[_i];
951
+ if (!row.embedding)
952
+ continue;
953
+ try {
954
+ emb = JSON.parse(row.embedding);
955
+ score = cosineSim(queryEmbedding, emb);
956
+ if (score >= threshold) {
957
+ results.push({
958
+ id: String(row.id).substring(0, 12),
959
+ key: row.key || String(row.id).substring(0, 15),
960
+ content: (row.content || '').substring(0, 60) +
961
+ ((row.content || '').length > 60 ? '...' : ''),
962
+ score: score,
963
+ namespace: row.namespace || 'default'
964
+ });
965
+ }
966
+ }
967
+ catch (_e) {
968
+ // Skip invalid embeddings
969
+ }
970
+ }
971
+ results.sort(function (a, b) { return b.score - a.score; });
972
+ return [2 /*return*/, results.slice(0, k)];
973
+ }
974
+ catch (_f) {
975
+ return [2 /*return*/, null];
976
+ }
977
+ return [2 /*return*/];
978
+ }
979
+ });
980
+ });
981
+ }
982
+ /**
983
+ * Add entry to the bridge's database with embedding.
984
+ * Returns null if unavailable.
985
+ */
986
+ export function bridgeAddToHNSW(id, embedding, entry, dbPath) {
987
+ return __awaiter(this, void 0, Promise, function () {
988
+ var registry, ctx, now, embeddingJson;
989
+ return __generator(this, function (_a) {
990
+ switch (_a.label) {
991
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
992
+ case 1:
993
+ registry = _a.sent();
994
+ if (!registry)
995
+ return [2 /*return*/, null];
996
+ ctx = getDb(registry);
997
+ if (!ctx)
998
+ return [2 /*return*/, null];
999
+ try {
1000
+ now = Date.now();
1001
+ embeddingJson = JSON.stringify(embedding);
1002
+ ctx.db.prepare("\n INSERT OR REPLACE INTO memory_entries (\n id, key, namespace, content, type,\n embedding, embedding_dimensions, embedding_model,\n created_at, updated_at, status\n ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, 'Xenova/all-MiniLM-L6-v2', ?, ?, 'active')\n ").run(id, entry.key, entry.namespace, entry.content, embeddingJson, embedding.length, now, now);
1003
+ return [2 /*return*/, true];
1004
+ }
1005
+ catch (_b) {
1006
+ return [2 /*return*/, null];
1007
+ }
1008
+ return [2 /*return*/];
1009
+ }
1010
+ });
1011
+ });
1012
+ }
1013
+ // ===== Phase 4: Controller access =====
1014
+ /**
1015
+ * Get a named controller from AgentDB v3 via ControllerRegistry.
1016
+ * Returns null if unavailable.
1017
+ */
1018
+ export function bridgeGetController(name, dbPath) {
1019
+ var _a;
1020
+ return __awaiter(this, void 0, Promise, function () {
1021
+ var registry;
1022
+ return __generator(this, function (_b) {
1023
+ switch (_b.label) {
1024
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
1025
+ case 1:
1026
+ registry = _b.sent();
1027
+ if (!registry)
1028
+ return [2 /*return*/, null];
1029
+ try {
1030
+ return [2 /*return*/, (_a = registry.get(name)) !== null && _a !== void 0 ? _a : null];
1031
+ }
1032
+ catch (_c) {
1033
+ return [2 /*return*/, null];
1034
+ }
1035
+ return [2 /*return*/];
1036
+ }
1037
+ });
1038
+ });
1039
+ }
1040
+ /**
1041
+ * Check if a controller is available.
1042
+ */
1043
+ export function bridgeHasController(name, dbPath) {
1044
+ return __awaiter(this, void 0, Promise, function () {
1045
+ var registry, controller;
1046
+ return __generator(this, function (_a) {
1047
+ switch (_a.label) {
1048
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
1049
+ case 1:
1050
+ registry = _a.sent();
1051
+ if (!registry)
1052
+ return [2 /*return*/, false];
1053
+ try {
1054
+ controller = registry.get(name);
1055
+ return [2 /*return*/, controller !== null && controller !== undefined];
1056
+ }
1057
+ catch (_b) {
1058
+ return [2 /*return*/, false];
1059
+ }
1060
+ return [2 /*return*/];
1061
+ }
1062
+ });
1063
+ });
1064
+ }
1065
+ /**
1066
+ * List all controllers and their status.
1067
+ */
1068
+ export function bridgeListControllers(dbPath) {
1069
+ return __awaiter(this, void 0, Promise, function () {
1070
+ var registry;
1071
+ return __generator(this, function (_a) {
1072
+ switch (_a.label) {
1073
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
1074
+ case 1:
1075
+ registry = _a.sent();
1076
+ if (!registry)
1077
+ return [2 /*return*/, null];
1078
+ try {
1079
+ return [2 /*return*/, registry.listControllers()];
1080
+ }
1081
+ catch (_b) {
1082
+ return [2 /*return*/, null];
1083
+ }
1084
+ return [2 /*return*/];
1085
+ }
1086
+ });
1087
+ });
1088
+ }
1089
+ /**
1090
+ * Check if the AgentDB v3 bridge is available.
1091
+ */
1092
+ export function isBridgeAvailable(dbPath) {
1093
+ return __awaiter(this, void 0, Promise, function () {
1094
+ var registry;
1095
+ return __generator(this, function (_a) {
1096
+ switch (_a.label) {
1097
+ case 0:
1098
+ if (bridgeAvailable !== null)
1099
+ return [2 /*return*/, bridgeAvailable];
1100
+ return [4 /*yield*/, getRegistry(dbPath)];
1101
+ case 1:
1102
+ registry = _a.sent();
1103
+ return [2 /*return*/, registry !== null];
1104
+ }
1105
+ });
1106
+ });
1107
+ }
1108
+ /**
1109
+ * Get the ControllerRegistry instance (for advanced consumers).
1110
+ */
1111
+ export function getControllerRegistry(dbPath) {
1112
+ return __awaiter(this, void 0, Promise, function () {
1113
+ return __generator(this, function (_a) {
1114
+ return [2 /*return*/, getRegistry(dbPath)];
1115
+ });
1116
+ });
1117
+ }
1118
+ /**
1119
+ * Shutdown the bridge and release resources.
1120
+ */
1121
+ export function shutdownBridge() {
1122
+ return __awaiter(this, void 0, Promise, function () {
1123
+ var _a;
1124
+ return __generator(this, function (_b) {
1125
+ switch (_b.label) {
1126
+ case 0:
1127
+ if (!registryInstance) return [3 /*break*/, 5];
1128
+ _b.label = 1;
1129
+ case 1:
1130
+ _b.trys.push([1, 3, , 4]);
1131
+ return [4 /*yield*/, registryInstance.shutdown()];
1132
+ case 2:
1133
+ _b.sent();
1134
+ return [3 /*break*/, 4];
1135
+ case 3:
1136
+ _a = _b.sent();
1137
+ return [3 /*break*/, 4];
1138
+ case 4:
1139
+ registryInstance = null;
1140
+ registryPromise = null;
1141
+ bridgeAvailable = null;
1142
+ _b.label = 5;
1143
+ case 5: return [2 /*return*/];
1144
+ }
1145
+ });
1146
+ });
1147
+ }
1148
+ // ===== Phase 3: ReasoningBank pattern operations =====
1149
+ /**
1150
+ * Store a pattern via ReasoningBank controller.
1151
+ * Falls back to raw SQL if ReasoningBank unavailable.
1152
+ */
1153
+ export function bridgeStorePattern(options) {
1154
+ return __awaiter(this, void 0, Promise, function () {
1155
+ var registry, reasoningBank, patternId, result, _a;
1156
+ return __generator(this, function (_b) {
1157
+ switch (_b.label) {
1158
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1159
+ case 1:
1160
+ registry = _b.sent();
1161
+ if (!registry)
1162
+ return [2 /*return*/, null];
1163
+ _b.label = 2;
1164
+ case 2:
1165
+ _b.trys.push([2, 6, , 7]);
1166
+ reasoningBank = registry.get('reasoningBank');
1167
+ patternId = generateId('pattern');
1168
+ if (!(reasoningBank && typeof reasoningBank.store === 'function')) return [3 /*break*/, 4];
1169
+ return [4 /*yield*/, reasoningBank.store({
1170
+ id: patternId,
1171
+ content: options.pattern,
1172
+ type: options.type,
1173
+ confidence: options.confidence,
1174
+ metadata: options.metadata,
1175
+ timestamp: Date.now()
1176
+ })];
1177
+ case 3:
1178
+ _b.sent();
1179
+ return [2 /*return*/, { success: true, patternId: patternId, controller: 'reasoningBank' }];
1180
+ case 4: return [4 /*yield*/, bridgeStoreEntry({
1181
+ key: patternId,
1182
+ value: JSON.stringify({ pattern: options.pattern, type: options.type, confidence: options.confidence, metadata: options.metadata }),
1183
+ namespace: 'pattern',
1184
+ generateEmbeddingFlag: true,
1185
+ tags: [options.type, 'reasoning-pattern'],
1186
+ dbPath: options.dbPath
1187
+ })];
1188
+ case 5:
1189
+ result = _b.sent();
1190
+ return [2 /*return*/, result ? { success: true, patternId: result.id, controller: 'bridge-fallback' } : null];
1191
+ case 6:
1192
+ _a = _b.sent();
1193
+ return [2 /*return*/, null];
1194
+ case 7: return [2 /*return*/];
1195
+ }
1196
+ });
1197
+ });
1198
+ }
1199
+ /**
1200
+ * Search patterns via ReasoningBank controller.
1201
+ */
1202
+ export function bridgeSearchPatterns(options) {
1203
+ return __awaiter(this, void 0, Promise, function () {
1204
+ var registry, reasoningBank, results, result, _a;
1205
+ return __generator(this, function (_b) {
1206
+ switch (_b.label) {
1207
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1208
+ case 1:
1209
+ registry = _b.sent();
1210
+ if (!registry)
1211
+ return [2 /*return*/, null];
1212
+ _b.label = 2;
1213
+ case 2:
1214
+ _b.trys.push([2, 6, , 7]);
1215
+ reasoningBank = registry.get('reasoningBank');
1216
+ if (!(reasoningBank && typeof reasoningBank.search === 'function')) return [3 /*break*/, 4];
1217
+ return [4 /*yield*/, reasoningBank.search(options.query, {
1218
+ topK: options.topK || 5,
1219
+ minScore: options.minConfidence || 0.3
1220
+ })];
1221
+ case 3:
1222
+ results = _b.sent();
1223
+ return [2 /*return*/, {
1224
+ results: Array.isArray(results) ? results.map(function (r) {
1225
+ var _a, _b;
1226
+ return ({
1227
+ id: r.id || r.patternId || '',
1228
+ content: r.content || r.pattern || '',
1229
+ score: (_b = (_a = r.score) !== null && _a !== void 0 ? _a : r.confidence) !== null && _b !== void 0 ? _b : 0
1230
+ });
1231
+ }) : [],
1232
+ controller: 'reasoningBank'
1233
+ }];
1234
+ case 4: return [4 /*yield*/, bridgeSearchEntries({
1235
+ query: options.query,
1236
+ namespace: 'pattern',
1237
+ limit: options.topK || 5,
1238
+ threshold: options.minConfidence || 0.3,
1239
+ dbPath: options.dbPath
1240
+ })];
1241
+ case 5:
1242
+ result = _b.sent();
1243
+ return [2 /*return*/, result ? {
1244
+ results: result.results.map(function (r) { return ({ id: r.id, content: r.content, score: r.score }); }),
1245
+ controller: 'bridge-fallback'
1246
+ } : null];
1247
+ case 6:
1248
+ _a = _b.sent();
1249
+ return [2 /*return*/, null];
1250
+ case 7: return [2 /*return*/];
1251
+ }
1252
+ });
1253
+ });
1254
+ }
1255
+ // ===== Phase 3: Feedback recording =====
1256
+ /**
1257
+ * Record task feedback for learning via ReasoningBank or LearningSystem.
1258
+ * Wired into hooks_post-task handler.
1259
+ */
1260
+ export function bridgeRecordFeedback(options) {
1261
+ var _a;
1262
+ return __awaiter(this, void 0, Promise, function () {
1263
+ var registry, controller, updated, learningSystem, _b, reasoningBank, _c, skills, _i, _d, pattern, _e, storeResult, _f;
1264
+ return __generator(this, function (_g) {
1265
+ switch (_g.label) {
1266
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1267
+ case 1:
1268
+ registry = _g.sent();
1269
+ if (!registry)
1270
+ return [2 /*return*/, null];
1271
+ _g.label = 2;
1272
+ case 2:
1273
+ _g.trys.push([2, 25, , 26]);
1274
+ controller = 'none';
1275
+ updated = 0;
1276
+ learningSystem = registry.get('learningSystem');
1277
+ if (!learningSystem) return [3 /*break*/, 9];
1278
+ _g.label = 3;
1279
+ case 3:
1280
+ _g.trys.push([3, 8, , 9]);
1281
+ if (!(typeof learningSystem.recordFeedback === 'function')) return [3 /*break*/, 5];
1282
+ return [4 /*yield*/, learningSystem.recordFeedback({
1283
+ taskId: options.taskId, success: options.success, quality: options.quality,
1284
+ agent: options.agent, duration: options.duration, timestamp: Date.now()
1285
+ })];
1286
+ case 4:
1287
+ _g.sent();
1288
+ controller = 'learningSystem';
1289
+ updated++;
1290
+ return [3 /*break*/, 7];
1291
+ case 5:
1292
+ if (!(typeof learningSystem.record === 'function')) return [3 /*break*/, 7];
1293
+ return [4 /*yield*/, learningSystem.record(options.taskId, options.quality, options.success ? 'success' : 'failure')];
1294
+ case 6:
1295
+ _g.sent();
1296
+ controller = 'learningSystem';
1297
+ updated++;
1298
+ _g.label = 7;
1299
+ case 7: return [3 /*break*/, 9];
1300
+ case 8:
1301
+ _b = _g.sent();
1302
+ return [3 /*break*/, 9];
1303
+ case 9:
1304
+ reasoningBank = registry.get('reasoningBank');
1305
+ if (!reasoningBank) return [3 /*break*/, 16];
1306
+ _g.label = 10;
1307
+ case 10:
1308
+ _g.trys.push([10, 15, , 16]);
1309
+ if (!(typeof reasoningBank.recordOutcome === 'function')) return [3 /*break*/, 12];
1310
+ return [4 /*yield*/, reasoningBank.recordOutcome({
1311
+ taskId: options.taskId, verdict: options.success ? 'success' : 'failure',
1312
+ score: options.quality, timestamp: Date.now()
1313
+ })];
1314
+ case 11:
1315
+ _g.sent();
1316
+ controller = controller === 'none' ? 'reasoningBank' : controller + "+reasoningBank";
1317
+ updated++;
1318
+ return [3 /*break*/, 14];
1319
+ case 12:
1320
+ if (!(typeof reasoningBank.record === 'function')) return [3 /*break*/, 14];
1321
+ return [4 /*yield*/, reasoningBank.record(options.taskId, options.quality)];
1322
+ case 13:
1323
+ _g.sent();
1324
+ controller = controller === 'none' ? 'reasoningBank' : controller + "+reasoningBank";
1325
+ updated++;
1326
+ _g.label = 14;
1327
+ case 14: return [3 /*break*/, 16];
1328
+ case 15:
1329
+ _c = _g.sent();
1330
+ return [3 /*break*/, 16];
1331
+ case 16:
1332
+ if (!(options.success && options.quality >= 0.9 && ((_a = options.patterns) === null || _a === void 0 ? void 0 : _a.length))) return [3 /*break*/, 23];
1333
+ skills = registry.get('skills');
1334
+ if (!(skills && typeof skills.promote === 'function')) return [3 /*break*/, 23];
1335
+ _i = 0, _d = options.patterns;
1336
+ _g.label = 17;
1337
+ case 17:
1338
+ if (!(_i < _d.length)) return [3 /*break*/, 22];
1339
+ pattern = _d[_i];
1340
+ _g.label = 18;
1341
+ case 18:
1342
+ _g.trys.push([18, 20, , 21]);
1343
+ return [4 /*yield*/, skills.promote(pattern, options.quality)];
1344
+ case 19:
1345
+ _g.sent();
1346
+ updated++;
1347
+ return [3 /*break*/, 21];
1348
+ case 20:
1349
+ _e = _g.sent();
1350
+ return [3 /*break*/, 21];
1351
+ case 21:
1352
+ _i++;
1353
+ return [3 /*break*/, 17];
1354
+ case 22:
1355
+ controller += '+skills';
1356
+ _g.label = 23;
1357
+ case 23: return [4 /*yield*/, bridgeStoreEntry({
1358
+ key: "feedback-" + options.taskId,
1359
+ value: JSON.stringify(options),
1360
+ namespace: 'feedback',
1361
+ tags: [options.success ? 'success' : 'failure', options.agent || 'unknown'],
1362
+ dbPath: options.dbPath
1363
+ })];
1364
+ case 24:
1365
+ storeResult = _g.sent();
1366
+ if (storeResult === null || storeResult === void 0 ? void 0 : storeResult.success) {
1367
+ controller = controller === 'none' ? 'bridge-store' : controller + "+bridge-store";
1368
+ updated++;
1369
+ }
1370
+ return [2 /*return*/, { success: true, controller: controller, updated: updated }];
1371
+ case 25:
1372
+ _f = _g.sent();
1373
+ return [2 /*return*/, null];
1374
+ case 26: return [2 /*return*/];
1375
+ }
1376
+ });
1377
+ });
1378
+ }
1379
+ // ===== Phase 3: CausalMemoryGraph =====
1380
+ /**
1381
+ * Record a causal edge between two entries (e.g., task → result).
1382
+ */
1383
+ export function bridgeRecordCausalEdge(options) {
1384
+ var _a;
1385
+ return __awaiter(this, void 0, Promise, function () {
1386
+ var registry, causalGraph, ctx;
1387
+ return __generator(this, function (_b) {
1388
+ switch (_b.label) {
1389
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1390
+ case 1:
1391
+ registry = _b.sent();
1392
+ if (!registry)
1393
+ return [2 /*return*/, null];
1394
+ try {
1395
+ causalGraph = registry.get('causalGraph');
1396
+ if (causalGraph && typeof causalGraph.addEdge === 'function') {
1397
+ causalGraph.addEdge(options.sourceId, options.targetId, {
1398
+ relation: options.relation,
1399
+ weight: (_a = options.weight) !== null && _a !== void 0 ? _a : 1.0,
1400
+ timestamp: Date.now()
1401
+ });
1402
+ return [2 /*return*/, { success: true, controller: 'causalGraph' }];
1403
+ }
1404
+ ctx = getDb(registry);
1405
+ if (ctx) {
1406
+ try {
1407
+ ctx.db.prepare("\n INSERT OR REPLACE INTO memory_entries (id, key, namespace, content, type, created_at, updated_at, status)\n VALUES (?, ?, 'causal-edges', ?, 'procedural', ?, ?, 'active')\n ").run(generateId('edge'), options.sourceId + "\u2192" + options.targetId, JSON.stringify(options), Date.now(), Date.now());
1408
+ return [2 /*return*/, { success: true, controller: 'bridge-fallback' }];
1409
+ }
1410
+ catch ( /* skip */_c) { /* skip */ }
1411
+ }
1412
+ return [2 /*return*/, null];
1413
+ }
1414
+ catch (_d) {
1415
+ return [2 /*return*/, null];
1416
+ }
1417
+ return [2 /*return*/];
1418
+ }
1419
+ });
1420
+ });
1421
+ }
1422
+ // ===== Phase 5: ReflexionMemory session lifecycle =====
1423
+ /**
1424
+ * Start a session with ReflexionMemory episodic replay.
1425
+ * Loads relevant past session patterns for the new session.
1426
+ */
1427
+ export function bridgeSessionStart(options) {
1428
+ return __awaiter(this, void 0, Promise, function () {
1429
+ var registry, restoredPatterns, controller, reflexion, searchResult, _a;
1430
+ return __generator(this, function (_b) {
1431
+ switch (_b.label) {
1432
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1433
+ case 1:
1434
+ registry = _b.sent();
1435
+ if (!registry)
1436
+ return [2 /*return*/, null];
1437
+ _b.label = 2;
1438
+ case 2:
1439
+ _b.trys.push([2, 6, , 7]);
1440
+ restoredPatterns = 0;
1441
+ controller = 'none';
1442
+ reflexion = registry.get('reflexion');
1443
+ if (!(reflexion && typeof reflexion.startEpisode === 'function')) return [3 /*break*/, 4];
1444
+ return [4 /*yield*/, reflexion.startEpisode(options.sessionId, { context: options.context })];
1445
+ case 3:
1446
+ _b.sent();
1447
+ controller = 'reflexion';
1448
+ _b.label = 4;
1449
+ case 4: return [4 /*yield*/, bridgeSearchEntries({
1450
+ query: options.context || 'session patterns',
1451
+ namespace: 'session',
1452
+ limit: 10,
1453
+ threshold: 0.2,
1454
+ dbPath: options.dbPath
1455
+ })];
1456
+ case 5:
1457
+ searchResult = _b.sent();
1458
+ if (searchResult === null || searchResult === void 0 ? void 0 : searchResult.results) {
1459
+ restoredPatterns = searchResult.results.length;
1460
+ }
1461
+ return [2 /*return*/, {
1462
+ success: true,
1463
+ controller: controller === 'none' ? 'bridge-search' : controller,
1464
+ restoredPatterns: restoredPatterns,
1465
+ sessionId: options.sessionId
1466
+ }];
1467
+ case 6:
1468
+ _a = _b.sent();
1469
+ return [2 /*return*/, null];
1470
+ case 7: return [2 /*return*/];
1471
+ }
1472
+ });
1473
+ });
1474
+ }
1475
+ /**
1476
+ * End a session and persist episodic summary to ReflexionMemory.
1477
+ */
1478
+ export function bridgeSessionEnd(options) {
1479
+ var _a, _b;
1480
+ return __awaiter(this, void 0, Promise, function () {
1481
+ var registry, controller, persisted, reflexion, nightlyLearner, _c, _d;
1482
+ return __generator(this, function (_e) {
1483
+ switch (_e.label) {
1484
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1485
+ case 1:
1486
+ registry = _e.sent();
1487
+ if (!registry)
1488
+ return [2 /*return*/, null];
1489
+ _e.label = 2;
1490
+ case 2:
1491
+ _e.trys.push([2, 10, , 11]);
1492
+ controller = 'none';
1493
+ persisted = false;
1494
+ reflexion = registry.get('reflexion');
1495
+ if (!(reflexion && typeof reflexion.endEpisode === 'function')) return [3 /*break*/, 4];
1496
+ return [4 /*yield*/, reflexion.endEpisode(options.sessionId, {
1497
+ summary: options.summary,
1498
+ tasksCompleted: options.tasksCompleted,
1499
+ patternsLearned: options.patternsLearned
1500
+ })];
1501
+ case 3:
1502
+ _e.sent();
1503
+ controller = 'reflexion';
1504
+ persisted = true;
1505
+ _e.label = 4;
1506
+ case 4:
1507
+ // Persist session summary as memory entry
1508
+ return [4 /*yield*/, bridgeStoreEntry({
1509
+ key: "session-" + options.sessionId,
1510
+ value: JSON.stringify({
1511
+ sessionId: options.sessionId,
1512
+ summary: options.summary || 'Session ended',
1513
+ tasksCompleted: (_a = options.tasksCompleted) !== null && _a !== void 0 ? _a : 0,
1514
+ patternsLearned: (_b = options.patternsLearned) !== null && _b !== void 0 ? _b : 0,
1515
+ endedAt: new Date().toISOString()
1516
+ }),
1517
+ namespace: 'session',
1518
+ tags: ['session-end'],
1519
+ upsert: true,
1520
+ dbPath: options.dbPath
1521
+ })];
1522
+ case 5:
1523
+ // Persist session summary as memory entry
1524
+ _e.sent();
1525
+ if (controller === 'none')
1526
+ controller = 'bridge-store';
1527
+ persisted = true;
1528
+ nightlyLearner = registry.get('nightlyLearner');
1529
+ if (!(nightlyLearner && typeof nightlyLearner.consolidate === 'function')) return [3 /*break*/, 9];
1530
+ _e.label = 6;
1531
+ case 6:
1532
+ _e.trys.push([6, 8, , 9]);
1533
+ return [4 /*yield*/, nightlyLearner.consolidate({ sessionId: options.sessionId })];
1534
+ case 7:
1535
+ _e.sent();
1536
+ controller += '+nightlyLearner';
1537
+ return [3 /*break*/, 9];
1538
+ case 8:
1539
+ _c = _e.sent();
1540
+ return [3 /*break*/, 9];
1541
+ case 9: return [2 /*return*/, { success: true, controller: controller, persisted: persisted }];
1542
+ case 10:
1543
+ _d = _e.sent();
1544
+ return [2 /*return*/, null];
1545
+ case 11: return [2 /*return*/];
1546
+ }
1547
+ });
1548
+ });
1549
+ }
1550
+ // ===== Phase 5: SemanticRouter bridge =====
1551
+ /**
1552
+ * Route a task via AgentDB's SemanticRouter.
1553
+ * Returns null to fall back to local ruvector router.
1554
+ */
1555
+ export function bridgeRouteTask(options) {
1556
+ var _a, _b, _c;
1557
+ return __awaiter(this, void 0, Promise, function () {
1558
+ var registry, semanticRouter, result, learningSystem, rec, _d;
1559
+ return __generator(this, function (_e) {
1560
+ switch (_e.label) {
1561
+ case 0: return [4 /*yield*/, getRegistry(options.dbPath)];
1562
+ case 1:
1563
+ registry = _e.sent();
1564
+ if (!registry)
1565
+ return [2 /*return*/, null];
1566
+ _e.label = 2;
1567
+ case 2:
1568
+ _e.trys.push([2, 7, , 8]);
1569
+ semanticRouter = registry.get('semanticRouter');
1570
+ if (!(semanticRouter && typeof semanticRouter.route === 'function')) return [3 /*break*/, 4];
1571
+ return [4 /*yield*/, semanticRouter.route(options.task, { context: options.context })];
1572
+ case 3:
1573
+ result = _e.sent();
1574
+ if (result) {
1575
+ return [2 /*return*/, {
1576
+ route: result.route || result.category || 'general',
1577
+ confidence: (_b = (_a = result.confidence) !== null && _a !== void 0 ? _a : result.score) !== null && _b !== void 0 ? _b : 0.5,
1578
+ agents: result.agents || result.suggestedAgents || [],
1579
+ controller: 'semanticRouter'
1580
+ }];
1581
+ }
1582
+ _e.label = 4;
1583
+ case 4:
1584
+ learningSystem = registry.get('learningSystem');
1585
+ if (!(learningSystem && typeof learningSystem.recommendAlgorithm === 'function')) return [3 /*break*/, 6];
1586
+ return [4 /*yield*/, learningSystem.recommendAlgorithm(options.task)];
1587
+ case 5:
1588
+ rec = _e.sent();
1589
+ if (rec) {
1590
+ return [2 /*return*/, {
1591
+ route: rec.algorithm || rec.route || 'general',
1592
+ confidence: (_c = rec.confidence) !== null && _c !== void 0 ? _c : 0.5,
1593
+ agents: rec.agents || [],
1594
+ controller: 'learningSystem'
1595
+ }];
1596
+ }
1597
+ _e.label = 6;
1598
+ case 6: return [2 /*return*/, null]; // Fall back to local router
1599
+ case 7:
1600
+ _d = _e.sent();
1601
+ return [2 /*return*/, null];
1602
+ case 8: return [2 /*return*/];
1603
+ }
1604
+ });
1605
+ });
1606
+ }
1607
+ // ===== Phase 4: Health check with attestation =====
1608
+ /**
1609
+ * Get comprehensive bridge health including all controller statuses.
1610
+ */
1611
+ export function bridgeHealthCheck(dbPath) {
1612
+ var _a, _b, _c;
1613
+ return __awaiter(this, void 0, Promise, function () {
1614
+ var registry, controllers, attestationCount, attestation, cacheStats, cache, s;
1615
+ return __generator(this, function (_d) {
1616
+ switch (_d.label) {
1617
+ case 0: return [4 /*yield*/, getRegistry(dbPath)];
1618
+ case 1:
1619
+ registry = _d.sent();
1620
+ if (!registry)
1621
+ return [2 /*return*/, null];
1622
+ try {
1623
+ controllers = registry.listControllers();
1624
+ attestationCount = 0;
1625
+ attestation = registry.get('attestationLog');
1626
+ if (attestation && typeof attestation.count === 'function') {
1627
+ attestationCount = attestation.count();
1628
+ }
1629
+ cacheStats = { size: 0, hits: 0, misses: 0 };
1630
+ cache = registry.get('tieredCache');
1631
+ if (cache && typeof cache.stats === 'function') {
1632
+ s = cache.stats();
1633
+ cacheStats = { size: (_a = s.size) !== null && _a !== void 0 ? _a : 0, hits: (_b = s.hits) !== null && _b !== void 0 ? _b : 0, misses: (_c = s.misses) !== null && _c !== void 0 ? _c : 0 };
1634
+ }
1635
+ return [2 /*return*/, { available: true, controllers: controllers, attestationCount: attestationCount, cacheStats: cacheStats }];
1636
+ }
1637
+ catch (_e) {
1638
+ return [2 /*return*/, null];
1639
+ }
1640
+ return [2 /*return*/];
1641
+ }
1642
+ });
1643
+ });
1644
+ }
1645
+ // ===== Phase 7: Hierarchical memory, consolidation, batch, context, semantic route =====
1646
+ /**
1647
+ * Store to hierarchical memory with tier.
1648
+ * Valid tiers: working, episodic, semantic
1649
+ *
1650
+ * Real HierarchicalMemory API (agentdb alpha.10+):
1651
+ * store(content, importance?, tier?, options?) → Promise<string>
1652
+ * Stub API (fallback):
1653
+ * store(key, value, tier) — synchronous
1654
+ */
1655
+ export function bridgeHierarchicalStore(params) {
1656
+ return __awaiter(this, void 0, Promise, function () {
1657
+ var registry, hm, tier, id, e_1;
1658
+ return __generator(this, function (_a) {
1659
+ switch (_a.label) {
1660
+ case 0: return [4 /*yield*/, getRegistry()];
1661
+ case 1:
1662
+ registry = _a.sent();
1663
+ if (!registry)
1664
+ return [2 /*return*/, null];
1665
+ _a.label = 2;
1666
+ case 2:
1667
+ _a.trys.push([2, 5, , 6]);
1668
+ hm = registry.get('hierarchicalMemory');
1669
+ if (!hm)
1670
+ return [2 /*return*/, { success: false, error: 'HierarchicalMemory not available' }];
1671
+ tier = params.tier || 'working';
1672
+ if (!(typeof hm.getStats === 'function' && typeof hm.promote === 'function')) return [3 /*break*/, 4];
1673
+ return [4 /*yield*/, hm.store(params.value, params.importance || 0.5, tier, {
1674
+ metadata: { key: params.key },
1675
+ tags: [params.key]
1676
+ })];
1677
+ case 3:
1678
+ id = _a.sent();
1679
+ return [2 /*return*/, { success: true, id: id, key: params.key, tier: tier }];
1680
+ case 4:
1681
+ // Stub fallback
1682
+ hm.store(params.key, params.value, tier);
1683
+ return [2 /*return*/, { success: true, key: params.key, tier: tier }];
1684
+ case 5:
1685
+ e_1 = _a.sent();
1686
+ return [2 /*return*/, { success: false, error: e_1.message }];
1687
+ case 6: return [2 /*return*/];
1688
+ }
1689
+ });
1690
+ });
1691
+ }
1692
+ /**
1693
+ * Recall from hierarchical memory.
1694
+ *
1695
+ * Real HierarchicalMemory API (agentdb alpha.10+):
1696
+ * recall(query: MemoryQuery) → Promise<MemoryItem[]>
1697
+ * where MemoryQuery = { query, tier?, k?, threshold?, context?, includeDecayed? }
1698
+ * Stub API (fallback):
1699
+ * recall(query: string, topK: number) → synchronous array
1700
+ */
1701
+ export function bridgeHierarchicalRecall(params) {
1702
+ return __awaiter(this, void 0, Promise, function () {
1703
+ var registry, hm, memoryQuery, results_1, results, filtered, e_2;
1704
+ return __generator(this, function (_a) {
1705
+ switch (_a.label) {
1706
+ case 0: return [4 /*yield*/, getRegistry()];
1707
+ case 1:
1708
+ registry = _a.sent();
1709
+ if (!registry)
1710
+ return [2 /*return*/, null];
1711
+ _a.label = 2;
1712
+ case 2:
1713
+ _a.trys.push([2, 5, , 6]);
1714
+ hm = registry.get('hierarchicalMemory');
1715
+ if (!hm)
1716
+ return [2 /*return*/, { results: [], error: 'HierarchicalMemory not available' }];
1717
+ if (!(typeof hm.getStats === 'function' && typeof hm.promote === 'function')) return [3 /*break*/, 4];
1718
+ memoryQuery = {
1719
+ query: params.query,
1720
+ k: params.topK || 5
1721
+ };
1722
+ if (params.tier) {
1723
+ memoryQuery.tier = params.tier;
1724
+ }
1725
+ return [4 /*yield*/, hm.recall(memoryQuery)];
1726
+ case 3:
1727
+ results_1 = _a.sent();
1728
+ return [2 /*return*/, { results: results_1 || [], controller: 'hierarchicalMemory' }];
1729
+ case 4:
1730
+ results = hm.recall(params.query, params.topK || 5);
1731
+ filtered = params.tier
1732
+ ? results.filter(function (r) { return r.tier === params.tier; })
1733
+ : results;
1734
+ return [2 /*return*/, { results: filtered, controller: 'hierarchicalMemory' }];
1735
+ case 5:
1736
+ e_2 = _a.sent();
1737
+ return [2 /*return*/, { results: [], error: e_2.message }];
1738
+ case 6: return [2 /*return*/];
1739
+ }
1740
+ });
1741
+ });
1742
+ }
1743
+ /**
1744
+ * Run memory consolidation.
1745
+ *
1746
+ * Real MemoryConsolidation API (agentdb alpha.10+):
1747
+ * consolidate() → Promise<ConsolidationReport>
1748
+ * ConsolidationReport = { episodicProcessed, semanticCreated, memoriesForgotten, ... }
1749
+ * Stub API (fallback):
1750
+ * consolidate() → { promoted, pruned, timestamp }
1751
+ */
1752
+ export function bridgeConsolidate(params) {
1753
+ return __awaiter(this, void 0, Promise, function () {
1754
+ var registry, mc, result, e_3;
1755
+ return __generator(this, function (_a) {
1756
+ switch (_a.label) {
1757
+ case 0: return [4 /*yield*/, getRegistry()];
1758
+ case 1:
1759
+ registry = _a.sent();
1760
+ if (!registry)
1761
+ return [2 /*return*/, null];
1762
+ _a.label = 2;
1763
+ case 2:
1764
+ _a.trys.push([2, 4, , 5]);
1765
+ mc = registry.get('memoryConsolidation');
1766
+ if (!mc)
1767
+ return [2 /*return*/, { success: false, error: 'MemoryConsolidation not available' }];
1768
+ return [4 /*yield*/, mc.consolidate()];
1769
+ case 3:
1770
+ result = _a.sent();
1771
+ return [2 /*return*/, { success: true, consolidated: result }];
1772
+ case 4:
1773
+ e_3 = _a.sent();
1774
+ return [2 /*return*/, { success: false, error: e_3.message }];
1775
+ case 5: return [2 /*return*/];
1776
+ }
1777
+ });
1778
+ });
1779
+ }
1780
+ /**
1781
+ * Batch operations (insert, update, delete).
1782
+ * - insert: calls insertEpisodes(entries) where entries are {content, metadata?}
1783
+ * - delete: calls bulkDelete(table, conditions) on episodes table
1784
+ * - update: calls bulkUpdate(table, updates, conditions) on episodes table
1785
+ */
1786
+ export function bridgeBatchOperation(params) {
1787
+ return __awaiter(this, void 0, Promise, function () {
1788
+ var registry, batch, result, _a, episodes, keys, _i, keys_1, key, _b, _c, entry, e_4;
1789
+ return __generator(this, function (_d) {
1790
+ switch (_d.label) {
1791
+ case 0: return [4 /*yield*/, getRegistry()];
1792
+ case 1:
1793
+ registry = _d.sent();
1794
+ if (!registry)
1795
+ return [2 /*return*/, null];
1796
+ _d.label = 2;
1797
+ case 2:
1798
+ _d.trys.push([2, 17, , 18]);
1799
+ batch = registry.get('batchOperations');
1800
+ if (!batch)
1801
+ return [2 /*return*/, { success: false, error: 'BatchOperations not available' }];
1802
+ result = void 0;
1803
+ _a = params.operation;
1804
+ switch (_a) {
1805
+ case 'insert': return [3 /*break*/, 3];
1806
+ case 'delete': return [3 /*break*/, 5];
1807
+ case 'update': return [3 /*break*/, 10];
1808
+ }
1809
+ return [3 /*break*/, 15];
1810
+ case 3:
1811
+ episodes = params.entries.map(function (e) { return ({
1812
+ content: e.value || e.content || JSON.stringify(e),
1813
+ metadata: e.metadata || { key: e.key }
1814
+ }); });
1815
+ return [4 /*yield*/, batch.insertEpisodes(episodes)];
1816
+ case 4:
1817
+ result = _d.sent();
1818
+ return [3 /*break*/, 16];
1819
+ case 5:
1820
+ keys = params.entries.map(function (e) { return e.key; }).filter(Boolean);
1821
+ _i = 0, keys_1 = keys;
1822
+ _d.label = 6;
1823
+ case 6:
1824
+ if (!(_i < keys_1.length)) return [3 /*break*/, 9];
1825
+ key = keys_1[_i];
1826
+ return [4 /*yield*/, batch.bulkDelete('episodes', { key: key })];
1827
+ case 7:
1828
+ _d.sent();
1829
+ _d.label = 8;
1830
+ case 8:
1831
+ _i++;
1832
+ return [3 /*break*/, 6];
1833
+ case 9:
1834
+ result = { deleted: keys.length };
1835
+ return [3 /*break*/, 16];
1836
+ case 10:
1837
+ _b = 0, _c = params.entries;
1838
+ _d.label = 11;
1839
+ case 11:
1840
+ if (!(_b < _c.length)) return [3 /*break*/, 14];
1841
+ entry = _c[_b];
1842
+ return [4 /*yield*/, batch.bulkUpdate('episodes', { content: entry.value || entry.content }, { key: entry.key })];
1843
+ case 12:
1844
+ _d.sent();
1845
+ _d.label = 13;
1846
+ case 13:
1847
+ _b++;
1848
+ return [3 /*break*/, 11];
1849
+ case 14:
1850
+ result = { updated: params.entries.length };
1851
+ return [3 /*break*/, 16];
1852
+ case 15: return [2 /*return*/, { success: false, error: "Unknown operation: " + params.operation }];
1853
+ case 16: return [2 /*return*/, { success: true, operation: params.operation, count: params.entries.length, result: result }];
1854
+ case 17:
1855
+ e_4 = _d.sent();
1856
+ return [2 /*return*/, { success: false, error: e_4.message }];
1857
+ case 18: return [2 /*return*/];
1858
+ }
1859
+ });
1860
+ });
1861
+ }
1862
+ /**
1863
+ * Synthesize context from memories.
1864
+ * ContextSynthesizer.synthesize is a static method that takes MemoryPattern[] (not a string).
1865
+ */
1866
+ export function bridgeContextSynthesize(params) {
1867
+ return __awaiter(this, void 0, Promise, function () {
1868
+ var registry, CS, hm, memories, recalled, result, e_5;
1869
+ return __generator(this, function (_a) {
1870
+ switch (_a.label) {
1871
+ case 0: return [4 /*yield*/, getRegistry()];
1872
+ case 1:
1873
+ registry = _a.sent();
1874
+ if (!registry)
1875
+ return [2 /*return*/, null];
1876
+ _a.label = 2;
1877
+ case 2:
1878
+ _a.trys.push([2, 7, , 8]);
1879
+ CS = registry.get('contextSynthesizer');
1880
+ if (!CS || typeof CS.synthesize !== 'function') {
1881
+ return [2 /*return*/, { success: false, error: 'ContextSynthesizer not available' }];
1882
+ }
1883
+ hm = registry.get('hierarchicalMemory');
1884
+ memories = [];
1885
+ if (!(hm && typeof hm.recall === 'function')) return [3 /*break*/, 6];
1886
+ recalled = void 0;
1887
+ if (!(typeof hm.promote === 'function')) return [3 /*break*/, 4];
1888
+ return [4 /*yield*/, hm.recall({ query: params.query, k: params.maxEntries || 10 })];
1889
+ case 3:
1890
+ // Real agentdb HierarchicalMemory
1891
+ recalled = _a.sent();
1892
+ return [3 /*break*/, 5];
1893
+ case 4:
1894
+ // Stub
1895
+ recalled = hm.recall(params.query, params.maxEntries || 10);
1896
+ _a.label = 5;
1897
+ case 5:
1898
+ memories = (recalled || []).map(function (r) { return ({
1899
+ content: r.value || r.content || '',
1900
+ key: r.key || r.id || '',
1901
+ reward: 1,
1902
+ verdict: 'success'
1903
+ }); });
1904
+ _a.label = 6;
1905
+ case 6:
1906
+ result = CS.synthesize(memories, { includeRecommendations: true });
1907
+ return [2 /*return*/, { success: true, synthesis: result }];
1908
+ case 7:
1909
+ e_5 = _a.sent();
1910
+ return [2 /*return*/, { success: false, error: e_5.message }];
1911
+ case 8: return [2 /*return*/];
1912
+ }
1913
+ });
1914
+ });
1915
+ }
1916
+ /**
1917
+ * Route via SemanticRouter.
1918
+ * Available since agentdb 3.0.0-alpha.10 — uses @ruvector/router for
1919
+ * semantic matching with keyword fallback.
1920
+ */
1921
+ export function bridgeSemanticRoute(params) {
1922
+ return __awaiter(this, void 0, Promise, function () {
1923
+ var registry, router, result, e_6;
1924
+ return __generator(this, function (_a) {
1925
+ switch (_a.label) {
1926
+ case 0: return [4 /*yield*/, getRegistry()];
1927
+ case 1:
1928
+ registry = _a.sent();
1929
+ if (!registry)
1930
+ return [2 /*return*/, null];
1931
+ _a.label = 2;
1932
+ case 2:
1933
+ _a.trys.push([2, 4, , 5]);
1934
+ router = registry.get('semanticRouter');
1935
+ if (!router)
1936
+ return [2 /*return*/, { route: null, error: 'SemanticRouter not available' }];
1937
+ return [4 /*yield*/, router.route(params.input)];
1938
+ case 3:
1939
+ result = _a.sent();
1940
+ return [2 /*return*/, { route: result, controller: 'semanticRouter' }];
1941
+ case 4:
1942
+ e_6 = _a.sent();
1943
+ return [2 /*return*/, { route: null, error: e_6.message }];
1944
+ case 5: return [2 /*return*/];
1945
+ }
1946
+ });
1947
+ });
1948
+ }
1949
+ // ===== Utility =====
1950
+ function cosineSim(a, b) {
1951
+ if (!a || !b || a.length === 0 || b.length === 0)
1952
+ return 0;
1953
+ var len = Math.min(a.length, b.length);
1954
+ var dot = 0, normA = 0, normB = 0;
1955
+ for (var i = 0; i < len; i++) {
1956
+ var ai = a[i], bi = b[i];
1957
+ dot += ai * bi;
1958
+ normA += ai * ai;
1959
+ normB += bi * bi;
1960
+ }
1961
+ var mag = Math.sqrt(normA * normB);
1962
+ return mag === 0 ? 0 : dot / mag;
1963
+ }
1964
+ //# sourceMappingURL=memory-bridge.js.map