agentic-qe 3.15.9 → 3.15.10

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 (568) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +251 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
  5. package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
  6. package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
  7. package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
  8. package/dist/adapters/ag-ui/json-patch.js +10 -6
  9. package/dist/audit/witness-chain.d.ts +1 -1
  10. package/dist/cli/bundle.js +6 -6
  11. package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
  12. package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
  13. package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-SVXSHEET.js} +2 -2
  14. package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-WKQH36XL.js} +2 -2
  15. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
  16. package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-EKOOFVST.js} +2 -2
  17. package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-OPS36NFZ.js} +4 -4
  18. package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-AO5NDZRI.js} +3 -3
  19. package/dist/cli/chunks/base-GTB6POYE.js +2 -0
  20. package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-TFLVEMMY.js} +2 -2
  21. package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-ADBBJPYW.js} +3 -3
  22. package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-HGHUYYL5.js} +2 -2
  23. package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
  24. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
  25. package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-2SXBBUM6.js} +2 -2
  26. package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-2T7RRL6G.js} +1 -1
  27. package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-2XGVTYVX.js} +2 -2
  28. package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-2ZI5FKSF.js} +2 -2
  29. package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
  30. package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-37OWRCUN.js} +1 -1
  31. package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-3P34JFQH.js} +4 -4
  32. package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-3Y7SPD72.js} +2 -2
  33. package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-4G63WT4F.js} +2 -2
  34. package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
  35. package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
  36. package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-5LPYV3TK.js} +1 -1
  37. package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-62OAY5KJ.js} +1 -1
  38. package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-6C3II5OM.js} +2 -2
  39. package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-6GP6W46M.js} +2 -2
  40. package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-6KIL6CMD.js} +2 -2
  41. package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-6MVVSSID.js} +1 -1
  42. package/dist/cli/chunks/{chunk-JEP4ULR6.js → chunk-6P7424AO.js} +2 -2
  43. package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-6PX4OXQO.js} +2 -2
  44. package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-6S3WJGUV.js} +2 -2
  45. package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-6TB6YOCZ.js} +1 -1
  46. package/dist/cli/chunks/{chunk-VU2EL424.js → chunk-6X5DHU6Q.js} +1 -1
  47. package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-6XCMKIZN.js} +1 -1
  48. package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-7LFZ4CHM.js} +2 -2
  49. package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-7OZVZIBE.js} +2 -2
  50. package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-7PJIR4ST.js} +2 -2
  51. package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-7TB6FK4B.js} +1 -1
  52. package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-7ZCDZHDB.js} +2 -2
  53. package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-A55QKKT2.js} +2 -2
  54. package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ABFFWZPC.js} +428 -433
  55. package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-ACWFKES2.js} +2 -2
  56. package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-AH3ZD3NJ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-AI4VYSFS.js} +2 -2
  58. package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
  59. package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
  60. package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-B6LTH6YV.js} +2 -2
  61. package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
  62. package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-C522H7XR.js} +54 -33
  63. package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-CESIR27V.js} +2 -2
  64. package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-CFBEBXLO.js} +3 -3
  65. package/dist/cli/chunks/{chunk-FJ4VTLLK.js → chunk-CMBLM26R.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-CZ2IF6MC.js} +1 -1
  67. package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-CZGOSJQ4.js} +2 -2
  68. package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-D6DA2KFD.js} +2 -2
  69. package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-DBMNJSBV.js} +1 -1
  70. package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-DE4YJQJF.js} +2 -2
  71. package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-DEF34AFL.js} +2 -2
  72. package/dist/cli/chunks/chunk-DKAC3E3B.js +3 -0
  73. package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-DMFTELBS.js} +2 -2
  74. package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-DNRWGATA.js} +10 -10
  75. package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-DT7SIJOA.js} +2 -2
  76. package/dist/cli/chunks/{chunk-6PXA2BQJ.js → chunk-DURHK377.js} +67 -67
  77. package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EAU5KDFO.js} +1 -1
  78. package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-EDLFX4ZB.js} +2 -2
  79. package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-EN2QSKFF.js} +2 -2
  80. package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-ERQKYIP7.js} +2 -2
  81. package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-ESUO3GTJ.js} +2 -2
  82. package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EWFECZ2U.js} +2 -2
  83. package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-FAUCT5KR.js} +3 -3
  84. package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-FB6TI3BH.js} +2 -2
  85. package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-FBXTQNRH.js} +2 -2
  86. package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-FESZBPUB.js} +2 -2
  87. package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
  88. package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-FKL3R5JQ.js} +2 -2
  89. package/dist/cli/chunks/{chunk-N5PDFGCQ.js → chunk-FPUDRSFJ.js} +2 -2
  90. package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-FZOWULMH.js} +1 -1
  91. package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-G3CZCUPM.js} +2 -2
  92. package/dist/cli/chunks/{chunk-FV3NHVC7.js → chunk-G5I6KGMW.js} +3 -3
  93. package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-GHBNRMSJ.js} +2 -2
  94. package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GJHWY3ZX.js} +2 -2
  95. package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-GJMLK5UT.js} +2 -2
  96. package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-GRCIBCJ2.js} +2 -2
  97. package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-GWZZ7DAO.js} +2 -2
  98. package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-GZLZCZ42.js} +2 -2
  99. package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-H2PYU7MN.js} +1 -1
  100. package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-H32EPIR2.js} +1 -1
  101. package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-H74Q7TJN.js} +1 -1
  102. package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
  103. package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-I33O4BRQ.js} +2 -2
  104. package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-IKISCIGH.js} +2 -2
  105. package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-IPJ7Q3AJ.js} +1 -1
  106. package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-IU2IV4NE.js} +1 -1
  107. package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-JHIY4VCC.js} +2 -2
  108. package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-KG336OV3.js} +2 -2
  109. package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-KI73QCR5.js} +2 -2
  110. package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-KNQ2ERFX.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-KOBVYY6H.js} +2 -2
  112. package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-KSIWGGJI.js} +8 -8
  113. package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LMS3Y7JD.js} +2 -2
  114. package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-LQEURY7C.js} +1 -1
  115. package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-LRZY4KS2.js} +2 -2
  116. package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-M2QV7PT7.js} +2 -2
  117. package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-MA7JIQ6U.js} +2 -2
  118. package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-MG27QY4D.js} +2 -2
  119. package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
  120. package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
  121. package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
  122. package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-NGKNYIQZ.js} +1 -1
  123. package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
  124. package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-NPPHWFA2.js} +3 -3
  125. package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-NSHU347M.js} +1 -1
  126. package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-NVYIZCSR.js} +2 -2
  127. package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-NW5JUCCG.js} +1 -1
  128. package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-NZYLNXT6.js} +3 -3
  129. package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-OBAREPDC.js} +2 -2
  130. package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-ODJNUMV3.js} +2 -2
  131. package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-OEKP73MC.js} +2 -2
  132. package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-OPFGRS5S.js} +2 -2
  133. package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-OY2AHLSF.js} +1 -1
  134. package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-OY3NJNP2.js} +1 -1
  135. package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-PCEW6Q2C.js} +1 -1
  136. package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-PFG6VQ5Z.js} +2 -2
  137. package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-PGYMKGOE.js} +2 -2
  138. package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-PPSAMXYN.js} +3 -3
  139. package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
  140. package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-RPHY2DU6.js} +2 -2
  141. package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-RWWOHCMG.js} +25 -20
  142. package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-S75EYIJG.js} +1 -1
  143. package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-SKQUUE4F.js} +5 -5
  144. package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
  145. package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-SU5H66SD.js} +2 -2
  146. package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-SY2IB442.js} +2 -2
  147. package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-TBLI254A.js} +2 -2
  148. package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-TNMBRDCA.js} +3 -3
  149. package/dist/cli/chunks/{chunk-P2CXVNKK.js → chunk-TYFZXDGZ.js} +2 -2
  150. package/dist/cli/chunks/{chunk-2XITOPYV.js → chunk-U4OICXV2.js} +2 -2
  151. package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-U53ZB4IX.js} +2 -2
  152. package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
  153. package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-UCJMVXO4.js} +2 -2
  154. package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-UHTTW3IT.js} +2 -2
  155. package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-V2M2XCR5.js} +1 -1
  156. package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-V2RSNVMW.js} +1 -1
  157. package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-V6JBOIMX.js} +1 -1
  158. package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-VFKF2XO7.js} +1 -1
  159. package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-VFSYMOAL.js} +2 -2
  160. package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-VJQYDYAJ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-VKRTTFB6.js} +2 -2
  162. package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-VWNFAW2M.js} +2 -2
  163. package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-WBM6N6IM.js} +1 -1
  164. package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-WDQ7IEZY.js} +2 -2
  165. package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-WDVRE6GN.js} +2 -2
  166. package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-WQ4PYWSW.js} +1 -1
  167. package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-WSF24I3D.js} +2 -2
  168. package/dist/cli/chunks/{chunk-6YL6JOQB.js → chunk-XBVUVFJK.js} +2 -2
  169. package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-XEB3NLJR.js} +2 -2
  170. package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-XFVTGAAJ.js} +2 -2
  171. package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-XLZYRTNO.js} +2 -2
  172. package/dist/cli/chunks/{chunk-AR2E4B7K.js → chunk-XUZDBQ5X.js} +5 -5
  173. package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-Y76IAYQD.js} +1 -1
  174. package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-YAKGBHO4.js} +2 -2
  175. package/dist/cli/chunks/{chunk-JK2ME6IT.js → chunk-YBSBABOS.js} +2 -2
  176. package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-YCGP5VFP.js} +2 -2
  177. package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-YDAQK5UF.js} +1 -1
  178. package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-YK3BVZY6.js} +2 -2
  179. package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-YK7JN5N7.js} +4 -4
  180. package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-YKMU4LBV.js} +1 -1
  181. package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-YYTGXD3R.js} +2 -2
  182. package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-Z2O2YJAF.js} +2 -2
  183. package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-Z7IYW5U7.js} +1 -1
  184. package/dist/cli/chunks/{chunk-XZJ2O3VC.js → chunk-ZG5666GJ.js} +1 -1
  185. package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-ZXPY654C.js} +1 -1
  186. package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-MSKMVH5X.js} +2 -2
  187. package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-7ODMNAUM.js} +2 -2
  188. package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-FXZ7ZZW3.js} +2 -2
  189. package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-4VOUEPOX.js} +2 -2
  190. package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-7D4SGLM4.js} +2 -2
  191. package/dist/cli/chunks/client-POSVREVS.js +2 -0
  192. package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-WRRT7BGQ.js} +2 -2
  193. package/dist/cli/chunks/{code-ONKLMVQ2.js → code-ZDJRIL3S.js} +3 -3
  194. package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4S4SHM56.js} +2 -2
  195. package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-YTRHNDWR.js} +2 -2
  196. package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-6N64JUXJ.js} +2 -2
  197. package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
  198. package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-IIDR66LB.js} +2 -2
  199. package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-SVVFY3S2.js} +2 -2
  200. package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
  201. package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-VGFS6IBX.js} +2 -2
  202. package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B7MCGNTE.js} +3 -3
  203. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
  204. package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-UPETT57E.js} +2 -2
  205. package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
  206. package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-CQFNZLXU.js} +3 -3
  207. package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-PJVABHON.js} +2 -2
  208. package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-56SKAGWX.js} +2 -2
  209. package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-UYTYUMLN.js} +2 -2
  210. package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-YOYLBYJE.js} +2 -2
  211. package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-7TARX2XF.js} +2 -2
  212. package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
  213. package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
  214. package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
  215. package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-GNB574IM.js} +2 -2
  216. package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
  217. package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-KTZ5SF54.js} +2 -2
  218. package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-ITX5LQ57.js} +2 -2
  219. package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-KFHSR5YF.js} +2 -2
  220. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
  221. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
  222. package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-RLFW3GSX.js} +2 -2
  223. package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-EM2URCYZ.js} +4 -4
  224. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
  225. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
  226. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
  227. package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
  228. package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-CBP73QHY.js} +2 -2
  229. package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-IP7XE34Z.js} +34 -34
  230. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
  231. package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-ONAYHU25.js} +2 -2
  232. package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-VINJRAID.js} +3 -3
  233. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
  234. package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-RYVV5R3Z.js} +2 -2
  235. package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-MPRGWMOE.js} +6 -6
  236. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
  237. package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
  238. package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-OPD7JBRL.js} +2 -2
  239. package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-M4OPUNK2.js} +2 -2
  240. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
  241. package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-4UWTQLMF.js} +24 -24
  242. package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-SQ56FF6Z.js} +4 -4
  243. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
  244. package/dist/cli/chunks/{load-ZM43WGDO.js → load-HPHKDGGL.js} +2 -2
  245. package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
  246. package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
  247. package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-PFQ3KPVJ.js} +5 -5
  248. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
  249. package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
  250. package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-3VDRX6TZ.js} +2 -2
  251. package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-PJ576R63.js} +2 -2
  252. package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-72QP4UU7.js} +63 -19
  253. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
  254. package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-754YQW7C.js} +2 -2
  255. package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
  256. package/dist/cli/chunks/{platform-KJDABL5C.js → platform-3E3DXLYB.js} +2 -2
  257. package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-7FUQAKRE.js} +2 -2
  258. package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
  259. package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
  260. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
  261. package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-BQRYMUTG.js} +2 -2
  262. package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-H52QGC6B.js} +2 -2
  263. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
  264. package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-QO4XPAUM.js} +2 -2
  265. package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-FBKE5E6F.js} +3 -3
  266. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
  267. package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RWGOVOXO.js} +2 -2
  268. package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-LF76ZOBD.js} +2 -2
  269. package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-3BYEBTQ7.js} +2 -2
  270. package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
  271. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
  272. package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-DST7BVCU.js} +2 -2
  273. package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-XE32PGKC.js} +2 -2
  274. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
  275. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
  276. package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
  277. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
  278. package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
  279. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
  280. package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
  281. package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
  282. package/dist/cli/chunks/{security-AUDTRX3I.js → security-VSPNKCDS.js} +3 -3
  283. package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
  284. package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
  285. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
  286. package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-O4QUTK6L.js} +2 -2
  287. package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-Z2BP6EOG.js} +2 -2
  288. package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-R36WNLQG.js} +2 -2
  289. package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
  290. package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-QF5Y3EMZ.js} +2 -2
  291. package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-43PYE75J.js} +2 -2
  292. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
  293. package/dist/cli/chunks/{test-XFSGQELD.js → test-UWA377D4.js} +16 -16
  294. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
  295. package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-YQZPJRRN.js} +3 -3
  296. package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
  297. package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-DO6WLMXP.js} +2 -2
  298. package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-H5RGFKVO.js} +2 -2
  299. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
  300. package/dist/cli/chunks/{types-JTWLBAZJ.js → types-PJS2FGPF.js} +2 -2
  301. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
  302. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
  303. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
  304. package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-4IC4F6AB.js} +2 -2
  305. package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-DHUWW7PF.js} +2 -2
  306. package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-OERQNOX5.js} +2 -2
  307. package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
  308. package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-TV7DMKES.js} +2 -2
  309. package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-QZPWSH37.js} +2 -2
  310. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
  311. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
  312. package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
  313. package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-YXENHB42.js} +2 -2
  314. package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-HL26AGFO.js} +2 -2
  315. package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-EOVVCN2E.js} +4 -4
  316. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
  317. package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
  318. package/dist/cli/commands/fleet.js +19 -12
  319. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
  320. package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
  321. package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
  322. package/dist/cli/commands/learning.js +5 -3
  323. package/dist/cli/commands/ruvector-commands.js +2 -1
  324. package/dist/cli/commands/test.js +6 -0
  325. package/dist/cli/utils/ci-output.d.ts +9 -0
  326. package/dist/cli/utils/fleet-operation.d.ts +32 -0
  327. package/dist/cli/utils/fleet-operation.js +71 -0
  328. package/dist/cli/utils/fleet-result.d.ts +31 -0
  329. package/dist/cli/utils/fleet-result.js +124 -0
  330. package/dist/context/sources/git-source.js +6 -2
  331. package/dist/coordination/handlers/code-intelligence-handlers.js +60 -5
  332. package/dist/coordination/handlers/coverage-handlers.js +10 -1
  333. package/dist/coordination/handlers/requirements-handlers.js +16 -2
  334. package/dist/coordination/handlers/security-handlers.js +11 -1
  335. package/dist/coordination/handlers/test-execution-handlers.js +25 -7
  336. package/dist/coordination/mincut/queen-integration.d.ts +39 -1
  337. package/dist/coordination/mincut/queen-integration.js +83 -6
  338. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
  339. package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
  340. package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
  341. package/dist/coordination/protocols/learning-consolidation.js +71 -22
  342. package/dist/coordination/queen-coordinator.d.ts +1 -1
  343. package/dist/coordination/queen-coordinator.js +19 -7
  344. package/dist/coordination/queen-event-handlers.js +13 -0
  345. package/dist/coordination/queen-task-management.d.ts +18 -24
  346. package/dist/coordination/queen-task-management.js +62 -168
  347. package/dist/coordination/queen-task-queue.d.ts +41 -0
  348. package/dist/coordination/queen-task-queue.js +194 -0
  349. package/dist/coordination/queen-types.d.ts +1 -1
  350. package/dist/coordination/queen-work-stealing.d.ts +6 -1
  351. package/dist/coordination/queen-work-stealing.js +7 -4
  352. package/dist/coordination/result-saver-adapters.d.ts +15 -0
  353. package/dist/coordination/result-saver-adapters.js +57 -0
  354. package/dist/coordination/result-saver.d.ts +1 -1
  355. package/dist/coordination/result-saver.js +8 -5
  356. package/dist/coordination/yaml-pipeline-loader.js +5 -2
  357. package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
  358. package/dist/domains/code-intelligence/index-path-guard.js +20 -50
  359. package/dist/domains/code-intelligence/plugin.js +5 -1
  360. package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
  361. package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
  362. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
  363. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
  364. package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
  365. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
  366. package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
  367. package/dist/domains/contract-testing/services/contract-validator.js +6 -4
  368. package/dist/domains/contract-testing/services/schema-validator.js +8 -5
  369. package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
  370. package/dist/domains/defect-intelligence/plugin.js +11 -2
  371. package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
  372. package/dist/domains/defect-intelligence/prediction-history.js +68 -0
  373. package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
  374. package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
  375. package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
  376. package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
  377. package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
  378. package/dist/domains/learning-optimization/active-patterns.js +2 -2
  379. package/dist/domains/learning-optimization/coordinator.js +9 -5
  380. package/dist/domains/learning-optimization/interfaces.d.ts +6 -2
  381. package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
  382. package/dist/domains/learning-optimization/pattern-archive.js +56 -0
  383. package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
  384. package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
  385. package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
  386. package/dist/domains/learning-optimization/reward-source.js +8 -1
  387. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
  388. package/dist/domains/learning-optimization/services/learning-coordinator.js +45 -58
  389. package/dist/domains/security-compliance/plugin.js +17 -3
  390. package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
  391. package/dist/domains/security-compliance/sast-path-guard.js +17 -0
  392. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
  393. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
  394. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
  395. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
  397. package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
  398. package/dist/domains/test-execution/coordinator.d.ts +5 -0
  399. package/dist/domains/test-execution/coordinator.js +35 -20
  400. package/dist/domains/test-execution/interfaces.d.ts +25 -0
  401. package/dist/domains/test-execution/plugin.js +19 -4
  402. package/dist/domains/test-execution/services/flaky-detector.js +9 -7
  403. package/dist/domains/test-execution/services/retry-handler.js +46 -7
  404. package/dist/domains/test-execution/services/runner-test-cases.d.ts +11 -0
  405. package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
  406. package/dist/domains/test-execution/services/test-executor.js +8 -8
  407. package/dist/domains/test-generation/plugin.js +7 -2
  408. package/dist/domains/test-generation/services/test-data-generator.js +3 -1
  409. package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
  410. package/dist/hooks/cross-phase-hooks.js +2 -1
  411. package/dist/init/phases/10-workers.js +50 -6
  412. package/dist/integrations/browser/agent-browser/client.js +37 -52
  413. package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
  414. package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
  415. package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
  416. package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
  417. package/dist/integrations/browser/web-content-fetcher.js +9 -3
  418. package/dist/integrations/vibium/client.js +2 -2
  419. package/dist/integrations/vibium/runtime.d.ts +1 -1
  420. package/dist/integrations/vibium/runtime.js +14 -11
  421. package/dist/kernel/unified-memory-schemas.d.ts +3 -2
  422. package/dist/kernel/unified-memory-schemas.js +3 -2
  423. package/dist/kernel/unified-memory.js +25 -6
  424. package/dist/learning/dream/dream-commit.d.ts +65 -0
  425. package/dist/learning/dream/dream-commit.js +104 -0
  426. package/dist/learning/dream/dream-engine.d.ts +81 -31
  427. package/dist/learning/dream/dream-engine.js +225 -168
  428. package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
  429. package/dist/learning/dream/dream-insights-pruner.js +16 -30
  430. package/dist/learning/dream/index.d.ts +3 -2
  431. package/dist/learning/dream/index.js +3 -1
  432. package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
  433. package/dist/learning/dream/rvcow-branch-manager.js +8 -1
  434. package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
  435. package/dist/learning/dream/speculative-dreamer.js +64 -111
  436. package/dist/learning/dream/spreading-activation.d.ts +2 -1
  437. package/dist/learning/dream/spreading-activation.js +15 -6
  438. package/dist/learning/experience-capture.d.ts +9 -0
  439. package/dist/learning/experience-capture.js +18 -4
  440. package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
  441. package/dist/learning/qe-reasoning-bank.js +22 -11
  442. package/dist/learning/sqlite-persistence.d.ts +6 -0
  443. package/dist/learning/sqlite-persistence.js +16 -2
  444. package/dist/learning/usage-outcome.d.ts +68 -0
  445. package/dist/learning/usage-outcome.js +84 -0
  446. package/dist/mcp/background-workers.d.ts +13 -1
  447. package/dist/mcp/background-workers.js +17 -3
  448. package/dist/mcp/bundle.js +607 -580
  449. package/dist/mcp/handlers/core-handlers.js +11 -0
  450. package/dist/mcp/handlers/domain-handler-configs.d.ts +5 -0
  451. package/dist/mcp/handlers/domain-handler-configs.js +11 -3
  452. package/dist/mcp/handlers/handler-factory.d.ts +2 -1
  453. package/dist/mcp/handlers/handler-factory.js +36 -15
  454. package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
  455. package/dist/mcp/handlers/orchestrate-routes.js +88 -0
  456. package/dist/mcp/handlers/task-handlers.d.ts +3 -0
  457. package/dist/mcp/handlers/task-handlers.js +35 -8
  458. package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
  459. package/dist/mcp/protocol-server.js +2 -0
  460. package/dist/mcp/security/schema-validator.js +3 -2
  461. package/dist/mcp/tools/code-intelligence/c4.js +11 -1
  462. package/dist/mcp/tools/coverage-analysis/index.js +31 -2
  463. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
  464. package/dist/mcp/tools/learning-optimization/dream.js +38 -34
  465. package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
  466. package/dist/mcp/tools/learning-optimization/optimize.js +58 -10
  467. package/dist/mcp/tools/quality-assessment/gate.js +12 -1
  468. package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
  469. package/dist/migration/agent-compat.js +7 -5
  470. package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
  471. package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
  472. package/dist/shared/git/git-analyzer.d.ts +49 -0
  473. package/dist/shared/git/git-analyzer.js +159 -319
  474. package/dist/shared/git/git-process.d.ts +22 -0
  475. package/dist/shared/git/git-process.js +37 -0
  476. package/dist/shared/git/index.d.ts +1 -0
  477. package/dist/shared/git/index.js +1 -0
  478. package/dist/shared/io/payload-path-guard.d.ts +75 -0
  479. package/dist/shared/io/payload-path-guard.js +190 -0
  480. package/dist/shared/llm/router/agent-router-config.js +2 -1
  481. package/dist/shared/llm/translation/tool-translator.js +2 -1
  482. package/dist/shared/test-runner-args.d.ts +5 -0
  483. package/dist/shared/test-runner-args.js +6 -1
  484. package/dist/shared/test-runner-process.d.ts +6 -0
  485. package/dist/shared/test-runner-process.js +14 -0
  486. package/dist/shared/test-runner-verdict.d.ts +9 -1
  487. package/dist/shared/test-runner-verdict.js +15 -4
  488. package/dist/shared/utils/namespaced-search.d.ts +14 -0
  489. package/dist/shared/utils/namespaced-search.js +19 -1
  490. package/dist/shared/utils/safe-expression-evaluator.js +4 -3
  491. package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
  492. package/dist/validation/gate-reexecute.js +7 -4
  493. package/dist/workers/daemon.js +13 -1
  494. package/dist/workers/quality-daemon/git-watcher.js +9 -9
  495. package/dist/workers/workers/defect-predictor.d.ts +8 -3
  496. package/dist/workers/workers/defect-predictor.js +48 -49
  497. package/dist/workers/workers/learning-consolidation.d.ts +2 -0
  498. package/dist/workers/workers/learning-consolidation.js +12 -1
  499. package/dist/workflows/browser/workflow-loader.js +8 -5
  500. package/package.json +1 -1
  501. package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
  502. package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
  503. package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
  504. package/dist/cli/chunks/base-67DXSAYM.js +0 -2
  505. package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
  506. package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
  507. package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
  508. package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
  509. package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
  510. package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
  511. package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
  512. package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
  513. package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
  514. package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
  515. package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
  516. package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
  517. package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
  518. package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
  519. package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
  520. package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
  521. package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
  522. package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
  523. package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
  524. package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
  525. package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
  526. package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
  527. package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
  528. package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
  529. package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
  530. package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
  531. package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
  532. package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
  533. package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
  534. package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
  535. package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
  536. package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
  537. package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
  538. package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
  539. package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
  540. package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
  541. package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
  542. package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
  543. package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
  544. package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
  545. package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
  546. package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
  547. package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
  548. package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
  549. package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
  550. package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
  551. package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
  552. package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
  553. package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
  554. package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
  555. package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
  556. package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
  557. package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
  558. package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
  559. package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
  560. package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
  561. package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
  562. package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
  563. package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
  564. package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
  565. package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
  566. package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
  567. package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
  568. package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
