agentic-qe 3.15.12 → 3.15.13

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.
Files changed (467) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +118 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +6 -6
  5. package/dist/cli/chunks/adapter-KCQDVYY2.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-5VZCKTIJ.js → agent-booster-wasm-6RRQWMNE.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-K3C6CQCD.js → agent-handler-AOH6TV7W.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-NVFQ25WS.js → agent-memory-branch-2P54SF5N.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-SAQOHSGN.js +2 -0
  10. package/dist/cli/chunks/{arena-QGWIJADQ.js → arena-NSVFCAF5.js} +2 -2
  11. package/dist/cli/chunks/{arena-TSZVDSXS.js → arena-X6MOGQHA.js} +4 -4
  12. package/dist/cli/chunks/{audit-KIEE2SHJ.js → audit-27DJLQNM.js} +3 -3
  13. package/dist/cli/chunks/base-WCACU3FN.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-BNB32NW3.js → better-sqlite3-BU5GXILS.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-MPC5SPYI.js → brain-handler-GTQNHHZS.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-LZ7UXKAY.js → branch-enumerator-5CLULOCU.js} +2 -2
  17. package/dist/cli/chunks/{browser-VDHAW4RK.js → browser-R4DMU3LN.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-G6IASEAP.js +2 -0
  19. package/dist/cli/chunks/{chunk-QUJJYTJH.js → chunk-2G7TVT6W.js} +2 -2
  20. package/dist/cli/chunks/{chunk-FAGKBOX2.js → chunk-32ZMWEP3.js} +2 -2
  21. package/dist/cli/chunks/{chunk-FNUFTWEO.js → chunk-3AN5TNGD.js} +3 -3
  22. package/dist/cli/chunks/{chunk-JOWUS2X5.js → chunk-3LJ7LQMV.js} +1 -1
  23. package/dist/cli/chunks/{chunk-O4QJMANM.js → chunk-3QZEGE67.js} +1 -1
  24. package/dist/cli/chunks/{chunk-ICKUINKD.js → chunk-3RZV5DGO.js} +2 -2
  25. package/dist/cli/chunks/{chunk-W4II6SIH.js → chunk-3Y2ROSCL.js} +2 -2
  26. package/dist/cli/chunks/{chunk-L7NGKANW.js → chunk-3Y7TJFHU.js} +2 -2
  27. package/dist/cli/chunks/{chunk-UUZZXHUF.js → chunk-3YNLWPBF.js} +2 -2
  28. package/dist/cli/chunks/{chunk-JR6CUKAI.js → chunk-42J34YG4.js} +2 -2
  29. package/dist/cli/chunks/{chunk-65TH6RPD.js → chunk-4OVC4RIL.js} +1 -1
  30. package/dist/cli/chunks/{chunk-DRCBRUGN.js → chunk-526QYFJU.js} +2 -2
  31. package/dist/cli/chunks/{chunk-MCPXNUDK.js → chunk-5FKWCZNF.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NX4BCSOZ.js → chunk-5K26BEYB.js} +2 -2
  33. package/dist/cli/chunks/{chunk-MCPEC6OO.js → chunk-5MDERQH3.js} +1 -1
  34. package/dist/cli/chunks/{chunk-7JFDLL2F.js → chunk-5VMAV6T6.js} +1 -1
  35. package/dist/cli/chunks/{chunk-5TAEW5OV.js → chunk-5ZGM3RMH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-SG2TX72G.js → chunk-6KATY3KS.js} +2 -2
  37. package/dist/cli/chunks/{chunk-KA5SHLMW.js → chunk-6Z7PRBSG.js} +2 -2
  38. package/dist/cli/chunks/{chunk-LFBA735S.js → chunk-72ASBE35.js} +3 -3
  39. package/dist/cli/chunks/{chunk-TOWOJGEI.js → chunk-756CGMEH.js} +1 -1
  40. package/dist/cli/chunks/{chunk-IVTQF55W.js → chunk-75RDHBAX.js} +3 -3
  41. package/dist/cli/chunks/{chunk-66PXR3NI.js → chunk-7CMTY45A.js} +2 -2
  42. package/dist/cli/chunks/{chunk-WLRU6ESI.js → chunk-7JUC2MVZ.js} +2 -2
  43. package/dist/cli/chunks/{chunk-SBHM5X2S.js → chunk-7NA7JXNB.js} +2 -2
  44. package/dist/cli/chunks/{chunk-HZBXJFGN.js → chunk-7PLIEBY7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-2ASQRBK2.js → chunk-7YTGHGK4.js} +2 -2
  46. package/dist/cli/chunks/{chunk-SQVZ3TRU.js → chunk-A64JFBWI.js} +2 -2
  47. package/dist/cli/chunks/{chunk-2PPSS4JD.js → chunk-AL6FBH3E.js} +2 -2
  48. package/dist/cli/chunks/{chunk-3IU4LDZR.js → chunk-AQSVJNEH.js} +2 -2
  49. package/dist/cli/chunks/{chunk-C74M4WUI.js → chunk-ARJW4I2O.js} +2 -2
  50. package/dist/cli/chunks/{chunk-VF7FTD64.js → chunk-ASQYASNV.js} +1 -1
  51. package/dist/cli/chunks/{chunk-HLGFHHWV.js → chunk-BEGR4D6N.js} +2 -2
  52. package/dist/cli/chunks/{chunk-EN7GRVEQ.js → chunk-BK577VL7.js} +2 -2
  53. package/dist/cli/chunks/{chunk-KGA7VAI4.js → chunk-BLSLEVDI.js} +2 -2
  54. package/dist/cli/chunks/{chunk-HM3LSFTY.js → chunk-BTVEYBW2.js} +2 -2
  55. package/dist/cli/chunks/{chunk-J7Y7ZBIT.js → chunk-C6JTLKG7.js} +5 -5
  56. package/dist/cli/chunks/{chunk-PTBOLBM4.js → chunk-C7JM7CD3.js} +2 -2
  57. package/dist/cli/chunks/{chunk-IL7GQNNE.js → chunk-CCMKSHAT.js} +2 -2
  58. package/dist/cli/chunks/{chunk-23PQF7NN.js → chunk-CE7B5LU7.js} +1 -1
  59. package/dist/cli/chunks/{chunk-BMG2JLSQ.js → chunk-CM4LSLKR.js} +2 -2
  60. package/dist/cli/chunks/chunk-CRWPZT74.js +62 -0
  61. package/dist/cli/chunks/{chunk-4HWUECVD.js → chunk-CT6SAVXQ.js} +2 -2
  62. package/dist/cli/chunks/chunk-CV77DMDQ.js +2 -0
  63. package/dist/cli/chunks/{chunk-CU36D7TN.js → chunk-DFUASIKA.js} +2 -2
  64. package/dist/cli/chunks/{chunk-T4EN5VVK.js → chunk-DLD7RUZ4.js} +2 -2
  65. package/dist/cli/chunks/{chunk-IA55PFLG.js → chunk-DNDL7SOS.js} +2 -2
  66. package/dist/cli/chunks/{chunk-6QRI3JVE.js → chunk-DVGRPK7A.js} +2 -2
  67. package/dist/cli/chunks/{chunk-UREDS662.js → chunk-E56B6IDX.js} +2 -2
  68. package/dist/cli/chunks/{chunk-ZGROHCOW.js → chunk-E7CLYGS7.js} +1 -1
  69. package/dist/cli/chunks/{chunk-YNVEDFPQ.js → chunk-EXGMJFAT.js} +1 -1
  70. package/dist/cli/chunks/{chunk-JRYWLOBD.js → chunk-F3YS57NF.js} +2 -2
  71. package/dist/cli/chunks/{chunk-ZYOYR3UR.js → chunk-FZ76G4QJ.js} +1 -1
  72. package/dist/cli/chunks/{chunk-UIKQPO4Y.js → chunk-G2Q66Z23.js} +2 -2
  73. package/dist/cli/chunks/{chunk-5S4UIDFK.js → chunk-G6WDYBLQ.js} +1 -1
  74. package/dist/cli/chunks/{chunk-4SA7M34P.js → chunk-G77ERMUD.js} +1 -1
  75. package/dist/cli/chunks/{chunk-ADUAJIAU.js → chunk-GB6HBNH2.js} +2 -2
  76. package/dist/cli/chunks/{chunk-IETBWYHW.js → chunk-GHM6MQNK.js} +2 -2
  77. package/dist/cli/chunks/{chunk-QWG3SILX.js → chunk-GHY6Z6KO.js} +5 -5
  78. package/dist/cli/chunks/{chunk-AJEXPFAB.js → chunk-GII6UM3F.js} +1 -1
  79. package/dist/cli/chunks/{chunk-SDRJJUPO.js → chunk-GU5HNCWI.js} +1 -1
  80. package/dist/cli/chunks/{chunk-ULCW6IVQ.js → chunk-H4GG2NLO.js} +2 -2
  81. package/dist/cli/chunks/{chunk-7TA5MUPW.js → chunk-H4H2YSFH.js} +1 -1
  82. package/dist/cli/chunks/{chunk-5A66EGEW.js → chunk-HD7YIFOI.js} +2 -2
  83. package/dist/cli/chunks/{chunk-CDA5Z74H.js → chunk-HOAJUIBQ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-4KUOYDY2.js → chunk-HQZGPJYG.js} +2 -2
  85. package/dist/cli/chunks/{chunk-G3AABG4Q.js → chunk-HZ5NXFXH.js} +2 -2
  86. package/dist/cli/chunks/{chunk-U6IXYQO4.js → chunk-I3C7JOXC.js} +2 -2
  87. package/dist/cli/chunks/{chunk-MAJXZYGK.js → chunk-IC3TQEOA.js} +1 -1
  88. package/dist/cli/chunks/{chunk-RYHG3I7J.js → chunk-IJUHSJ2U.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DZGPUGUG.js → chunk-J2ZIFFM6.js} +2 -2
  90. package/dist/cli/chunks/{chunk-NA3F6FEO.js → chunk-JGZ722G3.js} +2 -2
  91. package/dist/cli/chunks/{chunk-PX5OPXY6.js → chunk-JQGMW45H.js} +1 -1
  92. package/dist/cli/chunks/{chunk-WGTEZT7G.js → chunk-JRRXCODW.js} +2 -2
  93. package/dist/cli/chunks/{chunk-4Y6OEBJZ.js → chunk-K3TLLJMX.js} +1 -1
  94. package/dist/cli/chunks/{chunk-RCOLPF3B.js → chunk-K4CZA77U.js} +2 -2
  95. package/dist/cli/chunks/{chunk-YIDAXOUX.js → chunk-K65CGKLD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-5ADXFUMO.js → chunk-KADFXPPN.js} +2 -2
  97. package/dist/cli/chunks/{chunk-P5E26N2X.js → chunk-KB56CPU4.js} +2 -2
  98. package/dist/cli/chunks/{chunk-YLKIXEPP.js → chunk-KCW47QR5.js} +1 -1
  99. package/dist/cli/chunks/{chunk-SPC4RBLF.js → chunk-KDNJ4F3P.js} +2 -2
  100. package/dist/cli/chunks/{chunk-P7UFJ6DO.js → chunk-KDVZND5Q.js} +1 -1
  101. package/dist/cli/chunks/{chunk-TLRHAMX5.js → chunk-KUAKV3IW.js} +1 -1
  102. package/dist/cli/chunks/{chunk-ZROAMFX2.js → chunk-KV4T4MXK.js} +2 -2
  103. package/dist/cli/chunks/{chunk-UZED4YZ5.js → chunk-KWYH3FI4.js} +1 -1
  104. package/dist/cli/chunks/{chunk-33I2ZP6E.js → chunk-LFJALJOA.js} +2 -2
  105. package/dist/cli/chunks/{chunk-TXEUVUMO.js → chunk-LL7LDPXS.js} +1 -1
  106. package/dist/cli/chunks/{chunk-W5HQIYQU.js → chunk-LUZNKJE6.js} +3 -3
  107. package/dist/cli/chunks/{chunk-GKFV6CUD.js → chunk-LWR3FV3Y.js} +2 -2
  108. package/dist/cli/chunks/{chunk-TVA5GRIU.js → chunk-LZYQHVD4.js} +2 -2
  109. package/dist/cli/chunks/{chunk-2JYUA27M.js → chunk-M6AAGIG7.js} +1 -1
  110. package/dist/cli/chunks/{chunk-PT2NXS43.js → chunk-MAMQA43L.js} +1 -1
  111. package/dist/cli/chunks/chunk-MB46UBGY.js +3 -0
  112. package/dist/cli/chunks/{chunk-ZPVGX4DI.js → chunk-MFW5HSG4.js} +2 -2
  113. package/dist/cli/chunks/{chunk-47RMGDG4.js → chunk-MGZ5FJUW.js} +2 -2
  114. package/dist/cli/chunks/{chunk-G24SWTAX.js → chunk-MVVB7C2E.js} +410 -410
  115. package/dist/cli/chunks/{chunk-XZOYKB22.js → chunk-N4CYAKOX.js} +2 -2
  116. package/dist/cli/chunks/{chunk-QCPVUNN3.js → chunk-NT4DBXSX.js} +2 -2
  117. package/dist/cli/chunks/{chunk-3EWQN37E.js → chunk-NU3W5WFT.js} +2 -2
  118. package/dist/cli/chunks/{chunk-VZBC6DP7.js → chunk-NURIILUB.js} +1 -1
  119. package/dist/cli/chunks/{chunk-6E6HB4N4.js → chunk-NW7IBHJA.js} +4 -4
  120. package/dist/cli/chunks/{chunk-K3A3NWT3.js → chunk-NZ3GUMB2.js} +2 -2
  121. package/dist/cli/chunks/{chunk-GJKZ7UQO.js → chunk-NZD4DPSU.js} +2 -2
  122. package/dist/cli/chunks/{chunk-7QEUHNKO.js → chunk-O6FGXMHD.js} +1 -1
  123. package/dist/cli/chunks/{chunk-YVJEUX3I.js → chunk-OCAEXYFA.js} +2 -2
  124. package/dist/cli/chunks/{chunk-BOSMELJX.js → chunk-OFACHK5O.js} +2 -2
  125. package/dist/cli/chunks/{chunk-PGSJBXTD.js → chunk-P7A4NKTZ.js} +2 -2
  126. package/dist/cli/chunks/{chunk-HSA5IGGW.js → chunk-PB6J6HAA.js} +2 -2
  127. package/dist/cli/chunks/{chunk-TGMXUZZC.js → chunk-PHP5UBT4.js} +2 -2
  128. package/dist/cli/chunks/{chunk-NV74SICL.js → chunk-PIDQVU3L.js} +2 -2
  129. package/dist/cli/chunks/{chunk-TSOQ2QLT.js → chunk-PSFSPGUD.js} +2 -2
  130. package/dist/cli/chunks/{chunk-4A76VPU4.js → chunk-PT4FMJPQ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-U7ZHDGXG.js → chunk-Q3UDLV5Z.js} +1 -1
  132. package/dist/cli/chunks/{chunk-BYRCB5JT.js → chunk-QDEJ4CI2.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CA5UNWQF.js → chunk-QPNG5ZN2.js} +2 -2
  134. package/dist/cli/chunks/{chunk-W7H55PY4.js → chunk-R7SYRCRP.js} +1 -1
  135. package/dist/cli/chunks/{chunk-4LWMAAWK.js → chunk-RF7HWBHN.js} +2 -2
  136. package/dist/cli/chunks/{chunk-MMEALJ4D.js → chunk-RFNW2LGD.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UCSK2RMI.js → chunk-S5AZCIZS.js} +2 -2
  138. package/dist/cli/chunks/{chunk-JW5PDJ5O.js → chunk-SE4VNN4I.js} +3 -3
  139. package/dist/cli/chunks/{chunk-URSTP3WI.js → chunk-SG3NX7QE.js} +2 -2
  140. package/dist/cli/chunks/{chunk-N7O3PF6Y.js → chunk-SSU73QAX.js} +2 -2
  141. package/dist/cli/chunks/{chunk-7DNR4KKR.js → chunk-SVLQRAMF.js} +1 -1
  142. package/dist/cli/chunks/{chunk-BC4T6SCV.js → chunk-SYV2V3PL.js} +4 -4
  143. package/dist/cli/chunks/{chunk-4CB3QPZM.js → chunk-T3PGQFDI.js} +2 -2
  144. package/dist/cli/chunks/{chunk-OHVYINGM.js → chunk-TCBBNUBP.js} +3 -3
  145. package/dist/cli/chunks/{chunk-YWWMNTBF.js → chunk-TOQWL2ZF.js} +2 -2
  146. package/dist/cli/chunks/{chunk-SITL5YZV.js → chunk-TSQC2KKZ.js} +2 -2
  147. package/dist/cli/chunks/{chunk-YUA6ZKKY.js → chunk-TWDW32W2.js} +2 -2
  148. package/dist/cli/chunks/{chunk-SUX5XB2Z.js → chunk-TWJTK4CC.js} +2 -2
  149. package/dist/cli/chunks/{chunk-32UTHIY5.js → chunk-U2FUXDDJ.js} +3 -3
  150. package/dist/cli/chunks/{chunk-ENGL7FIJ.js → chunk-UDQSYWVF.js} +1 -1
  151. package/dist/cli/chunks/{chunk-7OEFBWAG.js → chunk-UOC3O6RP.js} +2 -2
  152. package/dist/cli/chunks/chunk-UT2VZ33P.js +2 -0
  153. package/dist/cli/chunks/{chunk-MYF5CNGV.js → chunk-UTRV7T2N.js} +2 -2
  154. package/dist/cli/chunks/{chunk-KJDI5CHX.js → chunk-UXZSUMEA.js} +2 -2
  155. package/dist/cli/chunks/{chunk-DAUEK66C.js → chunk-VRHRBAEM.js} +1 -1
  156. package/dist/cli/chunks/{chunk-FZJCBSN4.js → chunk-VRVMIPTM.js} +2 -2
  157. package/dist/cli/chunks/{chunk-26672ISV.js → chunk-VTDFVFST.js} +2 -2
  158. package/dist/cli/chunks/{chunk-WTAUF6O4.js → chunk-VTOBUZL6.js} +2 -2
  159. package/dist/cli/chunks/{chunk-4PU5GTZW.js → chunk-VU5TBX2V.js} +2 -2
  160. package/dist/cli/chunks/{chunk-C3YOVASQ.js → chunk-W26B7ERY.js} +1 -1
  161. package/dist/cli/chunks/{chunk-CPIBIR3X.js → chunk-W2QWSQVE.js} +2 -2
  162. package/dist/cli/chunks/{chunk-L3PV7VXK.js → chunk-W3INMZZ6.js} +1 -1
  163. package/dist/cli/chunks/{chunk-5Z23ZMXZ.js → chunk-W3PPFHI5.js} +54 -54
  164. package/dist/cli/chunks/{chunk-NVRYELCY.js → chunk-WKGTGOYS.js} +3 -3
  165. package/dist/cli/chunks/{chunk-35NW676P.js → chunk-WNQS4WTS.js} +2 -2
  166. package/dist/cli/chunks/{chunk-O3IM4WRZ.js → chunk-WO274FRI.js} +2 -2
  167. package/dist/cli/chunks/{chunk-35MIUSXQ.js → chunk-WOCGL4QP.js} +2 -2
  168. package/dist/cli/chunks/{chunk-EF6OERRR.js → chunk-WQL7WCIZ.js} +1 -1
  169. package/dist/cli/chunks/{chunk-INZARYUD.js → chunk-X2Z7F4EU.js} +2 -2
  170. package/dist/cli/chunks/{chunk-2E2QO44T.js → chunk-X7N2JF2X.js} +2 -2
  171. package/dist/cli/chunks/{chunk-2IVE5AR3.js → chunk-XEAEYC6Y.js} +1 -1
  172. package/dist/cli/chunks/{chunk-IPA7K556.js → chunk-XNBOGCF3.js} +2 -2
  173. package/dist/cli/chunks/{chunk-A2JCRXTK.js → chunk-XPRVF4YE.js} +2 -2
  174. package/dist/cli/chunks/{chunk-VUR5THML.js → chunk-YBQH2VOP.js} +2 -2
  175. package/dist/cli/chunks/{chunk-A5Y7DAVQ.js → chunk-YQFLQE53.js} +2 -2
  176. package/dist/cli/chunks/{chunk-JGIJPDGD.js → chunk-YSZ5OE3Z.js} +2 -2
  177. package/dist/cli/chunks/{chunk-JNXK47OL.js → chunk-YXRASAPI.js} +2 -2
  178. package/dist/cli/chunks/{chunk-MYUMJ2ZI.js → chunk-YZEXYO4W.js} +1 -1
  179. package/dist/cli/chunks/{chunk-NNBQZR73.js → chunk-YZWBNBTW.js} +2 -2
  180. package/dist/cli/chunks/{chunk-WDEXOLK2.js → chunk-ZAKQLAHT.js} +1 -1
  181. package/dist/cli/chunks/{ci-BZNWW3I3.js → ci-ENOASTYB.js} +2 -2
  182. package/dist/cli/chunks/{ci-config-LOHNXOKV.js → ci-config-B26OXHQM.js} +2 -2
  183. package/dist/cli/chunks/{ci-output-LCOQBSJL.js → ci-output-JTCLLNOQ.js} +2 -2
  184. package/dist/cli/chunks/{circuit-breaker-7LRXTLFE.js → circuit-breaker-23JMFNM5.js} +2 -2
  185. package/dist/cli/chunks/{claude-flow-setup-HBU4VWC3.js → claude-flow-setup-ON6L462G.js} +2 -2
  186. package/dist/cli/chunks/client-TV3V2YZ5.js +2 -0
  187. package/dist/cli/chunks/{cline-installer-CO6MLH6X.js → cline-installer-OWQ4D2FQ.js} +2 -2
  188. package/dist/cli/chunks/{code-SIXBS6JM.js → code-2ZRL7SEU.js} +19 -18
  189. package/dist/cli/chunks/{code-index-extractor-GWJKZ2IQ.js → code-index-extractor-JXSQVM67.js} +2 -2
  190. package/dist/cli/chunks/{codex-installer-6NINVWXJ.js → codex-installer-7LXZYBSQ.js} +2 -2
  191. package/dist/cli/chunks/{completions-7VIX3GML.js → completions-C2LR623C.js} +2 -2
  192. package/dist/cli/chunks/{complexity-analyzer-FBQR6ZP2.js → complexity-analyzer-TGQLHCYJ.js} +2 -2
  193. package/dist/cli/chunks/{continuedev-installer-VA7RIXW5.js → continuedev-installer-RUGD24D2.js} +2 -2
  194. package/dist/cli/chunks/{copilot-installer-4QEBC4MU.js → copilot-installer-ZLFVLEJP.js} +2 -2
  195. package/dist/cli/chunks/core-handlers-PZT4OLWR.js +2 -0
  196. package/dist/cli/chunks/{cost-tracker-GRYKHPWL.js → cost-tracker-RT4QL745.js} +2 -2
  197. package/dist/cli/chunks/{coverage-USPMNKOU.js → coverage-NV3C4IMM.js} +3 -3
  198. package/dist/cli/chunks/cross-domain-router-QOFCZ7G4.js +2 -0
  199. package/dist/cli/chunks/{cursor-installer-ZXIPSZVH.js → cursor-installer-LJKLNFF6.js} +2 -2
  200. package/dist/cli/chunks/{daemon-D7F3RGI5.js → daemon-BMDXCQT5.js} +3 -3
  201. package/dist/cli/chunks/{daemon-N2VRHPSJ.js → daemon-FBH3IRYN.js} +4 -4
  202. package/dist/cli/chunks/{dag-attention-scheduler-NL6BA7BY.js → dag-attention-scheduler-JGDED55I.js} +2 -2
  203. package/dist/cli/chunks/{detect-XC2HCIIT.js → detect-SZIHIVCJ.js} +2 -2
  204. package/dist/cli/chunks/{dist-node-A3Y26MEI.js → dist-node-FV3KWXQ6.js} +2 -2
  205. package/dist/cli/chunks/{domain-handler-WV6SFXRB.js → domain-handler-GI5JWQOV.js} +2 -2
  206. package/dist/cli/chunks/{domain-plugins-KJIF6Z2B.js → domain-plugins-BUWY36TL.js} +2 -2
  207. package/dist/cli/chunks/domain-transfer-GCY7W5DA.js +2 -0
  208. package/dist/cli/chunks/dream-TRFBGDSQ.js +2 -0
  209. package/dist/cli/chunks/{embed-and-insert-pattern-PA3Y4KGO.js → embed-and-insert-pattern-GPRR3ZGD.js} +2 -2
  210. package/dist/cli/chunks/{eval-YGEZNUVE.js → eval-XPB3IGAP.js} +2 -2
  211. package/dist/cli/chunks/{experience-capture-middleware-D4T7NW6B.js → experience-capture-middleware-2E554UB3.js} +3 -3
  212. package/dist/cli/chunks/{fast-paths-6JYK7RYQ.js → fast-paths-ZSMWZPUC.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-RBH2GDSR.js → feature-flags-GIWVDVVC.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-DKXMDVPE.js → feature-flags-N7EOGE5P.js} +2 -2
  215. package/dist/cli/chunks/file-discovery-WCKGMSPZ.js +2 -0
  216. package/dist/cli/chunks/fleet-HCHDOUCX.js +44 -0
  217. package/dist/cli/chunks/{gnn-wrapper-MV54UC4C.js → gnn-wrapper-CZNCNXXZ.js} +2 -2
  218. package/dist/cli/chunks/{heartbeat-handler-7DKMVQQH.js → heartbeat-handler-6YUIF2YQ.js} +4 -4
  219. package/dist/cli/chunks/heartbeat-scheduler-P44A2OX3.js +2 -0
  220. package/dist/cli/chunks/hnsw-adapter-ZJQIQJKC.js +2 -0
  221. package/dist/cli/chunks/hnsw-index-HMG2GH3Z.js +2 -0
  222. package/dist/cli/chunks/{hnsw-legacy-bridge-6IWREDQC.js → hnsw-legacy-bridge-J3M3IK24.js} +2 -2
  223. package/dist/cli/chunks/{hnswlib-node-5BIESSCK.js → hnswlib-node-ULGTGDZW.js} +2 -2
  224. package/dist/cli/chunks/{hooks-3EETRM62.js → hooks-C4BUGYUQ.js} +10 -10
  225. package/dist/cli/chunks/hybrid-backend-B7M74PZG.js +2 -0
  226. package/dist/cli/chunks/{hypergraph-engine-RSWCB2D3.js → hypergraph-engine-WINGVMPG.js} +2 -2
  227. package/dist/cli/chunks/{hypergraph-handler-552LXKL3.js → hypergraph-handler-GADMWKAU.js} +3 -3
  228. package/dist/cli/chunks/impact-analyzer-PZYOVKQO.js +2 -0
  229. package/dist/cli/chunks/{init-guard-OTDBJ5HD.js → init-guard-K2T4QWAO.js} +2 -2
  230. package/dist/cli/chunks/{init-handler-3FK3TKEA.js → init-handler-PCZTDZYI.js} +6 -6
  231. package/dist/cli/chunks/init-wizard-TZDJQK3U.js +2 -0
  232. package/dist/cli/chunks/kernel-Y6RRIOKW.js +2 -0
  233. package/dist/cli/chunks/{kilocode-installer-KZ2O4LF3.js → kilocode-installer-XENXNEIU.js} +2 -2
  234. package/dist/cli/chunks/{kiro-installer-MLCCXRF7.js → kiro-installer-3PG2TJ67.js} +2 -2
  235. package/dist/cli/chunks/knowledge-graph-BVD5Z66M.js +2 -0
  236. package/dist/cli/chunks/{learning-QUCMBD77.js → learning-6KDH7FK4.js} +3 -3
  237. package/dist/cli/chunks/{llm-router-PDEV3UP2.js → llm-router-RKVDEWU2.js} +4 -4
  238. package/dist/cli/chunks/llm-router-service-KHCAMSUU.js +2 -0
  239. package/dist/cli/chunks/{load-XFVVLO7E.js → load-ITHC564X.js} +2 -2
  240. package/dist/cli/chunks/load-test-RUF7DZA5.js +2 -0
  241. package/dist/cli/chunks/{mcp-74G3CL2S.js → mcp-TCL5UW3N.js} +2 -2
  242. package/dist/cli/chunks/{memory-XIFM6JNX.js → memory-BKDAY2N2.js} +5 -5
  243. package/dist/cli/chunks/memory-backend-7ZLFOVGG.js +2 -0
  244. package/dist/cli/chunks/{memory-handlers-ZCKURV6S.js → memory-handlers-WN4FXFOA.js} +2 -2
  245. package/dist/cli/chunks/{multi-model-executor-7L4W3O2Q.js → multi-model-executor-VHAT7ZPF.js} +2 -2
  246. package/dist/cli/chunks/{opencode-installer-BPG422LF.js → opencode-installer-E3VM3EEY.js} +2 -2
  247. package/dist/cli/chunks/{orchestrator-OEAFLAEV.js → orchestrator-BMQ6X762.js} +5 -5
  248. package/dist/cli/chunks/pattern-null-store-RY6CVYHP.js +2 -0
  249. package/dist/cli/chunks/{pattern-usage-recorder-LOPNCULT.js → pattern-usage-recorder-GOOR2BV5.js} +2 -2
  250. package/dist/cli/chunks/{pipeline-VWTYUZB7.js → pipeline-5NSFQQIX.js} +2 -2
  251. package/dist/cli/chunks/{platform-WFJJ3X2E.js → platform-SQM34J5G.js} +2 -2
  252. package/dist/cli/chunks/{plugin-744TPUSG.js → plugin-UQJZRMZG.js} +2 -2
  253. package/dist/cli/chunks/{prime-radiant-advanced-wasm-BD5BLNDR.js → prime-radiant-advanced-wasm-WMDJOL4S.js} +2 -2
  254. package/dist/cli/chunks/project-root-IO5KRNGL.js +2 -0
  255. package/dist/cli/chunks/protocol-executor-U2CUDWDE.js +2 -0
  256. package/dist/cli/chunks/{protocol-handler-JIBILI74.js → protocol-handler-OBDCVY6X.js} +2 -2
  257. package/dist/cli/chunks/{prove-MNOL5FYW.js → prove-XDC7I4XT.js} +2 -2
  258. package/dist/cli/chunks/qe-reasoning-bank-DQSSX2IP.js +2 -0
  259. package/dist/cli/chunks/{quality-JEGBDGGX.js → quality-L4GQ6WX4.js} +2 -2
  260. package/dist/cli/chunks/{quality-gate-SYJ6ROMI.js → quality-gate-MJG66LKN.js} +3 -3
  261. package/dist/cli/chunks/queen-coordinator-6FN4BZIX.js +2 -0
  262. package/dist/cli/chunks/{real-embeddings-ZWXS5ZFV.js → real-embeddings-HW4G2LWL.js} +2 -2
  263. package/dist/cli/chunks/{ref-validation-RRHUFW2N.js → ref-validation-FC7JOJ2C.js} +2 -2
  264. package/dist/cli/chunks/{roocode-installer-XFO6JSVN.js → roocode-installer-KWS4CEIC.js} +2 -2
  265. package/dist/cli/chunks/router-YUO3I7RU.js +2 -0
  266. package/dist/cli/chunks/routing-feedback-36SLQGJE.js +2 -0
  267. package/dist/cli/chunks/{routing-handler-L2K3JASE.js → routing-handler-QF4WVB2S.js} +2 -2
  268. package/dist/cli/chunks/{ruvector-commands-A6CINHGM.js → ruvector-commands-2MTCOUK6.js} +2 -2
  269. package/dist/cli/chunks/rvf-dual-writer-FRYZH3WZ.js +2 -0
  270. package/dist/cli/chunks/rvf-migration-adapter-XXNITL5I.js +2 -0
  271. package/dist/cli/chunks/{rvf-migration-coordinator-T4RY7L53.js → rvf-migration-coordinator-BREJCXWN.js} +2 -2
  272. package/dist/cli/chunks/rvf-native-adapter-D2WWKJIV.js +2 -0
  273. package/dist/cli/chunks/{rvf-store-integrity-IR33TGQS.js → rvf-store-integrity-KKC6HOJD.js} +2 -2
  274. package/dist/cli/chunks/safe-db-4RRIGRXD.js +2 -0
  275. package/dist/cli/chunks/schedule-25RTO4DQ.js +2 -0
  276. package/dist/cli/chunks/scheduler-BPIOJZ5P.js +2 -0
  277. package/dist/cli/chunks/{security-Z5GDE2IH.js → security-OSAE7VAP.js} +3 -3
  278. package/dist/cli/chunks/{shared-rvf-adapter-SIZMEHPM.js → shared-rvf-adapter-COUOS665.js} +2 -2
  279. package/dist/cli/chunks/{shared-rvf-dual-writer-HLM65RDS.js → shared-rvf-dual-writer-YXMPZKQE.js} +2 -2
  280. package/dist/cli/chunks/sqlite-persistence-EDF47DDX.js +2 -0
  281. package/dist/cli/chunks/{standalone-memory-SKSZG7P5.js → standalone-memory-E6JBMOIL.js} +2 -2
  282. package/dist/cli/chunks/{status-handler-766YOOMJ.js → status-handler-AFTCIYIX.js} +2 -2
  283. package/dist/cli/chunks/{structural-health-M45FNOLT.js → structural-health-2FROCEI4.js} +2 -2
  284. package/dist/cli/chunks/{sync-B2U366I3.js → sync-VAYTOWDC.js} +2 -2
  285. package/dist/cli/chunks/{sync-6CJ24B5T.js → sync-YIQYOFGW.js} +2 -2
  286. package/dist/cli/chunks/task-handler-KVQHDEX3.js +62 -0
  287. package/dist/cli/chunks/task-handlers-MVVECQA6.js +9 -0
  288. package/dist/cli/chunks/{test-TODH7KRF.js → test-5JSVTOMY.js} +4 -4
  289. package/dist/cli/chunks/test-runner-process-LEPF2OSS.js +2 -0
  290. package/dist/cli/chunks/{test-scheduling-VMVMVRHT.js → test-scheduling-HBOHVLI3.js} +3 -3
  291. package/dist/cli/chunks/{token-bootstrap-XQW7BMCK.js → token-bootstrap-5VEPTPFA.js} +2 -2
  292. package/dist/cli/chunks/{token-usage-JCZEIRKO.js → token-usage-TBJHDLY6.js} +2 -2
  293. package/dist/cli/chunks/{transformers-U2ML3OHE.js → transformers-VAWYMHMZ.js} +2 -2
  294. package/dist/cli/chunks/tree-sitter-wasm-parser-TSZTCMFV.js +2 -0
  295. package/dist/cli/chunks/{types-GGEPCHP6.js → types-R5SDZU2E.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-TLGSSLMI.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-MSUR7ZOO.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-VFFOTWK7.js +2 -0
  299. package/dist/cli/chunks/{upgrade-T5GRM7HS.js → upgrade-K5PIHXRB.js} +2 -2
  300. package/dist/cli/chunks/{validate-XMUJPLP3.js → validate-RPTS7RYJ.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-KJLF7JEH.js → validate-swarm-B2ZL556X.js} +2 -2
  302. package/dist/cli/chunks/visual-security-6Q44XNLB.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-LOHVZ7G5.js → web-tree-sitter-K4DUJC32.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-33FBTXJU.js → windsurf-installer-OK2AJN35.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-KDOMXDQX.js +2 -0
  306. package/dist/cli/chunks/witness-chain-N3OY2RMH.js +2 -0
  307. package/dist/cli/chunks/{witness-chain-repair-VWBO4NXE.js → witness-chain-repair-L6Y5RFXR.js} +2 -2
  308. package/dist/cli/chunks/{witness-chain-verifier-BHJ3ZAEK.js → witness-chain-verifier-N4CW7FZX.js} +2 -2
  309. package/dist/cli/chunks/{witness-key-manager-WNVPH2Z3.js → witness-key-manager-TDNPS3WD.js} +2 -2
  310. package/dist/cli/chunks/{workflow-6QR5MQTO.js → workflow-XRZA3YCY.js} +4 -4
  311. package/dist/cli/chunks/workflow-orchestrator-CVNNT2RJ.js +2 -0
  312. package/dist/cli/chunks/{wrappers-EHOL62TS.js → wrappers-5JIFWKN6.js} +2 -2
  313. package/dist/cli/commands/code.js +6 -0
  314. package/dist/cli/commands/fleet-run.d.ts +12 -0
  315. package/dist/cli/commands/fleet-run.js +175 -0
  316. package/dist/cli/commands/fleet.js +2 -117
  317. package/dist/cli/handlers/task-handler.d.ts +5 -0
  318. package/dist/cli/handlers/task-handler.js +20 -0
  319. package/dist/cli/utils/fleet-operation.d.ts +5 -2
  320. package/dist/cli/utils/fleet-operation.js +13 -2
  321. package/dist/cli/utils/fleet-result.d.ts +16 -2
  322. package/dist/cli/utils/fleet-result.js +26 -21
  323. package/dist/cli/utils/fleet-shard.d.ts +36 -0
  324. package/dist/cli/utils/fleet-shard.js +110 -0
  325. package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
  326. package/dist/coordination/handlers/handler-types.d.ts +2 -2
  327. package/dist/coordination/handlers/handler-utils.d.ts +6 -0
  328. package/dist/coordination/handlers/handler-utils.js +14 -4
  329. package/dist/coordination/handlers/misc-handlers.js +5 -2
  330. package/dist/coordination/handlers/quality-handlers.js +2 -2
  331. package/dist/coordination/handlers/security-handlers.js +12 -2
  332. package/dist/coordination/protocols/security-audit.js +11 -1
  333. package/dist/coordination/task-executor.js +7 -2
  334. package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
  335. package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
  336. package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
  337. package/dist/domains/code-intelligence/coordinator.js +24 -27
  338. package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
  339. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +43 -5
  340. package/dist/domains/code-intelligence/services/semantic-analyzer.js +134 -71
  341. package/dist/domains/coverage-analysis/collected-metrics.d.ts +10 -0
  342. package/dist/domains/coverage-analysis/collected-metrics.js +29 -0
  343. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +11 -3
  344. package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
  345. package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
  346. package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
  347. package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
  348. package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
  349. package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
  350. package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
  351. package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
  352. package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
  353. package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
  354. package/dist/domains/quality-assessment/coordinator.js +10 -4
  355. package/dist/domains/quality-assessment/interfaces.d.ts +2 -0
  356. package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
  357. package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
  358. package/dist/domains/security-compliance/index.d.ts +1 -1
  359. package/dist/domains/security-compliance/interfaces.d.ts +46 -5
  360. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
  361. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
  362. package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
  363. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
  364. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
  365. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
  366. package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
  367. package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
  368. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
  369. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
  370. package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
  371. package/dist/domains/security-compliance/services/scanners/index.js +1 -1
  372. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
  373. package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
  374. package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
  375. package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
  376. package/dist/domains/security-compliance/services/security-auditor.js +106 -65
  377. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  378. package/dist/domains/test-execution/coordinator.js +33 -27
  379. package/dist/domains/test-execution/interfaces.d.ts +5 -0
  380. package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
  381. package/dist/domains/test-execution/services/test-executor.js +16 -4
  382. package/dist/domains/visual-accessibility/coordinator.js +34 -9
  383. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
  384. package/dist/domains/visual-accessibility/plugin.js +5 -0
  385. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
  386. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
  387. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
  388. package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
  389. package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
  390. package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
  391. package/dist/mcp/bundle.js +480 -480
  392. package/dist/mcp/handlers/domain-handler-configs.d.ts +8 -0
  393. package/dist/mcp/handlers/domain-handler-configs.js +9 -2
  394. package/dist/mcp/handlers/handler-factory.js +3 -0
  395. package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
  396. package/dist/mcp/handlers/model-route-handlers.js +139 -0
  397. package/dist/mcp/handlers/orchestrate-routes.js +41 -3
  398. package/dist/mcp/handlers/task-handlers.d.ts +3 -251
  399. package/dist/mcp/handlers/task-handlers.js +6 -828
  400. package/dist/mcp/handlers/task-inference.d.ts +26 -0
  401. package/dist/mcp/handlers/task-inference.js +156 -0
  402. package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
  403. package/dist/mcp/handlers/task-learning-handlers.js +230 -0
  404. package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
  405. package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
  406. package/dist/mcp/protocol-server.js +12 -2
  407. package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
  408. package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
  409. package/dist/mcp/tools/coverage-analysis/index.js +8 -2
  410. package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
  411. package/dist/mcp/tools/visual-accessibility/index.js +29 -13
  412. package/dist/shared/events/domain-events.d.ts +2 -0
  413. package/dist/shared/metrics/code-metrics.js +21 -3
  414. package/dist/shared/parsers/typescript-parser.d.ts +6 -0
  415. package/dist/shared/parsers/typescript-parser.js +13 -1
  416. package/package.json +1 -1
  417. package/dist/cli/chunks/adapter-HL7MOCQN.js +0 -2
  418. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +0 -2
  419. package/dist/cli/chunks/base-WIM7G3HC.js +0 -2
  420. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +0 -2
  421. package/dist/cli/chunks/chunk-QSGEBCDB.js +0 -62
  422. package/dist/cli/chunks/chunk-UJNGGFGX.js +0 -2
  423. package/dist/cli/chunks/chunk-VXVTFKRA.js +0 -2
  424. package/dist/cli/chunks/chunk-XCNSGSKV.js +0 -3
  425. package/dist/cli/chunks/client-4PNYDFYS.js +0 -2
  426. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +0 -2
  427. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +0 -2
  428. package/dist/cli/chunks/domain-transfer-L3F6AES2.js +0 -2
  429. package/dist/cli/chunks/dream-QOB3JCOM.js +0 -2
  430. package/dist/cli/chunks/file-discovery-BN76S2PR.js +0 -2
  431. package/dist/cli/chunks/fleet-43YMXACN.js +0 -46
  432. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +0 -2
  433. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +0 -2
  434. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +0 -2
  435. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +0 -2
  436. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +0 -2
  437. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +0 -2
  438. package/dist/cli/chunks/kernel-2WZOQEZS.js +0 -2
  439. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +0 -2
  440. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +0 -2
  441. package/dist/cli/chunks/load-test-BEWEE44J.js +0 -2
  442. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +0 -2
  443. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +0 -2
  444. package/dist/cli/chunks/project-root-C7ELXZRK.js +0 -2
  445. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +0 -2
  446. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +0 -2
  447. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +0 -2
  448. package/dist/cli/chunks/router-4FTAVYLJ.js +0 -2
  449. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +0 -2
  450. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +0 -2
  451. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +0 -2
  452. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +0 -2
  453. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +0 -2
  454. package/dist/cli/chunks/schedule-CZKD6RIY.js +0 -2
  455. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +0 -2
  456. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +0 -2
  457. package/dist/cli/chunks/task-handler-P6IFLCKP.js +0 -62
  458. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +0 -9
  459. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +0 -2
  460. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +0 -2
  461. package/dist/cli/chunks/unified-memory-FL26RTV3.js +0 -2
  462. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +0 -2
  463. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +0 -2
  464. package/dist/cli/chunks/visual-security-IJVPO5FA.js +0 -2
  465. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +0 -2
  466. package/dist/cli/chunks/witness-chain-V2M32W5D.js +0 -2
  467. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +0 -2
@@ -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 fetch(testUrl, {
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.ok) {
23
- const text = await response.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, '&lt;')
@@ -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
- const response = await fetch(testUrl, {
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
- const text = await response.text();
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
  /**
@@ -7,19 +7,15 @@ import { ok, err } from '../../../../shared/types/index.js';
7
7
  import { toError } from '../../../../shared/error-utils.js';
8
8
  import { fetchWithResponseDeadline } from '../../../../shared/llm/providers/response-deadline.js';
9
9
  import { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, calculateSummary, storeScanResults, } from './dast-helpers.js';
10
+ import { assertScannableResponse, dastError, dastRequestFailure, isDastError, parseDastTarget, summarizeFailures, unansweredStatus, } from './dast-requests.js';
10
11
  // ============================================================================
11
12
  // DAST Scanner Service
12
13
  // ============================================================================
13
- /** Transport failures are execution errors, not absence of vulnerabilities. */
14
- function dastRequestFailure(error) {
15
- if (error instanceof Error && 'code' in error && ['DAST_AUTHENTICATION_FAILED', 'DAST_TARGET_UNAVAILABLE'].includes(String(error.code)))
14
+ /** A bug in the analysis code is not a request failure (#1135). */
15
+ function dastAnalysisFailure(error) {
16
+ if (isDastError(error))
16
17
  return error;
17
- const timeout = error instanceof Error && /timeout|abort/i.test(error.message);
18
- return Object.assign(new Error(timeout
19
- ? 'DAST target request timeout; dynamic analysis is incomplete'
20
- : 'DAST target request failed; dynamic analysis is incomplete'), {
21
- code: timeout ? 'DAST_REQUEST_TIMEOUT' : 'DAST_REQUEST_FAILED',
22
- });
18
+ return dastError(`DAST analysis failed (${toError(error).message}); dynamic analysis is incomplete`, 'DAST_ANALYSIS_FAILED', error);
23
19
  }
24
20
  /**
25
21
  * DAST Scanner - Dynamic Application Security Testing
@@ -72,16 +68,10 @@ export class DASTScanner {
72
68
  const result = await this.performDynamicScan(targetUrl, mergedOptions);
73
69
  const scanDurationMs = Date.now() - startTime;
74
70
  const summary = calculateSummary(result.vulnerabilities, 1, scanDurationMs);
75
- // Store results
76
- await storeScanResults(this.memory, scanId, 'dast', result.vulnerabilities, summary);
71
+ const dastResult = this.toResult(scanId, targetUrl, result, summary);
72
+ await storeScanResults(this.memory, scanId, 'dast', result.vulnerabilities, summary, { status: dastResult.status, failedRequests: dastResult.failedRequests });
77
73
  this.activeScans.set(scanId, 'completed');
78
- return ok({
79
- scanId,
80
- targetUrl,
81
- vulnerabilities: result.vulnerabilities,
82
- summary,
83
- crawledUrls: result.crawledUrls,
84
- });
74
+ return ok(dastResult);
85
75
  }
86
76
  catch (error) {
87
77
  this.activeScans.set(scanId, 'failed');
@@ -112,15 +102,10 @@ export class DASTScanner {
112
102
  const scanDurationMs = Date.now() - startTime;
113
103
  const summary = calculateSummary(result.vulnerabilities, 1, scanDurationMs);
114
104
  // Store results (without credentials)
115
- await storeScanResults(this.memory, scanId, 'dast-auth', result.vulnerabilities, summary);
105
+ const dastResult = this.toResult(scanId, targetUrl, result, summary);
106
+ await storeScanResults(this.memory, scanId, 'dast-auth', result.vulnerabilities, summary, { status: dastResult.status, failedRequests: dastResult.failedRequests });
116
107
  this.activeScans.set(scanId, 'completed');
117
- return ok({
118
- scanId,
119
- targetUrl,
120
- vulnerabilities: result.vulnerabilities,
121
- summary,
122
- crawledUrls: result.crawledUrls,
123
- });
108
+ return ok(dastResult);
124
109
  }
125
110
  catch (error) {
126
111
  this.activeScans.set(scanId, 'failed');
@@ -133,6 +118,23 @@ export class DASTScanner {
133
118
  async getScanStatus(scanId) {
134
119
  return this.activeScans.get(scanId) ?? 'pending';
135
120
  }
121
+ /**
122
+ * #1135: probes the target did not answer leave the scan incomplete. The
123
+ * findings already collected are real and kept; the failed URLs are listed.
124
+ */
125
+ toResult(scanId, targetUrl, outcome, summary) {
126
+ const { failedRequests } = outcome;
127
+ return {
128
+ scanId,
129
+ targetUrl,
130
+ vulnerabilities: outcome.vulnerabilities,
131
+ summary,
132
+ crawledUrls: outcome.crawledUrls,
133
+ status: failedRequests.length > 0 ? 'incomplete' : 'complete',
134
+ failedRequests,
135
+ ...(failedRequests.length > 0 ? { error: summarizeFailures(failedRequests) } : {}),
136
+ };
137
+ }
136
138
  // ==========================================================================
137
139
  // Private Methods - Dynamic Scanning
138
140
  // ==========================================================================
@@ -141,156 +143,124 @@ export class DASTScanner {
141
143
  */
142
144
  async performDynamicScan(targetUrl, options) {
143
145
  const vulnerabilities = [];
144
- let crawledUrls = 0;
146
+ const failedRequests = [];
147
+ const parsedUrl = parseDastTarget(targetUrl);
148
+ const timeout = options.timeout ?? this.config.timeout;
149
+ const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
150
+ const activeScanning = options.activeScanning ?? this.config.dastActiveScanning;
151
+ // Perform main page scan. #980: the deadline must cover the body too —
152
+ // the target is untrusted and may send headers and then stall the body,
153
+ // so it stays armed until `response.text()` below has finished.
154
+ const deadlineMs = Math.min(timeout, 30000);
155
+ let response;
156
+ let responseText = '';
145
157
  try {
146
- // Validate and parse URL
147
- let parsedUrl;
148
- try {
149
- parsedUrl = new URL(targetUrl);
158
+ response = await fetchWithResponseDeadline(targetUrl, {
159
+ method: 'GET',
160
+ headers: {
161
+ 'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
162
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
163
+ },
164
+ redirect: 'follow',
165
+ }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
166
+ if (unansweredStatus(response.status)) {
167
+ await response.body?.cancel().catch(() => undefined);
168
+ assertScannableResponse(response.status);
150
169
  }
151
- catch {
152
- vulnerabilities.push(this.createInvalidUrlVuln(targetUrl));
153
- return { vulnerabilities, crawledUrls: 0 };
170
+ if (activeScanning) {
171
+ // Read the page body first, inside the request deadline (#980), so the
172
+ // slower probes below cannot use up the deadline of a healthy target.
173
+ responseText = await response.text();
154
174
  }
155
- const timeout = options.timeout ?? this.config.timeout;
156
- const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
157
- // Perform main page scan. #980: the deadline must cover the body too —
158
- // the target is untrusted and may send headers and then stall the body,
159
- // so it stays armed until `response.clone().text()` below has finished.
160
- const deadlineMs = Math.min(timeout, 30000);
161
- try {
162
- const response = await fetchWithResponseDeadline(targetUrl, {
163
- method: 'GET',
164
- headers: {
165
- 'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
166
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
167
- },
168
- redirect: 'follow',
169
- }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
170
- if (response.status === 401 || response.status === 403 || response.status >= 500) {
171
- await response.body?.cancel().catch(() => undefined);
172
- throw Object.assign(new Error(`DAST ${response.status < 500 ? 'authentication rejected' : 'target unavailable'} (HTTP ${response.status}); dynamic analysis is incomplete`), {
173
- code: response.status < 500 ? 'DAST_AUTHENTICATION_FAILED' : 'DAST_TARGET_UNAVAILABLE',
174
- });
175
- }
176
- crawledUrls++;
177
- // Security header analysis
178
- analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities);
179
- // Check for insecure protocol
180
- if (parsedUrl.protocol === 'http:') {
181
- vulnerabilities.push(this.createInsecureProtocolVuln(targetUrl));
182
- }
183
- // Check for cookie security
184
- analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities);
185
- // Check for server version disclosure
186
- analyzeServerHeaders(response.headers, targetUrl, vulnerabilities);
187
- // Active scanning features
188
- if (options.activeScanning ?? this.config.dastActiveScanning) {
189
- // Read the page body first, inside the request deadline (#980), so the
190
- // slower probes below cannot use up the deadline of a healthy target.
191
- const responseText = await response.text();
192
- crawledUrls = await scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulnerabilities);
193
- await analyzeCORS(targetUrl, vulnerabilities);
194
- // Enhanced DAST: Link crawling, injection testing, form analysis
195
- crawledUrls = await extractAndCrawlLinks(responseText, parsedUrl, crawledUrls, maxDepth, vulnerabilities);
196
- if (parsedUrl.search) {
197
- await this.testInjectionVulnerabilities(targetUrl, parsedUrl, vulnerabilities);
198
- }
199
- analyzeFormsForSecurityIssues(responseText, targetUrl, vulnerabilities);
200
- }
201
- else {
202
- // Passive scan: headers only. Release the connection instead of
203
- // leaving an unread body to the deadline timer.
204
- await response.body?.cancel().catch(() => undefined);
205
- }
175
+ else {
176
+ // Passive scan: headers only. Release the connection instead of
177
+ // leaving an unread body to the deadline timer.
178
+ await response.body?.cancel().catch(() => undefined);
179
+ }
180
+ }
181
+ catch (fetchError) {
182
+ throw dastRequestFailure(fetchError);
183
+ }
184
+ let crawledUrls = 1;
185
+ try {
186
+ analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities);
187
+ if (parsedUrl.protocol === 'http:') {
188
+ vulnerabilities.push(this.createInsecureProtocolVuln(targetUrl));
206
189
  }
207
- catch (fetchError) {
208
- throw dastRequestFailure(fetchError);
190
+ analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities);
191
+ analyzeServerHeaders(response.headers, targetUrl, vulnerabilities);
192
+ if (activeScanning) {
193
+ // #1135: a probe the target does not answer is recorded and the scan
194
+ // continues; the result is then incomplete, not discarded.
195
+ crawledUrls = await scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulnerabilities, failedRequests);
196
+ await analyzeCORS(targetUrl, vulnerabilities, failedRequests);
197
+ crawledUrls = await extractAndCrawlLinks(responseText, parsedUrl, crawledUrls, maxDepth, vulnerabilities, failedRequests);
198
+ if (parsedUrl.search) {
199
+ await this.testInjectionVulnerabilities(targetUrl, parsedUrl, vulnerabilities, failedRequests);
200
+ }
201
+ analyzeFormsForSecurityIssues(responseText, targetUrl, vulnerabilities);
209
202
  }
210
203
  }
211
204
  catch (error) {
212
- throw toError(error);
205
+ throw dastAnalysisFailure(error);
213
206
  }
214
- return { vulnerabilities, crawledUrls };
207
+ return { vulnerabilities, crawledUrls, failedRequests };
215
208
  }
216
209
  /**
217
210
  * Perform authenticated dynamic scanning
218
211
  */
219
212
  async performAuthenticatedScan(targetUrl, credentials, options) {
220
213
  const vulnerabilities = [];
221
- let crawledUrls = 0;
214
+ const failedRequests = [];
215
+ const authHeaders = buildAuthHeaders(credentials);
216
+ const parsedUrl = parseDastTarget(targetUrl);
217
+ const timeout = options.timeout ?? this.config.timeout;
218
+ const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
219
+ // #980 review N8: same deadline treatment as the unauthenticated scan.
220
+ // This path reads headers only; the unread body is cancelled below so
221
+ // a target that stalls it cannot hold the connection open.
222
+ const deadlineMs = Math.min(timeout, 30000);
223
+ let response;
222
224
  try {
223
- const authHeaders = buildAuthHeaders(credentials);
224
- let parsedUrl;
225
- try {
226
- parsedUrl = new URL(targetUrl);
227
- }
228
- catch {
229
- vulnerabilities.push(this.createInvalidUrlVuln(targetUrl));
230
- return { vulnerabilities, crawledUrls: 0 };
231
- }
232
- const timeout = options.timeout ?? this.config.timeout;
233
- const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
234
- // #980 review N8: same deadline treatment as the unauthenticated scan.
235
- // This path reads headers only; the unread body is cancelled below so
236
- // a target that stalls it cannot hold the connection open.
237
- const deadlineMs = Math.min(timeout, 30000);
238
- try {
239
- const response = await fetchWithResponseDeadline(targetUrl, {
240
- method: 'GET',
241
- headers: {
242
- 'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
243
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
244
- ...authHeaders,
245
- },
246
- redirect: 'follow',
247
- }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
248
- await response.body?.cancel().catch(() => undefined);
249
- if (response.status === 401 || response.status === 403 || response.status >= 500) {
250
- await response.body?.cancel().catch(() => undefined);
251
- throw Object.assign(new Error(`DAST ${response.status < 500 ? 'authentication rejected' : 'target unavailable'} (HTTP ${response.status}); dynamic analysis is incomplete`), {
252
- code: response.status < 500 ? 'DAST_AUTHENTICATION_FAILED' : 'DAST_TARGET_UNAVAILABLE',
253
- });
254
- }
255
- crawledUrls++;
256
- // Standard security header checks
257
- analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities, true);
258
- // Check for session token in URL
259
- if (parsedUrl.search.includes('token=') || parsedUrl.search.includes('session=') || parsedUrl.search.includes('auth=')) {
260
- vulnerabilities.push(this.createTokenInUrlVuln(targetUrl, parsedUrl.search));
261
- }
262
- // Active scanning for authenticated endpoints
263
- if (options.activeScanning ?? this.config.dastActiveScanning) {
264
- crawledUrls = await testAuthorizationBypass(parsedUrl, authHeaders, crawledUrls, maxDepth, vulnerabilities);
265
- crawledUrls = await testIDOR(parsedUrl, authHeaders, crawledUrls, maxDepth, vulnerabilities);
266
- }
267
- // Enhanced cookie security for authenticated sessions
268
- analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities, true);
225
+ response = await fetchWithResponseDeadline(targetUrl, {
226
+ method: 'GET',
227
+ headers: {
228
+ 'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
229
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
230
+ ...authHeaders,
231
+ },
232
+ redirect: 'follow',
233
+ }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
234
+ await response.body?.cancel().catch(() => undefined);
235
+ assertScannableResponse(response.status);
236
+ }
237
+ catch (fetchError) {
238
+ throw dastRequestFailure(fetchError);
239
+ }
240
+ let crawledUrls = 1;
241
+ try {
242
+ // Standard security header checks
243
+ analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities, true);
244
+ // Check for session token in URL
245
+ if (parsedUrl.search.includes('token=') || parsedUrl.search.includes('session=') || parsedUrl.search.includes('auth=')) {
246
+ vulnerabilities.push(this.createTokenInUrlVuln(targetUrl, parsedUrl.search));
269
247
  }
270
- catch (fetchError) {
271
- throw dastRequestFailure(fetchError);
248
+ // Active scanning for authenticated endpoints
249
+ if (options.activeScanning ?? this.config.dastActiveScanning) {
250
+ crawledUrls = await testAuthorizationBypass(parsedUrl, authHeaders, crawledUrls, maxDepth, vulnerabilities, failedRequests);
251
+ crawledUrls = await testIDOR(parsedUrl, authHeaders, crawledUrls, maxDepth, vulnerabilities, failedRequests);
272
252
  }
253
+ // Enhanced cookie security for authenticated sessions
254
+ analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities, true);
273
255
  }
274
256
  catch (error) {
275
- throw toError(error);
257
+ throw dastAnalysisFailure(error);
276
258
  }
277
- return { vulnerabilities, crawledUrls };
259
+ return { vulnerabilities, crawledUrls, failedRequests };
278
260
  }
279
261
  // ==========================================================================
280
262
  // Private Methods - Vulnerability Factories
281
263
  // ==========================================================================
282
- createInvalidUrlVuln(targetUrl) {
283
- return {
284
- id: uuidv4(),
285
- title: 'Invalid Target URL',
286
- description: 'The provided target URL is not valid',
287
- severity: 'informational',
288
- category: 'security-misconfiguration',
289
- location: { file: targetUrl },
290
- remediation: { description: 'Provide a valid URL', estimatedEffort: 'trivial', automatable: false },
291
- references: [],
292
- };
293
- }
294
264
  createInsecureProtocolVuln(targetUrl) {
295
265
  return {
296
266
  id: uuidv4(),
@@ -321,7 +291,7 @@ export class DASTScanner {
321
291
  /**
322
292
  * Test URL parameters for injection vulnerabilities
323
293
  */
324
- async testInjectionVulnerabilities(targetUrl, parsedUrl, vulnerabilities) {
294
+ async testInjectionVulnerabilities(targetUrl, parsedUrl, vulnerabilities, failures) {
325
295
  const params = new URLSearchParams(parsedUrl.search);
326
296
  const paramNames = Array.from(params.keys());
327
297
  const xssPayloads = [
@@ -335,8 +305,8 @@ export class DASTScanner {
335
305
  { payload: "1' AND '1'='1", name: 'SQL AND Injection' },
336
306
  ];
337
307
  for (const paramName of paramNames.slice(0, 3)) {
338
- await testXSS(targetUrl, parsedUrl, paramName, xssPayloads, vulnerabilities);
339
- await testSQLi(targetUrl, parsedUrl, paramName, sqliPayloads, vulnerabilities);
308
+ await testXSS(targetUrl, parsedUrl, paramName, xssPayloads, vulnerabilities, failures);
309
+ await testSQLi(targetUrl, parsedUrl, paramName, sqliPayloads, vulnerabilities, failures);
340
310
  }
341
311
  }
342
312
  }
@@ -10,5 +10,5 @@ export type { SecurityScannerConfig, SecurityScannerDependencies, ISecurityScann
10
10
  export { DEFAULT_CONFIG } from './scanner-types.js';
11
11
  export type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory, VulnerabilityLocation, RemediationAdvice, ScanSummary, SecurityCoverage, ScanStatus, SASTResult, DASTResult, DASTOptions, AuthCredentials, RuleSet, FalsePositiveCheck, } from './scanner-types.js';
12
12
  export { ALL_SECURITY_PATTERNS, SQL_INJECTION_PATTERNS, XSS_PATTERNS, SECRET_PATTERNS, PATH_TRAVERSAL_PATTERNS, COMMAND_INJECTION_PATTERNS, MISCONFIGURATION_PATTERNS, DESERIALIZATION_PATTERNS, AUTH_PATTERNS, BUILT_IN_RULE_SETS, } from './security-patterns.js';
13
- export { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, handleFetchError, calculateSummary, storeScanResults, } from './dast-helpers.js';
13
+ export { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, calculateSummary, storeScanResults, } from './dast-helpers.js';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -12,5 +12,5 @@ export { DEFAULT_CONFIG } from './scanner-types.js';
12
12
  // Security patterns
13
13
  export { ALL_SECURITY_PATTERNS, SQL_INJECTION_PATTERNS, XSS_PATTERNS, SECRET_PATTERNS, PATH_TRAVERSAL_PATTERNS, COMMAND_INJECTION_PATTERNS, MISCONFIGURATION_PATTERNS, DESERIALIZATION_PATTERNS, AUTH_PATTERNS, BUILT_IN_RULE_SETS, } from './security-patterns.js';
14
14
  // DAST helper functions (for advanced/custom usage)
15
- export { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, handleFetchError, calculateSummary, storeScanResults, } from './dast-helpers.js';
15
+ export { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, calculateSummary, storeScanResults, } from './dast-helpers.js';
16
16
  //# sourceMappingURL=index.js.map