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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caller-facing summary of a coverage runner's stderr.
|
|
3
|
+
*
|
|
4
|
+
* #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
|
|
5
|
+
* #1139 error backstop never sees it, so it is redacted here. Redaction runs
|
|
6
|
+
* BEFORE slicing: a slice boundary that cut a token or connection string in
|
|
7
|
+
* half would leave a fragment the redaction patterns no longer recognise.
|
|
8
|
+
* The collector therefore keeps a wide raw window at each end of the stream;
|
|
9
|
+
* each window is redacted whole, and only then are the short head and tail
|
|
10
|
+
* taken from it. A secret cut by a window edge lies far outside the part
|
|
11
|
+
* that is kept.
|
|
12
|
+
*/
|
|
13
|
+
/** Raw stderr kept at each end of the stream, before redaction. */
|
|
14
|
+
export declare const STDERR_WINDOW_BYTES: number;
|
|
15
|
+
/**
|
|
16
|
+
* Summarise a runner's stderr for a caller: the FIRST error-looking line (or
|
|
17
|
+
* the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
|
|
18
|
+
* loses the cause when a long stack follows it — a vitest config syntax error
|
|
19
|
+
* prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
|
|
20
|
+
* `tail` are the raw windows at each end; both are redacted before slicing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function summarizeStderr(head: string, tail: string, totalBytes: number): string;
|
|
23
|
+
//# sourceMappingURL=coverage-stderr.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caller-facing summary of a coverage runner's stderr.
|
|
3
|
+
*
|
|
4
|
+
* #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
|
|
5
|
+
* #1139 error backstop never sees it, so it is redacted here. Redaction runs
|
|
6
|
+
* BEFORE slicing: a slice boundary that cut a token or connection string in
|
|
7
|
+
* half would leave a fragment the redaction patterns no longer recognise.
|
|
8
|
+
* The collector therefore keeps a wide raw window at each end of the stream;
|
|
9
|
+
* each window is redacted whole, and only then are the short head and tail
|
|
10
|
+
* taken from it. A secret cut by a window edge lies far outside the part
|
|
11
|
+
* that is kept.
|
|
12
|
+
*/
|
|
13
|
+
import { redactLogText } from '../../logging/redaction.js';
|
|
14
|
+
/** Raw stderr kept at each end of the stream, before redaction. */
|
|
15
|
+
export const STDERR_WINDOW_BYTES = 64 * 1024;
|
|
16
|
+
const STDERR_TAIL_BYTES = 2048;
|
|
17
|
+
const STDERR_HEAD_BYTES = 4096;
|
|
18
|
+
const STDERR_PREFIX_BYTES = 512;
|
|
19
|
+
const ERROR_LINE_RE = /^.*(?:error|\[[A-Z][A-Z_]{2,}\]|ERR_[A-Z_]+).*$/im;
|
|
20
|
+
/**
|
|
21
|
+
* Summarise a runner's stderr for a caller: the FIRST error-looking line (or
|
|
22
|
+
* the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
|
|
23
|
+
* loses the cause when a long stack follows it — a vitest config syntax error
|
|
24
|
+
* prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
|
|
25
|
+
* `tail` are the raw windows at each end; both are redacted before slicing.
|
|
26
|
+
*/
|
|
27
|
+
export function summarizeStderr(head, tail, totalBytes) {
|
|
28
|
+
const safeTail = redactLogText(tail, Number.POSITIVE_INFINITY);
|
|
29
|
+
if (totalBytes <= STDERR_TAIL_BYTES)
|
|
30
|
+
return safeTail.trim();
|
|
31
|
+
const safeHead = redactLogText(head, Number.POSITIVE_INFINITY).slice(0, STDERR_HEAD_BYTES);
|
|
32
|
+
const tailPart = safeTail.slice(-STDERR_TAIL_BYTES);
|
|
33
|
+
const errorLine = ERROR_LINE_RE.exec(safeHead)?.[0]?.trim();
|
|
34
|
+
const prefix = (errorLine ?? safeHead.slice(0, STDERR_PREFIX_BYTES)).trim();
|
|
35
|
+
if (prefix && tailPart.includes(prefix))
|
|
36
|
+
return tailPart.trim();
|
|
37
|
+
return `${prefix}\n…\n${tailPart.trim()}`;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=coverage-stderr.js.map
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* and the CLI `coverage` command can share it.
|
|
20
20
|
*/
|
|
21
21
|
import type { CoverageData, FileCoverage } from '../../domains/coverage-analysis/interfaces';
|
|
22
|
+
import { type CoverageEvidence } from './coverage-evidence';
|
|
22
23
|
/**
|
|
23
24
|
* Walk up from a target to the nearest directory that holds a project marker.
|
|
24
25
|
*
|
|
@@ -75,6 +76,7 @@ export type NoDataReason =
|
|
|
75
76
|
export type CoverageEvaluation = {
|
|
76
77
|
status: 'measured';
|
|
77
78
|
files: FileCoverage[];
|
|
79
|
+
evidence: CoverageEvidence;
|
|
78
80
|
} | {
|
|
79
81
|
status: 'no-data';
|
|
80
82
|
reason: NoDataReason;
|
|
@@ -88,9 +90,16 @@ export type CoverageEvaluation = {
|
|
|
88
90
|
* - the report has no entry under the target.
|
|
89
91
|
* Hit counts are never used: a file listed with 0 hits is a measured 0%,
|
|
90
92
|
* whether the report came from our run or from the user (#995 review B3).
|
|
93
|
+
*
|
|
94
|
+
* A measured result carries its evidence (#1154): the target's source files
|
|
95
|
+
* the report has no entry for (UNMEASURED), and whether the report at
|
|
96
|
+
* `reportPath` is older than the sources. Insufficient evidence keeps the
|
|
97
|
+
* figures for the measured files, but no caller may pass a verdict on it.
|
|
91
98
|
*/
|
|
92
99
|
export declare function evaluateCoverageForTarget(report: CoverageData, projectRoot: string, target: string, options?: {
|
|
93
100
|
numTotalTests?: number | null;
|
|
101
|
+
reportPath?: string;
|
|
102
|
+
checkCompleteness?: boolean;
|
|
94
103
|
}): CoverageEvaluation;
|
|
95
104
|
export type ExistingCoverage = {
|
|
96
105
|
status: 'target-missing';
|
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
* and the CLI `coverage` command can share it.
|
|
20
20
|
*/
|
|
21
21
|
import * as fs from 'fs';
|
|
22
|
+
import { readConfinedText, readConfinedTextSync } from '../../shared/io/confined-read.js';
|
|
22
23
|
import * as os from 'os';
|
|
23
24
|
import * as path from 'path';
|
|
24
|
-
import {
|
|
25
|
+
import { loadCoverageReport, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
|
|
25
26
|
import { isTestPath } from './coverage-collection.js';
|
|
27
|
+
import { assessCoverageEvidence } from './coverage-evidence.js';
|
|
26
28
|
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
27
29
|
// ============================================================================
|
|
28
30
|
// Project root
|
|
@@ -99,7 +101,7 @@ function packageCanUseRootRunner(pkgDir, rootDir) {
|
|
|
99
101
|
}
|
|
100
102
|
function readPackageJson(dir) {
|
|
101
103
|
try {
|
|
102
|
-
const parsed = JSON.parse(
|
|
104
|
+
const parsed = JSON.parse(readConfinedTextSync(path.join(dir, 'package.json'), { outsideRoot: 'allow' }));
|
|
103
105
|
return typeof parsed === 'object' && parsed !== null ? parsed : null;
|
|
104
106
|
}
|
|
105
107
|
catch {
|
|
@@ -128,7 +130,7 @@ function readWorkspacePatterns(dir) {
|
|
|
128
130
|
// Only the block-list `packages:` form is read; the flow form gives no
|
|
129
131
|
// patterns, so the root is not adopted (fails safe).
|
|
130
132
|
try {
|
|
131
|
-
const yaml =
|
|
133
|
+
const yaml = readConfinedTextSync(path.join(dir, 'pnpm-workspace.yaml'), { outsideRoot: 'allow' });
|
|
132
134
|
isRoot = true;
|
|
133
135
|
let inPackages = false;
|
|
134
136
|
for (const raw of yaml.split(/\r?\n/)) {
|
|
@@ -326,7 +328,9 @@ export function isCoverageReportFile(filePath) {
|
|
|
326
328
|
export async function loadCoverageReportFile(filePath) {
|
|
327
329
|
let content;
|
|
328
330
|
try {
|
|
329
|
-
|
|
331
|
+
// #1161: read from the validated descriptor, not the name checked earlier;
|
|
332
|
+
// a report linked out of the project, or to a device, is not read.
|
|
333
|
+
content = await readConfinedText(filePath, { outsideRoot: 'allow' });
|
|
330
334
|
}
|
|
331
335
|
catch {
|
|
332
336
|
return null;
|
|
@@ -415,6 +419,11 @@ export function scopeCoverageToTarget(data, root, target) {
|
|
|
415
419
|
* - the report has no entry under the target.
|
|
416
420
|
* Hit counts are never used: a file listed with 0 hits is a measured 0%,
|
|
417
421
|
* whether the report came from our run or from the user (#995 review B3).
|
|
422
|
+
*
|
|
423
|
+
* A measured result carries its evidence (#1154): the target's source files
|
|
424
|
+
* the report has no entry for (UNMEASURED), and whether the report at
|
|
425
|
+
* `reportPath` is older than the sources. Insufficient evidence keeps the
|
|
426
|
+
* figures for the measured files, but no caller may pass a verdict on it.
|
|
418
427
|
*/
|
|
419
428
|
export function evaluateCoverageForTarget(report, projectRoot, target, options = {}) {
|
|
420
429
|
if (options.numTotalTests === 0)
|
|
@@ -427,7 +436,10 @@ export function evaluateCoverageForTarget(report, projectRoot, target, options =
|
|
|
427
436
|
const production = scoped.filter(f => !isTestPath(f.path, projectRoot));
|
|
428
437
|
if (production.length === 0)
|
|
429
438
|
return { status: 'no-data', reason: 'test-only-report' };
|
|
430
|
-
|
|
439
|
+
const evidence = assessCoverageEvidence(report, production, projectRoot, target, {
|
|
440
|
+
reportPath: options.reportPath, checkCompleteness: options.checkCompleteness,
|
|
441
|
+
});
|
|
442
|
+
return { status: 'measured', files: production, evidence };
|
|
431
443
|
}
|
|
432
444
|
/**
|
|
433
445
|
* Resolve a target to coverage that already exists on disk, without running
|
|
@@ -451,18 +463,19 @@ export async function resolveExistingCoverage(targetPath) {
|
|
|
451
463
|
const projectRoot = findCoverageProjectRoot(reportDir)
|
|
452
464
|
?? (path.basename(reportDir) === 'coverage' ? path.dirname(reportDir) : reportDir);
|
|
453
465
|
const report = await loadCoverageReportFile(target);
|
|
466
|
+
// The report itself is the target: judged whole, but still checked for staleness.
|
|
454
467
|
const evaluation = report
|
|
455
|
-
? evaluateCoverageForTarget(report, projectRoot, projectRoot)
|
|
468
|
+
? evaluateCoverageForTarget(report, projectRoot, projectRoot, { reportPath: target, checkCompleteness: false })
|
|
456
469
|
: { status: 'no-data', reason: 'unreadable-report' };
|
|
457
470
|
return { status: 'evaluated', target, projectRoot, source: 'report-file', evaluation };
|
|
458
471
|
}
|
|
459
472
|
const projectRoot = findCoverageProjectRoot(target) ?? (stat.isDirectory() ? target : path.dirname(target));
|
|
460
|
-
const existing = await
|
|
473
|
+
const existing = await loadCoverageReport(projectRoot);
|
|
461
474
|
if (!existing)
|
|
462
475
|
return { status: 'no-report', target, projectRoot };
|
|
463
476
|
return {
|
|
464
477
|
status: 'evaluated', target, projectRoot, source: 'project-report',
|
|
465
|
-
evaluation: evaluateCoverageForTarget(existing, projectRoot, target),
|
|
478
|
+
evaluation: evaluateCoverageForTarget(existing.data, projectRoot, target, { reportPath: existing.path }),
|
|
466
479
|
};
|
|
467
480
|
}
|
|
468
481
|
/**
|
|
@@ -74,6 +74,11 @@ export interface IstanbulFileCoverage {
|
|
|
74
74
|
* Load coverage data from common coverage file formats
|
|
75
75
|
*/
|
|
76
76
|
export declare function loadCoverageData(targetPath: string): Promise<CoverageData | null>;
|
|
77
|
+
/** `loadCoverageData` plus the path of the report it read (#1154: staleness needs it). */
|
|
78
|
+
export declare function loadCoverageReport(targetPath: string): Promise<{
|
|
79
|
+
data: CoverageData;
|
|
80
|
+
path: string;
|
|
81
|
+
} | null>;
|
|
77
82
|
/**
|
|
78
83
|
* Per-line hit counts of one istanbul file entry, computed the way istanbul's
|
|
79
84
|
* own `FileCoverage#getLineCoverage` (and therefore coverage-summary.json
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* now co-located with the handlers that use them.
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'fs/promises';
|
|
8
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
8
9
|
import * as path from 'path';
|
|
9
10
|
import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
|
|
10
11
|
import { safeJsonParse } from '../../shared/safe-json.js';
|
|
@@ -15,6 +16,10 @@ import { safeJsonParse } from '../../shared/safe-json.js';
|
|
|
15
16
|
* Load coverage data from common coverage file formats
|
|
16
17
|
*/
|
|
17
18
|
export async function loadCoverageData(targetPath) {
|
|
19
|
+
return (await loadCoverageReport(targetPath))?.data ?? null;
|
|
20
|
+
}
|
|
21
|
+
/** `loadCoverageData` plus the path of the report it read (#1154: staleness needs it). */
|
|
22
|
+
export async function loadCoverageReport(targetPath) {
|
|
18
23
|
// Try various coverage file locations (JS, Python, Java, etc.)
|
|
19
24
|
const coverageLocations = [
|
|
20
25
|
// JavaScript/TypeScript (Istanbul/nyc/vitest)
|
|
@@ -32,18 +37,19 @@ export async function loadCoverageData(targetPath) {
|
|
|
32
37
|
];
|
|
33
38
|
for (const coveragePath of coverageLocations) {
|
|
34
39
|
try {
|
|
35
|
-
|
|
40
|
+
// #1161: a report linked out of the project, or to a device, is not read.
|
|
41
|
+
const content = await readConfinedText(coveragePath, { outsideRoot: 'allow' });
|
|
36
42
|
if (coveragePath.endsWith('coverage-summary.json')) {
|
|
37
|
-
return parseCoverageSummaryJson(content);
|
|
43
|
+
return { data: parseCoverageSummaryJson(content), path: coveragePath };
|
|
38
44
|
}
|
|
39
45
|
else if (coveragePath.endsWith('.json')) {
|
|
40
|
-
return parseCoverageJson(content);
|
|
46
|
+
return { data: parseCoverageJson(content), path: coveragePath };
|
|
41
47
|
}
|
|
42
48
|
else if (coveragePath.endsWith('.info')) {
|
|
43
|
-
return parseLcovInfo(content);
|
|
49
|
+
return { data: parseLcovInfo(content), path: coveragePath };
|
|
44
50
|
}
|
|
45
51
|
else if (coveragePath.endsWith('.xml')) {
|
|
46
|
-
return parseCoberturaXml(content);
|
|
52
|
+
return { data: parseCoberturaXml(content), path: coveragePath };
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
55
|
catch {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Extracted from task-executor.ts registerHandlers().
|
|
5
5
|
* Covers: validate-requirements, validate-contracts
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
7
|
+
import { readConfinedText } from '../../shared/io/confined-read.js';
|
|
8
8
|
import { ok, err } from '../../shared/types/index.js';
|
|
9
9
|
import { toError, toErrorMessage } from '../../shared/error-utils.js';
|
|
10
10
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
@@ -74,7 +74,8 @@ export function registerRequirementsHandlers(ctx) {
|
|
|
74
74
|
return confined;
|
|
75
75
|
// Check if the contract file exists
|
|
76
76
|
try {
|
|
77
|
-
|
|
77
|
+
// #1161: read from the descriptor that was validated, not the name.
|
|
78
|
+
const content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
78
79
|
const isJson = payload.contractPath.endsWith('.json');
|
|
79
80
|
const isYaml = payload.contractPath.endsWith('.yaml') || payload.contractPath.endsWith('.yml');
|
|
80
81
|
// Basic structural validation
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Extracted from task-executor.ts registerHandlers().
|
|
5
5
|
* Covers: scan-security
|
|
6
6
|
*/
|
|
7
|
-
import * as fs from 'fs/promises';
|
|
8
7
|
import * as path from 'path';
|
|
9
8
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
9
|
import { createHash } from 'node:crypto';
|
|
@@ -14,6 +13,8 @@ import { generateSecurityRecommendations } from './handler-utils.js';
|
|
|
14
13
|
import { discoverSecurityFiles, isSecuritySourceFile } from '../../domains/security-compliance/scan-discovery.js';
|
|
15
14
|
import { runDependencyAdvisoryScan } from '../../domains/security-compliance/dependency-advisory-engine.js';
|
|
16
15
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
16
|
+
import { dropGenericEvalCoveredBySast, GENERIC_EVAL_EXEC_TITLE } from '../../domains/security-compliance/generic-finding-dedup.js';
|
|
17
|
+
import { readConfinedFile } from '../../shared/io/confined-read.js';
|
|
17
18
|
export function registerSecurityHandlers(ctx) {
|
|
18
19
|
// Register security scan handler - REAL IMPLEMENTATION
|
|
19
20
|
ctx.registerHandler('scan-security', async (task) => {
|
|
@@ -44,6 +45,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
44
45
|
const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
|
|
45
46
|
// Run basic cross-language security patterns on non-JS/TS files
|
|
46
47
|
const crossLangVulns = [];
|
|
48
|
+
// Generic eval/exec matches whose line calls eval() and not exec() (#1170).
|
|
49
|
+
const evalOnlyFindings = new Set();
|
|
47
50
|
// Run secret/CORS patterns on ALL files (not just otherFiles) to catch JS/TS secrets too
|
|
48
51
|
for (const filePath of filesToScan) {
|
|
49
52
|
if (!isSecuritySourceFile(filePath)) {
|
|
@@ -52,13 +55,15 @@ export function registerSecurityHandlers(ctx) {
|
|
|
52
55
|
continue;
|
|
53
56
|
}
|
|
54
57
|
try {
|
|
55
|
-
|
|
58
|
+
// #1161: validate the opened descriptor, not the name checked earlier.
|
|
59
|
+
const source = await readConfinedFile(filePath, { outsideRoot: 'allow' });
|
|
56
60
|
const content = source.toString('utf-8');
|
|
57
61
|
const lines = content.split('\n');
|
|
58
62
|
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'analyzed',
|
|
59
63
|
sourceDigest: createHash('sha256').update(source).digest('hex'),
|
|
60
64
|
readLines: lines.length, analyzedLines: lines.length });
|
|
61
|
-
|
|
65
|
+
// #1170: report the scanned path, as SAST does, so a finding names the
|
|
66
|
+
// real file and the same line from both engines can be matched.
|
|
62
67
|
// Pattern: Hardcoded secrets/keys
|
|
63
68
|
// Fix #287: Use \w* around keywords to match SECRET_KEY, JWT_SECRET, API_TOKEN, etc.
|
|
64
69
|
const secretPatterns = [
|
|
@@ -75,7 +80,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
75
80
|
crossLangVulns.push({
|
|
76
81
|
title: pattern.title,
|
|
77
82
|
severity: pattern.severity,
|
|
78
|
-
location: { file:
|
|
83
|
+
location: { file: filePath, line: i + 1 },
|
|
79
84
|
description: `Potential hardcoded secret found at line ${i + 1}`,
|
|
80
85
|
category: 'sensitive-data',
|
|
81
86
|
});
|
|
@@ -90,7 +95,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
90
95
|
crossLangVulns.push({
|
|
91
96
|
title: 'Potential SQL injection',
|
|
92
97
|
severity: 'high',
|
|
93
|
-
location: { file:
|
|
98
|
+
location: { file: filePath, line: i + 1 },
|
|
94
99
|
description: 'String interpolation in SQL query — use parameterized queries',
|
|
95
100
|
category: 'injection',
|
|
96
101
|
});
|
|
@@ -111,7 +116,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
111
116
|
crossLangVulns.push({
|
|
112
117
|
title: 'CORS wildcard origin',
|
|
113
118
|
severity: 'high',
|
|
114
|
-
location: { file:
|
|
119
|
+
location: { file: filePath, line: lines.findIndex(l => corsPattern.test(l)) + 1 },
|
|
115
120
|
description: 'CORS configured with wildcard (*) origin — restrict to specific domains',
|
|
116
121
|
category: 'security-misconfiguration',
|
|
117
122
|
});
|
|
@@ -124,21 +129,26 @@ export function registerSecurityHandlers(ctx) {
|
|
|
124
129
|
crossLangVulns.push({
|
|
125
130
|
title: 'Debug mode enabled',
|
|
126
131
|
severity: 'medium',
|
|
127
|
-
location: { file:
|
|
132
|
+
location: { file: filePath, line: lines.findIndex(l => /DEBUG\s*[=:]\s*(?:True|true|1)/i.test(l)) + 1 },
|
|
128
133
|
description: 'Debug mode should be disabled in production',
|
|
129
134
|
category: 'security-misconfiguration',
|
|
130
135
|
});
|
|
131
136
|
}
|
|
132
|
-
// Pattern: Eval/exec usage
|
|
137
|
+
// Pattern: Eval/exec usage, one finding per matching line (#1170)
|
|
133
138
|
genericRules.set('eval-exec', /\b(?:eval|exec)\s*\(/i.toString());
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
for (let i = 0; i < lines.length; i++) {
|
|
140
|
+
if (!/\b(?:eval|exec)\s*\(/i.test(lines[i]))
|
|
141
|
+
continue;
|
|
142
|
+
const finding = {
|
|
143
|
+
title: GENERIC_EVAL_EXEC_TITLE,
|
|
137
144
|
severity: 'high',
|
|
138
|
-
location: { file:
|
|
145
|
+
location: { file: filePath, line: i + 1 },
|
|
139
146
|
description: 'eval/exec can lead to code injection — avoid using with user input',
|
|
140
147
|
category: 'injection',
|
|
141
|
-
}
|
|
148
|
+
};
|
|
149
|
+
crossLangVulns.push(finding);
|
|
150
|
+
if (!/\bexec\s*\(/i.test(lines[i]))
|
|
151
|
+
evalOnlyFindings.add(finding);
|
|
142
152
|
}
|
|
143
153
|
}
|
|
144
154
|
catch (error) {
|
|
@@ -153,7 +163,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
153
163
|
for (const manifest of sastRequested ? depManifests : []) {
|
|
154
164
|
const manifestPath = path.join(targetPath, manifest);
|
|
155
165
|
try {
|
|
156
|
-
|
|
166
|
+
// #1161: a manifest linked out of the project is not read.
|
|
167
|
+
const manifestSource = await readConfinedFile(manifestPath, { outsideRoot: 'allow' });
|
|
157
168
|
const manifestContent = manifestSource.toString('utf-8');
|
|
158
169
|
const manifestLines = manifestContent.split('\n').length;
|
|
159
170
|
fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'analyzed',
|
|
@@ -296,13 +307,16 @@ export function registerSecurityHandlers(ctx) {
|
|
|
296
307
|
};
|
|
297
308
|
const deepAnalysisPerformed = Boolean(sastResult?.evidence?.engines.some(engine => engine.id === 'patterns' && (engine.status === 'completed' || engine.status === 'partial') &&
|
|
298
309
|
(engine.analyzedFiles ?? 0) > 0));
|
|
310
|
+
// #1170: a generic eval() match on a line SAST reported as CWE-95 is the
|
|
311
|
+
// same finding, so it is counted once, as SAST reported it.
|
|
312
|
+
const genericVulns = await dropGenericEvalCoveredBySast(crossLangVulns, sastResult?.vulnerabilities ?? [], finding => evalOnlyFindings.has(finding));
|
|
299
313
|
// Combine results from all scan sources - SAST, DAST, and cross-language patterns
|
|
300
314
|
const crossLangSeverityCounts = {
|
|
301
|
-
critical:
|
|
302
|
-
high:
|
|
303
|
-
medium:
|
|
304
|
-
low:
|
|
305
|
-
informational:
|
|
315
|
+
critical: genericVulns.filter(v => v.severity === 'critical').length,
|
|
316
|
+
high: genericVulns.filter(v => v.severity === 'high').length,
|
|
317
|
+
medium: genericVulns.filter(v => v.severity === 'medium').length,
|
|
318
|
+
low: genericVulns.filter(v => v.severity === 'low').length,
|
|
319
|
+
informational: genericVulns.filter(v => v.severity === 'informational').length,
|
|
306
320
|
};
|
|
307
321
|
const depVulns = dependencyScan?.vulnerabilities ?? [];
|
|
308
322
|
const depCount = (severity) => depVulns.filter(v => v.severity === severity).length;
|
|
@@ -317,7 +331,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
317
331
|
const allVulns = [
|
|
318
332
|
...(sastResult?.vulnerabilities || []),
|
|
319
333
|
...(dastResult?.vulnerabilities || []),
|
|
320
|
-
...
|
|
334
|
+
...genericVulns,
|
|
321
335
|
...depVulns,
|
|
322
336
|
];
|
|
323
337
|
const topVulnerabilities = allVulns
|
|
@@ -51,7 +51,7 @@ import { DEFAULT_QUEEN_CONFIG, getTaskDomains, initializeTaskDomainMap, } from '
|
|
|
51
51
|
export { DOMAIN_GROUPS, TASK_DOMAIN_MAP } from './queen-types.js';
|
|
52
52
|
// Extracted modules
|
|
53
53
|
import { subscribeToEvents, computeDomainHealthFromAgents } from './queen-event-handlers.js';
|
|
54
|
-
import { findDomainsWithoutHandler, describeMissingHandler } from './task-executability.js';
|
|
54
|
+
import { findDomainsWithoutHandler, resolveTaskDomains, describeMissingHandler } from './task-executability.js';
|
|
55
55
|
import { enqueueTask, removeFromQueues, getQueuePosition, processQueue, listTasks as listTasksImpl, assignTask, dispatchStolenTask, canDomainExecuteTask, } from './queen-task-management.js';
|
|
56
56
|
import { triggerWorkStealing as triggerWorkStealingImpl, startWorkStealingTimer } from './queen-work-stealing.js';
|
|
57
57
|
import { isMinCutAwarePlugin, injectMinCutBridgeIntoPlugins, loadState, saveState, startMetricsCollectionTimer, cleanupCompletedTasks as cleanupCompletedTasksImpl, getEnabledDomains, } from './queen-lifecycle.js';
|
|
@@ -296,9 +296,9 @@ export class QueenCoordinator {
|
|
|
296
296
|
* accept the type unchanged.
|
|
297
297
|
*/
|
|
298
298
|
validateTaskExecutable(type, targetDomains = []) {
|
|
299
|
-
const candidates =
|
|
299
|
+
const candidates = resolveTaskDomains(type, targetDomains, this.domainPlugins);
|
|
300
300
|
if (candidates.length === 0) {
|
|
301
|
-
return err(new Error(`Unknown task type '${type}': no domain is configured for it. Pass a target domain.`));
|
|
301
|
+
return err(new Error(`Unknown task type '${type}': no domain is configured for it and no loaded domain handles it. Pass a target domain.`));
|
|
302
302
|
}
|
|
303
303
|
if (!this.domainPlugins)
|
|
304
304
|
return ok(undefined);
|
|
@@ -314,6 +314,11 @@ export class QueenCoordinator {
|
|
|
314
314
|
const taskId = `task_${uuidv4()}`;
|
|
315
315
|
const task = {
|
|
316
316
|
...taskInput,
|
|
317
|
+
// #1170: a plugin task type with no configured domain (e.g. sast-scan)
|
|
318
|
+
// runs in the domains that handle it, so routing and queueing see them.
|
|
319
|
+
targetDomains: getTaskDomains(taskInput.type).length > 0
|
|
320
|
+
? taskInput.targetDomains
|
|
321
|
+
: [...resolveTaskDomains(taskInput.type, taskInput.targetDomains, this.domainPlugins)],
|
|
317
322
|
id: taskId,
|
|
318
323
|
createdAt: new Date(),
|
|
319
324
|
timeout: taskInput.timeout || this.config.defaultTaskTimeout,
|
|
@@ -14,5 +14,17 @@ import type { DomainPlugin } from '../kernel/interfaces';
|
|
|
14
14
|
* every domain can run the task.
|
|
15
15
|
*/
|
|
16
16
|
export declare function findDomainsWithoutHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string, domains: readonly DomainName[]): string[];
|
|
17
|
+
/**
|
|
18
|
+
* #1170: the loaded domains whose plugin executes `type`. A plugin task type
|
|
19
|
+
* such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
|
|
20
|
+
* no target domain is routed to the domains that handle it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findDomainsWithHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string): DomainName[];
|
|
23
|
+
/**
|
|
24
|
+
* The domains a task may run in: the caller's target domains, else the
|
|
25
|
+
* domains configured for its type, else (#1170) the loaded domains whose
|
|
26
|
+
* plugin handles the type.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveTaskDomains(type: string, targetDomains: readonly DomainName[], domainPlugins?: ReadonlyMap<DomainName, DomainPlugin>): readonly DomainName[];
|
|
17
29
|
export declare function describeMissingHandler(type: string, gaps: readonly string[]): string;
|
|
18
30
|
//# sourceMappingURL=task-executability.d.ts.map
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* the `TaskAssigned` event fallback, which nothing answers, so the task stayed
|
|
7
7
|
* `running` and held a concurrency slot for good.
|
|
8
8
|
*/
|
|
9
|
+
import { getTaskDomains } from './queen-types.js';
|
|
9
10
|
/**
|
|
10
11
|
* List the domains among `domains` that cannot execute `type`, each with the
|
|
11
12
|
* reason and, where known, the types it does support. An empty list means
|
|
@@ -25,6 +26,32 @@ export function findDomainsWithoutHandler(domainPlugins, type, domains) {
|
|
|
25
26
|
}
|
|
26
27
|
return gaps;
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* #1170: the loaded domains whose plugin executes `type`. A plugin task type
|
|
31
|
+
* such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
|
|
32
|
+
* no target domain is routed to the domains that handle it.
|
|
33
|
+
*/
|
|
34
|
+
export function findDomainsWithHandler(domainPlugins, type) {
|
|
35
|
+
const domains = [];
|
|
36
|
+
for (const [domain, plugin] of domainPlugins) {
|
|
37
|
+
if (plugin.executeTask && plugin.canHandleTask?.(type))
|
|
38
|
+
domains.push(domain);
|
|
39
|
+
}
|
|
40
|
+
return domains;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The domains a task may run in: the caller's target domains, else the
|
|
44
|
+
* domains configured for its type, else (#1170) the loaded domains whose
|
|
45
|
+
* plugin handles the type.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveTaskDomains(type, targetDomains, domainPlugins) {
|
|
48
|
+
if (targetDomains.length > 0)
|
|
49
|
+
return targetDomains;
|
|
50
|
+
const configured = getTaskDomains(type);
|
|
51
|
+
if (configured.length > 0 || !domainPlugins)
|
|
52
|
+
return configured;
|
|
53
|
+
return findDomainsWithHandler(domainPlugins, type);
|
|
54
|
+
}
|
|
28
55
|
export function describeMissingHandler(type, gaps) {
|
|
29
56
|
return `No handler for task type '${type}' in domain ${gaps.join('; ')}`;
|
|
30
57
|
}
|
|
@@ -49,6 +49,12 @@ export declare class WorkflowOrchestrator implements IWorkflowOrchestrator {
|
|
|
49
49
|
*/
|
|
50
50
|
rejectStep(executionId: string, stepId: string, reason?: string): boolean;
|
|
51
51
|
isActionRegistered(domain: DomainName, action: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* #1157: a registered action by domain and action name. Both names come from
|
|
54
|
+
* pipeline YAML, so only own registry entries count: `toString` or
|
|
55
|
+
* `constructor` is an unregistered action, not an Object.prototype member.
|
|
56
|
+
*/
|
|
57
|
+
private lookupAction;
|
|
52
58
|
getRegisteredActions(domain: DomainName): string[];
|
|
53
59
|
getDomainsWithActions(): DomainName[];
|
|
54
60
|
spawnWorkflowAgent(workflowId: string, stepId: string, domain: DomainName): Promise<Result<string, Error>>;
|
|
@@ -209,7 +209,18 @@ export class WorkflowOrchestrator {
|
|
|
209
209
|
// Public Utility Methods
|
|
210
210
|
// ============================================================================
|
|
211
211
|
isActionRegistered(domain, action) {
|
|
212
|
-
return
|
|
212
|
+
return this.lookupAction(domain, action) !== undefined;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* #1157: a registered action by domain and action name. Both names come from
|
|
216
|
+
* pipeline YAML, so only own registry entries count: `toString` or
|
|
217
|
+
* `constructor` is an unregistered action, not an Object.prototype member.
|
|
218
|
+
*/
|
|
219
|
+
lookupAction(domain, action) {
|
|
220
|
+
const actions = Object.hasOwn(this.actionRegistry, domain)
|
|
221
|
+
? this.actionRegistry[domain]
|
|
222
|
+
: undefined;
|
|
223
|
+
return actions && Object.hasOwn(actions, action) ? actions[action] : undefined;
|
|
213
224
|
}
|
|
214
225
|
getRegisteredActions(domain) {
|
|
215
226
|
return Object.keys(this.actionRegistry[domain] || {});
|
|
@@ -612,9 +623,9 @@ export class WorkflowOrchestrator {
|
|
|
612
623
|
return actionResult.value;
|
|
613
624
|
}
|
|
614
625
|
// Fall back to registered domain actions
|
|
615
|
-
const
|
|
616
|
-
if (
|
|
617
|
-
const actionResult = await Promise.race([
|
|
626
|
+
const domainAction = this.lookupAction(step.domain, step.action);
|
|
627
|
+
if (domainAction) {
|
|
628
|
+
const actionResult = await Promise.race([domainAction(input, context), timeoutPromise]);
|
|
618
629
|
if (!actionResult.success)
|
|
619
630
|
throw actionResult.error;
|
|
620
631
|
return actionResult.value;
|
|
@@ -624,12 +635,12 @@ export class WorkflowOrchestrator {
|
|
|
624
635
|
}
|
|
625
636
|
async executeRollback(rollback, context) {
|
|
626
637
|
try {
|
|
627
|
-
const
|
|
628
|
-
if (!
|
|
638
|
+
const domainAction = this.lookupAction(rollback.domain, rollback.action);
|
|
639
|
+
if (!domainAction) {
|
|
629
640
|
console.warn(`Rollback action '${rollback.action}' not registered for domain '${rollback.domain}'. Skipping rollback.`);
|
|
630
641
|
return;
|
|
631
642
|
}
|
|
632
|
-
const result = await
|
|
643
|
+
const result = await domainAction(rollback.input || {}, context);
|
|
633
644
|
if (!result.success)
|
|
634
645
|
console.error(`Rollback failed for ${rollback.domain}.${rollback.action}:`, result.error);
|
|
635
646
|
}
|
|
@@ -669,8 +680,11 @@ export class WorkflowOrchestrator {
|
|
|
669
680
|
for (const part of parts) {
|
|
670
681
|
if (current === null || current === undefined)
|
|
671
682
|
return undefined;
|
|
672
|
-
|
|
683
|
+
// #1157: paths come from pipeline YAML (conditions, input/output
|
|
684
|
+
// mappings); an inherited member such as `constructor` is absent.
|
|
685
|
+
if (typeof current === 'object' && Object.hasOwn(current, part)) {
|
|
673
686
|
current = current[part];
|
|
687
|
+
}
|
|
674
688
|
else
|
|
675
689
|
return undefined;
|
|
676
690
|
}
|
|
@@ -32,7 +32,10 @@ function interrupted(signal) {
|
|
|
32
32
|
removeHandlers();
|
|
33
33
|
// Restore signal termination (including its exit status) instead of swallowing
|
|
34
34
|
// Ctrl-C or converting a requested shutdown into a successful metrics result.
|
|
35
|
-
|
|
35
|
+
// An embedding host with its own listener already received this signal, so
|
|
36
|
+
// re-raising would deliver it twice; the host decides how to shut down (#992).
|
|
37
|
+
if (process.listenerCount(signal) === 0)
|
|
38
|
+
process.kill(process.pid, signal);
|
|
36
39
|
}
|
|
37
40
|
const signalHandlers = {
|
|
38
41
|
SIGINT: () => interrupted('SIGINT'),
|
|
@@ -15,6 +15,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import * as path from 'path';
|
|
17
17
|
import * as fs from 'fs/promises';
|
|
18
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
18
19
|
import { ok, err } from '../../../shared/types/index.js';
|
|
19
20
|
import { CodeIntelligenceEvents, createEvent, } from '../../../shared/events/domain-events.js';
|
|
20
21
|
import { toError } from '../../../shared/error-utils.js';
|
|
@@ -319,7 +320,7 @@ export class ProductFactorsBridgeService {
|
|
|
319
320
|
async getProjectMetadata(projectPath) {
|
|
320
321
|
try {
|
|
321
322
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
322
|
-
const content = await
|
|
323
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
323
324
|
const pkg = safeJsonParse(content);
|
|
324
325
|
return {
|
|
325
326
|
name: pkg.name || 'Project',
|
|
@@ -344,14 +345,16 @@ export class ProductFactorsBridgeService {
|
|
|
344
345
|
catch {
|
|
345
346
|
return systems;
|
|
346
347
|
}
|
|
347
|
-
const content = await
|
|
348
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
348
349
|
const pkg = safeJsonParse(content);
|
|
349
350
|
const allDeps = {
|
|
350
351
|
...pkg.dependencies,
|
|
351
352
|
...pkg.devDependencies,
|
|
352
353
|
};
|
|
353
354
|
for (const [depName] of Object.entries(allDeps)) {
|
|
354
|
-
|
|
355
|
+
// #1157: dependency names come from package.json; a package named
|
|
356
|
+
// `constructor` is not a known external system.
|
|
357
|
+
const pattern = Object.hasOwn(EXTERNAL_SYSTEM_PATTERNS, depName) ? EXTERNAL_SYSTEM_PATTERNS[depName] : undefined;
|
|
355
358
|
if (pattern) {
|
|
356
359
|
systems.push({
|
|
357
360
|
id: sanitizeId(depName),
|
|
@@ -636,7 +639,7 @@ export class ProductFactorsBridgeService {
|
|
|
636
639
|
// Simple hash based on package.json and file count
|
|
637
640
|
try {
|
|
638
641
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
639
|
-
const content = await
|
|
642
|
+
const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
|
|
640
643
|
return this.hashString(content);
|
|
641
644
|
}
|
|
642
645
|
catch {
|