@@ -2,15 +2,25 @@
2
2
  * Agentic QE v3 - DAST (Dynamic Application Security Testing) Scanner
3
3
  * Performs dynamic analysis of running applications to detect security vulnerabilities
4
4
  */
5
- import { LoggerFactory } from '../../../../logging/index.js';
6
5
  import { v4 as uuidv4 } from 'uuid';
7
6
  import { ok, err } from '../../../../shared/types/index.js';
8
7
  import { toError } from '../../../../shared/error-utils.js';
9
8
  import { fetchWithResponseDeadline } from '../../../../shared/llm/providers/response-deadline.js';
10
- import { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, handleFetchError, calculateSummary, storeScanResults, } from './dast-helpers.js';
9
+ import { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, scanSensitiveFiles, analyzeCORS, extractAndCrawlLinks, testXSS, testSQLi, analyzeFormsForSecurityIssues, testAuthorizationBypass, testIDOR, validateCredentials, buildAuthHeaders, calculateSummary, storeScanResults, } from './dast-helpers.js';
11
10
  // ============================================================================
12
11
  // DAST Scanner Service
13
12
  // ============================================================================
13
+ /** Transport failures are execution errors, not absence of vulnerabilities. */
14
+ function dastRequestFailure(error) {
15
+ if (error instanceof Error && 'code' in error && ['DAST_AUTHENTICATION_FAILED', 'DAST_TARGET_UNAVAILABLE'].includes(String(error.code)))
16
+ return error;
17
+ const timeout = error instanceof Error && /timeout|abort/i.test(error.message);
18
+ return Object.assign(new Error(timeout
19
+ ? 'DAST target request timeout; dynamic analysis is incomplete'
20
+ : 'DAST target request failed; dynamic analysis is incomplete'), {
21
+ code: timeout ? 'DAST_REQUEST_TIMEOUT' : 'DAST_REQUEST_FAILED',
22
+ });
23
+ }
14
24
  /**
15
25
  * DAST Scanner - Dynamic Application Security Testing
16
26
  * Scans running applications for security vulnerabilities
@@ -32,7 +42,6 @@ import { analyzeSecurityHeaders, analyzeCookieSecurity, analyzeServerHeaders, sc
32
42
  * - No JavaScript execution (static response analysis only)
33
43
  * - No session management testing beyond cookie attributes
34
44
  */
