agentic-qe 3.15.10 → 3.15.12
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/hooks/aqe-hook.cjs +38 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +263 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-HL7MOCQN.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-5VZCKTIJ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-K3C6CQCD.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-NVFQ25WS.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +2 -0
- package/dist/cli/chunks/{arena-EKOOFVST.js → arena-QGWIJADQ.js} +2 -2
- package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-TSZVDSXS.js} +4 -4
- package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-KIEE2SHJ.js} +3 -3
- package/dist/cli/chunks/base-WIM7G3HC.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BNB32NW3.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-MPC5SPYI.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-LZ7UXKAY.js} +2 -2
- package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-VDHAW4RK.js} +2 -2
- package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +2 -0
- package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-23PQF7NN.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-26672ISV.js} +2 -2
- package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-2ASQRBK2.js} +2 -2
- package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-2E2QO44T.js} +2 -2
- package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-2IVE5AR3.js} +1 -1
- package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-2JYUA27M.js} +1 -1
- package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-2PPSS4JD.js} +2 -2
- package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-32UTHIY5.js} +5 -5
- package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-33I2ZP6E.js} +2 -2
- package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-35MIUSXQ.js} +2 -2
- package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-35NW676P.js} +2 -2
- package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-3EWQN37E.js} +2 -2
- package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-3IU4LDZR.js} +2 -2
- package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-47RMGDG4.js} +2 -2
- package/dist/cli/chunks/chunk-4A76VPU4.js +3 -0
- package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4CB3QPZM.js} +2 -2
- package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-4HWUECVD.js} +5 -5
- package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-4KUOYDY2.js} +5 -5
- package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-4LWMAAWK.js} +2 -2
- package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-4PU5GTZW.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-4SA7M34P.js} +1 -1
- package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-4Y6OEBJZ.js} +1 -1
- package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-5A66EGEW.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-5ADXFUMO.js} +2 -2
- package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-5S4UIDFK.js} +1 -1
- package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-5TAEW5OV.js} +1 -1
- package/dist/cli/chunks/chunk-5Z23ZMXZ.js +742 -0
- package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-65TH6RPD.js} +1 -1
- package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-66PXR3NI.js} +2 -2
- package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-6E6HB4N4.js} +14 -14
- package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-6QRI3JVE.js} +2 -2
- package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-7DNR4KKR.js} +1 -1
- package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-7JFDLL2F.js} +1 -1
- package/dist/cli/chunks/chunk-7OEFBWAG.js +5 -0
- package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-7QEUHNKO.js} +1 -1
- package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7TA5MUPW.js} +1 -1
- package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-A2JCRXTK.js} +2 -2
- package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-A5Y7DAVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-ADUAJIAU.js} +2 -2
- package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-AJEXPFAB.js} +1 -1
- package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-BC4T6SCV.js} +4 -4
- package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-BMG2JLSQ.js} +2 -2
- package/dist/cli/chunks/chunk-BOSMELJX.js +180 -0
- package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-BYRCB5JT.js} +2 -2
- package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-C3YOVASQ.js} +6 -5
- package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-C74M4WUI.js} +2 -2
- package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-CA5UNWQF.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-CDA5Z74H.js} +2 -2
- package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-CPIBIR3X.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-CU36D7TN.js} +2 -2
- package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-DAUEK66C.js} +1 -1
- package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-DRCBRUGN.js} +2 -2
- package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-DZGPUGUG.js} +2 -2
- package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-EF6OERRR.js} +1 -1
- package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-EN7GRVEQ.js} +2 -2
- package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-ENGL7FIJ.js} +1 -1
- package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-FAGKBOX2.js} +2 -2
- package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FNUFTWEO.js} +3 -3
- package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-FZJCBSN4.js} +2 -2
- package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-G24SWTAX.js} +151 -149
- package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-G3AABG4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-GJKZ7UQO.js} +2 -2
- package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-GKFV6CUD.js} +2 -2
- package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-HLGFHHWV.js} +2 -2
- package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-HM3LSFTY.js} +2 -2
- package/dist/cli/chunks/chunk-HSA5IGGW.js +2 -0
- package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-HZBXJFGN.js} +2 -2
- package/dist/cli/chunks/chunk-IA55PFLG.js +7 -0
- package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-ICKUINKD.js} +2 -2
- package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-IETBWYHW.js} +2 -2
- package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-IL7GQNNE.js} +2 -2
- package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-INZARYUD.js} +2 -2
- package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-IPA7K556.js} +2 -2
- package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-IVTQF55W.js} +3 -3
- package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-J7Y7ZBIT.js} +8 -8
- package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-JGIJPDGD.js} +2 -2
- package/dist/cli/chunks/chunk-JNXK47OL.js +2 -0
- package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-JOWUS2X5.js} +1 -1
- package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-JR6CUKAI.js} +2 -2
- package/dist/cli/chunks/chunk-JRYWLOBD.js +21 -0
- package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-JW5PDJ5O.js} +11 -11
- package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-K3A3NWT3.js} +2 -2
- package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-KA5SHLMW.js} +2 -2
- package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-KGA7VAI4.js} +2 -2
- package/dist/cli/chunks/chunk-KJDI5CHX.js +2 -0
- package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-L3PV7VXK.js} +1 -1
- package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-L7NGKANW.js} +32 -32
- package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-LFBA735S.js} +7 -7
- package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-MAJXZYGK.js} +1 -1
- package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-MCPEC6OO.js} +1 -1
- package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-MCPXNUDK.js} +2 -2
- package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-MMEALJ4D.js} +2 -2
- package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-MYF5CNGV.js} +2 -2
- package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-MYUMJ2ZI.js} +1 -1
- package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-N7O3PF6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-NA3F6FEO.js} +2 -2
- package/dist/cli/chunks/chunk-NNBQZR73.js +6 -0
- package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-NV74SICL.js} +2 -2
- package/dist/cli/chunks/chunk-NVRYELCY.js +13 -0
- package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-NX4BCSOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-O3IM4WRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-O4QJMANM.js} +1 -1
- package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-OHVYINGM.js} +18 -18
- package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-P5E26N2X.js} +2 -2
- package/dist/cli/chunks/chunk-P7UFJ6DO.js +14 -0
- package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-PGSJBXTD.js} +2 -2
- package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-PT2NXS43.js} +1 -1
- package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-PTBOLBM4.js} +2 -2
- package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-PX5OPXY6.js} +1 -1
- package/dist/cli/chunks/chunk-QCPVUNN3.js +2 -0
- package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-QSGEBCDB.js} +2 -2
- package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-QUJJYTJH.js} +2 -2
- package/dist/cli/chunks/chunk-QWG3SILX.js +59 -0
- package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-RCOLPF3B.js} +2 -2
- package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-RYHG3I7J.js} +2 -2
- package/dist/cli/chunks/chunk-SBHM5X2S.js +4 -0
- package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-SDRJJUPO.js} +1 -1
- package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-SG2TX72G.js} +2 -2
- package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-SITL5YZV.js} +4 -4
- package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-SPC4RBLF.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-SQVZ3TRU.js} +2 -2
- package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-SUX5XB2Z.js} +2 -2
- package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-T4EN5VVK.js} +2 -2
- package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-TGMXUZZC.js} +2 -2
- package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-TLRHAMX5.js} +1 -1
- package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-TOWOJGEI.js} +1 -1
- package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-TSOQ2QLT.js} +3 -3
- package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-TVA5GRIU.js} +2 -2
- package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-TXEUVUMO.js} +1 -1
- package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-U6IXYQO4.js} +2 -2
- package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-U7ZHDGXG.js} +1 -1
- package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-UCSK2RMI.js} +2 -2
- package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-UIKQPO4Y.js} +2 -2
- package/dist/cli/chunks/chunk-UJNGGFGX.js +2 -0
- package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-ULCW6IVQ.js} +2 -2
- package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-UREDS662.js} +2 -2
- package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-URSTP3WI.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-UUZZXHUF.js} +2 -2
- package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-UZED4YZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-VF7FTD64.js} +1 -1
- package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-VUR5THML.js} +2 -2
- package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-VXVTFKRA.js} +2 -2
- package/dist/cli/chunks/chunk-VZBC6DP7.js +2 -0
- package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-W4II6SIH.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-W5HQIYQU.js} +3 -3
- package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-W7H55PY4.js} +1 -1
- package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-WDEXOLK2.js} +1 -1
- package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-WGTEZT7G.js} +2 -2
- package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-WLRU6ESI.js} +2 -2
- package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-WTAUF6O4.js} +2 -2
- package/dist/cli/chunks/chunk-XCNSGSKV.js +3 -0
- package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-XZOYKB22.js} +2 -2
- package/dist/cli/chunks/chunk-YIDAXOUX.js +8 -0
- package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-YLKIXEPP.js} +1 -1
- package/dist/cli/chunks/chunk-YNVEDFPQ.js +2 -0
- package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-YUA6ZKKY.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-YVJEUX3I.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-YWWMNTBF.js} +2 -2
- package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-ZGROHCOW.js} +2 -2
- package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-ZPVGX4DI.js} +2 -2
- package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-ZROAMFX2.js} +2 -2
- package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-ZYOYR3UR.js} +1 -1
- package/dist/cli/chunks/ci-BZNWW3I3.js +81 -0
- package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-LOHNXOKV.js} +2 -2
- package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-LCOQBSJL.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-7LRXTLFE.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-HBU4VWC3.js} +2 -2
- package/dist/cli/chunks/client-4PNYDFYS.js +2 -0
- package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-CO6MLH6X.js} +2 -2
- package/dist/cli/chunks/{code-ZDJRIL3S.js → code-SIXBS6JM.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-GWJKZ2IQ.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-6NINVWXJ.js} +2 -2
- package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-7VIX3GML.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-FBQR6ZP2.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-VA7RIXW5.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4QEBC4MU.js} +2 -2
- package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-GRYKHPWL.js} +2 -2
- package/dist/cli/chunks/coverage-USPMNKOU.js +50 -0
- package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-ZXIPSZVH.js} +2 -2
- package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-D7F3RGI5.js} +3 -3
- package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-N2VRHPSJ.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-NL6BA7BY.js} +2 -2
- package/dist/cli/chunks/{detect-56SKAGWX.js → detect-XC2HCIIT.js} +2 -2
- package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-A3Y26MEI.js} +2 -2
- package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-WV6SFXRB.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-KJIF6Z2B.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-L3F6AES2.js} +2 -2
- package/dist/cli/chunks/dream-QOB3JCOM.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-PA3Y4KGO.js} +2 -2
- package/dist/cli/chunks/{eval-GNB574IM.js → eval-YGEZNUVE.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-D4T7NW6B.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-6JYK7RYQ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-DKXMDVPE.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-RBH2GDSR.js} +2 -2
- package/dist/cli/chunks/file-discovery-BN76S2PR.js +2 -0
- package/dist/cli/chunks/fleet-43YMXACN.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-MV54UC4C.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-7DKMVQQH.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +2 -0
- package/dist/cli/chunks/hnsw-index-HE4AX22U.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-6IWREDQC.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-5BIESSCK.js} +2 -2
- package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-3EETRM62.js} +30 -30
- package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-RSWCB2D3.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-552LXKL3.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +2 -0
- package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-OTDBJ5HD.js} +2 -2
- package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-3FK3TKEA.js} +26 -25
- package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +2 -0
- package/dist/cli/chunks/kernel-2WZOQEZS.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-KZ2O4LF3.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-MLCCXRF7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +2 -0
- package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-QUCMBD77.js} +3 -3
- package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-PDEV3UP2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +2 -0
- package/dist/cli/chunks/{load-HPHKDGGL.js → load-XFVVLO7E.js} +2 -2
- package/dist/cli/chunks/load-test-BEWEE44J.js +2 -0
- package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-74G3CL2S.js} +2 -2
- package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-XIFM6JNX.js} +5 -5
- package/dist/cli/chunks/memory-backend-NYKBBKZR.js +2 -0
- package/dist/cli/chunks/memory-handlers-ZCKURV6S.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-7L4W3O2Q.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-BPG422LF.js} +2 -2
- package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-OEAFLAEV.js} +61 -23
- package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-LOPNCULT.js} +2 -2
- package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-VWTYUZB7.js} +2 -2
- package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-WFJJ3X2E.js} +2 -2
- package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-744TPUSG.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-BD5BLNDR.js} +2 -2
- package/dist/cli/chunks/project-root-C7ELXZRK.js +2 -0
- package/dist/cli/chunks/protocol-executor-SUVE33BM.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-JIBILI74.js} +2 -2
- package/dist/cli/chunks/{prove-H52QGC6B.js → prove-MNOL5FYW.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +2 -0
- package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-JEGBDGGX.js} +2 -2
- package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-SYJ6ROMI.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +2 -0
- package/dist/cli/chunks/real-embeddings-ZWXS5ZFV.js +2 -0
- package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-RRHUFW2N.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-XFO6JSVN.js} +2 -2
- package/dist/cli/chunks/router-4FTAVYLJ.js +2 -0
- package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +2 -0
- package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-L2K3JASE.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-A6CINHGM.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-T4RY7L53.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-IR33TGQS.js} +2 -2
- package/dist/cli/chunks/safe-db-QXDZ6QY3.js +2 -0
- package/dist/cli/chunks/schedule-CZKD6RIY.js +2 -0
- package/dist/cli/chunks/scheduler-BLA3Q4CH.js +2 -0
- package/dist/cli/chunks/{security-VSPNKCDS.js → security-Z5GDE2IH.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-SIZMEHPM.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-HLM65RDS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +2 -0
- package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-SKSZG7P5.js} +2 -2
- package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-766YOOMJ.js} +2 -2
- package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-M45FNOLT.js} +2 -2
- package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-6CJ24B5T.js} +2 -2
- package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-B2U366I3.js} +2 -2
- package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-P6IFLCKP.js} +17 -15
- package/dist/cli/chunks/task-handlers-DPWMUKFC.js +9 -0
- package/dist/cli/chunks/{test-UWA377D4.js → test-TODH7KRF.js} +11 -11
- package/dist/cli/chunks/test-runner-process-46IPK3GH.js +2 -0
- package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-VMVMVRHT.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-XQW7BMCK.js} +2 -2
- package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-JCZEIRKO.js} +2 -2
- package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-U2ML3OHE.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +2 -0
- package/dist/cli/chunks/{types-PJS2FGPF.js → types-GGEPCHP6.js} +2 -2
- package/dist/cli/chunks/unified-memory-FL26RTV3.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +2 -0
- package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +2 -0
- package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-T5GRM7HS.js} +2 -2
- package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XMUJPLP3.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-KJLF7JEH.js} +2 -2
- package/dist/cli/chunks/visual-security-IJVPO5FA.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-LOHVZ7G5.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-33FBTXJU.js} +2 -2
- package/dist/cli/chunks/witness-chain-5FAFCQKP.js +2 -0
- package/dist/cli/chunks/witness-chain-V2M32W5D.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-VWBO4NXE.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-BHJ3ZAEK.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-WNVPH2Z3.js} +2 -2
- package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-6QR5MQTO.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +2 -0
- package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-EHOL62TS.js} +2 -2
- package/dist/cli/commands/ci.js +7 -0
- package/dist/cli/commands/coverage.js +7 -1
- package/dist/cli/commands/fleet.js +5 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/test.js +5 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/handlers/task-handler.js +6 -0
- package/dist/cli/utils/ci-output.d.ts +2 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/coverage-verdict.d.ts +11 -2
- package/dist/cli/utils/coverage-verdict.js +26 -6
- package/dist/cli/utils/fleet-operation.d.ts +5 -0
- package/dist/cli/utils/fleet-operation.js +7 -1
- package/dist/cli/utils/fleet-result.d.ts +5 -3
- package/dist/cli/utils/fleet-result.js +9 -3
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
- package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
- package/dist/coordination/handlers/coverage-collection.js +5 -2
- package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
- package/dist/coordination/handlers/coverage-evidence.js +159 -0
- package/dist/coordination/handlers/coverage-handlers.js +16 -3
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
- package/dist/coordination/handlers/coverage-scope.js +321 -0
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.d.ts +9 -0
- package/dist/coordination/handlers/coverage-target.js +21 -8
- package/dist/coordination/handlers/handler-utils.d.ts +5 -0
- package/dist/coordination/handlers/handler-utils.js +11 -5
- package/dist/coordination/handlers/requirements-handlers.js +3 -2
- package/dist/coordination/handlers/security-handlers.js +34 -20
- package/dist/coordination/queen-coordinator.js +8 -3
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +10 -7
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +5 -14
- package/dist/domains/test-execution/interfaces.d.ts +11 -1
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +3 -1
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/10-workers.js +42 -4
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +29 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -6
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +10 -3
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +13 -0
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/embedder-endpoint-client.d.ts +8 -0
- package/dist/learning/embedder-endpoint-client.js +20 -0
- package/dist/learning/embedder-recovery.d.ts +63 -0
- package/dist/learning/embedder-recovery.js +94 -0
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
- package/dist/learning/qe-reasoning-bank.d.ts +21 -0
- package/dist/learning/qe-reasoning-bank.js +54 -8
- package/dist/learning/real-embeddings.d.ts +23 -0
- package/dist/learning/real-embeddings.js +69 -2
- package/dist/learning/real-qe-reasoning-bank.d.ts +39 -0
- package/dist/learning/real-qe-reasoning-bank.js +108 -38
- package/dist/logging/redaction.js +142 -12
- package/dist/mcp/bundle.js +520 -503
- package/dist/mcp/daemon-mode.d.ts +126 -0
- package/dist/mcp/daemon-mode.js +257 -0
- package/dist/mcp/entry.d.ts +4 -0
- package/dist/mcp/entry.js +50 -2
- package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
- package/dist/mcp/handlers/domain-handler-configs.js +13 -2
- package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
- package/dist/mcp/handlers/orchestrate-routes.js +53 -0
- package/dist/mcp/handlers/task-handlers.d.ts +23 -1
- package/dist/mcp/handlers/task-handlers.js +90 -19
- package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
- package/dist/mcp/protocol-server.js +11 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/services/reasoning-bank-service.d.ts +9 -2
- package/dist/mcp/services/reasoning-bank-service.js +13 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +7 -0
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/mcp/types.d.ts +14 -0
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/routing/advisor/redaction.js +22 -2
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/llm/providers/response-deadline.js +16 -2
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/types/index.js +3 -1
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/package.json +3 -3
- package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
- package/dist/cli/chunks/base-GTB6POYE.js +0 -2
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +0 -3
- package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
- package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
- package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
- package/dist/cli/chunks/chunk-DURHK377.js +0 -742
- package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
- package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
- package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
- package/dist/cli/chunks/chunk-N6PIIK6G.js +0 -3
- package/dist/cli/chunks/chunk-NSHU347M.js +0 -2
- package/dist/cli/chunks/chunk-PPSAMXYN.js +0 -13
- package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
- package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
- package/dist/cli/chunks/chunk-WSF24I3D.js +0 -2
- package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
- package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
- package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
- package/dist/cli/chunks/ci-MSKMVH5X.js +0 -81
- package/dist/cli/chunks/client-POSVREVS.js +0 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
- package/dist/cli/chunks/coverage-B7MCGNTE.js +0 -49
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
- package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +0 -46
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
- package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
- package/dist/cli/chunks/real-embeddings-RWGOVOXO.js +0 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
- package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { LoggerFactory } from '../../logging/index.js';
|
|
11
11
|
import { v4 as uuidv4 } from 'uuid';
|
|
12
|
-
import {
|
|
12
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
13
13
|
import { ok, err, } from '../../shared/types/index.js';
|
|
14
14
|
import { toError } from '../../shared/error-utils.js';
|
|
15
15
|
// Opt-in free-tier local test generation (cross-pollination plan 06, D7-wire/D8/D9).
|
|
@@ -425,7 +425,7 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
|
|
|
425
425
|
return null;
|
|
426
426
|
let code = '';
|
|
427
427
|
try {
|
|
428
|
-
code = await
|
|
428
|
+
code = await readConfinedText(src, { outsideRoot: 'allow' }); // #1161
|
|
429
429
|
}
|
|
430
430
|
catch {
|
|
431
431
|
return null; // unreadable → fall back
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { v4 as uuidv4 } from 'uuid';
|
|
9
9
|
import ts from 'typescript';
|
|
10
|
-
import
|
|
10
|
+
import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
|
|
11
11
|
import * as path from 'path';
|
|
12
12
|
import { ok, err } from '../../../shared/types/index.js';
|
|
13
13
|
import { NomicEmbedder, EMBEDDING_CONFIG } from '../../../shared/embeddings/index.js';
|
|
@@ -45,7 +45,7 @@ export class PatternMatcherService {
|
|
|
45
45
|
// Read file content
|
|
46
46
|
let content;
|
|
47
47
|
try {
|
|
48
|
-
content =
|
|
48
|
+
content = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
|
|
49
49
|
}
|
|
50
50
|
catch {
|
|
51
51
|
return err(new Error(`Cannot read file: ${filePath}`));
|
|
@@ -737,7 +737,7 @@ export class PatternMatcherService {
|
|
|
737
737
|
// Read the file content
|
|
738
738
|
let content;
|
|
739
739
|
try {
|
|
740
|
-
content =
|
|
740
|
+
content = readConfinedTextSync(file, { outsideRoot: 'allow' }); // #1161
|
|
741
741
|
}
|
|
742
742
|
catch {
|
|
743
743
|
// File doesn't exist or can't be read, return empty
|
|
@@ -1068,7 +1068,7 @@ class TypeScriptASTParser {
|
|
|
1068
1068
|
this.sourceCode = content;
|
|
1069
1069
|
}
|
|
1070
1070
|
else {
|
|
1071
|
-
this.sourceCode =
|
|
1071
|
+
this.sourceCode = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
|
|
1072
1072
|
}
|
|
1073
1073
|
this.sourceFile = ts.createSourceFile(path.basename(filePath), this.sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
1074
1074
|
return this.sourceFile;
|
|
@@ -10,7 +10,7 @@ import { generateBehaviorExamples } from './behavior-examples.js';
|
|
|
10
10
|
import { validateBehaviorExamples } from './behavior-example-validation.js';
|
|
11
11
|
import { LoggerFactory } from '../../../logging/index.js';
|
|
12
12
|
import { v4 as uuidv4 } from 'uuid';
|
|
13
|
-
import
|
|
13
|
+
import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import ts from 'typescript';
|
|
16
16
|
import { ok, err } from '../../../shared/types/index.js';
|
|
@@ -445,7 +445,7 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
445
445
|
let codeAnalysis = null;
|
|
446
446
|
let sourceContent = '';
|
|
447
447
|
try {
|
|
448
|
-
sourceContent =
|
|
448
|
+
sourceContent = readConfinedTextSync(sourceFile, { outsideRoot: 'allow' }); // #1161
|
|
449
449
|
codeAnalysis = await this.analyzeSourceCode(sourceContent, sourceFile);
|
|
450
450
|
}
|
|
451
451
|
catch {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { governanceFlags } from './feature-flags.js';
|
|
20
20
|
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
21
21
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
22
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
22
23
|
// ============================================================================
|
|
23
24
|
// Feature Flag Helpers
|
|
24
25
|
// ============================================================================
|
|
@@ -799,7 +800,8 @@ export class EvolutionPipelineIntegration {
|
|
|
799
800
|
* Group array by key function
|
|
800
801
|
*/
|
|
801
802
|
groupBy(array, keyFn) {
|
|
802
|
-
|
|
803
|
+
// #1157: keys come from recorded rule applications.
|
|
804
|
+
const groups = createSafeRecord();
|
|
803
805
|
for (const item of array) {
|
|
804
806
|
const key = keyFn(item);
|
|
805
807
|
if (!groups[key]) {
|
|
@@ -12,6 +12,7 @@ import { join } from 'path';
|
|
|
12
12
|
import { parse as parseYaml } from 'yaml';
|
|
13
13
|
import { getCrossPhaseMemory, } from '../memory/cross-phase-memory.js';
|
|
14
14
|
import { captureHooksConfigSnapshot, validateHookUrl, classifyHookExit, } from './security/index.js';
|
|
15
|
+
import { createSafeRecord } from '../shared/utils/safe-record.js';
|
|
15
16
|
// =============================================================================
|
|
16
17
|
// Hook Executor
|
|
17
18
|
// =============================================================================
|
|
@@ -79,7 +80,8 @@ export class CrossPhaseHookExecutor {
|
|
|
79
80
|
// IMP-07: Runtime kill-switch check
|
|
80
81
|
if (process.env.AQE_HOOKS_DISABLED === 'true')
|
|
81
82
|
return {};
|
|
82
|
-
|
|
83
|
+
// #1157: agent names come from the hooks YAML file.
|
|
84
|
+
const injectedSignals = createSafeRecord();
|
|
83
85
|
const matchingHooks = this.filterManagedHooks(Object.entries(this.config.hooks).filter(([_, hook]) => hook.trigger.event === 'phase-start' &&
|
|
84
86
|
hook.trigger.phase === phaseName));
|
|
85
87
|
for (const [hookName, hook] of matchingHooks) {
|
|
@@ -11,6 +11,7 @@ import { createSkillsInstaller } from './skills-installer.js';
|
|
|
11
11
|
import { createAgentsInstaller } from './agents-installer.js';
|
|
12
12
|
import { createN8nInstaller } from './n8n-installer.js';
|
|
13
13
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
14
|
+
import { isNativeModuleLoadFailure, withNativeModuleRemedy } from '../shared/native-module-errors.js';
|
|
14
15
|
import { openDatabase } from '../shared/safe-db.js';
|
|
15
16
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
16
17
|
// ============================================================================
|
|
@@ -112,7 +113,7 @@ export async function initializePersistenceDatabase(projectRoot) {
|
|
|
112
113
|
const mod = await import('better-sqlite3');
|
|
113
114
|
Database = mod.default;
|
|
114
115
|
}
|
|
115
|
-
catch
|
|
116
|
+
catch {
|
|
116
117
|
throw new Error('SQLite persistence REQUIRED but better-sqlite3 is not installed.\n' +
|
|
117
118
|
'Install it with: npm install better-sqlite3\n' +
|
|
118
119
|
'If you see native compilation errors, ensure build tools are installed:\n' +
|
|
@@ -157,6 +158,9 @@ export async function initializePersistenceDatabase(projectRoot) {
|
|
|
157
158
|
return true;
|
|
158
159
|
}
|
|
159
160
|
catch (error) {
|
|
161
|
+
if (isNativeModuleLoadFailure(error)) {
|
|
162
|
+
throw new Error(`SQLite persistence initialization FAILED: ${toErrorMessage(withNativeModuleRemedy(error))}`, { cause: error });
|
|
163
|
+
}
|
|
160
164
|
throw new Error(`SQLite persistence initialization FAILED: ${error}\n` +
|
|
161
165
|
`Database path: ${dbPath}\n` +
|
|
162
166
|
'Ensure the directory is writable and has sufficient disk space.');
|
|
@@ -17,6 +17,8 @@ import { existsSync, mkdirSync } from 'fs';
|
|
|
17
17
|
import { join } from 'path';
|
|
18
18
|
import { BasePhase, } from './phase-interface.js';
|
|
19
19
|
import { getAQEVersion } from '../types.js';
|
|
20
|
+
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
21
|
+
import { isNativeModuleLoadFailure, withNativeModuleRemedy } from '../../shared/native-module-errors.js';
|
|
20
22
|
/**
|
|
21
23
|
* Database phase - initializes SQLite persistence via UnifiedMemoryManager
|
|
22
24
|
*/
|
|
@@ -106,6 +108,11 @@ export class DatabasePhase extends BasePhase {
|
|
|
106
108
|
};
|
|
107
109
|
}
|
|
108
110
|
catch (error) {
|
|
111
|
+
// A native-addon load failure (#1173) is not a disk/permission problem:
|
|
112
|
+
// report the cause and the install fix instead of the generic advice.
|
|
113
|
+
if (isNativeModuleLoadFailure(error)) {
|
|
114
|
+
throw new Error(`SQLite persistence initialization FAILED: ${toErrorMessage(withNativeModuleRemedy(error))}`, { cause: error });
|
|
115
|
+
}
|
|
109
116
|
throw new Error(`SQLite persistence initialization FAILED: ${error}\n` +
|
|
110
117
|
`Database path: ${dbPath}\n` +
|
|
111
118
|
'Ensure the directory is writable and has sufficient disk space.');
|
|
@@ -173,6 +173,26 @@ if (workersSetting !== undefined && ['false', '0', 'off', 'no'].includes(workers
|
|
|
173
173
|
process.exit(0);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
// #1207: keep daemon.log bounded. The server truncates it on its heartbeat once
|
|
177
|
+
// it passes AQE_DAEMON_LOG_MAX_SIZE (default 5M, 0 or off disables); a log left
|
|
178
|
+
// over that size by an earlier run is moved to daemon.log.1 here, before
|
|
179
|
+
// anything writes to it. rename() replaces daemon.log.1 and never follows it.
|
|
180
|
+
function logMaxBytes() {
|
|
181
|
+
const text = String(process.env.AQE_DAEMON_LOG_MAX_SIZE || '').trim().toLowerCase();
|
|
182
|
+
if (['0', 'off', 'false', 'no', 'none', 'disable', 'disabled'].includes(text)) return 0;
|
|
183
|
+
const m = /^(\\d+)\\s*([kmg]?)b?$/.exec(text);
|
|
184
|
+
const bytes = m ? Number(m[1]) * { '': 1, k: 1024, m: 1048576, g: 1073741824 }[m[2]] : NaN;
|
|
185
|
+
return Number.isSafeInteger(bytes) && bytes >= 1024 ? bytes : 5 * 1048576;
|
|
186
|
+
}
|
|
187
|
+
function rotateLogAtStart(file) {
|
|
188
|
+
const max = logMaxBytes();
|
|
189
|
+
try {
|
|
190
|
+
const s = fs.lstatSync(file);
|
|
191
|
+
if (max > 0 && s.isFile() && s.size > max) fs.renameSync(file, file + '.1');
|
|
192
|
+
} catch {}
|
|
193
|
+
}
|
|
194
|
+
rotateLogAtStart(logFile);
|
|
195
|
+
|
|
176
196
|
const ts = new Date().toISOString();
|
|
177
197
|
appendFileSync(logFile, '[' + ts + '] Starting AQE v3 Worker Daemon...\\n');
|
|
178
198
|
|
|
@@ -228,10 +248,28 @@ if (binCandidate && binCandidate.endsWith('bundle.js')) {
|
|
|
228
248
|
appendFileSync(logFile, '[' + ts + '] Using: ' + mcpCmd + ' ' + mcpArgs.join(' ') + '\\n');
|
|
229
249
|
|
|
230
250
|
// #1066: keep a user's AQE_WORKERS_ENABLED (for example false) instead of forcing it on.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
251
|
+
// #1158: AQE_MCP_DAEMON=1 is daemon mode. The server has no stdin here, so
|
|
252
|
+
// without it the stdin-EOF guard (#513) shut it down right after starting;
|
|
253
|
+
// in daemon mode it stops only on SIGTERM/SIGINT (stop-daemon.cjs).
|
|
254
|
+
const env = { ...process.env, AQE_STORAGE_PATH: '.agentic-qe', AQE_LEARNING_ENABLED: 'true', AQE_WORKERS_ENABLED: workersSetting ?? 'true', AQE_HTTP_PORT: '0', AQE_MCP_DAEMON: '1' };
|
|
255
|
+
// #1158: the server writes daemon.log itself, through a descriptor opened
|
|
256
|
+
// here with the same symlink rules as appendFileSync. Piping its output
|
|
257
|
+
// through this script kept the script from exiting while the daemon ran, and
|
|
258
|
+
// once the script was gone nothing was logged any more.
|
|
259
|
+
function openLogFd(file) {
|
|
260
|
+
if (!isRegularOrAbsent(file)) return 'ignore';
|
|
261
|
+
const c = fs.constants;
|
|
262
|
+
try { return fs.openSync(file, c.O_APPEND | c.O_CREAT | c.O_WRONLY | (c.O_NOFOLLOW || 0), 0o644); } catch { return 'ignore'; }
|
|
263
|
+
}
|
|
264
|
+
const logFd = openLogFd(logFile);
|
|
265
|
+
// #1207: name the file behind the server's stdout/stderr so it can rotate it.
|
|
266
|
+
if (typeof logFd === 'number') env.AQE_MCP_DAEMON_LOG = logFile; else delete env.AQE_MCP_DAEMON_LOG;
|
|
267
|
+
let child;
|
|
268
|
+
try {
|
|
269
|
+
child = spawn(mcpCmd, mcpArgs, { cwd: projectRoot, env, detached: true, stdio: ['ignore', logFd, logFd] });
|
|
270
|
+
} finally {
|
|
271
|
+
if (typeof logFd === 'number') { try { fs.closeSync(logFd); } catch {} }
|
|
272
|
+
}
|
|
235
273
|
let exited = null;
|
|
236
274
|
child.on('exit', (code, signal) => { exited = { code, signal }; });
|
|
237
275
|
// #1116: a command that cannot be started (no npx on PATH: spawn ENOENT) emits
|
|
@@ -13,6 +13,8 @@ import { BasePhase, } from './phase-interface.js';
|
|
|
13
13
|
import { openDatabase } from '../../shared/safe-db.js';
|
|
14
14
|
/** The `# <ISO timestamp>` header line written by configToYAML(). */
|
|
15
15
|
const CONFIG_TIMESTAMP_LINE = /^# \d{4}-\d{2}-\d{2}T[\d:.]+Z$/;
|
|
16
|
+
/** #1157: config keys that would reach Object.prototype through a plain object. */
|
|
17
|
+
const UNSAFE_YAML_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
16
18
|
/**
|
|
17
19
|
* Verification phase - verifies installation and writes markers
|
|
18
20
|
*/
|
|
@@ -173,8 +175,12 @@ export class VerificationPhase extends BasePhase {
|
|
|
173
175
|
// Top-level key (no indentation)
|
|
174
176
|
const topMatch = line.match(/^(\w+):\s*(.*)$/);
|
|
175
177
|
if (topMatch) {
|
|
176
|
-
|
|
178
|
+
// #1157: keys come from config.yaml; a `__proto__` section (and
|
|
179
|
+
// everything under it) is skipped instead of re-prototyping result.
|
|
180
|
+
currentSection = UNSAFE_YAML_KEYS.has(topMatch[1]) ? '' : topMatch[1];
|
|
177
181
|
currentSubSection = '';
|
|
182
|
+
if (!currentSection)
|
|
183
|
+
continue;
|
|
178
184
|
const value = topMatch[2].trim();
|
|
179
185
|
if (value && !value.startsWith('"')) {
|
|
180
186
|
// Simple value
|
|
@@ -191,9 +197,11 @@ export class VerificationPhase extends BasePhase {
|
|
|
191
197
|
// Second-level key (2-space indent)
|
|
192
198
|
const subMatch = line.match(/^ {2}(\w+):\s*(.*)$/);
|
|
193
199
|
if (subMatch && currentSection) {
|
|
194
|
-
currentSubSection = subMatch[1];
|
|
200
|
+
currentSubSection = UNSAFE_YAML_KEYS.has(subMatch[1]) ? '' : subMatch[1];
|
|
201
|
+
if (!currentSubSection)
|
|
202
|
+
continue;
|
|
195
203
|
const value = subMatch[2].trim();
|
|
196
|
-
if (!result[currentSection]) {
|
|
204
|
+
if (!Object.hasOwn(result, currentSection) || !result[currentSection]) {
|
|
197
205
|
result[currentSection] = {};
|
|
198
206
|
}
|
|
199
207
|
if (value) {
|
|
@@ -210,8 +218,10 @@ export class VerificationPhase extends BasePhase {
|
|
|
210
218
|
if (thirdMatch && currentSection && currentSubSection) {
|
|
211
219
|
const key = thirdMatch[1];
|
|
212
220
|
const value = thirdMatch[2].trim();
|
|
221
|
+
if (UNSAFE_YAML_KEYS.has(key))
|
|
222
|
+
continue;
|
|
213
223
|
const section = result[currentSection];
|
|
214
|
-
if (!section[currentSubSection]) {
|
|
224
|
+
if (!Object.hasOwn(section, currentSubSection) || !section[currentSubSection]) {
|
|
215
225
|
section[currentSubSection] = {};
|
|
216
226
|
}
|
|
217
227
|
if (typeof section[currentSubSection] === 'object' && !Array.isArray(section[currentSubSection])) {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - Generates full env vars and v3 settings sections
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
11
|
+
import { getOwn, setOwn } from '../shared/utils/safe-record.js';
|
|
11
12
|
/**
|
|
12
13
|
* Create a one-time `.backup` of an existing settings.json before AQE modifies
|
|
13
14
|
* it — mirroring the CLAUDE.md backup convention.
|
|
@@ -75,22 +76,24 @@ export function isAqeHookEntry(entry) {
|
|
|
75
76
|
* 3. Preserve any hook types not in the new config
|
|
76
77
|
*/
|
|
77
78
|
export function mergeHooksSmart(existingHooks, newAqeHooks) {
|
|
79
|
+
// #1157: hook types come from the user's settings.json; read and write own
|
|
80
|
+
// entries only, so a type named `constructor` or `__proto__` is kept as-is.
|
|
78
81
|
const merged = {};
|
|
79
82
|
// Process hook types that have new AQE entries
|
|
80
83
|
for (const [hookType, newEntries] of Object.entries(newAqeHooks)) {
|
|
81
|
-
const existing = existingHooks
|
|
84
|
+
const existing = getOwn(existingHooks, hookType) || [];
|
|
82
85
|
// Keep only non-AQE entries from existing config
|
|
83
86
|
const userEntries = Array.isArray(existing)
|
|
84
87
|
? existing.filter((entry) => !isAqeHookEntry(entry))
|
|
85
88
|
: [];
|
|
86
89
|
// New AQE hooks go after user hooks (except PreToolUse guard which should be first)
|
|
87
|
-
merged
|
|
90
|
+
setOwn(merged, hookType, [...newEntries, ...userEntries]);
|
|
88
91
|
}
|
|
89
92
|
// Preserve hook types that are not in our new config (user's custom hook types)
|
|
90
93
|
for (const [hookType, hookArray] of Object.entries(existingHooks)) {
|
|
91
|
-
if (!merged
|
|
94
|
+
if (!Object.hasOwn(merged, hookType)) {
|
|
92
95
|
// This hook type isn't one we manage — keep it as-is
|
|
93
|
-
merged
|
|
96
|
+
setOwn(merged, hookType, hookArray);
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
return merged;
|
|
@@ -71,6 +71,15 @@ export interface ExperienceGuidance {
|
|
|
71
71
|
/** Estimated token savings */
|
|
72
72
|
readonly estimatedTokenSavings: number;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* #1204: whether similar-experience guidance can use vectors. 'unavailable'
|
|
76
|
+
* means the embedder failed (or there is none): experiences are stored
|
|
77
|
+
* without vectors and getGuidance returns no guidance.
|
|
78
|
+
*/
|
|
79
|
+
export interface ExperienceGuidanceStatus {
|
|
80
|
+
mode: 'vector' | 'unavailable';
|
|
81
|
+
reason?: string;
|
|
82
|
+
}
|
|
74
83
|
/**
|
|
75
84
|
* Configuration for ExperienceReplay
|
|
76
85
|
*/
|
|
@@ -89,6 +98,8 @@ export interface ExperienceReplayConfig {
|
|
|
89
98
|
autoPrune: boolean;
|
|
90
99
|
/** Prune threshold (quality below this is removed) */
|
|
91
100
|
pruneThreshold: number;
|
|
101
|
+
/** #1204: after the embedder fails, wait this long before retrying it (default 60 s). */
|
|
102
|
+
embedderRetryIntervalMs?: number;
|
|
92
103
|
}
|
|
93
104
|
/**
|
|
94
105
|
* ExperienceReplay stores and retrieves successful experiences for learning.
|
|
@@ -113,6 +124,13 @@ export declare class ExperienceReplay {
|
|
|
113
124
|
private prepared;
|
|
114
125
|
private initialized;
|
|
115
126
|
private initializationPromise;
|
|
127
|
+
/**
|
|
128
|
+
* #1204: whether the embedder works; retried in the background after a
|
|
129
|
+
* failure, as the pattern banks do (#1187).
|
|
130
|
+
*/
|
|
131
|
+
private readonly embedderRecovery;
|
|
132
|
+
/** Whether an embedding succeeded, to label later failures as runtime ones. */
|
|
133
|
+
private embedderWorked;
|
|
116
134
|
private hnswIndex;
|
|
117
135
|
private idToExperienceId;
|
|
118
136
|
private experienceIdToHnswId;
|
|
@@ -150,6 +168,17 @@ export declare class ExperienceReplay {
|
|
|
150
168
|
* @returns The stored experience
|
|
151
169
|
*/
|
|
152
170
|
storeExperience(trajectory: Trajectory, strategy: string, tags?: string[]): Promise<Experience | null>;
|
|
171
|
+
/**
|
|
172
|
+
* #1022: embed text, or return null when no embedding runtime is available.
|
|
173
|
+
* The experience is then stored without a vector (backfilled at a later
|
|
174
|
+
* start that has an embedder) and similarity search finds no matches.
|
|
175
|
+
* #1204: a failure is reported by getEmbedderStatus(), labelled as a
|
|
176
|
+
* runtime failure when the embedder had worked, and warned about once per
|
|
177
|
+
* outage. The embedder is retried in the background after the interval.
|
|
178
|
+
*/
|
|
179
|
+
private embedOrNull;
|
|
180
|
+
/** #1204: whether similar-experience guidance can use vectors, and if not why. */
|
|
181
|
+
getEmbedderStatus(): ExperienceGuidanceStatus;
|
|
153
182
|
/**
|
|
154
183
|
* Get guidance for a new task based on similar experiences
|
|
155
184
|
*
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import { getUnifiedMemory } from '../../../kernel/unified-memory.js';
|
|
17
|
-
import { computeRealEmbedding, } from '../../../learning/real-embeddings.js';
|
|
17
|
+
import { computeRealEmbedding, cosineSimilarity, } from '../../../learning/real-embeddings.js';
|
|
18
|
+
import { EmbedderRecovery, probeEmbedder } from '../../../learning/embedder-recovery.js';
|
|
18
19
|
import { CircularBuffer } from '../../../shared/utils/circular-buffer.js';
|
|
19
20
|
import { HNSWEmbeddingIndex } from '../../embeddings/index/HNSWIndex.js';
|
|
20
21
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
@@ -60,6 +61,13 @@ export class ExperienceReplay {
|
|
|
60
61
|
prepared = new Map();
|
|
61
62
|
initialized = false;
|
|
62
63
|
initializationPromise = null;
|
|
64
|
+
/**
|
|
65
|
+
* #1204: whether the embedder works; retried in the background after a
|
|
66
|
+
* failure, as the pattern banks do (#1187).
|
|
67
|
+
*/
|
|
68
|
+
embedderRecovery;
|
|
69
|
+
/** Whether an embedding succeeded, to label later failures as runtime ones. */
|
|
70
|
+
embedderWorked = false;
|
|
63
71
|
// Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
|
|
64
72
|
hnswIndex;
|
|
65
73
|
// Mapping from HNSW numeric IDs to experience string IDs
|
|
@@ -81,6 +89,11 @@ export class ExperienceReplay {
|
|
|
81
89
|
constructor(config = {}) {
|
|
82
90
|
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
83
91
|
this.recentExperiences = new CircularBuffer(100);
|
|
92
|
+
this.embedderRecovery = new EmbedderRecovery({
|
|
93
|
+
retryIntervalMs: this.config.embedderRetryIntervalMs,
|
|
94
|
+
probe: () => probeEmbedder(this.config.embedding),
|
|
95
|
+
onRecovered: () => console.log('[ExperienceReplay] Embedder available again: similar-experience guidance uses vectors'),
|
|
96
|
+
});
|
|
84
97
|
// Initialize real HNSW index with optimal parameters for experience search
|
|
85
98
|
this.hnswIndex = new HNSWEmbeddingIndex({
|
|
86
99
|
dimension: 384, // all-MiniLM-L6-v2 dimension
|
|
@@ -399,7 +412,7 @@ export class ExperienceReplay {
|
|
|
399
412
|
.map(s => scrubReasoningBlocks(s.action));
|
|
400
413
|
// Generate embedding for similarity search
|
|
401
414
|
const embeddingText = `${task} ${strategy} ${keyActions.join(' ')}`;
|
|
402
|
-
const embedding = await
|
|
415
|
+
const embedding = (await this.embedOrNull(embeddingText)) ?? undefined;
|
|
403
416
|
const id = uuidv4();
|
|
404
417
|
const domain = trajectory.domain || 'test-generation';
|
|
405
418
|
const experience = {
|
|
@@ -456,6 +469,40 @@ export class ExperienceReplay {
|
|
|
456
469
|
}
|
|
457
470
|
return experience;
|
|
458
471
|
}
|
|
472
|
+
/**
|
|
473
|
+
* #1022: embed text, or return null when no embedding runtime is available.
|
|
474
|
+
* The experience is then stored without a vector (backfilled at a later
|
|
475
|
+
* start that has an embedder) and similarity search finds no matches.
|
|
476
|
+
* #1204: a failure is reported by getEmbedderStatus(), labelled as a
|
|
477
|
+
* runtime failure when the embedder had worked, and warned about once per
|
|
478
|
+
* outage. The embedder is retried in the background after the interval.
|
|
479
|
+
*/
|
|
480
|
+
async embedOrNull(text) {
|
|
481
|
+
if (!this.embedderRecovery.isAvailable())
|
|
482
|
+
return null;
|
|
483
|
+
try {
|
|
484
|
+
const embedding = await computeRealEmbedding(text, this.config.embedding);
|
|
485
|
+
this.embedderWorked = true;
|
|
486
|
+
return embedding;
|
|
487
|
+
}
|
|
488
|
+
catch (error) {
|
|
489
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
490
|
+
const reason = this.embedderWorked ? `Embedder failed at runtime: ${message}` : message;
|
|
491
|
+
if (this.embedderRecovery.markUnavailable(reason)) {
|
|
492
|
+
console.warn(this.embedderWorked
|
|
493
|
+
? '[ExperienceReplay] Embedder failed; experiences are stored without vectors and ' +
|
|
494
|
+
'similar-experience guidance is unavailable until it recovers:'
|
|
495
|
+
: '[ExperienceReplay] No embedding runtime; experiences are stored without vectors ' +
|
|
496
|
+
'and similar-experience guidance is unavailable:', message);
|
|
497
|
+
}
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
/** #1204: whether similar-experience guidance can use vectors, and if not why. */
|
|
502
|
+
getEmbedderStatus() {
|
|
503
|
+
const reason = this.embedderRecovery.unavailableReason;
|
|
504
|
+
return reason === null ? { mode: 'vector' } : { mode: 'unavailable', reason };
|
|
505
|
+
}
|
|
459
506
|
/**
|
|
460
507
|
* Get guidance for a new task based on similar experiences
|
|
461
508
|
*
|
|
@@ -465,9 +512,19 @@ export class ExperienceReplay {
|
|
|
465
512
|
*/
|
|
466
513
|
async getGuidance(task, domain) {
|
|
467
514
|
this.ensureInitialized();
|
|
515
|
+
// #1022: without an embedding of the query nothing measures relevance, so
|
|
516
|
+
// return no guidance rather than picks with a made-up similarity.
|
|
517
|
+
const queryEmbedding = await this.embedOrNull(scrubReasoningBlocks(task));
|
|
518
|
+
if (!queryEmbedding) {
|
|
519
|
+
return null;
|
|
520
|
+
}
|
|
468
521
|
// Find similar experiences via HNSW
|
|
469
522
|
const similar = await this.findSimilarExperiences(task, domain);
|
|
470
|
-
// Blend in high-coherence experiences from reservoir buffer (R10, ADR-087)
|
|
523
|
+
// Blend in high-coherence experiences from reservoir buffer (R10, ADR-087).
|
|
524
|
+
// #1192: the buffer samples without looking at the query, so a sample is
|
|
525
|
+
// kept only when its similarity to the query embedding is measured and
|
|
526
|
+
// reaches the retrieval threshold. Samples without a comparable vector
|
|
527
|
+
// are skipped: every reported similarity is a measured one.
|
|
471
528
|
if (this.reservoirBuffer && this.reservoirBuffer.size() > 0) {
|
|
472
529
|
const reservoirSamples = this.reservoirBuffer.sample(Math.max(2, Math.floor(this.config.topK / 2)), 0.6);
|
|
473
530
|
for (const entry of reservoirSamples) {
|
|
@@ -478,8 +535,12 @@ export class ExperienceReplay {
|
|
|
478
535
|
// Skip if domain filter doesn't match
|
|
479
536
|
if (domain && exp.domain !== domain)
|
|
480
537
|
continue;
|
|
481
|
-
|
|
482
|
-
|
|
538
|
+
if (!exp.embedding || exp.embedding.length !== queryEmbedding.length)
|
|
539
|
+
continue;
|
|
540
|
+
const similarity = cosineSimilarity(queryEmbedding, exp.embedding);
|
|
541
|
+
if (similarity < this.config.similarityThreshold)
|
|
542
|
+
continue;
|
|
543
|
+
similar.push({ experience: exp, similarity });
|
|
483
544
|
}
|
|
484
545
|
}
|
|
485
546
|
if (similar.length === 0) {
|
|
@@ -546,7 +607,10 @@ export class ExperienceReplay {
|
|
|
546
607
|
// Generate embedding for the task
|
|
547
608
|
// ADR-099: scrub so query embeddings match the scrubbed stored embeddings
|
|
548
609
|
task = scrubReasoningBlocks(task);
|
|
549
|
-
const taskEmbedding = await
|
|
610
|
+
const taskEmbedding = await this.embedOrNull(task);
|
|
611
|
+
if (!taskEmbedding) {
|
|
612
|
+
return [];
|
|
613
|
+
}
|
|
550
614
|
// Create query embedding for HNSW search
|
|
551
615
|
const queryEmbedding = {
|
|
552
616
|
vector: taskEmbedding,
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
* - Automatic strategy recommendations
|
|
16
16
|
* - Pattern quality improvement over time
|
|
17
17
|
*/
|
|
18
|
-
import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
|
|
18
|
+
import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type PatternSearchStatus, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
|
|
19
19
|
import { TrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig } from './trajectory-tracker.js';
|
|
20
|
-
import { ExperienceReplay, type ExperienceGuidance, type ExperienceReplayConfig } from './experience-replay.js';
|
|
20
|
+
import { ExperienceReplay, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig } from './experience-replay.js';
|
|
21
21
|
import { PatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig } from './pattern-evolution.js';
|
|
22
22
|
import type { QEPattern, QEDomain, CreateQEPatternOptions } from '../../../learning/qe-patterns.js';
|
|
23
23
|
export interface EnhancedReasoningBankAdapterStats {
|
|
@@ -32,7 +32,7 @@ export interface EnhancedReasoningBankAdapterStats {
|
|
|
32
32
|
}
|
|
33
33
|
import type { Result } from '../../../shared/types/index.js';
|
|
34
34
|
export { TrajectoryTracker, createTrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig, } from './trajectory-tracker.js';
|
|
35
|
-
export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceReplayConfig, } from './experience-replay.js';
|
|
35
|
+
export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig, } from './experience-replay.js';
|
|
36
36
|
export { PatternEvolution, createPatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig, } from './pattern-evolution.js';
|
|
37
37
|
/**
|
|
38
38
|
* Configuration for Enhanced ReasoningBank Adapter
|
|
@@ -183,6 +183,13 @@ export declare class EnhancedReasoningBankAdapter {
|
|
|
183
183
|
domain?: QEDomain;
|
|
184
184
|
minSimilarity?: number;
|
|
185
185
|
}): Promise<Result<RealQEPatternSearchResult[]>>;
|
|
186
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
187
|
+
getPatternSearchStatus(): PatternSearchStatus;
|
|
188
|
+
/**
|
|
189
|
+
* #1204: whether similar-experience guidance can use vectors; null when
|
|
190
|
+
* experience replay is disabled.
|
|
191
|
+
*/
|
|
192
|
+
getExperienceGuidanceStatus(): ExperienceGuidanceStatus | null;
|
|
186
193
|
/**
|
|
187
194
|
* Record a pattern outcome with evolution tracking
|
|
188
195
|
*/
|
|
@@ -297,6 +297,19 @@ export class EnhancedReasoningBankAdapter {
|
|
|
297
297
|
this.ensureInitialized();
|
|
298
298
|
return this.reasoningBank.searchQEPatterns(query, options);
|
|
299
299
|
}
|
|
300
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
301
|
+
getPatternSearchStatus() {
|
|
302
|
+
this.ensureInitialized();
|
|
303
|
+
return this.reasoningBank.getPatternSearchStatus();
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* #1204: whether similar-experience guidance can use vectors; null when
|
|
307
|
+
* experience replay is disabled.
|
|
308
|
+
*/
|
|
309
|
+
getExperienceGuidanceStatus() {
|
|
310
|
+
this.ensureInitialized();
|
|
311
|
+
return this.experienceReplay?.getEmbedderStatus() ?? null;
|
|
312
|
+
}
|
|
300
313
|
/**
|
|
301
314
|
* Record a pattern outcome with evolution tracking
|
|
302
315
|
*/
|
|
@@ -69,7 +69,8 @@ function resolveField(result, fieldPath) {
|
|
|
69
69
|
for (const part of parts) {
|
|
70
70
|
if (current === null || current === undefined)
|
|
71
71
|
break;
|
|
72
|
-
|
|
72
|
+
// #1157: an inherited member such as `toString` is not a field.
|
|
73
|
+
if (typeof current === 'object' && Object.hasOwn(current, part)) {
|
|
73
74
|
current = current[part];
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* @module learning/dream/insight-generator
|
|
15
15
|
*/
|
|
16
16
|
import { randomUUID } from 'crypto';
|
|
17
|
+
import { getOwn, setOwn } from '../../shared/utils/safe-record.js';
|
|
17
18
|
/**
|
|
18
19
|
* Default insight configuration
|
|
19
20
|
*/
|
|
@@ -320,10 +321,10 @@ export class InsightGenerator {
|
|
|
320
321
|
};
|
|
321
322
|
for (const node of activeNodes) {
|
|
322
323
|
const typeKey = node.conceptType ?? 'pattern';
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
324
|
+
// #1157: concept types come from stored nodes; own buckets only.
|
|
325
|
+
const bucket = getOwn(byType, typeKey) ?? [];
|
|
326
|
+
setOwn(byType, typeKey, bucket);
|
|
327
|
+
bucket.push(node);
|
|
327
328
|
}
|
|
328
329
|
// Gap: Error without resolution
|
|
329
330
|
for (const errorNode of byType.error ?? []) {
|
|
@@ -121,6 +121,14 @@ export declare class EmbedderEndpointClient {
|
|
|
121
121
|
failures: number;
|
|
122
122
|
trippedAt: number | null;
|
|
123
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* #1204: probe the endpoint while the circuit breaker is open, as its single
|
|
126
|
+
* half-open trial. Other callers keep fast-failing meanwhile. A success
|
|
127
|
+
* closes the breaker and refreshes the identity; a failure keeps the
|
|
128
|
+
* breaker open for another full window. Lets a caller that rate-limits its
|
|
129
|
+
* own retries recover without also waiting out the breaker window.
|
|
130
|
+
*/
|
|
131
|
+
probeThroughOpenBreaker(): Promise<EndpointIdentity>;
|
|
124
132
|
/**
|
|
125
133
|
* Close the underlying keep-alive agent. Tests should call this in afterEach.
|
|
126
134
|
*/
|
|
@@ -125,6 +125,10 @@ class CircuitBreaker {
|
|
|
125
125
|
}
|
|
126
126
|
return true;
|
|
127
127
|
}
|
|
128
|
+
/** #1204: open (or re-open) the breaker for a full window from now. */
|
|
129
|
+
trip() {
|
|
130
|
+
this.trippedAt = Date.now();
|
|
131
|
+
}
|
|
128
132
|
/** For tests / observability */
|
|
129
133
|
getState() {
|
|
130
134
|
return { open: this.isOpen(), failures: this.failures.length, trippedAt: this.trippedAt };
|
|
@@ -266,6 +270,22 @@ export class EmbedderEndpointClient {
|
|
|
266
270
|
getBreakerState() {
|
|
267
271
|
return this.breaker.getState();
|
|
268
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* #1204: probe the endpoint while the circuit breaker is open, as its single
|
|
275
|
+
* half-open trial. Other callers keep fast-failing meanwhile. A success
|
|
276
|
+
* closes the breaker and refreshes the identity; a failure keeps the
|
|
277
|
+
* breaker open for another full window. Lets a caller that rate-limits its
|
|
278
|
+
* own retries recover without also waiting out the breaker window.
|
|
279
|
+
*/
|
|
280
|
+
async probeThroughOpenBreaker() {
|
|
281
|
+
try {
|
|
282
|
+
return await this.probe();
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
this.breaker.trip();
|
|
286
|
+
throw err;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
269
289
|
/**
|
|
270
290
|
* Close the underlying keep-alive agent. Tests should call this in afterEach.
|
|
271
291
|
*/
|