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
package/dist/mcp/entry.js
CHANGED
|
@@ -20,6 +20,7 @@ import { bootstrapTokenTracking, shutdownTokenTracking } from '../init/token-boo
|
|
|
20
20
|
import { initializeExperienceCapture, stopCleanupTimer } from '../learning/experience-capture-middleware.js';
|
|
21
21
|
import { createInfraHealingOrchestratorSync, ShellCommandRunner } from '../strange-loop/infra-healing/index.js';
|
|
22
22
|
import { setInfraHealingOrchestrator, handleFleetInit } from './handlers/index.js';
|
|
23
|
+
import { parallelPrefetch } from '../boot/parallel-prefetch.js';
|
|
23
24
|
import { readFileSync } from 'node:fs';
|
|
24
25
|
import { resolve, dirname } from 'node:path';
|
|
25
26
|
import { fileURLToPath } from 'node:url';
|
|
@@ -31,11 +32,18 @@ async function main() {
|
|
|
31
32
|
// Output startup message BEFORE suppressing stderr (Claude Code health check needs this)
|
|
32
33
|
const version = pkg.version;
|
|
33
34
|
process.stderr.write(`[agentic-qe-v3] MCP server starting v${version}\n`);
|
|
34
|
-
// Handle graceful shutdown
|
|
35
|
+
// Handle graceful shutdown (includes QualityDaemon)
|
|
35
36
|
const shutdownDaemon = async () => {
|
|
36
37
|
try {
|
|
37
38
|
const { getDaemon } = await import('../workers/daemon.js');
|
|
38
|
-
|
|
39
|
+
const daemon = getDaemon();
|
|
40
|
+
// Stop quality daemon first (if started)
|
|
41
|
+
try {
|
|
42
|
+
const qd = daemon.getQualityDaemon();
|
|
43
|
+
await qd.stop();
|
|
44
|
+
}
|
|
45
|
+
catch { /* not started */ }
|
|
46
|
+
await daemon.stop();
|
|
39
47
|
}
|
|
40
48
|
catch { /* ignore */ }
|
|
41
49
|
};
|
|
@@ -98,81 +106,99 @@ async function main() {
|
|
|
98
106
|
return true;
|
|
99
107
|
});
|
|
100
108
|
try {
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
109
|
+
// IMP-06: Run independent init tasks in parallel via parallelPrefetch.
|
|
110
|
+
// Token tracking, experience capture, infra-healing, and fleet init are
|
|
111
|
+
// all independent — total startup time is bounded by the slowest task
|
|
112
|
+
// rather than the sum of all tasks.
|
|
113
|
+
originalStderrWrite('[MCP] Initializing subsystems in parallel...\n');
|
|
114
|
+
const prefetchResult = await parallelPrefetch([
|
|
115
|
+
{
|
|
116
|
+
// ADR-042: Initialize token tracking and optimization
|
|
117
|
+
name: 'token-tracking',
|
|
118
|
+
fn: async () => {
|
|
119
|
+
await bootstrapTokenTracking({
|
|
120
|
+
enableOptimization: true,
|
|
121
|
+
enablePersistence: true,
|
|
122
|
+
verbose: process.env.AQE_VERBOSE === 'true',
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
// ADR-051: Initialize experience capture and unified memory BEFORE server starts.
|
|
128
|
+
// This ensures all tool invocations (domain, memory, core) write to v3 memory.db
|
|
129
|
+
// from the first request, rather than lazy-initializing on first domain tool call.
|
|
130
|
+
name: 'experience-capture',
|
|
131
|
+
fn: async () => {
|
|
132
|
+
await initializeExperienceCapture();
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
// ADR-057: Initialize infrastructure self-healing
|
|
137
|
+
name: 'infra-healing',
|
|
138
|
+
fn: async () => {
|
|
139
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
140
|
+
const __dirname = dirname(__filename);
|
|
141
|
+
const playbookPath = resolve(__dirname, '../strange-loop/infra-healing/default-playbook.yaml');
|
|
142
|
+
let playbookContent;
|
|
143
|
+
try {
|
|
144
|
+
playbookContent = readFileSync(playbookPath, 'utf-8');
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Fallback for bundled environments where the YAML may not be at the resolved path
|
|
148
|
+
playbookContent = [
|
|
149
|
+
'services:',
|
|
150
|
+
' postgres:',
|
|
151
|
+
' healthCheck: "pg_isready -h localhost -p 5432"',
|
|
152
|
+
' recover: "echo postgres-recovery-placeholder"',
|
|
153
|
+
' verify: "pg_isready -h localhost -p 5432"',
|
|
154
|
+
' redis:',
|
|
155
|
+
' healthCheck: "redis-cli ping"',
|
|
156
|
+
' recover: "echo redis-recovery-placeholder"',
|
|
157
|
+
' verify: "redis-cli ping"',
|
|
158
|
+
' node:',
|
|
159
|
+
' healthCheck: "node --version"',
|
|
160
|
+
' recover: "echo node-recovery-placeholder"',
|
|
161
|
+
' verify: "node --version"',
|
|
162
|
+
].join('\n');
|
|
163
|
+
}
|
|
164
|
+
if (playbookContent) {
|
|
165
|
+
const infraOrchestrator = createInfraHealingOrchestratorSync({
|
|
166
|
+
commandRunner: new ShellCommandRunner(),
|
|
167
|
+
playbook: playbookContent,
|
|
168
|
+
});
|
|
169
|
+
setInfraHealingOrchestrator(infraOrchestrator);
|
|
170
|
+
originalStderrWrite(`[MCP] Infra-healing ready (${infraOrchestrator.getPlaybook().listServices().length} services)\n`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
originalStderrWrite('[MCP] Infra-healing skipped: no playbook found\n');
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
// Auto-initialize fleet so tools work without requiring fleet_init call
|
|
179
|
+
name: 'fleet-init',
|
|
180
|
+
fn: async () => {
|
|
181
|
+
const fleetResult = await handleFleetInit({
|
|
182
|
+
topology: 'hierarchical',
|
|
183
|
+
maxAgents: 15,
|
|
184
|
+
memoryBackend: 'hybrid',
|
|
185
|
+
lazyLoading: true,
|
|
186
|
+
});
|
|
187
|
+
if (fleetResult.success) {
|
|
188
|
+
originalStderrWrite(`[MCP] Fleet ready: ${fleetResult.data?.fleetId}\n`);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
originalStderrWrite(`[MCP] WARNING: Fleet auto-init failed: ${fleetResult.error}\n`);
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
]);
|
|
196
|
+
// Log prefetch results
|
|
197
|
+
if (prefetchResult.completedTasks.length > 0) {
|
|
198
|
+
originalStderrWrite(`[MCP] Initialized: ${prefetchResult.completedTasks.join(', ')} (${prefetchResult.totalTimeMs.toFixed(0)}ms)\n`);
|
|
152
199
|
}
|
|
153
|
-
|
|
154
|
-
originalStderrWrite(`[MCP] WARNING:
|
|
155
|
-
// Non-fatal — MCP server continues without infra-healing
|
|
156
|
-
}
|
|
157
|
-
// Auto-initialize fleet so tools work without requiring fleet_init call
|
|
158
|
-
originalStderrWrite('[MCP] Auto-initializing fleet...\n');
|
|
159
|
-
try {
|
|
160
|
-
const fleetResult = await handleFleetInit({
|
|
161
|
-
topology: 'hierarchical',
|
|
162
|
-
maxAgents: 15,
|
|
163
|
-
memoryBackend: 'hybrid',
|
|
164
|
-
lazyLoading: true,
|
|
165
|
-
});
|
|
166
|
-
if (fleetResult.success) {
|
|
167
|
-
originalStderrWrite(`[MCP] Fleet ready: ${fleetResult.data?.fleetId}\n`);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
originalStderrWrite(`[MCP] WARNING: Fleet auto-init failed: ${fleetResult.error}\n`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (fleetError) {
|
|
174
|
-
originalStderrWrite(`[MCP] WARNING: Fleet auto-init error: ${fleetError}\n`);
|
|
175
|
-
// Non-fatal — tools will prompt user to call fleet_init manually
|
|
200
|
+
for (const failed of prefetchResult.failedTasks) {
|
|
201
|
+
originalStderrWrite(`[MCP] WARNING: ${failed.name} init failed: ${failed.error}\n`);
|
|
176
202
|
}
|
|
177
203
|
// Start the MCP server
|
|
178
204
|
originalStderrWrite('[MCP] Starting server...\n');
|
|
@@ -181,13 +207,42 @@ async function main() {
|
|
|
181
207
|
version,
|
|
182
208
|
});
|
|
183
209
|
originalStderrWrite('[MCP] Ready\n');
|
|
184
|
-
//
|
|
210
|
+
// IMP-10: Start background workers (heartbeat scheduler, etc.)
|
|
185
211
|
try {
|
|
186
212
|
const { getDaemon } = await import('../workers/daemon.js');
|
|
187
213
|
const daemon = getDaemon({ autoStart: false });
|
|
188
214
|
await daemon.start();
|
|
189
215
|
const status = daemon.getStatus();
|
|
190
216
|
originalStderrWrite(`[MCP] Background workers started (${status.workerManager.totalWorkers} workers)\n`);
|
|
217
|
+
// IMP-10: Start QualityDaemon with persistent memory (Finding 1 & 2 resolution)
|
|
218
|
+
try {
|
|
219
|
+
const { UnifiedMemoryManager } = await import('../kernel/unified-memory.js');
|
|
220
|
+
const { PersistentWorkerMemory } = await import('../workers/quality-daemon/persistent-memory.js');
|
|
221
|
+
const { isPrivateIp } = await import('../hooks/security/ssrf-guard.js');
|
|
222
|
+
const unifiedMemory = await UnifiedMemoryManager.getInstanceAsync();
|
|
223
|
+
const persistentMemory = new PersistentWorkerMemory(unifiedMemory);
|
|
224
|
+
const qualityDaemon = daemon.getQualityDaemon({
|
|
225
|
+
notifications: {
|
|
226
|
+
// IMP-07 SSRF guard: block private IPs in webhook URLs (Finding 5)
|
|
227
|
+
urlValidator: (url) => {
|
|
228
|
+
try {
|
|
229
|
+
const parsed = new URL(url);
|
|
230
|
+
const hostname = parsed.hostname.replace(/^\[|\]$/g, '');
|
|
231
|
+
return !isPrivateIp(hostname);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
await qualityDaemon.start(persistentMemory);
|
|
240
|
+
originalStderrWrite(`[MCP] Quality daemon started\n`);
|
|
241
|
+
}
|
|
242
|
+
catch (qdError) {
|
|
243
|
+
originalStderrWrite(`[MCP] WARNING: Quality daemon failed to start: ${qdError}\n`);
|
|
244
|
+
// Non-fatal — MCP continues without quality daemon
|
|
245
|
+
}
|
|
191
246
|
}
|
|
192
247
|
catch (daemonError) {
|
|
193
248
|
originalStderrWrite(`[MCP] WARNING: Background workers failed to start: ${daemonError}\n`);
|
|
@@ -14,4 +14,5 @@ export { handleValidationPipeline, type ValidationPipelineParams, type Validatio
|
|
|
14
14
|
export { handleHypergraphQuery, type HypergraphQueryParams, type HypergraphQueryResult, } from './hypergraph-handler.js';
|
|
15
15
|
export { handleHeartbeatStatus, handleHeartbeatTrigger, handleHeartbeatLog, type HeartbeatStatusParams, type HeartbeatStatusResult, type HeartbeatTriggerParams, type HeartbeatTriggerResult, type HeartbeatLogParams, type HeartbeatLogResult, } from './heartbeat-handlers.js';
|
|
16
16
|
export { handleCrossPhaseStore, handleCrossPhaseQuery, handleAgentComplete, handlePhaseStart, handlePhaseEnd, handleCrossPhaseStats, handleFormatSignals, handleCrossPhaseCleanup, resetCrossPhaseHandlers, type StoreSignalParams, type StoreSignalResult, type QuerySignalsParams, type QuerySignalsResult, type AgentCompleteParams, type AgentCompleteResult, type PhaseEventParams, type PhaseStartResult, type PhaseEndResult, type CrossPhaseStatsResult, type FormatSignalsParams, type FormatSignalsResult, } from './cross-phase-handlers';
|
|
17
|
+
export { handleMigrationStatus, handleMigrationCheck, handleMigrationPromote, resetMigrationHandlers, type MigrationStatusResult, type MigrationCheckResult, type MigrationPromoteResult, } from './migration-handlers.js';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -30,4 +30,6 @@ export { handleHypergraphQuery, } from './hypergraph-handler.js';
|
|
|
30
30
|
export { handleHeartbeatStatus, handleHeartbeatTrigger, handleHeartbeatLog, } from './heartbeat-handlers.js';
|
|
31
31
|
// Cross-phase handlers
|
|
32
32
|
export { handleCrossPhaseStore, handleCrossPhaseQuery, handleAgentComplete, handlePhaseStart, handlePhaseEnd, handleCrossPhaseStats, handleFormatSignals, handleCrossPhaseCleanup, resetCrossPhaseHandlers, } from './cross-phase-handlers';
|
|
33
|
+
// RVF Migration handlers (ADR-072 Phase 3)
|
|
34
|
+
export { handleMigrationStatus, handleMigrationCheck, handleMigrationPromote, resetMigrationHandlers, } from './migration-handlers.js';
|
|
33
35
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Handlers for RVF Migration (ADR-072 Phase 3)
|
|
3
|
+
*
|
|
4
|
+
* Exposes migration status, consistency checks, and stage promotion
|
|
5
|
+
* via MCP tools for user-facing verification.
|
|
6
|
+
*/
|
|
7
|
+
import { type MigrationStatus } from '../../persistence/rvf-migration-coordinator.js';
|
|
8
|
+
import type { ConsistencyCheckResult } from '../../persistence/rvf-consistency-validator.js';
|
|
9
|
+
import type { StageGateResult } from '../../persistence/rvf-stage-gate.js';
|
|
10
|
+
import type { MigrationStage } from '../../persistence/rvf-migration-adapter.js';
|
|
11
|
+
export interface MigrationStatusResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
data: MigrationStatus | null;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface MigrationCheckResult {
|
|
17
|
+
success: boolean;
|
|
18
|
+
data: ConsistencyCheckResult | null;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface MigrationPromoteResult {
|
|
22
|
+
success: boolean;
|
|
23
|
+
data: {
|
|
24
|
+
promoted: boolean;
|
|
25
|
+
previousStage: MigrationStage;
|
|
26
|
+
newStage: MigrationStage;
|
|
27
|
+
gateResult: StageGateResult;
|
|
28
|
+
} | null;
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Reset for testing */
|
|
32
|
+
export declare function resetMigrationHandlers(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get comprehensive RVF migration status including stage, metrics,
|
|
35
|
+
* consistency history, engine status, and gate evaluation.
|
|
36
|
+
*/
|
|
37
|
+
export declare function handleMigrationStatus(): Promise<MigrationStatusResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Run a consistency check comparing SQLite and RVF search results.
|
|
40
|
+
* Samples random patterns and reports divergences.
|
|
41
|
+
*/
|
|
42
|
+
export declare function handleMigrationCheck(): Promise<MigrationCheckResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Attempt to promote to the next migration stage.
|
|
45
|
+
* Evaluates stage gate criteria and records result in witness chain.
|
|
46
|
+
*
|
|
47
|
+
* @param params.force - Skip gate checks (force promotion)
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleMigrationPromote(params?: {
|
|
50
|
+
force?: boolean;
|
|
51
|
+
}): Promise<MigrationPromoteResult>;
|
|
52
|
+
//# sourceMappingURL=migration-handlers.d.ts.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Handlers for RVF Migration (ADR-072 Phase 3)
|
|
3
|
+
*
|
|
4
|
+
* Exposes migration status, consistency checks, and stage promotion
|
|
5
|
+
* via MCP tools for user-facing verification.
|
|
6
|
+
*/
|
|
7
|
+
import { RvfMigrationCoordinator, } from '../../persistence/rvf-migration-coordinator.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Lazy Coordinator Init
|
|
10
|
+
// ============================================================================
|
|
11
|
+
let coordinator = null;
|
|
12
|
+
async function getCoordinator() {
|
|
13
|
+
if (!coordinator) {
|
|
14
|
+
coordinator = RvfMigrationCoordinator.getInstance();
|
|
15
|
+
await coordinator.initialize();
|
|
16
|
+
}
|
|
17
|
+
return coordinator;
|
|
18
|
+
}
|
|
19
|
+
/** Reset for testing */
|
|
20
|
+
export function resetMigrationHandlers() {
|
|
21
|
+
coordinator = null;
|
|
22
|
+
RvfMigrationCoordinator.resetInstance();
|
|
23
|
+
}
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Handlers
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Get comprehensive RVF migration status including stage, metrics,
|
|
29
|
+
* consistency history, engine status, and gate evaluation.
|
|
30
|
+
*/
|
|
31
|
+
export async function handleMigrationStatus() {
|
|
32
|
+
try {
|
|
33
|
+
const coord = await getCoordinator();
|
|
34
|
+
return { success: true, data: coord.getStatus() };
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
data: null,
|
|
40
|
+
error: err instanceof Error ? err.message : String(err),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run a consistency check comparing SQLite and RVF search results.
|
|
46
|
+
* Samples random patterns and reports divergences.
|
|
47
|
+
*/
|
|
48
|
+
export async function handleMigrationCheck() {
|
|
49
|
+
try {
|
|
50
|
+
const coord = await getCoordinator();
|
|
51
|
+
const result = coord.runConsistencyCheck();
|
|
52
|
+
return { success: true, data: result };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
data: null,
|
|
58
|
+
error: err instanceof Error ? err.message : String(err),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Attempt to promote to the next migration stage.
|
|
64
|
+
* Evaluates stage gate criteria and records result in witness chain.
|
|
65
|
+
*
|
|
66
|
+
* @param params.force - Skip gate checks (force promotion)
|
|
67
|
+
*/
|
|
68
|
+
export async function handleMigrationPromote(params = {}) {
|
|
69
|
+
try {
|
|
70
|
+
const coord = await getCoordinator();
|
|
71
|
+
const { promoted, previousStage, newStage, result } = coord.promote(params.force ?? false);
|
|
72
|
+
return {
|
|
73
|
+
success: true,
|
|
74
|
+
data: { promoted, previousStage, newStage, gateResult: result },
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
data: null,
|
|
81
|
+
error: err instanceof Error ? err.message : String(err),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=migration-handlers.js.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Batch Tool Executor
|
|
3
|
+
*
|
|
4
|
+
* IMP-02: Tool Concurrency Partitioning
|
|
5
|
+
*
|
|
6
|
+
* Enables parallel execution of concurrent-safe tool calls within internal
|
|
7
|
+
* orchestration paths (task_orchestrate, fleet batch ops). Does NOT change
|
|
8
|
+
* the MCP protocol contract — MCP still sends one tool call per request.
|
|
9
|
+
*
|
|
10
|
+
* Strategy:
|
|
11
|
+
* 1. Partition consecutive isConcurrencySafe:true calls into batches
|
|
12
|
+
* 2. Non-safe calls break the batch and run alone, sequentially
|
|
13
|
+
* 3. Each safe batch runs via Promise.all() with a semaphore limiter
|
|
14
|
+
* 4. Results are returned in original input order
|
|
15
|
+
*/
|
|
16
|
+
export interface BatchToolCall {
|
|
17
|
+
name: string;
|
|
18
|
+
handler: () => Promise<unknown>;
|
|
19
|
+
isConcurrencySafe: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface BatchResult {
|
|
22
|
+
results: unknown[];
|
|
23
|
+
parallelBatches: number;
|
|
24
|
+
sequentialCalls: number;
|
|
25
|
+
totalWallTimeMs: number;
|
|
26
|
+
}
|
|
27
|
+
export declare class Semaphore {
|
|
28
|
+
private permits;
|
|
29
|
+
private readonly waiting;
|
|
30
|
+
constructor(permits: number);
|
|
31
|
+
acquire(): Promise<void>;
|
|
32
|
+
release(): void;
|
|
33
|
+
/** Current number of available permits (useful for testing). */
|
|
34
|
+
get available(): number;
|
|
35
|
+
}
|
|
36
|
+
export declare class BatchToolExecutor {
|
|
37
|
+
private readonly maxConcurrency;
|
|
38
|
+
constructor(maxConcurrency?: number);
|
|
39
|
+
/**
|
|
40
|
+
* Execute a batch of tool calls respecting concurrency safety annotations.
|
|
41
|
+
*
|
|
42
|
+
* @returns BatchResult with results in the same order as the input calls.
|
|
43
|
+
*/
|
|
44
|
+
executeBatch(calls: BatchToolCall[]): Promise<BatchResult>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=batch-executor.d.ts.map
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Batch Tool Executor
|
|
3
|
+
*
|
|
4
|
+
* IMP-02: Tool Concurrency Partitioning
|
|
5
|
+
*
|
|
6
|
+
* Enables parallel execution of concurrent-safe tool calls within internal
|
|
7
|
+
* orchestration paths (task_orchestrate, fleet batch ops). Does NOT change
|
|
8
|
+
* the MCP protocol contract — MCP still sends one tool call per request.
|
|
9
|
+
*
|
|
10
|
+
* Strategy:
|
|
11
|
+
* 1. Partition consecutive isConcurrencySafe:true calls into batches
|
|
12
|
+
* 2. Non-safe calls break the batch and run alone, sequentially
|
|
13
|
+
* 3. Each safe batch runs via Promise.all() with a semaphore limiter
|
|
14
|
+
* 4. Results are returned in original input order
|
|
15
|
+
*/
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Semaphore — simple concurrency limiter
|
|
18
|
+
// ============================================================================
|
|
19
|
+
export class Semaphore {
|
|
20
|
+
permits;
|
|
21
|
+
waiting = [];
|
|
22
|
+
constructor(permits) {
|
|
23
|
+
if (permits < 1) {
|
|
24
|
+
throw new Error('Semaphore permits must be >= 1');
|
|
25
|
+
}
|
|
26
|
+
this.permits = permits;
|
|
27
|
+
}
|
|
28
|
+
async acquire() {
|
|
29
|
+
if (this.permits > 0) {
|
|
30
|
+
this.permits--;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
this.waiting.push(resolve);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
release() {
|
|
38
|
+
if (this.waiting.length > 0) {
|
|
39
|
+
const next = this.waiting.shift();
|
|
40
|
+
// Resolve on next microtick to avoid stack issues
|
|
41
|
+
queueMicrotask(next);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.permits++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Current number of available permits (useful for testing). */
|
|
48
|
+
get available() {
|
|
49
|
+
return this.permits;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Partition an array of calls into consecutive segments:
|
|
54
|
+
* - Consecutive safe calls → parallel segment
|
|
55
|
+
* - Each non-safe call → its own sequential segment
|
|
56
|
+
*/
|
|
57
|
+
function partitionCalls(calls) {
|
|
58
|
+
const segments = [];
|
|
59
|
+
let currentSafe = [];
|
|
60
|
+
for (let i = 0; i < calls.length; i++) {
|
|
61
|
+
if (calls[i].isConcurrencySafe) {
|
|
62
|
+
currentSafe.push(i);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Flush any accumulated safe calls as a parallel batch
|
|
66
|
+
if (currentSafe.length > 0) {
|
|
67
|
+
segments.push({ kind: 'parallel', indices: currentSafe });
|
|
68
|
+
currentSafe = [];
|
|
69
|
+
}
|
|
70
|
+
segments.push({ kind: 'sequential', indices: [i] });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Flush trailing safe calls
|
|
74
|
+
if (currentSafe.length > 0) {
|
|
75
|
+
segments.push({ kind: 'parallel', indices: currentSafe });
|
|
76
|
+
}
|
|
77
|
+
return segments;
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// BatchToolExecutor
|
|
81
|
+
// ============================================================================
|
|
82
|
+
const DEFAULT_MAX_CONCURRENCY = 10;
|
|
83
|
+
const ENV_KEY = 'AQE_MAX_TOOL_CONCURRENCY';
|
|
84
|
+
export class BatchToolExecutor {
|
|
85
|
+
maxConcurrency;
|
|
86
|
+
constructor(maxConcurrency) {
|
|
87
|
+
if (maxConcurrency !== undefined) {
|
|
88
|
+
this.maxConcurrency = maxConcurrency;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const envVal = process.env[ENV_KEY];
|
|
92
|
+
this.maxConcurrency =
|
|
93
|
+
envVal && !isNaN(Number(envVal)) && Number(envVal) >= 1
|
|
94
|
+
? Number(envVal)
|
|
95
|
+
: DEFAULT_MAX_CONCURRENCY;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Execute a batch of tool calls respecting concurrency safety annotations.
|
|
100
|
+
*
|
|
101
|
+
* @returns BatchResult with results in the same order as the input calls.
|
|
102
|
+
*/
|
|
103
|
+
async executeBatch(calls) {
|
|
104
|
+
if (calls.length === 0) {
|
|
105
|
+
return {
|
|
106
|
+
results: [],
|
|
107
|
+
parallelBatches: 0,
|
|
108
|
+
sequentialCalls: 0,
|
|
109
|
+
totalWallTimeMs: 0,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const startTime = Date.now();
|
|
113
|
+
const segments = partitionCalls(calls);
|
|
114
|
+
const results = new Array(calls.length);
|
|
115
|
+
let parallelBatches = 0;
|
|
116
|
+
let sequentialCalls = 0;
|
|
117
|
+
const semaphore = new Semaphore(this.maxConcurrency);
|
|
118
|
+
for (const segment of segments) {
|
|
119
|
+
if (segment.kind === 'parallel') {
|
|
120
|
+
parallelBatches++;
|
|
121
|
+
const batchResults = await Promise.all(segment.indices.map(async (idx) => {
|
|
122
|
+
await semaphore.acquire();
|
|
123
|
+
try {
|
|
124
|
+
return await calls[idx].handler();
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
semaphore.release();
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
// Place results back at original indices
|
|
131
|
+
for (let j = 0; j < segment.indices.length; j++) {
|
|
132
|
+
results[segment.indices[j]] = batchResults[j];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Sequential: exactly one call
|
|
137
|
+
sequentialCalls++;
|
|
138
|
+
const idx = segment.indices[0];
|
|
139
|
+
results[idx] = await calls[idx].handler();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
results,
|
|
144
|
+
parallelBatches,
|
|
145
|
+
sequentialCalls,
|
|
146
|
+
totalWallTimeMs: Date.now() - startTime,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=batch-executor.js.map
|