35
- const logger = LoggerFactory.create('security-compliance/dast-scanner');
36
45
  export class DASTScanner {
37
46
  config;
38
47
  memory;
@@ -90,7 +99,7 @@ export class DASTScanner {
90
99
  // Validate credentials
91
100
  const credValidation = validateCredentials(credentials);
92
101
  if (!credValidation.valid) {
93
- return err(new Error(credValidation.reason));
102
+ throw new Error(credValidation.reason);
94
103
  }
95
104
  const mergedOptions = {
96
105
  maxDepth: options?.maxDepth ?? this.config.dastMaxDepth,
@@ -158,6 +167,12 @@ export class DASTScanner {
158
167
  },
159
168
  redirect: 'follow',
160
169
  }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
170
+ if (response.status === 401 || response.status === 403 || response.status >= 500) {
171
+ await response.body?.cancel().catch(() => undefined);
172
+ throw Object.assign(new Error(`DAST ${response.status < 500 ? 'authentication rejected' : 'target unavailable'} (HTTP ${response.status}); dynamic analysis is incomplete`), {
173
+ code: response.status < 500 ? 'DAST_AUTHENTICATION_FAILED' : 'DAST_TARGET_UNAVAILABLE',
174
+ });
175
+ }
161
176
  crawledUrls++;
162
177
  // Security header analysis
163
178
  analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities);
@@ -190,11 +205,11 @@ export class DASTScanner {
190
205
  }
191
206
  }
