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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Tier 4: Reactive Compaction (IMP-08)
|
|
3
|
+
*
|
|
4
|
+
* Last-resort compaction triggered by 413 errors or context overflow
|
|
5
|
+
* detection. Aggressively peels the oldest conversation rounds until
|
|
6
|
+
* the estimated token count drops below the recovery target.
|
|
7
|
+
*
|
|
8
|
+
* This tier is destructive — it drops messages entirely (no summary).
|
|
9
|
+
* It exists to recover from situations where the context window is
|
|
10
|
+
* critically full and the session would otherwise fail.
|
|
11
|
+
*/
|
|
12
|
+
import { estimateTokensPadded } from '../../mcp/middleware/microcompact';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Defaults
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const DEFAULT_RECOVERY_TARGET = 30_000;
|
|
17
|
+
const DEFAULT_MIN_PRESERVED = 4;
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Tier4Reactive
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export class Tier4Reactive {
|
|
22
|
+
recoveryTarget;
|
|
23
|
+
minPreserved;
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
this.recoveryTarget = options.recoveryTarget ?? DEFAULT_RECOVERY_TARGET;
|
|
26
|
+
this.minPreserved = options.minPreservedMessages ?? DEFAULT_MIN_PRESERVED;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Aggressively peel oldest messages until under the recovery target.
|
|
30
|
+
*
|
|
31
|
+
* Algorithm:
|
|
32
|
+
* 1. Compute total tokens.
|
|
33
|
+
* 2. If already under target, return early.
|
|
34
|
+
* 3. Walk forward from the oldest message, dropping messages until
|
|
35
|
+
* remaining tokens are at or below recoveryTarget.
|
|
36
|
+
* 4. Never drop below minPreservedMessages from the tail.
|
|
37
|
+
* 5. When dropping a tool_result, also drop its paired tool_use (and vice versa).
|
|
38
|
+
*/
|
|
39
|
+
compact(messages, trigger = 'context_overflow') {
|
|
40
|
+
if (messages.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
tier: 4,
|
|
43
|
+
survivingMessages: [],
|
|
44
|
+
survivingTokens: 0,
|
|
45
|
+
droppedCount: 0,
|
|
46
|
+
tokensSaved: 0,
|
|
47
|
+
trigger,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Annotate tokens
|
|
51
|
+
const annotated = messages.map(m => ({
|
|
52
|
+
...m,
|
|
53
|
+
estimatedTokens: m.estimatedTokens ?? estimateTokensPadded(m.content),
|
|
54
|
+
}));
|
|
55
|
+
const totalTokens = annotated.reduce((s, m) => s + m.estimatedTokens, 0);
|
|
56
|
+
// Already under target?
|
|
57
|
+
if (totalTokens <= this.recoveryTarget) {
|
|
58
|
+
return {
|
|
59
|
+
tier: 4,
|
|
60
|
+
survivingMessages: messages,
|
|
61
|
+
survivingTokens: totalTokens,
|
|
62
|
+
droppedCount: 0,
|
|
63
|
+
tokensSaved: 0,
|
|
64
|
+
trigger,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Build pair map: toolUseId -> indices of both tool_use and tool_result
|
|
68
|
+
const pairMap = new Map();
|
|
69
|
+
for (let i = 0; i < annotated.length; i++) {
|
|
70
|
+
const m = annotated[i];
|
|
71
|
+
if (m.toolUseId) {
|
|
72
|
+
const existing = pairMap.get(m.toolUseId) ?? [];
|
|
73
|
+
existing.push(i);
|
|
74
|
+
pairMap.set(m.toolUseId, existing);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Mark messages for dropping
|
|
78
|
+
const dropped = new Set();
|
|
79
|
+
let remainingTokens = totalTokens;
|
|
80
|
+
// The tail we must preserve
|
|
81
|
+
const preserveFrom = Math.max(0, annotated.length - this.minPreserved);
|
|
82
|
+
for (let i = 0; i < annotated.length; i++) {
|
|
83
|
+
if (remainingTokens <= this.recoveryTarget)
|
|
84
|
+
break;
|
|
85
|
+
if (i >= preserveFrom)
|
|
86
|
+
break; // Don't touch the preserved tail
|
|
87
|
+
if (dropped.has(i))
|
|
88
|
+
continue;
|
|
89
|
+
// Drop this message
|
|
90
|
+
dropped.add(i);
|
|
91
|
+
remainingTokens -= annotated[i].estimatedTokens;
|
|
92
|
+
// If part of a pair, drop the partner too
|
|
93
|
+
if (annotated[i].toolUseId) {
|
|
94
|
+
const partners = pairMap.get(annotated[i].toolUseId) ?? [];
|
|
95
|
+
for (const partnerIdx of partners) {
|
|
96
|
+
if (!dropped.has(partnerIdx) && partnerIdx < preserveFrom) {
|
|
97
|
+
dropped.add(partnerIdx);
|
|
98
|
+
remainingTokens -= annotated[partnerIdx].estimatedTokens;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const surviving = annotated.filter((_, i) => !dropped.has(i));
|
|
104
|
+
const survivingTokens = surviving.reduce((s, m) => s + m.estimatedTokens, 0);
|
|
105
|
+
return {
|
|
106
|
+
tier: 4,
|
|
107
|
+
survivingMessages: surviving,
|
|
108
|
+
survivingTokens,
|
|
109
|
+
droppedCount: dropped.size,
|
|
110
|
+
tokensSaved: totalTokens - survivingTokens,
|
|
111
|
+
trigger,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convenience: check if a given HTTP status or error message indicates
|
|
116
|
+
* a context overflow that should trigger reactive compaction.
|
|
117
|
+
*/
|
|
118
|
+
static isContextOverflow(statusOrMessage) {
|
|
119
|
+
if (typeof statusOrMessage === 'number') {
|
|
120
|
+
return statusOrMessage === 413;
|
|
121
|
+
}
|
|
122
|
+
const lower = statusOrMessage.toLowerCase();
|
|
123
|
+
return lower.includes('context_length_exceeded')
|
|
124
|
+
|| lower.includes('maximum context length')
|
|
125
|
+
|| lower.includes('too many tokens')
|
|
126
|
+
|| lower.includes('413');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=tier4-reactive.js.map
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Memory Branching via RVF Copy-on-Write (ADR-067)
|
|
3
|
+
*
|
|
4
|
+
* Provides per-agent isolated memory branches using RVF's COW derive().
|
|
5
|
+
* Each spawned agent gets a lightweight .rvf branch file that shares
|
|
6
|
+
* the parent's data via copy-on-write. Writes are isolated to the branch.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle:
|
|
9
|
+
* spawn → createBranch() → agent works on isolated branch
|
|
10
|
+
* success → mergeBranch() → changed vectors flow back to parent
|
|
11
|
+
* failure → discardBranch() → delete branch file (zero cost)
|
|
12
|
+
*
|
|
13
|
+
* Storage cost: ~0.5% of parent for typical agent workloads
|
|
14
|
+
* (only changed vectors are physically copied).
|
|
15
|
+
*
|
|
16
|
+
* @module coordination/agent-memory-branch
|
|
17
|
+
*/
|
|
18
|
+
import type { RvfNativeAdapter } from '../integrations/ruvector/rvf-native-adapter.js';
|
|
19
|
+
import type { WitnessChain } from '../audit/witness-chain.js';
|
|
20
|
+
export interface BranchHandle {
|
|
21
|
+
/** Agent ID that owns this branch */
|
|
22
|
+
agentId: string;
|
|
23
|
+
/** Path to the child .rvf file */
|
|
24
|
+
childPath: string;
|
|
25
|
+
/** Path to the parent .rvf file */
|
|
26
|
+
parentPath: string;
|
|
27
|
+
/** The child RVF adapter (for agent to use) */
|
|
28
|
+
childAdapter: RvfNativeAdapter;
|
|
29
|
+
/** When the branch was created */
|
|
30
|
+
createdAt: number;
|
|
31
|
+
/**
|
|
32
|
+
* Ingest log — records vectors the agent added to the child.
|
|
33
|
+
* On merge, these are replayed into the parent. This is necessary
|
|
34
|
+
* because the RVF NAPI doesn't expose "read vector by ID."
|
|
35
|
+
*/
|
|
36
|
+
ingestLog: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
vector: Float32Array;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
export interface BranchInfo {
|
|
42
|
+
/** Agent ID (derived from filename) */
|
|
43
|
+
agentId: string;
|
|
44
|
+
/** Path to the branch .rvf file */
|
|
45
|
+
path: string;
|
|
46
|
+
/** File size in bytes */
|
|
47
|
+
sizeBytes: number;
|
|
48
|
+
/** When the file was last modified */
|
|
49
|
+
modifiedAt: Date;
|
|
50
|
+
}
|
|
51
|
+
export type MergeStrategy = 'child-wins' | 'parent-wins';
|
|
52
|
+
export interface MergeResult {
|
|
53
|
+
/** Number of vectors merged from child to parent */
|
|
54
|
+
vectorsMerged: number;
|
|
55
|
+
/** Strategy used */
|
|
56
|
+
strategy: MergeStrategy;
|
|
57
|
+
/** Duration of merge in milliseconds */
|
|
58
|
+
durationMs: number;
|
|
59
|
+
}
|
|
60
|
+
export interface AgentMemoryBranchConfig {
|
|
61
|
+
/** Directory to store branch .rvf files (default: .agentic-qe/branches/) */
|
|
62
|
+
branchDir: string;
|
|
63
|
+
/** Default merge strategy (default: child-wins) */
|
|
64
|
+
defaultStrategy: MergeStrategy;
|
|
65
|
+
/** Max age in ms before orphan cleanup (default: 1 hour) */
|
|
66
|
+
orphanMaxAgeMs: number;
|
|
67
|
+
}
|
|
68
|
+
export declare class AgentMemoryBranch {
|
|
69
|
+
private readonly config;
|
|
70
|
+
private readonly parentAdapter;
|
|
71
|
+
private readonly activeBranches;
|
|
72
|
+
private witnessChain;
|
|
73
|
+
constructor(parentAdapter: RvfNativeAdapter, config?: Partial<AgentMemoryBranchConfig>);
|
|
74
|
+
/** Attach a witness chain for merge/discard audit trail */
|
|
75
|
+
setWitnessChain(wc: WitnessChain): void;
|
|
76
|
+
/**
|
|
77
|
+
* Create a COW branch for an agent.
|
|
78
|
+
* The child .rvf inherits all parent data via copy-on-write.
|
|
79
|
+
* Reads fall through to parent; writes are isolated to the child.
|
|
80
|
+
*/
|
|
81
|
+
createBranch(agentId: string): BranchHandle;
|
|
82
|
+
/**
|
|
83
|
+
* Record a vector that an agent ingested into its branch.
|
|
84
|
+
* This log is replayed into the parent on merge (child-wins strategy).
|
|
85
|
+
*
|
|
86
|
+
* Agents MUST call this alongside childAdapter.ingest() so that
|
|
87
|
+
* merge can replay the actual vectors into the parent.
|
|
88
|
+
*/
|
|
89
|
+
recordIngest(agentId: string, entries: Array<{
|
|
90
|
+
id: string;
|
|
91
|
+
vector: Float32Array;
|
|
92
|
+
}>): void;
|
|
93
|
+
/**
|
|
94
|
+
* Merge a successful agent's branch back to the parent.
|
|
95
|
+
* Replays the agent's ingest log into the parent (child-wins) or
|
|
96
|
+
* discards all child changes (parent-wins).
|
|
97
|
+
*/
|
|
98
|
+
mergeBranch(handle: BranchHandle, strategy?: MergeStrategy): Promise<MergeResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Discard a failed agent's branch.
|
|
101
|
+
* Simply deletes the child .rvf file — zero computational cost.
|
|
102
|
+
*/
|
|
103
|
+
discardBranch(handle: BranchHandle): void;
|
|
104
|
+
/** Get active branch for an agent (if any) */
|
|
105
|
+
getBranch(agentId: string): BranchHandle | undefined;
|
|
106
|
+
/** List all active branches */
|
|
107
|
+
getActiveBranches(): BranchHandle[];
|
|
108
|
+
/** List all branch files on disk (including orphans) */
|
|
109
|
+
listBranchFiles(): BranchInfo[];
|
|
110
|
+
/**
|
|
111
|
+
* Clean up orphaned branch files older than maxAge.
|
|
112
|
+
* An orphan is a .rvf file in branchDir with no active branch.
|
|
113
|
+
*/
|
|
114
|
+
cleanupOrphans(maxAgeMs?: number): number;
|
|
115
|
+
private cleanupBranchFile;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=agent-memory-branch.d.ts.map
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Memory Branching via RVF Copy-on-Write (ADR-067)
|
|
3
|
+
*
|
|
4
|
+
* Provides per-agent isolated memory branches using RVF's COW derive().
|
|
5
|
+
* Each spawned agent gets a lightweight .rvf branch file that shares
|
|
6
|
+
* the parent's data via copy-on-write. Writes are isolated to the branch.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle:
|
|
9
|
+
* spawn → createBranch() → agent works on isolated branch
|
|
10
|
+
* success → mergeBranch() → changed vectors flow back to parent
|
|
11
|
+
* failure → discardBranch() → delete branch file (zero cost)
|
|
12
|
+
*
|
|
13
|
+
* Storage cost: ~0.5% of parent for typical agent workloads
|
|
14
|
+
* (only changed vectors are physically copied).
|
|
15
|
+
*
|
|
16
|
+
* @module coordination/agent-memory-branch
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, mkdirSync, unlinkSync, readdirSync, statSync } from 'fs';
|
|
19
|
+
import { join, basename } from 'path';
|
|
20
|
+
const DEFAULT_CONFIG = {
|
|
21
|
+
branchDir: '.agentic-qe/branches',
|
|
22
|
+
defaultStrategy: 'child-wins',
|
|
23
|
+
orphanMaxAgeMs: 3600_000, // 1 hour
|
|
24
|
+
};
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// AgentMemoryBranch Service
|
|
27
|
+
// ============================================================================
|
|
28
|
+
export class AgentMemoryBranch {
|
|
29
|
+
config;
|
|
30
|
+
parentAdapter;
|
|
31
|
+
activeBranches = new Map();
|
|
32
|
+
witnessChain = null;
|
|
33
|
+
constructor(parentAdapter, config) {
|
|
34
|
+
this.parentAdapter = parentAdapter;
|
|
35
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
36
|
+
}
|
|
37
|
+
/** Attach a witness chain for merge/discard audit trail */
|
|
38
|
+
setWitnessChain(wc) {
|
|
39
|
+
this.witnessChain = wc;
|
|
40
|
+
}
|
|
41
|
+
// --------------------------------------------------------------------------
|
|
42
|
+
// Branch Lifecycle
|
|
43
|
+
// --------------------------------------------------------------------------
|
|
44
|
+
/**
|
|
45
|
+
* Create a COW branch for an agent.
|
|
46
|
+
* The child .rvf inherits all parent data via copy-on-write.
|
|
47
|
+
* Reads fall through to parent; writes are isolated to the child.
|
|
48
|
+
*/
|
|
49
|
+
createBranch(agentId) {
|
|
50
|
+
if (this.activeBranches.has(agentId)) {
|
|
51
|
+
throw new Error(`Branch already exists for agent ${agentId}`);
|
|
52
|
+
}
|
|
53
|
+
// Ensure branch directory exists
|
|
54
|
+
if (!existsSync(this.config.branchDir)) {
|
|
55
|
+
mkdirSync(this.config.branchDir, { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
const childPath = join(this.config.branchDir, `${agentId}.rvf`);
|
|
58
|
+
const parentPath = this.parentAdapter.path();
|
|
59
|
+
// COW derive — creates lightweight child sharing parent's data
|
|
60
|
+
const childAdapter = this.parentAdapter.derive(childPath);
|
|
61
|
+
const handle = {
|
|
62
|
+
agentId,
|
|
63
|
+
childPath,
|
|
64
|
+
parentPath,
|
|
65
|
+
childAdapter,
|
|
66
|
+
createdAt: Date.now(),
|
|
67
|
+
ingestLog: [],
|
|
68
|
+
};
|
|
69
|
+
this.activeBranches.set(agentId, handle);
|
|
70
|
+
return handle;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Record a vector that an agent ingested into its branch.
|
|
74
|
+
* This log is replayed into the parent on merge (child-wins strategy).
|
|
75
|
+
*
|
|
76
|
+
* Agents MUST call this alongside childAdapter.ingest() so that
|
|
77
|
+
* merge can replay the actual vectors into the parent.
|
|
78
|
+
*/
|
|
79
|
+
recordIngest(agentId, entries) {
|
|
80
|
+
const handle = this.activeBranches.get(agentId);
|
|
81
|
+
if (!handle)
|
|
82
|
+
return;
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
handle.ingestLog.push({ id: entry.id, vector: entry.vector });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Merge a successful agent's branch back to the parent.
|
|
89
|
+
* Replays the agent's ingest log into the parent (child-wins) or
|
|
90
|
+
* discards all child changes (parent-wins).
|
|
91
|
+
*/
|
|
92
|
+
async mergeBranch(handle, strategy) {
|
|
93
|
+
const mergeStrategy = strategy ?? this.config.defaultStrategy;
|
|
94
|
+
const startTime = performance.now();
|
|
95
|
+
let vectorsMerged = 0;
|
|
96
|
+
if (mergeStrategy === 'child-wins' && handle.ingestLog.length > 0) {
|
|
97
|
+
// Replay the agent's ingest log into the parent
|
|
98
|
+
// These are the actual vectors the agent wrote — no zero-vector placeholders
|
|
99
|
+
try {
|
|
100
|
+
const result = this.parentAdapter.ingest(handle.ingestLog);
|
|
101
|
+
vectorsMerged = result.accepted;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.warn(`[AgentMemoryBranch] Merge replay failed for ${handle.agentId}:`, error);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// parent-wins: nothing to do — child changes are discarded
|
|
108
|
+
// Record in witness chain
|
|
109
|
+
this.witnessChain?.append('BRANCH_MERGE', {
|
|
110
|
+
agentId: handle.agentId,
|
|
111
|
+
strategy: mergeStrategy,
|
|
112
|
+
vectorsMerged,
|
|
113
|
+
branchPath: handle.childPath,
|
|
114
|
+
}, `agent-${handle.agentId}`);
|
|
115
|
+
// Cleanup child
|
|
116
|
+
this.cleanupBranchFile(handle);
|
|
117
|
+
this.activeBranches.delete(handle.agentId);
|
|
118
|
+
return {
|
|
119
|
+
vectorsMerged,
|
|
120
|
+
strategy: mergeStrategy,
|
|
121
|
+
durationMs: performance.now() - startTime,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Discard a failed agent's branch.
|
|
126
|
+
* Simply deletes the child .rvf file — zero computational cost.
|
|
127
|
+
*/
|
|
128
|
+
discardBranch(handle) {
|
|
129
|
+
// Record in witness chain
|
|
130
|
+
this.witnessChain?.append('BRANCH_DISCARD', {
|
|
131
|
+
agentId: handle.agentId,
|
|
132
|
+
action: 'discard',
|
|
133
|
+
branchPath: handle.childPath,
|
|
134
|
+
}, `agent-${handle.agentId}`);
|
|
135
|
+
this.cleanupBranchFile(handle);
|
|
136
|
+
this.activeBranches.delete(handle.agentId);
|
|
137
|
+
}
|
|
138
|
+
// --------------------------------------------------------------------------
|
|
139
|
+
// Branch Management
|
|
140
|
+
// --------------------------------------------------------------------------
|
|
141
|
+
/** Get active branch for an agent (if any) */
|
|
142
|
+
getBranch(agentId) {
|
|
143
|
+
return this.activeBranches.get(agentId);
|
|
144
|
+
}
|
|
145
|
+
/** List all active branches */
|
|
146
|
+
getActiveBranches() {
|
|
147
|
+
return Array.from(this.activeBranches.values());
|
|
148
|
+
}
|
|
149
|
+
/** List all branch files on disk (including orphans) */
|
|
150
|
+
listBranchFiles() {
|
|
151
|
+
if (!existsSync(this.config.branchDir))
|
|
152
|
+
return [];
|
|
153
|
+
const files = readdirSync(this.config.branchDir)
|
|
154
|
+
.filter(f => f.endsWith('.rvf'));
|
|
155
|
+
return files.map(f => {
|
|
156
|
+
const fullPath = join(this.config.branchDir, f);
|
|
157
|
+
const stat = statSync(fullPath);
|
|
158
|
+
return {
|
|
159
|
+
agentId: basename(f, '.rvf'),
|
|
160
|
+
path: fullPath,
|
|
161
|
+
sizeBytes: stat.size,
|
|
162
|
+
modifiedAt: stat.mtime,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Clean up orphaned branch files older than maxAge.
|
|
168
|
+
* An orphan is a .rvf file in branchDir with no active branch.
|
|
169
|
+
*/
|
|
170
|
+
cleanupOrphans(maxAgeMs) {
|
|
171
|
+
const maxAge = maxAgeMs ?? this.config.orphanMaxAgeMs;
|
|
172
|
+
const now = Date.now();
|
|
173
|
+
let cleaned = 0;
|
|
174
|
+
for (const info of this.listBranchFiles()) {
|
|
175
|
+
const age = now - info.modifiedAt.getTime();
|
|
176
|
+
if (age > maxAge && !this.activeBranches.has(info.agentId)) {
|
|
177
|
+
try {
|
|
178
|
+
unlinkSync(info.path);
|
|
179
|
+
// Also remove idmap sidecar if present
|
|
180
|
+
const idmapPath = `${info.path}.idmap.json`;
|
|
181
|
+
if (existsSync(idmapPath))
|
|
182
|
+
unlinkSync(idmapPath);
|
|
183
|
+
cleaned++;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Best effort cleanup
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return cleaned;
|
|
191
|
+
}
|
|
192
|
+
// --------------------------------------------------------------------------
|
|
193
|
+
// Private Helpers
|
|
194
|
+
// --------------------------------------------------------------------------
|
|
195
|
+
cleanupBranchFile(handle) {
|
|
196
|
+
try {
|
|
197
|
+
handle.childAdapter.close();
|
|
198
|
+
}
|
|
199
|
+
catch { /* best effort */ }
|
|
200
|
+
try {
|
|
201
|
+
if (existsSync(handle.childPath)) {
|
|
202
|
+
unlinkSync(handle.childPath);
|
|
203
|
+
}
|
|
204
|
+
// Remove idmap sidecar
|
|
205
|
+
const idmapPath = `${handle.childPath}.idmap.json`;
|
|
206
|
+
if (existsSync(idmapPath)) {
|
|
207
|
+
unlinkSync(idmapPath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch { /* best effort */ }
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=agent-memory-branch.js.map
|
|
@@ -24,6 +24,15 @@ export declare class MailboxService {
|
|
|
24
24
|
private readonly broadcastHandlers;
|
|
25
25
|
/** Index of agents by domain for efficient broadcast */
|
|
26
26
|
private readonly domainAgents;
|
|
27
|
+
/** R13: Optional cognitive router for bandwidth-efficient messaging (lazy-initialized) */
|
|
28
|
+
private cognitiveRouter;
|
|
29
|
+
private cognitiveRouterInitialized;
|
|
30
|
+
/**
|
|
31
|
+
* R13: Tracks which messages were stored with compressed payloads.
|
|
32
|
+
* Maps message ID to the RoutedMessage needed for decompression on receive().
|
|
33
|
+
* This avoids modifying the AgentMessage type while enabling real compression.
|
|
34
|
+
*/
|
|
35
|
+
private readonly compressedMessages;
|
|
27
36
|
/**
|
|
28
37
|
* Create a mailbox for an agent. If a mailbox already exists for this
|
|
29
38
|
* agent ID, the existing mailbox is returned unchanged.
|
|
@@ -132,6 +141,40 @@ export declare class MailboxService {
|
|
|
132
141
|
* Create an immutable snapshot of a mutable mailbox.
|
|
133
142
|
*/
|
|
134
143
|
private toSnapshot;
|
|
144
|
+
/**
|
|
145
|
+
* Lazily initialize the cognitive router when the feature flag is enabled.
|
|
146
|
+
* Returns the router instance or null if disabled / unavailable.
|
|
147
|
+
*/
|
|
148
|
+
private ensureCognitiveRouter;
|
|
149
|
+
/**
|
|
150
|
+
* Attempt to compress a message via the cognitive router.
|
|
151
|
+
* When compression succeeds (compressed payload is smaller), returns a new
|
|
152
|
+
* AgentMessage with the compressed payload and tracks the RoutedMessage
|
|
153
|
+
* for later decompression. When compression is unavailable or unhelpful,
|
|
154
|
+
* returns the original message unchanged.
|
|
155
|
+
*
|
|
156
|
+
* Non-blocking: any error returns the original message unmodified.
|
|
157
|
+
*/
|
|
158
|
+
private compressViaCognitive;
|
|
159
|
+
/**
|
|
160
|
+
* Decompress messages that were stored with compressed payloads.
|
|
161
|
+
* Uses the cognitive router's receive() to reconstruct original payloads.
|
|
162
|
+
* Messages that were not compressed are returned unchanged.
|
|
163
|
+
*
|
|
164
|
+
* Non-blocking: decompression failures return the stored payload as-is.
|
|
165
|
+
*/
|
|
166
|
+
private decompressMessages;
|
|
167
|
+
/**
|
|
168
|
+
* Get cognitive routing statistics (bandwidth savings, compression rates).
|
|
169
|
+
* Returns null if cognitive routing is not enabled or not initialized.
|
|
170
|
+
*/
|
|
171
|
+
getCognitiveRoutingStats(): {
|
|
172
|
+
totalMessages: number;
|
|
173
|
+
compressedMessages: number;
|
|
174
|
+
bandwidthSavedBytes: number;
|
|
175
|
+
bandwidthReductionPercent: number;
|
|
176
|
+
activeStreams: number;
|
|
177
|
+
} | null;
|
|
135
178
|
}
|
|
136
179
|
/**
|
|
137
180
|
* Create a new MailboxService instance.
|