agentic-qe 3.6.19 → 3.7.1

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 (369) hide show
  1. package/.claude/skills/pr-review/SKILL.md +1 -1
  2. package/.claude/skills/skills-manifest.json +6 -6
  3. package/README.md +43 -7
  4. package/package.json +3 -2
  5. package/scripts/generate-opencode-agents.ts +523 -0
  6. package/scripts/generate-opencode-skills.ts +318 -0
  7. package/scripts/rvf-baseline-benchmark.ts +843 -0
  8. package/v3/CHANGELOG.md +56 -0
  9. package/v3/README.md +7 -7
  10. package/v3/assets/skills/pr-review/SKILL.md +1 -1
  11. package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts.map +1 -1
  12. package/v3/dist/adapters/a2a/notifications/retry-queue.js +2 -1
  13. package/v3/dist/adapters/a2a/notifications/retry-queue.js.map +1 -1
  14. package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts.map +1 -1
  15. package/v3/dist/adapters/a2a/notifications/subscription-store.js +2 -1
  16. package/v3/dist/adapters/a2a/notifications/subscription-store.js.map +1 -1
  17. package/v3/dist/adapters/a2a/tasks/task-manager.d.ts.map +1 -1
  18. package/v3/dist/adapters/a2a/tasks/task-manager.js +4 -3
  19. package/v3/dist/adapters/a2a/tasks/task-manager.js.map +1 -1
  20. package/v3/dist/agents/claim-verifier/index.d.ts.map +1 -1
  21. package/v3/dist/agents/claim-verifier/index.js +2 -1
  22. package/v3/dist/agents/claim-verifier/index.js.map +1 -1
  23. package/v3/dist/audit/witness-chain.d.ts +148 -0
  24. package/v3/dist/audit/witness-chain.d.ts.map +1 -0
  25. package/v3/dist/audit/witness-chain.js +269 -0
  26. package/v3/dist/audit/witness-chain.js.map +1 -0
  27. package/v3/dist/cli/brain-commands.d.ts +39 -0
  28. package/v3/dist/cli/brain-commands.d.ts.map +1 -0
  29. package/v3/dist/cli/brain-commands.js +60 -0
  30. package/v3/dist/cli/brain-commands.js.map +1 -0
  31. package/v3/dist/cli/bundle.js +6790 -3274
  32. package/v3/dist/cli/command-registry.d.ts.map +1 -1
  33. package/v3/dist/cli/command-registry.js +3 -1
  34. package/v3/dist/cli/command-registry.js.map +1 -1
  35. package/v3/dist/cli/commands/hooks.d.ts.map +1 -1
  36. package/v3/dist/cli/commands/hooks.js +17 -2
  37. package/v3/dist/cli/commands/hooks.js.map +1 -1
  38. package/v3/dist/cli/commands/init.d.ts.map +1 -1
  39. package/v3/dist/cli/commands/init.js +2 -0
  40. package/v3/dist/cli/commands/init.js.map +1 -1
  41. package/v3/dist/cli/commands/learning-helpers.d.ts.map +1 -1
  42. package/v3/dist/cli/commands/learning-helpers.js +11 -0
  43. package/v3/dist/cli/commands/learning-helpers.js.map +1 -1
  44. package/v3/dist/cli/handlers/brain-handler.d.ts +22 -0
  45. package/v3/dist/cli/handlers/brain-handler.d.ts.map +1 -0
  46. package/v3/dist/cli/handlers/brain-handler.js +148 -0
  47. package/v3/dist/cli/handlers/brain-handler.js.map +1 -0
  48. package/v3/dist/cli/handlers/index.d.ts +1 -0
  49. package/v3/dist/cli/handlers/index.d.ts.map +1 -1
  50. package/v3/dist/cli/handlers/index.js +1 -0
  51. package/v3/dist/cli/handlers/index.js.map +1 -1
  52. package/v3/dist/cli/handlers/init-handler.d.ts +1 -0
  53. package/v3/dist/cli/handlers/init-handler.d.ts.map +1 -1
  54. package/v3/dist/cli/handlers/init-handler.js +3 -0
  55. package/v3/dist/cli/handlers/init-handler.js.map +1 -1
  56. package/v3/dist/cli/scheduler/persistent-scheduler.d.ts.map +1 -1
  57. package/v3/dist/cli/scheduler/persistent-scheduler.js +2 -1
  58. package/v3/dist/cli/scheduler/persistent-scheduler.js.map +1 -1
  59. package/v3/dist/coordination/consensus/consensus-engine.d.ts.map +1 -1
  60. package/v3/dist/coordination/consensus/consensus-engine.js +2 -1
  61. package/v3/dist/coordination/consensus/consensus-engine.js.map +1 -1
  62. package/v3/dist/coordination/cross-domain-router.d.ts.map +1 -1
  63. package/v3/dist/coordination/cross-domain-router.js +7 -8
  64. package/v3/dist/coordination/cross-domain-router.js.map +1 -1
  65. package/v3/dist/coordination/handlers/code-intelligence-handlers.d.ts +9 -0
  66. package/v3/dist/coordination/handlers/code-intelligence-handlers.d.ts.map +1 -0
  67. package/v3/dist/coordination/handlers/code-intelligence-handlers.js +203 -0
  68. package/v3/dist/coordination/handlers/code-intelligence-handlers.js.map +1 -0
  69. package/v3/dist/coordination/handlers/coverage-handlers.d.ts +9 -0
  70. package/v3/dist/coordination/handlers/coverage-handlers.d.ts.map +1 -0
  71. package/v3/dist/coordination/handlers/coverage-handlers.js +120 -0
  72. package/v3/dist/coordination/handlers/coverage-handlers.js.map +1 -0
  73. package/v3/dist/coordination/handlers/handler-types.d.ts +35 -0
  74. package/v3/dist/coordination/handlers/handler-types.d.ts.map +1 -0
  75. package/v3/dist/coordination/handlers/handler-types.js +8 -0
  76. package/v3/dist/coordination/handlers/handler-types.js.map +1 -0
  77. package/v3/dist/coordination/handlers/handler-utils.d.ts +106 -0
  78. package/v3/dist/coordination/handlers/handler-utils.d.ts.map +1 -0
  79. package/v3/dist/coordination/handlers/handler-utils.js +480 -0
  80. package/v3/dist/coordination/handlers/handler-utils.js.map +1 -0
  81. package/v3/dist/coordination/handlers/index.d.ts +15 -0
  82. package/v3/dist/coordination/handlers/index.d.ts.map +1 -0
  83. package/v3/dist/coordination/handlers/index.js +14 -0
  84. package/v3/dist/coordination/handlers/index.js.map +1 -0
  85. package/v3/dist/coordination/handlers/misc-handlers.d.ts +9 -0
  86. package/v3/dist/coordination/handlers/misc-handlers.d.ts.map +1 -0
  87. package/v3/dist/coordination/handlers/misc-handlers.js +64 -0
  88. package/v3/dist/coordination/handlers/misc-handlers.js.map +1 -0
  89. package/v3/dist/coordination/handlers/quality-handlers.d.ts +9 -0
  90. package/v3/dist/coordination/handlers/quality-handlers.d.ts.map +1 -0
  91. package/v3/dist/coordination/handlers/quality-handlers.js +83 -0
  92. package/v3/dist/coordination/handlers/quality-handlers.js.map +1 -0
  93. package/v3/dist/coordination/handlers/requirements-handlers.d.ts +9 -0
  94. package/v3/dist/coordination/handlers/requirements-handlers.d.ts.map +1 -0
  95. package/v3/dist/coordination/handlers/requirements-handlers.js +95 -0
  96. package/v3/dist/coordination/handlers/requirements-handlers.js.map +1 -0
  97. package/v3/dist/coordination/handlers/security-handlers.d.ts +9 -0
  98. package/v3/dist/coordination/handlers/security-handlers.d.ts.map +1 -0
  99. package/v3/dist/coordination/handlers/security-handlers.js +255 -0
  100. package/v3/dist/coordination/handlers/security-handlers.js.map +1 -0
  101. package/v3/dist/coordination/handlers/test-execution-handlers.d.ts +9 -0
  102. package/v3/dist/coordination/handlers/test-execution-handlers.d.ts.map +1 -0
  103. package/v3/dist/coordination/handlers/test-execution-handlers.js +153 -0
  104. package/v3/dist/coordination/handlers/test-execution-handlers.js.map +1 -0
  105. package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
  106. package/v3/dist/coordination/queen-coordinator.js +28 -25
  107. package/v3/dist/coordination/queen-coordinator.js.map +1 -1
  108. package/v3/dist/coordination/task-executor.d.ts +25 -9
  109. package/v3/dist/coordination/task-executor.d.ts.map +1 -1
  110. package/v3/dist/coordination/task-executor.js +38 -1352
  111. package/v3/dist/coordination/task-executor.js.map +1 -1
  112. package/v3/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +15 -9
  113. package/v3/dist/domains/code-intelligence/services/metric-collector/loc-counter.js.map +1 -1
  114. package/v3/dist/domains/coverage-analysis/services/hnsw-index.d.ts +31 -44
  115. package/v3/dist/domains/coverage-analysis/services/hnsw-index.d.ts.map +1 -1
  116. package/v3/dist/domains/coverage-analysis/services/hnsw-index.js +73 -178
  117. package/v3/dist/domains/coverage-analysis/services/hnsw-index.js.map +1 -1
  118. package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.d.ts.map +1 -1
  119. package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js +2 -1
  120. package/v3/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js.map +1 -1
  121. package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
  122. package/v3/dist/domains/quality-assessment/coordinator.js +8 -0
  123. package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
  124. package/v3/dist/domains/requirements-validation/services/product-factors-assessment/types/index.d.ts.map +1 -1
  125. package/v3/dist/domains/requirements-validation/services/product-factors-assessment/types/index.js +2 -1
  126. package/v3/dist/domains/requirements-validation/services/product-factors-assessment/types/index.js.map +1 -1
  127. package/v3/dist/domains/test-execution/coordinator.d.ts +14 -0
  128. package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
  129. package/v3/dist/domains/test-execution/coordinator.js +18 -0
  130. package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
  131. package/v3/dist/domains/test-execution/services/index.d.ts +1 -0
  132. package/v3/dist/domains/test-execution/services/index.d.ts.map +1 -1
  133. package/v3/dist/domains/test-execution/services/index.js +1 -0
  134. package/v3/dist/domains/test-execution/services/index.js.map +1 -1
  135. package/v3/dist/domains/test-execution/services/mincut-test-optimizer.d.ts +118 -0
  136. package/v3/dist/domains/test-execution/services/mincut-test-optimizer.d.ts.map +1 -0
  137. package/v3/dist/domains/test-execution/services/mincut-test-optimizer.js +358 -0
  138. package/v3/dist/domains/test-execution/services/mincut-test-optimizer.js.map +1 -0
  139. package/v3/dist/domains/test-execution/types/e2e-step.types.d.ts.map +1 -1
  140. package/v3/dist/domains/test-execution/types/e2e-step.types.js +2 -1
  141. package/v3/dist/domains/test-execution/types/e2e-step.types.js.map +1 -1
  142. package/v3/dist/feedback/coverage-learner.d.ts.map +1 -1
  143. package/v3/dist/feedback/coverage-learner.js +2 -1
  144. package/v3/dist/feedback/coverage-learner.js.map +1 -1
  145. package/v3/dist/init/opencode-installer.d.ts +67 -0
  146. package/v3/dist/init/opencode-installer.d.ts.map +1 -0
  147. package/v3/dist/init/opencode-installer.js +267 -0
  148. package/v3/dist/init/opencode-installer.js.map +1 -0
  149. package/v3/dist/init/orchestrator.d.ts.map +1 -1
  150. package/v3/dist/init/orchestrator.js +1 -0
  151. package/v3/dist/init/orchestrator.js.map +1 -1
  152. package/v3/dist/init/phases/09-assets.d.ts +2 -0
  153. package/v3/dist/init/phases/09-assets.d.ts.map +1 -1
  154. package/v3/dist/init/phases/09-assets.js +26 -0
  155. package/v3/dist/init/phases/09-assets.js.map +1 -1
  156. package/v3/dist/init/phases/phase-interface.d.ts +2 -0
  157. package/v3/dist/init/phases/phase-interface.d.ts.map +1 -1
  158. package/v3/dist/init/phases/phase-interface.js.map +1 -1
  159. package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.d.ts.map +1 -1
  160. package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.js +2 -1
  161. package/v3/dist/integrations/agentic-flow/onnx-embeddings/adapter.js.map +1 -1
  162. package/v3/dist/integrations/n8n/agent-factory.d.ts.map +1 -1
  163. package/v3/dist/integrations/n8n/agent-factory.js +2 -1
  164. package/v3/dist/integrations/n8n/agent-factory.js.map +1 -1
  165. package/v3/dist/integrations/rl-suite/sona.d.ts.map +1 -1
  166. package/v3/dist/integrations/rl-suite/sona.js +2 -1
  167. package/v3/dist/integrations/rl-suite/sona.js.map +1 -1
  168. package/v3/dist/integrations/ruvector/brain-exporter.d.ts +66 -0
  169. package/v3/dist/integrations/ruvector/brain-exporter.d.ts.map +1 -0
  170. package/v3/dist/integrations/ruvector/brain-exporter.js +538 -0
  171. package/v3/dist/integrations/ruvector/brain-exporter.js.map +1 -0
  172. package/v3/dist/integrations/ruvector/hypergraph-schema.d.ts.map +1 -1
  173. package/v3/dist/integrations/ruvector/hypergraph-schema.js +7 -0
  174. package/v3/dist/integrations/ruvector/hypergraph-schema.js.map +1 -1
  175. package/v3/dist/integrations/ruvector/index.d.ts +5 -0
  176. package/v3/dist/integrations/ruvector/index.d.ts.map +1 -1
  177. package/v3/dist/integrations/ruvector/index.js +6 -0
  178. package/v3/dist/integrations/ruvector/index.js.map +1 -1
  179. package/v3/dist/integrations/ruvector/mincut-wrapper.d.ts +204 -0
  180. package/v3/dist/integrations/ruvector/mincut-wrapper.d.ts.map +1 -0
  181. package/v3/dist/integrations/ruvector/mincut-wrapper.js +310 -0
  182. package/v3/dist/integrations/ruvector/mincut-wrapper.js.map +1 -0
  183. package/v3/dist/integrations/ruvector/rvf-dual-writer.d.ts +141 -0
  184. package/v3/dist/integrations/ruvector/rvf-dual-writer.d.ts.map +1 -0
  185. package/v3/dist/integrations/ruvector/rvf-dual-writer.js +367 -0
  186. package/v3/dist/integrations/ruvector/rvf-dual-writer.js.map +1 -0
  187. package/v3/dist/integrations/ruvector/rvf-native-adapter.d.ts +60 -0
  188. package/v3/dist/integrations/ruvector/rvf-native-adapter.d.ts.map +1 -0
  189. package/v3/dist/integrations/ruvector/rvf-native-adapter.js +240 -0
  190. package/v3/dist/integrations/ruvector/rvf-native-adapter.js.map +1 -0
  191. package/v3/dist/integrations/ruvector/shared-rvf-dual-writer.d.ts +41 -0
  192. package/v3/dist/integrations/ruvector/shared-rvf-dual-writer.d.ts.map +1 -0
  193. package/v3/dist/integrations/ruvector/shared-rvf-dual-writer.js +122 -0
  194. package/v3/dist/integrations/ruvector/shared-rvf-dual-writer.js.map +1 -0
  195. package/v3/dist/integrations/ruvector/sona-wrapper.d.ts.map +1 -1
  196. package/v3/dist/integrations/ruvector/sona-wrapper.js +2 -1
  197. package/v3/dist/integrations/ruvector/sona-wrapper.js.map +1 -1
  198. package/v3/dist/integrations/vibium/client.d.ts.map +1 -1
  199. package/v3/dist/integrations/vibium/client.js +2 -1
  200. package/v3/dist/integrations/vibium/client.js.map +1 -1
  201. package/v3/dist/integrations/vibium/fallback.d.ts.map +1 -1
  202. package/v3/dist/integrations/vibium/fallback.js +2 -1
  203. package/v3/dist/integrations/vibium/fallback.js.map +1 -1
  204. package/v3/dist/kernel/hnsw-adapter.d.ts +99 -0
  205. package/v3/dist/kernel/hnsw-adapter.d.ts.map +1 -0
  206. package/v3/dist/kernel/hnsw-adapter.js +218 -0
  207. package/v3/dist/kernel/hnsw-adapter.js.map +1 -0
  208. package/v3/dist/kernel/hnsw-index-provider.d.ts +90 -0
  209. package/v3/dist/kernel/hnsw-index-provider.d.ts.map +1 -0
  210. package/v3/dist/kernel/hnsw-index-provider.js +23 -0
  211. package/v3/dist/kernel/hnsw-index-provider.js.map +1 -0
  212. package/v3/dist/kernel/kernel.d.ts.map +1 -1
  213. package/v3/dist/kernel/kernel.js +2 -1
  214. package/v3/dist/kernel/kernel.js.map +1 -1
  215. package/v3/dist/kernel/progressive-hnsw-backend.d.ts +67 -0
  216. package/v3/dist/kernel/progressive-hnsw-backend.d.ts.map +1 -0
  217. package/v3/dist/kernel/progressive-hnsw-backend.js +266 -0
  218. package/v3/dist/kernel/progressive-hnsw-backend.js.map +1 -0
  219. package/v3/dist/kernel/unified-memory-hnsw.d.ts +71 -0
  220. package/v3/dist/kernel/unified-memory-hnsw.d.ts.map +1 -1
  221. package/v3/dist/kernel/unified-memory-hnsw.js +87 -0
  222. package/v3/dist/kernel/unified-memory-hnsw.js.map +1 -1
  223. package/v3/dist/kernel/unified-memory-schemas.d.ts +1 -0
  224. package/v3/dist/kernel/unified-memory-schemas.d.ts.map +1 -1
  225. package/v3/dist/kernel/unified-memory-schemas.js +16 -0
  226. package/v3/dist/kernel/unified-memory-schemas.js.map +1 -1
  227. package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
  228. package/v3/dist/kernel/unified-memory.js +19 -9
  229. package/v3/dist/kernel/unified-memory.js.map +1 -1
  230. package/v3/dist/learning/aqe-learning-engine.d.ts.map +1 -1
  231. package/v3/dist/learning/aqe-learning-engine.js +14 -2
  232. package/v3/dist/learning/aqe-learning-engine.js.map +1 -1
  233. package/v3/dist/learning/dream/concept-graph.d.ts +10 -5
  234. package/v3/dist/learning/dream/concept-graph.d.ts.map +1 -1
  235. package/v3/dist/learning/dream/concept-graph.js +77 -25
  236. package/v3/dist/learning/dream/concept-graph.js.map +1 -1
  237. package/v3/dist/learning/dream/dream-engine.d.ts +16 -0
  238. package/v3/dist/learning/dream/dream-engine.d.ts.map +1 -1
  239. package/v3/dist/learning/dream/dream-engine.js +107 -29
  240. package/v3/dist/learning/dream/dream-engine.js.map +1 -1
  241. package/v3/dist/learning/dream/index.d.ts +2 -0
  242. package/v3/dist/learning/dream/index.d.ts.map +1 -1
  243. package/v3/dist/learning/dream/index.js +8 -0
  244. package/v3/dist/learning/dream/index.js.map +1 -1
  245. package/v3/dist/learning/dream/insight-generator.d.ts.map +1 -1
  246. package/v3/dist/learning/dream/insight-generator.js +2 -1
  247. package/v3/dist/learning/dream/insight-generator.js.map +1 -1
  248. package/v3/dist/learning/dream/rvcow-branch-manager.d.ts +170 -0
  249. package/v3/dist/learning/dream/rvcow-branch-manager.d.ts.map +1 -0
  250. package/v3/dist/learning/dream/rvcow-branch-manager.js +263 -0
  251. package/v3/dist/learning/dream/rvcow-branch-manager.js.map +1 -0
  252. package/v3/dist/learning/dream/speculative-dreamer.d.ts +129 -0
  253. package/v3/dist/learning/dream/speculative-dreamer.d.ts.map +1 -0
  254. package/v3/dist/learning/dream/speculative-dreamer.js +214 -0
  255. package/v3/dist/learning/dream/speculative-dreamer.js.map +1 -0
  256. package/v3/dist/learning/dream/spreading-activation.d.ts +1 -1
  257. package/v3/dist/learning/dream/spreading-activation.d.ts.map +1 -1
  258. package/v3/dist/learning/dream/spreading-activation.js +13 -5
  259. package/v3/dist/learning/dream/spreading-activation.js.map +1 -1
  260. package/v3/dist/learning/memory-auditor.d.ts.map +1 -1
  261. package/v3/dist/learning/memory-auditor.js +7 -4
  262. package/v3/dist/learning/memory-auditor.js.map +1 -1
  263. package/v3/dist/learning/qe-reasoning-bank.d.ts +9 -0
  264. package/v3/dist/learning/qe-reasoning-bank.d.ts.map +1 -1
  265. package/v3/dist/learning/qe-reasoning-bank.js +50 -1
  266. package/v3/dist/learning/qe-reasoning-bank.js.map +1 -1
  267. package/v3/dist/learning/real-embeddings.d.ts.map +1 -1
  268. package/v3/dist/learning/real-embeddings.js +26 -1
  269. package/v3/dist/learning/real-embeddings.js.map +1 -1
  270. package/v3/dist/learning/real-qe-reasoning-bank.d.ts.map +1 -1
  271. package/v3/dist/learning/real-qe-reasoning-bank.js +13 -2
  272. package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
  273. package/v3/dist/learning/sqlite-persistence.d.ts +5 -0
  274. package/v3/dist/learning/sqlite-persistence.d.ts.map +1 -1
  275. package/v3/dist/learning/sqlite-persistence.js +47 -7
  276. package/v3/dist/learning/sqlite-persistence.js.map +1 -1
  277. package/v3/dist/mcp/bundle.js +5837 -2932
  278. package/v3/dist/mcp/connection-pool.d.ts.map +1 -1
  279. package/v3/dist/mcp/connection-pool.js +3 -2
  280. package/v3/dist/mcp/connection-pool.js.map +1 -1
  281. package/v3/dist/mcp/entry.js +12 -0
  282. package/v3/dist/mcp/entry.js.map +1 -1
  283. package/v3/dist/mcp/handlers/core-handlers.d.ts +28 -0
  284. package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
  285. package/v3/dist/mcp/handlers/core-handlers.js +117 -0
  286. package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
  287. package/v3/dist/mcp/handlers/index.d.ts +1 -1
  288. package/v3/dist/mcp/handlers/index.d.ts.map +1 -1
  289. package/v3/dist/mcp/handlers/index.js +1 -1
  290. package/v3/dist/mcp/handlers/index.js.map +1 -1
  291. package/v3/dist/mcp/http-server.d.ts.map +1 -1
  292. package/v3/dist/mcp/http-server.js +12 -9
  293. package/v3/dist/mcp/http-server.js.map +1 -1
  294. package/v3/dist/mcp/middleware/output-compaction.d.ts +45 -0
  295. package/v3/dist/mcp/middleware/output-compaction.d.ts.map +1 -0
  296. package/v3/dist/mcp/middleware/output-compaction.js +279 -0
  297. package/v3/dist/mcp/middleware/output-compaction.js.map +1 -0
  298. package/v3/dist/mcp/protocol-server.d.ts.map +1 -1
  299. package/v3/dist/mcp/protocol-server.js +53 -41
  300. package/v3/dist/mcp/protocol-server.js.map +1 -1
  301. package/v3/dist/mcp/security/sampling-server.js +2 -2
  302. package/v3/dist/mcp/security/sampling-server.js.map +1 -1
  303. package/v3/dist/mcp/services/mincut-routing-service.d.ts +148 -0
  304. package/v3/dist/mcp/services/mincut-routing-service.d.ts.map +1 -0
  305. package/v3/dist/mcp/services/mincut-routing-service.js +198 -0
  306. package/v3/dist/mcp/services/mincut-routing-service.js.map +1 -0
  307. package/v3/dist/mcp/services/reasoning-bank-service.d.ts.map +1 -1
  308. package/v3/dist/mcp/services/reasoning-bank-service.js +4 -5
  309. package/v3/dist/mcp/services/reasoning-bank-service.js.map +1 -1
  310. package/v3/dist/mcp/services/task-router.d.ts +4 -0
  311. package/v3/dist/mcp/services/task-router.d.ts.map +1 -1
  312. package/v3/dist/mcp/services/task-router.js +57 -15
  313. package/v3/dist/mcp/services/task-router.js.map +1 -1
  314. package/v3/dist/mcp/tools/base.d.ts +5 -0
  315. package/v3/dist/mcp/tools/base.d.ts.map +1 -1
  316. package/v3/dist/mcp/tools/base.js +25 -1
  317. package/v3/dist/mcp/tools/base.js.map +1 -1
  318. package/v3/dist/mcp/tools/learning-optimization/dream.d.ts.map +1 -1
  319. package/v3/dist/mcp/tools/learning-optimization/dream.js +22 -0
  320. package/v3/dist/mcp/tools/learning-optimization/dream.js.map +1 -1
  321. package/v3/dist/mcp/tools/security-compliance/scan.d.ts.map +1 -1
  322. package/v3/dist/mcp/tools/security-compliance/scan.js +2 -1
  323. package/v3/dist/mcp/tools/security-compliance/scan.js.map +1 -1
  324. package/v3/dist/mcp/transport/index.d.ts +8 -6
  325. package/v3/dist/mcp/transport/index.d.ts.map +1 -1
  326. package/v3/dist/mcp/transport/index.js +10 -9
  327. package/v3/dist/mcp/transport/index.js.map +1 -1
  328. package/v3/dist/migrations/20260120_add_hypergraph_tables.d.ts.map +1 -1
  329. package/v3/dist/migrations/20260120_add_hypergraph_tables.js +7 -0
  330. package/v3/dist/migrations/20260120_add_hypergraph_tables.js.map +1 -1
  331. package/v3/dist/monitoring/structural-health.d.ts +142 -0
  332. package/v3/dist/monitoring/structural-health.d.ts.map +1 -0
  333. package/v3/dist/monitoring/structural-health.js +201 -0
  334. package/v3/dist/monitoring/structural-health.js.map +1 -0
  335. package/v3/dist/optimization/token-optimizer-service.d.ts.map +1 -1
  336. package/v3/dist/optimization/token-optimizer-service.js +2 -1
  337. package/v3/dist/optimization/token-optimizer-service.js.map +1 -1
  338. package/v3/dist/planning/goap-planner.d.ts.map +1 -1
  339. package/v3/dist/planning/goap-planner.js +2 -1
  340. package/v3/dist/planning/goap-planner.js.map +1 -1
  341. package/v3/dist/planning/plan-executor.d.ts +5 -1
  342. package/v3/dist/planning/plan-executor.d.ts.map +1 -1
  343. package/v3/dist/planning/plan-executor.js +16 -2
  344. package/v3/dist/planning/plan-executor.js.map +1 -1
  345. package/v3/dist/routing/routing-feedback.d.ts.map +1 -1
  346. package/v3/dist/routing/routing-feedback.js +2 -1
  347. package/v3/dist/routing/routing-feedback.js.map +1 -1
  348. package/v3/dist/shared/llm/cost-tracker.d.ts.map +1 -1
  349. package/v3/dist/shared/llm/cost-tracker.js +2 -1
  350. package/v3/dist/shared/llm/cost-tracker.js.map +1 -1
  351. package/v3/dist/shared/llm/metrics/router-metrics.d.ts.map +1 -1
  352. package/v3/dist/shared/llm/metrics/router-metrics.js +2 -1
  353. package/v3/dist/shared/llm/metrics/router-metrics.js.map +1 -1
  354. package/v3/dist/strange-loop/belief-reconciler.d.ts.map +1 -1
  355. package/v3/dist/strange-loop/belief-reconciler.js +2 -1
  356. package/v3/dist/strange-loop/belief-reconciler.js.map +1 -1
  357. package/v3/dist/sync/readers/json-reader.d.ts.map +1 -1
  358. package/v3/dist/sync/readers/json-reader.js +2 -1
  359. package/v3/dist/sync/readers/json-reader.js.map +1 -1
  360. package/v3/dist/types/cross-phase-signals.d.ts.map +1 -1
  361. package/v3/dist/types/cross-phase-signals.js +2 -1
  362. package/v3/dist/types/cross-phase-signals.js.map +1 -1
  363. package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -1
  364. package/v3/dist/validation/swarm-skill-validator.js +2 -1
  365. package/v3/dist/validation/swarm-skill-validator.js.map +1 -1
  366. package/v3/dist/workers/base-worker.d.ts.map +1 -1
  367. package/v3/dist/workers/base-worker.js +2 -1
  368. package/v3/dist/workers/base-worker.js.map +1 -1
  369. package/v3/package.json +5 -2