192
207
  catch (fetchError) {
193
- handleFetchError(fetchError, targetUrl, vulnerabilities);
208
+ throw dastRequestFailure(fetchError);
194
209
  }
195
210
  }
196
211
  catch (error) {
197
- logger.error('DAST scan error:', error instanceof Error ? error : undefined);
212
+ throw toError(error);
198
213
  }
199
214
  return { vulnerabilities, crawledUrls };
200
215
  }
@@ -231,11 +246,13 @@ export class DASTScanner {
231
246
  redirect: 'follow',
232
247
  }, deadlineMs, () => new Error(`DAST request timeout after ${deadlineMs}ms: ${targetUrl}`));
233
248
  await response.body?.cancel().catch(() => undefined);
234
- crawledUrls++;
235
- // Check if authentication was successful
236
- if (response.status === 401 || response.status === 403) {
237
- vulnerabilities.push(this.createAuthFailedVuln(targetUrl, response.status));
249
+ if (response.status === 401 || response.status === 403 || response.status >= 500) {
250
+ await response.body?.cancel().catch(() => undefined);
251
+ throw Object.assign(new Error(`DAST ${response.status < 500 ? 'authentication rejected' : 'target unavailable'} (HTTP ${response.status}); dynamic analysis is incomplete`), {
252
+ code: response.status < 500 ? 'DAST_AUTHENTICATION_FAILED' : 'DAST_TARGET_UNAVAILABLE',
253
+ });
238
254
  }
255
+ crawledUrls++;
239
256
  // Standard security header checks
240
257
  analyzeSecurityHeaders(response.headers, targetUrl, vulnerabilities, true);
241
258
  // Check for session token in URL
@@ -251,11 +268,11 @@ export class DASTScanner {
251
268
  analyzeCookieSecurity(response.headers, targetUrl, vulnerabilities, true);
252
269
  }
253
270
  catch (fetchError) {
254
- handleFetchError(fetchError, targetUrl, vulnerabilities);
271
+ throw dastRequestFailure(fetchError);
255
272
  }
256
273
  }
