agentic-qe 3.15.12 → 3.15.14
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/helpers/brain-checkpoint.cjs +124 -5
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +196 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-23KA2YW7.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-5VZCKTIJ.js → agent-booster-wasm-2DLAEZK6.js} +2 -2
- package/dist/cli/chunks/{agent-handler-K3C6CQCD.js → agent-handler-P3IY7XEE.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NVFQ25WS.js → agent-memory-branch-WWKC2H3G.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +2 -0
- package/dist/cli/chunks/{arena-TSZVDSXS.js → arena-4BMFF6BS.js} +4 -4
- package/dist/cli/chunks/{arena-QGWIJADQ.js → arena-EIV5OALF.js} +2 -2
- package/dist/cli/chunks/{audit-KIEE2SHJ.js → audit-DNTI453H.js} +3 -3
- package/dist/cli/chunks/base-XPWGYDKD.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-BNB32NW3.js → better-sqlite3-TQBQGNC6.js} +2 -2
- package/dist/cli/chunks/brain-handler-HY57CNAO.js +95 -0
- package/dist/cli/chunks/{branch-enumerator-LZ7UXKAY.js → branch-enumerator-THPMZPHQ.js} +2 -2
- package/dist/cli/chunks/{browser-VDHAW4RK.js → browser-O6JJOZCK.js} +2 -2
- package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +2 -0
- package/dist/cli/chunks/{chunk-4PU5GTZW.js → chunk-2HPNGK7A.js} +2 -2
- package/dist/cli/chunks/{chunk-MCPXNUDK.js → chunk-2IJO3657.js} +2 -2
- package/dist/cli/chunks/{chunk-4Y6OEBJZ.js → chunk-2QLE6NDW.js} +1 -1
- package/dist/cli/chunks/{chunk-DZGPUGUG.js → chunk-2UZBLC5H.js} +2 -2
- package/dist/cli/chunks/{chunk-5A66EGEW.js → chunk-2W5MQDHM.js} +2 -2
- package/dist/cli/chunks/{chunk-JRYWLOBD.js → chunk-3FITMWWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RCOLPF3B.js → chunk-3TF27MG5.js} +2 -2
- package/dist/cli/chunks/{chunk-KGA7VAI4.js → chunk-3XACRXBY.js} +2 -2
- package/dist/cli/chunks/{chunk-SQVZ3TRU.js → chunk-43XHGWYH.js} +2 -2
- package/dist/cli/chunks/{chunk-JR6CUKAI.js → chunk-4RPBODN5.js} +2 -2
- package/dist/cli/chunks/{chunk-C3YOVASQ.js → chunk-4T7XV5KQ.js} +1 -1
- package/dist/cli/chunks/{chunk-N7O3PF6Y.js → chunk-4WLIOPHX.js} +2 -2
- package/dist/cli/chunks/{chunk-PGSJBXTD.js → chunk-52KOPIMI.js} +2 -2
- package/dist/cli/chunks/{chunk-4KUOYDY2.js → chunk-56NSE3LJ.js} +2 -2
- package/dist/cli/chunks/{chunk-3IU4LDZR.js → chunk-57DRT6UA.js} +2 -2
- package/dist/cli/chunks/{chunk-2JYUA27M.js → chunk-57FX3GP6.js} +1 -1
- package/dist/cli/chunks/{chunk-7QEUHNKO.js → chunk-5PLBQZ5J.js} +1 -1
- package/dist/cli/chunks/{chunk-VF7FTD64.js → chunk-5Y7UFHJD.js} +1 -1
- package/dist/cli/chunks/{chunk-7JFDLL2F.js → chunk-5Z4MO2F3.js} +1 -1
- package/dist/cli/chunks/chunk-65EE2EST.js +8 -0
- package/dist/cli/chunks/{chunk-66PXR3NI.js → chunk-6NIGSY5L.js} +2 -2
- package/dist/cli/chunks/chunk-6O63ZTVX.js +3 -0
- package/dist/cli/chunks/{chunk-ZYOYR3UR.js → chunk-6OI5SK7M.js} +1 -1
- package/dist/cli/chunks/{chunk-5TAEW5OV.js → chunk-6P4Q4RTC.js} +1 -1
- package/dist/cli/chunks/{chunk-W5HQIYQU.js → chunk-7724KXM2.js} +3 -3
- package/dist/cli/chunks/{chunk-A2JCRXTK.js → chunk-7MISCSL5.js} +2 -2
- package/dist/cli/chunks/{chunk-OHVYINGM.js → chunk-7MUO4DEH.js} +3 -3
- package/dist/cli/chunks/{chunk-QCPVUNN3.js → chunk-7QUSNBAA.js} +2 -2
- package/dist/cli/chunks/{chunk-YUA6ZKKY.js → chunk-7SQTLUEN.js} +2 -2
- package/dist/cli/chunks/{chunk-CA5UNWQF.js → chunk-7T6L3LFN.js} +2 -2
- package/dist/cli/chunks/{chunk-UREDS662.js → chunk-7TH4PJSU.js} +2 -2
- package/dist/cli/chunks/{chunk-TVA5GRIU.js → chunk-7Y3LXH57.js} +2 -2
- package/dist/cli/chunks/{chunk-A5Y7DAVQ.js → chunk-A2T56XVL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZROAMFX2.js → chunk-AJVLVF7V.js} +2 -2
- package/dist/cli/chunks/{chunk-26672ISV.js → chunk-ARRBXCII.js} +2 -2
- package/dist/cli/chunks/{chunk-5S4UIDFK.js → chunk-AYLEH2UF.js} +1 -1
- package/dist/cli/chunks/{chunk-DRCBRUGN.js → chunk-BBYJBZHG.js} +2 -2
- package/dist/cli/chunks/{chunk-BMG2JLSQ.js → chunk-BM3EJLMV.js} +2 -2
- package/dist/cli/chunks/{chunk-6QRI3JVE.js → chunk-BNG4J3CE.js} +2 -2
- package/dist/cli/chunks/{chunk-EN7GRVEQ.js → chunk-BPDAQB3F.js} +2 -2
- package/dist/cli/chunks/{chunk-J7Y7ZBIT.js → chunk-BQJ7CV53.js} +9 -9
- package/dist/cli/chunks/{chunk-ADUAJIAU.js → chunk-C3OIBFAA.js} +2 -2
- package/dist/cli/chunks/{chunk-4LWMAAWK.js → chunk-CAZM63TP.js} +2 -2
- package/dist/cli/chunks/{chunk-UZED4YZ5.js → chunk-CIINJHOX.js} +1 -1
- package/dist/cli/chunks/{chunk-C74M4WUI.js → chunk-CPPYZYXC.js} +2 -2
- package/dist/cli/chunks/chunk-D3ZZ2NLL.js +62 -0
- package/dist/cli/chunks/{chunk-U7ZHDGXG.js → chunk-D5GB5PUU.js} +1 -1
- package/dist/cli/chunks/{chunk-HZBXJFGN.js → chunk-DLTB5KCR.js} +2 -2
- package/dist/cli/chunks/{chunk-NNBQZR73.js → chunk-DRLSJJIC.js} +2 -2
- package/dist/cli/chunks/{chunk-HLGFHHWV.js → chunk-DSQESXL4.js} +2 -2
- package/dist/cli/chunks/{chunk-LFBA735S.js → chunk-E2JLAW3U.js} +3 -3
- package/dist/cli/chunks/{chunk-PT2NXS43.js → chunk-E3QIQMMN.js} +1 -1
- package/dist/cli/chunks/{chunk-35MIUSXQ.js → chunk-E7OR6V3V.js} +2 -2
- package/dist/cli/chunks/{chunk-G24SWTAX.js → chunk-E7QTWGPI.js} +413 -413
- package/dist/cli/chunks/{chunk-PX5OPXY6.js → chunk-EC65UZ77.js} +1 -1
- package/dist/cli/chunks/{chunk-JNXK47OL.js → chunk-EIEEST4T.js} +2 -2
- package/dist/cli/chunks/{chunk-2PPSS4JD.js → chunk-FHPNWHY7.js} +2 -2
- package/dist/cli/chunks/{chunk-PTBOLBM4.js → chunk-FJOIBZUB.js} +2 -2
- package/dist/cli/chunks/{chunk-TXEUVUMO.js → chunk-FTYRPEJS.js} +1 -1
- package/dist/cli/chunks/{chunk-ZPVGX4DI.js → chunk-G7HGUQAE.js} +2 -2
- package/dist/cli/chunks/{chunk-EF6OERRR.js → chunk-GY4P7KAI.js} +1 -1
- package/dist/cli/chunks/{chunk-UUZZXHUF.js → chunk-H3C5FJRH.js} +2 -2
- package/dist/cli/chunks/{chunk-L3PV7VXK.js → chunk-H4LYXLAT.js} +1 -1
- package/dist/cli/chunks/{chunk-5Z23ZMXZ.js → chunk-HAYKLXCT.js} +63 -61
- package/dist/cli/chunks/{chunk-IPA7K556.js → chunk-HEDGFKC5.js} +2 -2
- package/dist/cli/chunks/{chunk-BC4T6SCV.js → chunk-HHBF2BZC.js} +4 -4
- package/dist/cli/chunks/{chunk-IVTQF55W.js → chunk-HSDWPQQY.js} +3 -3
- package/dist/cli/chunks/{chunk-SG2TX72G.js → chunk-HTVGHHX2.js} +2 -2
- package/dist/cli/chunks/{chunk-FZJCBSN4.js → chunk-HV43NX4A.js} +2 -2
- package/dist/cli/chunks/{chunk-MMEALJ4D.js → chunk-IDBA5GK2.js} +2 -2
- package/dist/cli/chunks/{chunk-IA55PFLG.js → chunk-INGXD5IX.js} +2 -2
- package/dist/cli/chunks/{chunk-RYHG3I7J.js → chunk-IQRPR4KB.js} +2 -2
- package/dist/cli/chunks/{chunk-7OEFBWAG.js → chunk-IRPNEXOU.js} +2 -2
- package/dist/cli/chunks/{chunk-P7UFJ6DO.js → chunk-J35JWDJE.js} +1 -1
- package/dist/cli/chunks/chunk-J6ASX536.js +2 -0
- package/dist/cli/chunks/{chunk-2ASQRBK2.js → chunk-JAOCHPYX.js} +2 -2
- package/dist/cli/chunks/{chunk-G3AABG4Q.js → chunk-JB7R77SH.js} +2 -2
- package/dist/cli/chunks/{chunk-HSA5IGGW.js → chunk-JI67T6Q2.js} +2 -2
- package/dist/cli/chunks/{chunk-ZGROHCOW.js → chunk-JJHLGGPP.js} +1 -1
- package/dist/cli/chunks/{chunk-L7NGKANW.js → chunk-JK6PMLQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-IL7GQNNE.js → chunk-JO26SG47.js} +2 -2
- package/dist/cli/chunks/{chunk-3EWQN37E.js → chunk-JSSU4RIK.js} +2 -2
- package/dist/cli/chunks/{chunk-TOWOJGEI.js → chunk-K2SMP4OD.js} +1 -1
- package/dist/cli/chunks/{chunk-YVJEUX3I.js → chunk-K7GFYFBO.js} +2 -2
- package/dist/cli/chunks/{chunk-DAUEK66C.js → chunk-K7RT6ITZ.js} +1 -1
- package/dist/cli/chunks/{chunk-33I2ZP6E.js → chunk-KJ5A54ZH.js} +2 -2
- package/dist/cli/chunks/{chunk-W4II6SIH.js → chunk-L5VSLPMW.js} +2 -2
- package/dist/cli/chunks/{chunk-NVRYELCY.js → chunk-L752CNG3.js} +3 -3
- package/dist/cli/chunks/{chunk-MAJXZYGK.js → chunk-L7PC675Y.js} +1 -1
- package/dist/cli/chunks/{chunk-YWWMNTBF.js → chunk-LTGQJYYO.js} +2 -2
- package/dist/cli/chunks/{chunk-7DNR4KKR.js → chunk-M2TG7VDK.js} +1 -1
- package/dist/cli/chunks/{chunk-2E2QO44T.js → chunk-M5JEA6ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-IETBWYHW.js → chunk-MB4UKUBV.js} +2 -2
- package/dist/cli/chunks/{chunk-W7H55PY4.js → chunk-MKYOE7NE.js} +1 -1
- package/dist/cli/chunks/{chunk-FNUFTWEO.js → chunk-MQXWG55U.js} +3 -3
- package/dist/cli/chunks/{chunk-O4QJMANM.js → chunk-MR2OPUSA.js} +1 -1
- package/dist/cli/chunks/{chunk-KA5SHLMW.js → chunk-N736GLWZ.js} +2 -2
- package/dist/cli/chunks/{chunk-NV74SICL.js → chunk-NHEG2DLN.js} +2 -2
- package/dist/cli/chunks/chunk-NKOLILT7.js +86 -0
- package/dist/cli/chunks/{chunk-KJDI5CHX.js → chunk-NPCXGX7N.js} +2 -2
- package/dist/cli/chunks/{chunk-2IVE5AR3.js → chunk-NZQYJCO6.js} +1 -1
- package/dist/cli/chunks/{chunk-4SA7M34P.js → chunk-O2AAYJUV.js} +1 -1
- package/dist/cli/chunks/{chunk-ULCW6IVQ.js → chunk-O32BFQV4.js} +2 -2
- package/dist/cli/chunks/{chunk-JOWUS2X5.js → chunk-O3ERGUXH.js} +1 -1
- package/dist/cli/chunks/{chunk-BYRCB5JT.js → chunk-O5CEL447.js} +2 -2
- package/dist/cli/chunks/{chunk-CPIBIR3X.js → chunk-O756AOUX.js} +2 -2
- package/dist/cli/chunks/{chunk-TSOQ2QLT.js → chunk-OCN53CCK.js} +2 -2
- package/dist/cli/chunks/{chunk-YLKIXEPP.js → chunk-OGEIHS76.js} +1 -1
- package/dist/cli/chunks/{chunk-ICKUINKD.js → chunk-OLUOVNUF.js} +2 -2
- package/dist/cli/chunks/{chunk-5ADXFUMO.js → chunk-P2TPH3TC.js} +2 -2
- package/dist/cli/chunks/{chunk-SBHM5X2S.js → chunk-PCQZIAXB.js} +2 -2
- package/dist/cli/chunks/{chunk-CDA5Z74H.js → chunk-PGN4TARY.js} +2 -2
- package/dist/cli/chunks/{chunk-P5E26N2X.js → chunk-PNRPVQGI.js} +2 -2
- package/dist/cli/chunks/{chunk-23PQF7NN.js → chunk-PWQWKYBG.js} +1 -1
- package/dist/cli/chunks/{chunk-T4EN5VVK.js → chunk-QNQE3EOH.js} +2 -2
- package/dist/cli/chunks/chunk-QP2HLKTS.js +2 -0
- package/dist/cli/chunks/{chunk-7TA5MUPW.js → chunk-QP6GL3O5.js} +1 -1
- package/dist/cli/chunks/{chunk-GKFV6CUD.js → chunk-QUZ745UQ.js} +2 -2
- package/dist/cli/chunks/{chunk-INZARYUD.js → chunk-R5RRWLRI.js} +2 -2
- package/dist/cli/chunks/{chunk-VZBC6DP7.js → chunk-RE6JTSDM.js} +1 -1
- package/dist/cli/chunks/{chunk-JGIJPDGD.js → chunk-TOJF3ZG4.js} +2 -2
- package/dist/cli/chunks/{chunk-WLRU6ESI.js → chunk-TSP6SU5V.js} +2 -2
- package/dist/cli/chunks/{chunk-6E6HB4N4.js → chunk-TW6Z6W4X.js} +4 -4
- package/dist/cli/chunks/{chunk-ENGL7FIJ.js → chunk-TWOV3I3A.js} +1 -1
- package/dist/cli/chunks/chunk-U4TML2VD.js +3 -0
- package/dist/cli/chunks/{chunk-O3IM4WRZ.js → chunk-U6IOQKCT.js} +2 -2
- package/dist/cli/chunks/{chunk-SPC4RBLF.js → chunk-UDSB3XCG.js} +2 -2
- package/dist/cli/chunks/{chunk-URSTP3WI.js → chunk-UFP7SN5V.js} +2 -2
- package/dist/cli/chunks/{chunk-MYF5CNGV.js → chunk-UMHFTQTR.js} +2 -2
- package/dist/cli/chunks/{chunk-65TH6RPD.js → chunk-UNYTHZDZ.js} +1 -1
- package/dist/cli/chunks/{chunk-FAGKBOX2.js → chunk-UPWLMIDY.js} +2 -2
- package/dist/cli/chunks/{chunk-4CB3QPZM.js → chunk-USAKCGHC.js} +2 -2
- package/dist/cli/chunks/{chunk-QUJJYTJH.js → chunk-V3MGY76S.js} +2 -2
- package/dist/cli/chunks/{chunk-WDEXOLK2.js → chunk-V6SE2ZU2.js} +1 -1
- package/dist/cli/chunks/{chunk-JW5PDJ5O.js → chunk-VCVRZD4Y.js} +3 -3
- package/dist/cli/chunks/{chunk-TGMXUZZC.js → chunk-VG32EEUG.js} +2 -2
- package/dist/cli/chunks/{chunk-MYUMJ2ZI.js → chunk-VGZOPQQY.js} +1 -1
- package/dist/cli/chunks/{chunk-BOSMELJX.js → chunk-VJBJRFUO.js} +2 -2
- package/dist/cli/chunks/{chunk-K3A3NWT3.js → chunk-WBC6WB32.js} +2 -2
- package/dist/cli/chunks/{chunk-QWG3SILX.js → chunk-WCM6WE7G.js} +5 -5
- package/dist/cli/chunks/{chunk-GJKZ7UQO.js → chunk-WCPSR4MJ.js} +2 -2
- package/dist/cli/chunks/{chunk-U6IXYQO4.js → chunk-WKI46WWN.js} +2 -2
- package/dist/cli/chunks/{chunk-NX4BCSOZ.js → chunk-WM2QRIRD.js} +2 -2
- package/dist/cli/chunks/{chunk-32UTHIY5.js → chunk-WRC3HLUY.js} +3 -3
- package/dist/cli/chunks/{chunk-AJEXPFAB.js → chunk-WUGXXNK4.js} +1 -1
- package/dist/cli/chunks/{chunk-NA3F6FEO.js → chunk-WZQADC5R.js} +2 -2
- package/dist/cli/chunks/{chunk-SDRJJUPO.js → chunk-X6NJOT3V.js} +1 -1
- package/dist/cli/chunks/{chunk-CU36D7TN.js → chunk-X6Q2N5S5.js} +2 -2
- package/dist/cli/chunks/{chunk-UIKQPO4Y.js → chunk-X7CUI7KH.js} +2 -2
- package/dist/cli/chunks/{chunk-MCPEC6OO.js → chunk-XMCSKYDE.js} +1 -1
- package/dist/cli/chunks/{chunk-WTAUF6O4.js → chunk-XN3KCKAM.js} +2 -2
- package/dist/cli/chunks/{chunk-TLRHAMX5.js → chunk-XSPMLJCQ.js} +1 -1
- package/dist/cli/chunks/{chunk-VUR5THML.js → chunk-XTZGAG6P.js} +2 -2
- package/dist/cli/chunks/{chunk-47RMGDG4.js → chunk-YE54T2NQ.js} +2 -2
- package/dist/cli/chunks/{chunk-HM3LSFTY.js → chunk-YEFTK4HD.js} +2 -2
- package/dist/cli/chunks/{chunk-4HWUECVD.js → chunk-YGC5QKQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-SUX5XB2Z.js → chunk-YGOSSVY5.js} +2 -2
- package/dist/cli/chunks/{chunk-UJNGGFGX.js → chunk-YKQWIXUY.js} +2 -2
- package/dist/cli/chunks/{chunk-SITL5YZV.js → chunk-Z2S7DNFP.js} +2 -2
- package/dist/cli/chunks/{chunk-WGTEZT7G.js → chunk-Z54G2YOL.js} +2 -2
- package/dist/cli/chunks/{chunk-YNVEDFPQ.js → chunk-ZJGFQK27.js} +1 -1
- package/dist/cli/chunks/{chunk-35NW676P.js → chunk-ZUE524JL.js} +2 -2
- package/dist/cli/chunks/{ci-BZNWW3I3.js → ci-UMA2SMNW.js} +2 -2
- package/dist/cli/chunks/{ci-config-LOHNXOKV.js → ci-config-UQSILJFQ.js} +2 -2
- package/dist/cli/chunks/{ci-output-LCOQBSJL.js → ci-output-U6YZLLKH.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7LRXTLFE.js → circuit-breaker-ATYQP6X2.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-HBU4VWC3.js → claude-flow-setup-6YHFD7AN.js} +2 -2
- package/dist/cli/chunks/client-E43GWLQH.js +2 -0
- package/dist/cli/chunks/{cline-installer-CO6MLH6X.js → cline-installer-EPE7IOZE.js} +2 -2
- package/dist/cli/chunks/{code-SIXBS6JM.js → code-NUEJ4XYO.js} +19 -18
- package/dist/cli/chunks/{code-index-extractor-GWJKZ2IQ.js → code-index-extractor-D4DBT6OL.js} +2 -2
- package/dist/cli/chunks/{codex-installer-6NINVWXJ.js → codex-installer-633SM4LR.js} +2 -2
- package/dist/cli/chunks/{completions-7VIX3GML.js → completions-WUKVIW3L.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-FBQR6ZP2.js → complexity-analyzer-F73ACR5H.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-VA7RIXW5.js → continuedev-installer-QH42TKMS.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4QEBC4MU.js → copilot-installer-Y3XC7BTT.js} +2 -2
- package/dist/cli/chunks/core-handlers-R5A3SQDY.js +2 -0
- package/dist/cli/chunks/{cost-tracker-GRYKHPWL.js → cost-tracker-57QPV7E3.js} +2 -2
- package/dist/cli/chunks/coverage-IBCHMBCR.js +51 -0
- package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +2 -0
- package/dist/cli/chunks/{cursor-installer-ZXIPSZVH.js → cursor-installer-F4UYQHIN.js} +2 -2
- package/dist/cli/chunks/{daemon-N2VRHPSJ.js → daemon-BYYPIJ7G.js} +4 -4
- package/dist/cli/chunks/{daemon-D7F3RGI5.js → daemon-XR4Q6YZF.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-NL6BA7BY.js → dag-attention-scheduler-ZR5ZD3TW.js} +2 -2
- package/dist/cli/chunks/{detect-XC2HCIIT.js → detect-GEGYURLL.js} +2 -2
- package/dist/cli/chunks/{dist-node-A3Y26MEI.js → dist-node-JU3KT2JO.js} +2 -2
- package/dist/cli/chunks/{domain-handler-WV6SFXRB.js → domain-handler-7QI3FJGE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-KJIF6Z2B.js → domain-plugins-O2YRM2PD.js} +2 -2
- package/dist/cli/chunks/domain-transfer-7J3S2OS6.js +2 -0
- package/dist/cli/chunks/dream-6C4NURSE.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-PA3Y4KGO.js → embed-and-insert-pattern-URES5Q6J.js} +2 -2
- package/dist/cli/chunks/{eval-YGEZNUVE.js → eval-RVMCIUOR.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-D4T7NW6B.js → experience-capture-middleware-SYJQSBKE.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6JYK7RYQ.js → fast-paths-QUKPKWKZ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-DKXMDVPE.js → feature-flags-5JCSKL2P.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RBH2GDSR.js → feature-flags-K7JXNKJI.js} +2 -2
- package/dist/cli/chunks/file-discovery-J5IE5KP7.js +2 -0
- package/dist/cli/chunks/fleet-II4Q6HXK.js +44 -0
- package/dist/cli/chunks/{gnn-wrapper-MV54UC4C.js → gnn-wrapper-M7VO2EMS.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-7DKMVQQH.js → heartbeat-handler-ND5CY26N.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +2 -0
- package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-6IWREDQC.js → hnsw-legacy-bridge-N3AUUUU7.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-5BIESSCK.js → hnswlib-node-NZY3E5EN.js} +2 -2
- package/dist/cli/chunks/{hooks-3EETRM62.js → hooks-QVJDTII5.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-RSWCB2D3.js → hypergraph-engine-ZRY6MTDV.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-552LXKL3.js → hypergraph-handler-56DO4XZQ.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +2 -0
- package/dist/cli/chunks/{init-guard-OTDBJ5HD.js → init-guard-DTF4EVUY.js} +2 -2
- package/dist/cli/chunks/{init-handler-3FK3TKEA.js → init-handler-M6CNQHMX.js} +6 -6
- package/dist/cli/chunks/init-wizard-RTLCRWDT.js +2 -0
- package/dist/cli/chunks/kernel-2OWIGGGT.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-KZ2O4LF3.js → kilocode-installer-IJN7XKBH.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MLCCXRF7.js → kiro-installer-UKKPGPDC.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +2 -0
- package/dist/cli/chunks/learning-W2HETWQ4.js +131 -0
- package/dist/cli/chunks/{llm-router-PDEV3UP2.js → llm-router-Y546K4VX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +2 -0
- package/dist/cli/chunks/{load-XFVVLO7E.js → load-MKAB2AXE.js} +2 -2
- package/dist/cli/chunks/load-test-D6QYNIVT.js +2 -0
- package/dist/cli/chunks/{mcp-74G3CL2S.js → mcp-AZKUS6K3.js} +2 -2
- package/dist/cli/chunks/{memory-XIFM6JNX.js → memory-ZDOQN2KU.js} +5 -5
- package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-ZCKURV6S.js → memory-handlers-3SQVY7FE.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-7L4W3O2Q.js → multi-model-executor-WWVXDHG4.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-BPG422LF.js → opencode-installer-YUJNXXWS.js} +2 -2
- package/dist/cli/chunks/{orchestrator-OEAFLAEV.js → orchestrator-Z6PWPLRE.js} +109 -25
- package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-LOPNCULT.js → pattern-usage-recorder-TPWPX32U.js} +2 -2
- package/dist/cli/chunks/{pipeline-VWTYUZB7.js → pipeline-4BBGTE4M.js} +2 -2
- package/dist/cli/chunks/{platform-WFJJ3X2E.js → platform-5GSHXCV5.js} +2 -2
- package/dist/cli/chunks/{plugin-744TPUSG.js → plugin-OFDVF5HS.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-BD5BLNDR.js → prime-radiant-advanced-wasm-NC6MUYGJ.js} +2 -2
- package/dist/cli/chunks/project-root-DDGBWDP6.js +2 -0
- package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +2 -0
- package/dist/cli/chunks/{protocol-handler-JIBILI74.js → protocol-handler-MPOAAEPA.js} +2 -2
- package/dist/cli/chunks/{prove-MNOL5FYW.js → prove-CDKMAIVM.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +2 -0
- package/dist/cli/chunks/{quality-JEGBDGGX.js → quality-ZH4F7R7R.js} +2 -2
- package/dist/cli/chunks/{quality-gate-SYJ6ROMI.js → quality-gate-IDRMW6OE.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +2 -0
- package/dist/cli/chunks/{real-embeddings-ZWXS5ZFV.js → real-embeddings-I2UVNNB3.js} +2 -2
- package/dist/cli/chunks/{ref-validation-RRHUFW2N.js → ref-validation-Z5GCGVXK.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XFO6JSVN.js → roocode-installer-IZ2S7PH2.js} +2 -2
- package/dist/cli/chunks/router-FT5WJPUH.js +2 -0
- package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +2 -0
- package/dist/cli/chunks/{routing-handler-L2K3JASE.js → routing-handler-NAX35VUW.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-A6CINHGM.js → ruvector-commands-5YW2SOFF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-T4RY7L53.js → rvf-migration-coordinator-VUIZHTVG.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-IR33TGQS.js → rvf-store-integrity-IPGCAT6C.js} +2 -2
- package/dist/cli/chunks/safe-db-TDZKUOZJ.js +2 -0
- package/dist/cli/chunks/schedule-CRKTRY2A.js +2 -0
- package/dist/cli/chunks/scheduler-6ZBDVQWN.js +2 -0
- package/dist/cli/chunks/{security-Z5GDE2IH.js → security-3IH4BO5Z.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-SIZMEHPM.js → shared-rvf-adapter-ABY7PAY2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-HLM65RDS.js → shared-rvf-dual-writer-6KENLN2W.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +2 -0
- package/dist/cli/chunks/{standalone-memory-SKSZG7P5.js → standalone-memory-RLFAUGOW.js} +2 -2
- package/dist/cli/chunks/{status-handler-766YOOMJ.js → status-handler-FCOZBPE5.js} +2 -2
- package/dist/cli/chunks/{structural-health-M45FNOLT.js → structural-health-4RDA5UUM.js} +2 -2
- package/dist/cli/chunks/{sync-B2U366I3.js → sync-54LUAUTK.js} +2 -2
- package/dist/cli/chunks/{sync-6CJ24B5T.js → sync-KGEEXXCC.js} +2 -2
- package/dist/cli/chunks/task-handler-K3OXHYKU.js +62 -0
- package/dist/cli/chunks/task-handlers-6H7L2UT4.js +9 -0
- package/dist/cli/chunks/{test-TODH7KRF.js → test-S7IG6EIX.js} +4 -4
- package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VMVMVRHT.js → test-scheduling-7XYXI4L2.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-XQW7BMCK.js → token-bootstrap-3QMABE45.js} +2 -2
- package/dist/cli/chunks/{token-usage-JCZEIRKO.js → token-usage-Y2YTPOFE.js} +2 -2
- package/dist/cli/chunks/{transformers-U2ML3OHE.js → transformers-UCJ3HHHC.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +2 -0
- package/dist/cli/chunks/{types-GGEPCHP6.js → types-6CMFPETH.js} +2 -2
- package/dist/cli/chunks/unified-memory-QARWQKJ2.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +2 -0
- package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +2 -0
- package/dist/cli/chunks/{upgrade-T5GRM7HS.js → upgrade-K25DN6WU.js} +2 -2
- package/dist/cli/chunks/{validate-XMUJPLP3.js → validate-T4V3TBY3.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-KJLF7JEH.js → validate-swarm-XSRC576T.js} +2 -2
- package/dist/cli/chunks/visual-security-O4ALMCXQ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-LOHVZ7G5.js → web-tree-sitter-YOZXHRTN.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-33FBTXJU.js → windsurf-installer-ITPU2IYL.js} +2 -2
- package/dist/cli/chunks/witness-chain-B3YW5NMS.js +2 -0
- package/dist/cli/chunks/witness-chain-PIYR72HJ.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-VWBO4NXE.js → witness-chain-repair-YUG7E3UX.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-BHJ3ZAEK.js → witness-chain-verifier-DTDSVKOG.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-WNVPH2Z3.js → witness-key-manager-EWACWGAW.js} +2 -2
- package/dist/cli/chunks/{workflow-6QR5MQTO.js → workflow-ZIQ4FV42.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +2 -0
- package/dist/cli/chunks/{wrappers-EHOL62TS.js → wrappers-PW2O27LL.js} +2 -2
- package/dist/cli/commands/code.js +6 -0
- package/dist/cli/commands/coverage.js +6 -0
- package/dist/cli/commands/fleet-run.d.ts +12 -0
- package/dist/cli/commands/fleet-run.js +175 -0
- package/dist/cli/commands/fleet.js +2 -117
- package/dist/cli/commands/learning-prune.d.ts +14 -0
- package/dist/cli/commands/learning-prune.js +105 -0
- package/dist/cli/commands/learning.js +9 -0
- package/dist/cli/handlers/brain-handler.js +12 -1
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +20 -0
- package/dist/cli/utils/coverage-verdict.js +14 -3
- package/dist/cli/utils/fleet-operation.d.ts +5 -2
- package/dist/cli/utils/fleet-operation.js +13 -2
- package/dist/cli/utils/fleet-result.d.ts +16 -2
- package/dist/cli/utils/fleet-result.js +26 -21
- package/dist/cli/utils/fleet-shard.d.ts +36 -0
- package/dist/cli/utils/fleet-shard.js +110 -0
- package/dist/context/compaction/index.d.ts +7 -0
- package/dist/context/compaction/index.js +30 -6
- package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
- package/dist/coordination/handlers/coverage-evidence.d.ts +19 -0
- package/dist/coordination/handlers/coverage-evidence.js +31 -2
- package/dist/coordination/handlers/coverage-handlers.js +5 -1
- package/dist/coordination/handlers/coverage-target.js +8 -1
- package/dist/coordination/handlers/handler-types.d.ts +2 -2
- package/dist/coordination/handlers/handler-utils.d.ts +6 -0
- package/dist/coordination/handlers/handler-utils.js +14 -4
- package/dist/coordination/handlers/misc-handlers.js +5 -2
- package/dist/coordination/handlers/quality-handlers.js +11 -3
- package/dist/coordination/handlers/security-handlers.js +12 -2
- package/dist/coordination/protocols/security-audit.js +11 -1
- package/dist/coordination/result-saver-adapters.js +1 -0
- package/dist/coordination/result-saver.js +9 -5
- package/dist/coordination/task-executor.js +7 -2
- package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +1 -0
- package/dist/domains/chaos-resilience/services/chaos-engineer.js +23 -45
- package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
- package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
- package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
- package/dist/domains/code-intelligence/coordinator.js +24 -27
- package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +43 -5
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +134 -71
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +26 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +54 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +13 -3
- package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
- package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
- package/dist/domains/defect-intelligence/services/defect-predictor.js +3 -6
- package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
- package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
- package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
- package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
- package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
- package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
- package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
- package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
- package/dist/domains/quality-assessment/coordinator.js +10 -4
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +8 -0
- package/dist/domains/quality-assessment/coverage-report-event.js +22 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +8 -0
- package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +4 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.js +63 -17
- package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
- package/dist/domains/security-compliance/index.d.ts +1 -1
- package/dist/domains/security-compliance/interfaces.d.ts +46 -5
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
- package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
- package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
- package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
- package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
- package/dist/domains/security-compliance/services/scanners/index.js +1 -1
- package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
- package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
- package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
- package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
- package/dist/domains/security-compliance/services/security-auditor.js +106 -65
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +33 -27
- package/dist/domains/test-execution/interfaces.d.ts +10 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
- package/dist/domains/test-execution/services/test-executor.js +22 -4
- package/dist/domains/visual-accessibility/coordinator.js +34 -9
- package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
- package/dist/domains/visual-accessibility/plugin.js +5 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
- package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
- package/dist/init/phases/07-hooks.js +90 -6
- package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +25 -0
- package/dist/integrations/ruvector/brain-rvf-exporter.js +154 -61
- package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
- package/dist/learning/dream/dream-engine.d.ts +24 -1
- package/dist/learning/dream/dream-engine.js +57 -6
- package/dist/learning/learning-retention.d.ts +103 -0
- package/dist/learning/learning-retention.js +213 -0
- package/dist/mcp/bundle.js +508 -503
- package/dist/mcp/handlers/domain-handler-configs.d.ts +17 -1
- package/dist/mcp/handlers/domain-handler-configs.js +33 -16
- package/dist/mcp/handlers/handler-factory.js +3 -0
- package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
- package/dist/mcp/handlers/model-route-handlers.js +139 -0
- package/dist/mcp/handlers/orchestrate-routes.js +41 -3
- package/dist/mcp/handlers/task-handlers.d.ts +3 -251
- package/dist/mcp/handlers/task-handlers.js +6 -828
- package/dist/mcp/handlers/task-inference.d.ts +26 -0
- package/dist/mcp/handlers/task-inference.js +156 -0
- package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
- package/dist/mcp/handlers/task-learning-handlers.js +230 -0
- package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
- package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
- package/dist/mcp/protocol-server.js +13 -3
- package/dist/mcp/tools/chaos-resilience/inject.d.ts +3 -4
- package/dist/mcp/tools/chaos-resilience/inject.js +11 -81
- package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
- package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
- package/dist/mcp/tools/coverage-analysis/index.js +8 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -0
- package/dist/mcp/tools/learning-optimization/dream.js +4 -0
- package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
- package/dist/mcp/tools/visual-accessibility/index.js +29 -13
- package/dist/shared/events/domain-events.d.ts +2 -0
- package/dist/shared/metrics/code-metrics.js +21 -3
- package/dist/shared/parsers/typescript-parser.d.ts +6 -0
- package/dist/shared/parsers/typescript-parser.js +13 -1
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-HL7MOCQN.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +0 -2
- package/dist/cli/chunks/base-WIM7G3HC.js +0 -2
- package/dist/cli/chunks/brain-handler-MPC5SPYI.js +0 -94
- package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +0 -2
- package/dist/cli/chunks/chunk-4A76VPU4.js +0 -3
- package/dist/cli/chunks/chunk-QSGEBCDB.js +0 -62
- package/dist/cli/chunks/chunk-UCSK2RMI.js +0 -2
- package/dist/cli/chunks/chunk-VXVTFKRA.js +0 -2
- package/dist/cli/chunks/chunk-XCNSGSKV.js +0 -3
- package/dist/cli/chunks/chunk-XZOYKB22.js +0 -79
- package/dist/cli/chunks/chunk-YIDAXOUX.js +0 -8
- package/dist/cli/chunks/client-4PNYDFYS.js +0 -2
- package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +0 -2
- package/dist/cli/chunks/coverage-USPMNKOU.js +0 -50
- package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +0 -2
- package/dist/cli/chunks/domain-transfer-L3F6AES2.js +0 -2
- package/dist/cli/chunks/dream-QOB3JCOM.js +0 -2
- package/dist/cli/chunks/file-discovery-BN76S2PR.js +0 -2
- package/dist/cli/chunks/fleet-43YMXACN.js +0 -46
- package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +0 -2
- package/dist/cli/chunks/hnsw-index-HE4AX22U.js +0 -2
- package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +0 -2
- package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +0 -2
- package/dist/cli/chunks/kernel-2WZOQEZS.js +0 -2
- package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +0 -2
- package/dist/cli/chunks/learning-QUCMBD77.js +0 -122
- package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +0 -2
- package/dist/cli/chunks/load-test-BEWEE44J.js +0 -2
- package/dist/cli/chunks/memory-backend-NYKBBKZR.js +0 -2
- package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +0 -2
- package/dist/cli/chunks/project-root-C7ELXZRK.js +0 -2
- package/dist/cli/chunks/protocol-executor-SUVE33BM.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +0 -2
- package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +0 -2
- package/dist/cli/chunks/router-4FTAVYLJ.js +0 -2
- package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +0 -2
- package/dist/cli/chunks/safe-db-QXDZ6QY3.js +0 -2
- package/dist/cli/chunks/schedule-CZKD6RIY.js +0 -2
- package/dist/cli/chunks/scheduler-BLA3Q4CH.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +0 -2
- package/dist/cli/chunks/task-handler-P6IFLCKP.js +0 -62
- package/dist/cli/chunks/task-handlers-DPWMUKFC.js +0 -9
- package/dist/cli/chunks/test-runner-process-46IPK3GH.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +0 -2
- package/dist/cli/chunks/unified-memory-FL26RTV3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +0 -2
- package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +0 -2
- package/dist/cli/chunks/visual-security-IJVPO5FA.js +0 -2
- package/dist/cli/chunks/witness-chain-5FAFCQKP.js +0 -2
- package/dist/cli/chunks/witness-chain-V2M32W5D.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +0 -2
|
@@ -52,6 +52,25 @@ async function confineTarget(taskType, target) {
|
|
|
52
52
|
return ok(undefined);
|
|
53
53
|
return requirePayloadPath(taskType, 'target', target, { allowDirectory: true, allowMissing: true });
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* #1224: index the files for the code-intelligence search (the index the
|
|
57
|
+
* Queen's `search` task reads), not only the knowledge graph. Returns warnings
|
|
58
|
+
* for the index result.
|
|
59
|
+
*/
|
|
60
|
+
async function indexFilesForSearch(ctx, indexedFiles) {
|
|
61
|
+
const unavailable = 'Search index not updated: the code-intelligence domain is unavailable, so a code search will not find these files.';
|
|
62
|
+
if (!ctx.getCodeIntelligenceCoordinator)
|
|
63
|
+
return [unavailable];
|
|
64
|
+
try {
|
|
65
|
+
const coordinator = await ctx.getCodeIntelligenceCoordinator();
|
|
66
|
+
if (!coordinator)
|
|
67
|
+
return [unavailable];
|
|
68
|
+
return (await coordinator.indexForSearch(indexedFiles)).warnings;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return [`Search index not updated: ${toError(error).message}`];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
55
74
|
export function registerCodeIntelligenceHandlers(ctx) {
|
|
56
75
|
// Register code indexing handler - REAL IMPLEMENTATION
|
|
57
76
|
ctx.registerHandler('index-code', async (task) => {
|
|
@@ -108,6 +127,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
108
127
|
// caller's target the way #997 resolves it. Best-effort: indexing has
|
|
109
128
|
// already succeeded, so a metric failure only omits projectMetrics.
|
|
110
129
|
const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, indexedFiles);
|
|
130
|
+
const searchWarnings = await indexFilesForSearch(ctx, indexedFiles);
|
|
111
131
|
// Detect languages from files
|
|
112
132
|
const detectedLanguages = new Set();
|
|
113
133
|
const extToLang = {
|
|
@@ -140,7 +160,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
140
160
|
languages: Array.from(detectedLanguages),
|
|
141
161
|
duration: indexResult.duration,
|
|
142
162
|
errors: indexResult.errors,
|
|
143
|
-
warnings: indexResult.warnings,
|
|
163
|
+
warnings: [...(indexResult.warnings ?? []), ...searchWarnings],
|
|
144
164
|
skipped: indexResult.skipped ?? [],
|
|
145
165
|
...(projectMetrics ? { projectMetrics } : {}),
|
|
146
166
|
});
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* Either one makes the evidence insufficient: no verdict may pass on it.
|
|
17
17
|
*/
|
|
18
18
|
import type { FileCoverage } from '../../domains/coverage-analysis/interfaces';
|
|
19
|
+
import type { ExcludedCoverageEntry } from '../../domains/coverage-analysis/collected-metrics.js';
|
|
19
20
|
/** The report is older than these source files. */
|
|
20
21
|
export interface StaleReport {
|
|
21
22
|
reportPath: string;
|
|
@@ -35,6 +36,17 @@ export interface CoverageEvidence {
|
|
|
35
36
|
source: string;
|
|
36
37
|
readable: boolean;
|
|
37
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* #1219: report entries left out of the figures because they are not a
|
|
41
|
+
* measurement of a project file (outside the root, a Windows path on POSIX,
|
|
42
|
+
* or one file under two spellings).
|
|
43
|
+
*/
|
|
44
|
+
excludedEntries?: ExcludedCoverageEntry[];
|
|
45
|
+
/**
|
|
46
|
+
* #1219: project files the report lists under two spellings. Which entry is
|
|
47
|
+
* right is unknown, so they are UNMEASURED and the evidence is insufficient.
|
|
48
|
+
*/
|
|
49
|
+
conflictingFiles?: string[];
|
|
38
50
|
}
|
|
39
51
|
/**
|
|
40
52
|
* Production source files under a directory `target` that the report has no
|
|
@@ -66,10 +78,17 @@ export declare function assessCoverageEvidence(report: {
|
|
|
66
78
|
}, measuredFiles: FileCoverage[], projectRoot: string, target: string, options?: {
|
|
67
79
|
reportPath?: string;
|
|
68
80
|
checkCompleteness?: boolean;
|
|
81
|
+
excluded?: ExcludedCoverageEntry[];
|
|
69
82
|
}): CoverageEvidence;
|
|
70
83
|
/**
|
|
71
84
|
* Why the evidence is insufficient, one sentence per problem; empty when it is
|
|
72
85
|
* complete. Shared by MCP and CLI so the wording cannot drift.
|
|
73
86
|
*/
|
|
74
87
|
export declare function describeEvidence(evidence: CoverageEvidence | undefined, projectRoot: string): string[];
|
|
88
|
+
/**
|
|
89
|
+
* #1219: one line naming the report entries left out of the figures as not
|
|
90
|
+
* project files (empty when none were). A note, not an evidence gap: those
|
|
91
|
+
* entries never were the project's coverage. Shared by MCP and CLI.
|
|
92
|
+
*/
|
|
93
|
+
export declare function describeExcludedEntries(evidence: CoverageEvidence | undefined): string[];
|
|
75
94
|
//# sourceMappingURL=coverage-evidence.d.ts.map
|
|
@@ -115,12 +115,16 @@ export function assessCoverageEvidence(report, measuredFiles, projectRoot, targe
|
|
|
115
115
|
const stale = options.reportPath
|
|
116
116
|
? findStaleness(options.reportPath, [...sources].filter(file => fs.existsSync(file)))
|
|
117
117
|
: undefined;
|
|
118
|
+
const excluded = options.excluded ?? [];
|
|
119
|
+
const conflicting = [...new Set(excluded.flatMap(e => (e.file ? [e.file] : [])))].sort();
|
|
118
120
|
return {
|
|
119
|
-
status: unmeasured.length > 0 || stale ? 'insufficient-evidence' : 'complete',
|
|
121
|
+
status: unmeasured.length > 0 || stale || conflicting.length > 0 ? 'insufficient-evidence' : 'complete',
|
|
120
122
|
unmeasuredFiles: unmeasured,
|
|
121
|
-
targetFiles: sources.size,
|
|
123
|
+
targetFiles: sources.size + conflicting.filter(file => !sources.has(file)).length,
|
|
122
124
|
...(stale ? { stale } : {}),
|
|
123
125
|
...(coverageScope ? { coverageScope } : {}),
|
|
126
|
+
...(excluded.length > 0 ? { excludedEntries: excluded } : {}),
|
|
127
|
+
...(conflicting.length > 0 ? { conflictingFiles: conflicting } : {}),
|
|
124
128
|
};
|
|
125
129
|
}
|
|
126
130
|
const MAX_LISTED = 5;
|
|
@@ -148,6 +152,12 @@ export function describeEvidence(evidence, projectRoot) {
|
|
|
148
152
|
'the report with coverage for the whole target, or exclude files that are not meant to be measured in the ' +
|
|
149
153
|
`coverage tool's include/exclude config.${scopeNote}`);
|
|
150
154
|
}
|
|
155
|
+
const conflicting = evidence.conflictingFiles ?? [];
|
|
156
|
+
if (conflicting.length > 0) {
|
|
157
|
+
reasons.push(`${conflicting.length} source file${conflicting.length === 1 ? ' is' : 's are'} listed in the coverage ` +
|
|
158
|
+
'report under two spellings (e.g. `./src/a.ts` and `src/a.ts`), so which entry is right is unknown; ' +
|
|
159
|
+
`they are UNMEASURED and left out of the figures: ${listFiles(conflicting, projectRoot)}`);
|
|
160
|
+
}
|
|
151
161
|
if (evidence.stale) {
|
|
152
162
|
const m = evidence.stale.newerFiles.length;
|
|
153
163
|
reasons.push(`the coverage report ${path.relative(projectRoot, evidence.stale.reportPath) || evidence.stale.reportPath} ` +
|
|
@@ -156,4 +166,23 @@ export function describeEvidence(evidence, projectRoot) {
|
|
|
156
166
|
}
|
|
157
167
|
return reasons;
|
|
158
168
|
}
|
|
169
|
+
const EXCLUDED_WHY = {
|
|
170
|
+
'outside-project': 'outside the project root',
|
|
171
|
+
'windows-path': 'a Windows path, which cannot name a file here',
|
|
172
|
+
'duplicate-spelling': 'a second spelling of a file the report already lists',
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* #1219: one line naming the report entries left out of the figures as not
|
|
176
|
+
* project files (empty when none were). A note, not an evidence gap: those
|
|
177
|
+
* entries never were the project's coverage. Shared by MCP and CLI.
|
|
178
|
+
*/
|
|
179
|
+
export function describeExcludedEntries(evidence) {
|
|
180
|
+
const outside = (evidence?.excludedEntries ?? []).filter(e => e.reason !== 'duplicate-spelling');
|
|
181
|
+
if (outside.length === 0)
|
|
182
|
+
return [];
|
|
183
|
+
const shown = outside.slice(0, MAX_LISTED).map(e => `${e.path} (${EXCLUDED_WHY[e.reason]})`);
|
|
184
|
+
const more = outside.length > MAX_LISTED ? `, … ${outside.length - MAX_LISTED} more` : '';
|
|
185
|
+
return [`${outside.length} coverage report entr${outside.length === 1 ? 'y is' : 'ies are'} not a project file and ` +
|
|
186
|
+
`${outside.length === 1 ? 'is' : 'are'} left out of the figures: ${shown.join(', ')}${more}.`];
|
|
187
|
+
}
|
|
159
188
|
//# sourceMappingURL=coverage-evidence.js.map
|
|
@@ -9,7 +9,7 @@ import { toError } from '../../shared/error-utils.js';
|
|
|
9
9
|
import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
10
10
|
import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
|
|
11
11
|
import { describeNoData, evaluateCoverageForTarget, isUnmeasured, packageFilterForTarget, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
|
|
12
|
-
import { describeEvidence } from './coverage-evidence.js';
|
|
12
|
+
import { describeEvidence, describeExcludedEntries } from './coverage-evidence.js';
|
|
13
13
|
import { randomUUID } from 'crypto';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { describeRunFailure, runJsCoverage, testRunStatus } from './coverage-runner.js';
|
|
@@ -289,6 +289,8 @@ export function registerCoverageHandlers(ctx) {
|
|
|
289
289
|
if (evidenceReasons.length > 0) {
|
|
290
290
|
warnings.push(`INSUFFICIENT EVIDENCE — the threshold is not met on this report: ${evidenceReasons.join('; ').replace(/\.?$/, '.')}`);
|
|
291
291
|
}
|
|
292
|
+
// #1219: entries that are not project files are named, not silently dropped.
|
|
293
|
+
warnings.push(...describeExcludedEntries(evidence));
|
|
292
294
|
// #569: the analyzer generates recommendations from the summary numbers.
|
|
293
295
|
// When branch or function data was never collected, those numbers are 0
|
|
294
296
|
// by construction, and the resulting advice ("Branch coverage is
|
|
@@ -325,6 +327,8 @@ export function registerCoverageHandlers(ctx) {
|
|
|
325
327
|
evidenceStatus: evidence.status,
|
|
326
328
|
unmeasuredFiles: evidence.unmeasuredFiles,
|
|
327
329
|
...(evidence.stale ? { staleReport: evidence.stale } : {}),
|
|
330
|
+
...(evidence.conflictingFiles ? { conflictingFiles: evidence.conflictingFiles } : {}),
|
|
331
|
+
...(evidence.excludedEntries ? { excludedReportEntries: evidence.excludedEntries } : {}),
|
|
328
332
|
} : {}),
|
|
329
333
|
delta: report.delta,
|
|
330
334
|
recommendations,
|
|
@@ -26,6 +26,7 @@ import { loadCoverageReport, parseCoberturaXml, parseCoverageJson, parseCoverage
|
|
|
26
26
|
import { isTestPath } from './coverage-collection.js';
|
|
27
27
|
import { assessCoverageEvidence } from './coverage-evidence.js';
|
|
28
28
|
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
29
|
+
import { classifyProjectCoveragePaths } from '../../domains/coverage-analysis/collected-metrics.js';
|
|
29
30
|
// ============================================================================
|
|
30
31
|
// Project root
|
|
31
32
|
// ============================================================================
|
|
@@ -428,7 +429,12 @@ export function scopeCoverageToTarget(data, root, target) {
|
|
|
428
429
|
export function evaluateCoverageForTarget(report, projectRoot, target, options = {}) {
|
|
429
430
|
if (options.numTotalTests === 0)
|
|
430
431
|
return { status: 'no-data', reason: 'no-tests-ran' };
|
|
431
|
-
|
|
432
|
+
// #1219: an entry that is not a measurement of a project file (outside the
|
|
433
|
+
// root, a Windows path on POSIX, one file under two spellings) is not part
|
|
434
|
+
// of the figures — the same rule as the per-file records (#1030).
|
|
435
|
+
const inTarget = scopeCoverageToTarget(report, projectRoot, target);
|
|
436
|
+
const { keys, excluded } = classifyProjectCoveragePaths(inTarget.map(f => f.path), projectRoot);
|
|
437
|
+
const scoped = inTarget.filter(f => keys.has(f.path));
|
|
432
438
|
if (scoped.length === 0)
|
|
433
439
|
return { status: 'no-data', reason: 'target-not-covered' };
|
|
434
440
|
// Coverage OF a test file is not production coverage (#569). A report with
|
|
@@ -438,6 +444,7 @@ export function evaluateCoverageForTarget(report, projectRoot, target, options =
|
|
|
438
444
|
return { status: 'no-data', reason: 'test-only-report' };
|
|
439
445
|
const evidence = assessCoverageEvidence(report, production, projectRoot, target, {
|
|
440
446
|
reportPath: options.reportPath, checkCompleteness: options.checkCompleteness,
|
|
447
|
+
excluded: excluded.filter(e => !e.file || !isTestPath(e.file, projectRoot)),
|
|
441
448
|
});
|
|
442
449
|
return { status: 'measured', files: production, evidence };
|
|
443
450
|
}
|
|
@@ -13,8 +13,8 @@ import type { TestGeneratorService } from '../../domains/test-generation';
|
|
|
13
13
|
import type { KnowledgeGraphService } from '../../domains/code-intelligence';
|
|
14
14
|
import type { ICodeIntelligenceCoordinator } from '../../domains/code-intelligence/coordinator';
|
|
15
15
|
import type { QualityAnalyzerService } from '../../domains/quality-assessment';
|
|
16
|
-
/** The coordinator surface the MCP index-code handler needs (#999). */
|
|
17
|
-
export type ProjectMetricsCollector = Pick<ICodeIntelligenceCoordinator, 'collectProjectMetrics'>;
|
|
16
|
+
/** The coordinator surface the MCP index-code handler needs (#999, #1224). */
|
|
17
|
+
export type ProjectMetricsCollector = Pick<ICodeIntelligenceCoordinator, 'collectProjectMetrics' | 'indexForSearch'>;
|
|
18
18
|
/** Signature of a single task handler */
|
|
19
19
|
export type InstanceTaskHandler = (task: QueenTask) => Promise<Result<unknown, Error>>;
|
|
20
20
|
/**
|
|
@@ -123,6 +123,12 @@ export declare function discoverSourceFiles(targetPath: string, options?: {
|
|
|
123
123
|
includeTests?: boolean;
|
|
124
124
|
languages?: string[];
|
|
125
125
|
maxFiles?: number;
|
|
126
|
+
/**
|
|
127
|
+
* #1020: also include component files (.vue, .svelte) and symlinked files.
|
|
128
|
+
* For callers that judge the whole source scope (quality assessment) and
|
|
129
|
+
* read through a reader that contains symlinks to the project root.
|
|
130
|
+
*/
|
|
131
|
+
completeScope?: boolean;
|
|
126
132
|
}): Promise<string[]>;
|
|
127
133
|
/**
|
|
128
134
|
* Generate security recommendations based on findings
|
|
@@ -417,11 +417,11 @@ export function parseCoberturaXml(content) {
|
|
|
417
417
|
*/
|
|
418
418
|
export async function discoverSourceFiles(targetPath, options = {}) {
|
|
419
419
|
const files = [];
|
|
420
|
-
const { includeTests = true, languages, maxFiles = 5000 } = options;
|
|
420
|
+
const { includeTests = true, languages, maxFiles = 5000, completeScope = false } = options;
|
|
421
421
|
// Determine file extensions to include
|
|
422
422
|
// Default: scan ALL common source languages unless explicitly filtered
|
|
423
423
|
let extensions = [
|
|
424
|
-
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', // JavaScript/TypeScript
|
|
424
|
+
'.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs', // JavaScript/TypeScript
|
|
425
425
|
'.py', '.pyw', // Python
|
|
426
426
|
'.go', // Go
|
|
427
427
|
'.rs', // Rust
|
|
@@ -437,7 +437,7 @@ export async function discoverSourceFiles(targetPath, options = {}) {
|
|
|
437
437
|
extensions = [];
|
|
438
438
|
for (const lang of languages) {
|
|
439
439
|
if (lang === 'typescript')
|
|
440
|
-
extensions.push('.ts', '.tsx');
|
|
440
|
+
extensions.push('.ts', '.tsx', '.mts', '.cts');
|
|
441
441
|
if (lang === 'javascript')
|
|
442
442
|
extensions.push('.js', '.jsx', '.mjs', '.cjs');
|
|
443
443
|
if (lang === 'python')
|
|
@@ -464,6 +464,8 @@ export async function discoverSourceFiles(targetPath, options = {}) {
|
|
|
464
464
|
extensions.push('.scala');
|
|
465
465
|
}
|
|
466
466
|
}
|
|
467
|
+
if (completeScope && (!languages || languages.length === 0))
|
|
468
|
+
extensions.push('.vue', '.svelte');
|
|
467
469
|
async function walkDir(dir) {
|
|
468
470
|
try {
|
|
469
471
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
@@ -488,7 +490,7 @@ export async function discoverSourceFiles(targetPath, options = {}) {
|
|
|
488
490
|
return; // Cap reached
|
|
489
491
|
await walkDir(fullPath);
|
|
490
492
|
}
|
|
491
|
-
else if (entry.isFile()) {
|
|
493
|
+
else if (entry.isFile() || (completeScope && entry.isSymbolicLink() && await isFileTarget(fullPath))) {
|
|
492
494
|
const ext = path.extname(entry.name);
|
|
493
495
|
// Check extension
|
|
494
496
|
if (!extensions.includes(ext))
|
|
@@ -515,6 +517,14 @@ export async function discoverSourceFiles(targetPath, options = {}) {
|
|
|
515
517
|
// Directory not accessible
|
|
516
518
|
}
|
|
517
519
|
}
|
|
520
|
+
async function isFileTarget(linkPath) {
|
|
521
|
+
try {
|
|
522
|
+
return (await fs.stat(linkPath)).isFile();
|
|
523
|
+
}
|
|
524
|
+
catch {
|
|
525
|
+
return false; // dangling link
|
|
526
|
+
}
|
|
527
|
+
}
|
|
518
528
|
// Check if targetPath is a file or directory
|
|
519
529
|
try {
|
|
520
530
|
const stat = await fs.stat(targetPath);
|
|
@@ -16,8 +16,11 @@ export function registerMiscHandlers(ctx) {
|
|
|
16
16
|
passed: false,
|
|
17
17
|
violations: [],
|
|
18
18
|
warnings: [],
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// #1145: nothing was audited, so `passed: false` is not a verdict and the score is -1
|
|
20
|
+
score: -1,
|
|
21
|
+
measured: false,
|
|
22
|
+
note: 'Accessibility NOT MEASURED: this is not a failing result. ' +
|
|
23
|
+
'Accessibility testing requires a browser environment (Puppeteer/Playwright). ' +
|
|
21
24
|
'Use tools like axe-core, pa11y, or Lighthouse CLI for WCAG compliance testing. ' +
|
|
22
25
|
'Example: npx pa11y ' + (payload.url || '<url>'),
|
|
23
26
|
});
|
|
@@ -89,13 +89,13 @@ async function resolveAnalysisScope(payload) {
|
|
|
89
89
|
throw new CallerInputError(`target ${JSON.stringify(payload.target)} does not exist.`);
|
|
90
90
|
if (stat.isFile())
|
|
91
91
|
return { sourceFiles: [target], explicitFiles: [target], scope: target };
|
|
92
|
-
return { sourceFiles: await discoverSourceFiles(target, { includeTests: false }), explicitFiles: [], scope: target };
|
|
92
|
+
return { sourceFiles: await discoverSourceFiles(target, { includeTests: false, completeScope: true }), explicitFiles: [], scope: target };
|
|
93
93
|
}
|
|
94
94
|
// Default to src/ — scanning the entire project root is too slow
|
|
95
95
|
// (node_modules, dist, .git, etc. make it hang on large projects)
|
|
96
96
|
const srcDir = nodePath.join(root, 'src');
|
|
97
97
|
const targetDir = existsSync(srcDir) ? srcDir : root;
|
|
98
|
-
return { sourceFiles: await discoverSourceFiles(targetDir, { includeTests: false }), explicitFiles: [], scope: targetDir };
|
|
98
|
+
return { sourceFiles: await discoverSourceFiles(targetDir, { includeTests: false, completeScope: true }), explicitFiles: [], scope: targetDir };
|
|
99
99
|
}
|
|
100
100
|
/** #1021: one line per partially measured metric, naming the gap. */
|
|
101
101
|
function describePartialMetrics(partial) {
|
|
@@ -222,8 +222,16 @@ export function registerQualityHandlers(ctx) {
|
|
|
222
222
|
const insufficient = sufficiency.evidenceStatus !== 'measured';
|
|
223
223
|
const passed = !insufficient && measuredFailures.length === 0 && report.score.overall >= threshold;
|
|
224
224
|
const recommendations = report.recommendations.map(r => `[${r.type}] ${r.title}: ${r.description}`);
|
|
225
|
+
// A score that leaves out unmeasured metrics is not the overall score:
|
|
226
|
+
// -1 with the reason, as the gate's overallScore since #1223. The score
|
|
227
|
+
// over the measured metrics stays available, labelled as a subset.
|
|
228
|
+
const subsetScore = report.subsetScore ?? report.score.overall;
|
|
225
229
|
return ok({
|
|
226
|
-
qualityScore: report.score.overall,
|
|
230
|
+
qualityScore: insufficient ? UNMEASURED : report.score.overall,
|
|
231
|
+
...(insufficient ? {
|
|
232
|
+
qualityScoreReason: `not computed: ${sufficiency.unmeasured.join(', ')} unmeasured`,
|
|
233
|
+
...(subsetScore >= 0 ? { subsetScore } : {}),
|
|
234
|
+
} : {}),
|
|
227
235
|
passed,
|
|
228
236
|
threshold,
|
|
229
237
|
metrics: {
|
|
@@ -263,8 +263,12 @@ export function registerSecurityHandlers(ctx) {
|
|
|
263
263
|
});
|
|
264
264
|
if (result.success) {
|
|
265
265
|
dastResult = result.value;
|
|
266
|
-
//
|
|
267
|
-
|
|
266
|
+
// #1135: probes the target did not answer make DAST partial; the
|
|
267
|
+
// findings it did collect are kept. A complete run still has no
|
|
268
|
+
// execution coverage receipt, so it stays unverified.
|
|
269
|
+
engines.push(dastResult.status === 'incomplete'
|
|
270
|
+
? { ...partialDastEngine(dastResult.failedRequests), target: payload.targetUrl }
|
|
271
|
+
: { ...unverifiedEngine('dast', 'url'), target: payload.targetUrl });
|
|
268
272
|
}
|
|
269
273
|
else {
|
|
270
274
|
engines.push({ ...failedEngine('dast', 'url', result.error), target: payload.targetUrl });
|
|
@@ -399,6 +403,12 @@ function safeErrorCode(error) {
|
|
|
399
403
|
const code = error?.code;
|
|
400
404
|
return typeof code === 'string' && /^[A-Z0-9_]{1,32}$/.test(code) ? code : 'UNKNOWN';
|
|
401
405
|
}
|
|
406
|
+
function partialDastEngine(failedRequests) {
|
|
407
|
+
const codes = [...new Set(failedRequests.map(failure => failure.code))].join(', ');
|
|
408
|
+
return { id: 'dast', requested: true, required: true, status: 'partial', scope: 'url',
|
|
409
|
+
ruleCoverage: 'unknown', errors: [`dast incomplete: ${failedRequests.length} request(s) not answered (${codes}).`],
|
|
410
|
+
limitations: failedRequests.slice(0, 20).map(failure => `dast not answered: ${failure.url} (${failure.code}: ${failure.reason})`) };
|
|
411
|
+
}
|
|
402
412
|
function unverifiedEngine(id, scope) {
|
|
403
413
|
return { id, requested: true, required: true, status: 'unverified', scope,
|
|
404
414
|
ruleCoverage: 'unknown', errors: [], limitations: [`${id} returned no execution receipt; coverage is unverified.`] };
|
|
@@ -164,11 +164,16 @@ export class SecurityAuditProtocol {
|
|
|
164
164
|
const dastResult = await this.runDASTScan(this.config.targetUrl);
|
|
165
165
|
if (dastResult.success) {
|
|
166
166
|
this.currentAudit = { ...this.currentAudit, dastResult: dastResult.value };
|
|
167
|
+
if (dastResult.value.status !== 'complete') {
|
|
168
|
+
this.recordIncompleteCheck(`DAST scan is incomplete: ${dastResult.value.error ?? 'some requests were not answered'}`);
|
|
169
|
+
}
|
|
167
170
|
this.recordIncompleteCheck('DAST coverage is unverified: the scanner returned no execution receipt');
|
|
168
171
|
await this.publishVulnerabilities(dastResult.value.vulnerabilities);
|
|
169
172
|
}
|
|
170
173
|
else {
|
|
171
|
-
|
|
174
|
+
// #1135: keep the scanner's reason (DAST_AUTHENTICATION_FAILED, DAST_TARGET_UNAVAILABLE, ...).
|
|
175
|
+
const code = dastResult.error.code;
|
|
176
|
+
this.recordIncompleteCheck(`DAST scan did not complete${typeof code === 'string' ? ` (${code})` : ''}: ${dastResult.error.message}`);
|
|
172
177
|
}
|
|
173
178
|
}
|
|
174
179
|
else if (auditOptions.includeDAST) {
|
|
@@ -284,7 +289,10 @@ export class SecurityAuditProtocol {
|
|
|
284
289
|
// Convert scanner result to protocol result format
|
|
285
290
|
return ok({
|
|
286
291
|
vulnerabilities: scanResult.value.vulnerabilities,
|
|
292
|
+
// #1221: this scanner does not look up latest versions; empty is not "up to date".
|
|
287
293
|
outdatedPackages: [],
|
|
294
|
+
outdatedStatus: 'not-run',
|
|
295
|
+
outdatedUnchecked: [],
|
|
288
296
|
summary: scanResult.value.summary,
|
|
289
297
|
status: scanResult.value.status,
|
|
290
298
|
measured: scanResult.value.measured,
|
|
@@ -360,6 +368,8 @@ export class SecurityAuditProtocol {
|
|
|
360
368
|
if (scanResult.success) {
|
|
361
369
|
return ok(scanResult.value);
|
|
362
370
|
}
|
|
371
|
+
// #1135: the scanner's own failure, with its code, not a generic "unavailable".
|
|
372
|
+
return err(scanResult.error);
|
|
363
373
|
}
|
|
364
374
|
catch (scannerError) {
|
|
365
375
|
// Scanner unavailable - log error
|
|
@@ -37,6 +37,7 @@ function qualityReport(result) {
|
|
|
37
37
|
: [];
|
|
38
38
|
return {
|
|
39
39
|
...(typeof score.overall === 'number' ? { qualityScore: score.overall } : {}),
|
|
40
|
+
...(typeof data.subsetScore === 'number' ? { subsetScore: data.subsetScore } : {}),
|
|
40
41
|
passed: false,
|
|
41
42
|
gateEvaluated: false,
|
|
42
43
|
metrics: Object.fromEntries(metrics.filter(m => m.name && typeof m.value === 'number').map(m => [m.name, m.value])),
|
|
@@ -501,11 +501,15 @@ ${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
|
|
|
501
501
|
## Quality Score
|
|
502
502
|
|
|
503
503
|
${typeof data.qualityScore !== 'number' ? 'N/A — measured gate uses individual checks.'
|
|
504
|
-
: data.qualityScore < 0
|
|
505
|
-
: data.
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
504
|
+
: data.qualityScore < 0 && typeof data.subsetScore === 'number'
|
|
505
|
+
? `Not computed — unmeasured: ${data.unmeasured?.join(', ') || 'unknown'}.\n`
|
|
506
|
+
+ `Subset score over measured metrics: ${data.subsetScore.toFixed(1)} (not a verdict)`
|
|
507
|
+
+ (data.scoreBasis?.length ? `\nBased on: ${data.scoreBasis.join(', ')}` : '')
|
|
508
|
+
: data.qualityScore < 0 ? 'Not measured — no requested metric had measured data (#1011).'
|
|
509
|
+
: data.evidenceStatus === 'insufficient-evidence'
|
|
510
|
+
? `Subset score over measured metrics: ${data.qualityScore.toFixed(1)} (not a verdict)`
|
|
511
|
+
+ (data.scoreBasis?.length ? `\nBased on: ${data.scoreBasis.join(', ')}` : '')
|
|
512
|
+
: `**${data.qualityScore.toFixed(1)}** / 100`}
|
|
509
513
|
|
|
510
514
|
## Metrics
|
|
511
515
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import { isCallerInputError, toErrorMessage } from '../shared/error-utils.js';
|
|
17
17
|
import { InsufficientQualityEvidenceError } from '../domains/quality-assessment/quality-evidence.js';
|
|
18
|
+
import { isLearnableResult } from '../learning/learnable-result.js';
|
|
18
19
|
import { createResultSaver } from './result-saver.js';
|
|
19
20
|
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
20
21
|
import { createLogger } from '../logging/logger-factory.js';
|
|
@@ -487,8 +488,12 @@ export class DomainTaskExecutor {
|
|
|
487
488
|
};
|
|
488
489
|
}
|
|
489
490
|
await this.publishTaskCompleted(task.id, result.value, domain);
|
|
490
|
-
// ADR-051: Record successful outcome
|
|
491
|
-
|
|
491
|
+
// ADR-051: Record successful outcome. #1020: a run without evidence (a
|
|
492
|
+
// coverage estimate, an insufficient-evidence quality run) completed as a
|
|
493
|
+
// task but is not a success to learn routing from.
|
|
494
|
+
if (isLearnableResult(domain, result.value)) {
|
|
495
|
+
this.recordOutcome(task, routingTier, true, Date.now() - startTime).catch((e) => { logger.warn('recordOutcome failed', { error: e instanceof Error ? e.message : String(e), taskId: task.id }); });
|
|
496
|
+
}
|
|
492
497
|
// Save results to files if enabled. A task can opt out per call with
|
|
493
498
|
// payload.saveResults === false (#925); the executor-wide config still
|
|
494
499
|
// acts as the global switch.
|
|
@@ -89,6 +89,7 @@ export declare class ChaosEngineerService implements IChaosEngineeringService {
|
|
|
89
89
|
private executeCommandProbe;
|
|
90
90
|
private executeMetricProbe;
|
|
91
91
|
private performFaultInjection;
|
|
92
|
+
private notInjected;
|
|
92
93
|
private injectLatency;
|
|
93
94
|
private injectError;
|
|
94
95
|
private injectTimeout;
|
|
@@ -609,32 +609,25 @@ Provide:
|
|
|
609
609
|
}
|
|
610
610
|
return err(new Error(`Unknown fault type: ${fault.type}`));
|
|
611
611
|
}
|
|
612
|
+
// #1258: these fault types need infrastructure this process does not control
|
|
613
|
+
// (a network proxy, service mesh, firewall or DNS server). They used to log a
|
|
614
|
+
// note and return ok(1), so an experiment reported a fault that never ran.
|
|
615
|
+
// They now fail with the reason, and injectFault() records injected: false.
|
|
616
|
+
notInjected(fault, requirement) {
|
|
617
|
+
return err(new Error(`${fault.type} fault not injected into ${fault.target.selector}: requires ${requirement}, ` +
|
|
618
|
+
'which this process does not control. Nothing was changed on the target.'));
|
|
619
|
+
}
|
|
612
620
|
async injectLatency(fault) {
|
|
613
|
-
|
|
614
|
-
// For simulation, we store the config and check during probe execution
|
|
615
|
-
const latencyMs = fault.parameters.latencyMs ?? 100;
|
|
616
|
-
logger.info(`Latency injection configured: ${latencyMs}ms for ${fault.target.selector}`);
|
|
617
|
-
logger.info(`Note: Actual latency injection requires network proxy (e.g., Toxiproxy, tc)`);
|
|
618
|
-
return ok(1);
|
|
621
|
+
return this.notInjected(fault, 'a network proxy (e.g., Toxiproxy, tc)');
|
|
619
622
|
}
|
|
620
623
|
async injectError(fault) {
|
|
621
|
-
|
|
622
|
-
const errorCode = fault.parameters.errorCode ?? 500;
|
|
623
|
-
logger.info(`Error injection configured: ${errorCode} for ${fault.target.selector}`);
|
|
624
|
-
logger.info(`Note: Actual error injection requires service mesh (e.g., Istio, Linkerd)`);
|
|
625
|
-
return ok(1);
|
|
624
|
+
return this.notInjected(fault, 'a service mesh or proxy (e.g., Istio, Linkerd, Toxiproxy)');
|
|
626
625
|
}
|
|
627
626
|
async injectTimeout(fault) {
|
|
628
|
-
|
|
629
|
-
logger.info(`Timeout injection configured for ${fault.target.selector}`);
|
|
630
|
-
logger.info(`Note: Actual timeout injection requires network proxy configuration`);
|
|
631
|
-
return ok(1);
|
|
627
|
+
return this.notInjected(fault, 'a network proxy (e.g., Toxiproxy)');
|
|
632
628
|
}
|
|
633
629
|
async injectPacketLoss(fault) {
|
|
634
|
-
|
|
635
|
-
logger.info(`Packet loss configured: ${lossPercent}% for ${fault.target.selector}`);
|
|
636
|
-
logger.info(`Note: Actual packet loss requires tc/iptables (Linux) or similar`);
|
|
637
|
-
return ok(1);
|
|
630
|
+
return this.notInjected(fault, 'tc/iptables (Linux) or a network proxy');
|
|
638
631
|
}
|
|
639
632
|
async injectCpuStress(fault) {
|
|
640
633
|
// Real CPU stress implementation using busy loops
|
|
@@ -689,34 +682,18 @@ Provide:
|
|
|
689
682
|
}
|
|
690
683
|
}
|
|
691
684
|
async injectDiskStress(fault) {
|
|
692
|
-
|
|
693
|
-
logger.info(`Disk stress configured for ${fault.target.selector}`);
|
|
694
|
-
logger.info(`Note: Actual disk stress requires file system write permissions`);
|
|
695
|
-
return ok(1);
|
|
685
|
+
return this.notInjected(fault, 'file system stress tooling (e.g., stress-ng)');
|
|
696
686
|
}
|
|
697
687
|
async injectNetworkPartition(fault) {
|
|
698
|
-
|
|
699
|
-
logger.info(`Network partition configured for ${fault.target.selector}`);
|
|
700
|
-
logger.info(`Note: Actual network partition requires iptables/firewall rules`);
|
|
701
|
-
return ok(1);
|
|
688
|
+
return this.notInjected(fault, 'iptables/firewall rules');
|
|
702
689
|
}
|
|
703
690
|
async injectDnsFailure(fault) {
|
|
704
|
-
|
|
705
|
-
logger.info(`DNS failure configured for ${fault.target.selector}`);
|
|
706
|
-
logger.info(`Note: Actual DNS failure requires DNS server or /etc/hosts modification`);
|
|
707
|
-
return ok(1);
|
|
691
|
+
return this.notInjected(fault, 'a DNS server or /etc/hosts modification');
|
|
708
692
|
}
|
|
709
693
|
async injectProcessKill(fault) {
|
|
710
|
-
//
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
logger.info(`Note: Actual process kill requires appropriate permissions`);
|
|
714
|
-
// In dry-run mode or without permissions, just log
|
|
715
|
-
if (this.config.enableDryRun) {
|
|
716
|
-
logger.info(`Would kill processes matching: ${processPattern}`);
|
|
717
|
-
return ok(0);
|
|
718
|
-
}
|
|
719
|
-
return ok(1);
|
|
694
|
+
// No process is signalled here, so a dry run and a real run both report
|
|
695
|
+
// the fault as not injected rather than counting a target as affected.
|
|
696
|
+
return this.notInjected(fault, 'process signalling with appropriate permissions (e.g., Chaos Monkey, Litmus)');
|
|
720
697
|
}
|
|
721
698
|
async performFaultRemoval(fault) {
|
|
722
699
|
logger.info(`Removing fault: ${fault.id} (${fault.type})`);
|
|
@@ -817,14 +794,15 @@ Provide:
|
|
|
817
794
|
if (!finalSteadyState) {
|
|
818
795
|
return 'failed';
|
|
819
796
|
}
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
}
|
|
823
|
-
// Check if any faults failed to inject
|
|
797
|
+
// #1258: a fault that was not injected means the experiment did not run as
|
|
798
|
+
// designed, so a hypothesis "validated" without it is not a completed run.
|
|
824
799
|
const failedFaults = execution.result.faultResults.filter((f) => !f.injected);
|
|
825
800
|
if (failedFaults.length > 0) {
|
|
826
801
|
return 'failed';
|
|
827
802
|
}
|
|
803
|
+
if (execution.result.hypothesisValidated) {
|
|
804
|
+
return 'completed';
|
|
805
|
+
}
|
|
828
806
|
return 'completed';
|
|
829
807
|
}
|
|
830
808
|
async rollbackExperiment(experiment) {
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Code Intelligence - GNN Integration
|
|
3
3
|
* Extracted from coordinator.ts for CQ-004 (file size reduction)
|
|
4
4
|
*
|
|
5
|
-
* Contains: GNN embedding indexing, code embedding generation
|
|
5
|
+
* Contains: GNN embedding indexing, code embedding generation
|
|
6
6
|
*/
|
|
7
7
|
import { QEGNNEmbeddingIndex } from '../../integrations/ruvector/wrappers';
|
|
8
|
-
import type { ImpactRequest
|
|
8
|
+
import type { ImpactRequest } from './interfaces';
|
|
9
9
|
import { FileReader } from '../../shared/io';
|
|
10
10
|
export declare function initializeGNNIndex(domainKey: string): QEGNNEmbeddingIndex;
|
|
11
11
|
/**
|
|
@@ -23,24 +23,10 @@ export declare function generateGraphMAEEmbeddings(fileReader: FileReader, paths
|
|
|
23
23
|
* Generate code embedding using semantic features
|
|
24
24
|
*/
|
|
25
25
|
export declare function generateCodeEmbedding(path: string, content: string): Promise<number[]>;
|
|
26
|
-
/**
|
|
27
|
-
* Search code with GNN for enhanced similarity
|
|
28
|
-
*/
|
|
29
|
-
export declare function searchCodeWithGNN(gnnIndex: QEGNNEmbeddingIndex, query: string): Promise<Array<{
|
|
30
|
-
file: string;
|
|
31
|
-
similarity: number;
|
|
32
|
-
}>>;
|
|
33
26
|
/**
|
|
34
27
|
* Enhance impact analysis with GNN semantic similarity
|
|
35
28
|
*/
|
|
36
29
|
export declare function enhanceImpactAnalysisWithGNN(gnnIndex: QEGNNEmbeddingIndex, fileReader: FileReader, request: ImpactRequest): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Merge search results from semantic search and GNN
|
|
39
|
-
*/
|
|
40
|
-
export declare function mergeSearchResults(semanticResults: SearchResult[], gnnResults: Array<{
|
|
41
|
-
file: string;
|
|
42
|
-
similarity: number;
|
|
43
|
-
}>): SearchResult[];
|
|
44
30
|
/**
|
|
45
31
|
* R6: Train GNN embeddings with memory-bounded cold-tier training.
|
|
46
32
|
* Uses LRU hotset caching when the graph exceeds hotsetSize, falling
|