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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Agentic QE v3 - DAST Scanner Helper Functions
|
|
3
3
|
* Utility functions for dynamic security analysis
|
|
4
4
|
*/
|
|
5
|
-
import type { Vulnerability, ScanSummary, MemoryBackend } from './scanner-types.js';
|
|
5
|
+
import type { Vulnerability, ScanSummary, MemoryBackend, DASTRequestFailure } from './scanner-types.js';
|
|
6
6
|
export { testXSS, testSQLi } from './dast-injection-testing.js';
|
|
7
7
|
export { testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, } from './dast-auth-testing.js';
|
|
8
8
|
/**
|
|
@@ -20,23 +20,19 @@ export declare function analyzeServerHeaders(headers: Headers, targetUrl: string
|
|
|
20
20
|
/**
|
|
21
21
|
* Scan for sensitive file exposure
|
|
22
22
|
*/
|
|
23
|
-
export declare function scanSensitiveFiles(parsedUrl: URL, crawledUrls: number, maxDepth: number, vulnerabilities: Vulnerability[]): Promise<number>;
|
|
23
|
+
export declare function scanSensitiveFiles(parsedUrl: URL, crawledUrls: number, maxDepth: number, vulnerabilities: Vulnerability[], failures?: DASTRequestFailure[]): Promise<number>;
|
|
24
24
|
/**
|
|
25
25
|
* Analyze CORS configuration
|
|
26
26
|
*/
|
|
27
|
-
export declare function analyzeCORS(targetUrl: string, vulnerabilities: Vulnerability[]): Promise<void>;
|
|
27
|
+
export declare function analyzeCORS(targetUrl: string, vulnerabilities: Vulnerability[], failures?: DASTRequestFailure[]): Promise<void>;
|
|
28
28
|
/**
|
|
29
29
|
* Extract links from HTML and crawl discovered pages
|
|
30
30
|
*/
|
|
31
|
-
export declare function extractAndCrawlLinks(html: string, baseUrl: URL, currentCrawled: number, maxDepth: number, vulnerabilities: Vulnerability[]): Promise<number>;
|
|
31
|
+
export declare function extractAndCrawlLinks(html: string, baseUrl: URL, currentCrawled: number, maxDepth: number, vulnerabilities: Vulnerability[], failures?: DASTRequestFailure[]): Promise<number>;
|
|
32
32
|
/**
|
|
33
33
|
* Analyze HTML forms for security issues
|
|
34
34
|
*/
|
|
35
35
|
export declare function analyzeFormsForSecurityIssues(html: string, baseUrl: string, vulnerabilities: Vulnerability[]): void;
|
|
36
|
-
/**
|
|
37
|
-
* Handle fetch errors and add appropriate vulnerabilities
|
|
38
|
-
*/
|
|
39
|
-
export declare function handleFetchError(fetchError: unknown, targetUrl: string, vulnerabilities: Vulnerability[]): void;
|
|
40
36
|
/**
|
|
41
37
|
* Calculate scan summary from vulnerabilities
|
|
42
38
|
*/
|
|
@@ -44,5 +40,8 @@ export declare function calculateSummary(vulnerabilities: Vulnerability[], total
|
|
|
44
40
|
/**
|
|
45
41
|
* Store scan results in memory
|
|
46
42
|
*/
|
|
47
|
-
export declare function storeScanResults(memory: MemoryBackend, scanId: string, scanType: string, vulnerabilities: Vulnerability[], summary: ScanSummary
|
|
43
|
+
export declare function storeScanResults(memory: MemoryBackend, scanId: string, scanType: string, vulnerabilities: Vulnerability[], summary: ScanSummary, completeness?: {
|
|
44
|
+
status: string;
|
|
45
|
+
failedRequests: DASTRequestFailure[];
|
|
46
|
+
}): Promise<void>;
|
|
48
47
|
//# sourceMappingURL=dast-helpers.d.ts.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Utility functions for dynamic security analysis
|
|
4
4
|
*/
|
|
5
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
-
import {
|
|
6
|
+
import { probe } from './dast-requests.js';
|
|
7
7
|
// Re-export from specialized modules for convenience
|
|
8
8
|
export { testXSS, testSQLi } from './dast-injection-testing.js';
|
|
9
9
|
export { testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, } from './dast-auth-testing.js';
|
|
@@ -100,7 +100,7 @@ export function analyzeServerHeaders(headers, targetUrl, vulnerabilities) {
|
|
|
100
100
|
/**
|
|
101
101
|
* Scan for sensitive file exposure
|
|
102
102
|
*/
|
|
103
|
-
export async function scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulnerabilities) {
|
|
103
|
+
export async function scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulnerabilities, failures) {
|
|
104
104
|
const sensitiveEndpoints = [
|
|
105
105
|
{ path: '/.git/config', name: 'Git Configuration' },
|
|
106
106
|
{ path: '/.env', name: 'Environment File' },
|
|
@@ -113,13 +113,13 @@ export async function scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulne
|
|
|
113
113
|
if (crawledUrls >= maxDepth * 10)
|
|
114
114
|
break;
|
|
115
115
|
const testUrl = new URL(endpoint.path, parsedUrl.origin).toString();
|
|
116
|
-
const testResponse = await
|
|
116
|
+
const testResponse = await probe(testUrl, {
|
|
117
117
|
method: 'GET',
|
|
118
118
|
signal: AbortSignal.timeout(5000),
|
|
119
|
-
});
|
|
120
|
-
if (testResponse
|
|
119
|
+
}, failures);
|
|
120
|
+
if (testResponse?.ok) {
|
|
121
121
|
crawledUrls++;
|
|
122
|
-
const text =
|
|
122
|
+
const text = testResponse.text;
|
|
123
123
|
if (text.length > 20 && !text.toLowerCase().includes('not found') && !text.toLowerCase().includes('404')) {
|
|
124
124
|
const isSensitive = endpoint.path.includes('.git') ||
|
|
125
125
|
endpoint.path.includes('.env') ||
|
|
@@ -148,15 +148,17 @@ export async function scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulne
|
|
|
148
148
|
/**
|
|
149
149
|
* Analyze CORS configuration
|
|
150
150
|
*/
|
|
151
|
-
export async function analyzeCORS(targetUrl, vulnerabilities) {
|
|
152
|
-
const corsResponse = await
|
|
151
|
+
export async function analyzeCORS(targetUrl, vulnerabilities, failures) {
|
|
152
|
+
const corsResponse = await probe(targetUrl, {
|
|
153
153
|
method: 'OPTIONS',
|
|
154
154
|
headers: {
|
|
155
155
|
'Origin': 'https://evil-attacker.com',
|
|
156
156
|
'Access-Control-Request-Method': 'GET',
|
|
157
157
|
},
|
|
158
158
|
signal: AbortSignal.timeout(5000),
|
|
159
|
-
});
|
|
159
|
+
}, failures);
|
|
160
|
+
if (!corsResponse)
|
|
161
|
+
return;
|
|
160
162
|
const allowOrigin = corsResponse.headers.get('access-control-allow-origin');
|
|
161
163
|
if (allowOrigin === '*' || allowOrigin === 'https://evil-attacker.com') {
|
|
162
164
|
vulnerabilities.push({
|
|
@@ -177,7 +179,7 @@ export async function analyzeCORS(targetUrl, vulnerabilities) {
|
|
|
177
179
|
/**
|
|
178
180
|
* Extract links from HTML and crawl discovered pages
|
|
179
181
|
*/
|
|
180
|
-
export async function extractAndCrawlLinks(html, baseUrl, currentCrawled, maxDepth, vulnerabilities) {
|
|
182
|
+
export async function extractAndCrawlLinks(html, baseUrl, currentCrawled, maxDepth, vulnerabilities, failures) {
|
|
181
183
|
let crawledUrls = currentCrawled;
|
|
182
184
|
const maxCrawl = maxDepth * 5;
|
|
183
185
|
const linkPattern = /href=["']([^"']+)["']/gi;
|
|
@@ -200,12 +202,14 @@ export async function extractAndCrawlLinks(html, baseUrl, currentCrawled, maxDep
|
|
|
200
202
|
if (crawledUrls >= maxCrawl)
|
|
201
203
|
break;
|
|
202
204
|
const crawlUrl = new URL(path, baseUrl.origin).toString();
|
|
203
|
-
const crawlResponse = await
|
|
205
|
+
const crawlResponse = await probe(crawlUrl, {
|
|
204
206
|
method: 'GET',
|
|
205
207
|
headers: { 'User-Agent': 'AgenticQE-DAST-Scanner/3.0' },
|
|
206
208
|
signal: AbortSignal.timeout(5000),
|
|
207
209
|
redirect: 'follow',
|
|
208
|
-
});
|
|
210
|
+
}, failures);
|
|
211
|
+
if (!crawlResponse)
|
|
212
|
+
continue;
|
|
209
213
|
crawledUrls++;
|
|
210
214
|
if (crawlResponse.ok) {
|
|
211
215
|
if (path.includes('password') || path.includes('token') || path.includes('api_key')) {
|
|
@@ -220,7 +224,7 @@ export async function extractAndCrawlLinks(html, baseUrl, currentCrawled, maxDep
|
|
|
220
224
|
references: ['https://owasp.org/www-community/vulnerabilities/Information_exposure_through_query_strings_in_url'],
|
|
221
225
|
});
|
|
222
226
|
}
|
|
223
|
-
const responseText =
|
|
227
|
+
const responseText = crawlResponse.text;
|
|
224
228
|
if (responseText.includes('Index of /') || responseText.includes('Directory listing for')) {
|
|
225
229
|
vulnerabilities.push({
|
|
226
230
|
id: uuidv4(),
|
|
@@ -308,36 +312,6 @@ export function analyzeFormsForSecurityIssues(html, baseUrl, vulnerabilities) {
|
|
|
308
312
|
// ============================================================================
|
|
309
313
|
// Utility Functions
|
|
310
314
|
// ============================================================================
|
|
311
|
-
/**
|
|
312
|
-
* Handle fetch errors and add appropriate vulnerabilities
|
|
313
|
-
*/
|
|
314
|
-
export function handleFetchError(fetchError, targetUrl, vulnerabilities) {
|
|
315
|
-
const errorMsg = toErrorMessage(fetchError);
|
|
316
|
-
if (errorMsg.includes('CERT') || errorMsg.includes('SSL') || errorMsg.includes('TLS') || errorMsg.includes('certificate')) {
|
|
317
|
-
vulnerabilities.push({
|
|
318
|
-
id: uuidv4(),
|
|
319
|
-
title: 'TLS Certificate Error',
|
|
320
|
-
description: `SSL/TLS error: ${errorMsg}`,
|
|
321
|
-
severity: 'high',
|
|
322
|
-
category: 'security-misconfiguration',
|
|
323
|
-
location: { file: targetUrl },
|
|
324
|
-
remediation: { description: 'Fix TLS certificate configuration', estimatedEffort: 'moderate', automatable: false },
|
|
325
|
-
references: ['https://owasp.org/www-project-web-security-testing-guide/'],
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
else if (errorMsg.includes('timeout') || errorMsg.includes('abort')) {
|
|
329
|
-
vulnerabilities.push({
|
|
330
|
-
id: uuidv4(),
|
|
331
|
-
title: 'Connection Timeout',
|
|
332
|
-
description: `Target did not respond within timeout: ${errorMsg}`,
|
|
333
|
-
severity: 'informational',
|
|
334
|
-
category: 'security-misconfiguration',
|
|
335
|
-
location: { file: targetUrl },
|
|
336
|
-
remediation: { description: 'Verify target is accessible', estimatedEffort: 'trivial', automatable: false },
|
|
337
|
-
references: [],
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
315
|
/**
|
|
342
316
|
* Calculate scan summary from vulnerabilities
|
|
343
317
|
*/
|
|
@@ -359,12 +333,13 @@ export function calculateSummary(vulnerabilities, totalFiles, scanDurationMs) {
|
|
|
359
333
|
/**
|
|
360
334
|
* Store scan results in memory
|
|
361
335
|
*/
|
|
362
|
-
export async function storeScanResults(memory, scanId, scanType, vulnerabilities, summary) {
|
|
336
|
+
export async function storeScanResults(memory, scanId, scanType, vulnerabilities, summary, completeness) {
|
|
363
337
|
await memory.set(`security:scan:${scanId}`, {
|
|
364
338
|
scanId,
|
|
365
339
|
scanType,
|
|
366
340
|
vulnerabilities,
|
|
367
341
|
summary,
|
|
342
|
+
...completeness,
|
|
368
343
|
timestamp: new Date().toISOString(),
|
|
369
344
|
}, { namespace: 'security-compliance', ttl: 86400 * 7 });
|
|
370
345
|
}
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
* Agentic QE v3 - DAST Injection Testing
|
|
3
3
|
* XSS and SQL injection testing utilities
|
|
4
4
|
*/
|
|
5
|
-
import type { Vulnerability } from './scanner-types.js';
|
|
5
|
+
import type { Vulnerability, DASTRequestFailure } from './scanner-types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Test for XSS vulnerabilities
|
|
8
8
|
*/
|
|
9
9
|
export declare function testXSS(targetUrl: string, parsedUrl: URL, paramName: string, payloads: Array<{
|
|
10
10
|
payload: string;
|
|
11
11
|
name: string;
|
|
12
|
-
}>, vulnerabilities: Vulnerability[]): Promise<void>;
|
|
12
|
+
}>, vulnerabilities: Vulnerability[], failures?: DASTRequestFailure[]): Promise<void>;
|
|
13
13
|
/**
|
|
14
14
|
* Test for SQL injection vulnerabilities
|
|
15
15
|
*/
|
|
16
16
|
export declare function testSQLi(targetUrl: string, parsedUrl: URL, paramName: string, payloads: Array<{
|
|
17
17
|
payload: string;
|
|
18
18
|
name: string;
|
|
19
|
-
}>, vulnerabilities: Vulnerability[]): Promise<void>;
|
|
19
|
+
}>, vulnerabilities: Vulnerability[], failures?: DASTRequestFailure[]): Promise<void>;
|
|
20
20
|
//# sourceMappingURL=dast-injection-testing.d.ts.map
|
|
@@ -3,24 +3,25 @@
|
|
|
3
3
|
* XSS and SQL injection testing utilities
|
|
4
4
|
*/
|
|
5
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
import { probe } from './dast-requests.js';
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Injection Testing
|
|
8
9
|
// ============================================================================
|
|
9
10
|
/**
|
|
10
11
|
* Test for XSS vulnerabilities
|
|
11
12
|
*/
|
|
12
|
-
export async function testXSS(targetUrl, parsedUrl, paramName, payloads, vulnerabilities) {
|
|
13
|
+
export async function testXSS(targetUrl, parsedUrl, paramName, payloads, vulnerabilities, failures) {
|
|
13
14
|
for (const xss of payloads) {
|
|
14
15
|
const testParams = new URLSearchParams(parsedUrl.search);
|
|
15
16
|
testParams.set(paramName, xss.payload);
|
|
16
17
|
const testUrl = `${parsedUrl.origin}${parsedUrl.pathname}?${testParams.toString()}`;
|
|
17
|
-
const response = await
|
|
18
|
+
const response = await probe(testUrl, {
|
|
18
19
|
method: 'GET',
|
|
19
20
|
headers: { 'User-Agent': 'AgenticQE-DAST-Scanner/3.0' },
|
|
20
21
|
signal: AbortSignal.timeout(5000),
|
|
21
|
-
});
|
|
22
|
-
if (response
|
|
23
|
-
const text =
|
|
22
|
+
}, failures);
|
|
23
|
+
if (response?.ok) {
|
|
24
|
+
const text = response.text;
|
|
24
25
|
const escapedPayload = xss.payload
|
|
25
26
|
.replace(/&/g, '&')
|
|
26
27
|
.replace(/</g, '<')
|
|
@@ -48,7 +49,7 @@ export async function testXSS(targetUrl, parsedUrl, paramName, payloads, vulnera
|
|
|
48
49
|
/**
|
|
49
50
|
* Test for SQL injection vulnerabilities
|
|
50
51
|
*/
|
|
51
|
-
export async function testSQLi(targetUrl, parsedUrl, paramName, payloads, vulnerabilities) {
|
|
52
|
+
export async function testSQLi(targetUrl, parsedUrl, paramName, payloads, vulnerabilities, failures) {
|
|
52
53
|
const sqlErrorPatterns = [
|
|
53
54
|
/SQL syntax.*MySQL/i,
|
|
54
55
|
/Warning.*mysql/i,
|
|
@@ -63,12 +64,15 @@ export async function testSQLi(targetUrl, parsedUrl, paramName, payloads, vulner
|
|
|
63
64
|
const testParams = new URLSearchParams(parsedUrl.search);
|
|
64
65
|
testParams.set(paramName, sqli.payload);
|
|
65
66
|
const testUrl = `${parsedUrl.origin}${parsedUrl.pathname}?${testParams.toString()}`;
|
|
66
|
-
|
|
67
|
+
// SQL errors often come back as HTTP 500: that body is analysed.
|
|
68
|
+
const response = await probe(testUrl, {
|
|
67
69
|
method: 'GET',
|
|
68
70
|
headers: { 'User-Agent': 'AgenticQE-DAST-Scanner/3.0' },
|
|
69
71
|
signal: AbortSignal.timeout(5000),
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
+
}, failures, { analyzeServerErrors: true });
|
|
73
|
+
if (!response)
|
|
74
|
+
continue;
|
|
75
|
+
const text = response.text;
|
|
72
76
|
for (const pattern of sqlErrorPatterns) {
|
|
73
77
|
if (pattern.test(text)) {
|
|
74
78
|
vulnerabilities.push({
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - DAST request outcomes (#1092, #1135)
|
|
3
|
+
* Classifies what a DAST request did not answer, so a failed or partial scan
|
|
4
|
+
* is reported as such and never as a scan that found nothing.
|
|
5
|
+
*/
|
|
6
|
+
import type { DASTRequestFailure } from './scanner-types.js';
|
|
7
|
+
/** Error carrying a DAST failure code. */
|
|
8
|
+
export type DASTError = Error & {
|
|
9
|
+
code: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function dastError(message: string, code: string, cause?: unknown): DASTError;
|
|
12
|
+
export declare function isDastError(error: unknown): error is DASTError;
|
|
13
|
+
/**
|
|
14
|
+
* The scan subject must be an http(s) URL. Anything else is a validation
|
|
15
|
+
* error, not a completed scan with a synthetic finding (#1135).
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseDastTarget(targetUrl: string): URL;
|
|
18
|
+
/**
|
|
19
|
+
* A response status that says nothing about the target's security: the request
|
|
20
|
+
* was refused, throttled or not served. Findings from such a page would be the
|
|
21
|
+
* headers of the error page (#1092, #1135).
|
|
22
|
+
*/
|
|
23
|
+
export declare function unansweredStatus(status: number): {
|
|
24
|
+
code: string;
|
|
25
|
+
label: string;
|
|
26
|
+
} | null;
|
|
27
|
+
/** Throws when the initial response cannot be scanned. */
|
|
28
|
+
export declare function assertScannableResponse(status: number): void;
|
|
29
|
+
/** Transport failure classification; TLS failures are told apart from a closed port (#1135). */
|
|
30
|
+
export declare function classifyRequestError(error: unknown): {
|
|
31
|
+
code: string;
|
|
32
|
+
reason: string;
|
|
33
|
+
};
|
|
34
|
+
/** Transport failures are execution errors, not absence of vulnerabilities. */
|
|
35
|
+
export declare function dastRequestFailure(error: unknown): DASTError;
|
|
36
|
+
export interface ProbeResponse {
|
|
37
|
+
readonly status: number;
|
|
38
|
+
readonly ok: boolean;
|
|
39
|
+
readonly headers: Headers;
|
|
40
|
+
readonly text: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ProbeOptions {
|
|
43
|
+
/** A 5xx body is analysed (SQL error pages), not counted as unanswered. */
|
|
44
|
+
readonly analyzeServerErrors?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A follow-up probe. When the target does not answer it (transport failure,
|
|
48
|
+
* timeout, 407/408/429, or 5xx unless `analyzeServerErrors`), the failure is
|
|
49
|
+
* recorded in `failures` and null is returned so the remaining probes still
|
|
50
|
+
* run and the scan is reported incomplete (#1135). Without `failures`, it throws.
|
|
51
|
+
*/
|
|
52
|
+
export declare function probe(url: string, init: RequestInit, failures?: DASTRequestFailure[], options?: ProbeOptions): Promise<ProbeResponse | null>;
|
|
53
|
+
export declare function summarizeFailures(failures: readonly DASTRequestFailure[]): string;
|
|
54
|
+
//# sourceMappingURL=dast-requests.d.ts.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - DAST request outcomes (#1092, #1135)
|
|
3
|
+
* Classifies what a DAST request did not answer, so a failed or partial scan
|
|
4
|
+
* is reported as such and never as a scan that found nothing.
|
|
5
|
+
*/
|
|
6
|
+
export function dastError(message, code, cause) {
|
|
7
|
+
return Object.assign(new Error(message, cause === undefined ? undefined : { cause }), { code });
|
|
8
|
+
}
|
|
9
|
+
export function isDastError(error) {
|
|
10
|
+
return error instanceof Error && 'code' in error && /^DAST_[A-Z_]+$/.test(String(error.code));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The scan subject must be an http(s) URL. Anything else is a validation
|
|
14
|
+
* error, not a completed scan with a synthetic finding (#1135).
|
|
15
|
+
*/
|
|
16
|
+
export function parseDastTarget(targetUrl) {
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = new URL(targetUrl);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw dastError('DAST target is not a valid URL; no dynamic analysis ran', 'DAST_INVALID_TARGET');
|
|
23
|
+
}
|
|
24
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
25
|
+
throw dastError(`DAST target must be an http(s) URL, not ${parsed.protocol}; no dynamic analysis ran`, 'DAST_INVALID_TARGET');
|
|
26
|
+
}
|
|
27
|
+
return parsed;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A response status that says nothing about the target's security: the request
|
|
31
|
+
* was refused, throttled or not served. Findings from such a page would be the
|
|
32
|
+
* headers of the error page (#1092, #1135).
|
|
33
|
+
*/
|
|
34
|
+
export function unansweredStatus(status) {
|
|
35
|
+
if (status === 401 || status === 403 || status === 407)
|
|
36
|
+
return { code: 'DAST_AUTHENTICATION_FAILED', label: 'authentication rejected' };
|
|
37
|
+
if (status === 408)
|
|
38
|
+
return { code: 'DAST_REQUEST_TIMEOUT', label: 'request timed out' };
|
|
39
|
+
if (status === 429)
|
|
40
|
+
return { code: 'DAST_RATE_LIMITED', label: 'rate limited' };
|
|
41
|
+
if (status >= 500)
|
|
42
|
+
return { code: 'DAST_TARGET_UNAVAILABLE', label: 'target unavailable' };
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/** Throws when the initial response cannot be scanned. */
|
|
46
|
+
export function assertScannableResponse(status) {
|
|
47
|
+
const unanswered = unansweredStatus(status);
|
|
48
|
+
if (unanswered) {
|
|
49
|
+
throw dastError(`DAST ${unanswered.label} (HTTP ${status}); dynamic analysis is incomplete`, unanswered.code);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const TLS_CODE = /^(ERR_TLS_|ERR_SSL_|ERR_CERT_|CERT_|UNABLE_TO_(GET|VERIFY)_|DEPTH_ZERO_SELF_SIGNED_CERT$|SELF_SIGNED_CERT_IN_CHAIN$|EPROTO$)/;
|
|
53
|
+
/** The errno-style code on an error or its causes (undici wraps it as `cause.code`). */
|
|
54
|
+
function causeCode(error) {
|
|
55
|
+
for (let current = error, depth = 0; current && depth < 5; depth++) {
|
|
56
|
+
const code = current.code;
|
|
57
|
+
if (typeof code === 'string' && /^[A-Z0-9_]{1,48}$/.test(code))
|
|
58
|
+
return code;
|
|
59
|
+
current = current.cause;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function isTimeout(error) {
|
|
64
|
+
return error instanceof Error && (error.name === 'TimeoutError' || error.name === 'AbortError' || /timeout|abort/i.test(error.message));
|
|
65
|
+
}
|
|
66
|
+
/** Transport failure classification; TLS failures are told apart from a closed port (#1135). */
|
|
67
|
+
export function classifyRequestError(error) {
|
|
68
|
+
const cause = causeCode(error);
|
|
69
|
+
if (isTimeout(error))
|
|
70
|
+
return { code: 'DAST_REQUEST_TIMEOUT', reason: cause ?? 'timeout' };
|
|
71
|
+
if (cause && TLS_CODE.test(cause))
|
|
72
|
+
return { code: 'DAST_TLS_FAILED', reason: cause };
|
|
73
|
+
return { code: 'DAST_REQUEST_FAILED', reason: cause ?? 'transport error' };
|
|
74
|
+
}
|
|
75
|
+
/** Transport failures are execution errors, not absence of vulnerabilities. */
|
|
76
|
+
export function dastRequestFailure(error) {
|
|
77
|
+
if (isDastError(error))
|
|
78
|
+
return error;
|
|
79
|
+
const { code, reason } = classifyRequestError(error);
|
|
80
|
+
const what = code === 'DAST_REQUEST_TIMEOUT' ? 'request timeout'
|
|
81
|
+
: code === 'DAST_TLS_FAILED' ? 'TLS handshake failed' : 'request failed';
|
|
82
|
+
return dastError(`DAST target ${what} (${reason}); dynamic analysis is incomplete`, code, error);
|
|
83
|
+
}
|
|
84
|
+
/** Origin and path only: probe URLs can carry user credentials or query tokens. */
|
|
85
|
+
function requestLabel(url) {
|
|
86
|
+
try {
|
|
87
|
+
const parsed = new URL(url);
|
|
88
|
+
return `${parsed.origin}${parsed.pathname}`;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return '(invalid url)';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* A follow-up probe. When the target does not answer it (transport failure,
|
|
96
|
+
* timeout, 407/408/429, or 5xx unless `analyzeServerErrors`), the failure is
|
|
97
|
+
* recorded in `failures` and null is returned so the remaining probes still
|
|
98
|
+
* run and the scan is reported incomplete (#1135). Without `failures`, it throws.
|
|
99
|
+
*/
|
|
100
|
+
export async function probe(url, init, failures, options = {}) {
|
|
101
|
+
try {
|
|
102
|
+
const response = await fetch(url, init);
|
|
103
|
+
const unanswered = response.status >= 500 && options.analyzeServerErrors ? null : unansweredStatus(response.status);
|
|
104
|
+
// 401/403 on a probed path is an answer: the path is protected.
|
|
105
|
+
if (unanswered && response.status !== 401 && response.status !== 403) {
|
|
106
|
+
await response.body?.cancel().catch(() => undefined);
|
|
107
|
+
throw dastError(`DAST probe ${unanswered.label} (HTTP ${response.status})`, unanswered.code);
|
|
108
|
+
}
|
|
109
|
+
return { status: response.status, ok: response.ok, headers: response.headers, text: await response.text() };
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const failure = isDastError(error)
|
|
113
|
+
? { code: error.code, reason: error.message.replace(/^DAST probe /, '') }
|
|
114
|
+
: classifyRequestError(error);
|
|
115
|
+
if (!failures)
|
|
116
|
+
throw isDastError(error) ? error : dastRequestFailure(error);
|
|
117
|
+
failures.push({ url: requestLabel(url), ...failure });
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function summarizeFailures(failures) {
|
|
122
|
+
const codes = [...new Set(failures.map(failure => failure.code))].join(', ');
|
|
123
|
+
return `${failures.length} DAST request(s) were not answered (${codes}); findings cover only the answered requests`;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=dast-requests.js.map
|
|
@@ -42,6 +42,11 @@ export declare class DASTScanner {
|
|
|
42
42
|
* Get scan status
|
|
43
43
|
*/
|
|
44
44
|
getScanStatus(scanId: string): Promise<ScanStatus>;
|
|
45
|
+
/**
|
|
46
|
+
* #1135: probes the target did not answer leave the scan incomplete. The
|
|
47
|
+
* findings already collected are real and kept; the failed URLs are listed.
|
|
48
|
+
*/
|
|
49
|
+
private toResult;
|
|
45
50
|
/**
|
|
46
51
|
* Perform dynamic (DAST) scanning on a target URL
|
|
47
52
|
*/
|
|
@@ -50,7 +55,6 @@ export declare class DASTScanner {
|
|
|
50
55
|
* Perform authenticated dynamic scanning
|
|
51
56
|
*/
|
|
52
57
|
private performAuthenticatedScan;
|
|
53
|
-
private createInvalidUrlVuln;
|
|
54
58
|
private createInsecureProtocolVuln;
|
|
55
59
|
private createTokenInUrlVuln;
|
|
56
60
|
/**
|