257
274
  catch (error) {
258
- logger.error('Authenticated DAST scan error:', error instanceof Error ? error : undefined);
275
+ throw toError(error);
259
276
  }
260
277
  return { vulnerabilities, crawledUrls };
261
278
  }
@@ -286,18 +303,6 @@ export class DASTScanner {
286
303
  references: ['https://owasp.org/www-project-web-security-testing-guide/'],
287
304
  };
288
305
  }
289
- createAuthFailedVuln(targetUrl, status) {
290
- return {
291
- id: uuidv4(),
292
- title: 'Authentication Failed',
293
- description: `Authentication returned ${status} status`,
294
- severity: 'informational',
295
- category: 'broken-auth',
296
- location: { file: targetUrl },
297
- remediation: { description: 'Verify credentials are correct', estimatedEffort: 'trivial', automatable: false },
298
- references: [],
299
- };
300
- }
301
306
  createTokenInUrlVuln(targetUrl, search) {
302
307
  return {
303
308
  id: uuidv4(),
@@ -122,7 +122,10 @@ export class SecurityScannerService {
122
122
  if (dastScan.success) {
123
123
  dastResult = dastScan.value;
124
124
  }
125
- // Don't fail the full scan if DAST fails
125
+ else {
126
+ // A requested phase that did not execute cannot become a full scan.
127
+ return err(dastScan.error);
128
+ }
126
129
  }
127
130
  // Combine summaries
128
131
  const combinedSummary = this.combineSummaries(sastResult.value.summary, dastResult?.summary);
@@ -123,6 +123,11 @@ export declare class TestExecutionCoordinator extends BaseDomainCoordinator<Test
123
123
  * Auto-detects framework and uses sensible defaults
124
124
  */
125
125
  runTests(request: SimpleTestRequest): Promise<Result<TestRunResult, Error>>;
126
+ /**
127
+ * Retry a run's failed tests when retries were requested, and attach what
128
+ * the retries did to the run (#1130). The run's own counts are unchanged.
129
+ */
130
+ private retryFailures;
126
131
  /**
127
132
  * Detect test framework from file patterns and project configuration
128
133
  */
@@ -146,16 +146,8 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
146
146
  workers,
147
147
  timeout,
148
148
  });
149
- // Handle retries if requested and there were failures
150
- if (request.retryCount && request.retryCount > 0 && result.success && result.value.failed > 0) {
151
- const failedTestIds = result.value.failedTests.map(t => t.testId);
152
- await this.retry({
153
- runId: result.value.runId,
154
- failedTests: failedTestIds,
155
- maxRetries: request.retryCount,
156
- backoff: 'exponential',
157
- });
158
- }
149
+ if (result.success)
150
+ await this.retryFailures(result.value, request.retryCount);
159
151
  return result;
160
152
  }
161
153
  // Sequential execution
@@ -164,18 +156,41 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
164
156
  framework,
165
157
  timeout,
166
158
  });
167
- // Handle retries if requested and there were failures
168
- if (request.retryCount && request.retryCount > 0 && result.success && result.value.failed > 0) {
169
- const failedTestIds = result.value.failedTests.map(t => t.testId);
170
- await this.retry({
171
- runId: result.value.runId,
172
- failedTests: failedTestIds,
173
- maxRetries: request.retryCount,
174
- backoff: 'exponential',
175
- });
176
- }
159
+ if (result.success)
160
+ await this.retryFailures(result.value, request.retryCount);
177
161
  return result;
178
162
  }
