agentic-qe 3.15.12 → 3.15.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +124 -5
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +196 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/cli/bundle.js +6 -6
  6. package/dist/cli/chunks/adapter-23KA2YW7.js +2 -0
  7. package/dist/cli/chunks/{agent-booster-wasm-5VZCKTIJ.js → agent-booster-wasm-2DLAEZK6.js} +2 -2
  8. package/dist/cli/chunks/{agent-handler-K3C6CQCD.js → agent-handler-P3IY7XEE.js} +2 -2
  9. package/dist/cli/chunks/{agent-memory-branch-NVFQ25WS.js → agent-memory-branch-WWKC2H3G.js} +2 -2
  10. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +2 -0
  11. package/dist/cli/chunks/{arena-TSZVDSXS.js → arena-4BMFF6BS.js} +4 -4
  12. package/dist/cli/chunks/{arena-QGWIJADQ.js → arena-EIV5OALF.js} +2 -2
  13. package/dist/cli/chunks/{audit-KIEE2SHJ.js → audit-DNTI453H.js} +3 -3
  14. package/dist/cli/chunks/base-XPWGYDKD.js +2 -0
  15. package/dist/cli/chunks/{better-sqlite3-BNB32NW3.js → better-sqlite3-TQBQGNC6.js} +2 -2
  16. package/dist/cli/chunks/brain-handler-HY57CNAO.js +95 -0
  17. package/dist/cli/chunks/{branch-enumerator-LZ7UXKAY.js → branch-enumerator-THPMZPHQ.js} +2 -2
  18. package/dist/cli/chunks/{browser-VDHAW4RK.js → browser-O6JJOZCK.js} +2 -2
  19. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +2 -0
  20. package/dist/cli/chunks/{chunk-4PU5GTZW.js → chunk-2HPNGK7A.js} +2 -2
  21. package/dist/cli/chunks/{chunk-MCPXNUDK.js → chunk-2IJO3657.js} +2 -2
  22. package/dist/cli/chunks/{chunk-4Y6OEBJZ.js → chunk-2QLE6NDW.js} +1 -1
  23. package/dist/cli/chunks/{chunk-DZGPUGUG.js → chunk-2UZBLC5H.js} +2 -2
  24. package/dist/cli/chunks/{chunk-5A66EGEW.js → chunk-2W5MQDHM.js} +2 -2
  25. package/dist/cli/chunks/{chunk-JRYWLOBD.js → chunk-3FITMWWJ.js} +2 -2
  26. package/dist/cli/chunks/{chunk-RCOLPF3B.js → chunk-3TF27MG5.js} +2 -2
  27. package/dist/cli/chunks/{chunk-KGA7VAI4.js → chunk-3XACRXBY.js} +2 -2
  28. package/dist/cli/chunks/{chunk-SQVZ3TRU.js → chunk-43XHGWYH.js} +2 -2
  29. package/dist/cli/chunks/{chunk-JR6CUKAI.js → chunk-4RPBODN5.js} +2 -2
  30. package/dist/cli/chunks/{chunk-C3YOVASQ.js → chunk-4T7XV5KQ.js} +1 -1
  31. package/dist/cli/chunks/{chunk-N7O3PF6Y.js → chunk-4WLIOPHX.js} +2 -2
  32. package/dist/cli/chunks/{chunk-PGSJBXTD.js → chunk-52KOPIMI.js} +2 -2
  33. package/dist/cli/chunks/{chunk-4KUOYDY2.js → chunk-56NSE3LJ.js} +2 -2
  34. package/dist/cli/chunks/{chunk-3IU4LDZR.js → chunk-57DRT6UA.js} +2 -2
  35. package/dist/cli/chunks/{chunk-2JYUA27M.js → chunk-57FX3GP6.js} +1 -1
  36. package/dist/cli/chunks/{chunk-7QEUHNKO.js → chunk-5PLBQZ5J.js} +1 -1
  37. package/dist/cli/chunks/{chunk-VF7FTD64.js → chunk-5Y7UFHJD.js} +1 -1
  38. package/dist/cli/chunks/{chunk-7JFDLL2F.js → chunk-5Z4MO2F3.js} +1 -1
  39. package/dist/cli/chunks/chunk-65EE2EST.js +8 -0
  40. package/dist/cli/chunks/{chunk-66PXR3NI.js → chunk-6NIGSY5L.js} +2 -2
  41. package/dist/cli/chunks/chunk-6O63ZTVX.js +3 -0
  42. package/dist/cli/chunks/{chunk-ZYOYR3UR.js → chunk-6OI5SK7M.js} +1 -1
  43. package/dist/cli/chunks/{chunk-5TAEW5OV.js → chunk-6P4Q4RTC.js} +1 -1
  44. package/dist/cli/chunks/{chunk-W5HQIYQU.js → chunk-7724KXM2.js} +3 -3
  45. package/dist/cli/chunks/{chunk-A2JCRXTK.js → chunk-7MISCSL5.js} +2 -2
  46. package/dist/cli/chunks/{chunk-OHVYINGM.js → chunk-7MUO4DEH.js} +3 -3
  47. package/dist/cli/chunks/{chunk-QCPVUNN3.js → chunk-7QUSNBAA.js} +2 -2
  48. package/dist/cli/chunks/{chunk-YUA6ZKKY.js → chunk-7SQTLUEN.js} +2 -2
  49. package/dist/cli/chunks/{chunk-CA5UNWQF.js → chunk-7T6L3LFN.js} +2 -2
  50. package/dist/cli/chunks/{chunk-UREDS662.js → chunk-7TH4PJSU.js} +2 -2
  51. package/dist/cli/chunks/{chunk-TVA5GRIU.js → chunk-7Y3LXH57.js} +2 -2
  52. package/dist/cli/chunks/{chunk-A5Y7DAVQ.js → chunk-A2T56XVL.js} +2 -2
  53. package/dist/cli/chunks/{chunk-ZROAMFX2.js → chunk-AJVLVF7V.js} +2 -2
  54. package/dist/cli/chunks/{chunk-26672ISV.js → chunk-ARRBXCII.js} +2 -2
  55. package/dist/cli/chunks/{chunk-5S4UIDFK.js → chunk-AYLEH2UF.js} +1 -1
  56. package/dist/cli/chunks/{chunk-DRCBRUGN.js → chunk-BBYJBZHG.js} +2 -2
  57. package/dist/cli/chunks/{chunk-BMG2JLSQ.js → chunk-BM3EJLMV.js} +2 -2
  58. package/dist/cli/chunks/{chunk-6QRI3JVE.js → chunk-BNG4J3CE.js} +2 -2
  59. package/dist/cli/chunks/{chunk-EN7GRVEQ.js → chunk-BPDAQB3F.js} +2 -2
  60. package/dist/cli/chunks/{chunk-J7Y7ZBIT.js → chunk-BQJ7CV53.js} +9 -9
  61. package/dist/cli/chunks/{chunk-ADUAJIAU.js → chunk-C3OIBFAA.js} +2 -2
  62. package/dist/cli/chunks/{chunk-4LWMAAWK.js → chunk-CAZM63TP.js} +2 -2
  63. package/dist/cli/chunks/{chunk-UZED4YZ5.js → chunk-CIINJHOX.js} +1 -1
  64. package/dist/cli/chunks/{chunk-C74M4WUI.js → chunk-CPPYZYXC.js} +2 -2
  65. package/dist/cli/chunks/chunk-D3ZZ2NLL.js +62 -0
  66. package/dist/cli/chunks/{chunk-U7ZHDGXG.js → chunk-D5GB5PUU.js} +1 -1
  67. package/dist/cli/chunks/{chunk-HZBXJFGN.js → chunk-DLTB5KCR.js} +2 -2
  68. package/dist/cli/chunks/{chunk-NNBQZR73.js → chunk-DRLSJJIC.js} +2 -2
  69. package/dist/cli/chunks/{chunk-HLGFHHWV.js → chunk-DSQESXL4.js} +2 -2
  70. package/dist/cli/chunks/{chunk-LFBA735S.js → chunk-E2JLAW3U.js} +3 -3
  71. package/dist/cli/chunks/{chunk-PT2NXS43.js → chunk-E3QIQMMN.js} +1 -1
  72. package/dist/cli/chunks/{chunk-35MIUSXQ.js → chunk-E7OR6V3V.js} +2 -2
  73. package/dist/cli/chunks/{chunk-G24SWTAX.js → chunk-E7QTWGPI.js} +413 -413
  74. package/dist/cli/chunks/{chunk-PX5OPXY6.js → chunk-EC65UZ77.js} +1 -1
  75. package/dist/cli/chunks/{chunk-JNXK47OL.js → chunk-EIEEST4T.js} +2 -2
  76. package/dist/cli/chunks/{chunk-2PPSS4JD.js → chunk-FHPNWHY7.js} +2 -2
  77. package/dist/cli/chunks/{chunk-PTBOLBM4.js → chunk-FJOIBZUB.js} +2 -2
  78. package/dist/cli/chunks/{chunk-TXEUVUMO.js → chunk-FTYRPEJS.js} +1 -1
  79. package/dist/cli/chunks/{chunk-ZPVGX4DI.js → chunk-G7HGUQAE.js} +2 -2
  80. package/dist/cli/chunks/{chunk-EF6OERRR.js → chunk-GY4P7KAI.js} +1 -1
  81. package/dist/cli/chunks/{chunk-UUZZXHUF.js → chunk-H3C5FJRH.js} +2 -2
  82. package/dist/cli/chunks/{chunk-L3PV7VXK.js → chunk-H4LYXLAT.js} +1 -1
  83. package/dist/cli/chunks/{chunk-5Z23ZMXZ.js → chunk-HAYKLXCT.js} +63 -61
  84. package/dist/cli/chunks/{chunk-IPA7K556.js → chunk-HEDGFKC5.js} +2 -2
  85. package/dist/cli/chunks/{chunk-BC4T6SCV.js → chunk-HHBF2BZC.js} +4 -4
  86. package/dist/cli/chunks/{chunk-IVTQF55W.js → chunk-HSDWPQQY.js} +3 -3
  87. package/dist/cli/chunks/{chunk-SG2TX72G.js → chunk-HTVGHHX2.js} +2 -2
  88. package/dist/cli/chunks/{chunk-FZJCBSN4.js → chunk-HV43NX4A.js} +2 -2
  89. package/dist/cli/chunks/{chunk-MMEALJ4D.js → chunk-IDBA5GK2.js} +2 -2
  90. package/dist/cli/chunks/{chunk-IA55PFLG.js → chunk-INGXD5IX.js} +2 -2
  91. package/dist/cli/chunks/{chunk-RYHG3I7J.js → chunk-IQRPR4KB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-7OEFBWAG.js → chunk-IRPNEXOU.js} +2 -2
  93. package/dist/cli/chunks/{chunk-P7UFJ6DO.js → chunk-J35JWDJE.js} +1 -1
  94. package/dist/cli/chunks/chunk-J6ASX536.js +2 -0
  95. package/dist/cli/chunks/{chunk-2ASQRBK2.js → chunk-JAOCHPYX.js} +2 -2
  96. package/dist/cli/chunks/{chunk-G3AABG4Q.js → chunk-JB7R77SH.js} +2 -2
  97. package/dist/cli/chunks/{chunk-HSA5IGGW.js → chunk-JI67T6Q2.js} +2 -2
  98. package/dist/cli/chunks/{chunk-ZGROHCOW.js → chunk-JJHLGGPP.js} +1 -1
  99. package/dist/cli/chunks/{chunk-L7NGKANW.js → chunk-JK6PMLQQ.js} +2 -2
  100. package/dist/cli/chunks/{chunk-IL7GQNNE.js → chunk-JO26SG47.js} +2 -2
  101. package/dist/cli/chunks/{chunk-3EWQN37E.js → chunk-JSSU4RIK.js} +2 -2
  102. package/dist/cli/chunks/{chunk-TOWOJGEI.js → chunk-K2SMP4OD.js} +1 -1
  103. package/dist/cli/chunks/{chunk-YVJEUX3I.js → chunk-K7GFYFBO.js} +2 -2
  104. package/dist/cli/chunks/{chunk-DAUEK66C.js → chunk-K7RT6ITZ.js} +1 -1
  105. package/dist/cli/chunks/{chunk-33I2ZP6E.js → chunk-KJ5A54ZH.js} +2 -2
  106. package/dist/cli/chunks/{chunk-W4II6SIH.js → chunk-L5VSLPMW.js} +2 -2
  107. package/dist/cli/chunks/{chunk-NVRYELCY.js → chunk-L752CNG3.js} +3 -3
  108. package/dist/cli/chunks/{chunk-MAJXZYGK.js → chunk-L7PC675Y.js} +1 -1
  109. package/dist/cli/chunks/{chunk-YWWMNTBF.js → chunk-LTGQJYYO.js} +2 -2
  110. package/dist/cli/chunks/{chunk-7DNR4KKR.js → chunk-M2TG7VDK.js} +1 -1
  111. package/dist/cli/chunks/{chunk-2E2QO44T.js → chunk-M5JEA6ZY.js} +2 -2
  112. package/dist/cli/chunks/{chunk-IETBWYHW.js → chunk-MB4UKUBV.js} +2 -2
  113. package/dist/cli/chunks/{chunk-W7H55PY4.js → chunk-MKYOE7NE.js} +1 -1
  114. package/dist/cli/chunks/{chunk-FNUFTWEO.js → chunk-MQXWG55U.js} +3 -3
  115. package/dist/cli/chunks/{chunk-O4QJMANM.js → chunk-MR2OPUSA.js} +1 -1
  116. package/dist/cli/chunks/{chunk-KA5SHLMW.js → chunk-N736GLWZ.js} +2 -2
  117. package/dist/cli/chunks/{chunk-NV74SICL.js → chunk-NHEG2DLN.js} +2 -2
  118. package/dist/cli/chunks/chunk-NKOLILT7.js +86 -0
  119. package/dist/cli/chunks/{chunk-KJDI5CHX.js → chunk-NPCXGX7N.js} +2 -2
  120. package/dist/cli/chunks/{chunk-2IVE5AR3.js → chunk-NZQYJCO6.js} +1 -1
  121. package/dist/cli/chunks/{chunk-4SA7M34P.js → chunk-O2AAYJUV.js} +1 -1
  122. package/dist/cli/chunks/{chunk-ULCW6IVQ.js → chunk-O32BFQV4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-JOWUS2X5.js → chunk-O3ERGUXH.js} +1 -1
  124. package/dist/cli/chunks/{chunk-BYRCB5JT.js → chunk-O5CEL447.js} +2 -2
  125. package/dist/cli/chunks/{chunk-CPIBIR3X.js → chunk-O756AOUX.js} +2 -2
  126. package/dist/cli/chunks/{chunk-TSOQ2QLT.js → chunk-OCN53CCK.js} +2 -2
  127. package/dist/cli/chunks/{chunk-YLKIXEPP.js → chunk-OGEIHS76.js} +1 -1
  128. package/dist/cli/chunks/{chunk-ICKUINKD.js → chunk-OLUOVNUF.js} +2 -2
  129. package/dist/cli/chunks/{chunk-5ADXFUMO.js → chunk-P2TPH3TC.js} +2 -2
  130. package/dist/cli/chunks/{chunk-SBHM5X2S.js → chunk-PCQZIAXB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-CDA5Z74H.js → chunk-PGN4TARY.js} +2 -2
  132. package/dist/cli/chunks/{chunk-P5E26N2X.js → chunk-PNRPVQGI.js} +2 -2
  133. package/dist/cli/chunks/{chunk-23PQF7NN.js → chunk-PWQWKYBG.js} +1 -1
  134. package/dist/cli/chunks/{chunk-T4EN5VVK.js → chunk-QNQE3EOH.js} +2 -2
  135. package/dist/cli/chunks/chunk-QP2HLKTS.js +2 -0
  136. package/dist/cli/chunks/{chunk-7TA5MUPW.js → chunk-QP6GL3O5.js} +1 -1
  137. package/dist/cli/chunks/{chunk-GKFV6CUD.js → chunk-QUZ745UQ.js} +2 -2
  138. package/dist/cli/chunks/{chunk-INZARYUD.js → chunk-R5RRWLRI.js} +2 -2
  139. package/dist/cli/chunks/{chunk-VZBC6DP7.js → chunk-RE6JTSDM.js} +1 -1
  140. package/dist/cli/chunks/{chunk-JGIJPDGD.js → chunk-TOJF3ZG4.js} +2 -2
  141. package/dist/cli/chunks/{chunk-WLRU6ESI.js → chunk-TSP6SU5V.js} +2 -2
  142. package/dist/cli/chunks/{chunk-6E6HB4N4.js → chunk-TW6Z6W4X.js} +4 -4
  143. package/dist/cli/chunks/{chunk-ENGL7FIJ.js → chunk-TWOV3I3A.js} +1 -1
  144. package/dist/cli/chunks/chunk-U4TML2VD.js +3 -0
  145. package/dist/cli/chunks/{chunk-O3IM4WRZ.js → chunk-U6IOQKCT.js} +2 -2
  146. package/dist/cli/chunks/{chunk-SPC4RBLF.js → chunk-UDSB3XCG.js} +2 -2
  147. package/dist/cli/chunks/{chunk-URSTP3WI.js → chunk-UFP7SN5V.js} +2 -2
  148. package/dist/cli/chunks/{chunk-MYF5CNGV.js → chunk-UMHFTQTR.js} +2 -2
  149. package/dist/cli/chunks/{chunk-65TH6RPD.js → chunk-UNYTHZDZ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-FAGKBOX2.js → chunk-UPWLMIDY.js} +2 -2
  151. package/dist/cli/chunks/{chunk-4CB3QPZM.js → chunk-USAKCGHC.js} +2 -2
  152. package/dist/cli/chunks/{chunk-QUJJYTJH.js → chunk-V3MGY76S.js} +2 -2
  153. package/dist/cli/chunks/{chunk-WDEXOLK2.js → chunk-V6SE2ZU2.js} +1 -1
  154. package/dist/cli/chunks/{chunk-JW5PDJ5O.js → chunk-VCVRZD4Y.js} +3 -3
  155. package/dist/cli/chunks/{chunk-TGMXUZZC.js → chunk-VG32EEUG.js} +2 -2
  156. package/dist/cli/chunks/{chunk-MYUMJ2ZI.js → chunk-VGZOPQQY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-BOSMELJX.js → chunk-VJBJRFUO.js} +2 -2
  158. package/dist/cli/chunks/{chunk-K3A3NWT3.js → chunk-WBC6WB32.js} +2 -2
  159. package/dist/cli/chunks/{chunk-QWG3SILX.js → chunk-WCM6WE7G.js} +5 -5
  160. package/dist/cli/chunks/{chunk-GJKZ7UQO.js → chunk-WCPSR4MJ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-U6IXYQO4.js → chunk-WKI46WWN.js} +2 -2
  162. package/dist/cli/chunks/{chunk-NX4BCSOZ.js → chunk-WM2QRIRD.js} +2 -2
  163. package/dist/cli/chunks/{chunk-32UTHIY5.js → chunk-WRC3HLUY.js} +3 -3
  164. package/dist/cli/chunks/{chunk-AJEXPFAB.js → chunk-WUGXXNK4.js} +1 -1
  165. package/dist/cli/chunks/{chunk-NA3F6FEO.js → chunk-WZQADC5R.js} +2 -2
  166. package/dist/cli/chunks/{chunk-SDRJJUPO.js → chunk-X6NJOT3V.js} +1 -1
  167. package/dist/cli/chunks/{chunk-CU36D7TN.js → chunk-X6Q2N5S5.js} +2 -2
  168. package/dist/cli/chunks/{chunk-UIKQPO4Y.js → chunk-X7CUI7KH.js} +2 -2
  169. package/dist/cli/chunks/{chunk-MCPEC6OO.js → chunk-XMCSKYDE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-WTAUF6O4.js → chunk-XN3KCKAM.js} +2 -2
  171. package/dist/cli/chunks/{chunk-TLRHAMX5.js → chunk-XSPMLJCQ.js} +1 -1
  172. package/dist/cli/chunks/{chunk-VUR5THML.js → chunk-XTZGAG6P.js} +2 -2
  173. package/dist/cli/chunks/{chunk-47RMGDG4.js → chunk-YE54T2NQ.js} +2 -2
  174. package/dist/cli/chunks/{chunk-HM3LSFTY.js → chunk-YEFTK4HD.js} +2 -2
  175. package/dist/cli/chunks/{chunk-4HWUECVD.js → chunk-YGC5QKQ4.js} +2 -2
  176. package/dist/cli/chunks/{chunk-SUX5XB2Z.js → chunk-YGOSSVY5.js} +2 -2
  177. package/dist/cli/chunks/{chunk-UJNGGFGX.js → chunk-YKQWIXUY.js} +2 -2
  178. package/dist/cli/chunks/{chunk-SITL5YZV.js → chunk-Z2S7DNFP.js} +2 -2
  179. package/dist/cli/chunks/{chunk-WGTEZT7G.js → chunk-Z54G2YOL.js} +2 -2
  180. package/dist/cli/chunks/{chunk-YNVEDFPQ.js → chunk-ZJGFQK27.js} +1 -1
  181. package/dist/cli/chunks/{chunk-35NW676P.js → chunk-ZUE524JL.js} +2 -2
  182. package/dist/cli/chunks/{ci-BZNWW3I3.js → ci-UMA2SMNW.js} +2 -2
  183. package/dist/cli/chunks/{ci-config-LOHNXOKV.js → ci-config-UQSILJFQ.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-LCOQBSJL.js → ci-output-U6YZLLKH.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-7LRXTLFE.js → circuit-breaker-ATYQP6X2.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-HBU4VWC3.js → claude-flow-setup-6YHFD7AN.js} +2 -2
  187. package/dist/cli/chunks/client-E43GWLQH.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-CO6MLH6X.js → cline-installer-EPE7IOZE.js} +2 -2
  189. package/dist/cli/chunks/{code-SIXBS6JM.js → code-NUEJ4XYO.js} +19 -18
  190. package/dist/cli/chunks/{code-index-extractor-GWJKZ2IQ.js → code-index-extractor-D4DBT6OL.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-6NINVWXJ.js → codex-installer-633SM4LR.js} +2 -2
  192. package/dist/cli/chunks/{completions-7VIX3GML.js → completions-WUKVIW3L.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-FBQR6ZP2.js → complexity-analyzer-F73ACR5H.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-VA7RIXW5.js → continuedev-installer-QH42TKMS.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-4QEBC4MU.js → copilot-installer-Y3XC7BTT.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-GRYKHPWL.js → cost-tracker-57QPV7E3.js} +2 -2
  198. package/dist/cli/chunks/coverage-IBCHMBCR.js +51 -0
  199. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-ZXIPSZVH.js → cursor-installer-F4UYQHIN.js} +2 -2
  201. package/dist/cli/chunks/{daemon-N2VRHPSJ.js → daemon-BYYPIJ7G.js} +4 -4
  202. package/dist/cli/chunks/{daemon-D7F3RGI5.js → daemon-XR4Q6YZF.js} +3 -3
  203. package/dist/cli/chunks/{dag-attention-scheduler-NL6BA7BY.js → dag-attention-scheduler-ZR5ZD3TW.js} +2 -2
  204. package/dist/cli/chunks/{detect-XC2HCIIT.js → detect-GEGYURLL.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-A3Y26MEI.js → dist-node-JU3KT2JO.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-WV6SFXRB.js → domain-handler-7QI3FJGE.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-KJIF6Z2B.js → domain-plugins-O2YRM2PD.js} +2 -2
  208. package/dist/cli/chunks/domain-transfer-7J3S2OS6.js +2 -0
  209. package/dist/cli/chunks/dream-6C4NURSE.js +2 -0
  210. package/dist/cli/chunks/{embed-and-insert-pattern-PA3Y4KGO.js → embed-and-insert-pattern-URES5Q6J.js} +2 -2
  211. package/dist/cli/chunks/{eval-YGEZNUVE.js → eval-RVMCIUOR.js} +2 -2
  212. package/dist/cli/chunks/{experience-capture-middleware-D4T7NW6B.js → experience-capture-middleware-SYJQSBKE.js} +3 -3
  213. package/dist/cli/chunks/{fast-paths-6JYK7RYQ.js → fast-paths-QUKPKWKZ.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-DKXMDVPE.js → feature-flags-5JCSKL2P.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RBH2GDSR.js → feature-flags-K7JXNKJI.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +2 -0
  217. package/dist/cli/chunks/fleet-II4Q6HXK.js +44 -0
  218. package/dist/cli/chunks/{gnn-wrapper-MV54UC4C.js → gnn-wrapper-M7VO2EMS.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-7DKMVQQH.js → heartbeat-handler-ND5CY26N.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-6IWREDQC.js → hnsw-legacy-bridge-N3AUUUU7.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-5BIESSCK.js → hnswlib-node-NZY3E5EN.js} +2 -2
  225. package/dist/cli/chunks/{hooks-3EETRM62.js → hooks-QVJDTII5.js} +10 -10
  226. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-RSWCB2D3.js → hypergraph-engine-ZRY6MTDV.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-552LXKL3.js → hypergraph-handler-56DO4XZQ.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +2 -0
  230. package/dist/cli/chunks/{init-guard-OTDBJ5HD.js → init-guard-DTF4EVUY.js} +2 -2
  231. package/dist/cli/chunks/{init-handler-3FK3TKEA.js → init-handler-M6CNQHMX.js} +6 -6
  232. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +2 -0
  233. package/dist/cli/chunks/kernel-2OWIGGGT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-KZ2O4LF3.js → kilocode-installer-IJN7XKBH.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-MLCCXRF7.js → kiro-installer-UKKPGPDC.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +2 -0
  237. package/dist/cli/chunks/learning-W2HETWQ4.js +131 -0
  238. package/dist/cli/chunks/{llm-router-PDEV3UP2.js → llm-router-Y546K4VX.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +2 -0
  240. package/dist/cli/chunks/{load-XFVVLO7E.js → load-MKAB2AXE.js} +2 -2
  241. package/dist/cli/chunks/load-test-D6QYNIVT.js +2 -0
  242. package/dist/cli/chunks/{mcp-74G3CL2S.js → mcp-AZKUS6K3.js} +2 -2
  243. package/dist/cli/chunks/{memory-XIFM6JNX.js → memory-ZDOQN2KU.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +2 -0
  245. package/dist/cli/chunks/{memory-handlers-ZCKURV6S.js → memory-handlers-3SQVY7FE.js} +2 -2
  246. package/dist/cli/chunks/{multi-model-executor-7L4W3O2Q.js → multi-model-executor-WWVXDHG4.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-BPG422LF.js → opencode-installer-YUJNXXWS.js} +2 -2
  248. package/dist/cli/chunks/{orchestrator-OEAFLAEV.js → orchestrator-Z6PWPLRE.js} +109 -25
  249. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-LOPNCULT.js → pattern-usage-recorder-TPWPX32U.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-VWTYUZB7.js → pipeline-4BBGTE4M.js} +2 -2
  252. package/dist/cli/chunks/{platform-WFJJ3X2E.js → platform-5GSHXCV5.js} +2 -2
  253. package/dist/cli/chunks/{plugin-744TPUSG.js → plugin-OFDVF5HS.js} +2 -2
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-BD5BLNDR.js → prime-radiant-advanced-wasm-NC6MUYGJ.js} +2 -2
  255. package/dist/cli/chunks/project-root-DDGBWDP6.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-JIBILI74.js → protocol-handler-MPOAAEPA.js} +2 -2
  258. package/dist/cli/chunks/{prove-MNOL5FYW.js → prove-CDKMAIVM.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +2 -0
  260. package/dist/cli/chunks/{quality-JEGBDGGX.js → quality-ZH4F7R7R.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-SYJ6ROMI.js → quality-gate-IDRMW6OE.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +2 -0
  263. package/dist/cli/chunks/{real-embeddings-ZWXS5ZFV.js → real-embeddings-I2UVNNB3.js} +2 -2
  264. package/dist/cli/chunks/{ref-validation-RRHUFW2N.js → ref-validation-Z5GCGVXK.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-XFO6JSVN.js → roocode-installer-IZ2S7PH2.js} +2 -2
  266. package/dist/cli/chunks/router-FT5WJPUH.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-L2K3JASE.js → routing-handler-NAX35VUW.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-A6CINHGM.js → ruvector-commands-5YW2SOFF.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +2 -0
  272. package/dist/cli/chunks/{rvf-migration-coordinator-T4RY7L53.js → rvf-migration-coordinator-VUIZHTVG.js} +2 -2
  273. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-IR33TGQS.js → rvf-store-integrity-IPGCAT6C.js} +2 -2
  275. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +2 -0
  276. package/dist/cli/chunks/schedule-CRKTRY2A.js +2 -0
  277. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +2 -0
  278. package/dist/cli/chunks/{security-Z5GDE2IH.js → security-3IH4BO5Z.js} +3 -3
  279. package/dist/cli/chunks/{shared-rvf-adapter-SIZMEHPM.js → shared-rvf-adapter-ABY7PAY2.js} +2 -2
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-HLM65RDS.js → shared-rvf-dual-writer-6KENLN2W.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-SKSZG7P5.js → standalone-memory-RLFAUGOW.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-766YOOMJ.js → status-handler-FCOZBPE5.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-M45FNOLT.js → structural-health-4RDA5UUM.js} +2 -2
  285. package/dist/cli/chunks/{sync-B2U366I3.js → sync-54LUAUTK.js} +2 -2
  286. package/dist/cli/chunks/{sync-6CJ24B5T.js → sync-KGEEXXCC.js} +2 -2
  287. package/dist/cli/chunks/task-handler-K3OXHYKU.js +62 -0
  288. package/dist/cli/chunks/task-handlers-6H7L2UT4.js +9 -0
  289. package/dist/cli/chunks/{test-TODH7KRF.js → test-S7IG6EIX.js} +4 -4
  290. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +2 -0
  291. package/dist/cli/chunks/{test-scheduling-VMVMVRHT.js → test-scheduling-7XYXI4L2.js} +3 -3
  292. package/dist/cli/chunks/{token-bootstrap-XQW7BMCK.js → token-bootstrap-3QMABE45.js} +2 -2
  293. package/dist/cli/chunks/{token-usage-JCZEIRKO.js → token-usage-Y2YTPOFE.js} +2 -2
  294. package/dist/cli/chunks/{transformers-U2ML3OHE.js → transformers-UCJ3HHHC.js} +2 -2
  295. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +2 -0
  296. package/dist/cli/chunks/{types-GGEPCHP6.js → types-6CMFPETH.js} +2 -2
  297. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +2 -0
  298. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +2 -0
  299. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +2 -0
  300. package/dist/cli/chunks/{upgrade-T5GRM7HS.js → upgrade-K25DN6WU.js} +2 -2
  301. package/dist/cli/chunks/{validate-XMUJPLP3.js → validate-T4V3TBY3.js} +2 -2
  302. package/dist/cli/chunks/{validate-swarm-KJLF7JEH.js → validate-swarm-XSRC576T.js} +2 -2
  303. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +2 -0
  304. package/dist/cli/chunks/{web-tree-sitter-LOHVZ7G5.js → web-tree-sitter-YOZXHRTN.js} +2 -2
  305. package/dist/cli/chunks/{windsurf-installer-33FBTXJU.js → windsurf-installer-ITPU2IYL.js} +2 -2
  306. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +2 -0
  307. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-repair-VWBO4NXE.js → witness-chain-repair-YUG7E3UX.js} +2 -2
  309. package/dist/cli/chunks/{witness-chain-verifier-BHJ3ZAEK.js → witness-chain-verifier-DTDSVKOG.js} +2 -2
  310. package/dist/cli/chunks/{witness-key-manager-WNVPH2Z3.js → witness-key-manager-EWACWGAW.js} +2 -2
  311. package/dist/cli/chunks/{workflow-6QR5MQTO.js → workflow-ZIQ4FV42.js} +4 -4
  312. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +2 -0
  313. package/dist/cli/chunks/{wrappers-EHOL62TS.js → wrappers-PW2O27LL.js} +2 -2
  314. package/dist/cli/commands/code.js +6 -0
  315. package/dist/cli/commands/coverage.js +6 -0
  316. package/dist/cli/commands/fleet-run.d.ts +12 -0
  317. package/dist/cli/commands/fleet-run.js +175 -0
  318. package/dist/cli/commands/fleet.js +2 -117
  319. package/dist/cli/commands/learning-prune.d.ts +14 -0
  320. package/dist/cli/commands/learning-prune.js +105 -0
  321. package/dist/cli/commands/learning.js +9 -0
  322. package/dist/cli/handlers/brain-handler.js +12 -1
  323. package/dist/cli/handlers/task-handler.d.ts +5 -0
  324. package/dist/cli/handlers/task-handler.js +20 -0
  325. package/dist/cli/utils/coverage-verdict.js +14 -3
  326. package/dist/cli/utils/fleet-operation.d.ts +5 -2
  327. package/dist/cli/utils/fleet-operation.js +13 -2
  328. package/dist/cli/utils/fleet-result.d.ts +16 -2
  329. package/dist/cli/utils/fleet-result.js +26 -21
  330. package/dist/cli/utils/fleet-shard.d.ts +36 -0
  331. package/dist/cli/utils/fleet-shard.js +110 -0
  332. package/dist/context/compaction/index.d.ts +7 -0
  333. package/dist/context/compaction/index.js +30 -6
  334. package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
  335. package/dist/coordination/handlers/coverage-evidence.d.ts +19 -0
  336. package/dist/coordination/handlers/coverage-evidence.js +31 -2
  337. package/dist/coordination/handlers/coverage-handlers.js +5 -1
  338. package/dist/coordination/handlers/coverage-target.js +8 -1
  339. package/dist/coordination/handlers/handler-types.d.ts +2 -2
  340. package/dist/coordination/handlers/handler-utils.d.ts +6 -0
  341. package/dist/coordination/handlers/handler-utils.js +14 -4
  342. package/dist/coordination/handlers/misc-handlers.js +5 -2
  343. package/dist/coordination/handlers/quality-handlers.js +11 -3
  344. package/dist/coordination/handlers/security-handlers.js +12 -2
  345. package/dist/coordination/protocols/security-audit.js +11 -1
  346. package/dist/coordination/result-saver-adapters.js +1 -0
  347. package/dist/coordination/result-saver.js +9 -5
  348. package/dist/coordination/task-executor.js +7 -2
  349. package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +1 -0
  350. package/dist/domains/chaos-resilience/services/chaos-engineer.js +23 -45
  351. package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
  352. package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
  353. package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
  354. package/dist/domains/code-intelligence/coordinator.js +24 -27
  355. package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
  356. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +43 -5
  357. package/dist/domains/code-intelligence/services/semantic-analyzer.js +134 -71
  358. package/dist/domains/coverage-analysis/collected-metrics.d.ts +26 -0
  359. package/dist/domains/coverage-analysis/collected-metrics.js +54 -0
  360. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +13 -3
  361. package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
  362. package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
  363. package/dist/domains/defect-intelligence/services/defect-predictor.js +3 -6
  364. package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
  365. package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
  366. package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
  367. package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
  368. package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
  369. package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
  370. package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
  371. package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
  372. package/dist/domains/quality-assessment/coordinator.js +10 -4
  373. package/dist/domains/quality-assessment/coverage-report-event.d.ts +8 -0
  374. package/dist/domains/quality-assessment/coverage-report-event.js +22 -1
  375. package/dist/domains/quality-assessment/interfaces.d.ts +8 -0
  376. package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
  377. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +4 -0
  378. package/dist/domains/quality-assessment/services/quality-analyzer.js +63 -17
  379. package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
  380. package/dist/domains/security-compliance/index.d.ts +1 -1
  381. package/dist/domains/security-compliance/interfaces.d.ts +46 -5
  382. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
  383. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
  384. package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
  385. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
  386. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
  387. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
  388. package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
  389. package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
  390. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
  391. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
  392. package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
  393. package/dist/domains/security-compliance/services/scanners/index.js +1 -1
  394. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
  395. package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
  396. package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
  397. package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
  398. package/dist/domains/security-compliance/services/security-auditor.js +106 -65
  399. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  400. package/dist/domains/test-execution/coordinator.js +33 -27
  401. package/dist/domains/test-execution/interfaces.d.ts +10 -0
  402. package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
  403. package/dist/domains/test-execution/services/test-executor.js +22 -4
  404. package/dist/domains/visual-accessibility/coordinator.js +34 -9
  405. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
  406. package/dist/domains/visual-accessibility/plugin.js +5 -0
  407. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
  408. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
  409. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
  410. package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
  411. package/dist/init/phases/07-hooks.js +90 -6
  412. package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
  413. package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +25 -0
  414. package/dist/integrations/ruvector/brain-rvf-exporter.js +154 -61
  415. package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
  416. package/dist/learning/dream/dream-engine.d.ts +24 -1
  417. package/dist/learning/dream/dream-engine.js +57 -6
  418. package/dist/learning/learning-retention.d.ts +103 -0
  419. package/dist/learning/learning-retention.js +213 -0
  420. package/dist/mcp/bundle.js +508 -503
  421. package/dist/mcp/handlers/domain-handler-configs.d.ts +17 -1
  422. package/dist/mcp/handlers/domain-handler-configs.js +33 -16
  423. package/dist/mcp/handlers/handler-factory.js +3 -0
  424. package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
  425. package/dist/mcp/handlers/model-route-handlers.js +139 -0
  426. package/dist/mcp/handlers/orchestrate-routes.js +41 -3
  427. package/dist/mcp/handlers/task-handlers.d.ts +3 -251
  428. package/dist/mcp/handlers/task-handlers.js +6 -828
  429. package/dist/mcp/handlers/task-inference.d.ts +26 -0
  430. package/dist/mcp/handlers/task-inference.js +156 -0
  431. package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
  432. package/dist/mcp/handlers/task-learning-handlers.js +230 -0
  433. package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
  434. package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
  435. package/dist/mcp/protocol-server.js +13 -3
  436. package/dist/mcp/tools/chaos-resilience/inject.d.ts +3 -4
  437. package/dist/mcp/tools/chaos-resilience/inject.js +11 -81
  438. package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
  439. package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
  440. package/dist/mcp/tools/coverage-analysis/index.js +8 -2
  441. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -0
  442. package/dist/mcp/tools/learning-optimization/dream.js +4 -0
  443. package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
  444. package/dist/mcp/tools/visual-accessibility/index.js +29 -13
  445. package/dist/shared/events/domain-events.d.ts +2 -0
  446. package/dist/shared/metrics/code-metrics.js +21 -3
  447. package/dist/shared/parsers/typescript-parser.d.ts +6 -0
  448. package/dist/shared/parsers/typescript-parser.js +13 -1
  449. package/package.json +1 -1
  450. package/dist/cli/chunks/adapter-HL7MOCQN.js +0 -2
  451. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +0 -2
  452. package/dist/cli/chunks/base-WIM7G3HC.js +0 -2
  453. package/dist/cli/chunks/brain-handler-MPC5SPYI.js +0 -94
  454. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +0 -2
  455. package/dist/cli/chunks/chunk-4A76VPU4.js +0 -3
  456. package/dist/cli/chunks/chunk-QSGEBCDB.js +0 -62
  457. package/dist/cli/chunks/chunk-UCSK2RMI.js +0 -2
  458. package/dist/cli/chunks/chunk-VXVTFKRA.js +0 -2
  459. package/dist/cli/chunks/chunk-XCNSGSKV.js +0 -3
  460. package/dist/cli/chunks/chunk-XZOYKB22.js +0 -79
  461. package/dist/cli/chunks/chunk-YIDAXOUX.js +0 -8
  462. package/dist/cli/chunks/client-4PNYDFYS.js +0 -2
  463. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +0 -2
  464. package/dist/cli/chunks/coverage-USPMNKOU.js +0 -50
  465. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +0 -2
  466. package/dist/cli/chunks/domain-transfer-L3F6AES2.js +0 -2
  467. package/dist/cli/chunks/dream-QOB3JCOM.js +0 -2
  468. package/dist/cli/chunks/file-discovery-BN76S2PR.js +0 -2
  469. package/dist/cli/chunks/fleet-43YMXACN.js +0 -46
  470. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +0 -2
  471. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +0 -2
  472. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +0 -2
  473. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +0 -2
  474. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +0 -2
  475. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +0 -2
  476. package/dist/cli/chunks/kernel-2WZOQEZS.js +0 -2
  477. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +0 -2
  478. package/dist/cli/chunks/learning-QUCMBD77.js +0 -122
  479. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +0 -2
  480. package/dist/cli/chunks/load-test-BEWEE44J.js +0 -2
  481. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +0 -2
  482. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +0 -2
  483. package/dist/cli/chunks/project-root-C7ELXZRK.js +0 -2
  484. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +0 -2
  485. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +0 -2
  486. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +0 -2
  487. package/dist/cli/chunks/router-4FTAVYLJ.js +0 -2
  488. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +0 -2
  489. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +0 -2
  490. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +0 -2
  491. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +0 -2
  492. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +0 -2
  493. package/dist/cli/chunks/schedule-CZKD6RIY.js +0 -2
  494. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +0 -2
  495. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +0 -2
  496. package/dist/cli/chunks/task-handler-P6IFLCKP.js +0 -62
  497. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +0 -9
  498. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +0 -2
  499. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +0 -2
  500. package/dist/cli/chunks/unified-memory-FL26RTV3.js +0 -2
  501. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +0 -2
  502. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +0 -2
  503. package/dist/cli/chunks/visual-security-IJVPO5FA.js +0 -2
  504. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +0 -2
  505. package/dist/cli/chunks/witness-chain-V2M32W5D.js +0 -2
  506. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +0 -2
