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,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aqe learning prune` (#1239)
|
|
3
|
+
*
|
|
4
|
+
* Bounds the learning tables on demand. A dry run by default: it prints the
|
|
5
|
+
* row counts each step would change and writes nothing. `--apply` makes the
|
|
6
|
+
* changes, after a verified backup of memory.db unless `--no-backup`.
|
|
7
|
+
*
|
|
8
|
+
* The two default steps (failed dream cycles, outcome concepts) also run
|
|
9
|
+
* after every committed dream. The other two drop data that may still be of
|
|
10
|
+
* use, so they run only when asked for here.
|
|
11
|
+
*/
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { randomUUID } from 'node:crypto';
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
import { openDatabase } from '../../shared/safe-db.js';
|
|
17
|
+
import { backupLearningDatabase } from './learning-snapshot.js';
|
|
18
|
+
import { getDbPath, printError, printJson } from './learning-helpers.js';
|
|
19
|
+
import { DEFAULT_FAILED_DREAM_CYCLE_RETENTION_DAYS, DEFAULT_OUTCOME_CONCEPT_CAP, MIN_OUTCOME_CONCEPT_CAP, capOutcomeConcepts, compactConsolidatedExperiences, describeRetention, pruneFailedDreamCycles, pruneRoutingOutcomes, } from '../../learning/learning-retention.js';
|
|
20
|
+
function wholeNumber(flag, raw, min) {
|
|
21
|
+
if (!/^\d+$/.test(raw) || Number(raw) < min) {
|
|
22
|
+
throw new Error(`${flag} must be a whole number >= ${min}, got "${raw}"`);
|
|
23
|
+
}
|
|
24
|
+
return Number(raw);
|
|
25
|
+
}
|
|
26
|
+
export function registerPruneCommand(learning) {
|
|
27
|
+
learning
|
|
28
|
+
.command('prune')
|
|
29
|
+
.description('Bound learning-table growth (dry run unless --apply)')
|
|
30
|
+
.option('--dry-run', 'Print the row counts that would change; write nothing (default)')
|
|
31
|
+
.option('--apply', 'Make the changes (backs up memory.db first)')
|
|
32
|
+
.option('--no-backup', 'With --apply: skip the backup')
|
|
33
|
+
.option('--failed-dream-cycles-days <n>', 'Remove failed/interrupted dream cycles older than n days', String(DEFAULT_FAILED_DREAM_CYCLE_RETENTION_DAYS))
|
|
34
|
+
.option('--outcome-concepts-max <n>', 'Keep the newest n outcome concept nodes', String(DEFAULT_OUTCOME_CONCEPT_CAP))
|
|
35
|
+
.option('--compact-experiences', 'Opt-in: clear result_json and embedding of archived/merged experiences')
|
|
36
|
+
.option('--routing-outcomes-older-than <days>', 'Opt-in: remove routing outcomes older than this')
|
|
37
|
+
.option('--json', 'Output as JSON')
|
|
38
|
+
.addHelpText('after', `
|
|
39
|
+
Examples:
|
|
40
|
+
aqe learning prune # dry run of the default steps
|
|
41
|
+
aqe learning prune --compact-experiences # dry run, including compaction
|
|
42
|
+
aqe learning prune --compact-experiences --apply # back up, then compact
|
|
43
|
+
|
|
44
|
+
Rows deleted inside the file are reused by SQLite; run VACUUM to shrink the file itself.`)
|
|
45
|
+
.action(async (options) => {
|
|
46
|
+
try {
|
|
47
|
+
if (options.apply && options.dryRun)
|
|
48
|
+
throw new Error('--apply and --dry-run cannot be combined');
|
|
49
|
+
const dryRun = !options.apply;
|
|
50
|
+
const failedDays = wholeNumber('--failed-dream-cycles-days', options.failedDreamCyclesDays, 1);
|
|
51
|
+
const outcomeMax = wholeNumber('--outcome-concepts-max', options.outcomeConceptsMax, MIN_OUTCOME_CONCEPT_CAP);
|
|
52
|
+
const routingDays = options.routingOutcomesOlderThan === undefined
|
|
53
|
+
? undefined
|
|
54
|
+
: wholeNumber('--routing-outcomes-older-than', options.routingOutcomesOlderThan, 1);
|
|
55
|
+
const dbPath = getDbPath();
|
|
56
|
+
if (!existsSync(dbPath))
|
|
57
|
+
throw new Error(`No learning database found at: ${dbPath}`);
|
|
58
|
+
let backupPath;
|
|
59
|
+
if (!dryRun && options.backup) {
|
|
60
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 23);
|
|
61
|
+
const output = path.join(path.dirname(dbPath), 'backups', `pre-prune-${stamp}-${randomUUID()}.db`);
|
|
62
|
+
backupPath = (await backupLearningDatabase(dbPath, output, { verify: true })).backupPath;
|
|
63
|
+
}
|
|
64
|
+
const db = openDatabase(dbPath, { readonly: dryRun, fileMustExist: true });
|
|
65
|
+
const results = [];
|
|
66
|
+
try {
|
|
67
|
+
results.push(pruneFailedDreamCycles(db, { retentionDays: failedDays, dryRun }));
|
|
68
|
+
results.push(capOutcomeConcepts(db, { maxNodes: outcomeMax, dryRun }));
|
|
69
|
+
if (options.compactExperiences)
|
|
70
|
+
results.push(compactConsolidatedExperiences(db, { dryRun }));
|
|
71
|
+
if (routingDays !== undefined) {
|
|
72
|
+
results.push(pruneRoutingOutcomes(db, { olderThanDays: routingDays, dryRun }));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
db.close();
|
|
77
|
+
}
|
|
78
|
+
if (options.json) {
|
|
79
|
+
printJson({ dryRun, dbPath, backupPath, steps: results });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log(chalk.bold(`\nLearning prune${dryRun ? ' (dry run, nothing written)' : ''}\n`));
|
|
83
|
+
console.log(` Database: ${dbPath}`);
|
|
84
|
+
if (backupPath)
|
|
85
|
+
console.log(` Backup: ${backupPath}`);
|
|
86
|
+
for (const step of results) {
|
|
87
|
+
const extra = step.payloadBytes !== undefined
|
|
88
|
+
? `, ${(step.payloadBytes / (1024 * 1024)).toFixed(1)} MB of payload`
|
|
89
|
+
: '';
|
|
90
|
+
console.log(` ${describeRetention(step)}${extra}`);
|
|
91
|
+
}
|
|
92
|
+
if (dryRun)
|
|
93
|
+
console.log(chalk.gray('\n Re-run with --apply to make these changes.'));
|
|
94
|
+
if (!options.compactExperiences || routingDays === undefined) {
|
|
95
|
+
console.log(chalk.gray(' Opt-in steps: --compact-experiences, --routing-outcomes-older-than <days>.'));
|
|
96
|
+
}
|
|
97
|
+
console.log('');
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
printError(`prune failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
101
|
+
process.exitCode = 1;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=learning-prune.js.map
|
|
@@ -22,6 +22,8 @@ import { createLearningMetricsTracker, } from '../../learning/metrics-tracker.js
|
|
|
22
22
|
import { createRegretTracker, } from '../../learning/regret-tracker.js';
|
|
23
23
|
import { openDatabase } from '../../shared/safe-db.js';
|
|
24
24
|
import { backupLearningDatabase, restoreLearningDatabase } from './learning-snapshot.js';
|
|
25
|
+
import { registerPruneCommand } from './learning-prune.js';
|
|
26
|
+
import { describeDreamRetention } from '../../learning/learning-retention.js';
|
|
25
27
|
import { createSQLitePatternStore } from '../../learning/sqlite-persistence.js';
|
|
26
28
|
import { getActiveEmbeddingSpaceIdentity } from '../../learning/real-embeddings.js';
|
|
27
29
|
import { inspectEmbeddingSpaceRows } from '../../learning/embedding-space.js';
|
|
@@ -75,6 +77,7 @@ Examples:
|
|
|
75
77
|
registerRepairCommand(learning);
|
|
76
78
|
registerHealthCommand(learning);
|
|
77
79
|
registerLoopHealthCommand(learning);
|
|
80
|
+
registerPruneCommand(learning);
|
|
78
81
|
return learning;
|
|
79
82
|
}
|
|
80
83
|
// ============================================================================
|
|
@@ -1244,6 +1247,9 @@ function registerDreamCommand(learning) {
|
|
|
1244
1247
|
conceptsProcessed: result.cycle.conceptsProcessed, associationsFound: result.cycle.associationsFound,
|
|
1245
1248
|
insightsGenerated: result.cycle.insightsGenerated, activationStats: result.activationStats,
|
|
1246
1249
|
patternsCreated: result.patternsCreated,
|
|
1250
|
+
retention: result.retention
|
|
1251
|
+
? { enabled: result.retention.enabled, steps: describeDreamRetention(result.retention) }
|
|
1252
|
+
: undefined,
|
|
1247
1253
|
insights: result.insights.map(i => ({ id: i.id, type: i.type, description: i.description, noveltyScore: i.noveltyScore, confidenceScore: i.confidenceScore, actionable: i.actionable })),
|
|
1248
1254
|
});
|
|
1249
1255
|
}
|
|
@@ -1255,6 +1261,9 @@ function registerDreamCommand(learning) {
|
|
|
1255
1261
|
console.log(` Concepts: ${result.cycle.conceptsProcessed}`);
|
|
1256
1262
|
console.log(` Associations: ${result.cycle.associationsFound}`);
|
|
1257
1263
|
console.log(` Insights: ${result.cycle.insightsGenerated}`);
|
|
1264
|
+
for (const line of result.retention ? describeDreamRetention(result.retention) : []) {
|
|
1265
|
+
console.log(` Retention: ${line}`);
|
|
1266
|
+
}
|
|
1258
1267
|
if (result.activationStats) {
|
|
1259
1268
|
console.log(chalk.bold('\n Activation Stats:'));
|
|
1260
1269
|
console.log(` Iterations: ${result.activationStats.totalIterations}`);
|
|
@@ -107,13 +107,24 @@ export class BrainHandler {
|
|
|
107
107
|
console.log(` RVF Size: ${chalk.cyan(formatBytes(rvf.fileSizeBytes))}`);
|
|
108
108
|
console.log(` Segments: ${chalk.cyan(rvf.totalSegments)}`);
|
|
109
109
|
}
|
|
110
|
+
const skippedVectors = manifest.stats
|
|
111
|
+
.skippedCacheRows?.vectors;
|
|
112
|
+
if (skippedVectors) {
|
|
113
|
+
console.log(` Skipped: ${chalk.gray(`${skippedVectors} code-index vectors (regenerable: aqe code index <path>)`)}`);
|
|
114
|
+
}
|
|
110
115
|
console.log(` Checksum: ${chalk.gray(manifest.checksum)}`);
|
|
111
116
|
console.log(` Output: ${chalk.cyan(path.resolve(options.output))}`);
|
|
112
117
|
console.log('');
|
|
113
118
|
await this.cleanupAndExit(0);
|
|
114
119
|
}
|
|
115
120
|
catch (error) {
|
|
116
|
-
|
|
121
|
+
if (error?.code === 'RVF_KERNEL_TOO_LARGE') {
|
|
122
|
+
// Expected condition, not a crash: the message names the size and the fix.
|
|
123
|
+
console.error(chalk.red('\n Brain export failed:'), error.message);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.error(chalk.red('\n Brain export failed:'), error);
|
|
127
|
+
}
|
|
117
128
|
await this.cleanupAndExit(1);
|
|
118
129
|
}
|
|
119
130
|
}
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import { ICommandHandler, CLIContext } from './interfaces.js';
|
|
8
|
+
/**
|
|
9
|
+
* What a completed task's result says it could not check (#1135, #1052):
|
|
10
|
+
* `incompleteChecks`, or a top-level status of incomplete/failed with its reason.
|
|
11
|
+
*/
|
|
12
|
+
export declare function incompleteResultReasons(result: unknown): string[];
|
|
8
13
|
export declare class TaskHandler implements ICommandHandler {
|
|
9
14
|
readonly name = "task";
|
|
10
15
|
readonly description = "Manage QE tasks";
|
|
@@ -13,6 +13,20 @@ import { writeOutput, toJSON } from '../utils/ci-output.js';
|
|
|
13
13
|
// ============================================================================
|
|
14
14
|
// Task Handler
|
|
15
15
|
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* What a completed task's result says it could not check (#1135, #1052):
|
|
18
|
+
* `incompleteChecks`, or a top-level status of incomplete/failed with its reason.
|
|
19
|
+
*/
|
|
20
|
+
export function incompleteResultReasons(result) {
|
|
21
|
+
if (!result || typeof result !== 'object')
|
|
22
|
+
return [];
|
|
23
|
+
const { status, error, incompleteChecks } = result;
|
|
24
|
+
const reasons = Array.isArray(incompleteChecks) ? incompleteChecks.filter((reason) => typeof reason === 'string') : [];
|
|
25
|
+
if (reasons.length === 0 && (status === 'incomplete' || status === 'failed')) {
|
|
26
|
+
reasons.push(typeof error === 'string' ? error : `result status is ${status}`);
|
|
27
|
+
}
|
|
28
|
+
return reasons;
|
|
29
|
+
}
|
|
16
30
|
export class TaskHandler {
|
|
17
31
|
name = 'task';
|
|
18
32
|
description = 'Manage QE tasks';
|
|
@@ -149,6 +163,12 @@ export class TaskHandler {
|
|
|
149
163
|
const taskStatus = context.queen.getTaskStatus(taskId);
|
|
150
164
|
if (taskStatus) {
|
|
151
165
|
if (taskStatus.status === 'completed') {
|
|
166
|
+
// #1135, #1052: a result that reports an incomplete or failed check is not a clean run.
|
|
167
|
+
const incomplete = incompleteResultReasons(taskStatus.result);
|
|
168
|
+
if (incomplete.length > 0) {
|
|
169
|
+
waitSpinner.fail(`Task completed, but its result is incomplete: ${incomplete.join('; ')}`);
|
|
170
|
+
return this.cleanupAndExit(1);
|
|
171
|
+
}
|
|
152
172
|
waitSpinner.succeed('Task completed successfully');
|
|
153
173
|
completed = true;
|
|
154
174
|
}
|
|
@@ -23,7 +23,7 @@ import chalk from 'chalk';
|
|
|
23
23
|
import { walkSourceFiles } from './file-discovery.js';
|
|
24
24
|
import { buildCoverageData, summarizeCoverage } from './coverage-data.js';
|
|
25
25
|
import { describeNoData, reconcileRecommendations, resolveExistingCoverage, thresholdVerdict, } from '../../coordination/handlers/coverage-target.js';
|
|
26
|
-
import { describeEvidence } from '../../coordination/handlers/coverage-evidence.js';
|
|
26
|
+
import { describeEvidence, describeExcludedEntries } from '../../coordination/handlers/coverage-evidence.js';
|
|
27
27
|
/** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
|
|
28
28
|
export const EXIT_UNMEASURED = 3;
|
|
29
29
|
/** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
|
|
@@ -157,6 +157,15 @@ export function coverageExitCode(outcome, threshold) {
|
|
|
157
157
|
return 1;
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
+
/** The JSON `warning`: the evidence gaps, then the report entries left out (#1219). */
|
|
161
|
+
function coverageWarning(insufficient, excludedNotes) {
|
|
162
|
+
if (insufficient.length === 0 && excludedNotes.length === 0)
|
|
163
|
+
return {};
|
|
164
|
+
const gaps = insufficient.length > 0 ? `INSUFFICIENT EVIDENCE: ${insufficient.join('; ')}` : '';
|
|
165
|
+
if (excludedNotes.length === 0)
|
|
166
|
+
return { warning: gaps };
|
|
167
|
+
return { warning: [gaps && gaps.replace(/\.?$/, '.'), ...excludedNotes].filter(Boolean).join(' ') };
|
|
168
|
+
}
|
|
160
169
|
/** The `-F json` document for an outcome (same shape in every case). */
|
|
161
170
|
export function coverageJson(outcome, threshold, target) {
|
|
162
171
|
const nulls = { line: null, branch: null, function: null, statement: null };
|
|
@@ -176,8 +185,10 @@ export function coverageJson(outcome, threshold, target) {
|
|
|
176
185
|
...(outcome.data.unmeasuredFiles?.length ? { unmeasuredFiles: outcome.data.unmeasuredFiles } : {}),
|
|
177
186
|
...(outcome.evidence ? { evidenceStatus: outcome.evidence.status } : {}),
|
|
178
187
|
...(outcome.evidence?.stale ? { staleReport: outcome.evidence.stale } : {}),
|
|
179
|
-
|
|
180
|
-
|
|
188
|
+
// #1219: report entries that are not project files, left out of the figures.
|
|
189
|
+
...(outcome.evidence?.conflictingFiles ? { conflictingFiles: outcome.evidence.conflictingFiles } : {}),
|
|
190
|
+
...(outcome.evidence?.excludedEntries ? { excludedReportEntries: outcome.evidence.excludedEntries } : {}),
|
|
191
|
+
...coverageWarning(outcome.insufficientEvidence, describeExcludedEntries(outcome.evidence)),
|
|
181
192
|
};
|
|
182
193
|
case 'estimate':
|
|
183
194
|
return {
|
|
@@ -32,6 +32,9 @@ export type FleetOperationPlan = {
|
|
|
32
32
|
};
|
|
33
33
|
/** Coverage threshold `analyze` judges against, as `aqe coverage` does by default. */
|
|
34
34
|
export declare const FLEET_COVERAGE_THRESHOLD = 80;
|
|
35
|
-
/**
|
|
36
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Build the domain task for a fleet operation on `target`, or say why it
|
|
37
|
+
* cannot run. `projectRoot` defaults to the project `aqe` runs in.
|
|
38
|
+
*/
|
|
39
|
+
export declare function planFleetOperation(operation: FleetOperation, target: string, projectRoot?: string): Promise<FleetOperationPlan>;
|
|
37
40
|
//# sourceMappingURL=fleet-operation.d.ts.map
|
|
@@ -17,17 +17,28 @@ import { summarizeCoverage } from './coverage-data.js';
|
|
|
17
17
|
import { describeNoData, resolveExistingCoverage } from '../../coordination/handlers/coverage-target.js';
|
|
18
18
|
import { describeEvidence } from '../../coordination/handlers/coverage-evidence.js';
|
|
19
19
|
import { MAX_SAST_FILE_BYTES } from '../../domains/security-compliance/sast-path-guard.js';
|
|
20
|
+
import { confinePayloadPaths } from '../../shared/io/payload-path-guard.js';
|
|
20
21
|
export const FLEET_OPERATIONS = ['test', 'analyze', 'scan'];
|
|
21
22
|
/** Coverage threshold `analyze` judges against, as `aqe coverage` does by default. */
|
|
22
23
|
export const FLEET_COVERAGE_THRESHOLD = 80;
|
|
23
24
|
/** Extensions the built-in SAST patterns cover (sast-scanner.ts). */
|
|
24
25
|
const SAST_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
|
|
25
26
|
const refuse = (error) => ({ success: false, error });
|
|
26
|
-
/**
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Build the domain task for a fleet operation on `target`, or say why it
|
|
29
|
+
* cannot run. `projectRoot` defaults to the project `aqe` runs in.
|
|
30
|
+
*/
|
|
31
|
+
export async function planFleetOperation(operation, target, projectRoot) {
|
|
28
32
|
const targetPath = resolve(target);
|
|
29
33
|
if (!existsSync(targetPath))
|
|
30
34
|
return refuse(`Target does not exist: ${target}`);
|
|
35
|
+
// #1146: the target is confined to the project, as handler paths are
|
|
36
|
+
// (#1096): a symlink that leads out of the project is refused here instead
|
|
37
|
+
// of failing every worker later.
|
|
38
|
+
const { skipped } = await confinePayloadPaths([target], { projectRoot, allowDirectory: true });
|
|
39
|
+
if (skipped[0]?.reason === 'outside-project-root') {
|
|
40
|
+
return refuse(`Target ${target} resolves outside the project. Run aqe from the project the target belongs to.`);
|
|
41
|
+
}
|
|
31
42
|
switch (operation) {
|
|
32
43
|
case 'test': {
|
|
33
44
|
const sourceFiles = walkSourceFiles(targetPath, { includeTests: false });
|
|
@@ -21,11 +21,25 @@ export interface FleetResultSummary {
|
|
|
21
21
|
}
|
|
22
22
|
/** Summarize one completed task's result for its fleet operation. */
|
|
23
23
|
export declare function summarizeFleetResult(operation: FleetOperation, result: unknown): FleetResultSummary;
|
|
24
|
+
export interface FleetVerdict {
|
|
25
|
+
/** The workers' results combined into one (#1146); undefined when no worker completed. */
|
|
26
|
+
combined: unknown;
|
|
27
|
+
/** Summary of the combined result; undefined when no worker completed. */
|
|
28
|
+
summary?: FleetResultSummary;
|
|
29
|
+
passed: boolean;
|
|
30
|
+
reasons: string[];
|
|
31
|
+
}
|
|
24
32
|
/**
|
|
25
|
-
*
|
|
33
|
+
* Judge a fleet run: the completed workers' results are combined (each worker
|
|
34
|
+
* handled its own share of the target, #1146) and summarized once.
|
|
26
35
|
* `insufficientEvidence` (from the operation's plan) fails the verdict whatever
|
|
27
|
-
* the workers returned.
|
|
36
|
+
* the workers returned.
|
|
28
37
|
*/
|
|
38
|
+
export declare function judgeFleetRun(operation: FleetOperation, workers: ReadonlyArray<{
|
|
39
|
+
success: boolean;
|
|
40
|
+
result: unknown;
|
|
41
|
+
}>, insufficientEvidence?: readonly string[]): FleetVerdict;
|
|
42
|
+
/** Print the combined result and the verdict over all workers. Returns whether the operation passed. */
|
|
29
43
|
export declare function reportFleetVerdict(operation: FleetOperation, workers: ReadonlyArray<{
|
|
30
44
|
success: boolean;
|
|
31
45
|
result: unknown;
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import chalk from 'chalk';
|
|
16
16
|
import { FLEET_COVERAGE_THRESHOLD } from './fleet-operation.js';
|
|
17
17
|
import { thresholdVerdict } from '../../coordination/handlers/coverage-target.js';
|
|
18
|
+
import { combineFleetResults } from './fleet-shard.js';
|
|
18
19
|
const SEVERITIES = ['critical', 'high', 'medium', 'low', 'informational'];
|
|
19
20
|
const MAX_LISTED_FINDINGS = 10;
|
|
20
21
|
const asRecord = (value) => value !== null && typeof value === 'object' ? value : undefined;
|
|
@@ -33,8 +34,9 @@ function summarizeScan(result) {
|
|
|
33
34
|
`Files scanned: ${coverage?.filesScanned ?? 'n/a'} (evidence: ${completeness})`,
|
|
34
35
|
...findings.slice(0, MAX_LISTED_FINDINGS).map(f => ` [${f.severity ?? '?'}] ${f.title ?? 'untitled'} @ ${f.location?.file ?? '?'}:${f.location?.line ?? '?'}`),
|
|
35
36
|
];
|
|
36
|
-
if (findings.length > MAX_LISTED_FINDINGS)
|
|
37
|
-
lines.push(` … ${findings.length - MAX_LISTED_FINDINGS} more`);
|
|
37
|
+
if (findings.length > MAX_LISTED_FINDINGS) {
|
|
38
|
+
lines.push(` … ${findings.length - MAX_LISTED_FINDINGS} more (--format json lists every finding)`);
|
|
39
|
+
}
|
|
38
40
|
const reasons = [];
|
|
39
41
|
if (count('critical') + count('high') > 0)
|
|
40
42
|
reasons.push(`${count('critical')} critical and ${count('high')} high findings`);
|
|
@@ -97,34 +99,37 @@ export function summarizeFleetResult(operation, result) {
|
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
101
|
/**
|
|
100
|
-
*
|
|
102
|
+
* Judge a fleet run: the completed workers' results are combined (each worker
|
|
103
|
+
* handled its own share of the target, #1146) and summarized once.
|
|
101
104
|
* `insufficientEvidence` (from the operation's plan) fails the verdict whatever
|
|
102
|
-
* the workers returned.
|
|
105
|
+
* the workers returned.
|
|
103
106
|
*/
|
|
107
|
+
export function judgeFleetRun(operation, workers, insufficientEvidence = []) {
|
|
108
|
+
const completed = workers.filter(w => w.success).map(w => w.result);
|
|
109
|
+
const combined = completed.length > 0 ? combineFleetResults(operation, completed) : undefined;
|
|
110
|
+
const summary = completed.length > 0 ? summarizeFleetResult(operation, combined) : undefined;
|
|
111
|
+
const incomplete = workers.length - completed.length;
|
|
112
|
+
const reasons = [...(summary?.reasons ?? [])];
|
|
113
|
+
if (insufficientEvidence.length > 0)
|
|
114
|
+
reasons.push('insufficient evidence: the coverage report is incomplete or stale for the target');
|
|
115
|
+
if (incomplete > 0)
|
|
116
|
+
reasons.unshift(`${incomplete} of ${workers.length} workers did not complete`);
|
|
117
|
+
return { combined, ...(summary ? { summary } : {}), passed: reasons.length === 0, reasons };
|
|
118
|
+
}
|
|
119
|
+
/** Print the combined result and the verdict over all workers. Returns whether the operation passed. */
|
|
104
120
|
export function reportFleetVerdict(operation, workers, log = line => console.log(line), insufficientEvidence = []) {
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
for (const summary of summaries) {
|
|
108
|
-
const text = summary.lines.join('\n');
|
|
109
|
-
if (shown.has(text))
|
|
110
|
-
continue;
|
|
111
|
-
shown.add(text);
|
|
121
|
+
const verdict = judgeFleetRun(operation, workers, insufficientEvidence);
|
|
122
|
+
if (verdict.summary) {
|
|
112
123
|
log('');
|
|
113
|
-
for (const line of summary.lines)
|
|
124
|
+
for (const line of verdict.summary.lines)
|
|
114
125
|
log(` ${line}`);
|
|
115
126
|
}
|
|
116
127
|
for (const reason of insufficientEvidence)
|
|
117
128
|
log(chalk.yellow(` Evidence: ${reason}`));
|
|
118
|
-
const incomplete = workers.filter(w => !w.success).length;
|
|
119
|
-
const reasons = [...new Set(summaries.flatMap(s => s.reasons))];
|
|
120
|
-
if (insufficientEvidence.length > 0)
|
|
121
|
-
reasons.push('insufficient evidence: the coverage report is incomplete or stale for the target');
|
|
122
|
-
if (incomplete > 0)
|
|
123
|
-
reasons.unshift(`${incomplete} of ${workers.length} workers did not complete`);
|
|
124
129
|
log('');
|
|
125
|
-
log(
|
|
130
|
+
log(verdict.passed
|
|
126
131
|
? chalk.green(' Verdict: PASSED')
|
|
127
|
-
: chalk.red(` Verdict: FAILED (${reasons.join('; ')})`));
|
|
128
|
-
return
|
|
132
|
+
: chalk.red(` Verdict: FAILED (${verdict.reasons.join('; ')})`));
|
|
133
|
+
return verdict.passed;
|
|
129
134
|
}
|
|
130
135
|
//# sourceMappingURL=fleet-result.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - `aqe fleet run` work split (#1146)
|
|
3
|
+
*
|
|
4
|
+
* `--parallel N` used to submit the same payload N times, so every worker did
|
|
5
|
+
* the whole job again. Now the target's files are split across the workers:
|
|
6
|
+
* - scan -> each worker scans its own share of the files
|
|
7
|
+
* - test -> each worker generates tests for its own share of the source files
|
|
8
|
+
* - analyze -> one coverage report is judged as a whole, so it runs as one task
|
|
9
|
+
* The shard results are then combined into one result for the verdict. Only
|
|
10
|
+
* figures the workers returned are combined; nothing is estimated.
|
|
11
|
+
*/
|
|
12
|
+
import type { FleetOperation } from './fleet-operation.js';
|
|
13
|
+
/** Workers used when --parallel is not given. */
|
|
14
|
+
export declare const DEFAULT_FLEET_WORKERS = 4;
|
|
15
|
+
export interface FleetShardPlan {
|
|
16
|
+
/** One payload per worker. */
|
|
17
|
+
payloads: Array<Record<string, unknown>>;
|
|
18
|
+
/** Files given to each worker (empty for an operation that is not split). */
|
|
19
|
+
files: string[][];
|
|
20
|
+
/** Why fewer workers run than were asked for, if they do. */
|
|
21
|
+
note?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Split `items` into at most `parts` contiguous chunks whose sizes differ by at most one. */
|
|
24
|
+
export declare function splitEvenly<T>(items: readonly T[], parts: number): T[][];
|
|
25
|
+
/**
|
|
26
|
+
* Split an operation's payload across workers. `requested` is the --parallel
|
|
27
|
+
* value, or undefined when the flag was not given.
|
|
28
|
+
*/
|
|
29
|
+
export declare function shardFleetPayload(operation: FleetOperation, payload: Record<string, unknown>, requested: number | undefined): FleetShardPlan;
|
|
30
|
+
/**
|
|
31
|
+
* Combine the results of the workers that completed into one result of the
|
|
32
|
+
* operation's shape. Returns undefined when a result cannot be read, so the
|
|
33
|
+
* verdict fails as unreadable instead of passing on part of the results.
|
|
34
|
+
*/
|
|
35
|
+
export declare function combineFleetResults(operation: FleetOperation, results: readonly unknown[]): unknown;
|
|
36
|
+
//# sourceMappingURL=fleet-shard.d.ts.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - `aqe fleet run` work split (#1146)
|
|
3
|
+
*
|
|
4
|
+
* `--parallel N` used to submit the same payload N times, so every worker did
|
|
5
|
+
* the whole job again. Now the target's files are split across the workers:
|
|
6
|
+
* - scan -> each worker scans its own share of the files
|
|
7
|
+
* - test -> each worker generates tests for its own share of the source files
|
|
8
|
+
* - analyze -> one coverage report is judged as a whole, so it runs as one task
|
|
9
|
+
* The shard results are then combined into one result for the verdict. Only
|
|
10
|
+
* figures the workers returned are combined; nothing is estimated.
|
|
11
|
+
*/
|
|
12
|
+
/** Workers used when --parallel is not given. */
|
|
13
|
+
export const DEFAULT_FLEET_WORKERS = 4;
|
|
14
|
+
/** The payload field each splittable operation's files are in. */
|
|
15
|
+
const SHARD_FIELD = { scan: 'files', test: 'sourceFiles' };
|
|
16
|
+
/** Split `items` into at most `parts` contiguous chunks whose sizes differ by at most one. */
|
|
17
|
+
export function splitEvenly(items, parts) {
|
|
18
|
+
const count = Math.max(1, Math.min(parts, items.length));
|
|
19
|
+
const base = Math.floor(items.length / count);
|
|
20
|
+
const extra = items.length % count;
|
|
21
|
+
const chunks = [];
|
|
22
|
+
let start = 0;
|
|
23
|
+
for (let i = 0; i < count; i++) {
|
|
24
|
+
const size = base + (i < extra ? 1 : 0);
|
|
25
|
+
chunks.push(items.slice(start, start + size));
|
|
26
|
+
start += size;
|
|
27
|
+
}
|
|
28
|
+
return chunks;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Split an operation's payload across workers. `requested` is the --parallel
|
|
32
|
+
* value, or undefined when the flag was not given.
|
|
33
|
+
*/
|
|
34
|
+
export function shardFleetPayload(operation, payload, requested) {
|
|
35
|
+
const field = SHARD_FIELD[operation];
|
|
36
|
+
if (!field) {
|
|
37
|
+
const note = requested !== undefined && requested > 1
|
|
38
|
+
? `${operation} judges one coverage report as a whole, so it runs as one task; --parallel ${requested} does not apply.`
|
|
39
|
+
: undefined;
|
|
40
|
+
return { payloads: [payload], files: [[]], ...(note ? { note } : {}) };
|
|
41
|
+
}
|
|
42
|
+
const files = Array.isArray(payload[field]) ? payload[field] : [];
|
|
43
|
+
const wanted = requested ?? DEFAULT_FLEET_WORKERS;
|
|
44
|
+
const chunks = splitEvenly(files, wanted);
|
|
45
|
+
const note = requested !== undefined && chunks.length < requested
|
|
46
|
+
? `--parallel ${requested} asks for more workers than there are files (${files.length}); ${chunks.length} run.`
|
|
47
|
+
: undefined;
|
|
48
|
+
return {
|
|
49
|
+
payloads: chunks.map(chunk => ({ ...payload, [field]: chunk })),
|
|
50
|
+
files: chunks,
|
|
51
|
+
...(note ? { note } : {}),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const asRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
|
|
55
|
+
const SCAN_COUNTS = ['critical', 'high', 'medium', 'low', 'informational', 'totalFiles'];
|
|
56
|
+
function sum(records, key) {
|
|
57
|
+
const values = records.map(r => r?.[key]);
|
|
58
|
+
return values.every(v => typeof v === 'number') ? values.reduce((a, b) => a + b, 0) : undefined;
|
|
59
|
+
}
|
|
60
|
+
function combineScans(results) {
|
|
61
|
+
if (!results.every(r => asRecord(r.summary) && Array.isArray(r.vulnerabilities)))
|
|
62
|
+
return undefined;
|
|
63
|
+
const summaries = results.map(r => asRecord(r.summary));
|
|
64
|
+
const summary = {};
|
|
65
|
+
for (const key of SCAN_COUNTS) {
|
|
66
|
+
const total = sum(summaries, key);
|
|
67
|
+
if (total !== undefined)
|
|
68
|
+
summary[key] = total;
|
|
69
|
+
}
|
|
70
|
+
const coverages = results.map(r => asRecord(r.coverage));
|
|
71
|
+
const filesScanned = sum(coverages, 'filesScanned');
|
|
72
|
+
const linesScanned = sum(coverages, 'linesScanned');
|
|
73
|
+
// Complete only when every shard says so; a shard without evidence leaves it unknown.
|
|
74
|
+
const completeness = results.map(r => asRecord(r.evidence)?.completeness);
|
|
75
|
+
const combinedCompleteness = !completeness.every(c => typeof c === 'string') ? undefined
|
|
76
|
+
: completeness.every(c => c === 'complete') ? 'complete'
|
|
77
|
+
: completeness.every(c => c === 'none') ? 'none' : 'partial';
|
|
78
|
+
return {
|
|
79
|
+
vulnerabilities: results.flatMap(r => r.vulnerabilities),
|
|
80
|
+
summary,
|
|
81
|
+
...(filesScanned !== undefined || linesScanned !== undefined
|
|
82
|
+
? { coverage: { ...(filesScanned !== undefined ? { filesScanned } : {}), ...(linesScanned !== undefined ? { linesScanned } : {}) } }
|
|
83
|
+
: {}),
|
|
84
|
+
...(combinedCompleteness ? { evidence: { completeness: combinedCompleteness } } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Combine the results of the workers that completed into one result of the
|
|
89
|
+
* operation's shape. Returns undefined when a result cannot be read, so the
|
|
90
|
+
* verdict fails as unreadable instead of passing on part of the results.
|
|
91
|
+
*/
|
|
92
|
+
export function combineFleetResults(operation, results) {
|
|
93
|
+
if (results.length === 0)
|
|
94
|
+
return undefined;
|
|
95
|
+
if (results.length === 1)
|
|
96
|
+
return results[0];
|
|
97
|
+
const records = results.map(asRecord);
|
|
98
|
+
if (records.some(r => !r))
|
|
99
|
+
return undefined;
|
|
100
|
+
const valid = records;
|
|
101
|
+
switch (operation) {
|
|
102
|
+
case 'scan': return combineScans(valid);
|
|
103
|
+
case 'test':
|
|
104
|
+
return valid.every(r => Array.isArray(r.tests)) ? { tests: valid.flatMap(r => r.tests) } : undefined;
|
|
105
|
+
case 'analyze':
|
|
106
|
+
// Never split, so several results mean duplicated work; none is preferred.
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=fleet-shard.js.map
|
|
@@ -79,6 +79,13 @@ export declare class CompactionPipeline {
|
|
|
79
79
|
* Triggers Tier 4 reactive compaction immediately.
|
|
80
80
|
*/
|
|
81
81
|
handleOverflow(trigger?: 'status_413' | 'context_overflow'): Promise<Tier4Result>;
|
|
82
|
+
/** Get the active conversation history (a copy) as the next tier would see it. */
|
|
83
|
+
getConversationHistory(): ConversationMessage[];
|
|
84
|
+
/**
|
|
85
|
+
* Set the budget to the token estimate of the retained history (#1249), so
|
|
86
|
+
* it describes what is actually kept rather than a tier's reported saving.
|
|
87
|
+
*/
|
|
88
|
+
private reconcileBudget;
|
|
82
89
|
/** Get compaction statistics for the session_cache_stats tool. */
|
|
83
90
|
getStats(): {
|
|
84
91
|
conversationMessages: number;
|
|
@@ -120,10 +120,22 @@ export class CompactionPipeline {
|
|
|
120
120
|
tierResults.push(t2);
|
|
121
121
|
tiersExecuted.push(2);
|
|
122
122
|
totalTokensSaved += t2.tokensSaved;
|
|
123
|
-
//
|
|
123
|
+
// #1249: keep the Tier-2 summary in history ahead of the preserved
|
|
124
|
+
// tail. It used to be dropped, so the summarized messages had no
|
|
125
|
+
// representation left and Tier 3 saw only the tail.
|
|
124
126
|
if (t2.removedMessageCount > 0) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
+
const summaryMessage = t2.summary
|
|
128
|
+
? [{
|
|
129
|
+
role: 'assistant',
|
|
130
|
+
content: t2.summary,
|
|
131
|
+
timestamp: Date.now(),
|
|
132
|
+
estimatedTokens: t2.summaryTokens,
|
|
133
|
+
id: t2.summaryItem?.id,
|
|
134
|
+
provenance: t2.summaryItem,
|
|
135
|
+
}]
|
|
136
|
+
: [];
|
|
137
|
+
this.conversationHistory = [...summaryMessage, ...t2.preservedMessages];
|
|
138
|
+
this.reconcileBudget();
|
|
127
139
|
}
|
|
128
140
|
}
|
|
129
141
|
if (maxTier >= 3 && this.budget.shouldAutoCompact()) {
|
|
@@ -142,7 +154,7 @@ export class CompactionPipeline {
|
|
|
142
154
|
id: t3.summaryItem?.id,
|
|
143
155
|
provenance: t3.summaryItem,
|
|
144
156
|
}];
|
|
145
|
-
this.
|
|
157
|
+
this.reconcileBudget();
|
|
146
158
|
}
|
|
147
159
|
}
|
|
148
160
|
if (maxTier >= 4 && this.budget.isBlocking()) {
|
|
@@ -153,7 +165,7 @@ export class CompactionPipeline {
|
|
|
153
165
|
totalTokensSaved += t4.tokensSaved;
|
|
154
166
|
if (t4.droppedCount > 0) {
|
|
155
167
|
this.conversationHistory = [...t4.survivingMessages];
|
|
156
|
-
this.
|
|
168
|
+
this.reconcileBudget();
|
|
157
169
|
}
|
|
158
170
|
}
|
|
159
171
|
}
|
|
@@ -175,10 +187,22 @@ export class CompactionPipeline {
|
|
|
175
187
|
const result = this.tier4.compact(this.conversationHistory, trigger);
|
|
176
188
|
if (result.droppedCount > 0) {
|
|
177
189
|
this.conversationHistory = [...result.survivingMessages];
|
|
178
|
-
this.
|
|
190
|
+
this.reconcileBudget();
|
|
179
191
|
}
|
|
180
192
|
return result;
|
|
181
193
|
}
|
|
194
|
+
/** Get the active conversation history (a copy) as the next tier would see it. */
|
|
195
|
+
getConversationHistory() {
|
|
196
|
+
return [...this.conversationHistory];
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Set the budget to the token estimate of the retained history (#1249), so
|
|
200
|
+
* it describes what is actually kept rather than a tier's reported saving.
|
|
201
|
+
*/
|
|
202
|
+
reconcileBudget() {
|
|
203
|
+
const retained = this.conversationHistory.reduce((sum, m) => sum + (m.estimatedTokens ?? estimateTokensPadded(m.content)), 0);
|
|
204
|
+
this.budget.setUsedTokens(retained);
|
|
205
|
+
}
|
|
182
206
|
/** Get compaction statistics for the session_cache_stats tool. */
|
|
183
207
|
getStats() {
|
|
184
208
|
return {
|