163
+ /**
164
+ * Retry a run's failed tests when retries were requested, and attach what
165
+ * the retries did to the run (#1130). The run's own counts are unchanged.
166
+ */
167
+ async retryFailures(run, retryCount) {
168
+ if (!retryCount || retryCount <= 0)
169
+ return;
170
+ if (run.failed === 0) {
171
+ run.retries = { totalRetries: 0, nowPassing: 0, stillFailing: 0, tests: [] };
172
+ return;
173
+ }
174
+ const retried = await this.retry({
175
+ runId: run.runId,
176
+ failedTests: run.failedTests.map(t => t.testId),
177
+ maxRetries: retryCount,
178
+ backoff: 'exponential',
179
+ });
180
+ if (!retried.success)
181
+ return;
182
+ const byId = new Map(run.failedTests.map(t => [t.testId, t]));
183
+ run.retries = {
184
+ totalRetries: retried.value.retried,
185
+ nowPassing: retried.value.nowPassing,
186
+ stillFailing: retried.value.stillFailing,
187
+ tests: (retried.value.tests ?? []).map(({ testId, ...outcome }) => ({
188
+ name: byId.get(testId)?.testName ?? testId,
189
+ file: byId.get(testId)?.file ?? '',
190
+ ...outcome,
191
+ })),
192
+ };
193
+ }
179
194
  /**
180
195
  * Detect test framework from file patterns and project configuration
181
196
  */
@@ -78,6 +78,22 @@ export interface ITestRunResult {
78
78
  coverage?: ICoverageData;
79
79
  /** Per-file coverage data for granular quality assessment */
80
80
  fileCoverages?: IFileCoverageData[];
81
+ /** #1130: what the requested retries of failed tests did. Absent when none were requested. */
82
+ retries?: IRunRetrySummary;
83
+ }
84
+ /** #1130: the measured outcome of a run's retries, per failed test. */
85
+ export interface IRunRetrySummary {
86
+ /** Reruns that executed a test (an unmatched retry runs nothing and is not counted). */
87
+ totalRetries: number;
88
+ nowPassing: number;
89
+ stillFailing: number;
90
+ tests: Array<{
91
+ name: string;
92
+ file: string;
93
+ attempts: number;
94
+ passed: boolean;
95
+ unmatched?: boolean;
96
+ }>;
81
97
  }
82
98
  /** One test case taken verbatim from a runner report (#1110). */