@@ -0,0 +1,141 @@
1
+ /**
2
+ * RVF Dual-Writer Service
3
+ *
4
+ * Phase 3 Task 3.1: Writes learning data to both SQLite (existing) and
5
+ * an RVF container (new native backend). Ensures SQLite writes are never
6
+ * broken by RVF failures, and supports gradual promotion from SQLite-only
7
+ * to dual-write to RVF-primary mode.
8
+ *
9
+ * The dual-writer sits between the QEReasoningBank and the storage layer,
10
+ * intercepting pattern embedding writes/deletes/searches and routing them
11
+ * to one or both backends depending on the configured mode.
12
+ */
13
+ /**
14
+ * Simplified RVF store interface used internally by the dual-writer.
15
+ * Abstracts over the native adapter so tests can provide mocks
16
+ * without depending on the @ruvector/rvf-node native binding.
17
+ */
18
+ export interface RvfStore {
19
+ ingest(entries: Array<{
20
+ id: string;
21
+ vector: number[] | Float32Array;
22
+ }>): void;
23
+ search(query: number[] | Float32Array, k: number): Array<{
24
+ id: string;
25
+ score: number;
26
+ }>;
27
+ delete(ids: string[]): void;
28
+ status(): RvfStatus;
29
+ close(): void;
30
+ }
31
+ export interface RvfStatus {
32
+ totalVectors: number;
33
+ dimensions?: number;
34
+ /** Fields from the native adapter, forwarded when available */
35
+ totalSegments?: number;
36
+ fileSizeBytes?: number;
37
+ epoch?: number;
38
+ witnessValid?: boolean;
39
+ witnessEntries?: number;
40
+ }
41
+ export interface DualWriteConfig {
42
+ /** Path to the RVF container file */
43
+ rvfPath: string;
44
+ /** Vector dimensions (default 384) */
45
+ dimensions?: number;
46
+ /** Write mode */
47
+ mode: 'dual-write' | 'rvf-primary' | 'sqlite-only';
48
+ /** Whether to verify witness chain on startup */
49
+ verifyOnStartup?: boolean;
50
+ }
51
+ export interface DualWriteResult {
52
+ sqliteSuccess: boolean;
53
+ rvfSuccess: boolean;
54
+ divergence?: string;
55
+ }
56
+ export interface DivergenceReport {
57
+ totalChecked: number;
58
+ divergences: number;
59
+ details: Array<{
60
+ patternId: string;
61
+ issue: 'missing-in-rvf' | 'missing-in-sqlite' | 'count-mismatch';
62
+ }>;
63
+ }
64
+ export declare class RvfDualWriter {
65
+ private readonly db;
66
+ private readonly config;
67
+ private rvfStore;
68
+ private rvfAvailable;
69
+ constructor(db: unknown, config: DualWriteConfig);
70
+ /**
71
+ * Initialize the RVF store (create or open).
72
+ *
73
+ * If the native adapter is not available, the writer degrades gracefully
74
+ * to sqlite-only regardless of the configured mode.
75
+ */
76
+ initialize(): Promise<void>;
77
+ /**
78
+ * Allow injecting an RVF store directly (useful for testing).
79
+ */
80
+ setRvfStore(store: RvfStore): void;
81
+ /**
82
+ * Write a pattern embedding to both stores.
83
+ *
84
+ * SQLite is always written first. RVF failures never propagate to SQLite.
85
+ */
86
+ writePattern(patternId: string, embedding: number[] | Float32Array): DualWriteResult;
87
+ /**
88
+ * Delete a pattern embedding from both stores.
89
+ */
90
+ deletePattern(patternId: string): DualWriteResult;
91
+ /**
92
+ * Search for similar vectors. In rvf-primary mode, tries RVF first and
93
+ * falls back to SQLite on error. Otherwise uses SQLite.
94
+ */
95
+ search(query: number[] | Float32Array, k: number): Array<{
96
+ id: string;
97
+ score: number;
98
+ }>;
99
+ /**
100
+ * Generate a divergence report between SQLite embeddings and RVF vectors.
101
+ */
102
+ getDivergenceReport(): DivergenceReport;
103
+ /**
104
+ * Returns true when promotion from dual-write to rvf-primary is safe
105
+ * (zero divergences between the two stores).
106
+ */
107
+ isPromotionSafe(): boolean;
108
+ /**
109
+ * Combined status from both backends.
110
+ */
111
+ status(): {
112
+ sqlite: {
113
+ patternCount: number;
114
+ vectorCount: number;
115
+ };
116
+ rvf: RvfStatus | null;
117
+ mode: string;
118
+ };
119
+ /**
120
+ * Close the RVF store. SQLite is managed externally.
121
+ */
122
+ close(): void;
123
+ private shouldWriteRvf;
124
+ private writeSqliteEmbedding;
125
+ private deleteSqliteEmbedding;
126
+ private getSqliteEmbeddingCount;
127
+ private getSqlitePatternCount;
128
+ /**
129
+ * Brute-force cosine similarity search over SQLite embeddings.
130
+ * This is the fallback when RVF is unavailable.
131
+ */
132
+ private searchSqlite;
133
+ }
134
+ /**
135
+ * Create a new RvfDualWriter instance.
136
+ *
137
+ * @param db - better-sqlite3 Database instance
138
+ * @param config - Dual-write configuration
139
+ */
140
+ export declare function createDualWriter(db: unknown, config: DualWriteConfig): RvfDualWriter;
141
+ //# sourceMappingURL=rvf-dual-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvf-dual-writer.d.ts","sourceRoot":"","sources":["../../../src/integrations/ruvector/rvf-dual-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,367 @@
1
+ /**
2
+ * RVF Dual-Writer Service
3
+ *
4
+ * Phase 3 Task 3.1: Writes learning data to both SQLite (existing) and
5
+ * an RVF container (new native backend). Ensures SQLite writes are never
6
+ * broken by RVF failures, and supports gradual promotion from SQLite-only
7
+ * to dual-write to RVF-primary mode.
8
+ *
9
+ * The dual-writer sits between the QEReasoningBank and the storage layer,
10
+ * intercepting pattern embedding writes/deletes/searches and routing them
11
+ * to one or both backends depending on the configured mode.
12
+ */
13
+ /**
14
+ * Wraps the real RvfNativeAdapter to conform to the simpler RvfStore interface.
15
+ */
16
+ function wrapNativeAdapter(adapter, dim) {
17
+ return {
18
+ ingest(entries) {
19
+ adapter.ingest(entries);
20
+ },
21
+ search(query, k) {
22
+ return adapter.search(query, k).map((r) => ({ id: r.id, score: r.score }));
23
+ },
24
+ delete(ids) {
25
+ adapter.delete(ids);
26
+ },
27
+ status() {
28
+ const s = adapter.status();
29
+ return {
30
+ totalVectors: s.totalVectors,
31
+ dimensions: dim,
32
+ totalSegments: s.totalSegments,
33
+ fileSizeBytes: s.fileSizeBytes,
34
+ epoch: s.epoch,
35
+ witnessValid: s.witnessValid,
36
+ witnessEntries: s.witnessEntries,
37
+ };
38
+ },
39
+ close() {
40
+ adapter.close();
41
+ },
42
+ };
43
+ }
44
+ function tableExists(db, name) {
45
+ const row = db.prepare("SELECT COUNT(*) as cnt FROM sqlite_master WHERE type='table' AND name=?").get(name);
46
+ return (row?.cnt ?? 0) > 0;
47
+ }
48
+ // ============================================================================
49
+ // RvfDualWriter
50
+ // ============================================================================
51
+ export class RvfDualWriter {
52
+ db;
53
+ config;
54
+ rvfStore = null;
55
+ rvfAvailable = false;
56
+ constructor(db, config) {
57
+ this.db = db;
58
+ this.config = {
59
+ ...config,
60
+ dimensions: config.dimensions ?? 384,
61
+ };
62
+ }
63
+ /**
64
+ * Initialize the RVF store (create or open).
65
+ *
66
+ * If the native adapter is not available, the writer degrades gracefully
67
+ * to sqlite-only regardless of the configured mode.
68
+ */
69
+ async initialize() {
70
+ if (this.config.mode === 'sqlite-only') {
71
+ this.rvfAvailable = false;
72
+ return;
73
+ }
74
+ try {
75
+ // Dynamic import so the module is optional
76
+ const adapter = await import('./rvf-native-adapter.js');
77
+ if (!adapter.isRvfNativeAvailable()) {
78
+ this.rvfAvailable = false;
79
+ return;
80
+ }
81
+ // Try open first, create if it fails
82
+ let nativeAdapter;
83
+ try {
84
+ nativeAdapter = adapter.openRvfStore(this.config.rvfPath);
85
+ }
86
+ catch {
87
+ nativeAdapter = adapter.createRvfStore(this.config.rvfPath, this.config.dimensions);
88
+ }
89
+ this.rvfStore = wrapNativeAdapter(nativeAdapter, this.config.dimensions);
90
+ this.rvfAvailable = true;
91
+ }
92
+ catch {
93
+ // Native adapter module not available at all
94
+ this.rvfAvailable = false;
95
+ }
96
+ }
97
+ /**
98
+ * Allow injecting an RVF store directly (useful for testing).
99
+ */
100
+ setRvfStore(store) {
101
+ this.rvfStore = store;
102
+ this.rvfAvailable = true;
103
+ }
104
+ // --------------------------------------------------------------------------
105
+ // Write
106
+ // --------------------------------------------------------------------------
107
+ /**
108
+ * Write a pattern embedding to both stores.
109
+ *
110
+ * SQLite is always written first. RVF failures never propagate to SQLite.
111
+ */
112
+ writePattern(patternId, embedding) {
113
+ const result = {
114
+ sqliteSuccess: false,
115
+ rvfSuccess: false,
116
+ };
117
+ // 1. Always write to SQLite qe_pattern_embeddings
118
+ try {
119
+ this.writeSqliteEmbedding(patternId, embedding);
120
+ result.sqliteSuccess = true;
121
+ }
122
+ catch {
123
+ result.sqliteSuccess = false;
124
+ }
125
+ // 2. Write to RVF if mode requires it and adapter is available
126
+ if (this.shouldWriteRvf()) {
127
+ try {
128
+ this.rvfStore.ingest([{
129
+ id: patternId,
130
+ vector: embedding instanceof Float32Array ? Array.from(embedding) : embedding,
131
+ }]);
132
+ result.rvfSuccess = true;
133
+ }
134
+ catch {
135
+ result.rvfSuccess = false;
136
+ result.divergence = 'rvf-write-failed';
137
+ }
138
+ }
139
+ return result;
140
+ }
141
+ // --------------------------------------------------------------------------
142
+ // Delete
143
+ // --------------------------------------------------------------------------
144
+ /**
145
+ * Delete a pattern embedding from both stores.
146
+ */
147
+ deletePattern(patternId) {
148
+ const result = {
149
+ sqliteSuccess: false,
150
+ rvfSuccess: false,
151
+ };
152
+ // 1. Always delete from SQLite
153
+ try {
154
+ this.deleteSqliteEmbedding(patternId);
155
+ result.sqliteSuccess = true;
156
+ }
157
+ catch {
158
+ result.sqliteSuccess = false;
159
+ }
160
+ // 2. Delete from RVF if applicable
161
+ if (this.shouldWriteRvf()) {
162
+ try {
163
+ this.rvfStore.delete([patternId]);
164
+ result.rvfSuccess = true;
165
+ }
166
+ catch {
167
+ result.rvfSuccess = false;
168
+ result.divergence = 'rvf-delete-failed';
169
+ }
170
+ }
171
+ return result;
172
+ }
173
+ // --------------------------------------------------------------------------
174
+ // Search
175
+ // --------------------------------------------------------------------------
176
+ /**
177
+ * Search for similar vectors. In rvf-primary mode, tries RVF first and
178
+ * falls back to SQLite on error. Otherwise uses SQLite.
179
+ */
180
+ search(query, k) {
181
+ if (this.config.mode === 'rvf-primary' && this.rvfAvailable && this.rvfStore) {
182
+ try {
183
+ return this.rvfStore.search(query, k);
184
+ }
185
+ catch {
186
+ // Fall back to SQLite
187
+ }
188
+ }
189
+ // SQLite-based search (brute-force cosine similarity)
190
+ return this.searchSqlite(query, k);
191
+ }
192
+ // --------------------------------------------------------------------------
193
+ // Divergence
194
+ // --------------------------------------------------------------------------
195
+ /**
196
+ * Generate a divergence report between SQLite embeddings and RVF vectors.
197
+ */
198
+ getDivergenceReport() {
199
+ const report = {
200
+ totalChecked: 0,
201
+ divergences: 0,
202
+ details: [],
203
+ };
204
+ // Get SQLite embedding count
205
+ const sqliteCount = this.getSqliteEmbeddingCount();
206
+ report.totalChecked = sqliteCount;
207
+ if (!this.rvfAvailable || !this.rvfStore) {
208
+ // If RVF is not available, every SQLite embedding is "missing in RVF"
209
+ if (this.config.mode !== 'sqlite-only' && sqliteCount > 0) {
210
+ report.divergences = 1;
211
+ report.details.push({
212
+ patternId: '*',
213
+ issue: 'count-mismatch',
214
+ });
215
+ }
216
+ return report;
217
+ }
218
+ // Get RVF vector count
219
+ const rvfStatus = this.rvfStore.status();
220
+ const rvfCount = rvfStatus.totalVectors;
221
+ if (sqliteCount !== rvfCount) {
222
+ report.divergences = 1;
223
+ report.details.push({
224
+ patternId: '*',
225
+ issue: 'count-mismatch',
226
+ });
227
+ }
228
+ return report;
229
+ }
230
+ /**
231
+ * Returns true when promotion from dual-write to rvf-primary is safe
232
+ * (zero divergences between the two stores).
233
+ */
234
+ isPromotionSafe() {
235
+ const report = this.getDivergenceReport();
236
+ return report.divergences === 0;
237
+ }
238
+ // --------------------------------------------------------------------------
239
+ // Status
240
+ // --------------------------------------------------------------------------
241
+ /**
242
+ * Combined status from both backends.
243
+ */
244
+ status() {
245
+ const sqlitePatternCount = this.getSqlitePatternCount();
246
+ const sqliteVectorCount = this.getSqliteEmbeddingCount();
247
+ let rvfStatus = null;
248
+ if (this.rvfAvailable && this.rvfStore) {
249
+ try {
250
+ rvfStatus = this.rvfStore.status();
251
+ }
252
+ catch {
253
+ rvfStatus = null;
254
+ }
255
+ }
256
+ return {
257
+ sqlite: {
258
+ patternCount: sqlitePatternCount,
259
+ vectorCount: sqliteVectorCount,
260
+ },
261
+ rvf: rvfStatus,
262
+ mode: this.config.mode,
263
+ };
264
+ }
265
+ // --------------------------------------------------------------------------
266
+ // Lifecycle
267
+ // --------------------------------------------------------------------------
268
+ /**
269
+ * Close the RVF store. SQLite is managed externally.
270
+ */
271
+ close() {
272
+ if (this.rvfStore) {
273
+ try {
274
+ this.rvfStore.close();
275
+ }
276
+ catch {
277
+ // Ignore close errors
278
+ }
279
+ this.rvfStore = null;
280
+ this.rvfAvailable = false;
281
+ }
282
+ }
283
+ // --------------------------------------------------------------------------
284
+ // Private helpers
285
+ // --------------------------------------------------------------------------
286
+ shouldWriteRvf() {
287
+ return ((this.config.mode === 'dual-write' || this.config.mode === 'rvf-primary') &&
288
+ this.rvfAvailable &&
289
+ this.rvfStore !== null);
290
+ }
291
+ writeSqliteEmbedding(patternId, embedding) {
292
+ const blob = Buffer.from(embedding instanceof Float32Array
293
+ ? embedding.buffer
294
+ : new Float32Array(embedding).buffer);
295
+ const dimension = embedding.length;
296
+ // Upsert into qe_pattern_embeddings
297
+ if (tableExists(this.db, 'qe_pattern_embeddings')) {
298
+ this.db.prepare(`
299
+ INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
300
+ VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
301
+ ON CONFLICT(pattern_id) DO UPDATE SET
302
+ embedding = excluded.embedding,
303
+ dimension = excluded.dimension,
304
+ created_at = datetime('now')
305
+ `).run(patternId, blob, dimension);
306
+ }
307
+ }
308
+ deleteSqliteEmbedding(patternId) {
309
+ if (tableExists(this.db, 'qe_pattern_embeddings')) {
310
+ this.db.prepare('DELETE FROM qe_pattern_embeddings WHERE pattern_id = ?').run(patternId);
311
+ }
312
+ }
313
+ getSqliteEmbeddingCount() {
314
+ if (!tableExists(this.db, 'qe_pattern_embeddings'))
315
+ return 0;
316
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM qe_pattern_embeddings').get();
317
+ return row?.cnt ?? 0;
318
+ }
319
+ getSqlitePatternCount() {
320
+ if (!tableExists(this.db, 'qe_patterns'))
321
+ return 0;
322
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM qe_patterns').get();
323
+ return row?.cnt ?? 0;
324
+ }
325
+ /**
326
+ * Brute-force cosine similarity search over SQLite embeddings.
327
+ * This is the fallback when RVF is unavailable.
328
+ */
329
+ searchSqlite(query, k) {
330
+ if (!tableExists(this.db, 'qe_pattern_embeddings'))
331
+ return [];
332
+ const rows = this.db.prepare('SELECT pattern_id, embedding, dimension FROM qe_pattern_embeddings').all();
333
+ const queryArr = query instanceof Float32Array ? Array.from(query) : query;
334
+ const queryMag = Math.sqrt(queryArr.reduce((s, v) => s + v * v, 0));
335
+ if (queryMag === 0)
336
+ return [];
337
+ const scored = [];
338
+ for (const row of rows) {
339
+ const float32 = new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.dimension);
340
+ const vec = Array.from(float32);
341
+ let dot = 0;
342
+ let mag = 0;
343
+ for (let i = 0; i < vec.length && i < queryArr.length; i++) {
344
+ dot += vec[i] * queryArr[i];
345
+ mag += vec[i] * vec[i];
346
+ }
347
+ mag = Math.sqrt(mag);
348
+ const score = mag > 0 ? dot / (queryMag * mag) : 0;
349
+ scored.push({ id: row.pattern_id, score });
350
+ }
351
+ scored.sort((a, b) => b.score - a.score);
352
+ return scored.slice(0, k);
353
+ }
354
+ }
355
+ // ============================================================================
356
+ // Factory
357
+ // ============================================================================
358
+ /**
359
+ * Create a new RvfDualWriter instance.
360
+ *
361
+ * @param db - better-sqlite3 Database instance
362
+ * @param config - Dual-write configuration
363
+ */
364
+ export function createDualWriter(db, config) {
365
+ return new RvfDualWriter(db, config);
366
+ }
367
+ //# sourceMappingURL=rvf-dual-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvf-dual-writer.js","sourceRoot":"","sources":["../../../src/integrations/ruvector/rvf-dual-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RVF Native Adapter — thin wrapper around @ruvector/rvf-node N-API binding.
3
+ *
4
+ * Bypasses the buggy @ruvector/rvf SDK wrapper and talks directly to the
5
+ * native layer. Adds string-ID mapping on top of the numeric labels the
6
+ * native API requires, and persists the mapping as a sidecar JSON file.
7
+ */
8
+ export interface RvfSearchResult {
9
+ /** String ID (mapped back from numeric label) */
10
+ id: string;
11
+ /** Raw distance from the native HNSW index */
12
+ distance: number;
13
+ /** Similarity score: 1 / (1 + distance) — cosine-compatible */
14
+ score: number;
15
+ }
16
+ export interface RvfStatus {
17
+ totalVectors: number;
18
+ totalSegments: number;
19
+ fileSizeBytes: number;
20
+ epoch: number;
21
+ witnessValid: boolean;
22
+ witnessEntries: number;
23
+ }
24
+ export interface RvfNativeAdapter {
25
+ /** Insert vectors with string IDs */
26
+ ingest(entries: Array<{
27
+ id: string;
28
+ vector: Float32Array | number[];
29
+ }>): {
30
+ accepted: number;
31
+ rejected: number;
32
+ };
33
+ /** Search k nearest neighbours */
34
+ search(query: Float32Array | number[], k: number): RvfSearchResult[];
35
+ /** Delete by string IDs — returns count deleted */
36
+ delete(ids: string[]): number;
37
+ /** COW fork — creates an independent copy at `childPath` */
38
+ fork(childPath: string): RvfNativeAdapter;
39
+ /** Database status including witness-chain verification */
40
+ status(): RvfStatus;
41
+ /** Vector dimensionality */
42
+ dimension(): number;
43
+ /** Total vector count */
44
+ size(): number;
45
+ /** Compact to reclaim space from deleted vectors */
46
+ compact(): void;
47
+ /** Close and release native resources */
48
+ close(): void;
49
+ /** Whether the underlying database handle is still open */
50
+ isOpen(): boolean;
51
+ /** Filesystem path of the RVF container */
52
+ path(): string;
53
+ }
54
+ /** Create a new RVF container */
55
+ export declare function createRvfStore(path: string, dimensions: number): RvfNativeAdapter;
56
+ /** Open an existing RVF container (loads persisted ID mapping) */
57
+ export declare function openRvfStore(path: string): RvfNativeAdapter;
58
+ /** Check whether the native binding is loadable on this platform */
59
+ export declare function isRvfNativeAvailable(): boolean;
60
+ //# sourceMappingURL=rvf-native-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvf-native-adapter.d.ts","sourceRoot":"","sources":["../../../src/integrations/ruvector/rvf-native-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC,GAAG;QACvE,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;IAErE,mDAAmD;IACnD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE9B,4DAA4D;IAC5D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAE1C,2DAA2D;IAC3D,MAAM,IAAI,SAAS,CAAC;IAEpB,4BAA4B;IAC5B,SAAS,IAAI,MAAM,CAAC;IAEpB,yBAAyB;IACzB,IAAI,IAAI,MAAM,CAAC;IAEf,oDAAoD;IACpD,OAAO,IAAI,IAAI,CAAC;IAEhB,yCAAyC;IACzC,KAAK,IAAI,IAAI,CAAC;IAEd,2DAA2D;IAC3D,MAAM,IAAI,OAAO,CAAC;IAElB,2CAA2C;IAC3C,IAAI,IAAI,MAAM,CAAC;CAChB;AA+PD,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAiBjF;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAW3D;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}