agentic-qe 3.15.5 → 3.15.7

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 (584) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +262 -0
  6. package/README.md +2 -0
  7. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  8. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  9. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  10. package/assets/skills/skills-manifest.json +1 -1
  11. package/dist/cli/bundle.js +8 -6
  12. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
  18. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
  19. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
  20. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
  24. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  26. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
  28. package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
  29. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
  30. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
  32. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
  34. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
  35. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
  38. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
  39. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
  40. package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
  41. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
  42. package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
  43. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
  45. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
  48. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
  49. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
  51. package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
  52. package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
  53. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
  56. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
  57. package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
  58. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
  60. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
  61. package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
  62. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
  64. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
  65. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
  67. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  68. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
  70. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
  71. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
  73. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
  74. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
  75. package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
  76. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
  77. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
  78. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
  79. package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
  80. package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
  81. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
  82. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
  83. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
  84. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
  85. package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
  86. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
  87. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
  88. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
  89. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
  90. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
  93. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
  94. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
  97. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
  100. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
  101. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
  102. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
  105. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
  106. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
  107. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
  109. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
  110. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
  112. package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
  113. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
  115. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
  116. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
  117. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
  119. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
  120. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
  122. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
  124. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
  125. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
  126. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
  127. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
  128. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  129. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
  131. package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
  132. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
  133. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
  134. package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
  135. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
  137. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
  138. package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
  139. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
  140. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
  141. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
  142. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
  144. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
  146. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
  147. package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
  148. package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
  149. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
  150. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
  151. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
  153. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
  155. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
  158. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
  159. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  160. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
  162. package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
  163. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
  165. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
  169. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
  170. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
  171. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
  172. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
  173. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
  174. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
  175. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
  176. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
  177. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
  178. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
  179. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
  180. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
  181. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  182. package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
  183. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  187. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
  189. package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
  192. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
  198. package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
  199. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
  201. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  202. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
  203. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  204. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
  209. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  210. package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
  211. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
  212. package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
  213. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  217. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
  225. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
  226. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  230. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  231. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  232. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  233. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  237. package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
  238. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  240. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
  241. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  242. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
  243. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  245. package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
  246. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  248. package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
  249. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
  252. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
  253. package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  255. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
  258. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  260. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
  266. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  272. package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
  273. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  275. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  276. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  277. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  278. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  279. package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
  285. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
  286. package/dist/cli/chunks/sync-S744AEJC.js +2 -0
  287. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
  289. package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
  290. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
  291. package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
  292. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
  293. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
  294. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  295. package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  299. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
  300. package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
  302. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
  307. package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  309. package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
  310. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
  311. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  312. package/dist/cli/chunks/wrappers-J6KGTUSJ.js +2 -0
  313. package/dist/cli/commands/ci.js +47 -25
  314. package/dist/cli/commands/coverage.d.ts +1 -28
  315. package/dist/cli/commands/coverage.js +63 -134
  316. package/dist/cli/commands/daemon.js +7 -1
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  318. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  319. package/dist/cli/commands/learning.js +50 -9
  320. package/dist/cli/commands/security.d.ts +16 -0
  321. package/dist/cli/commands/security.js +76 -9
  322. package/dist/cli/commands/test.js +6 -7
  323. package/dist/cli/commands/workflow.js +9 -5
  324. package/dist/cli/handlers/init-guard.d.ts +33 -0
  325. package/dist/cli/handlers/init-guard.js +66 -0
  326. package/dist/cli/handlers/init-handler.d.ts +3 -0
  327. package/dist/cli/handlers/init-handler.js +64 -54
  328. package/dist/cli/handlers/interfaces.js +5 -1
  329. package/dist/cli/index.js +11 -0
  330. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  331. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  332. package/dist/cli/utils/ci-output.d.ts +13 -1
  333. package/dist/cli/utils/ci-output.js +21 -2
  334. package/dist/cli/utils/coverage-data.d.ts +3 -0
  335. package/dist/cli/utils/coverage-data.js +14 -39
  336. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  337. package/dist/cli/utils/coverage-verdict.js +193 -0
  338. package/dist/cli/utils/file-discovery.js +5 -0
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +34 -6
  343. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  344. package/dist/coordination/handlers/coverage-runner.js +105 -10
  345. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  346. package/dist/coordination/handlers/coverage-target.js +4 -1
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  349. package/dist/coordination/handlers/handler-utils.js +46 -22
  350. package/dist/coordination/handlers/quality-handlers.js +108 -18
  351. package/dist/coordination/handlers/security-handlers.js +22 -6
  352. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  353. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  354. package/dist/coordination/protocols/defect-investigation.js +12 -3
  355. package/dist/coordination/protocols/quality-gate.js +10 -6
  356. package/dist/coordination/protocols/security-audit.js +11 -0
  357. package/dist/coordination/result-saver.d.ts +31 -0
  358. package/dist/coordination/result-saver.js +146 -46
  359. package/dist/coordination/task-executor.d.ts +7 -0
  360. package/dist/coordination/task-executor.js +32 -3
  361. package/dist/domains/code-intelligence/plugin.js +4 -0
  362. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  363. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  364. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  366. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  367. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  368. package/dist/domains/coverage-analysis/collected-metrics.d.ts +35 -0
  369. package/dist/domains/coverage-analysis/collected-metrics.js +42 -0
  370. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  371. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  372. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  373. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  374. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  375. package/dist/domains/defect-intelligence/plugin.js +4 -0
  376. package/dist/domains/defect-intelligence/services/defect-predictor.js +13 -8
  377. package/dist/domains/learning-optimization/coordinator.js +4 -0
  378. package/dist/domains/learning-optimization/plugin.js +4 -0
  379. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  380. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  381. package/dist/domains/quality-assessment/coordinator.js +10 -6
  382. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  383. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  384. package/dist/domains/quality-assessment/index.d.ts +1 -1
  385. package/dist/domains/quality-assessment/interfaces.d.ts +50 -0
  386. package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
  387. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  388. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  389. package/dist/domains/quality-assessment/services/quality-analyzer.js +197 -112
  390. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  391. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  392. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  393. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  394. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  395. package/dist/domains/security-compliance/plugin.js +19 -0
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  397. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  398. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  399. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  400. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  401. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  402. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  403. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  404. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  405. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  406. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  407. package/dist/domains/test-execution/plugin.js +4 -0
  408. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  409. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  410. package/dist/domains/test-execution/services/test-executor.js +239 -109
  411. package/dist/domains/test-generation/coordinator.js +4 -0
  412. package/dist/domains/test-generation/plugin.js +4 -0
  413. package/dist/feedback/coverage-learner.js +4 -1
  414. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  415. package/dist/feedback/coverage-session-provenance.js +39 -0
  416. package/dist/init/orchestrator.js +2 -0
  417. package/dist/init/phases/09-assets.d.ts +4 -0
  418. package/dist/init/phases/09-assets.js +35 -0
  419. package/dist/init/retired-assets.d.ts +86 -0
  420. package/dist/init/retired-assets.js +230 -0
  421. package/dist/init/skills-installer.d.ts +2 -0
  422. package/dist/init/skills-installer.js +4 -0
  423. package/dist/init/types.d.ts +3 -0
  424. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  425. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  426. package/dist/integrations/ruvector/server-client.js +4 -12
  427. package/dist/kernel/project-root.d.ts +17 -0
  428. package/dist/kernel/project-root.js +54 -2
  429. package/dist/kernel/shared-dirs.d.ts +66 -0
  430. package/dist/kernel/shared-dirs.js +180 -0
  431. package/dist/learning/daily-log.js +2 -1
  432. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  433. package/dist/learning/experience-capture-middleware.js +35 -0
  434. package/dist/learning/learnable-result.d.ts +16 -0
  435. package/dist/learning/learnable-result.js +24 -0
  436. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  437. package/dist/learning/pattern-mutation-error.js +12 -0
  438. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  439. package/dist/learning/qe-reasoning-bank.js +50 -1
  440. package/dist/learning/rvf-reconcile.d.ts +39 -0
  441. package/dist/learning/rvf-reconcile.js +40 -0
  442. package/dist/learning/sqlite-persistence.d.ts +14 -0
  443. package/dist/learning/sqlite-persistence.js +36 -0
  444. package/dist/mcp/bundle.js +908 -896
  445. package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
  446. package/dist/mcp/handlers/domain-handler-configs.js +42 -4
  447. package/dist/mcp/handlers/handler-factory.js +40 -14
  448. package/dist/mcp/protocol-server.js +29 -3
  449. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  450. package/dist/mcp/tool-cache-scope.js +71 -0
  451. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  452. package/dist/mcp/types.d.ts +10 -0
  453. package/dist/optimization/session-cache.d.ts +19 -1
  454. package/dist/optimization/session-cache.js +36 -2
  455. package/dist/plugins/cache.js +2 -1
  456. package/dist/plugins/sources/github.js +2 -1
  457. package/dist/plugins/sources/npm.js +2 -1
  458. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  459. package/dist/shared/aqe-managed-dirs.js +56 -0
  460. package/dist/shared/events/domain-events.d.ts +18 -3
  461. package/dist/shared/events/domain-events.js +4 -0
  462. package/dist/shared/http/http-client.d.ts +6 -0
  463. package/dist/shared/http/http-client.js +13 -15
  464. package/dist/shared/io/file-reader.d.ts +26 -0
  465. package/dist/shared/io/file-reader.js +111 -17
  466. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  467. package/dist/shared/llm/providers/response-deadline.js +17 -5
  468. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  469. package/dist/shared/metrics/code-metrics.js +93 -6
  470. package/dist/shared/metrics/index.d.ts +1 -1
  471. package/dist/shared/security/index.d.ts +2 -2
  472. package/dist/shared/security/index.js +1 -1
  473. package/dist/shared/security/osv-client.d.ts +79 -132
  474. package/dist/shared/security/osv-client.js +344 -167
  475. package/dist/shared/security/osv-lookup.d.ts +124 -0
  476. package/dist/shared/security/osv-lookup.js +246 -0
  477. package/dist/shared/security/osv-types.d.ts +119 -0
  478. package/dist/shared/security/osv-types.js +6 -0
  479. package/dist/workers/interfaces.d.ts +15 -2
  480. package/dist/workers/namespaced-keys.d.ts +16 -0
  481. package/dist/workers/namespaced-keys.js +24 -0
  482. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  483. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  484. package/dist/workers/quality-daemon/index.js +6 -5
  485. package/dist/workers/quality-daemon/notification-service.js +3 -3
  486. package/dist/workers/quality-daemon/persistent-memory.d.ts +3 -3
  487. package/dist/workers/quality-daemon/persistent-memory.js +4 -4
  488. package/dist/workers/worker-manager.js +10 -3
  489. package/dist/workers/workers/coverage-tracker.js +69 -33
  490. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  491. package/dist/workers/workers/defect-predictor.js +223 -216
  492. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  493. package/dist/workers/workers/performance-baseline.js +187 -230
  494. package/dist/workers/workers/quality-gate.d.ts +11 -9
  495. package/dist/workers/workers/quality-gate.js +125 -267
  496. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  497. package/dist/workers/workers/regression-monitor.js +276 -117
  498. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  499. package/dist/workers/workers/security-scan-records.js +128 -0
  500. package/dist/workers/workers/security-scan.d.ts +25 -7
  501. package/dist/workers/workers/security-scan.js +187 -164
  502. package/package.json +2 -2
  503. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  504. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  505. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  506. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  507. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  508. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  509. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  510. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  511. package/dist/cli/chunks/chunk-BO4PKNYP.js +0 -102
  512. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  513. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  514. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  515. package/dist/cli/chunks/chunk-GTSOFCMQ.js +0 -2
  516. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  517. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  518. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  519. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  520. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  521. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  522. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  523. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  524. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  525. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  526. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  527. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  528. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  529. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  530. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  531. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  532. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  533. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  534. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  535. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  536. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  537. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  538. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  539. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  540. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  541. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  542. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  543. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  544. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  545. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  546. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  547. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  548. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  549. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  550. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  551. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  552. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  553. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  554. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  555. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  556. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  557. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  558. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  559. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  560. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  561. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  562. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  563. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  564. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  565. package/dist/cli/chunks/security-7723AZZ4.js +0 -13
  566. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  567. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  568. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  569. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  570. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  571. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  572. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  573. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  574. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  575. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  576. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  577. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  578. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  579. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  580. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  581. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  582. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  583. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  584. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Dependency advisory (OSV) engine for the scan-security task (#1049).
3
+ *
4
+ * Runs the security-compliance DependencyScanner on the project's package.json
5
+ * and turns its outcome into an execution receipt. A failed or partial OSV
6
+ * lookup is a failed/partial engine with the unchecked packages listed, never
7
+ * a completed engine with zero findings.
8
+ */
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ export const DEPENDENCY_ADVISORY_ENGINE_ID = 'osv-dependency-advisories';
12
+ /** The package.json for a scan target: the target directory's, else the project root's. */
13
+ export async function findPackageJson(targetPath, env = process.env) {
14
+ let dir = targetPath;
15
+ try {
16
+ if (!(await fs.stat(targetPath)).isDirectory())
17
+ dir = path.dirname(targetPath);
18
+ }
19
+ catch {
20
+ dir = path.dirname(targetPath);
21
+ }
22
+ const candidates = [dir, env.AQE_PROJECT_ROOT ? path.resolve(env.AQE_PROJECT_ROOT) : null];
23
+ for (const candidate of candidates) {
24
+ if (!candidate)
25
+ continue;
26
+ const manifest = path.join(candidate, 'package.json');
27
+ try {
28
+ if ((await fs.stat(manifest)).isFile())
29
+ return manifest;
30
+ }
31
+ catch { /* try next */ }
32
+ }
33
+ return null;
34
+ }
35
+ /** Human message for a dependency scan outcome. */
36
+ export const DEPENDENCY_SCOPE_NOTE = 'direct dependencies of this package.json only; workspace members and transitive dependencies are not checked';
37
+ export function dependencyScanMessage(report) {
38
+ return `${statusMessage(report)} Scope: ${DEPENDENCY_SCOPE_NOTE}.`;
39
+ }
40
+ function statusMessage(report) {
41
+ switch (report.status) {
42
+ case 'complete':
43
+ return report.packagesRequested === 0
44
+ ? `No registry dependencies to check${report.localPackages.length ? ` (${report.localPackages.length} local package(s) excluded)` : ' in package.json'}; nothing to check (complete).`
45
+ : `Dependency advisories checked for all ${report.packagesChecked} package(s): ${report.vulnerabilities} advisory finding(s).`;
46
+ case 'incomplete':
47
+ return (report.uncheckedPackages.length > 0
48
+ ? `Dependency advisories could not be checked for ${report.uncheckedPackages.length} of ${report.packagesRequested} package(s); ` : '') +
49
+ (report.resolutionErrors.length > 0 ? `${report.resolutionErrors.slice(0, 3).join('; ')}; ` : '') +
50
+ `${report.vulnerabilities} finding(s) from the ${report.packagesChecked} checked package(s). Dependency scan is INCOMPLETE, not clean.`;
51
+ case 'failed':
52
+ return `${report.error ?? `Dependency advisories could not be checked for ${report.uncheckedPackages.length} package(s)`}. ` +
53
+ 'Dependency vulnerabilities are UNMEASURED, not zero.';
54
+ default:
55
+ return report.error ?? 'Dependency advisory scan did not run.';
56
+ }
57
+ }
58
+ function notRun(reason, manifest) {
59
+ const base = { status: 'not-run', measured: false, ...(manifest ? { manifest } : {}),
60
+ packagesRequested: 0, packagesChecked: 0, uncheckedPackages: [], localPackages: [],
61
+ resolutionErrors: [], scope: 'direct',
62
+ vulnerabilities: 0, error: reason };
63
+ return {
64
+ engine: { id: DEPENDENCY_ADVISORY_ENGINE_ID, requested: true, required: true, status: 'failed', scope: 'parent-directory',
65
+ ...(manifest ? { target: manifest } : {}), analyzedFiles: 0, ruleCoverage: 'unknown', errors: [reason], limitations: [] },
66
+ vulnerabilities: [],
67
+ report: { ...base, message: dependencyScanMessage(base) },
68
+ };
69
+ }
70
+ /** Run the OSV dependency scan for a target and describe it as an engine receipt. */
71
+ export async function runDependencyAdvisoryScan(scanner, targetPath) {
72
+ const manifest = await findPackageJson(targetPath);
73
+ if (!manifest)
74
+ return notRun('No package.json found for the dependency advisory scan.');
75
+ let scan;
76
+ try {
77
+ scan = await scanner.scanPackageJson(manifest);
78
+ }
79
+ catch (error) {
80
+ return notRun(`Dependency advisory scan failed: ${error instanceof Error ? error.message : String(error)}`, manifest);
81
+ }
82
+ if (!scan.success)
83
+ return notRun(`Dependency advisory scan did not run: ${scan.error.message}`, manifest);
84
+ const value = scan.value;
85
+ const unchecked = value.uncheckedPackages.map((p) => `${p.name}@${p.version}: ${p.reason}`);
86
+ const base = {
87
+ status: value.status, measured: value.measured, manifest, lockfile: value.lockfile ?? null,
88
+ packagesRequested: value.packagesScanned, packagesChecked: value.packagesChecked,
89
+ uncheckedPackages: value.uncheckedPackages, localPackages: value.localPackages ?? [],
90
+ resolutionErrors: value.resolutionErrors ?? [], scope: 'direct',
91
+ vulnerabilities: value.vulnerabilities.length,
92
+ scanId: value.scanId, ...(value.error ? { error: value.error } : {}),
93
+ };
94
+ return {
95
+ engine: {
96
+ id: DEPENDENCY_ADVISORY_ENGINE_ID, requested: true, required: true,
97
+ status: value.status === 'complete' ? 'completed' : value.status === 'incomplete' ? 'partial' : 'failed',
98
+ scope: 'parent-directory', target: manifest, ruleCoverage: 'unknown',
99
+ errors: [...(value.error ? [value.error] : []), ...(value.resolutionErrors ?? []), ...unchecked.slice(0, 20),
100
+ ...(unchecked.length > 20 ? [`... and ${unchecked.length - 20} more unchecked package(s)`] : [])],
101
+ limitations: [
102
+ value.lockfile
103
+ ? `Direct dependencies are checked at the versions ${value.lockfile} resolves (when in sync with package.json); transitive dependencies are not checked.`
104
+ : 'No lockfile: only exact versions in package.json are checked; ranges are reported unchecked. Transitive dependencies are not checked.',
105
+ ...((value.localPackages ?? []).length > 0
106
+ ? [`${value.localPackages.length} local workspace/linked package(s) are not OSV subjects and were excluded.`] : []),
107
+ ],
108
+ },
109
+ vulnerabilities: value.vulnerabilities,
110
+ report: { ...base, message: dependencyScanMessage(base) },
111
+ };
112
+ }
113
+ //# sourceMappingURL=dependency-advisory-engine.js.map
@@ -214,6 +214,36 @@ export interface DependencyScanResult {
214
214
  readonly vulnerabilities: Vulnerability[];
215
215
  readonly outdatedPackages: OutdatedPackage[];
216
216
  readonly summary: ScanSummary;
217
+ /**
218
+ * #1049: whether the advisory lookup covered every dependency. Only
219
+ * 'complete' is a measurement; 'incomplete' findings are real but partial,
220
+ * and 'failed' means no dependency was checked (never "0 vulnerabilities").
221
+ */
222
+ readonly status: 'complete' | 'incomplete' | 'failed';
223
+ /** True only when status is 'complete'. */
224
+ readonly measured: boolean;
225
+ readonly packagesChecked: number;
226
+ readonly uncheckedPackages: UncheckedDependency[];
227
+ /** Why the scan is incomplete/failed; absent when complete. */
228
+ readonly error?: string;
229
+ }
230
+ /** A dependency whose advisories could not be checked, and why (#1049). */
231
+ export interface UncheckedDependency {
232
+ readonly name: string;
233
+ /** The spec as declared in the manifest. */
234
+ readonly version: string;
235
+ readonly reason: string;
236
+ /** Workspace member the dependency belongs to (absent for the scanned package itself). */
237
+ readonly member?: string;
238
+ /** The lockfile-resolved version, when the lockfile has one. */
239
+ readonly lockedVersion?: string;
240
+ }
241
+ /** A local (workspace / linked / file-directory) package: not an OSV subject (#1049). */
242
+ export interface LocalDependency {
243
+ readonly name: string;
244
+ readonly spec: string;
245
+ readonly reason: string;
246
+ readonly member?: string;
217
247
  }
218
248
  export interface PackageSecurityInfo {
219
249
  readonly name: string;
@@ -8,7 +8,7 @@ import { BaseDomainPlugin, TaskHandler } from '../domain-interface.js';
8
8
  import { FilePath } from '../../shared/value-objects/index.js';
9
9
  import type { SecurityAuditOptions, SecurityAuditReport, SecurityPosture, ComplianceReport, ComplianceStandard, SASTResult, DASTResult, Vulnerability, GapAnalysis } from './interfaces.js';
10
10
  import { type IExtendedSecurityComplianceCoordinator, type CoordinatorConfig } from './coordinator.js';
11
- import { type ISecurityScannerService, type SecurityScannerConfig } from './services/security-scanner.js';
11
+ import { type ISecurityScannerService, type SecurityScannerConfig, type DependencyScanResult as OSVDependencyScanResult } from './services/security-scanner.js';
12
12
  import { type ISecurityAuditorService, type SecurityAuditorConfig } from './services/security-auditor.js';
13
13
  import type { HybridRouter } from '../../shared/llm/router/hybrid-router.js';
14
14
  import { type IExtendedComplianceValidationService, type ComplianceValidatorConfig } from './services/compliance-validator.js';
@@ -26,6 +26,11 @@ export interface SecurityComplianceAPI {
26
26
  getSecurityPosture(): Promise<Result<SecurityPosture>>;
27
27
  runSASTScan(files: FilePath[]): Promise<Result<SASTResult>>;
28
28
  runDASTScan(targetUrl: string): Promise<Result<DASTResult>>;
29
+ /**
30
+ * #1049: OSV advisory scan of a package.json. Check `status`: only 'complete'
31
+ * is a measurement; 'incomplete'/'failed' list the unchecked dependencies.
32
+ */
33
+ runDependencyScan(packageJsonPath: string): Promise<Result<OSVDependencyScanResult>>;
29
34
  triageVulnerabilities(vulnerabilities: Vulnerability[]): Promise<Result<{
30
35
  immediate: Vulnerability[];
31
36
  shortTerm: Vulnerability[];
@@ -66,6 +71,7 @@ export declare class SecurityCompliancePlugin extends BaseDomainPlugin {
66
71
  protected onEvent(event: DomainEvent): Promise<void>;
67
72
  private runSecurityAudit;
68
73
  private getSecurityPosture;
74
+ private runDependencyScan;
69
75
  private runSASTScan;
70
76
  private runDASTScan;
71
77
  private triageVulnerabilities;
@@ -49,6 +49,7 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
49
49
  getSecurityPosture: this.getSecurityPosture.bind(this),
50
50
  runSASTScan: this.runSASTScan.bind(this),
51
51
  runDASTScan: this.runDASTScan.bind(this),
52
+ runDependencyScan: this.runDependencyScan.bind(this),
52
53
  triageVulnerabilities: this.triageVulnerabilities.bind(this),
53
54
  runComplianceCheck: this.runComplianceCheck.bind(this),
54
55
  getAvailableStandards: this.getAvailableStandards.bind(this),
@@ -209,6 +210,24 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
209
210
  return this.handleError(error);
210
211
  }
211
212
  }
213
+ async runDependencyScan(packageJsonPath) {
214
+ this.ensureInitialized();
215
+ try {
216
+ const result = await this.securityScanner.scanPackageJson(packageJsonPath);
217
+ if (result.success && result.value.status === 'complete') {
218
+ this.trackSuccessfulOperation('dependency-scan');
219
+ }
220
+ else {
221
+ this.trackFailedOperation('dependency-scan', result.success
222
+ ? new Error(result.value.error ?? 'Dependency advisory scan incomplete')
223
+ : result.error);
224
+ }
225
+ return result;
226
+ }
227
+ catch (error) {
228
+ return this.handleError(error);
229
+ }
230
+ }
212
231
  async runSASTScan(files) {
213
232
  this.ensureInitialized();
214
233
  try {
@@ -6,6 +6,7 @@ import { LoggerFactory } from '../../../../logging/index.js';
6
6
  import { v4 as uuidv4 } from 'uuid';
7
7
  import { ok, err } from '../../../../shared/types/index.js';
8
8
  import { toError } from '../../../../shared/error-utils.js';
9
+ import { fetchWithResponseDeadline } from '../../../../shared/llm/providers/response-deadline.js';
9
10
  import { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, handleFetchError, calculateSummary, storeScanResults, } from './dast-helpers.js';
10
11
  // ============================================================================
11
12
  // DAST Scanner Service
@@ -144,20 +145,19 @@ export class DASTScanner {
144
145
  }
145
146
  const timeout = options.timeout ?? this.config.timeout;
146
147
  const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
147
- // Perform main page scan
148
- const controller = new AbortController();
149
- const timeoutId = setTimeout(() => controller.abort(), Math.min(timeout, 30000));
148
+ // Perform main page scan. #980: the deadline must cover the body too —
149
+ // the target is untrusted and may send headers and then stall the body,
150
+ // so it stays armed until `response.clone().text()` below has finished.
151
+ const deadlineMs = Math.min(timeout, 30000);
150
152
  try {
151
- const response = await fetch(targetUrl, {
153
+ const response = await fetchWithResponseDeadline(targetUrl, {
152
154
  method: 'GET',
153
155
  headers: {
154
156
  'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
155
157
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
156
158
  },
157
- signal: controller.signal,
158
159
  redirect: 'follow',
159
- });
160
- clearTimeout(timeoutId);
160
+ }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
161
161
  crawledUrls++;
162
162
  // Security header analysis
163
163
  analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities);
@@ -171,19 +171,25 @@ export class DASTScanner {
171
171
  analyzeServerHeaders(response.headers, targetUrl, vulnerabilities);
172
172
  // Active scanning features
173
173
  if (options.activeScanning ?? this.config.dastActiveScanning) {
174
+ // Read the page body first, inside the request deadline (#980), so the
175
+ // slower probes below cannot use up the deadline of a healthy target.
176
+ const responseText = await response.text();
174
177
  crawledUrls = await scanSensitiveFiles(parsedUrl, crawledUrls, maxDepth, vulnerabilities);
175
178
  await analyzeCORS(targetUrl, vulnerabilities);
176
179
  // Enhanced DAST: Link crawling, injection testing, form analysis
177
- const responseText = await response.clone().text();
178
180
  crawledUrls = await extractAndCrawlLinks(responseText, parsedUrl, crawledUrls, maxDepth, vulnerabilities);
179
181
  if (parsedUrl.search) {
180
182
  await this.testInjectionVulnerabilities(targetUrl, parsedUrl, vulnerabilities);
181
183
  }
182
184
  analyzeFormsForSecurityIssues(responseText, targetUrl, vulnerabilities);
183
185
  }
186
+ else {
187
+ // Passive scan: headers only. Release the connection instead of
188
+ // leaving an unread body to the deadline timer.
189
+ await response.body?.cancel().catch(() => undefined);
190
+ }
184
191
  }
185
192
  catch (fetchError) {
186
- clearTimeout(timeoutId);
187
193
  handleFetchError(fetchError, targetUrl, vulnerabilities);
188
194
  }
189
195
  }
@@ -210,20 +216,21 @@ export class DASTScanner {
210
216
  }
211
217
  const timeout = options.timeout ?? this.config.timeout;
212
218
  const maxDepth = options.maxDepth ?? this.config.dastMaxDepth;
213
- const controller = new AbortController();
214
- const timeoutId = setTimeout(() => controller.abort(), Math.min(timeout, 30000));
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);
215
223
  try {
216
- const response = await fetch(targetUrl, {
224
+ const response = await fetchWithResponseDeadline(targetUrl, {
217
225
  method: 'GET',
218
226
  headers: {
219
227
  'User-Agent': 'AgenticQE-DAST-Scanner/3.0',
220
228
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
221
229
  ...authHeaders,
222
230
  },
223
- signal: controller.signal,
224
231
  redirect: 'follow',
225
- });
226
- clearTimeout(timeoutId);
232
+ }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
233
+ await response.body?.cancel().catch(() => undefined);
227
234
  crawledUrls++;
228
235
  // Check if authentication was successful
229
236
  if (response.status === 401 || response.status === 403) {
@@ -244,7 +251,6 @@ export class DASTScanner {
244
251
  analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities, true);
245
252
  }
246
253
  catch (fetchError) {
247
- clearTimeout(timeoutId);
248
254
  handleFetchError(fetchError, targetUrl, vulnerabilities);
249
255
  }
250
256
  }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Agentic QE v3 - Dependency resolution for the OSV advisory scan (#1049)
3
+ *
4
+ * Decides, for every direct dependency of a package.json, what can be checked
5
+ * against OSV:
6
+ *
7
+ * - check: a registry package at a concrete version — the lockfile's
8
+ * resolved version when the lockfile is in sync with package.json,
9
+ * else an exact spec. `npm:` aliases resolve to the real package.
10
+ * - local: a workspace / linked / local-directory package. Not an OSV
11
+ * subject; listed separately and never makes a scan incomplete.
12
+ * - unchecked: anything that cannot be matched without guessing — a range
13
+ * with no (in-sync) lockfile resolution, a lockfile out of sync
14
+ * with package.json, git/URL/tarball sources.
15
+ *
16
+ * The lockfile is looked up from the package directory upwards (never above
17
+ * AQE_PROJECT_ROOT or the git root), so scanning a workspace member directly
18
+ * uses the workspace root's lockfile.
19
+ *
20
+ * Workspace member scanning is not part of 3.15.7 (#1057): at a workspace root
21
+ * only the root's own dependencies are checked and the scan is reported as not
22
+ * complete, with a reason; each member can be scanned directly.
23
+ */
24
+ export interface ResolvedDependency {
25
+ /** Dependency name as declared (the alias name for `npm:` aliases). */
26
+ readonly name: string;
27
+ /** Spec as declared in package.json. */
28
+ readonly spec: string;
29
+ /** Lockfile importer the dependency belongs to ('' = the lockfile root). */
30
+ readonly member: string;
31
+ readonly kind: 'check' | 'local' | 'unchecked';
32
+ /** Registry package to check (differs from `name` for aliases). */
33
+ readonly packageName?: string;
34
+ /** Concrete version to check. */
35
+ readonly version?: string;
36
+ /** Lockfile-resolved version, also reported for unchecked packages when known. */
37
+ readonly lockedVersion?: string;
38
+ readonly reason?: string;
39
+ }
40
+ export interface DependencyResolution {
41
+ readonly dependencies: ResolvedDependency[];
42
+ /** Lockfile used (relative to the scanned package.json directory), or null. */
43
+ readonly lockfile: string | null;
44
+ /** A lockfile that exists but could not be read or parsed. */
45
+ readonly error?: string;
46
+ /**
47
+ * Reasons the scan cannot be complete beyond individual packages — today: a
48
+ * workspace root, whose members' dependencies are not scanned (#1057).
49
+ */
50
+ readonly memberErrors: string[];
51
+ }
52
+ /** The reason a workspace root's scan is not complete (#1057). */
53
+ export declare const WORKSPACE_NOT_SCANNED = "workspace member dependencies are not scanned yet (#1057); scan each member directory separately";
54
+ type Manifest = {
55
+ name?: unknown;
56
+ workspaces?: unknown;
57
+ } & Partial<Record<'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies', Record<string, unknown>>>;
58
+ /** All declared dependencies of a manifest (later fields win, as npm resolves them). */
59
+ export declare function declaredDependencies(manifest: Manifest): Record<string, string>;
60
+ /**
61
+ * Resolve a `name -> spec` record with caller-supplied resolved versions
62
+ * (programmatic use; no lockfile on disk). Same rules as `resolveDependencies`.
63
+ */
64
+ export declare function resolveFromRecord(dependencies: Record<string, string>, lockedVersions?: Record<string, string>): ResolvedDependency[];
65
+ /**
66
+ * Resolve the dependencies to check for the package.json at `manifestPath`.
67
+ * @throws when package.json itself cannot be read or parsed.
68
+ */
69
+ export declare function resolveDependencies(manifestPath: string): Promise<DependencyResolution>;
70
+ export {};
71
+ //# sourceMappingURL=dependency-resolver.d.ts.map
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Agentic QE v3 - Dependency resolution for the OSV advisory scan (#1049)
3
+ *
4
+ * Decides, for every direct dependency of a package.json, what can be checked
5
+ * against OSV:
6
+ *
7
+ * - check: a registry package at a concrete version — the lockfile's
8
+ * resolved version when the lockfile is in sync with package.json,
9
+ * else an exact spec. `npm:` aliases resolve to the real package.
10
+ * - local: a workspace / linked / local-directory package. Not an OSV
11
+ * subject; listed separately and never makes a scan incomplete.
12
+ * - unchecked: anything that cannot be matched without guessing — a range
13
+ * with no (in-sync) lockfile resolution, a lockfile out of sync
14
+ * with package.json, git/URL/tarball sources.
15
+ *
16
+ * The lockfile is looked up from the package directory upwards (never above
17
+ * AQE_PROJECT_ROOT or the git root), so scanning a workspace member directly
18
+ * uses the workspace root's lockfile.
19
+ *
20
+ * Workspace member scanning is not part of 3.15.7 (#1057): at a workspace root
21
+ * only the root's own dependencies are checked and the scan is reported as not
22
+ * complete, with a reason; each member can be scanned directly.
23
+ */
24
+ import * as fs from 'fs/promises';
25
+ import * as path from 'path';
26
+ import semver from 'semver';
27
+ import { parse as parseYaml } from 'yaml';
28
+ import { safeJsonParse } from '../../../../shared/safe-json.js';
29
+ import { classifyNpmSpec, exactNpmVersion } from '../../../../shared/security/osv-lookup.js';
30
+ import { LOCKFILES, parseLockfile } from './lockfile-versions.js';
31
+ /** The reason a workspace root's scan is not complete (#1057). */
32
+ export const WORKSPACE_NOT_SCANNED = 'workspace member dependencies are not scanned yet (#1057); scan each member directory separately';
33
+ const OUT_OF_SYNC = 'lockfile out of sync with package.json';
34
+ /** All declared dependencies of a manifest (later fields win, as npm resolves them). */
35
+ export function declaredDependencies(manifest) {
36
+ const out = {};
37
+ for (const field of ['peerDependencies', 'optionalDependencies', 'devDependencies', 'dependencies']) {
38
+ for (const [name, spec] of Object.entries(manifest[field] ?? {})) {
39
+ if (typeof spec === 'string')
40
+ out[name] = spec;
41
+ }
42
+ }
43
+ return out;
44
+ }
45
+ async function readManifest(file) {
46
+ return safeJsonParse(await fs.readFile(file, 'utf-8'));
47
+ }
48
+ async function exists(file) {
49
+ try {
50
+ await fs.access(file);
51
+ return true;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ async function realOrResolved(p) {
58
+ try {
59
+ return await fs.realpath(p);
60
+ }
61
+ catch {
62
+ return path.resolve(p);
63
+ }
64
+ }
65
+ /**
66
+ * Find the lockfile governing `dir`: walk up, but never above the project root
67
+ * (`AQE_PROJECT_ROOT` when `dir` is inside it) nor above the git root.
68
+ */
69
+ async function findLockfile(dir, env = process.env) {
70
+ let current = await realOrResolved(dir);
71
+ const projectRoot = env.AQE_PROJECT_ROOT ? await realOrResolved(env.AQE_PROJECT_ROOT) : null;
72
+ const boundary = projectRoot && isInside(projectRoot, current) ? projectRoot : null;
73
+ for (;;) {
74
+ for (const file of LOCKFILES) {
75
+ if (await exists(path.join(current, file)))
76
+ return { dir: current, file };
77
+ }
78
+ if (current === boundary || await exists(path.join(current, '.git')))
79
+ return null;
80
+ const parent = path.dirname(current);
81
+ if (parent === current)
82
+ return null;
83
+ current = parent;
84
+ }
85
+ }
86
+ /** Whether `child` is `root` or inside it (both absolute, real paths). */
87
+ function isInside(root, child) {
88
+ const rel = path.relative(root, child);
89
+ return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
90
+ }
91
+ /** Largest pnpm-workspace.yaml that is read; a larger one counts as a workspace root. */
92
+ const MAX_PNPM_WORKSPACE_BYTES = 1024 * 1024;
93
+ const nonEmptyArray = (v) => Array.isArray(v) && v.length > 0;
94
+ /**
95
+ * A workspace root, detected without expanding any glob: package.json
96
+ * `workspaces` is a non-empty array or an object with a non-empty `packages`,
97
+ * or a pnpm-workspace.yaml declares workspace packages.
98
+ */
99
+ async function isWorkspaceRoot(dir, manifest) {
100
+ const ws = manifest.workspaces;
101
+ if (nonEmptyArray(ws))
102
+ return true;
103
+ if (ws !== null && typeof ws === 'object' && nonEmptyArray(ws.packages))
104
+ return true;
105
+ return pnpmDeclaresPackages(path.join(dir, 'pnpm-workspace.yaml'));
106
+ }
107
+ /**
108
+ * pnpm 10+ keeps project settings (nodeLinker, onlyBuiltDependencies, ...) in
109
+ * pnpm-workspace.yaml even for a single package, so only a file that declares
110
+ * `packages` is a workspace root. Fail closed: an unreadable, oversized,
111
+ * non-regular, dangling or unparsable file, or a `packages` that is not a list,
112
+ * counts as a root. No file, a map without `packages`, or `packages: []` does not.
113
+ */
114
+ async function pnpmDeclaresPackages(file) {
115
+ try {
116
+ await fs.lstat(file);
117
+ }
118
+ catch (e) {
119
+ return e.code !== 'ENOENT';
120
+ }
121
+ let doc;
122
+ try {
123
+ const st = await fs.stat(file); // follows a link; a dangling one throws
124
+ if (!st.isFile() || st.size > MAX_PNPM_WORKSPACE_BYTES)
125
+ return true;
126
+ const text = await fs.readFile(file, 'utf-8');
127
+ doc = parseYaml(text, { uniqueKeys: false, merge: true, maxAliasCount: 100 });
128
+ }
129
+ catch {
130
+ return true;
131
+ }
132
+ if (doc === null || typeof doc !== 'object' || Array.isArray(doc))
133
+ return true;
134
+ if (!Object.prototype.hasOwnProperty.call(doc, 'packages'))
135
+ return false;
136
+ const packages = doc.packages;
137
+ return !Array.isArray(packages) || packages.length > 0;
138
+ }
139
+ /** Resolve one declared dependency of `member`. */
140
+ function resolveOne(name, spec, member, index, localNames) {
141
+ const base = { name, spec, member };
142
+ const kind = classifyNpmSpec(spec);
143
+ if (kind.kind === 'local')
144
+ return { ...base, kind: 'local', reason: 'local package (workspace/link/file directory)' };
145
+ if (kind.kind === 'remote') {
146
+ return { ...base, kind: 'unchecked', reason: `not a registry dependency ("${spec}": git/URL/tarball source); OSV advisories cannot be matched` };
147
+ }
148
+ const packageName = kind.kind === 'alias' ? kind.name : name;
149
+ const rangeSpec = kind.spec;
150
+ const locked = index?.resolve(member, name, spec);
151
+ if (locked?.local || (!locked && localNames.has(name))) {
152
+ return { ...base, kind: 'local', reason: 'workspace package (local source)' };
153
+ }
154
+ if (locked && index) {
155
+ const recorded = index.recordedSpec(member, name);
156
+ const lockedVersion = locked.version ? exactNpmVersion(locked.version) ?? undefined : undefined;
157
+ const specDiffers = recorded === undefined || (recorded !== null && recorded !== spec);
158
+ const unsatisfied = lockedVersion !== undefined && !!semver.validRange(rangeSpec)
159
+ && !semver.satisfies(lockedVersion, rangeSpec, { includePrerelease: true });
160
+ if (specDiffers || unsatisfied) {
161
+ return {
162
+ ...base, kind: 'unchecked', ...(lockedVersion ? { lockedVersion } : {}),
163
+ reason: `${OUT_OF_SYNC} (${index.file} has ${recorded ? `"${recorded}"` : 'no entry'}${lockedVersion ? ` -> ${lockedVersion}` : ''} for "${spec}")`,
164
+ };
165
+ }
166
+ if (lockedVersion) {
167
+ return { ...base, kind: 'check', packageName: locked.realName ?? packageName, version: lockedVersion, lockedVersion };
168
+ }
169
+ }
170
+ const exact = exactNpmVersion(rangeSpec);
171
+ if (exact)
172
+ return { ...base, kind: 'check', packageName, version: exact };
173
+ return { ...base, kind: 'unchecked', reason: `version range "${spec}", no lockfile resolution` };
174
+ }
175
+ /**
176
+ * Resolve a `name -> spec` record with caller-supplied resolved versions
177
+ * (programmatic use; no lockfile on disk). Same rules as `resolveDependencies`.
178
+ */
179
+ export function resolveFromRecord(dependencies, lockedVersions = {}) {
180
+ const index = {
181
+ file: 'package-lock.json',
182
+ members: () => [],
183
+ hasImporter: () => true,
184
+ recordedSpec: () => null,
185
+ resolve: (_importer, name) => (lockedVersions[name] !== undefined ? { version: lockedVersions[name] } : undefined),
186
+ };
187
+ return Object.entries(dependencies).map(([name, spec]) => resolveOne(name, spec, '', index, new Set()));
188
+ }
189
+ /**
190
+ * Resolve the dependencies to check for the package.json at `manifestPath`.
191
+ * @throws when package.json itself cannot be read or parsed.
192
+ */
193
+ export async function resolveDependencies(manifestPath) {
194
+ const manifestDir = path.dirname(path.resolve(manifestPath));
195
+ const manifest = await readManifest(manifestPath);
196
+ let index = null;
197
+ let lockDir = await realOrResolved(manifestDir);
198
+ const realManifestDir = lockDir;
199
+ let lockfile = null;
200
+ let error;
201
+ const found = await findLockfile(manifestDir);
202
+ if (found) {
203
+ const member = path.relative(found.dir, realManifestDir).split(path.sep).join('/');
204
+ try {
205
+ const parsed = parseLockfile(found.file, await fs.readFile(path.join(found.dir, found.file), 'utf-8'));
206
+ const rootManifest = member ? await readManifest(path.join(found.dir, 'package.json')).catch(() => ({})) : manifest;
207
+ // A member scanned directly: the root lockfile covers it if it lists the
208
+ // importer (npm/pnpm) or, for yarn, if the root declares workspaces.
209
+ const covers = member === '' || parsed.hasImporter(member) && (parsed.file !== 'yarn.lock'
210
+ || await isWorkspaceRoot(found.dir, rootManifest));
211
+ if (covers) {
212
+ index = parsed;
213
+ lockDir = found.dir;
214
+ lockfile = path.relative(realManifestDir, path.join(found.dir, found.file)).split(path.sep).join('/');
215
+ }
216
+ }
217
+ catch (e) {
218
+ // #1049 round 4: a malformed lockfile is an error (the scan is not complete), not "no lockfile".
219
+ error = `${path.relative(realManifestDir, path.join(found.dir, found.file)).split(path.sep).join('/')} could not be read or parsed `
220
+ + `(${e instanceof Error ? e.message.slice(0, 120) : 'error'}); versions were not resolved from it`;
221
+ }
222
+ }
223
+ const scannedMember = path.relative(lockDir, realManifestDir).split(path.sep).join('/');
224
+ // #1057: workspace members are not scanned in 3.15.7 — a workspace root is never complete.
225
+ const memberErrors = await isWorkspaceRoot(realManifestDir, manifest) ? [WORKSPACE_NOT_SCANNED] : [];
226
+ const dependencies = [];
227
+ for (const [name, spec] of Object.entries(declaredDependencies(manifest))) {
228
+ dependencies.push(resolveOne(name, spec, scannedMember, index, new Set()));
229
+ }
230
+ return { dependencies, lockfile, memberErrors, ...(error ? { error } : {}) };
231
+ }
232
+ //# sourceMappingURL=dependency-resolver.js.map