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
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - task_orchestrate MCP handler
|
|
3
|
+
* ADR-051: Integrated with Model Router for intelligent tier selection
|
|
4
|
+
* Issue #206: Workflow auto-execution for task types with associated workflows
|
|
5
|
+
*/
|
|
6
|
+
import { getFleetState, isFleetInitialized } from './core-handlers.js';
|
|
7
|
+
import { getTaskRouter } from '../services/task-router.js';
|
|
8
|
+
import { getReasoningBankService, startTaskTrajectory } from '../services/reasoning-bank-service.js';
|
|
9
|
+
import { scoreUnjudgedTrajectories } from './trajectory-judge.js';
|
|
10
|
+
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
11
|
+
import { invalidPriorityMessage, isPriority } from '../../shared/types/index.js';
|
|
12
|
+
import { validateIndexPaths } from '../../domains/code-intelligence/index-path-guard.js';
|
|
13
|
+
import { routeInferredTask } from './orchestrate-routes.js';
|
|
14
|
+
import { getTaskExecutor } from './handler-factory.js';
|
|
15
|
+
import { TASK_WORKFLOW_MAP, inferDomainFromDescription, inferTaskType } from './task-inference.js';
|
|
16
|
+
/**
|
|
17
|
+
* #1022: gather experience guidance and pattern hints for task_orchestrate.
|
|
18
|
+
* Learned guidance is optional: a missing embedder, or a ReasoningBank that
|
|
19
|
+
* cannot start, must not fail the orchestration. The returned status says
|
|
20
|
+
* which kind of matching produced the hints.
|
|
21
|
+
*/
|
|
22
|
+
async function getOrchestrateLearningContext(task, guidanceDomain, patternDomain) {
|
|
23
|
+
let service;
|
|
24
|
+
try {
|
|
25
|
+
service = await getReasoningBankService();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return {
|
|
29
|
+
experienceGuidance: null,
|
|
30
|
+
patternHintMatches: [],
|
|
31
|
+
learning: { patternSearch: 'unavailable', reason: toErrorMessage(error) },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// #1204: a background embedder retry can finish while this call runs.
|
|
35
|
+
// Report vector matching only if the embedder was usable for the whole
|
|
36
|
+
// call, so hints found by text alone are never labelled vector.
|
|
37
|
+
const patternStatusBefore = service.getPatternSearchStatus();
|
|
38
|
+
const experienceStatusBefore = service.getExperienceGuidanceStatus();
|
|
39
|
+
const experienceGuidance = await service.getExperienceGuidance(task, guidanceDomain);
|
|
40
|
+
// Bring HNSW A (qe_patterns) into the routing decision alongside HNSW C
|
|
41
|
+
// (experienceGuidance). Without this, only past trajectories influenced
|
|
42
|
+
// routing — the catalog of consolidated long-term patterns was never
|
|
43
|
+
// consulted for new tasks. Fail-soft: empty array on error.
|
|
44
|
+
const patternHintMatches = await service
|
|
45
|
+
.searchPatternMatches(task, { limit: 5, domain: patternDomain })
|
|
46
|
+
.catch(() => []);
|
|
47
|
+
const status = notVectorIfEither(patternStatusBefore, service.getPatternSearchStatus());
|
|
48
|
+
const experienceStatusAfter = service.getExperienceGuidanceStatus();
|
|
49
|
+
const experienceStatus = experienceStatusBefore && experienceStatusAfter
|
|
50
|
+
? notVectorIfEither(experienceStatusBefore, experienceStatusAfter)
|
|
51
|
+
: experienceStatusAfter;
|
|
52
|
+
return {
|
|
53
|
+
experienceGuidance,
|
|
54
|
+
patternHintMatches,
|
|
55
|
+
learning: {
|
|
56
|
+
patternSearch: status.mode,
|
|
57
|
+
...(status.reason ? { reason: status.reason } : {}),
|
|
58
|
+
...(experienceStatus ? { experienceGuidance: experienceStatus } : {}),
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** #1204: the status before the call unless it was vector; otherwise the one after. */
|
|
63
|
+
function notVectorIfEither(before, after) {
|
|
64
|
+
return before.mode === 'vector' ? after : before;
|
|
65
|
+
}
|
|
66
|
+
export async function handleTaskOrchestrate(params) {
|
|
67
|
+
if (!isFleetInitialized()) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
error: 'Fleet not initialized. Call fleet_init first.',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// #1096: filePaths feeds task payloads (sourceFiles, index paths), so a
|
|
74
|
+
// non-array value is rejected up front with a clear message.
|
|
75
|
+
if (params.filePaths !== undefined) {
|
|
76
|
+
const filePaths = validateIndexPaths(params.filePaths, 'filePaths', 'Invalid task_orchestrate params');
|
|
77
|
+
if (!filePaths.success) {
|
|
78
|
+
return { success: false, error: filePaths.error.message };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// #1117: an unrecognised priority used to fall through to p1 (and a
|
|
82
|
+
// requested p0 was downgraded). Reject it up front, as task_submit does.
|
|
83
|
+
if (params.priority !== undefined && mapPriority(params.priority) === undefined) {
|
|
84
|
+
return { success: false, error: invalidOrchestratePriorityMessage(params.priority) };
|
|
85
|
+
}
|
|
86
|
+
const { queen, workflowOrchestrator } = getFleetState();
|
|
87
|
+
try {
|
|
88
|
+
// ADR-051: Route task to optimal model tier BEFORE execution
|
|
89
|
+
// Fix #282: Enrich routing input with inferred domain (same as handleModelRoute)
|
|
90
|
+
const inferredDomain = params.context?.project || inferDomainFromDescription(params.task);
|
|
91
|
+
const inferredIsCritical = params.priority === 'critical' ||
|
|
92
|
+
/\b(security|vulnerability|cve|owasp|critical|production|exploit)\b/i.test(params.task);
|
|
93
|
+
const router = await getTaskRouter();
|
|
94
|
+
const routingResult = await router.routeTask({
|
|
95
|
+
task: params.task,
|
|
96
|
+
codeContext: params.codeContext,
|
|
97
|
+
filePaths: params.filePaths,
|
|
98
|
+
manualTier: params.manualTier,
|
|
99
|
+
isCritical: inferredIsCritical,
|
|
100
|
+
agentType: `qe-${inferredDomain}`,
|
|
101
|
+
domain: inferredDomain,
|
|
102
|
+
metadata: {
|
|
103
|
+
inferredDomain,
|
|
104
|
+
hasCodeContext: !!params.codeContext,
|
|
105
|
+
fileCount: params.filePaths?.length,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
// INTEGRATION FIX: Get ReasoningBank guidance for the task
|
|
109
|
+
const { experienceGuidance, patternHintMatches, learning } = await getOrchestrateLearningContext(params.task, params.context?.project, params.context?.project ?? inferredDomain);
|
|
110
|
+
// Parse task description to determine task type
|
|
111
|
+
const taskType = inferTaskType(params.task);
|
|
112
|
+
const priority = mapPriority(params.priority ?? 'medium') ?? 'p2';
|
|
113
|
+
// Issue #206: Check if this task type has an associated workflow
|
|
114
|
+
const workflowId = TASK_WORKFLOW_MAP[taskType];
|
|
115
|
+
if (workflowId && workflowOrchestrator) {
|
|
116
|
+
// Execute the associated workflow directly
|
|
117
|
+
console.log(`[TaskOrchestrate] Task type '${taskType}' has workflow '${workflowId}' - executing workflow`);
|
|
118
|
+
// Detect URL in task description for live website analysis
|
|
119
|
+
const urlMatch = params.task.match(/https?:\/\/[^\s]+/i);
|
|
120
|
+
const detectedUrl = urlMatch ? urlMatch[0] : undefined;
|
|
121
|
+
if (detectedUrl) {
|
|
122
|
+
console.log(`[TaskOrchestrate] Detected URL for analysis: ${detectedUrl}`);
|
|
123
|
+
}
|
|
124
|
+
// Build workflow input from task params and context
|
|
125
|
+
const workflowInput = {
|
|
126
|
+
// Pass through context fields as workflow input
|
|
127
|
+
targetId: params.context?.project || detectedUrl || `task-${Date.now()}`,
|
|
128
|
+
targetType: detectedUrl ? 'website' : 'epic',
|
|
129
|
+
description: params.task,
|
|
130
|
+
acceptanceCriteria: params.context?.requirements || [],
|
|
131
|
+
// Pass URL if detected (enables website content extraction)
|
|
132
|
+
url: detectedUrl,
|
|
133
|
+
// Include routing info for downstream processing
|
|
134
|
+
routing: {
|
|
135
|
+
tier: routingResult.decision.tier,
|
|
136
|
+
modelId: routingResult.modelId,
|
|
137
|
+
executionStrategy: routingResult.executionStrategy,
|
|
138
|
+
complexity: routingResult.decision.complexityAnalysis.overall,
|
|
139
|
+
},
|
|
140
|
+
// HNSW A pattern hints (mirrors the submitTask payload below); the
|
|
141
|
+
// workflow branch routes through executeWorkflow, so the same catalog
|
|
142
|
+
// of consolidated long-term patterns should reach it.
|
|
143
|
+
patternHints: patternHintMatches.length > 0
|
|
144
|
+
? patternHintMatches.map(({ pattern: p, similarity, score, matchType, canReuse }) => ({
|
|
145
|
+
patternId: p.id,
|
|
146
|
+
name: p.name,
|
|
147
|
+
description: p.description,
|
|
148
|
+
confidence: p.confidence,
|
|
149
|
+
similarity,
|
|
150
|
+
score,
|
|
151
|
+
matchType,
|
|
152
|
+
canReuse,
|
|
153
|
+
}))
|
|
154
|
+
: undefined,
|
|
155
|
+
};
|
|
156
|
+
const workflowResult = await workflowOrchestrator.executeWorkflow(workflowId, workflowInput);
|
|
157
|
+
if (!workflowResult.success) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: `Workflow execution failed: ${workflowResult.error.message}`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
data: {
|
|
166
|
+
taskId: workflowResult.value, // This is the workflow execution ID
|
|
167
|
+
type: taskType,
|
|
168
|
+
priority,
|
|
169
|
+
strategy: params.strategy || 'adaptive',
|
|
170
|
+
status: 'workflow-started',
|
|
171
|
+
message: `Workflow '${workflowId}' started for task: ${params.task}`,
|
|
172
|
+
routing: {
|
|
173
|
+
tier: routingResult.decision.tier,
|
|
174
|
+
tierName: routingResult.tierInfo.name,
|
|
175
|
+
modelId: routingResult.modelId,
|
|
176
|
+
executionStrategy: routingResult.executionStrategy,
|
|
177
|
+
complexity: routingResult.decision.complexityAnalysis.overall,
|
|
178
|
+
confidence: routingResult.decision.confidence,
|
|
179
|
+
useAgentBooster: routingResult.useAgentBooster,
|
|
180
|
+
rationale: routingResult.decision.rationale,
|
|
181
|
+
decisionTimeMs: routingResult.decision.metadata.decisionTimeMs,
|
|
182
|
+
},
|
|
183
|
+
learning,
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// No workflow - submit as a regular task.
|
|
188
|
+
// #1125: an inferred type without a handler of its own runs the domain's
|
|
189
|
+
// concrete handler, with a payload built only from the request, or is
|
|
190
|
+
// refused with the input it needs.
|
|
191
|
+
const route = await routeInferredTask(taskType, params);
|
|
192
|
+
if (route.kind === 'needs-input') {
|
|
193
|
+
return { success: false, error: route.error };
|
|
194
|
+
}
|
|
195
|
+
const submitType = route.kind === 'route' ? route.type : taskType;
|
|
196
|
+
const targetDomains = route.kind === 'route' ? [route.domain] : [];
|
|
197
|
+
// #1200: a caller-owned task runs through the MCP task executor, as the
|
|
198
|
+
// domain's own tool does; the Queen does not dispatch it.
|
|
199
|
+
const callerExecutor = route.kind === 'route' && route.executionOwner === 'caller' ? getTaskExecutor() : null;
|
|
200
|
+
// #1081: the type must have a domain handler. Otherwise the Queen can
|
|
201
|
+
// only fail the task at dispatch, so reject it here with the reason.
|
|
202
|
+
const executable = queen.validateTaskExecutable(submitType, targetDomains);
|
|
203
|
+
if (!executable.success) {
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
error: `${executable.error.message}. task_orchestrate inferred '${taskType}' from the description; ` +
|
|
207
|
+
'use task_submit with a supported type and its payload, or the domain\'s MCP tool.',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// Issue N2: Build domain-appropriate payload.
|
|
211
|
+
// Forward caller-provided filePaths/codeContext into the payload fields
|
|
212
|
+
// that domain plugins expect, so generate-tests doesn't reject with
|
|
213
|
+
// "missing sourceFiles" when called via task_orchestrate.
|
|
214
|
+
const taskPayload = {
|
|
215
|
+
description: params.task,
|
|
216
|
+
strategy: params.strategy || 'adaptive',
|
|
217
|
+
maxAgents: params.maxAgents,
|
|
218
|
+
context: params.context,
|
|
219
|
+
};
|
|
220
|
+
if (taskType === 'generate-tests') {
|
|
221
|
+
taskPayload.sourceFiles = params.filePaths || [];
|
|
222
|
+
taskPayload.sourceCode = params.codeContext || '';
|
|
223
|
+
taskPayload.language = taskPayload.language || 'typescript';
|
|
224
|
+
taskPayload.testType = taskPayload.testType || 'unit';
|
|
225
|
+
}
|
|
226
|
+
if (taskType === 'index-code') {
|
|
227
|
+
taskPayload.paths = params.filePaths || [];
|
|
228
|
+
}
|
|
229
|
+
if (route.kind === 'route')
|
|
230
|
+
Object.assign(taskPayload, route.payload);
|
|
231
|
+
const result = await queen.submitTask({
|
|
232
|
+
type: submitType,
|
|
233
|
+
...(callerExecutor ? { executionOwner: 'caller' } : {}),
|
|
234
|
+
priority,
|
|
235
|
+
targetDomains,
|
|
236
|
+
payload: {
|
|
237
|
+
...taskPayload,
|
|
238
|
+
// ADR-051: Include routing decision in payload for downstream processing
|
|
239
|
+
routing: {
|
|
240
|
+
tier: routingResult.decision.tier,
|
|
241
|
+
modelId: routingResult.modelId,
|
|
242
|
+
executionStrategy: routingResult.executionStrategy,
|
|
243
|
+
useAgentBooster: routingResult.useAgentBooster,
|
|
244
|
+
agentBoosterTransform: routingResult.decision.agentBoosterTransform,
|
|
245
|
+
complexity: routingResult.decision.complexityAnalysis.overall,
|
|
246
|
+
confidence: routingResult.decision.confidence,
|
|
247
|
+
},
|
|
248
|
+
// INTEGRATION FIX: Include experience guidance if available
|
|
249
|
+
experienceGuidance: experienceGuidance ? {
|
|
250
|
+
strategy: experienceGuidance.recommendedStrategy,
|
|
251
|
+
actions: experienceGuidance.suggestedActions,
|
|
252
|
+
confidence: experienceGuidance.confidence,
|
|
253
|
+
tokenSavings: experienceGuidance.estimatedTokenSavings,
|
|
254
|
+
} : undefined,
|
|
255
|
+
// HNSW A pattern hints for the executing agent
|
|
256
|
+
patternHints: patternHintMatches.length > 0
|
|
257
|
+
? patternHintMatches.map(({ pattern: p, similarity, score, matchType, canReuse }) => ({
|
|
258
|
+
patternId: p.id,
|
|
259
|
+
name: p.name,
|
|
260
|
+
description: p.description,
|
|
261
|
+
confidence: p.confidence,
|
|
262
|
+
similarity,
|
|
263
|
+
score,
|
|
264
|
+
matchType,
|
|
265
|
+
canReuse,
|
|
266
|
+
}))
|
|
267
|
+
: undefined,
|
|
268
|
+
},
|
|
269
|
+
timeout: 600000, // 10 minutes for orchestrated tasks
|
|
270
|
+
});
|
|
271
|
+
if (!result.success) {
|
|
272
|
+
return {
|
|
273
|
+
success: false,
|
|
274
|
+
error: result.error.message,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// INTEGRATION FIX: Start trajectory tracking for learning
|
|
278
|
+
const taskId = result.value;
|
|
279
|
+
if (learning.patternSearch !== 'unavailable') {
|
|
280
|
+
await startTaskTrajectory(taskId, params.task, {
|
|
281
|
+
agent: 'queen-coordinator',
|
|
282
|
+
domain: params.context?.project,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
// Issue N1: Trajectory auto-close is handled by subscribeTrajectoryEvents(),
|
|
286
|
+
// which listens for TaskCompleted/TaskFailed on the event router.
|
|
287
|
+
// No per-task polling needed.
|
|
288
|
+
// #1200: run a caller-owned task after its trajectory started, without
|
|
289
|
+
// waiting: the executor's TaskCompleted / TaskFailed settle it for task_status.
|
|
290
|
+
const execution = callerExecutor ? queen.getTaskStatus(taskId) : undefined;
|
|
291
|
+
if (callerExecutor && execution) {
|
|
292
|
+
void callerExecutor.execute(execution.task).catch(error => {
|
|
293
|
+
console.error(`[TaskOrchestrate] Task ${taskId} failed to execute: ${toErrorMessage(error)}`);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
// Trajectory judge: opt-in LLM scoring of recent unscored trajectories.
|
|
297
|
+
// Hook-created rows in qe_trajectories never receive feedback unless
|
|
298
|
+
// something goes back and judges them. This catches up by scoring ≤5
|
|
299
|
+
// rows per task_orchestrate call. Opt-in (AQE_TRAJECTORY_JUDGE=1)
|
|
300
|
+
// because it makes paid LLM calls.
|
|
301
|
+
if (process.env.AQE_TRAJECTORY_JUDGE === '1' && process.env.ANTHROPIC_API_KEY) {
|
|
302
|
+
void scoreUnjudgedTrajectories().catch(err => {
|
|
303
|
+
console.warn('[TrajectoryJudge] failed:', err instanceof Error ? err.message : err);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
success: true,
|
|
308
|
+
data: {
|
|
309
|
+
taskId,
|
|
310
|
+
type: submitType,
|
|
311
|
+
...(submitType !== taskType ? { inferredType: taskType } : {}),
|
|
312
|
+
priority,
|
|
313
|
+
strategy: params.strategy || 'adaptive',
|
|
314
|
+
status: 'submitted',
|
|
315
|
+
message: `Task orchestrated: ${params.task}${experienceGuidance ? ' (with experience guidance)' : ''}`,
|
|
316
|
+
// ADR-051: Include routing info in response
|
|
317
|
+
routing: {
|
|
318
|
+
tier: routingResult.decision.tier,
|
|
319
|
+
tierName: routingResult.tierInfo.name,
|
|
320
|
+
modelId: routingResult.modelId,
|
|
321
|
+
executionStrategy: routingResult.executionStrategy,
|
|
322
|
+
complexity: routingResult.decision.complexityAnalysis.overall,
|
|
323
|
+
confidence: routingResult.decision.confidence,
|
|
324
|
+
useAgentBooster: routingResult.useAgentBooster,
|
|
325
|
+
rationale: routingResult.decision.rationale,
|
|
326
|
+
decisionTimeMs: routingResult.decision.metadata.decisionTimeMs,
|
|
327
|
+
},
|
|
328
|
+
learning,
|
|
329
|
+
},
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
return {
|
|
334
|
+
success: false,
|
|
335
|
+
error: `Failed to orchestrate task: ${toErrorMessage(error)}`,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Map a task_orchestrate priority to the canonical Priority type.
|
|
341
|
+
* Accepts the named levels and the canonical p0-p3 values; returns
|
|
342
|
+
* undefined for anything else so the caller can reject it (#1117).
|
|
343
|
+
*/
|
|
344
|
+
function mapPriority(priority) {
|
|
345
|
+
switch (priority) {
|
|
346
|
+
case 'critical':
|
|
347
|
+
return 'p0';
|
|
348
|
+
case 'high':
|
|
349
|
+
return 'p1';
|
|
350
|
+
case 'medium':
|
|
351
|
+
return 'p2';
|
|
352
|
+
case 'low':
|
|
353
|
+
return 'p3';
|
|
354
|
+
default:
|
|
355
|
+
return isPriority(priority) ? priority : undefined;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
function invalidOrchestratePriorityMessage(value) {
|
|
359
|
+
return `${invalidPriorityMessage(value)} (or critical, high, medium, low)`;
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=task-orchestrate-handler.js.map
|
|
@@ -45,6 +45,14 @@ import { formatErrorForLog } from '../logging/redaction.js';
|
|
|
45
45
|
import { BEHAVIOR_EXAMPLE_ITEM_SCHEMA } from '../domains/test-generation/services/behavior-example-validation.js';
|
|
46
46
|
import { SAVE_RESULTS_HINT, saveResultsParameter } from './handlers/save-results-option.js';
|
|
47
47
|
import { requestOwnedShutdown } from '../kernel/process-lifecycle.js';
|
|
48
|
+
/**
|
|
49
|
+
* Read-only status tools a client polls while work runs. Repeating one is
|
|
50
|
+
* the status protocol, not a loop, so loop detection skips them (#1227).
|
|
51
|
+
*/
|
|
52
|
+
const LOOP_EXEMPT_STATUS_TOOLS = new Set([
|
|
53
|
+
'pipeline_status', 'task_status', 'task_list', 'fleet_status', 'fleet_health',
|
|
54
|
+
'agent_status', 'team_health', 'infra_healing_status', 'migration_status', 'aqe_health',
|
|
55
|
+
]);
|
|
48
56
|
import { createRequire } from 'module';
|
|
49
57
|
const _require = createRequire(import.meta.url);
|
|
50
58
|
const _pkg = _require('../../package.json');
|
|
@@ -440,8 +448,10 @@ export class MCPProtocolServer {
|
|
|
440
448
|
let loopSteeringPrefix = '';
|
|
441
449
|
// Polling a known execution is a normal status protocol, not a repeated
|
|
442
450
|
// action loop. The default three-strike detector would block the third
|
|
443
|
-
//
|
|
444
|
-
|
|
451
|
+
// identical status call within 30 seconds while the work is running
|
|
452
|
+
// (pipeline_status; #1227: task_status after task_submit, and the other
|
|
453
|
+
// read-only status tools a client polls).
|
|
454
|
+
if (process.env.AQE_LOOP_DETECTION_ENABLED !== 'false' && !LOOP_EXEMPT_STATUS_TOOLS.has(name)) {
|
|
445
455
|
try {
|
|
446
456
|
const loopResult = this.loopTracker.trackCall('mcp-client', name, args);
|
|
447
457
|
if (loopResult.action === 'steer') {
|
|
@@ -980,7 +990,7 @@ export class MCPProtocolServer {
|
|
|
980
990
|
this.registerTool({
|
|
981
991
|
definition: {
|
|
982
992
|
name: 'chaos_test',
|
|
983
|
-
description: `
|
|
993
|
+
description: `Chaos resilience request; injects no faults itself (returns not-executed, null resilience, guidance). ${SAVE_RESULTS_HINT} Example: chaos_test({ faultType: "latency", target: "api-service" })`,
|
|
984
994
|
category: 'domain',
|
|
985
995
|
parameters: [
|
|
986
996
|
{ name: 'faultType', type: 'string', description: 'Type of fault to inject' },
|
|
@@ -28,8 +28,10 @@ export interface ChaosInjectResult {
|
|
|
28
28
|
metrics: ExperimentMetrics;
|
|
29
29
|
incidents: Incident[];
|
|
30
30
|
recommendations: string[];
|
|
31
|
+
/** Why nothing was measured, when status is 'not-executed' (#1258). */
|
|
32
|
+
note?: string;
|
|
31
33
|
}
|
|
32
|
-
export type ExperimentStatus = 'pending' | 'running' | 'completed' | 'failed' | 'rolled-back' | 'aborted';
|
|
34
|
+
export type ExperimentStatus = 'pending' | 'running' | 'completed' | 'failed' | 'rolled-back' | 'aborted' | 'not-executed';
|
|
33
35
|
export interface ExperimentMetrics {
|
|
34
36
|
faultDuration: number;
|
|
35
37
|
targetAffected: boolean;
|
|
@@ -51,11 +53,8 @@ export declare class ChaosInjectTool extends MCPToolBase<ChaosInjectParams, Chao
|
|
|
51
53
|
execute(params: ChaosInjectParams, context: MCPToolContext): Promise<ToolResult<ChaosInjectResult>>;
|
|
52
54
|
private buildExperiment;
|
|
53
55
|
private buildFaultParameters;
|
|
54
|
-
private simulateMetrics;
|
|
55
56
|
private extractMetrics;
|
|
56
57
|
private convertIncident;
|
|
57
|
-
private collectIntensityIncidents;
|
|
58
|
-
private validateHypothesisText;
|
|
59
58
|
private generateRecommendations;
|
|
60
59
|
}
|
|
61
60
|
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -71,11 +71,11 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
71
71
|
error: `Failed to create experiment: ${createResult.error.message}`,
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
// Phase 3: Inject fault (
|
|
74
|
+
// Phase 3: Inject fault (a dry run injects nothing)
|
|
75
75
|
this.emitStream(context, {
|
|
76
76
|
status: 'injecting',
|
|
77
77
|
message: dryRun
|
|
78
|
-
? `[DRY RUN]
|
|
78
|
+
? `[DRY RUN] Planning ${faultType} fault (not injected)`
|
|
79
79
|
: `Injecting ${faultType} fault`,
|
|
80
80
|
});
|
|
81
81
|
let faultInjected = false;
|
|
@@ -86,16 +86,15 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
86
86
|
faultDuration: duration,
|
|
87
87
|
targetAffected: !dryRun,
|
|
88
88
|
};
|
|
89
|
+
let note;
|
|
89
90
|
if (dryRun) {
|
|
90
|
-
//
|
|
91
|
+
// #1258: a dry run injects nothing, so there are no metrics, incidents
|
|
92
|
+
// or hypothesis verdict to report. It used to return 'completed' with
|
|
93
|
+
// simulated recovery/latency numbers.
|
|
91
94
|
faultInjected = false;
|
|
92
|
-
status = '
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
// Validate hypothesis if provided
|
|
96
|
-
if (hypothesis) {
|
|
97
|
-
hypothesisValidated = this.validateHypothesisText(hypothesis, metrics, incidents);
|
|
98
|
-
}
|
|
95
|
+
status = 'not-executed';
|
|
96
|
+
note = `Dry run: the ${faultType} experiment was planned but no fault was injected, ` +
|
|
97
|
+
'so no metrics were measured and the hypothesis was not tested.';
|
|
99
98
|
}
|
|
100
99
|
else {
|
|
101
100
|
// Real execution - run the experiment
|
|
@@ -128,9 +127,6 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
128
127
|
status: 'monitoring',
|
|
129
128
|
message: 'Monitoring system behavior',
|
|
130
129
|
});
|
|
131
|
-
// Collect any additional incidents based on intensity
|
|
132
|
-
const intensityIncidents = this.collectIntensityIncidents(faultType, intensity, dryRun);
|
|
133
|
-
incidents.push(...intensityIncidents);
|
|
134
130
|
// Determine final status based on incidents
|
|
135
131
|
if (!dryRun && incidents.some(i => i.severity === 'critical' && !i.resolved)) {
|
|
136
132
|
status = rollbackOnFailure ? 'rolled-back' : 'failed';
|
|
@@ -153,6 +149,7 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
153
149
|
metrics,
|
|
154
150
|
incidents,
|
|
155
151
|
recommendations,
|
|
152
|
+
...(note ? { note } : {}),
|
|
156
153
|
},
|
|
157
154
|
};
|
|
158
155
|
}
|
|
@@ -275,27 +272,6 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
275
272
|
}
|
|
276
273
|
return params;
|
|
277
274
|
}
|
|
278
|
-
simulateMetrics(faultType, duration, intensity) {
|
|
279
|
-
const metrics = {
|
|
280
|
-
faultDuration: duration,
|
|
281
|
-
targetAffected: false,
|
|
282
|
-
recoveryTime: 5000 + (intensity * 100), // Base recovery + intensity factor
|
|
283
|
-
};
|
|
284
|
-
switch (faultType) {
|
|
285
|
-
case 'latency':
|
|
286
|
-
metrics.latencyP99 = 100 + (intensity * 25); // Base + intensity factor
|
|
287
|
-
break;
|
|
288
|
-
case 'error':
|
|
289
|
-
case 'timeout':
|
|
290
|
-
metrics.errorRate = intensity * 0.5; // Half of intensity as error rate
|
|
291
|
-
break;
|
|
292
|
-
case 'cpu-stress':
|
|
293
|
-
case 'memory-stress':
|
|
294
|
-
metrics.recoveryTime = 10000 + (intensity * 200);
|
|
295
|
-
break;
|
|
296
|
-
}
|
|
297
|
-
return metrics;
|
|
298
|
-
}
|
|
299
275
|
extractMetrics(result, faultType, duration) {
|
|
300
276
|
const metrics = {
|
|
301
277
|
faultDuration: duration,
|
|
@@ -330,52 +306,6 @@ export class ChaosInjectTool extends MCPToolBase {
|
|
|
330
306
|
resolved: incident.resolved,
|
|
331
307
|
};
|
|
332
308
|
}
|
|
333
|
-
collectIntensityIncidents(faultType, intensity, dryRun) {
|
|
334
|
-
const incidents = [];
|
|
335
|
-
if (dryRun) {
|
|
336
|
-
// In dry run, simulate what incidents might occur
|
|
337
|
-
if (intensity > 70) {
|
|
338
|
-
incidents.push({
|
|
339
|
-
type: 'alert',
|
|
340
|
-
severity: 'high',
|
|
341
|
-
message: `[Simulated] High ${faultType} impact would be detected`,
|
|
342
|
-
timestamp: new Date().toISOString(),
|
|
343
|
-
resolved: true,
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
if (intensity > 90) {
|
|
347
|
-
incidents.push({
|
|
348
|
-
type: 'degradation',
|
|
349
|
-
severity: 'critical',
|
|
350
|
-
message: '[Simulated] Service degradation would occur',
|
|
351
|
-
timestamp: new Date().toISOString(),
|
|
352
|
-
resolved: true,
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return incidents;
|
|
357
|
-
}
|
|
358
|
-
validateHypothesisText(hypothesis, metrics, incidents) {
|
|
359
|
-
const hypothesisLower = hypothesis.toLowerCase();
|
|
360
|
-
// Check recovery time hypothesis
|
|
361
|
-
if (hypothesisLower.includes('recover') && metrics.recoveryTime) {
|
|
362
|
-
const timeMatch = hypothesis.match(/(\d+)s/);
|
|
363
|
-
if (timeMatch) {
|
|
364
|
-
const expectedTime = parseInt(timeMatch[1]) * 1000;
|
|
365
|
-
return metrics.recoveryTime <= expectedTime;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
// Check no critical incidents hypothesis
|
|
369
|
-
if (hypothesisLower.includes('no critical')) {
|
|
370
|
-
return !incidents.some(i => i.severity === 'critical' && !i.resolved);
|
|
371
|
-
}
|
|
372
|
-
// Check stable hypothesis
|
|
373
|
-
if (hypothesisLower.includes('stable') || hypothesisLower.includes('remain')) {
|
|
374
|
-
return !incidents.some(i => i.severity === 'critical' && !i.resolved);
|
|
375
|
-
}
|
|
376
|
-
// Default: validated if no unresolved critical incidents
|
|
377
|
-
return !incidents.some(i => i.severity === 'critical' && !i.resolved);
|
|
378
|
-
}
|
|
379
309
|
generateRecommendations(faultType, metrics, incidents, hypothesisValidated) {
|
|
380
310
|
const recs = [];
|
|
381
311
|
if (hypothesisValidated === false) {
|
|
@@ -447,7 +377,7 @@ const CHAOS_INJECT_SCHEMA = {
|
|
|
447
377
|
},
|
|
448
378
|
dryRun: {
|
|
449
379
|
type: 'boolean',
|
|
450
|
-
description: '
|
|
380
|
+
description: 'Plan the experiment without injecting a fault; nothing is measured',
|
|
451
381
|
default: true,
|
|
452
382
|
},
|
|
453
383
|
hypothesis: {
|
|
@@ -164,13 +164,10 @@ export class CodeAnalyzeTool extends MCPToolBase {
|
|
|
164
164
|
scope: paths.length > 0 && paths[0] !== '.' ? paths : undefined,
|
|
165
165
|
});
|
|
166
166
|
const searchTime = Date.now() - startTime;
|
|
167
|
-
//
|
|
167
|
+
// #1224: a search that could not run (e.g. nothing indexed) is an error,
|
|
168
|
+
// not an empty result.
|
|
168
169
|
if (!result.success) {
|
|
169
|
-
|
|
170
|
-
results: [],
|
|
171
|
-
total: 0,
|
|
172
|
-
searchTime,
|
|
173
|
-
};
|
|
170
|
+
throw result.error;
|
|
174
171
|
}
|
|
175
172
|
// Empty results is a valid state - no matches found
|
|
176
173
|
if (result.value.results.length === 0) {
|
|
@@ -39,6 +39,8 @@ export interface CoverageAnalyzeResult {
|
|
|
39
39
|
language?: string;
|
|
40
40
|
/** Coverage format used for parsing */
|
|
41
41
|
format?: string;
|
|
42
|
+
/** Parts of the coverage report that could not be attributed to a file and are not reported (#1232). */
|
|
43
|
+
warnings?: string[];
|
|
42
44
|
}
|
|
43
45
|
export interface CoverageSummary {
|
|
44
46
|
lines: CoverageMetric;
|
|
@@ -90,6 +92,8 @@ export interface CoverageGapsResult {
|
|
|
90
92
|
description: string;
|
|
91
93
|
confidence: number;
|
|
92
94
|
}>;
|
|
95
|
+
/** Parts of the coverage report that could not be attributed to a file and are not reported (#1232). */
|
|
96
|
+
warnings?: string[];
|
|
93
97
|
}
|
|
94
98
|
export interface CoverageGap {
|
|
95
99
|
file: string;
|
|
@@ -33,6 +33,10 @@ async function confineCoverageInputs(tool, target, coverageFile) {
|
|
|
33
33
|
return { error: f.error.message };
|
|
34
34
|
return { target: confinedTarget, coverageFile: f.value };
|
|
35
35
|
}
|
|
36
|
+
/** The parser's warnings as an error-message suffix (#1232), or ''. */
|
|
37
|
+
function describeWarnings(report) {
|
|
38
|
+
return report?.warnings?.length ? ` ${report.warnings.join('. ')}.` : '';
|
|
39
|
+
}
|
|
36
40
|
// ============================================================================
|
|
37
41
|
// Helper: Calculate Coverage Summary from Files
|
|
38
42
|
// ============================================================================
|
|
@@ -155,7 +159,7 @@ export class CoverageAnalyzeTool extends MCPToolBase {
|
|
|
155
159
|
if (!parsedReport || parsedReport.files.size === 0) {
|
|
156
160
|
return {
|
|
157
161
|
success: false,
|
|
158
|
-
error: `No coverage data found in '${target}'. Run your test suite with coverage enabled (e.g., 'npm test -- --coverage') and ensure coverage reports are generated (lcov.info, coverage-final.json, etc.)`,
|
|
162
|
+
error: `No coverage data found in '${target}'. Run your test suite with coverage enabled (e.g., 'npm test -- --coverage') and ensure coverage reports are generated (lcov.info, coverage-final.json, etc.)${describeWarnings(parsedReport)}`,
|
|
159
163
|
};
|
|
160
164
|
}
|
|
161
165
|
// Mark as real data - we have actual coverage
|
|
@@ -250,6 +254,7 @@ export class CoverageAnalyzeTool extends MCPToolBase {
|
|
|
250
254
|
trends,
|
|
251
255
|
language: detectedLanguage,
|
|
252
256
|
format: detectedFormat,
|
|
257
|
+
...(parsedReport.warnings ? { warnings: parsedReport.warnings } : {}),
|
|
253
258
|
},
|
|
254
259
|
};
|
|
255
260
|
}
|
|
@@ -376,7 +381,7 @@ export class CoverageGapsTool extends MCPToolBase {
|
|
|
376
381
|
if (coverageFile) {
|
|
377
382
|
return {
|
|
378
383
|
success: false,
|
|
379
|
-
error: `Coverage file '${coverageFile}' contains no usable coverage data (parsed 0 files). Verify the file is a non-empty Istanbul/LCOV/JaCoCo/etc. report
|
|
384
|
+
error: `Coverage file '${coverageFile}' contains no usable coverage data (parsed 0 files). Verify the file is a non-empty Istanbul/LCOV/JaCoCo/etc. report.${describeWarnings(parsedReport)}`,
|
|
380
385
|
};
|
|
381
386
|
}
|
|
382
387
|
return {
|
|
@@ -462,6 +467,7 @@ export class CoverageGapsTool extends MCPToolBase {
|
|
|
462
467
|
criticalGaps: gaps.filter((g) => g.severity === 'critical').length,
|
|
463
468
|
suggestedTests,
|
|
464
469
|
...(ghostGaps ? { ghostGaps } : {}),
|
|
470
|
+
...(parsedReport.warnings ? { warnings: parsedReport.warnings } : {}),
|
|
465
471
|
},
|
|
466
472
|
};
|
|
467
473
|
}
|
|
@@ -54,6 +54,14 @@ export interface DreamResultSummary {
|
|
|
54
54
|
patternsCreated: number;
|
|
55
55
|
/** #1060: how long the dream's single commit transaction held the write lock, in ms */
|
|
56
56
|
commitDurationMs?: number;
|
|
57
|
+
/**
|
|
58
|
+
* #1239: dream retention after the commit. enabled=false (the default,
|
|
59
|
+
* AQE_DREAM_RETENTION) means nothing was deleted and `steps` say what would be.
|
|
60
|
+
*/
|
|
61
|
+
retention?: {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
steps: string[];
|
|
64
|
+
};
|
|
57
65
|
}
|
|
58
66
|
export interface InsightSummary {
|
|
59
67
|
id: string;
|