agentic-qe 3.8.14 → 3.9.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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +60 -0
- package/dist/adapters/a2ui/integration/agui-sync.js +2 -1
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/boot/fast-paths.d.ts +24 -0
- package/dist/boot/fast-paths.js +43 -0
- package/dist/boot/parallel-prefetch.d.ts +26 -0
- package/dist/boot/parallel-prefetch.js +36 -0
- package/dist/cli/bundle.js +12 -9431
- package/dist/cli/chunks/adapter-NTM4ZH3P.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-UH2J6BNA.js +2 -0
- package/dist/cli/chunks/agent-handler-ZCBWQE3X.js +33 -0
- package/dist/cli/chunks/agent-memory-branch-2BAVI7UW.js +2 -0
- package/dist/cli/chunks/aqe-learning-engine-RVX6MPYK.js +2 -0
- package/dist/cli/chunks/audit-G5UIJBSQ.js +3 -0
- package/dist/cli/chunks/base-7HKNQ6UP.js +2 -0
- package/dist/cli/chunks/better-sqlite3-YHIAPPVT.js +2 -0
- package/dist/cli/chunks/brain-handler-5EE3J5PR.js +68 -0
- package/dist/cli/chunks/branch-enumerator-OV54PID5.js +7 -0
- package/dist/cli/chunks/browser-7RZGKOEO.js +4 -0
- package/dist/cli/chunks/browser-workflow-UOFSQK7X.js +2 -0
- package/dist/cli/chunks/chunk-24E47G3D.js +604 -0
- package/dist/cli/chunks/chunk-35H73OPP.js +2 -0
- package/dist/cli/chunks/chunk-36X2O3BL.js +3 -0
- package/dist/cli/chunks/chunk-3JESHZQM.js +2 -0
- package/dist/cli/chunks/chunk-3VAKR43Z.js +2 -0
- package/dist/cli/chunks/chunk-3WQNW6CH.js +2 -0
- package/dist/cli/chunks/chunk-43M6Y6VF.js +15 -0
- package/dist/cli/chunks/chunk-4BHOAQJH.js +2 -0
- package/dist/cli/chunks/chunk-4LWXZCSD.js +146 -0
- package/dist/cli/chunks/chunk-4TNXEANY.js +2 -0
- package/dist/cli/chunks/chunk-4XBY5JDT.js +4 -0
- package/dist/cli/chunks/chunk-4XREPCBZ.js +2 -0
- package/dist/cli/chunks/chunk-5GPTM2RV.js +2 -0
- package/dist/cli/chunks/chunk-5KBQQP3X.js +7 -0
- package/dist/cli/chunks/chunk-5LDBKZ6P.js +2 -0
- package/dist/cli/chunks/chunk-6BSJNG2S.js +2 -0
- package/dist/cli/chunks/chunk-6YC24TPL.js +27 -0
- package/dist/cli/chunks/chunk-7ATLJCSG.js +2 -0
- package/dist/cli/chunks/chunk-7JQTHPCD.js +2 -0
- package/dist/cli/chunks/chunk-7YUOUVN7.js +2 -0
- package/dist/cli/chunks/chunk-7ZNINH6J.js +59 -0
- package/dist/cli/chunks/chunk-A57BEPL7.js +3 -0
- package/dist/cli/chunks/chunk-AFPMCMVX.js +45 -0
- package/dist/cli/chunks/chunk-AREIP4FX.js +3 -0
- package/dist/cli/chunks/chunk-B2I7BJLL.js +3 -0
- package/dist/cli/chunks/chunk-BEHP3DEF.js +66 -0
- package/dist/cli/chunks/chunk-C24ZDUCM.js +30 -0
- package/dist/cli/chunks/chunk-D4PSFWND.js +2 -0
- package/dist/cli/chunks/chunk-D55PSO5D.js +81 -0
- package/dist/cli/chunks/chunk-DC3HPOOJ.js +2 -0
- package/dist/cli/chunks/chunk-DMGLX76J.js +180 -0
- package/dist/cli/chunks/chunk-E33KQBMW.js +2 -0
- package/dist/cli/chunks/chunk-EQFZQPFN.js +2 -0
- package/dist/cli/chunks/chunk-FPRL6UDF.js +2 -0
- package/dist/cli/chunks/chunk-FRNB4CH2.js +2 -0
- package/dist/cli/chunks/chunk-FWDKVTK4.js +2 -0
- package/dist/cli/chunks/chunk-GFNUESMU.js +2 -0
- package/dist/cli/chunks/chunk-GJW6V35N.js +2 -0
- package/dist/cli/chunks/chunk-GLIFZWV2.js +2 -0
- package/dist/cli/chunks/chunk-GNUUBTSX.js +14 -0
- package/dist/cli/chunks/chunk-HAUXLXKZ.js +2 -0
- package/dist/cli/chunks/chunk-HTXSUTWL.js +9 -0
- package/dist/cli/chunks/chunk-I5WZ2NM2.js +95 -0
- package/dist/cli/chunks/chunk-I7TA453K.js +2 -0
- package/dist/cli/chunks/chunk-IF6GW6IY.js +27 -0
- package/dist/cli/chunks/chunk-IHWSNYL2.js +5 -0
- package/dist/cli/chunks/chunk-IJKYJGJL.js +2 -0
- package/dist/cli/chunks/chunk-IQPXANCE.js +14 -0
- package/dist/cli/chunks/chunk-JCEY7RLP.js +2 -0
- package/dist/cli/chunks/chunk-JSOBRKMA.js +2 -0
- package/dist/cli/chunks/chunk-KIGRLIU4.js +2 -0
- package/dist/cli/chunks/chunk-L4H54Z27.js +21 -0
- package/dist/cli/chunks/chunk-LCOEBFAB.js +2 -0
- package/dist/cli/chunks/chunk-MZ54VM6A.js +2 -0
- package/dist/cli/chunks/chunk-NB47YT6A.js +167 -0
- package/dist/cli/chunks/chunk-NG3BKE7V.js +2 -0
- package/dist/cli/chunks/chunk-NG4TE3OW.js +2 -0
- package/dist/cli/chunks/chunk-O636JKJR.js +18 -0
- package/dist/cli/chunks/chunk-O6QQ4HLS.js +2 -0
- package/dist/cli/chunks/chunk-OFNIQCGX.js +2 -0
- package/dist/cli/chunks/chunk-OTSJU5LH.js +2 -0
- package/dist/cli/chunks/chunk-POLFT2PQ.js +15 -0
- package/dist/cli/chunks/chunk-QAYTL6KC.js +2 -0
- package/dist/cli/chunks/chunk-QMFP5OKH.js +2 -0
- package/dist/cli/chunks/chunk-RAJO7VML.js +2 -0
- package/dist/cli/chunks/chunk-RKIGOARX.js +2 -0
- package/dist/cli/chunks/chunk-RU6Q5HOC.js +3 -0
- package/dist/cli/chunks/chunk-RV6SGDET.js +2 -0
- package/dist/cli/chunks/chunk-RWXI7XAR.js +2 -0
- package/dist/cli/chunks/chunk-RXVYOXDB.js +2 -0
- package/dist/cli/chunks/chunk-SGRN6JFB.js +2 -0
- package/dist/cli/chunks/chunk-SVNX4UWR.js +3029 -0
- package/dist/cli/chunks/chunk-TL7ABIMP.js +2 -0
- package/dist/cli/chunks/chunk-TOLYWONQ.js +2 -0
- package/dist/cli/chunks/chunk-TPXYS3WG.js +3 -0
- package/dist/cli/chunks/chunk-U5JQGRHZ.js +2 -0
- package/dist/cli/chunks/chunk-UB7RGVKO.js +2 -0
- package/dist/cli/chunks/chunk-UBKK7KCR.js +70 -0
- package/dist/cli/chunks/chunk-UMGWGX7C.js +2 -0
- package/dist/cli/chunks/chunk-UN4PA4M2.js +2 -0
- package/dist/cli/chunks/chunk-US7INRP2.js +314 -0
- package/dist/cli/chunks/chunk-UWDBFPHQ.js +750 -0
- package/dist/cli/chunks/chunk-UZZCWWIG.js +2 -0
- package/dist/cli/chunks/chunk-V4HM4QAO.js +24 -0
- package/dist/cli/chunks/chunk-V4U3CTS2.js +180 -0
- package/dist/cli/chunks/chunk-VCCMCFDU.js +2 -0
- package/dist/cli/chunks/chunk-VEWIT6VN.js +4 -0
- package/dist/cli/chunks/chunk-VNYGVG4Y.js +2 -0
- package/dist/cli/chunks/chunk-VO3OVD5D.js +4 -0
- package/dist/cli/chunks/chunk-VY74OMGQ.js +6 -0
- package/dist/cli/chunks/chunk-WDJBGXC2.js +2 -0
- package/dist/cli/chunks/chunk-WDV6TN7E.js +65 -0
- package/dist/cli/chunks/chunk-WLXEDOG4.js +2 -0
- package/dist/cli/chunks/chunk-WXXAAXNS.js +12 -0
- package/dist/cli/chunks/chunk-X4MZYBOU.js +256 -0
- package/dist/cli/chunks/chunk-XE2YAYU5.js +12 -0
- package/dist/cli/chunks/chunk-XP6XKBNW.js +2 -0
- package/dist/cli/chunks/chunk-XPB6ZVQY.js +2 -0
- package/dist/cli/chunks/chunk-XRVUSKQV.js +1 -0
- package/dist/cli/chunks/chunk-XSITQBYB.js +20 -0
- package/dist/cli/chunks/chunk-XTLA4F5Z.js +91 -0
- package/dist/cli/chunks/chunk-XU6L2VJY.js +2 -0
- package/dist/cli/chunks/chunk-XUFHYPZK.js +2 -0
- package/dist/cli/chunks/chunk-Y2ZEDXTV.js +16 -0
- package/dist/cli/chunks/chunk-YQWB4QUP.js +316 -0
- package/dist/cli/chunks/chunk-YUQIXT3G.js +79 -0
- package/dist/cli/chunks/chunk-YYYB2JN5.js +2 -0
- package/dist/cli/chunks/chunk-ZEUVPLGX.js +2 -0
- package/dist/cli/chunks/chunk-ZSRQHJEW.js +3 -0
- package/dist/cli/chunks/ci-N4NTYAAI.js +81 -0
- package/dist/cli/chunks/ci-output-XYR2PSYH.js +2 -0
- package/dist/cli/chunks/claude-flow-setup-FX7PRBJV.js +2 -0
- package/dist/cli/chunks/client-CRRENRK4.js +2 -0
- package/dist/cli/chunks/cline-installer-GTHQOK7U.js +4 -0
- package/dist/cli/chunks/code-4G6ZHVNI.js +38 -0
- package/dist/cli/chunks/code-index-extractor-MKJTP5AK.js +3 -0
- package/dist/cli/chunks/codex-installer-UGS773DT.js +8 -0
- package/dist/cli/chunks/completions-B3BXNXAU.js +1364 -0
- package/dist/cli/chunks/complexity-analyzer-PMN77CUP.js +2 -0
- package/dist/cli/chunks/continuedev-installer-3DYKSIP3.js +14 -0
- package/dist/cli/chunks/copilot-installer-IUC5HDHD.js +3 -0
- package/dist/cli/chunks/cost-tracker-GSGQ7O5T.js +2 -0
- package/dist/cli/chunks/coverage-PO72QC3P.js +27 -0
- package/dist/cli/chunks/cross-domain-router-FSCGJG3B.js +2 -0
- package/dist/cli/chunks/cursor-installer-FK53S3ZL.js +3 -0
- package/dist/cli/chunks/daemon-4UIQTQ73.js +19 -0
- package/dist/cli/chunks/dag-attention-scheduler-ZGIMLECE.js +2 -0
- package/dist/cli/chunks/detect-XXHLTLL7.js +2 -0
- package/dist/cli/chunks/domain-handler-PPGFP7P4.js +25 -0
- package/dist/cli/chunks/domain-transfer-Q5UAE65W.js +2 -0
- package/dist/cli/chunks/dream-PONKQULG.js +2 -0
- package/dist/cli/chunks/esm-node-XLWDJRBX.js +2 -0
- package/dist/cli/chunks/eval-JVJKHSTQ.js +15 -0
- package/dist/cli/chunks/fast-paths-3KX4ZV66.js +2 -0
- package/dist/cli/chunks/feature-flags-2NOVE7DL.js +2 -0
- package/dist/cli/chunks/feature-flags-GKHHG2I2.js +2 -0
- package/dist/cli/chunks/file-discovery-XFSGQNM3.js +2 -0
- package/dist/cli/chunks/fleet-FOIDAXLR.js +43 -0
- package/dist/cli/chunks/gnn-wrapper-HPCQREKP.js +2 -0
- package/dist/cli/chunks/heartbeat-handler-HTR3EFFV.js +48 -0
- package/dist/cli/chunks/heartbeat-scheduler-NZQWN7CH.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-BNA5WUAB.js +2 -0
- package/dist/cli/chunks/hnsw-index-RQIIAE7S.js +2 -0
- package/dist/cli/chunks/hnsw-legacy-bridge-H6OA3AA3.js +2 -0
- package/dist/cli/chunks/hnswlib-node-FF27BDMD.js +2 -0
- package/dist/cli/chunks/hooks-63NZQ7NH.js +101 -0
- package/dist/cli/chunks/hypergraph-engine-XMSLA4XH.js +2 -0
- package/dist/cli/chunks/hypergraph-handler-ID6J6GS2.js +35 -0
- package/dist/cli/chunks/impact-analyzer-FS2UNVP4.js +2 -0
- package/dist/cli/chunks/init-handler-CIKZGGAY.js +68 -0
- package/dist/cli/chunks/init-wizard-TUU5PPY6.js +2 -0
- package/dist/cli/chunks/kernel-XFG42WAG.js +2 -0
- package/dist/cli/chunks/kilocode-installer-N7NLISYY.js +4 -0
- package/dist/cli/chunks/kiro-installer-U6XIPAT3.js +74 -0
- package/dist/cli/chunks/knowledge-graph-XV7FPU2T.js +2 -0
- package/dist/cli/chunks/learning-NKOF7KDJ.js +107 -0
- package/dist/cli/chunks/llm-router-34WHT3PH.js +30 -0
- package/dist/cli/chunks/load-ZW4Z3YLT.js +2 -0
- package/dist/cli/chunks/load-test-F4L7RTXJ.js +2 -0
- package/dist/cli/chunks/mcp-6R7SVGKO.js +2 -0
- package/dist/cli/chunks/memory-OUYCBU4M.js +32 -0
- package/dist/cli/chunks/memory-backend-DTJD2DWF.js +2 -0
- package/dist/cli/chunks/memory-handlers-WNXKZRNM.js +2 -0
- package/dist/cli/chunks/opencode-installer-FR75GHFU.js +3 -0
- package/dist/cli/chunks/orchestrator-AK7ZMVNH.js +371 -0
- package/dist/cli/chunks/pipeline-CFOPG7EM.js +19 -0
- package/dist/cli/chunks/platform-NY3ULBR7.js +2 -0
- package/dist/cli/chunks/plugin-LRANQYUR.js +27 -0
- package/dist/cli/chunks/prime-radiant-advanced-wasm-6KEIU55P.js +2 -0
- package/dist/cli/chunks/protocol-executor-6W4PS2D4.js +2 -0
- package/dist/cli/chunks/protocol-handler-ESSZGJ7R.js +20 -0
- package/dist/cli/chunks/prove-EF2PPY65.js +3 -0
- package/dist/cli/chunks/qe-reasoning-bank-7G3TZLEA.js +2 -0
- package/dist/cli/chunks/quality-AYBXB635.js +7 -0
- package/dist/cli/chunks/queen-coordinator-NFPKGMQN.js +2 -0
- package/dist/cli/chunks/real-embeddings-QPBXE7MA.js +2 -0
- package/dist/cli/chunks/roocode-installer-UF6MMBH6.js +4 -0
- package/dist/cli/chunks/router-F4B7Q66G.js +2 -0
- package/dist/cli/chunks/routing-feedback-5CIDDW7P.js +2 -0
- package/dist/cli/chunks/routing-handler-5TVKFU7V.js +20 -0
- package/dist/cli/chunks/ruvector-commands-E33VXFIA.js +8 -0
- package/dist/cli/chunks/rvf-dual-writer-O3AZKD24.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-IKEUZ2HX.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-M4H7W4RN.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-UX3WAPIP.js +2 -0
- package/dist/cli/chunks/safe-db-QBBNXEVK.js +2 -0
- package/dist/cli/chunks/schedule-GFT4NN6Z.js +2 -0
- package/dist/cli/chunks/scheduler-CQ56T7DB.js +2 -0
- package/dist/cli/chunks/security-ZLWT7IU3.js +14 -0
- package/dist/cli/chunks/shared-rvf-adapter-EXACQ2PT.js +2 -0
- package/dist/cli/chunks/shared-rvf-dual-writer-G43LQDIV.js +2 -0
- package/dist/cli/chunks/sqlite-persistence-JHSUZPAW.js +2 -0
- package/dist/cli/chunks/status-handler-7P23CXUI.js +45 -0
- package/dist/cli/chunks/structural-health-SCNBNL7K.js +2 -0
- package/dist/cli/chunks/sync-BYZBBH65.js +23 -0
- package/dist/cli/chunks/task-handler-DWJQXZ2K.js +49 -0
- package/dist/cli/chunks/task-handlers-35JIXVRW.js +2 -0
- package/dist/cli/chunks/test-2JSS4XW7.js +33 -0
- package/dist/cli/chunks/test-scheduling-TWJ5I7N3.js +15 -0
- package/dist/cli/chunks/token-bootstrap-LLLNJT5V.js +2 -0
- package/dist/cli/chunks/token-usage-EQ4HM4EZ.js +25 -0
- package/dist/cli/chunks/transformers-PBIR5U5S.js +2 -0
- package/dist/cli/chunks/tree-sitter-wasm-parser-X3L2GXUX.js +2 -0
- package/dist/cli/chunks/types-OD43K2NP.js +2 -0
- package/dist/cli/chunks/unified-memory-YPHONR2T.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-HJS4OXWM.js +2 -0
- package/dist/cli/chunks/unified-persistence-EFZRO6AW.js +2 -0
- package/dist/cli/chunks/validate-POMLT2KU.js +21 -0
- package/dist/cli/chunks/validate-swarm-UOC4JGZT.js +14 -0
- package/dist/cli/chunks/vibium-5JF6LAXI.js +2 -0
- package/dist/cli/chunks/visual-security-7KWFLYNB.js +2 -0
- package/dist/cli/chunks/web-tree-sitter-R7WR7J7B.js +2 -0
- package/dist/cli/chunks/windsurf-installer-ZSPEUBKR.js +7 -0
- package/dist/cli/chunks/witness-chain-CFSPCXHG.js +2 -0
- package/dist/cli/chunks/witness-chain-RWU6WT37.js +2 -0
- package/dist/cli/chunks/workflow-YNQT3OW2.js +51 -0
- package/dist/cli/chunks/workflow-orchestrator-Z6TAVMQP.js +2 -0
- package/dist/cli/chunks/wrappers-BP4FODVH.js +2 -0
- package/dist/cli/commands/daemon.d.ts +13 -0
- package/dist/cli/commands/daemon.js +224 -0
- package/dist/cli/commands/hooks-handlers/hooks-shared.js +2 -1
- package/dist/cli/commands/plugin.d.ts +12 -0
- package/dist/cli/commands/plugin.js +135 -0
- package/dist/cli/commands/ruvector-commands.js +14 -2
- package/dist/cli/commands/workflow.d.ts +10 -0
- package/dist/cli/commands/workflow.js +587 -0
- package/dist/cli/handlers/brain-handler.js +13 -8
- package/dist/cli/handlers/heartbeat-handler.d.ts +1 -0
- package/dist/cli/handlers/heartbeat-handler.js +20 -10
- package/dist/cli/handlers/hypergraph-handler.js +3 -3
- package/dist/cli/handlers/init-handler.js +10 -9
- package/dist/cli/handlers/interfaces.d.ts +4 -4
- package/dist/cli/index.js +159 -638
- package/dist/cli/lazy-registry.d.ts +27 -0
- package/dist/cli/lazy-registry.js +70 -0
- package/dist/context/compaction/context-budget.d.ts +71 -0
- package/dist/context/compaction/context-budget.js +120 -0
- package/dist/context/compaction/index.d.ts +96 -0
- package/dist/context/compaction/index.js +259 -0
- package/dist/context/compaction/llm-caller-adapter.d.ts +14 -0
- package/dist/context/compaction/llm-caller-adapter.js +47 -0
- package/dist/context/compaction/tier1-microcompact.d.ts +33 -0
- package/dist/context/compaction/tier1-microcompact.js +47 -0
- package/dist/context/compaction/tier2-session-summary.d.ts +72 -0
- package/dist/context/compaction/tier2-session-summary.js +172 -0
- package/dist/context/compaction/tier3-llm-compact.d.ts +65 -0
- package/dist/context/compaction/tier3-llm-compact.js +166 -0
- package/dist/context/compaction/tier4-reactive.d.ts +54 -0
- package/dist/context/compaction/tier4-reactive.js +129 -0
- package/dist/coordination/agent-memory-branch.d.ts +117 -0
- package/dist/coordination/agent-memory-branch.js +213 -0
- package/dist/coordination/agent-teams/mailbox.d.ts +43 -0
- package/dist/coordination/agent-teams/mailbox.js +130 -4
- package/dist/coordination/consensus/providers/claude-provider.d.ts +1 -0
- package/dist/coordination/consensus/providers/claude-provider.js +23 -3
- package/dist/coordination/handlers/handler-utils.d.ts +1 -0
- package/dist/coordination/handlers/handler-utils.js +9 -2
- package/dist/coordination/handlers/quality-handlers.js +7 -1
- package/dist/domains/contract-testing/coordinator.js +11 -0
- package/dist/domains/quality-assessment/coherence/gate-controller.d.ts +20 -1
- package/dist/domains/quality-assessment/coherence/gate-controller.js +64 -0
- package/dist/domains/quality-assessment/coherence/index.d.ts +3 -3
- package/dist/domains/quality-assessment/coherence/index.js +2 -2
- package/dist/domains/quality-assessment/coherence/types.d.ts +39 -0
- package/dist/domains/quality-assessment/coherence/types.js +11 -0
- package/dist/domains/quality-assessment/coordinator.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator.js +92 -0
- package/dist/domains/test-execution/coordinator.d.ts +19 -0
- package/dist/domains/test-execution/coordinator.js +102 -5
- package/dist/domains/test-generation/coordinator.js +11 -0
- package/dist/domains/test-generation/interfaces.d.ts +2 -0
- package/dist/domains/test-generation/services/test-generator.d.ts +9 -0
- package/dist/domains/test-generation/services/test-generator.js +37 -0
- package/dist/hooks/cross-phase-hooks.d.ts +11 -0
- package/dist/hooks/cross-phase-hooks.js +73 -9
- package/dist/hooks/security/config-snapshot.d.ts +21 -0
- package/dist/hooks/security/config-snapshot.js +33 -0
- package/dist/hooks/security/exit-codes.d.ts +28 -0
- package/dist/hooks/security/exit-codes.js +33 -0
- package/dist/hooks/security/index.d.ts +15 -0
- package/dist/hooks/security/index.js +15 -0
- package/dist/hooks/security/ssrf-guard.d.ts +25 -0
- package/dist/hooks/security/ssrf-guard.js +69 -0
- package/dist/init/agents-installer.d.ts +5 -3
- package/dist/init/agents-installer.js +17 -43
- package/dist/init/find-package-root.d.ts +22 -0
- package/dist/init/find-package-root.js +46 -0
- package/dist/init/n8n-installer.d.ts +4 -2
- package/dist/init/n8n-installer.js +23 -23
- package/dist/init/opencode-installer.d.ts +0 -5
- package/dist/init/opencode-installer.js +12 -39
- package/dist/init/skills-installer.d.ts +5 -2
- package/dist/init/skills-installer.js +15 -37
- package/dist/integrations/embeddings/index/HNSWIndex.d.ts +9 -2
- package/dist/integrations/embeddings/index/HNSWIndex.js +110 -35
- package/dist/integrations/ruvector/cognitive-routing.d.ts +67 -0
- package/dist/integrations/ruvector/cognitive-routing.js +208 -0
- package/dist/integrations/ruvector/feature-flags.d.ts +84 -0
- package/dist/integrations/ruvector/feature-flags.js +59 -0
- package/dist/integrations/ruvector/hdc-fingerprint.d.ts +76 -0
- package/dist/integrations/ruvector/hdc-fingerprint.js +217 -0
- package/dist/integrations/ruvector/hyperbolic-hnsw.d.ts +59 -0
- package/dist/integrations/ruvector/hyperbolic-hnsw.js +194 -0
- package/dist/integrations/ruvector/index.d.ts +5 -2
- package/dist/integrations/ruvector/index.js +13 -2
- package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +24 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.js +55 -0
- package/dist/integrations/ruvector/shared-rvf-dual-writer.d.ts +6 -0
- package/dist/integrations/ruvector/shared-rvf-dual-writer.js +38 -0
- package/dist/integrations/ruvector/sona-persistence.d.ts +8 -0
- package/dist/integrations/ruvector/sona-persistence.js +10 -0
- package/dist/integrations/ruvector/vector-delta-tracker.d.ts +96 -0
- package/dist/integrations/ruvector/vector-delta-tracker.js +226 -0
- package/dist/kernel/agent-coordinator.d.ts +75 -1
- package/dist/kernel/agent-coordinator.js +250 -1
- package/dist/kernel/hnsw-legacy-bridge.d.ts +38 -0
- package/dist/kernel/hnsw-legacy-bridge.js +88 -0
- package/dist/kernel/hnsw-shadow-validator.d.ts +91 -0
- package/dist/kernel/hnsw-shadow-validator.js +139 -0
- package/dist/kernel/index.d.ts +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/kernel/interfaces.d.ts +39 -0
- package/dist/kernel/kernel.d.ts +23 -0
- package/dist/kernel/kernel.js +141 -1
- package/dist/kernel/memory-backend.js +3 -1
- package/dist/kernel/unified-memory.d.ts +1 -1
- package/dist/kernel/unified-memory.js +7 -3
- package/dist/learning/aqe-learning-engine.d.ts +65 -0
- package/dist/learning/aqe-learning-engine.js +134 -0
- package/dist/learning/dream/dream-engine.d.ts +6 -1
- package/dist/learning/dream/dream-engine.js +37 -2
- package/dist/learning/dream/dream-scheduler.d.ts +25 -0
- package/dist/learning/dream/dream-scheduler.js +120 -0
- package/dist/learning/dream/rvcow-branch-manager.d.ts +6 -3
- package/dist/learning/dream/rvcow-branch-manager.js +60 -5
- package/dist/learning/experience-capture.d.ts +3 -3
- package/dist/learning/hyperbolic-pattern-index.d.ts +82 -0
- package/dist/learning/hyperbolic-pattern-index.js +142 -0
- package/dist/learning/index.d.ts +3 -3
- package/dist/learning/index.js +1 -1
- package/dist/learning/metrics-tracker.d.ts +44 -0
- package/dist/learning/metrics-tracker.js +37 -0
- package/dist/learning/pattern-promotion.d.ts +3 -3
- package/dist/learning/pattern-store.d.ts +45 -2
- package/dist/learning/pattern-store.js +217 -4
- package/dist/learning/qe-patterns.d.ts +1 -1
- package/dist/learning/qe-reasoning-bank.js +1 -1
- package/dist/learning/rvf-pattern-migration.d.ts +50 -0
- package/dist/learning/rvf-pattern-migration.js +106 -0
- package/dist/learning/rvf-pattern-store.d.ts +66 -0
- package/dist/learning/rvf-pattern-store.js +447 -0
- package/dist/mcp/bundle.js +1937 -1793
- package/dist/mcp/entry.js +132 -77
- package/dist/mcp/handlers/index.d.ts +1 -0
- package/dist/mcp/handlers/index.js +2 -0
- package/dist/mcp/handlers/migration-handlers.d.ts +52 -0
- package/dist/mcp/handlers/migration-handlers.js +85 -0
- package/dist/mcp/middleware/batch-executor.d.ts +46 -0
- package/dist/mcp/middleware/batch-executor.js +150 -0
- package/dist/mcp/middleware/microcompact.d.ts +97 -0
- package/dist/mcp/middleware/microcompact.js +179 -0
- package/dist/mcp/middleware/middleware-chain.d.ts +37 -0
- package/dist/mcp/middleware/middleware-chain.js +60 -0
- package/dist/mcp/protocol-server.d.ts +12 -0
- package/dist/mcp/protocol-server.js +192 -36
- package/dist/mcp/services/session-durability-middleware.d.ts +22 -0
- package/dist/mcp/services/session-durability-middleware.js +64 -0
- package/dist/mcp/services/session-resume.d.ts +29 -0
- package/dist/mcp/services/session-resume.js +221 -0
- package/dist/mcp/services/session-store.d.ts +84 -0
- package/dist/mcp/services/session-store.js +163 -0
- package/dist/mcp/tool-registry.d.ts +9 -0
- package/dist/mcp/tool-registry.js +30 -1
- package/dist/mcp/types.d.ts +2 -1
- package/dist/optimization/early-exit-token-optimizer.d.ts +7 -7
- package/dist/optimization/early-exit-token-optimizer.js +3 -3
- package/dist/persistence/rvf-consistency-validator.d.ts +85 -0
- package/dist/persistence/rvf-consistency-validator.js +182 -0
- package/dist/persistence/rvf-migration-adapter.d.ts +125 -0
- package/dist/persistence/rvf-migration-adapter.js +303 -0
- package/dist/persistence/rvf-migration-coordinator.d.ts +115 -0
- package/dist/persistence/rvf-migration-coordinator.js +224 -0
- package/dist/persistence/rvf-stage-gate.d.ts +70 -0
- package/dist/persistence/rvf-stage-gate.js +163 -0
- package/dist/plugins/cache.d.ts +44 -0
- package/dist/plugins/cache.js +149 -0
- package/dist/plugins/index.d.ts +15 -0
- package/dist/plugins/index.js +15 -0
- package/dist/plugins/lifecycle.d.ts +67 -0
- package/dist/plugins/lifecycle.js +175 -0
- package/dist/plugins/manifest.d.ts +45 -0
- package/dist/plugins/manifest.js +173 -0
- package/dist/plugins/resolver.d.ts +37 -0
- package/dist/plugins/resolver.js +80 -0
- package/dist/plugins/security.d.ts +23 -0
- package/dist/plugins/security.js +125 -0
- package/dist/plugins/sources/github.d.ts +17 -0
- package/dist/plugins/sources/github.js +77 -0
- package/dist/plugins/sources/local.d.ts +20 -0
- package/dist/plugins/sources/local.js +32 -0
- package/dist/plugins/sources/npm.d.ts +18 -0
- package/dist/plugins/sources/npm.js +82 -0
- package/dist/shared/llm/retry.d.ts +5 -2
- package/dist/shared/llm/retry.js +7 -3
- package/dist/shared/prompt-cache-latch.d.ts +41 -0
- package/dist/shared/prompt-cache-latch.js +63 -0
- package/dist/shared/retry-engine.d.ts +77 -0
- package/dist/shared/retry-engine.js +194 -0
- package/dist/workers/daemon.d.ts +8 -0
- package/dist/workers/daemon.js +13 -0
- package/dist/workers/quality-daemon/ci-monitor.d.ts +55 -0
- package/dist/workers/quality-daemon/ci-monitor.js +147 -0
- package/dist/workers/quality-daemon/coverage-delta.d.ts +72 -0
- package/dist/workers/quality-daemon/coverage-delta.js +135 -0
- package/dist/workers/quality-daemon/git-watcher.d.ts +51 -0
- package/dist/workers/quality-daemon/git-watcher.js +209 -0
- package/dist/workers/quality-daemon/index.d.ts +119 -0
- package/dist/workers/quality-daemon/index.js +343 -0
- package/dist/workers/quality-daemon/nightly-consolidation.d.ts +74 -0
- package/dist/workers/quality-daemon/nightly-consolidation.js +136 -0
- package/dist/workers/quality-daemon/notification-service.d.ts +67 -0
- package/dist/workers/quality-daemon/notification-service.js +178 -0
- package/dist/workers/quality-daemon/persistent-memory.d.ts +31 -0
- package/dist/workers/quality-daemon/persistent-memory.js +30 -0
- package/dist/workers/quality-daemon/priority-queue.d.ts +97 -0
- package/dist/workers/quality-daemon/priority-queue.js +126 -0
- package/dist/workers/quality-daemon/test-suggester.d.ts +50 -0
- package/dist/workers/quality-daemon/test-suggester.js +121 -0
- package/dist/workers/worker-manager.js +2 -1
- package/package.json +10 -10
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Shared HNSW indexing between QE and claude-flow per ADR-040.
|
|
5
5
|
* Performance: 150x-12,500x faster than linear search
|
|
6
6
|
*
|
|
7
|
+
* When useUnifiedHnsw feature flag is enabled (ADR-071), all namespaces
|
|
8
|
+
* are routed through the unified HnswAdapter backend instead of hnswlib-node.
|
|
9
|
+
*
|
|
7
10
|
* @module integrations/embeddings/index/HNSWIndex
|
|
8
11
|
*/
|
|
9
12
|
import type { IEmbedding, IHNSWConfig, EmbeddingNamespace, ISearchOptions } from '../base/types.js';
|
|
@@ -18,6 +21,8 @@ export declare class HNSWEmbeddingIndex {
|
|
|
18
21
|
private config;
|
|
19
22
|
private initialized;
|
|
20
23
|
private nextId;
|
|
24
|
+
private unifiedAdapters;
|
|
25
|
+
private readonly useUnified;
|
|
21
26
|
constructor(config?: Partial<IHNSWConfig>);
|
|
22
27
|
/**
|
|
23
28
|
* Initialize index for a namespace
|
|
@@ -51,11 +56,13 @@ export declare class HNSWEmbeddingIndex {
|
|
|
51
56
|
metric: string;
|
|
52
57
|
} | null;
|
|
53
58
|
/**
|
|
54
|
-
* Save index to file
|
|
59
|
+
* Save index to file.
|
|
60
|
+
* Not supported when using unified backend (HnswAdapter manages persistence).
|
|
55
61
|
*/
|
|
56
62
|
saveIndex(namespace: EmbeddingNamespace, path: string): Promise<void>;
|
|
57
63
|
/**
|
|
58
|
-
* Load index from file
|
|
64
|
+
* Load index from file.
|
|
65
|
+
* Not supported when using unified backend (HnswAdapter manages persistence).
|
|
59
66
|
*/
|
|
60
67
|
loadIndex(namespace: EmbeddingNamespace, path: string): Promise<void>;
|
|
61
68
|
/**
|
|
@@ -4,12 +4,21 @@
|
|
|
4
4
|
* Shared HNSW indexing between QE and claude-flow per ADR-040.
|
|
5
5
|
* Performance: 150x-12,500x faster than linear search
|
|
6
6
|
*
|
|
7
|
+
* When useUnifiedHnsw feature flag is enabled (ADR-071), all namespaces
|
|
8
|
+
* are routed through the unified HnswAdapter backend instead of hnswlib-node.
|
|
9
|
+
*
|
|
7
10
|
* @module integrations/embeddings/index/HNSWIndex
|
|
8
11
|
*/
|
|
9
12
|
// ESM/CJS interop: hnswlib-node is CommonJS, we import via default export
|
|
10
13
|
// This pattern matches real-qe-reasoning-bank.ts for consistency
|
|
11
14
|
import hnswlib from 'hnswlib-node';
|
|
12
15
|
const { HierarchicalNSW } = hnswlib;
|
|
16
|
+
// ADR-071 Phase 2C: Always use unified HnswAdapter backend.
|
|
17
|
+
// The hnswlib-node legacy path below is retained as dead code for
|
|
18
|
+
// emergency rollback only — production always takes the adapter path.
|
|
19
|
+
function isUnifiedHnswActive() {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
13
22
|
/**
|
|
14
23
|
* HNSW index manager
|
|
15
24
|
*
|
|
@@ -21,6 +30,9 @@ export class HNSWEmbeddingIndex {
|
|
|
21
30
|
config;
|
|
22
31
|
initialized;
|
|
23
32
|
nextId;
|
|
33
|
+
// ADR-071: Unified backend adapters per namespace (when useUnifiedHnsw=true)
|
|
34
|
+
unifiedAdapters = null;
|
|
35
|
+
useUnified;
|
|
24
36
|
constructor(config = {}) {
|
|
25
37
|
this.config = {
|
|
26
38
|
M: config.M || 16,
|
|
@@ -33,6 +45,10 @@ export class HNSWEmbeddingIndex {
|
|
|
33
45
|
this.indexes = new Map();
|
|
34
46
|
this.initialized = new Set();
|
|
35
47
|
this.nextId = new Map();
|
|
48
|
+
this.useUnified = isUnifiedHnswActive();
|
|
49
|
+
if (this.useUnified) {
|
|
50
|
+
this.unifiedAdapters = new Map();
|
|
51
|
+
}
|
|
36
52
|
}
|
|
37
53
|
/**
|
|
38
54
|
* Initialize index for a namespace
|
|
@@ -41,6 +57,28 @@ export class HNSWEmbeddingIndex {
|
|
|
41
57
|
if (this.initialized.has(namespace)) {
|
|
42
58
|
return;
|
|
43
59
|
}
|
|
60
|
+
// ADR-071: Route through unified HnswAdapter when flag is enabled
|
|
61
|
+
if (this.useUnified && this.unifiedAdapters) {
|
|
62
|
+
try {
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
64
|
+
const { HnswAdapter } = require('../../../kernel/hnsw-adapter.js');
|
|
65
|
+
const adapter = new HnswAdapter(`embedding-${namespace}`, {
|
|
66
|
+
dimensions: this.config.dimension,
|
|
67
|
+
M: this.config.M,
|
|
68
|
+
efConstruction: this.config.efConstruction,
|
|
69
|
+
efSearch: this.config.efSearch,
|
|
70
|
+
metric: this.config.metric === 'dotproduct' ? 'cosine' : this.config.metric,
|
|
71
|
+
});
|
|
72
|
+
this.unifiedAdapters.set(namespace, adapter);
|
|
73
|
+
this.initialized.add(namespace);
|
|
74
|
+
this.nextId.set(namespace, 0);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Fall through to hnswlib-node
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Legacy path: hnswlib-node
|
|
44
82
|
// Map our metric names to hnswlib-node space names
|
|
45
83
|
const spaceMap = {
|
|
46
84
|
'cosine': 'cosine',
|
|
@@ -66,14 +104,23 @@ export class HNSWEmbeddingIndex {
|
|
|
66
104
|
if (!this.initialized.has(namespace)) {
|
|
67
105
|
this.initializeIndex(namespace);
|
|
68
106
|
}
|
|
69
|
-
const index = this.indexes.get(namespace);
|
|
70
|
-
// Convert vector to float array
|
|
71
|
-
const vector = this.toFloatArray(embedding.vector);
|
|
72
107
|
// Use provided ID or auto-increment
|
|
73
108
|
const actualId = id ?? this.nextId.get(namespace);
|
|
74
109
|
if (id === undefined) {
|
|
75
110
|
this.nextId.set(namespace, actualId + 1);
|
|
76
111
|
}
|
|
112
|
+
// ADR-071: Route through unified backend
|
|
113
|
+
const adapter = this.unifiedAdapters?.get(namespace);
|
|
114
|
+
if (adapter) {
|
|
115
|
+
const vector = embedding.vector instanceof Float32Array
|
|
116
|
+
? embedding.vector
|
|
117
|
+
: new Float32Array(this.toFloatArray(embedding.vector));
|
|
118
|
+
adapter.add(actualId, vector);
|
|
119
|
+
return actualId;
|
|
120
|
+
}
|
|
121
|
+
// Legacy path
|
|
122
|
+
const index = this.indexes.get(namespace);
|
|
123
|
+
const vector = this.toFloatArray(embedding.vector);
|
|
77
124
|
index.addPoint(vector, actualId);
|
|
78
125
|
return actualId;
|
|
79
126
|
}
|
|
@@ -81,33 +128,8 @@ export class HNSWEmbeddingIndex {
|
|
|
81
128
|
* Add multiple embeddings to index
|
|
82
129
|
*/
|
|
83
130
|
addEmbeddingsBatch(embeddings) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const byNamespace = new Map();
|
|
87
|
-
for (const item of embeddings) {
|
|
88
|
-
const ns = item.embedding.namespace;
|
|
89
|
-
if (!byNamespace.has(ns)) {
|
|
90
|
-
byNamespace.set(ns, []);
|
|
91
|
-
}
|
|
92
|
-
byNamespace.get(ns).push(item);
|
|
93
|
-
}
|
|
94
|
-
// Add to each namespace's index
|
|
95
|
-
for (const [namespace, items] of byNamespace.entries()) {
|
|
96
|
-
if (!this.initialized.has(namespace)) {
|
|
97
|
-
this.initializeIndex(namespace);
|
|
98
|
-
}
|
|
99
|
-
const index = this.indexes.get(namespace);
|
|
100
|
-
for (const item of items) {
|
|
101
|
-
const vector = this.toFloatArray(item.embedding.vector);
|
|
102
|
-
const actualId = item.id ?? this.nextId.get(namespace);
|
|
103
|
-
if (item.id === undefined) {
|
|
104
|
-
this.nextId.set(namespace, actualId + 1);
|
|
105
|
-
}
|
|
106
|
-
index.addPoint(vector, actualId);
|
|
107
|
-
ids.push(actualId);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return ids;
|
|
131
|
+
// ADR-071: Route each item through addEmbedding() which handles unified routing
|
|
132
|
+
return embeddings.map(item => this.addEmbedding(item.embedding, item.id));
|
|
111
133
|
}
|
|
112
134
|
/**
|
|
113
135
|
* Search for similar embeddings
|
|
@@ -117,11 +139,22 @@ export class HNSWEmbeddingIndex {
|
|
|
117
139
|
if (!this.initialized.has(namespace)) {
|
|
118
140
|
return [];
|
|
119
141
|
}
|
|
120
|
-
const index = this.indexes.get(namespace);
|
|
121
142
|
const k = options.limit || 10;
|
|
122
|
-
//
|
|
143
|
+
// ADR-071: Route through unified backend
|
|
144
|
+
const adapter = this.unifiedAdapters?.get(namespace);
|
|
145
|
+
if (adapter) {
|
|
146
|
+
const queryVector = query.vector instanceof Float32Array
|
|
147
|
+
? query.vector
|
|
148
|
+
: new Float32Array(this.toFloatArray(query.vector));
|
|
149
|
+
const results = adapter.search(queryVector, k);
|
|
150
|
+
return results.map(r => ({
|
|
151
|
+
id: r.id,
|
|
152
|
+
distance: 1 - r.score, // convert similarity to distance
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
// Legacy path
|
|
156
|
+
const index = this.indexes.get(namespace);
|
|
123
157
|
const queryVector = this.toFloatArray(query.vector);
|
|
124
|
-
// Search
|
|
125
158
|
const result = index.searchKnn(queryVector, k);
|
|
126
159
|
// Convert hnswlib-node result format to our format
|
|
127
160
|
return result.neighbors.map((id, i) => ({
|
|
@@ -136,6 +169,16 @@ export class HNSWEmbeddingIndex {
|
|
|
136
169
|
if (!this.initialized.has(namespace)) {
|
|
137
170
|
return null;
|
|
138
171
|
}
|
|
172
|
+
// ADR-071: Use unified adapter stats
|
|
173
|
+
const adapter = this.unifiedAdapters?.get(namespace);
|
|
174
|
+
if (adapter) {
|
|
175
|
+
return {
|
|
176
|
+
size: adapter.size(),
|
|
177
|
+
maxElements: 10000,
|
|
178
|
+
dimension: adapter.dimensions(),
|
|
179
|
+
metric: this.config.metric,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
139
182
|
const index = this.indexes.get(namespace);
|
|
140
183
|
return {
|
|
141
184
|
size: index.getCurrentCount(), // Note: This may not be available in all versions
|
|
@@ -145,19 +188,33 @@ export class HNSWEmbeddingIndex {
|
|
|
145
188
|
};
|
|
146
189
|
}
|
|
147
190
|
/**
|
|
148
|
-
* Save index to file
|
|
191
|
+
* Save index to file.
|
|
192
|
+
* Not supported when using unified backend (HnswAdapter manages persistence).
|
|
149
193
|
*/
|
|
150
194
|
async saveIndex(namespace, path) {
|
|
151
195
|
if (!this.initialized.has(namespace)) {
|
|
152
196
|
throw new Error(`Namespace ${namespace} not initialized`);
|
|
153
197
|
}
|
|
198
|
+
// ADR-071: Unified backend manages its own persistence
|
|
199
|
+
if (this.unifiedAdapters?.has(namespace)) {
|
|
200
|
+
console.warn(`[HNSWEmbeddingIndex] saveIndex() is a no-op for namespace '${namespace}' — ` +
|
|
201
|
+
`unified HnswAdapter manages persistence internally.`);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
154
204
|
const index = this.indexes.get(namespace);
|
|
155
205
|
await index.writeIndex(path);
|
|
156
206
|
}
|
|
157
207
|
/**
|
|
158
|
-
* Load index from file
|
|
208
|
+
* Load index from file.
|
|
209
|
+
* Not supported when using unified backend (HnswAdapter manages persistence).
|
|
159
210
|
*/
|
|
160
211
|
async loadIndex(namespace, path) {
|
|
212
|
+
// ADR-071: Unified backend manages its own persistence
|
|
213
|
+
if (this.useUnified) {
|
|
214
|
+
console.warn(`[HNSWEmbeddingIndex] loadIndex() is a no-op for namespace '${namespace}' — ` +
|
|
215
|
+
`unified HnswAdapter manages persistence internally. Initialize via initializeIndex() instead.`);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
161
218
|
const spaceMap = {
|
|
162
219
|
'cosine': 'cosine',
|
|
163
220
|
'euclidean': 'l2',
|
|
@@ -174,6 +231,12 @@ export class HNSWEmbeddingIndex {
|
|
|
174
231
|
*/
|
|
175
232
|
clearIndex(namespace) {
|
|
176
233
|
if (this.initialized.has(namespace)) {
|
|
234
|
+
// ADR-071: Clear unified adapter if present
|
|
235
|
+
const adapter = this.unifiedAdapters?.get(namespace);
|
|
236
|
+
if (adapter) {
|
|
237
|
+
adapter.clear?.();
|
|
238
|
+
this.unifiedAdapters.delete(namespace);
|
|
239
|
+
}
|
|
177
240
|
this.indexes.delete(namespace);
|
|
178
241
|
this.initialized.delete(namespace);
|
|
179
242
|
this.nextId.delete(namespace);
|
|
@@ -183,6 +246,13 @@ export class HNSWEmbeddingIndex {
|
|
|
183
246
|
* Clear all indexes
|
|
184
247
|
*/
|
|
185
248
|
clearAll() {
|
|
249
|
+
// ADR-071: Clear all unified adapters
|
|
250
|
+
if (this.unifiedAdapters) {
|
|
251
|
+
for (const adapter of this.unifiedAdapters.values()) {
|
|
252
|
+
adapter.clear?.();
|
|
253
|
+
}
|
|
254
|
+
this.unifiedAdapters.clear();
|
|
255
|
+
}
|
|
186
256
|
this.indexes.clear();
|
|
187
257
|
this.initialized.clear();
|
|
188
258
|
this.nextId.clear();
|
|
@@ -263,6 +333,11 @@ export class HNSWEmbeddingIndex {
|
|
|
263
333
|
if (!this.initialized.has(namespace)) {
|
|
264
334
|
return 0;
|
|
265
335
|
}
|
|
336
|
+
// ADR-071: Use unified adapter size when available
|
|
337
|
+
const adapter = this.unifiedAdapters?.get(namespace);
|
|
338
|
+
if (adapter) {
|
|
339
|
+
return adapter.size();
|
|
340
|
+
}
|
|
266
341
|
return this.nextId.get(namespace) || 0;
|
|
267
342
|
}
|
|
268
343
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface CognitiveRoutingConfig {
|
|
2
|
+
predictionWindowSize: number;
|
|
3
|
+
compressionThreshold: number;
|
|
4
|
+
maxConcurrentStreams: number;
|
|
5
|
+
oscillationFrequencyMs: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RoutedMessage {
|
|
8
|
+
streamId: string;
|
|
9
|
+
senderId: string;
|
|
10
|
+
receiverId: string;
|
|
11
|
+
payload: unknown;
|
|
12
|
+
compressed: boolean;
|
|
13
|
+
originalSize: number;
|
|
14
|
+
compressedSize: number;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
}
|
|
17
|
+
export interface RoutingStats {
|
|
18
|
+
totalMessages: number;
|
|
19
|
+
compressedMessages: number;
|
|
20
|
+
bandwidthSavedBytes: number;
|
|
21
|
+
bandwidthReductionPercent: number;
|
|
22
|
+
activeStreams: number;
|
|
23
|
+
}
|
|
24
|
+
/** Sliding-window predictor: predicts next payload as copy of last seen. */
|
|
25
|
+
export declare class MessagePredictor {
|
|
26
|
+
private readonly windowSize;
|
|
27
|
+
private readonly windows;
|
|
28
|
+
constructor(windowSize: number);
|
|
29
|
+
predict(streamId: string): Record<string, unknown> | null;
|
|
30
|
+
record(streamId: string, payload: unknown): void;
|
|
31
|
+
removeStream(streamId: string): void;
|
|
32
|
+
}
|
|
33
|
+
/** Round-robin multiplexer for concurrent message streams. */
|
|
34
|
+
export declare class OscillatoryRouter {
|
|
35
|
+
private readonly maxStreams;
|
|
36
|
+
readonly cycleMs: number;
|
|
37
|
+
private readonly streamIds;
|
|
38
|
+
private currentIndex;
|
|
39
|
+
constructor(maxStreams: number, cycleMs: number);
|
|
40
|
+
addStream(streamId: string): boolean;
|
|
41
|
+
removeStream(streamId: string): boolean;
|
|
42
|
+
nextStream(): string | null;
|
|
43
|
+
getActiveStreams(): string[];
|
|
44
|
+
get activeCount(): number;
|
|
45
|
+
}
|
|
46
|
+
/** Combines MessagePredictor + OscillatoryRouter for bandwidth-efficient routing. */
|
|
47
|
+
export declare class CognitiveRouter {
|
|
48
|
+
private readonly config;
|
|
49
|
+
private readonly predictor;
|
|
50
|
+
private readonly router;
|
|
51
|
+
private readonly lastPayloads;
|
|
52
|
+
private totalMessages;
|
|
53
|
+
private compressedMessages;
|
|
54
|
+
private totalOriginalBytes;
|
|
55
|
+
private totalCompressedBytes;
|
|
56
|
+
constructor(config?: Partial<CognitiveRoutingConfig>);
|
|
57
|
+
send(streamId: string, senderId: string, receiverId: string, payload: unknown): RoutedMessage;
|
|
58
|
+
receive(message: RoutedMessage): unknown;
|
|
59
|
+
getStats(): RoutingStats;
|
|
60
|
+
addStream(streamId: string): void;
|
|
61
|
+
removeStream(streamId: string): void;
|
|
62
|
+
}
|
|
63
|
+
/** Create a CognitiveRouter if the feature flag is enabled, otherwise null. */
|
|
64
|
+
export declare function createCognitiveRouter(config?: Partial<CognitiveRoutingConfig>): CognitiveRouter | null;
|
|
65
|
+
/** Check if Cognitive Routing feature flag is enabled. */
|
|
66
|
+
export declare function isCognitiveRoutingEnabled(): boolean;
|
|
67
|
+
//# sourceMappingURL=cognitive-routing.d.ts.map
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R13: Cognitive Routing — Predictive Coding for Agent Communication
|
|
3
|
+
*
|
|
4
|
+
* Bandwidth reduction via sliding-window prediction + delta-only transmission.
|
|
5
|
+
* Oscillatory routing multiplexes concurrent message streams round-robin.
|
|
6
|
+
* TypeScript-only; no external dependencies.
|
|
7
|
+
*
|
|
8
|
+
* @module integrations/ruvector/cognitive-routing
|
|
9
|
+
*/
|
|
10
|
+
import { getRuVectorFeatureFlags } from './feature-flags.js';
|
|
11
|
+
const DEFAULT_CONFIG = {
|
|
12
|
+
predictionWindowSize: 10, compressionThreshold: 0.3,
|
|
13
|
+
maxConcurrentStreams: 8, oscillationFrequencyMs: 100,
|
|
14
|
+
};
|
|
15
|
+
function estimateSize(value) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.stringify(value).length;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function computeDelta(predicted, actual) {
|
|
24
|
+
const delta = {};
|
|
25
|
+
let hasChanges = false;
|
|
26
|
+
for (const key of Object.keys(actual)) {
|
|
27
|
+
if (JSON.stringify(predicted[key]) !== JSON.stringify(actual[key])) {
|
|
28
|
+
delta[key] = actual[key];
|
|
29
|
+
hasChanges = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const key of Object.keys(predicted)) {
|
|
33
|
+
if (!(key in actual)) {
|
|
34
|
+
delta[key] = undefined;
|
|
35
|
+
hasChanges = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return hasChanges ? delta : null;
|
|
39
|
+
}
|
|
40
|
+
function applyDelta(predicted, delta) {
|
|
41
|
+
const result = { ...predicted };
|
|
42
|
+
for (const [key, value] of Object.entries(delta)) {
|
|
43
|
+
if (value === undefined)
|
|
44
|
+
delete result[key];
|
|
45
|
+
else
|
|
46
|
+
result[key] = value;
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
/** Sliding-window predictor: predicts next payload as copy of last seen. */
|
|
51
|
+
export class MessagePredictor {
|
|
52
|
+
windowSize;
|
|
53
|
+
windows = new Map();
|
|
54
|
+
constructor(windowSize) { this.windowSize = Math.max(1, windowSize); }
|
|
55
|
+
predict(streamId) {
|
|
56
|
+
const w = this.windows.get(streamId);
|
|
57
|
+
if (!w || w.length === 0)
|
|
58
|
+
return null;
|
|
59
|
+
const last = w[w.length - 1];
|
|
60
|
+
if (typeof last !== 'object' || last === null || Array.isArray(last))
|
|
61
|
+
return null;
|
|
62
|
+
return { ...last };
|
|
63
|
+
}
|
|
64
|
+
record(streamId, payload) {
|
|
65
|
+
let w = this.windows.get(streamId);
|
|
66
|
+
if (!w) {
|
|
67
|
+
w = [];
|
|
68
|
+
this.windows.set(streamId, w);
|
|
69
|
+
}
|
|
70
|
+
w.push(payload);
|
|
71
|
+
if (w.length > this.windowSize)
|
|
72
|
+
w.shift();
|
|
73
|
+
}
|
|
74
|
+
removeStream(streamId) { this.windows.delete(streamId); }
|
|
75
|
+
}
|
|
76
|
+
/** Round-robin multiplexer for concurrent message streams. */
|
|
77
|
+
export class OscillatoryRouter {
|
|
78
|
+
maxStreams;
|
|
79
|
+
cycleMs;
|
|
80
|
+
streamIds = [];
|
|
81
|
+
currentIndex = 0;
|
|
82
|
+
constructor(maxStreams, cycleMs) {
|
|
83
|
+
this.maxStreams = Math.max(1, maxStreams);
|
|
84
|
+
this.cycleMs = Math.max(1, cycleMs);
|
|
85
|
+
}
|
|
86
|
+
addStream(streamId) {
|
|
87
|
+
if (this.streamIds.includes(streamId) || this.streamIds.length >= this.maxStreams)
|
|
88
|
+
return false;
|
|
89
|
+
this.streamIds.push(streamId);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
removeStream(streamId) {
|
|
93
|
+
const idx = this.streamIds.indexOf(streamId);
|
|
94
|
+
if (idx === -1)
|
|
95
|
+
return false;
|
|
96
|
+
this.streamIds.splice(idx, 1);
|
|
97
|
+
if (this.currentIndex >= this.streamIds.length)
|
|
98
|
+
this.currentIndex = 0;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
nextStream() {
|
|
102
|
+
if (this.streamIds.length === 0)
|
|
103
|
+
return null;
|
|
104
|
+
const s = this.streamIds[this.currentIndex];
|
|
105
|
+
this.currentIndex = (this.currentIndex + 1) % this.streamIds.length;
|
|
106
|
+
return s;
|
|
107
|
+
}
|
|
108
|
+
getActiveStreams() { return [...this.streamIds]; }
|
|
109
|
+
get activeCount() { return this.streamIds.length; }
|
|
110
|
+
}
|
|
111
|
+
/** Combines MessagePredictor + OscillatoryRouter for bandwidth-efficient routing. */
|
|
112
|
+
export class CognitiveRouter {
|
|
113
|
+
config;
|
|
114
|
+
predictor;
|
|
115
|
+
router;
|
|
116
|
+
lastPayloads = new Map();
|
|
117
|
+
totalMessages = 0;
|
|
118
|
+
compressedMessages = 0;
|
|
119
|
+
totalOriginalBytes = 0;
|
|
120
|
+
totalCompressedBytes = 0;
|
|
121
|
+
constructor(config) {
|
|
122
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
123
|
+
this.predictor = new MessagePredictor(this.config.predictionWindowSize);
|
|
124
|
+
this.router = new OscillatoryRouter(this.config.maxConcurrentStreams, this.config.oscillationFrequencyMs);
|
|
125
|
+
}
|
|
126
|
+
send(streamId, senderId, receiverId, payload) {
|
|
127
|
+
this.totalMessages++;
|
|
128
|
+
const originalSize = estimateSize(payload);
|
|
129
|
+
this.totalOriginalBytes += originalSize;
|
|
130
|
+
let compressed = false;
|
|
131
|
+
let transmittedPayload = payload;
|
|
132
|
+
let compressedSize = originalSize;
|
|
133
|
+
if (typeof payload === 'object' && payload !== null && !Array.isArray(payload)) {
|
|
134
|
+
const prediction = this.predictor.predict(streamId);
|
|
135
|
+
if (prediction) {
|
|
136
|
+
const delta = computeDelta(prediction, payload);
|
|
137
|
+
if (delta) {
|
|
138
|
+
const deltaSize = estimateSize(delta);
|
|
139
|
+
if (1 - deltaSize / Math.max(originalSize, 1) >= this.config.compressionThreshold) {
|
|
140
|
+
transmittedPayload = { __delta: true, __changes: delta };
|
|
141
|
+
compressedSize = estimateSize(transmittedPayload);
|
|
142
|
+
compressed = true;
|
|
143
|
+
this.compressedMessages++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
transmittedPayload = { __delta: true, __changes: {} };
|
|
148
|
+
compressedSize = estimateSize(transmittedPayload);
|
|
149
|
+
compressed = true;
|
|
150
|
+
this.compressedMessages++;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
this.totalCompressedBytes += compressedSize;
|
|
155
|
+
this.predictor.record(streamId, payload);
|
|
156
|
+
this.lastPayloads.set(streamId, payload);
|
|
157
|
+
return { streamId, senderId, receiverId, payload: transmittedPayload,
|
|
158
|
+
compressed, originalSize, compressedSize, timestamp: Date.now() };
|
|
159
|
+
}
|
|
160
|
+
receive(message) {
|
|
161
|
+
if (!message.compressed || typeof message.payload !== 'object' || message.payload === null) {
|
|
162
|
+
this.lastPayloads.set(message.streamId, message.payload);
|
|
163
|
+
this.predictor.record(message.streamId, message.payload);
|
|
164
|
+
return message.payload;
|
|
165
|
+
}
|
|
166
|
+
const envelope = message.payload;
|
|
167
|
+
if (!envelope.__delta) {
|
|
168
|
+
this.lastPayloads.set(message.streamId, message.payload);
|
|
169
|
+
this.predictor.record(message.streamId, message.payload);
|
|
170
|
+
return message.payload;
|
|
171
|
+
}
|
|
172
|
+
const prediction = this.predictor.predict(message.streamId);
|
|
173
|
+
const changes = (envelope.__changes ?? {});
|
|
174
|
+
if (!prediction)
|
|
175
|
+
return changes;
|
|
176
|
+
const reconstructed = applyDelta(prediction, changes);
|
|
177
|
+
this.predictor.record(message.streamId, reconstructed);
|
|
178
|
+
this.lastPayloads.set(message.streamId, reconstructed);
|
|
179
|
+
return reconstructed;
|
|
180
|
+
}
|
|
181
|
+
getStats() {
|
|
182
|
+
const saved = this.totalOriginalBytes - this.totalCompressedBytes;
|
|
183
|
+
return {
|
|
184
|
+
totalMessages: this.totalMessages, compressedMessages: this.compressedMessages,
|
|
185
|
+
bandwidthSavedBytes: Math.max(0, saved),
|
|
186
|
+
bandwidthReductionPercent: this.totalOriginalBytes > 0
|
|
187
|
+
? (Math.max(0, saved) / this.totalOriginalBytes) * 100 : 0,
|
|
188
|
+
activeStreams: this.router.activeCount,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
addStream(streamId) { this.router.addStream(streamId); }
|
|
192
|
+
removeStream(streamId) {
|
|
193
|
+
this.router.removeStream(streamId);
|
|
194
|
+
this.predictor.removeStream(streamId);
|
|
195
|
+
this.lastPayloads.delete(streamId);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** Create a CognitiveRouter if the feature flag is enabled, otherwise null. */
|
|
199
|
+
export function createCognitiveRouter(config) {
|
|
200
|
+
if (!isCognitiveRoutingEnabled())
|
|
201
|
+
return null;
|
|
202
|
+
return new CognitiveRouter(config);
|
|
203
|
+
}
|
|
204
|
+
/** Check if Cognitive Routing feature flag is enabled. */
|
|
205
|
+
export function isCognitiveRoutingEnabled() {
|
|
206
|
+
return getRuVectorFeatureFlags().useCognitiveRouting;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=cognitive-routing.js.map
|
|
@@ -189,6 +189,42 @@ export interface RuVectorFeatureFlags {
|
|
|
189
189
|
* @default true
|
|
190
190
|
*/
|
|
191
191
|
useReasoningQEC: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Enable RVF-backed PatternStore (ADR-066)
|
|
194
|
+
* Replaces SQLite BLOB + in-memory HNSW rebuild with @ruvector/rvf-node
|
|
195
|
+
* persistent HNSW. Eliminates cold-start index rebuild, provides sub-ms
|
|
196
|
+
* search via native SIMD acceleration, and enables COW branching (ADR-067/069).
|
|
197
|
+
* Pattern metadata remains in SQLite; only vector storage moves to RVF.
|
|
198
|
+
* @default false — will flip to true after benchmarks confirm improvement
|
|
199
|
+
*/
|
|
200
|
+
useRVFPatternStore: boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Enable Agent Memory Branching via RVF COW (ADR-067)
|
|
203
|
+
* Each spawned agent gets a lightweight COW-derived .rvf branch file.
|
|
204
|
+
* Agent writes are isolated; successful agents merge back, failed agents
|
|
205
|
+
* discard at zero cost. Requires useRVFPatternStore to be enabled.
|
|
206
|
+
* @default false — will flip to true after benchmarks confirm improvement
|
|
207
|
+
*/
|
|
208
|
+
useAgentMemoryBranching: boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Enable Unified HNSW Provider (ADR-071)
|
|
211
|
+
* Routes all three legacy HNSW implementations (TypeScript, RuvectorFlatIndex,
|
|
212
|
+
* QEGNNEmbeddingIndex) through a single HnswAdapter backend. Eliminates
|
|
213
|
+
* inconsistent search results and triples maintenance burden.
|
|
214
|
+
* @default false — will flip to true after shadow validation confirms <2% divergence
|
|
215
|
+
*/
|
|
216
|
+
useUnifiedHnsw: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* RVF Migration Stage (ADR-072)
|
|
219
|
+
* Controls the gradual migration from SQLite to RVF primary persistence.
|
|
220
|
+
* Stage 0: SQLite only (legacy, no RVF involvement)
|
|
221
|
+
* Stage 1: Hybrid (current — ADR-065, RvfPatternStore for vectors, SQLite for metadata)
|
|
222
|
+
* Stage 2: Dual-write, SQLite source of truth (both engines receive writes, reads from SQLite)
|
|
223
|
+
* Stage 3: Dual-write, RVF source of truth (both engines receive writes, reads from RVF)
|
|
224
|
+
* Stage 4: RVF primary, SQLite escape hatch (writes to RVF only, SQLite for fallback)
|
|
225
|
+
* @default 1 — current hybrid
|
|
226
|
+
*/
|
|
227
|
+
rvfMigrationStage: 0 | 1 | 2 | 3 | 4;
|
|
192
228
|
/**
|
|
193
229
|
* Enable HDC Pattern Fingerprinting (R1, ADR-087)
|
|
194
230
|
* Uses 10,000-bit binary hypervectors with XOR binding for O(1) compositional
|
|
@@ -301,6 +337,24 @@ export interface RuVectorFeatureFlags {
|
|
|
301
337
|
* @default false
|
|
302
338
|
*/
|
|
303
339
|
useGrangerCausality: boolean;
|
|
340
|
+
/**
|
|
341
|
+
* Enable Cognitive Routing (R13, ADR-087)
|
|
342
|
+
* Predictive coding for agent communication bandwidth reduction. Predicts
|
|
343
|
+
* next message from sliding window context and sends only the delta.
|
|
344
|
+
* Oscillatory routing multiplexes concurrent message streams.
|
|
345
|
+
* Consumer: agent communication layer
|
|
346
|
+
* @default false
|
|
347
|
+
*/
|
|
348
|
+
useCognitiveRouting: boolean;
|
|
349
|
+
/**
|
|
350
|
+
* Enable Hyperbolic HNSW (R14, ADR-087)
|
|
351
|
+
* Poincare ball embeddings for hierarchical data. Maps tree-structured data
|
|
352
|
+
* (module hierarchies, test suite trees) into hyperbolic space where distances
|
|
353
|
+
* naturally preserve parent-child relationships.
|
|
354
|
+
* Consumer: code-intelligence hierarchical search
|
|
355
|
+
* @default false
|
|
356
|
+
*/
|
|
357
|
+
useHyperbolicHnsw: boolean;
|
|
304
358
|
}
|
|
305
359
|
/**
|
|
306
360
|
* Default feature flags - all enabled by default
|
|
@@ -453,6 +507,26 @@ export declare function isCoherenceActionGateEnabled(): boolean;
|
|
|
453
507
|
* @returns true if useReasoningQEC flag is set
|
|
454
508
|
*/
|
|
455
509
|
export declare function isReasoningQECEnabled(): boolean;
|
|
510
|
+
/**
|
|
511
|
+
* Check if RVF-backed PatternStore is enabled (ADR-066)
|
|
512
|
+
* @returns true if useRVFPatternStore flag is set
|
|
513
|
+
*/
|
|
514
|
+
export declare function isRVFPatternStoreEnabled(): boolean;
|
|
515
|
+
/**
|
|
516
|
+
* Check if Agent Memory Branching is enabled (ADR-067)
|
|
517
|
+
* @returns true if useAgentMemoryBranching flag is set
|
|
518
|
+
*/
|
|
519
|
+
export declare function isAgentMemoryBranchingEnabled(): boolean;
|
|
520
|
+
/**
|
|
521
|
+
* Check if Unified HNSW Provider is enabled (ADR-071)
|
|
522
|
+
* @returns true if useUnifiedHnsw flag is set
|
|
523
|
+
*/
|
|
524
|
+
export declare function isUnifiedHnswEnabled(): boolean;
|
|
525
|
+
/**
|
|
526
|
+
* Get the current RVF migration stage (ADR-072)
|
|
527
|
+
* @returns 0-4 representing the migration stage
|
|
528
|
+
*/
|
|
529
|
+
export declare function getRvfMigrationStage(): 0 | 1 | 2 | 3 | 4;
|
|
456
530
|
/**
|
|
457
531
|
* Check if HDC Pattern Fingerprinting is enabled (R1, ADR-087)
|
|
458
532
|
* @returns true if useHDCFingerprinting flag is set
|
|
@@ -518,6 +592,16 @@ export declare function isEpropOnlineLearningEnabled(): boolean;
|
|
|
518
592
|
* @returns true if useGrangerCausality flag is set
|
|
519
593
|
*/
|
|
520
594
|
export declare function isGrangerCausalityEnabled(): boolean;
|
|
595
|
+
/**
|
|
596
|
+
* Check if Cognitive Routing is enabled (R13, ADR-087)
|
|
597
|
+
* @returns true if useCognitiveRouting flag is set
|
|
598
|
+
*/
|
|
599
|
+
export declare function isCognitiveRoutingEnabled(): boolean;
|
|
600
|
+
/**
|
|
601
|
+
* Check if Hyperbolic HNSW is enabled (R14, ADR-087)
|
|
602
|
+
* @returns true if useHyperbolicHnsw flag is set
|
|
603
|
+
*/
|
|
604
|
+
export declare function isHyperbolicHnswEnabled(): boolean;
|
|
521
605
|
/**
|
|
522
606
|
* Initialize feature flags from environment variables
|
|
523
607
|
*
|