@@ -52,17 +52,11 @@ export class SecurityAuditorService {
52
52
  if (!ecosystem) {
53
53
  return err(new Error(`Unknown manifest format: ${manifest}`));
54
54
  }
55
- const outdatedPackages = [];
56
55
  const { dependencies, preUnchecked } = await this.parseDependenciesForScan(manifest, ecosystem);
57
56
  const advisories = await this.checkDependencyAdvisories(dependencies, preUnchecked);
58
- for (const dep of dependencies) {
59
- const outdated = await this.checkOutdated(dep);
60
- if (outdated) {
61
- outdatedPackages.push(outdated);
62
- }
63
- }
57
+ const outdated = await this.checkOutdatedPackages(dependencies);
64
58
  const summary = this.createDependencySummary(advisories.vulnerabilities, dependencies.length);
65
- const result = this.toDependencyScanResult(advisories, outdatedPackages, summary);
59
+ const result = this.toDependencyScanResult(advisories, outdated, summary);
66
60
  await this.memory.set(`security:deps:${manifestPath.filename}`, result, { namespace: 'security-compliance', ttl: 86400 });
67
61
  return ok(result);
68
62
  }
@@ -73,9 +67,20 @@ export class SecurityAuditorService {
73
67
  async checkPackage(name, version, ecosystem) {
74
68
  try {
75
69
  const vulnerabilities = await this.queryVulnerabilityDatabase(name, version, ecosystem);
76
- const latestVersion = await this.getLatestVersion(name, ecosystem);
77
- const isDeprecated = await this.checkDeprecation(name, ecosystem);
78
- return ok({ name, version, vulnerabilities, latestVersion, isDeprecated });
70
+ // #1052: a failed registry lookup is unchecked, never "not deprecated".
71
+ const registry = await this.lookupRegistry(name, ecosystem);
72
+ const unchecked = !registry.ok
73
+ ? [`latest version and deprecation: ${registry.reason}`]
74
+ : registry.deprecated === null ? [`deprecation: not reported by the ${ecosystem} registry`] : [];
75
+ return ok({
76
+ name,
77
+ version,
78
+ vulnerabilities,
79
+ latestVersion: registry.ok ? registry.version : null,
80
+ isDeprecated: registry.ok ? registry.deprecated : null,
81
+ status: unchecked.length > 0 ? 'incomplete' : 'complete',
82
+ ...(unchecked.length > 0 ? { unchecked } : {}),
83
+ });
79
84
  }
80
85
  catch (error) {
81
86
  return err(toError(error));
@@ -97,17 +102,27 @@ export class SecurityAuditorService {
97
102
  for (const [key, vulns] of byPackage) {
98
103
  const [ecosystem, name] = key.split(':');
99
104
  const currentVersion = vulns[0].location.dependency?.version || 'unknown';
100
- const latestVersion = await this.getLatestVersion(name, ecosystem);
105
+ const registry = await this.lookupRegistry(name, ecosystem);
101
106
  const fixedVersions = vulns
102
107
  .filter((v) => v.id)
103
108
  .map((v) => v.id);
104
- recommendations.push({
105
- package: name,
106
- fromVersion: currentVersion,
107
- toVersion: latestVersion,
108
- fixesVulnerabilities: fixedVersions,
109
- breakingChanges: this.hasBreakingChanges(currentVersion, latestVersion),
110
- });
109
+ // #1052: without a target version the package is unchecked, not "upgrade to unknown".
110
+ recommendations.push(registry.ok
111
+ ? {
112
+ package: name,
113
+ fromVersion: currentVersion,
114
+ toVersion: registry.version,
115
+ fixesVulnerabilities: fixedVersions,
116
+ breakingChanges: this.hasBreakingChanges(currentVersion, registry.version),
117
+ }
118
+ : {
119
+ package: name,
120
+ fromVersion: currentVersion,
121
+ toVersion: null,
122
+ fixesVulnerabilities: fixedVersions,
123
+ breakingChanges: null,
124
+ unchecked: registry.reason,
125
+ });
111
126
  }
112
127
  recommendations.sort((a, b) => b.fixesVulnerabilities.length - a.fixesVulnerabilities.length);
113
128
  return ok(recommendations);
@@ -142,9 +157,26 @@ export class SecurityAuditorService {
142
157
  const overallRiskScore = calculateOverallRisk(sastResults, dastResults, dependencyResults, secretScanResults);
143
158
  const recommendations = generateRecommendations(sastResults, dastResults, dependencyResults, secretScanResults);
144
159
  // #1049: an incomplete advisory lookup leaves dependency risk unmeasured.
160
+ const incompleteChecks = [];
145
161
  if (dependencyResults && dependencyResults.status !== 'complete') {
162
+ incompleteChecks.push(`Dependency scan ${dependencyResults.status}: ${dependencyResults.error ?? 'advisories could not be checked'}`);
146
163
  recommendations.unshift(`${dependencyResults.error ?? 'Dependency advisories could not be checked'}. Dependency risk is unmeasured; re-run the scan when the OSV API is reachable.`);
147
164
  }
165
+ // #1221: a package whose latest version could not be looked up is not "up to date".
166
+ if (dependencyResults && dependencyResults.outdatedStatus !== 'complete' && dependencyResults.outdatedStatus !== 'not-run') {
167
+ const unchecked = dependencyResults.outdatedUnchecked;
168
+ const reasons = [...new Set(unchecked.map((p) => p.reason))].slice(0, 3).join('; ') || 'no reason was recorded';
169
+ // A planning entry (the scan itself failed) is not a package.
170
+ const packages = unchecked.filter((p) => p.name !== PLANNING_ENTRY).length;
171
+ const what = packages > 0 ? `latest version unknown for ${packages} package(s)` : 'no latest version was looked up';
172
+ incompleteChecks.push(`Outdated-package check ${dependencyResults.outdatedStatus}: ${what}: ${reasons}`);
173
+ recommendations.unshift(`${packages > 0 ? `Latest versions could not be looked up for ${packages} package(s)` : 'No latest versions were looked up'} (${reasons}). Whether packages are outdated is unknown.`);
174
+ }
175
+ // #1052: a DAST target that could not be (fully) scanned is not a clean target.
176
+ if (dastResults && dastResults.status !== 'complete') {
177
+ incompleteChecks.push(`DAST scan ${dastResults.status}: ${dastResults.error ?? 'the target was not fully scanned'}`);
178
+ recommendations.unshift(`DAST scan ${dastResults.status} (${dastResults.error ?? 'the target was not fully scanned'}). Dynamic risk is unmeasured for what was not scanned.`);
179
+ }
148
180
  const report = {
149
181
  auditId,
150
182
  timestamp,
@@ -154,6 +186,7 @@ export class SecurityAuditorService {
154
186
  secretScanResults,
155
187
  overallRiskScore,
156
188
  recommendations,
189
+ ...(incompleteChecks.length > 0 ? { incompleteChecks } : {}),
157
190
  };
158
191
  await this.memory.set(`security:audit:${auditId}`, report, { namespace: 'security-compliance', persist: true });
159
192
  return ok(report);
@@ -359,10 +392,12 @@ export class SecurityAuditorService {
359
392
  }),
360
393
  };
361
394
  }
362
- toDependencyScanResult(advisories, outdatedPackages, summary) {
395
+ toDependencyScanResult(advisories, outdated, summary) {
363
396
  return {
364
397
  vulnerabilities: advisories.vulnerabilities,
365
- outdatedPackages,
398
+ outdatedPackages: outdated.outdatedPackages,
399
+ outdatedStatus: outdated.outdatedStatus,
400
+ outdatedUnchecked: outdated.outdatedUnchecked,
366
401
  summary,
367
402
  status: advisories.status,
368
403
  measured: advisories.status === 'complete',
@@ -430,18 +465,30 @@ export class SecurityAuditorService {
430
465
  return 'vulnerable-components';
431
466
  return 'vulnerable-components';
432
467
  }
433
- async checkOutdated(dep) {
434
- const latestVersion = await this.getLatestVersion(dep.name, dep.ecosystem);
435
- // A failed registry lookup ('unknown') is not evidence the package is outdated.
436
- if (latestVersion !== 'unknown' && latestVersion !== dep.version) {
437
- return {
438
- name: dep.name,
439
- currentVersion: dep.version,
440
- latestVersion,
441
- updateType: this.determineUpdateType(dep.version, latestVersion),
442
- };
468
+ /**
469
+ * Look up the latest version of each dependency (#1221). A failed lookup is
470
+ * listed in `outdatedUnchecked` with its reason, never counted as up to date.
471
+ */
472
+ async checkOutdatedPackages(dependencies) {
473
+ const outdatedPackages = [];
474
+ const outdatedUnchecked = [];
475
+ for (const dep of dependencies) {
476
+ const registry = await this.lookupRegistry(dep.name, dep.ecosystem);
477
+ if (!registry.ok) {
478
+ outdatedUnchecked.push({ name: dep.name, version: dep.version, reason: registry.reason });
479
+ }
480
+ else if (registry.version !== dep.version) {
481
+ outdatedPackages.push({
482
+ name: dep.name,
483
+ currentVersion: dep.version,
484
+ latestVersion: registry.version,
485
+ updateType: this.determineUpdateType(dep.version, registry.version),
486
+ });
487
+ }
443
488
  }
444
- return null;
489
+ const outdatedStatus = outdatedUnchecked.length === 0 ? 'complete'
490
+ : outdatedUnchecked.length === dependencies.length ? 'failed' : 'incomplete';
491
+ return { outdatedPackages, outdatedStatus, outdatedUnchecked };
445
492
  }
446
493
  async queryVulnerabilityDatabase(name, version, ecosystem) {
447
494
  const outcome = await this.checkDependencyAdvisories([{ name, version, ecosystem }]);
@@ -450,39 +497,35 @@ export class SecurityAuditorService {
450
497
  }
451
498
  return outcome.vulnerabilities;
452
499
  }
453
- async getLatestVersion(name, ecosystem) {
500
+ /**
501
+ * Latest version and deprecation from the package registry (#1052). A failed
502
+ * lookup says why; it never reads as "not deprecated" or a version.
503
+ * `deprecated` is null when the registry does not report deprecation.
504
+ */
505
+ async lookupRegistry(name, ecosystem) {
454
506
  try {
455
507
  if (ecosystem === 'npm') {
456
508
  const response = await httpGet(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`);
457
- if (response.ok && response.data.version) {
458
- return response.data.version;
459
- }
509
+ if (!response.ok)
510
+ return { ok: false, reason: `npm registry returned HTTP ${response.status}` };
511
+ if (!response.data.version)
512
+ return { ok: false, reason: 'npm registry response has no version' };
513
+ return { ok: true, version: response.data.version, deprecated: Boolean(response.data.deprecated) };
460
514
  }
461
- else if (ecosystem === 'pip') {
515
+ if (ecosystem === 'pip') {
462
516
  const response = await httpGet(`https://pypi.org/pypi/${encodeURIComponent(name)}/json`);
463
- if (response.ok && response.data.info?.version) {
464
- return response.data.info.version;
465
- }
517
+ if (!response.ok)
518
+ return { ok: false, reason: `PyPI returned HTTP ${response.status}` };
519
+ if (!response.data.info?.version)
520
+ return { ok: false, reason: 'PyPI response has no version' };
521
+ return { ok: true, version: response.data.info.version, deprecated: null };
466
522
  }
523
+ return { ok: false, reason: `no registry lookup for ${ecosystem} packages` };
467
524
  }
468
525
  catch (error) {
469
- logger.error(`Failed to get latest version for ${name}:`, error instanceof Error ? error : undefined);
526
+ logger.error(`Registry lookup failed for ${name}:`, error instanceof Error ? error : undefined);
527
+ return { ok: false, reason: `registry lookup failed: ${toError(error).message}` };
470
528
  }
471
- return 'unknown';
472
- }
473
- async checkDeprecation(name, ecosystem) {
474
- try {
475
- if (ecosystem === 'npm') {
476
- const response = await httpGet(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`);
477
- if (response.ok && response.data.deprecated) {
478
- return true;
479
- }
480
- }
481
- }
482
- catch (error) {
483
- logger.error(`Failed to check deprecation for ${name}:`, error instanceof Error ? error : undefined);
484
- }
485
- return false;
486
529
  }
487
530
  determineUpdateType(current, latest) {
488
531
  const currentParts = current.split('.').map(Number);
@@ -534,26 +577,24 @@ export class SecurityAuditorService {
534
577
  }
535
578
  async performDependencyScan() {
536
579
  const startTime = Date.now();
537
- const outdatedPackages = [];
538
580
  const manifestPath = path.join(process.cwd(), 'package.json');
539
581
  try {
540
582
  const { dependencies, preUnchecked } = await this.parseDependenciesForScan(manifestPath, 'npm');
541
583
  const advisories = await this.checkDependencyAdvisories(dependencies, preUnchecked);
542
- for (const dep of dependencies) {
543
- const outdated = await this.checkOutdated(dep);
544
- if (outdated) {
545
- outdatedPackages.push(outdated);
546
- }
547
- }
584
+ const outdated = await this.checkOutdatedPackages(dependencies);
548
585
  const baseSummary = this.createDependencySummary(advisories.vulnerabilities, dependencies.length);
549
- return this.toDependencyScanResult(advisories, outdatedPackages, { ...baseSummary, scanDurationMs: Date.now() - startTime });
586
+ return this.toDependencyScanResult(advisories, outdated, { ...baseSummary, scanDurationMs: Date.now() - startTime });
550
587
  }
551
588
  catch (error) {
552
589
  logger.error('Dependency scan failed:', error instanceof Error ? error : undefined);
553
590
  // #1049: a scan that could not run is failed, never an empty clean result.
591
+ const reason = `Dependency scan of ${manifestPath} failed: ${toError(error).message}`;
554
592
  return {
555
593
  vulnerabilities: [],
556
594
  outdatedPackages: [],
595
+ outdatedStatus: 'failed',
596
+ // #1221: no package list to look up; the planning entry says why.
597
+ outdatedUnchecked: [{ name: PLANNING_ENTRY, version: 'unknown', reason }],
557
598
  summary: {
558
599
  critical: 0, high: 0, medium: 0, low: 0, informational: 0,
559
600
  totalFiles: 0, scanDurationMs: Date.now() - startTime,
@@ -562,7 +603,7 @@ export class SecurityAuditorService {
562
603
  measured: false,
563
604
  packagesChecked: 0,
564
605
  uncheckedPackages: [],
565
- error: `Dependency scan of ${manifestPath} failed: ${toError(error).message}`,
606
+ error: reason,
566
607
  };
567
608
  }
568
609
  }
@@ -126,7 +126,8 @@ export declare class TestExecutionCoordinator extends BaseDomainCoordinator<Test
126
126
  /**
127
127
  * Retry a run's failed tests when retries were requested, and attach what
128
128
  * the retries did to the run (#1130). A test that passed on a retry counts
129
- * as passed and flaky in the run's own counts (#1170).
129
+ * as passed and flaky in the run's own counts (#1170). When that changes
130
+ * the outcome, the run is stored again with it (#1176).
130
131
  */
131
132
  private retryFailures;
132
133
  /**
@@ -23,6 +23,17 @@ import { createMinCutTestOptimizer, } from './services/mincut-test-optimizer.js'
23
23
  export function calculateRetryStrategyConfidence(testCount) {
24
24
  return Math.min(1, 0.7 + (testCount / 100));
25
25
  }
26
+ /** #1176: TestRunCompleted for a run's final outcome, retries applied. */
27
+ function completedPayload(run) {
28
+ return {
29
+ runId: run.runId,
30
+ passed: run.passed,
31
+ failed: run.failed,
32
+ skipped: run.skipped,
33
+ duration: run.duration,
34
+ ...(run.flaky ? { flaky: run.flaky } : {}),
35
+ };
36
+ }
26
37
  const DEFAULT_COORDINATOR_CONFIG = {
27
38
  simulateForTesting: false,
28
39
  enablePrioritization: true,
@@ -141,32 +152,31 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
141
152
  const timeout = request.timeout ?? Math.max(60000, testsToRun.length * 2000);
142
153
  // Use parallel execution by default (unless explicitly disabled)
143
154
  if (request.parallel !== false && testsToRun.length > 1) {
144
- const result = await this.executeParallel({
155
+ // #1176: execute/executeParallel run the retries before they record
156
+ // the run, so its events and learning records see the final outcome.
157
+ return this.executeParallel({
145
158
  testFiles: testsToRun,
146
159
  framework,
147
160
  workers,
148
161
  timeout,
162
+ retryCount: request.retryCount,
149
163
  });
150
- if (result.success)
151
- await this.retryFailures(result.value, request.retryCount);
152
- return result;
153
164
  }
154
165
  // Sequential execution
155
- const result = await this.execute({
166
+ return this.execute({
156
167
  testFiles: testsToRun,
157
168
  framework,
158
169
  timeout,
170
+ retryCount: request.retryCount,
159
171
  });
160
- if (result.success)
161
- await this.retryFailures(result.value, request.retryCount);
162
- return result;
163
172
  }
164
173
  /**
165
174
  * Retry a run's failed tests when retries were requested, and attach what
166
175
  * the retries did to the run (#1130). A test that passed on a retry counts
167
- * as passed and flaky in the run's own counts (#1170).
176
+ * as passed and flaky in the run's own counts (#1170). When that changes
177
+ * the outcome, the run is stored again with it (#1176).
168
178
  */
169
- async retryFailures(run, retryCount) {
179
+ async retryFailures(run, retryCount, testFiles) {
170
180
  if (!retryCount || retryCount <= 0)
171
181
  return;
172
182
  if (run.failed === 0) {
@@ -182,6 +192,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
182
192
  if (!retried.success)
183
193
  return;
184
194
  applyRetryOutcome(run, retried.value);
195
+ await this.executor.recordFinalOutcome(run, testFiles);
185
196
  }
186
197
  /**
187
198
  * Detect test framework from file patterns and project configuration
@@ -244,20 +255,18 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
244
255
  // Remove from active runs
245
256
  this.activeRuns.delete(runId);
246
257
  if (result.success) {
258
+ // #1176: these first-attempt failures did happen; flaky analysis
259
+ // records them even when a retry then passes.
260
+ const firstAttemptFailures = [...result.value.failedTests];
261
+ await this.retryFailures(result.value, request.retryCount, orderedTestFiles);
247
262
  // Record execution results for learning
248
263
  if (this.config.enablePrioritization && prioritizationResult) {
249
264
  await this.recordExecutionResults(runId, orderedTestFiles, result.value, prioritizationResult);
250
265
  }
251
266
  // Publish completion event
252
- await this.publishEvent(TestExecutionEvents.TestRunCompleted, {
253
- runId: result.value.runId,
254
- passed: result.value.passed,
255
- failed: result.value.failed,
256
- skipped: result.value.skipped,
257
- duration: result.value.duration,
258
- });
267
+ await this.publishEvent(TestExecutionEvents.TestRunCompleted, completedPayload(result.value));
259
268
  // Record failed tests for flaky analysis
260
- for (const failed of result.value.failedTests) {
269
+ for (const failed of firstAttemptFailures) {
261
270
  await this.flakyDetector.recordExecution(failed.testId, {
262
271
  runId: result.value.runId,
263
272
  passed: false,
@@ -287,7 +296,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
287
296
  if (this.config.infraHealing && result.value.failedTests.length > 0) {
288
297
  this.feedInfraHealingFromFailures(result.value.failedTests);
289
298
  // ADR-057: Attempt automatic recovery and re-run affected tests
290
- const rerunResult = await this.attemptAutoRecoveryAndRerun(result.value.failedTests, request.framework, { timeout: request.timeout, env: request.env });
299
+ const rerunResult = await this.attemptAutoRecoveryAndRerun(result.value.failedTests, request.framework, { timeout: request.timeout, env: request.env, retryCount: request.retryCount });
291
300
  if (rerunResult)
292
301
  return rerunResult;
293
302
  }
@@ -357,18 +366,14 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
357
366
  // Remove from active runs
358
367
  this.activeRuns.delete(runId);
359
368
  if (result.success) {
369
+ // #1176: retries finish before the run is recorded or announced.
370
+ await this.retryFailures(result.value, request.retryCount, orderedTestFiles);
360
371
  // Record execution results for learning
361
372
  if (this.config.enablePrioritization && prioritizationResult) {
362
373
  await this.recordExecutionResults(runId, orderedTestFiles, result.value, prioritizationResult);
363
374
  }
364
375
  // Publish completion event
365
- await this.publishEvent(TestExecutionEvents.TestRunCompleted, {
366
- runId: result.value.runId,
367
- passed: result.value.passed,
368
- failed: result.value.failed,
369
- skipped: result.value.skipped,
370
- duration: result.value.duration,
371
- });
376
+ await this.publishEvent(TestExecutionEvents.TestRunCompleted, completedPayload(result.value));
372
377
  // Check for flaky tests based on history
373
378
  for (const failed of result.value.failedTests) {
374
379
  const flakinessScore = await this.flakyDetector.getFlakinessScore(failed.testId);
@@ -402,7 +407,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
402
407
  if (this.config.infraHealing && result.value.failedTests.length > 0) {
403
408
  this.feedInfraHealingFromFailures(result.value.failedTests);
404
409
  // ADR-057: Attempt automatic recovery and re-run affected tests
405
- const rerunResult = await this.attemptAutoRecoveryAndRerun(result.value.failedTests, request.framework, { timeout: request.timeout, env: request.env });
410
+ const rerunResult = await this.attemptAutoRecoveryAndRerun(result.value.failedTests, request.framework, { timeout: request.timeout, env: request.env, retryCount: request.retryCount });
406
411
  if (rerunResult)
407
412
  return rerunResult;
408
413
  }
@@ -624,6 +629,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
624
629
  framework,
625
630
  timeout: originalRequest.timeout,
626
631
  env: originalRequest.env,
632
+ retryCount: originalRequest.retryCount,
627
633
  });
628
634
  }
629
635
  /**
@@ -54,6 +54,11 @@ export interface IExecuteTestsRequest {
54
54
  timeout?: number;
55
55
  env?: Record<string, string>;
56
56
  reporters?: string[];
57
+ /**
58
+ * #1176: retries of each failed test. They run before the run is recorded
59
+ * or TestRunCompleted is published, so both carry the final outcome.
60
+ */
61
+ retryCount?: number;
57
62
  }
58
63
  export interface IParallelExecutionRequest extends IExecuteTestsRequest {
59
64
  workers: number;
@@ -123,6 +128,11 @@ export interface IFileCoverageData {
123
128
  /** `null` = no functions in the file (istanbul 0/0): not collected, not 100% (#1015). */
124
129
  function: number | null;
125
130
  statement: number | null;
131
+ /** #1219: the line counts behind `line`, when the report has them. */
132
+ lines?: {
133
+ covered: number;
134
+ total: number;
135
+ };
126
136
  }
127
137
  export interface IFailedTest {
128
138
  testId: string;
@@ -71,6 +71,12 @@ export declare class TestExecutorService implements ITestExecutionService {
71
71
  * Execute tests in parallel across multiple workers
72
72
  */
73
73
  executeParallel(request: ParallelExecutionRequest): Promise<Result<TestRunResult, Error>>;
74
+ /**
75
+ * #1176: record a run again after its retries changed the outcome, so the
76
+ * stored run, its testsPassing evidence and its coverage runStatus are the
77
+ * final ones rather than the first attempt's.
78
+ */
79
+ recordFinalOutcome(run: TestRunResult, testFiles?: readonly string[]): Promise<void>;
74
80
  /**
75
81
  * Get results for a specific run
76
82
  */
@@ -16,7 +16,7 @@ import { safeJsonParse } from '../../../shared/safe-json.js';
16
16
  import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-random.js';
17
17
  import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
18
18
  import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
19
- import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
19
+ import { fileCoverageKey, projectFileCoverageKeys } from '../../coverage-analysis/collected-metrics.js';
20
20
  import { mergeTestCases, redactFailedTests, redactFailureText, testCasesFromRunnerReport } from './runner-test-cases.js';
21
21
  import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
22
22
  import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
@@ -157,6 +157,15 @@ export class TestExecutorService {
157
157
  return err(toError(error));
158
158
  }
159
159
  }
160
+ /**
161
+ * #1176: record a run again after its retries changed the outcome, so the
162
+ * stored run, its testsPassing evidence and its coverage runStatus are the
163
+ * final ones rather than the first attempt's.
164
+ */
165
+ async recordFinalOutcome(run, testFiles) {
166
+ this.runResults.set(run.runId, run);
167
+ await this.storeResults(run.runId, run, testFiles);
168
+ }
160
169
  /**
161
170
  * Get results for a specific run
162
171
  */
@@ -1105,6 +1114,7 @@ Provide:
1105
1114
  branch: ratio(branches),
1106
1115
  function: ratio(fns),
1107
1116
  statement: ratio(statements),
1117
+ lines: { covered: lines[0], total: lines[1] },
1108
1118
  });
1109
1119
  for (const [key, [covered, count]] of [['line', lines], ['branch', branches], ['function', fns], ['statement', statements]]) {
1110
1120
  totals[key][0] += covered;
@@ -1162,12 +1172,15 @@ Provide:
1162
1172
  const line = summaryPct(entry?.lines);
1163
1173
  if (line !== null) {
1164
1174
  // #1015: a metric with total 0 is not collected (null), not its 100 pct.
1175
+ const counts = entry.lines;
1165
1176
  perFile.push({
1166
1177
  path: normalizedPath,
1167
1178
  line,
1168
1179
  branch: summaryPct(entry.branches),
1169
1180
  function: summaryPct(entry.functions),
1170
1181
  statement: summaryPct(entry.statements),
1182
+ ...(typeof counts?.covered === 'number' && typeof counts.total === 'number'
1183
+ ? { lines: { covered: counts.covered, total: counts.total } } : {}),
1171
1184
  });
1172
1185
  }
1173
1186
  }
@@ -1246,16 +1259,21 @@ Provide:
1246
1259
  }, { persist: true });
1247
1260
  // Store per-file coverage via memory.set() (not storeVector) so that
1248
1261
  // quality-analyzer's getStoredCoverage() can read it with memory.get()
1262
+ // #1027 N7: one key form — the absolute path. #1030: only files inside
1263
+ // the project, each listed once.
1264
+ const keys = projectFileCoverageKeys((result.fileCoverages ?? []).map(fc => fc.path));
1249
1265
  for (const fc of result.fileCoverages ?? []) {
1250
- if (!Number.isFinite(fc.line))
1266
+ const key = keys.get(fc.path);
1267
+ if (!key || !Number.isFinite(fc.line))
1251
1268
  continue;
1252
- // #1027 N7: one key form — the absolute path.
1253
- await this.memory.set(`coverage:file:${fileCoverageKey(fc.path)}`, {
1269
+ await this.memory.set(`coverage:file:${key}`, {
1254
1270
  line: fc.line,
1255
1271
  branch: fc.branch ?? null,
1256
1272
  function: fc.function ?? null,
1257
1273
  statement: fc.statement ?? null,
1258
1274
  measured: true,
1275
+ // #1219: the counts behind `line`, so several files can be line-weighted.
1276
+ ...(fc.lines ? { lines: fc.lines } : {}),
1259
1277
  runStatus,
1260
1278
  }, { persist: true });
1261
1279
  }
@@ -298,13 +298,23 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
298
298
  }
299
299
  this.addAgentToWorkflow(workflowId, agentResult.value);
300
300
  const reports = [];
301
+ const notMeasured = [];
301
302
  let totalViolations = 0;
302
303
  let criticalViolations = 0;
303
304
  let passingUrls = 0;
304
305
  for (let i = 0; i < urls.length; i++) {
305
306
  const url = urls[i];
306
307
  const auditResult = await this.accessibilityTester.audit(url, { wcagLevel: level });
307
- if (auditResult.success) {
308
+ if (!auditResult.success) {
309
+ notMeasured.push({ url, reason: auditResult.error.message });
310
+ }
311
+ else if (auditResult.value.measured !== true) {
312
+ // #1145: an unmeasured page is reported as such, never as a pass,
313
+ // a fail or a finding, and no audit event is published for it.
314
+ reports.push(auditResult.value);
315
+ notMeasured.push({ url, reason: auditResult.value.notMeasuredReason ?? 'not measured' });
316
+ }
317
+ else {
308
318
  const report = auditResult.value;
309
319
  reports.push(report);
310
320
  totalViolations += report.violations.length;
@@ -319,12 +329,14 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
319
329
  }
320
330
  this.updateWorkflowProgress(workflowId, ((i + 1) / urls.length) * 100);
321
331
  }
322
- // Calculate average score
323
- const averageScore = reports.length > 0
324
- ? Math.round(reports.reduce((sum, r) => sum + r.score, 0) / reports.length)
325
- : 0;
326
- // Identify top issues
327
- const topIssues = this.identifyTopIssues(reports);
332
+ // Scores and top issues cover measured pages only (#1145)
333
+ const measuredReports = reports.filter((r) => r.measured === true);
334
+ const averageScore = measuredReports.length > 0
335
+ ? Math.round(measuredReports.reduce((sum, r) => sum + r.score, 0) / measuredReports.length)
336
+ : -1;
337
+ const topIssues = this.identifyTopIssues(measuredReports);
338
+ const status = notMeasured.length === 0 ? 'measured'
339
+ : measuredReports.length === 0 ? 'not-measured' : 'partial';
328
340
  const auditReport = {
329
341
  totalUrls: urls.length,
330
342
  passingUrls,
@@ -333,6 +345,14 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
333
345
  averageScore,
334
346
  reports,
335
347
  topIssues,
348
+ status,
349
+ measuredUrls: measuredReports.length,
350
+ notMeasured,
351
+ ...(notMeasured.length > 0 ? {
352
+ message: `Accessibility NOT MEASURED for ${notMeasured.length} of ${urls.length} URL(s); ` +
353
+ 'they count as neither passing nor failing and contribute no findings. ' +
354
+ notMeasured.map((n) => `${n.url}: ${n.reason}`).join('; '),
355
+ } : {}),
336
356
  };
337
357
  this.completeWorkflow(workflowId);
338
358
  await this.agentCoordinator.stop(agentResult.value);
@@ -512,8 +532,9 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
512
532
  return err(result.error);
513
533
  }
514
534
  const report = result.value.reports[0];
515
- if (!report) {
516
- return ok({ violations: [], wcagLevel: options.wcagLevel, score: 100 });
535
+ if (!report || report.measured !== true) {
536
+ // #1145: no measured report is not a clean pass
537
+ return err(new Error(result.value.message ?? `Accessibility NOT MEASURED for ${options.url}`));
517
538
  }
518
539
  return ok({
519
540
  violations: report.violations,
@@ -562,6 +583,10 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
562
583
  if (!auditResult.success) {
563
584
  return err(auditResult.error);
564
585
  }
586
+ if (auditResult.value.measured !== true) {
587
+ return err(new Error(`Color contrast NOT MEASURED for ${options.url}: ` +
588
+ `${auditResult.value.notMeasuredReason ?? 'not audited'}. No findings were produced.`));
589
+ }
565
590
  // Filter for color contrast violations
566
591
  const contrastViolations = auditResult.value.violations.filter((v) => v.id.includes('color-contrast') || v.id.includes('contrast'));
567
592
  const issues = contrastViolations.flatMap((violation) => violation.nodes.map((node) => ({