83
99
  export interface ITestCaseResult {
@@ -144,6 +160,15 @@ export interface IRetryResult {
144
160
  nowPassing: number;
145
161
  stillFailing: number;
146
162
  flakyDetected: string[];
163
+ /** Failed tests whose retry filter selected no test, so none was rerun (#1141). */
164
+ unmatched?: string[];
165
+ /** #1130: the outcome per retried test. */
166
+ tests?: Array<{
167
+ testId: string;
168
+ attempts: number;
169
+ passed: boolean;
170
+ unmatched?: boolean;
171
+ }>;
147
172
  }
148
173
  export interface IExecutionStats {
149
174
  runId: string;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { err } from '../../shared/types/index.js';
6
6
  import { BaseDomainPlugin } from '../domain-interface.js';
7
+ import { requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
7
8
  import { createTestExecutionCoordinator } from './coordinator.js';
8
9
  import { getGlobalInfraHealing } from '../../strange-loop/infra-healing/global-instance.js';
9
10
  import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
@@ -60,11 +61,22 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
60
61
  if (!this.coordinator) {
61
62
  return err(new Error('Coordinator not initialized'));
62
63
  }
64
+ // #1126: a runner executes the files it is given, so only files and
65
+ // directories (#909 Jest targets) inside the project, passed on as the
66
+ // real paths that were checked. A missing one is still reported by the
67
+ // runner.
68
+ let testFiles;
69
+ if (payload.testFiles !== undefined) {
70
+ const confined = await requirePayloadFiles('execute-tests', 'testFiles', payload.testFiles, { allowMissing: true, allowDirectory: true });
71
+ if (!confined.success)
72
+ return confined;
73
+ testFiles = confined.value;
74
+ }
63
75
  // Support both simple and full request formats
64
- if (payload.testFiles && Array.isArray(payload.testFiles)) {
76
+ if (testFiles) {
65
77
  // Simple request format
66
78
  const request = {
67
- testFiles: payload.testFiles,
79
+ testFiles,
68
80
  parallel: payload.parallel,
69
81
  retryCount: payload.retryCount,
70
82
  timeout: payload.timeout,
@@ -75,7 +87,7 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
75
87
  else if (payload.framework) {
76
88
  // Full request format
77
89
  const request = {
78
- testFiles: payload.testFiles || [],
90
+ testFiles: [],
79
91
  framework: payload.framework,
80
92
  timeout: payload.timeout,
81
93
  env: payload.env,
@@ -96,8 +108,11 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
96
108
  if (!testFiles) {
97
109
  return err(new Error('Invalid detect-flaky payload: missing testFiles'));
98
110
  }
111
+ const confined = await requirePayloadFiles('detect-flaky', 'testFiles', testFiles, { allowMissing: true, allowDirectory: true });
112
+ if (!confined.success)
113
+ return confined;
99
114
  return this.coordinator.detectFlaky({
100
- testFiles,
115
+ testFiles: confined.value,
101
116
  runs: runs ?? 5,
102
117
  threshold: threshold ?? 0.1,
103
118
  });
@@ -15,6 +15,7 @@ import { getTestRunnerExecutionError } from '../../../shared/test-runner-verdict
15
15
  import { createVitestJsonReport, needsVitestJsonReportFile } from '../../../shared/vitest-json-report.js';
16
16
  import { isJestCommand, jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
17
17
  import { secureRandom } from '../../../shared/utils/crypto-random.js';
18
+ import { redactFailureText } from './runner-test-cases.js';
18
19
  const DEFAULT_FLAKY_CONFIG = {
19
20
  simulateForTesting: false,
20
21
  simulatedFlakinessRate: RETRY_CONSTANTS.DEFAULT_FLAKY_RATE,
@@ -132,7 +133,8 @@ export class FlakyDetectorService {
132
133
  async recordExecution(testId, result) {
133
134
  // Add to in-memory history
134
135
  const history = this.testHistory.get(testId) ?? [];
135
- history.push(result);
136
+ // #1122: test-history is persisted, so failure text is stored redacted.
137
+ history.push(result.error ? { ...result, error: redactFailureText(result.error) } : result);
136
138
  // Keep only last 100 executions
137
139
  if (history.length > 100) {
138
140
  history.shift();
@@ -336,7 +338,7 @@ export class FlakyDetectorService {
336
338
  runId,
337
339
  passed: code === 0,
338
340
  duration,
339
- error: code !== 0 ? stderr || `Exit code: ${code}` : undefined,
341
+ error: code !== 0 ? redactFailureText(stderr || `Exit code: ${code}`) : undefined,
340
342
  timestamp: new Date(),
341
343
  context: {
342
344
  parallelRuns: 1,
@@ -365,7 +367,7 @@ export class FlakyDetectorService {
365
367
  passed: code === 0,
366
368
  duration,
367
369
  error: code !== 0
368
- ? stderr || `Exit code: ${code}, Parse error: ${parseError}`
370
+ ? redactFailureText(stderr || `Exit code: ${code}, Parse error: ${parseError}`)
369
371
  : undefined,
370
372
  timestamp: new Date(),
371
373
  context: {
@@ -479,8 +481,8 @@ export class FlakyDetectorService {
479
481
  runId,
480
482
  passed: test.status === 'passed',
481
483
  duration: test.duration || 0,
482
- error: test.status === 'failed'
483
- ? test.failureMessages?.join('\n')
484
+ error: test.status === 'failed' && test.failureMessages
485
+ ? redactFailureText(test.failureMessages.join('\n'))
484
486
  : undefined,
485
487
  timestamp: new Date(),
486
488
  context: {
@@ -505,8 +507,8 @@ export class FlakyDetectorService {
505
507
  runId,
506
508
  passed: assertion.status === 'passed',
507
509
  duration: assertion.duration || 0,
508
- error: assertion.status === 'failed'
509
- ? assertion.failureMessages?.join('\n')
510
+ error: assertion.status === 'failed' && assertion.failureMessages
511
+ ? redactFailureText(assertion.failureMessages.join('\n'))
510
512
  : undefined,
511
513
  timestamp: new Date(),
512
514
  context: {
@@ -14,6 +14,7 @@ import { toError } from '../../../shared/error-utils.js';
14
14
  import { safeJsonParse } from '../../../shared/safe-json.js';
15
15
  import { secureRandom } from '../../../shared/utils/crypto-random.js';
16
16
  import { terminateTestRunner, trackTestRunnerExit } from '../../../shared/test-runner-process.js';
17
+ import { redactFailureText } from './runner-test-cases.js';
17
18
  /**
18
19
  * Whether a runner-reported test file and the requested target are the same
19
20
  * file. Runners report real paths, so a target given through a symlink must be
@@ -104,6 +105,8 @@ export class RetryHandlerService {
104
105
  const nowPassing = [];
105
106
  const stillFailing = [];
106
107
  const flakyDetected = [];
108
+ const unmatched = [];
109
+ const tests = [];
107
110
  for (const test of failedTests) {
108
111
  const result = await this.retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry);
109
112
  stats.totalRetries += result.attempts;
@@ -118,11 +121,18 @@ export class RetryHandlerService {
118
121
  else {
119
122
  stillFailing.push(test.testId);
120
123
  stats.failed++;
124
+ if (result.unmatched)
125
+ unmatched.push(test.testId);
121
126
  }
127
+ tests.push({
128
+ testId: test.testId, attempts: result.attempts, passed: result.passed,
129
+ ...(result.unmatched ? { unmatched: true } : {}),
130
+ });
122
131
  // Record retry history
123
132
  await this.recordRetry(test.testId, result);
124
133
  }
125
134
  stats.flakyDetected = flakyDetected;
135
+ stats.unmatched = unmatched;
126
136
  stats.endTime = Date.now();
127
137
  this.runStats.set(runId, stats);
128
138
  // Persist stats
@@ -136,6 +146,8 @@ export class RetryHandlerService {
136
146
  nowPassing: nowPassing.length,
137
147
  stillFailing: stillFailing.length,
138
148
  flakyDetected,
149
+ unmatched,
150
+ tests,
139
151
  };
140
152
  return ok(retryResult);
141
153
  }
@@ -218,7 +230,8 @@ export class RetryHandlerService {
218
230
  }
219
231
  async retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry) {
220
232
  let attempts = 0;
221
- let lastError = test.error;
233
+ // #1122: the final error is persisted in retry-history, so keep it redacted.
234
+ let lastError = redactFailureText(test.error);
222
235
  while (attempts < maxRetries) {
223
236
  // Check if should retry
224
237
  const shouldRetry = await this.shouldRetry(test.testId, attempts, lastError);
@@ -232,9 +245,16 @@ export class RetryHandlerService {
232
245
  if (onRetry) {
233
246
  onRetry(test.testId, attempts + 1);
234
247
  }
235
- attempts++;
236
248
  // Execute test (simulated - in real implementation, would run actual test)
237
249
  const result = await this.executeTest(test);
250
+ // #1141: a filter that selected no test reran nothing. Report that
251
+ // instead of counting it as a retry, and stop: another attempt would
252
+ // select nothing again.
253
+ if (result.unmatched) {
254
+ logger.warn(`Retry of "${test.testName}" matched no test in ${test.file}; nothing was rerun.`);
255
+ return { testId: test.testId, passed: false, attempts, finalError: lastError, unmatched: true };
256
+ }
257
+ attempts++;
238
258
  if (result.passed) {
239
259
  return {
240
260
  testId: test.testId,
@@ -243,7 +263,7 @@ export class RetryHandlerService {
243
263
  finalError: undefined,
244
264
  };
245
265
  }
246
- lastError = result.error ?? lastError;
266
+ lastError = result.error !== undefined ? redactFailureText(result.error) : lastError;
247
267
  }
248
268
  return {
249
269
  testId: test.testId,
@@ -477,9 +497,16 @@ export class RetryHandlerService {
477
497
  const result = safeJsonParse(vitestMatch[0]);
478
498
  // Vitest's positional file filter uses prefix matching. A passing
479
499
  // sibling must not clear a failure in the requested file (#972).
480
- const targetPassed = !targetFile || result.testResults?.some((file) => typeof file.name === 'string'
481
- && sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd())
482
- && file.assertionResults?.some(assertion => assertion.status === 'passed'));
500
+ const targetHas = (status) => result.testResults?.some((file) => typeof file.name === 'string'
501
+ && (!targetFile || sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd()))
502
+ && file.assertionResults?.some(assertion => assertion.status === status)) === true;
503
+ const targetPassed = !targetFile || targetHas('passed');
504
+ const nothingRan = targetFile
505
+ ? Array.isArray(result.testResults) && !targetPassed && !targetHas('failed')
506
+ : result.numPassedTests === 0;
507
+ if (nothingRan && result.numFailedTests === 0 && result.numFailedTestSuites === 0) {
508
+ return UNMATCHED;
509
+ }
483
510
  if (exitCode === 0 && result.success !== false
484
511
  && result.numFailedTests === 0 && result.numFailedTestSuites === 0
485
512
  && Number.isFinite(result.numPassedTests) && result.numPassedTests > 0
@@ -501,6 +528,10 @@ export class RetryHandlerService {
501
528
  const jestMatch = stdout.match(/\{[\s\S]*"numFailedTests"[\s\S]*\}/);
502
529
  if (jestMatch) {
503
530
  const result = safeJsonParse(jestMatch[0]);
531
+ if (result.numPassedTests === 0 && result.numFailedTests === 0
532
+ && result.numFailedTestSuites === 0) {
533
+ return UNMATCHED;
534
+ }
504
535
  if (exitCode === 0 && result.success !== false
505
536
  && result.numFailedTests === 0 && result.numFailedTestSuites === 0
506
537
  && Number.isFinite(result.numPassedTests) && result.numPassedTests > 0) {
@@ -517,6 +548,8 @@ export class RetryHandlerService {
517
548
  const mochaMatch = stdout.match(/\{[\s\S]*"stats"[\s\S]*"failures"[\s\S]*\}/);
518
549
  if (mochaMatch) {
519
550
  const result = safeJsonParse(mochaMatch[0]);
551
+ if (result.stats?.passes === 0 && result.stats?.failures === 0)
552
+ return UNMATCHED;
520
553
  if (exitCode === 0 && result.stats?.failures === 0
521
554
  && Number.isFinite(result.stats?.passes) && result.stats.passes > 0) {
522
555
  return { passed: true };
@@ -538,7 +571,7 @@ export class RetryHandlerService {
538
571
  const errorOutput = stderr || stdout || `Test failed with exit code ${exitCode}`;
539
572
  return {
540
573
  passed: false,
541
- error: errorOutput.substring(0, 1000), // Truncate long error messages
574
+ error: redactFailureText(errorOutput).substring(0, 1000), // Truncate long error messages
542
575
  };
543
576
  }
544
577
  calculateDelay(attempt, backoff, baseDelay, maxDelay) {
@@ -573,6 +606,7 @@ export class RetryHandlerService {
573
606
  attempts: result.attempts,
574
607
  passed: result.passed,
575
608
  error: result.finalError,
609
+ ...(result.unmatched ? { unmatched: true } : {}),
576
610
  timestamp: new Date(),
577
611
  });
578
612
  // Keep last 50 entries
@@ -616,4 +650,9 @@ export class RetryHandlerService {
616
650
  };
617
651
  }
618
652
  }
653
+ const UNMATCHED = {
654
+ passed: false,
655
+ unmatched: true,
656
+ error: 'The retry filter matched no test, so nothing was rerun.',
657
+ };
619
658
  //# sourceMappingURL=retry-handler.js.map
@@ -6,6 +6,17 @@
6
6
  * derived from aggregate counts.
7
7
  */
8
8
  import type { ITestCaseResult } from '../interfaces';
9
+ /**
10
+ * #1122: failure text goes back over MCP and into saved results, so
11
+ * credential-shaped values (e.g. a connection string) are redacted first.
12
+ * The text is not shortened here; callers apply their own caps.
13
+ */
14
+ export declare function redactFailureText(text: string): string;
15
+ /** Failed tests with `error` and `stack` redacted (#1122). */
16
+ export declare function redactFailedTests<T extends {
17
+ error: string;
18
+ stack?: string;
19
+ }>(tests: T[]): T[];
9
20
  /**
10
21
  * Test cases listed in a runner JSON report, or undefined when the report
11
22
  * has no per-test entries.
@@ -5,19 +5,37 @@
5
5
  * test case with the runner's own name, status and duration; nothing is
6
6
  * derived from aggregate counts.
7
7
  */
8
+ import { redactLogText } from '../../../logging/redaction.js';
8
9
  const SKIPPED_STATUSES = new Set(['skipped', 'pending', 'todo']);
9
10
  /** Upper bound on a reported failure message, so one stack cannot swamp the output. */
10
11
  const MAX_FAILURE_MESSAGE_LENGTH = 4000;
11
12
  function failureMessageOf(assertion) {
12
13
  if (!Array.isArray(assertion.failureMessages))
13
14
  return undefined;
14
- const message = assertion.failureMessages.filter((m) => typeof m === 'string').join('\n').trim();
15
- if (!message)
15
+ const joined = assertion.failureMessages.filter((m) => typeof m === 'string').join('\n').trim();
16
+ if (!joined)
16
17
  return undefined;
18
+ const message = redactFailureText(joined);
17
19
  return message.length > MAX_FAILURE_MESSAGE_LENGTH
18
20
  ? `${message.slice(0, MAX_FAILURE_MESSAGE_LENGTH)}… [truncated]`
19
21
  : message;
20
22
  }
23
+ /**
24
+ * #1122: failure text goes back over MCP and into saved results, so
25
+ * credential-shaped values (e.g. a connection string) are redacted first.
26
+ * The text is not shortened here; callers apply their own caps.
27
+ */
28
+ export function redactFailureText(text) {
29
+ return redactLogText(text, Number.POSITIVE_INFINITY);
30
+ }
31
+ /** Failed tests with `error` and `stack` redacted (#1122). */
32
+ export function redactFailedTests(tests) {
33
+ return tests.map(test => ({
34
+ ...test,
35
+ error: redactFailureText(test.error),
36
+ ...(typeof test.stack === 'string' ? { stack: redactFailureText(test.stack) } : {}),
37
+ }));
38
+ }
21
39
  function toStatus(status) {
22
40
  if (status === 'passed' || status === 'failed')
23
41
  return status;
@@ -17,8 +17,8 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
17
17
  import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
18
18
  import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
19
19
  import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
20
- import { mergeTestCases, testCasesFromRunnerReport } from './runner-test-cases.js';
21
- import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
20
+ import { mergeTestCases, redactFailedTests, redactFailureText, testCasesFromRunnerReport } from './runner-test-cases.js';
21
+ import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
22
22
  import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
23
23
  import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
24
24
  import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
@@ -76,7 +76,7 @@ export class TestExecutorService {
76
76
  failed: results.failed,
77
77
  skipped: results.skipped,
78
78
  duration,
79
- failedTests: results.failedTests,
79
+ failedTests: redactFailedTests(results.failedTests),
80
80
  ...(results.testCases ? { testCases: results.testCases } : {}),
81
81
  coverage: results.coverage,
82
82
  fileCoverages: results.fileCoverages,
@@ -132,7 +132,7 @@ export class TestExecutorService {
132
132
  failed: aggregated.failed,
133
133
  skipped: aggregated.skipped,
134
134
  duration,
135
- failedTests: aggregated.failedTests,
135
+ failedTests: redactFailedTests(aggregated.failedTests),
136
136
  ...(aggregated.testCases ? { testCases: aggregated.testCases } : {}),
137
137
  coverage: aggregated.coverage,
138
138
  fileCoverages: aggregated.fileCoverages,
@@ -260,7 +260,7 @@ export class TestExecutorService {
260
260
  if (!this.isLLMAnalysisAvailable() || failures.length === 0)
261
261
  return null;
262
262
  try {
263
- const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error?.substring(0, 200) || 'Unknown error'}`).join('\n');
263
+ const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error ? redactFailureText(f.error).substring(0, 200) : 'Unknown error'}`).join('\n');
264
264
  const response = await this.llmRouter.chat({
265
265
  model: this.getModelForTier(this.config.llmModelTier),
266
266
  messages: [{
@@ -624,7 +624,7 @@ Provide:
624
624
  }
625
625
  catch (error) {
626
626
  return err(new Error(`Failed to parse test output for ${file}: ${toErrorMessage(error)}\n` +
627
- `stdout: ${stdout.slice(0, 500)}\nstderr: ${stderr.slice(0, 500)}`));
627
+ `stdout: ${capDiagnostics(stdout, 500)}\nstderr: ${capDiagnostics(stderr, 500)}`));
628
628
  }
629
629
  }
630
630
  /**
@@ -880,7 +880,7 @@ Provide:
880
880
  ];
881
881
  for (const indicator of errorMessages) {
882
882
  if (combinedOutput.includes(indicator)) {
883
- return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${combinedOutput.slice(0, 1000)}`));
883
+ return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${capDiagnostics(combinedOutput, 1000)}`));
884
884
  }
885
885
  }
886
886
  }
@@ -894,7 +894,7 @@ Provide:
894
894
  }
895
895
  // Could not parse output - return error with details
896
896
  return err(new Error(`Unable to parse test results for ${file}. Exit code: ${exitCode}\n` +
897
- `Output: ${combinedOutput.slice(0, 500)}`));
897
+ `Output: ${capDiagnostics(combinedOutput, 500)}`));
898
898
  }
899
899
  /**
900
900
  * Create generic failure entries when we know tests failed but can't parse details