agentic-qe 3.15.1 → 3.15.3

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 (447) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +46 -6
  2. package/.claude/hooks/aqe-hook.cjs +280 -51
  3. package/.claude/skills/skills-manifest.json +1 -1
  4. package/CHANGELOG.md +129 -0
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/adapters/ag-ui/state-delta-cache.js +14 -5
  7. package/dist/adapters/trajectory-adapter.js +3 -1
  8. package/dist/cli/bundle.js +5 -5
  9. package/dist/cli/chunks/adapter-WQSFQES5.js +2 -0
  10. package/dist/cli/chunks/{agent-booster-wasm-XUHRLKWP.js → agent-booster-wasm-CYG3PKHH.js} +2 -2
  11. package/dist/cli/chunks/{agent-handler-CL7MJP5W.js → agent-handler-WTFYFZKL.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-F7RV72FC.js → agent-memory-branch-G6WE3ZXU.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-TDHBBADE.js +2 -0
  14. package/dist/cli/chunks/{arena-GRRNK7IN.js → arena-S72QW44C.js} +4 -4
  15. package/dist/cli/chunks/{arena-LHLVOQHW.js → arena-ZFXQEVUQ.js} +2 -2
  16. package/dist/cli/chunks/{audit-EOP2K34L.js → audit-KPYIEQJ3.js} +3 -3
  17. package/dist/cli/chunks/base-CZSB27VO.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-YERQ5DOL.js → better-sqlite3-L2M3TI5D.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-FBXBM5XE.js → brain-handler-FHKLQTB4.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-NWO6LNHB.js → branch-enumerator-3BSHOPOK.js} +2 -2
  21. package/dist/cli/chunks/{browser-EDCG7TNF.js → browser-JUIJPL6Y.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-AEMIS6PA.js +2 -0
  23. package/dist/cli/chunks/{chunk-ARWSPV2C.js → chunk-2GJJGO5D.js} +2 -2
  24. package/dist/cli/chunks/{chunk-SUFXUM6W.js → chunk-2M75CW5Q.js} +2 -2
  25. package/dist/cli/chunks/{chunk-ZX4I7IND.js → chunk-2MEWIXW4.js} +2 -2
  26. package/dist/cli/chunks/{chunk-VEKRK3R6.js → chunk-2TBHPYOU.js} +2 -2
  27. package/dist/cli/chunks/{chunk-OH4SKOAM.js → chunk-34Y4CIHD.js} +2 -2
  28. package/dist/cli/chunks/{chunk-JY6HWYC4.js → chunk-35VDOH4Y.js} +1 -1
  29. package/dist/cli/chunks/{chunk-NK2BR4QZ.js → chunk-366IBPZB.js} +2 -2
  30. package/dist/cli/chunks/{chunk-PZBYZV5M.js → chunk-3MNKYCLH.js} +1 -1
  31. package/dist/cli/chunks/chunk-3UUMGWHW.js +316 -0
  32. package/dist/cli/chunks/{chunk-REGPCPEJ.js → chunk-3Y4GX5FL.js} +2 -2
  33. package/dist/cli/chunks/{chunk-PGARKOE6.js → chunk-3ZTBV6M3.js} +1 -1
  34. package/dist/cli/chunks/{chunk-GUHJWBPN.js → chunk-4IYHYHTG.js} +2 -2
  35. package/dist/cli/chunks/{chunk-J2WALRWR.js → chunk-4JVVVKAX.js} +6 -6
  36. package/dist/cli/chunks/chunk-4N7YXTV3.js +4 -0
  37. package/dist/cli/chunks/{chunk-YM3GAJMN.js → chunk-4TM5K6EZ.js} +2 -2
  38. package/dist/cli/chunks/{chunk-IUGY6Z4Q.js → chunk-5LEUEWJY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-Q7ONRZBD.js → chunk-5QUOM357.js} +1 -1
  40. package/dist/cli/chunks/{chunk-5B5TA3X4.js → chunk-5WOBFN2T.js} +2 -2
  41. package/dist/cli/chunks/{chunk-JEXPSOT2.js → chunk-6AKJ73X3.js} +2 -2
  42. package/dist/cli/chunks/{chunk-K4NB3MYN.js → chunk-6EQDA4EC.js} +2 -2
  43. package/dist/cli/chunks/{chunk-HU4QGCIJ.js → chunk-6TYTBQPV.js} +2 -2
  44. package/dist/cli/chunks/{chunk-RXKOZ6VS.js → chunk-6V6XVGCL.js} +3 -3
  45. package/dist/cli/chunks/{chunk-4KHSWNFW.js → chunk-6W6GZHQA.js} +6 -6
  46. package/dist/cli/chunks/{chunk-WTFVYFRZ.js → chunk-7IJVCDDC.js} +1 -1
  47. package/dist/cli/chunks/{chunk-T5K6ZCA6.js → chunk-7PDC4SKR.js} +1 -1
  48. package/dist/cli/chunks/{chunk-NF6SLLE6.js → chunk-7SWHW5AC.js} +20 -20
  49. package/dist/cli/chunks/{chunk-UE33MZOC.js → chunk-7TW5UGDP.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4AEFJEZH.js → chunk-7UUSV2SK.js} +1 -1
  51. package/dist/cli/chunks/{chunk-WONHFDWF.js → chunk-A3IQU2ND.js} +2 -2
  52. package/dist/cli/chunks/{chunk-ALLABEUK.js → chunk-A5H7TF7C.js} +2 -2
  53. package/dist/cli/chunks/{chunk-C3BW3Q27.js → chunk-A6PII4R4.js} +1 -1
  54. package/dist/cli/chunks/{chunk-ZE6WJDXM.js → chunk-AEL4XJGJ.js} +2 -2
  55. package/dist/cli/chunks/{chunk-5QEXDXHQ.js → chunk-AOZJ6UUZ.js} +2 -2
  56. package/dist/cli/chunks/chunk-APV5UWTU.js +15 -0
  57. package/dist/cli/chunks/{chunk-YWX7KLNG.js → chunk-AQTQ24SK.js} +3 -3
  58. package/dist/cli/chunks/{chunk-PBWR2SKH.js → chunk-AS54N3H7.js} +2 -2
  59. package/dist/cli/chunks/chunk-ASUXS4N4.js +2 -0
  60. package/dist/cli/chunks/{chunk-JSHASVQ2.js → chunk-B23ROYST.js} +3 -3
  61. package/dist/cli/chunks/{chunk-NTLWHLAY.js → chunk-BDKQSEEY.js} +1 -1
  62. package/dist/cli/chunks/{chunk-VLL7ASGH.js → chunk-BO43BGHX.js} +2 -2
  63. package/dist/cli/chunks/{chunk-KP6LNSDO.js → chunk-CF3BPD2R.js} +161 -159
  64. package/dist/cli/chunks/{chunk-KTBA2HJC.js → chunk-CFXROOIU.js} +2 -2
  65. package/dist/cli/chunks/{chunk-SRXXPZVT.js → chunk-CNQUU6CF.js} +2 -2
  66. package/dist/cli/chunks/{chunk-OKS25EGZ.js → chunk-D5V6C3XG.js} +3 -3
  67. package/dist/cli/chunks/{chunk-ADEYBXAS.js → chunk-D6PUDLJ4.js} +2 -2
  68. package/dist/cli/chunks/{chunk-D3LREV4P.js → chunk-DE3QNPTG.js} +1 -1
  69. package/dist/cli/chunks/{chunk-TJCMG3QE.js → chunk-DH5NWHH2.js} +2 -2
  70. package/dist/cli/chunks/{chunk-GDSYJHVB.js → chunk-DLA3EHKJ.js} +1 -1
  71. package/dist/cli/chunks/{chunk-VGYLV6VD.js → chunk-DWG4TN6A.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4KSCJ462.js → chunk-EBIMVSPH.js} +4 -4
  73. package/dist/cli/chunks/{chunk-4XEZ562Q.js → chunk-ED5HUPUR.js} +2 -2
  74. package/dist/cli/chunks/{chunk-CHX65QXY.js → chunk-EQGT4VLC.js} +1 -1
  75. package/dist/cli/chunks/{chunk-WFDDWRWY.js → chunk-F5BREV2Q.js} +8 -8
  76. package/dist/cli/chunks/{chunk-7FGSX4UD.js → chunk-FPFGN2Z5.js} +2 -2
  77. package/dist/cli/chunks/{chunk-3TZRJ5QD.js → chunk-FTUNC4EI.js} +3 -3
  78. package/dist/cli/chunks/chunk-FXTZXZCU.js +54 -0
  79. package/dist/cli/chunks/{chunk-DREYYJ7A.js → chunk-GJB3LPCS.js} +2 -2
  80. package/dist/cli/chunks/{chunk-4P7CGSRL.js → chunk-GPZH6OPP.js} +4 -4
  81. package/dist/cli/chunks/{chunk-NWNZMXNO.js → chunk-HR7RL4PB.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NGDRSF6Y.js → chunk-HSR53REE.js} +2 -2
  83. package/dist/cli/chunks/{chunk-UOHZRR5C.js → chunk-HU474NXP.js} +1 -1
  84. package/dist/cli/chunks/{chunk-LI7N45GM.js → chunk-HV3ZVUHO.js} +1 -1
  85. package/dist/cli/chunks/{chunk-WPG6SW7C.js → chunk-HVIFA73X.js} +2 -2
  86. package/dist/cli/chunks/{chunk-6U6JQS4Z.js → chunk-HW4V7BVV.js} +2 -2
  87. package/dist/cli/chunks/{chunk-X6W35QXO.js → chunk-I5VJ3FBC.js} +2 -2
  88. package/dist/cli/chunks/{chunk-YTMWPGVR.js → chunk-IARE5VGI.js} +1 -1
  89. package/dist/cli/chunks/chunk-INVDDFJC.js +2 -0
  90. package/dist/cli/chunks/{chunk-RDI3W4H6.js → chunk-JJBTM4JO.js} +2 -2
  91. package/dist/cli/chunks/chunk-JVQK6NGI.js +14 -0
  92. package/dist/cli/chunks/{chunk-CFZJEOCD.js → chunk-K65X6CQA.js} +1 -1
  93. package/dist/cli/chunks/{chunk-6DF6X3SZ.js → chunk-KCBCYF7M.js} +2 -2
  94. package/dist/cli/chunks/{chunk-QOOADAT7.js → chunk-KGS6H2HB.js} +2 -2
  95. package/dist/cli/chunks/{chunk-TCJ65NPY.js → chunk-L6OSEWOS.js} +1 -1
  96. package/dist/cli/chunks/{chunk-BW7S6LIJ.js → chunk-LEB6O2IN.js} +2 -2
  97. package/dist/cli/chunks/{chunk-WHBDSJUE.js → chunk-LPZAB3N2.js} +3 -3
  98. package/dist/cli/chunks/{chunk-JYF3QF4C.js → chunk-M3ACHBC7.js} +2 -2
  99. package/dist/cli/chunks/{chunk-WQZR6DS6.js → chunk-M3ONCPSU.js} +2 -2
  100. package/dist/cli/chunks/{chunk-7B3XVVYP.js → chunk-MUSYQF53.js} +2 -2
  101. package/dist/cli/chunks/{chunk-6AVVC7Y3.js → chunk-MZDUBFLP.js} +1 -1
  102. package/dist/cli/chunks/{chunk-53HWWWFZ.js → chunk-NT6FYFJA.js} +2 -2
  103. package/dist/cli/chunks/{chunk-6WW6A6JM.js → chunk-O66D4NEJ.js} +2 -2
  104. package/dist/cli/chunks/{chunk-3NOSMJS4.js → chunk-OGARNKLS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-KHVWIUAF.js → chunk-OKNMZLGB.js} +2 -2
  106. package/dist/cli/chunks/{chunk-XCVD57GW.js → chunk-OMHISPPF.js} +1 -1
  107. package/dist/cli/chunks/{chunk-N5OSH5JO.js → chunk-OT6SOPAL.js} +2 -2
  108. package/dist/cli/chunks/{chunk-ZZV6GR46.js → chunk-OTTTHNIT.js} +1 -1
  109. package/dist/cli/chunks/{chunk-XZGRHJGC.js → chunk-P36IODAM.js} +2 -2
  110. package/dist/cli/chunks/{chunk-JHKMUY4W.js → chunk-P6EGRAQG.js} +2 -2
  111. package/dist/cli/chunks/{chunk-5JJWVFUV.js → chunk-PBUWNMZ2.js} +1 -1
  112. package/dist/cli/chunks/{chunk-LQI5GVH7.js → chunk-POTVF6BY.js} +1 -1
  113. package/dist/cli/chunks/{chunk-N4HQ6FE2.js → chunk-POVP6O6K.js} +1 -1
  114. package/dist/cli/chunks/{chunk-P24ZBDZY.js → chunk-PPA53NJB.js} +2 -2
  115. package/dist/cli/chunks/{chunk-OABFAREV.js → chunk-PUPEKA2J.js} +2 -2
  116. package/dist/cli/chunks/{chunk-27S47AYK.js → chunk-QDQLL2QB.js} +2 -2
  117. package/dist/cli/chunks/{chunk-MEOAKMKF.js → chunk-QSVNVDA5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-66HKJJFH.js → chunk-QUXX2DP7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-TLUMENRZ.js → chunk-QVNMTMDJ.js} +2 -2
  120. package/dist/cli/chunks/{chunk-LDDIYDIP.js → chunk-QZBFMXO5.js} +54 -54
  121. package/dist/cli/chunks/{chunk-4THIRDBL.js → chunk-RDTR43YN.js} +2 -2
  122. package/dist/cli/chunks/{chunk-6MGJMGAD.js → chunk-RGD2CG23.js} +2 -2
  123. package/dist/cli/chunks/{chunk-V5RP2SU3.js → chunk-RQUSJEON.js} +2 -2
  124. package/dist/cli/chunks/{chunk-WYE3ICSL.js → chunk-RRSZ27A7.js} +2 -2
  125. package/dist/cli/chunks/{chunk-GUKBN3BS.js → chunk-RWLOERKK.js} +2 -2
  126. package/dist/cli/chunks/{chunk-5TEDVUEB.js → chunk-RWQDRPN5.js} +2 -2
  127. package/dist/cli/chunks/{chunk-2IPBCXTT.js → chunk-S7D4GD7H.js} +2 -2
  128. package/dist/cli/chunks/{chunk-FTHXV7N7.js → chunk-SKHP5WUP.js} +2 -2
  129. package/dist/cli/chunks/{chunk-QVTV47TM.js → chunk-SP2JO53K.js} +2 -2
  130. package/dist/cli/chunks/{chunk-UTFNHITI.js → chunk-SRDECRTL.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HVAYG54D.js → chunk-TBVPNN65.js} +2 -2
  132. package/dist/cli/chunks/{chunk-JQVECGYL.js → chunk-U5AVZ3T2.js} +1 -1
  133. package/dist/cli/chunks/{chunk-EQ3BJS37.js → chunk-UCSGZVJX.js} +1 -1
  134. package/dist/cli/chunks/{chunk-5C4UYXQL.js → chunk-UGNTLSBL.js} +2 -2
  135. package/dist/cli/chunks/{chunk-W5NHBYYS.js → chunk-UTALYUMW.js} +2 -2
  136. package/dist/cli/chunks/{chunk-35XRY6ZW.js → chunk-UZDTRCVU.js} +9 -9
  137. package/dist/cli/chunks/{chunk-AVOYMVD6.js → chunk-V5NYGDSX.js} +2 -2
  138. package/dist/cli/chunks/{chunk-FQYXPSWD.js → chunk-VGN46ZT4.js} +2 -2
  139. package/dist/cli/chunks/{chunk-QMHWJBD3.js → chunk-VHBZADYK.js} +2 -2
  140. package/dist/cli/chunks/{chunk-54JYUOSR.js → chunk-VOKIUF7I.js} +1 -1
  141. package/dist/cli/chunks/{chunk-PDLVO3ZR.js → chunk-VRT736E3.js} +2 -2
  142. package/dist/cli/chunks/{chunk-DV7I6CRH.js → chunk-VUBLJBHQ.js} +2 -2
  143. package/dist/cli/chunks/{chunk-FRGNM6SW.js → chunk-VX7CQUO7.js} +2 -2
  144. package/dist/cli/chunks/{chunk-YDM2DPUU.js → chunk-W7EHNX3Y.js} +2 -2
  145. package/dist/cli/chunks/{chunk-W5HQQTVH.js → chunk-WI7I6LMM.js} +1 -1
  146. package/dist/cli/chunks/{chunk-46DUU44C.js → chunk-WLOHTLHO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-W6K77PQR.js → chunk-WQZBKLAG.js} +1 -1
  148. package/dist/cli/chunks/{chunk-UGUZFUQG.js → chunk-WSND64RL.js} +2 -2
  149. package/dist/cli/chunks/{chunk-PNK5KHSI.js → chunk-WSUYEVSY.js} +1 -1
  150. package/dist/cli/chunks/{chunk-FIIHSEXP.js → chunk-WTMLRMKW.js} +2 -2
  151. package/dist/cli/chunks/{chunk-OPBPFNBO.js → chunk-WW4RJ6BH.js} +2 -2
  152. package/dist/cli/chunks/{chunk-KBK4GBJQ.js → chunk-X335K4SU.js} +2 -2
  153. package/dist/cli/chunks/{chunk-NS4RIZ4F.js → chunk-X33LID2T.js} +1 -1
  154. package/dist/cli/chunks/{chunk-L5GEWKR3.js → chunk-XTGVGZ4J.js} +3 -3
  155. package/dist/cli/chunks/{chunk-CTLHNFPM.js → chunk-XV2TIODR.js} +1 -1
  156. package/dist/cli/chunks/{chunk-GAKVCN3C.js → chunk-XXW4KFBB.js} +1 -1
  157. package/dist/cli/chunks/{chunk-CTK7NMSJ.js → chunk-YCGU2LI7.js} +2 -2
  158. package/dist/cli/chunks/chunk-YGEC3PSD.js +2 -0
  159. package/dist/cli/chunks/{chunk-ARGMYSDY.js → chunk-YGKU2QRC.js} +1 -1
  160. package/dist/cli/chunks/{chunk-6Q7PWKWV.js → chunk-YHZGFWJE.js} +2 -2
  161. package/dist/cli/chunks/{chunk-V3ISBQ5Q.js → chunk-YJH7UFA2.js} +2 -2
  162. package/dist/cli/chunks/{chunk-A5LOELVV.js → chunk-YQ3ZW47V.js} +2 -2
  163. package/dist/cli/chunks/{chunk-25IWHVMW.js → chunk-YTRGMILO.js} +2 -2
  164. package/dist/cli/chunks/chunk-YW4GM36K.js +2 -0
  165. package/dist/cli/chunks/{chunk-JW2HNT3J.js → chunk-Z7JPWXW2.js} +2 -2
  166. package/dist/cli/chunks/{chunk-PZDI7WQ3.js → chunk-Z7UGEQ4G.js} +1 -1
  167. package/dist/cli/chunks/{chunk-TBCQWD5A.js → chunk-ZATQLTYL.js} +1 -1
  168. package/dist/cli/chunks/{chunk-DKWB4ERY.js → chunk-ZI6NJEBY.js} +1 -1
  169. package/dist/cli/chunks/{chunk-B3DWOR5R.js → chunk-ZJW4HRUA.js} +1 -1
  170. package/dist/cli/chunks/{chunk-X4PGLEPQ.js → chunk-ZL2GYU7H.js} +2 -2
  171. package/dist/cli/chunks/{ci-K7DG4GSO.js → ci-JPISJ25U.js} +3 -3
  172. package/dist/cli/chunks/{ci-output-EBSUG6HP.js → ci-output-DPHTFIGX.js} +2 -2
  173. package/dist/cli/chunks/{circuit-breaker-P6N6YIRZ.js → circuit-breaker-PQ65VU2M.js} +2 -2
  174. package/dist/cli/chunks/{claude-flow-setup-P6EZPQZT.js → claude-flow-setup-GKHVO7AD.js} +2 -2
  175. package/dist/cli/chunks/client-BS7I637W.js +2 -0
  176. package/dist/cli/chunks/{cline-installer-EVZZ3EFY.js → cline-installer-HWMQZJ64.js} +2 -2
  177. package/dist/cli/chunks/{code-3WLBG2XK.js → code-OTY7BF3D.js} +3 -3
  178. package/dist/cli/chunks/{code-index-extractor-ZP6D4WL2.js → code-index-extractor-FG3TMHHR.js} +2 -2
  179. package/dist/cli/chunks/{codex-installer-XAUI4SB7.js → codex-installer-63JARKKS.js} +2 -2
  180. package/dist/cli/chunks/{completions-RHFNDDG3.js → completions-4ZHONFML.js} +2 -2
  181. package/dist/cli/chunks/{complexity-analyzer-DCW7Q3OR.js → complexity-analyzer-FYHTJW5Y.js} +2 -2
  182. package/dist/cli/chunks/{continuedev-installer-53SQA5T6.js → continuedev-installer-ZAWDSUR3.js} +2 -2
  183. package/dist/cli/chunks/{copilot-installer-SXXMFB6T.js → copilot-installer-5QK565JX.js} +2 -2
  184. package/dist/cli/chunks/core-handlers-UG7RMTK5.js +2 -0
  185. package/dist/cli/chunks/cost-tracker-AWWMPPBJ.js +2 -0
  186. package/dist/cli/chunks/{coverage-AWCS2SP7.js → coverage-SMFQEGKE.js} +3 -3
  187. package/dist/cli/chunks/cross-domain-router-NX7F6TOF.js +2 -0
  188. package/dist/cli/chunks/{cursor-installer-4TYF5V5J.js → cursor-installer-3BL7JACV.js} +2 -2
  189. package/dist/cli/chunks/{daemon-CTZXGN5V.js → daemon-OJ624POF.js} +4 -4
  190. package/dist/cli/chunks/{daemon-OOY4H6RJ.js → daemon-R6ULBHHF.js} +3 -3
  191. package/dist/cli/chunks/{dag-attention-scheduler-3WG24Q33.js → dag-attention-scheduler-J6I3LTMY.js} +2 -2
  192. package/dist/cli/chunks/{detect-O7MUZ6NX.js → detect-5Q5W33UR.js} +2 -2
  193. package/dist/cli/chunks/{dist-node-H4XI7BAF.js → dist-node-GJNW56NA.js} +2 -2
  194. package/dist/cli/chunks/{domain-handler-FU4WZ23B.js → domain-handler-IZQY2G44.js} +2 -2
  195. package/dist/cli/chunks/{domain-plugins-XK26KYNJ.js → domain-plugins-PIGO3KI2.js} +2 -2
  196. package/dist/cli/chunks/{domain-transfer-6B5NOVH6.js → domain-transfer-NU3B4FQG.js} +2 -2
  197. package/dist/cli/chunks/dream-GYEH57FW.js +2 -0
  198. package/dist/cli/chunks/{embed-and-insert-pattern-XNZXPZNL.js → embed-and-insert-pattern-5QDDRPWV.js} +2 -2
  199. package/dist/cli/chunks/{eval-J3Q5TTI7.js → eval-TB5HOAUY.js} +2 -2
  200. package/dist/cli/chunks/{experience-capture-middleware-COKIGMXW.js → experience-capture-middleware-SIYVLKDE.js} +3 -3
  201. package/dist/cli/chunks/{fast-paths-IHWPJI6I.js → fast-paths-T7QELS6D.js} +2 -2
  202. package/dist/cli/chunks/{feature-flags-WUXFWZLR.js → feature-flags-T3CNNYMJ.js} +2 -2
  203. package/dist/cli/chunks/{feature-flags-G7ONDNTT.js → feature-flags-TNZ7ZAJV.js} +2 -2
  204. package/dist/cli/chunks/{file-discovery-JN3YMBOJ.js → file-discovery-M45P2ZCY.js} +2 -2
  205. package/dist/cli/chunks/{fleet-OUHUZJE4.js → fleet-DSBZPHBZ.js} +3 -3
  206. package/dist/cli/chunks/{gnn-wrapper-PRH55ZT6.js → gnn-wrapper-EHODCF32.js} +2 -2
  207. package/dist/cli/chunks/{heartbeat-handler-6YF35AQS.js → heartbeat-handler-V5DBVF7V.js} +4 -4
  208. package/dist/cli/chunks/heartbeat-scheduler-4TJ3T7LR.js +2 -0
  209. package/dist/cli/chunks/hnsw-adapter-PHFK4EAP.js +2 -0
  210. package/dist/cli/chunks/hnsw-index-434XDDBH.js +2 -0
  211. package/dist/cli/chunks/{hnsw-legacy-bridge-7PAFSTJO.js → hnsw-legacy-bridge-IYKDYA2F.js} +2 -2
  212. package/dist/cli/chunks/{hnswlib-node-UETDZNNN.js → hnswlib-node-DKG4LW3X.js} +2 -2
  213. package/dist/cli/chunks/{hooks-QQNUKQAS.js → hooks-VKNMAILY.js} +10 -10
  214. package/dist/cli/chunks/hybrid-backend-DYVJQENQ.js +2 -0
  215. package/dist/cli/chunks/{hypergraph-engine-5GDGE3ET.js → hypergraph-engine-AXZVP7A7.js} +2 -2
  216. package/dist/cli/chunks/{hypergraph-handler-C3F2OJYA.js → hypergraph-handler-6EO6JN4Z.js} +3 -3
  217. package/dist/cli/chunks/impact-analyzer-CBAST6M2.js +2 -0
  218. package/dist/cli/chunks/init-handler-N3NG3RHN.js +86 -0
  219. package/dist/cli/chunks/init-wizard-DWIJW7HY.js +2 -0
  220. package/dist/cli/chunks/kernel-AQGCS4X2.js +2 -0
  221. package/dist/cli/chunks/{kilocode-installer-VLJENC76.js → kilocode-installer-JICGAHLM.js} +2 -2
  222. package/dist/cli/chunks/{kiro-installer-UYPYM6LA.js → kiro-installer-VYBFP6ZH.js} +2 -2
  223. package/dist/cli/chunks/knowledge-graph-2ICXFUUV.js +2 -0
  224. package/dist/cli/chunks/{learning-SFIWIG6Z.js → learning-3BHEZEPK.js} +3 -3
  225. package/dist/cli/chunks/{llm-router-V633KAS5.js → llm-router-GPTEZCUN.js} +4 -4
  226. package/dist/cli/chunks/llm-router-service-C47RGTH6.js +2 -0
  227. package/dist/cli/chunks/{load-UWZV4JRA.js → load-W5BIRPU4.js} +2 -2
  228. package/dist/cli/chunks/load-test-LRDAW3N6.js +2 -0
  229. package/dist/cli/chunks/{mcp-XVFHUKCP.js → mcp-EBV4DZPG.js} +2 -2
  230. package/dist/cli/chunks/{memory-BQ5652VK.js → memory-7F6YYKNL.js} +5 -5
  231. package/dist/cli/chunks/memory-backend-UFBAYPQ6.js +2 -0
  232. package/dist/cli/chunks/memory-handlers-OGLJHAAJ.js +2 -0
  233. package/dist/cli/chunks/{multi-model-executor-X6AQ7VVR.js → multi-model-executor-3ZIA2YOL.js} +2 -2
  234. package/dist/cli/chunks/{opencode-installer-N3V2Z4EF.js → opencode-installer-2XRZUTLR.js} +2 -2
  235. package/dist/cli/chunks/{orchestrator-KNEKS4F7.js → orchestrator-VSZVJUJW.js} +87 -28
  236. package/dist/cli/chunks/pattern-null-store-27FCITT3.js +2 -0
  237. package/dist/cli/chunks/{pattern-usage-recorder-MZIM6XWU.js → pattern-usage-recorder-I2IGVHRL.js} +2 -2
  238. package/dist/cli/chunks/{pipeline-LNLBKSXR.js → pipeline-5G3O6WBY.js} +2 -2
  239. package/dist/cli/chunks/{platform-OMUDXHD3.js → platform-6GUFDIA3.js} +2 -2
  240. package/dist/cli/chunks/{plugin-HGY6KKZW.js → plugin-GYXE4CIC.js} +2 -2
  241. package/dist/cli/chunks/{prime-radiant-advanced-wasm-LZBHLQYN.js → prime-radiant-advanced-wasm-THX6JLGZ.js} +2 -2
  242. package/dist/cli/chunks/{project-root-VPSCDBMD.js → project-root-QJRBKZQU.js} +2 -2
  243. package/dist/cli/chunks/protocol-executor-XWXXTMEW.js +2 -0
  244. package/dist/cli/chunks/{protocol-handler-LZXT3TXU.js → protocol-handler-B54LRU26.js} +2 -2
  245. package/dist/cli/chunks/{prove-I4VKQEYQ.js → prove-PCY2WQOD.js} +2 -2
  246. package/dist/cli/chunks/qe-reasoning-bank-3RMYXENE.js +2 -0
  247. package/dist/cli/chunks/{quality-VVAWK2DD.js → quality-LPVDZC7U.js} +2 -2
  248. package/dist/cli/chunks/{quality-gate-RGXLWYT6.js → quality-gate-L3KXL6WE.js} +3 -3
  249. package/dist/cli/chunks/queen-coordinator-AS6DZ7UJ.js +2 -0
  250. package/dist/cli/chunks/{real-embeddings-WM66PMQ6.js → real-embeddings-N3H523PJ.js} +2 -2
  251. package/dist/cli/chunks/{ref-validation-ZIWJNI6M.js → ref-validation-6BKDPHZ7.js} +2 -2
  252. package/dist/cli/chunks/{roocode-installer-QYSI3STC.js → roocode-installer-NSGGTWXE.js} +2 -2
  253. package/dist/cli/chunks/router-OVNLNGHO.js +2 -0
  254. package/dist/cli/chunks/routing-feedback-TBOWEB6H.js +2 -0
  255. package/dist/cli/chunks/{routing-handler-BID3EOLE.js → routing-handler-SRQNUBG3.js} +2 -2
  256. package/dist/cli/chunks/{ruvector-commands-DXIFMF4W.js → ruvector-commands-2IGULGDE.js} +2 -2
  257. package/dist/cli/chunks/rvf-dual-writer-YJYRCYGT.js +2 -0
  258. package/dist/cli/chunks/rvf-migration-adapter-VMRQ2SFO.js +2 -0
  259. package/dist/cli/chunks/{rvf-migration-coordinator-EV5E6SAO.js → rvf-migration-coordinator-ZD6WK5CK.js} +2 -2
  260. package/dist/cli/chunks/rvf-native-adapter-B75L3ALW.js +2 -0
  261. package/dist/cli/chunks/{rvf-store-integrity-IT6DCCJK.js → rvf-store-integrity-QULKUBBI.js} +2 -2
  262. package/dist/cli/chunks/safe-db-CRQHMCV6.js +2 -0
  263. package/dist/cli/chunks/schedule-L3DKJRXU.js +2 -0
  264. package/dist/cli/chunks/scheduler-VRHYUGY5.js +2 -0
  265. package/dist/cli/chunks/{security-AAFAEATQ.js → security-JW4EBARW.js} +3 -3
  266. package/dist/cli/chunks/{shared-rvf-adapter-QIHSYHAF.js → shared-rvf-adapter-VQ7NJTGY.js} +2 -2
  267. package/dist/cli/chunks/{shared-rvf-dual-writer-V7OZ6TBR.js → shared-rvf-dual-writer-SKTS52HK.js} +2 -2
  268. package/dist/cli/chunks/sqlite-persistence-JVAZETTL.js +2 -0
  269. package/dist/cli/chunks/{standalone-memory-ALZI6VPX.js → standalone-memory-3N4YJCSY.js} +2 -2
  270. package/dist/cli/chunks/{status-handler-DED5A3OW.js → status-handler-5BQ2IIDG.js} +2 -2
  271. package/dist/cli/chunks/{structural-health-CB7L3NWH.js → structural-health-WGYR2RJB.js} +2 -2
  272. package/dist/cli/chunks/{sync-QNPGETIO.js → sync-DLKSXTIR.js} +2 -2
  273. package/dist/cli/chunks/sync-R5OKUBTQ.js +2 -0
  274. package/dist/cli/chunks/{task-handler-CGHXYFIF.js → task-handler-Z5KNTSUX.js} +2 -2
  275. package/dist/cli/chunks/{task-handlers-A6BGQJIB.js → task-handlers-RZFMYFSC.js} +3 -3
  276. package/dist/cli/chunks/test-LHWKZJRN.js +34 -0
  277. package/dist/cli/chunks/test-scheduling-EN7WXUMS.js +15 -0
  278. package/dist/cli/chunks/token-bootstrap-4V3OO4EC.js +2 -0
  279. package/dist/cli/chunks/{token-usage-25BRFKJ5.js → token-usage-PFC2BYBS.js} +2 -2
  280. package/dist/cli/chunks/{transformers-TBVVSZMF.js → transformers-VZCC4SHC.js} +2 -2
  281. package/dist/cli/chunks/{tree-sitter-wasm-parser-N7KCOQT4.js → tree-sitter-wasm-parser-ZYDQXGKN.js} +2 -2
  282. package/dist/cli/chunks/{types-TFHWJGRK.js → types-I6AWHZZQ.js} +2 -2
  283. package/dist/cli/chunks/unified-memory-WOOCCIUM.js +2 -0
  284. package/dist/cli/chunks/unified-memory-hnsw-PDDHFLUB.js +2 -0
  285. package/dist/cli/chunks/unified-persistence-6ETD3JSC.js +2 -0
  286. package/dist/cli/chunks/{upgrade-4VWQU7RD.js → upgrade-T7SG75PA.js} +2 -2
  287. package/dist/cli/chunks/{validate-FF7WVXMP.js → validate-YLYEHTY3.js} +2 -2
  288. package/dist/cli/chunks/{validate-swarm-NRLH4EDC.js → validate-swarm-VTLTRUE3.js} +2 -2
  289. package/dist/cli/chunks/visual-security-O4OT2YPY.js +2 -0
  290. package/dist/cli/chunks/{web-tree-sitter-VVU3LULW.js → web-tree-sitter-JUM7ZY5M.js} +2 -2
  291. package/dist/cli/chunks/{windsurf-installer-Q2ZNWG2D.js → windsurf-installer-4KS2466T.js} +2 -2
  292. package/dist/cli/chunks/witness-chain-67JHPDCN.js +2 -0
  293. package/dist/cli/chunks/{witness-chain-FP3D4PQL.js → witness-chain-E4X6TOCT.js} +2 -2
  294. package/dist/cli/chunks/witness-chain-repair-MB53OZO6.js +2 -0
  295. package/dist/cli/chunks/{witness-chain-verifier-LACGL6BK.js → witness-chain-verifier-LBWJHO7Y.js} +2 -2
  296. package/dist/cli/chunks/{witness-key-manager-GQZIB5ZE.js → witness-key-manager-5IHVMXHJ.js} +2 -2
  297. package/dist/cli/chunks/{workflow-JPA5Y7L6.js → workflow-XUQXIRNE.js} +4 -4
  298. package/dist/cli/chunks/workflow-orchestrator-ZVFSNRYZ.js +2 -0
  299. package/dist/cli/chunks/wrappers-YVF5SQUN.js +2 -0
  300. package/dist/cli/commands/test.js +42 -9
  301. package/dist/cli/handlers/init-flags.d.ts +45 -0
  302. package/dist/cli/handlers/init-flags.js +35 -0
  303. package/dist/cli/handlers/init-handler.d.ts +6 -0
  304. package/dist/cli/handlers/init-handler.js +24 -10
  305. package/dist/cli/utils/generated-test-writer.d.ts +35 -0
  306. package/dist/cli/utils/generated-test-writer.js +44 -0
  307. package/dist/context/compiler.js +4 -1
  308. package/dist/coordination/consensus/providers/ollama-provider.js +16 -27
  309. package/dist/coordination/consensus/providers/openrouter-provider.js +13 -24
  310. package/dist/coordination/handlers/test-execution-handlers.js +4 -2
  311. package/dist/coordination/protocols/defect-investigation.js +4 -1
  312. package/dist/coordination/task-executor.js +4 -2
  313. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +3 -3
  314. package/dist/domains/coverage-analysis/services/gap-detector.js +3 -1
  315. package/dist/domains/learning-optimization/services/learning-coordinator.js +4 -2
  316. package/dist/domains/test-execution/services/flaky-detector.js +8 -2
  317. package/dist/domains/test-execution/services/retry-handler.js +23 -20
  318. package/dist/domains/test-execution/services/test-executor.js +5 -2
  319. package/dist/domains/test-generation/services/test-generator.js +5 -2
  320. package/dist/governance/compliance-reporter.js +8 -7
  321. package/dist/governance/proof-envelope-integration.js +3 -1
  322. package/dist/init/claude-plugin-detection.d.ts +63 -0
  323. package/dist/init/claude-plugin-detection.js +118 -0
  324. package/dist/init/init-wizard-hooks.d.ts +6 -1
  325. package/dist/init/init-wizard-hooks.js +9 -1
  326. package/dist/init/init-wizard.d.ts +4 -0
  327. package/dist/init/init-wizard.js +3 -1
  328. package/dist/init/orchestrator.js +1 -0
  329. package/dist/init/phases/07-hooks.js +30 -4
  330. package/dist/init/phases/08-mcp.d.ts +7 -0
  331. package/dist/init/phases/08-mcp.js +22 -0
  332. package/dist/init/phases/10-workers.js +42 -6
  333. package/dist/init/phases/phase-interface.d.ts +5 -1
  334. package/dist/integrations/agentic-flow/onnx-embeddings/embedding-generator.d.ts +4 -1
  335. package/dist/integrations/agentic-flow/onnx-embeddings/embedding-generator.js +6 -2
  336. package/dist/integrations/browser/qe-dashboard/wasm-vector-store.js +2 -1
  337. package/dist/integrations/ruvector/coverage-router.d.ts +3 -1
  338. package/dist/integrations/ruvector/coverage-router.js +7 -6
  339. package/dist/integrations/ruvector/diff-risk-classifier.js +5 -4
  340. package/dist/integrations/ruvector/rvf-dual-writer.js +10 -1
  341. package/dist/integrations/vibium/runtime.js +2 -6
  342. package/dist/learning/dream/dream-engine.d.ts +5 -0
  343. package/dist/learning/dream/dream-engine.js +20 -3
  344. package/dist/learning/embedding-space.d.ts +18 -0
  345. package/dist/learning/embedding-space.js +33 -0
  346. package/dist/learning/rvf-pattern-store.js +19 -5
  347. package/dist/mcp/bundle.js +443 -441
  348. package/dist/mcp/handlers/domain-handler-configs.js +3 -1
  349. package/dist/mcp/handlers/handler-factory.js +7 -0
  350. package/dist/mcp/handlers/save-results-option.d.ts +97 -0
  351. package/dist/mcp/handlers/save-results-option.js +94 -0
  352. package/dist/mcp/protocol-server.js +23 -11
  353. package/dist/mcp/security/rate-limiter.d.ts +8 -1
  354. package/dist/mcp/security/rate-limiter.js +33 -4
  355. package/dist/mcp/services/session-resume.js +11 -0
  356. package/dist/mcp/services/session-store.d.ts +31 -2
  357. package/dist/mcp/services/session-store.js +84 -15
  358. package/dist/mcp/services/session-write-buffer.d.ts +55 -0
  359. package/dist/mcp/services/session-write-buffer.js +144 -0
  360. package/dist/mcp/types.d.ts +9 -0
  361. package/dist/memory/crdt/g-counter.js +10 -8
  362. package/dist/shared/embeddings/ollama-client.d.ts +1 -1
  363. package/dist/shared/embeddings/ollama-client.js +30 -31
  364. package/dist/shared/git/git-analyzer.d.ts +4 -1
  365. package/dist/shared/git/git-analyzer.js +9 -4
  366. package/dist/shared/llm/cost-tracker.js +8 -6
  367. package/dist/shared/llm/providers/azure-openai.js +5 -21
  368. package/dist/shared/llm/providers/bedrock.js +5 -21
  369. package/dist/shared/llm/providers/claude.js +5 -21
  370. package/dist/shared/llm/providers/cognitum.js +5 -17
  371. package/dist/shared/llm/providers/gemini.js +9 -23
  372. package/dist/shared/llm/providers/ollama.js +5 -21
  373. package/dist/shared/llm/providers/openai.js +5 -21
  374. package/dist/shared/llm/providers/openrouter.js +9 -23
  375. package/dist/shared/llm/providers/response-deadline.d.ts +3 -0
  376. package/dist/shared/llm/providers/response-deadline.js +100 -0
  377. package/dist/shared/llm/spend-ledger.js +3 -2
  378. package/dist/shared/metrics/code-metrics.d.ts +1 -0
  379. package/dist/shared/metrics/code-metrics.js +3 -44
  380. package/dist/shared/metrics/cognitive-complexity.d.ts +17 -0
  381. package/dist/shared/metrics/cognitive-complexity.js +108 -0
  382. package/dist/shared/npm-cli-invocation.d.ts +21 -0
  383. package/dist/shared/npm-cli-invocation.js +28 -0
  384. package/dist/shared/optional-module.js +24 -0
  385. package/dist/shared/test-runner-args.d.ts +42 -0
  386. package/dist/shared/test-runner-args.js +74 -0
  387. package/dist/shared/utils/safe-record.d.ts +18 -0
  388. package/dist/shared/utils/safe-record.js +28 -0
  389. package/dist/test-scheduling/executors/vitest-executor.js +23 -5
  390. package/dist/workers/quality-daemon/git-watcher.js +5 -0
  391. package/package.json +1 -1
  392. package/dist/adapters/ag-ui/json-patch-utils.d.ts +0 -136
  393. package/dist/adapters/ag-ui/json-patch-utils.js +0 -575
  394. package/dist/cli/chunks/adapter-Q6RPGMUE.js +0 -2
  395. package/dist/cli/chunks/aqe-learning-engine-JQPXIU7C.js +0 -2
  396. package/dist/cli/chunks/base-5SK64NXB.js +0 -2
  397. package/dist/cli/chunks/browser-workflow-WN7XNTCJ.js +0 -2
  398. package/dist/cli/chunks/chunk-2K3QFLX2.js +0 -2
  399. package/dist/cli/chunks/chunk-53C7TGC4.js +0 -4
  400. package/dist/cli/chunks/chunk-J4ULR4QR.js +0 -54
  401. package/dist/cli/chunks/chunk-R2ICZKQA.js +0 -2
  402. package/dist/cli/chunks/chunk-TR37Q7A6.js +0 -15
  403. package/dist/cli/chunks/chunk-XYZUBAR6.js +0 -316
  404. package/dist/cli/chunks/chunk-YDMPTCJ3.js +0 -14
  405. package/dist/cli/chunks/client-ZYH66YRI.js +0 -2
  406. package/dist/cli/chunks/core-handlers-XKSPHEHE.js +0 -2
  407. package/dist/cli/chunks/cost-tracker-CKLDQ5AZ.js +0 -2
  408. package/dist/cli/chunks/cross-domain-router-6VYNFQZA.js +0 -2
  409. package/dist/cli/chunks/dream-DRSSIHPP.js +0 -2
  410. package/dist/cli/chunks/heartbeat-scheduler-FMICCNWK.js +0 -2
  411. package/dist/cli/chunks/hnsw-adapter-4TGBNJEZ.js +0 -2
  412. package/dist/cli/chunks/hnsw-index-J4NSCPAZ.js +0 -2
  413. package/dist/cli/chunks/hybrid-backend-NKPA3QE7.js +0 -2
  414. package/dist/cli/chunks/impact-analyzer-MWX7XY7X.js +0 -2
  415. package/dist/cli/chunks/init-handler-C7ZBDAC5.js +0 -81
  416. package/dist/cli/chunks/init-wizard-EX5N5Q7X.js +0 -2
  417. package/dist/cli/chunks/kernel-EQLZDHDD.js +0 -2
  418. package/dist/cli/chunks/knowledge-graph-A3WSMQ6U.js +0 -2
  419. package/dist/cli/chunks/llm-router-service-A6XYWTL6.js +0 -2
  420. package/dist/cli/chunks/load-test-WF2PCXLI.js +0 -2
  421. package/dist/cli/chunks/memory-backend-BKGLI2RF.js +0 -2
  422. package/dist/cli/chunks/memory-handlers-PWI3G4P4.js +0 -2
  423. package/dist/cli/chunks/pattern-null-store-YTBLEH7D.js +0 -2
  424. package/dist/cli/chunks/protocol-executor-HFR2D54O.js +0 -2
  425. package/dist/cli/chunks/qe-reasoning-bank-MYFBQUYV.js +0 -2
  426. package/dist/cli/chunks/queen-coordinator-CQQMOTIW.js +0 -2
  427. package/dist/cli/chunks/router-GKWLPA3N.js +0 -2
  428. package/dist/cli/chunks/routing-feedback-WA4D5JRF.js +0 -2
  429. package/dist/cli/chunks/rvf-dual-writer-H3ZXS5MA.js +0 -2
  430. package/dist/cli/chunks/rvf-migration-adapter-J7MTCOQA.js +0 -2
  431. package/dist/cli/chunks/rvf-native-adapter-HXBY4VYI.js +0 -2
  432. package/dist/cli/chunks/safe-db-INVJ5LHR.js +0 -2
  433. package/dist/cli/chunks/schedule-XRIPPL52.js +0 -2
  434. package/dist/cli/chunks/scheduler-HBN3KPRW.js +0 -2
  435. package/dist/cli/chunks/sqlite-persistence-6KNLT5Q2.js +0 -2
  436. package/dist/cli/chunks/sync-S6Z2U46T.js +0 -2
  437. package/dist/cli/chunks/test-IISTF5W6.js +0 -33
  438. package/dist/cli/chunks/test-scheduling-FKYX4OLF.js +0 -15
  439. package/dist/cli/chunks/token-bootstrap-OKO3JEKT.js +0 -2
  440. package/dist/cli/chunks/unified-memory-WVELSL6T.js +0 -2
  441. package/dist/cli/chunks/unified-memory-hnsw-7P5MVKXD.js +0 -2
  442. package/dist/cli/chunks/unified-persistence-YLFCEWYY.js +0 -2
  443. package/dist/cli/chunks/visual-security-T5OM742H.js +0 -2
  444. package/dist/cli/chunks/witness-chain-D6X4OZP5.js +0 -2
  445. package/dist/cli/chunks/witness-chain-repair-3LG4BF7C.js +0 -2
  446. package/dist/cli/chunks/workflow-orchestrator-OORDDKT3.js +0 -2
  447. package/dist/cli/chunks/wrappers-2B5NHICD.js +0 -2
@@ -1,5 +1,5 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.1");process.exit(0)}
2
- import"./chunk-JYF3QF4C.js";import{b as $}from"./chunk-C3BW3Q27.js";import{a as k,b as W,c as v,g as C}from"./chunk-27S47AYK.js";import{c as b}from"./chunk-5C4UYXQL.js";import"./chunk-PZDI7WQ3.js";import"./chunk-ARWSPV2C.js";import"./chunk-PNK5KHSI.js";import{Command as D}from"commander";import o from"chalk";function O(w,i){let h=w.indexOf("=");return h>0&&(i[w.substring(0,h)]=w.substring(h+1)),i}function V(w,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.3");process.exit(0)}
2
+ import"./chunk-M3ACHBC7.js";import{b as $}from"./chunk-A6PII4R4.js";import{a as k,b as W,c as v,g as C}from"./chunk-QDQLL2QB.js";import{c as b}from"./chunk-UGNTLSBL.js";import"./chunk-Z7UGEQ4G.js";import"./chunk-2GJJGO5D.js";import"./chunk-WSUYEVSY.js";import{Command as D}from"commander";import o from"chalk";function O(w,i){let h=w.indexOf("=");return h>0&&(i[w.substring(0,h)]=w.substring(h+1)),i}function V(w,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
3
3
  Running workflow from: ${n}
4
4
  `));let l=k(u);if(!l.success||!l.workflow){console.log(o.red("Failed to parse pipeline:"));for(let g of l.errors)console.log(o.red(` ${g}`));await i(1)}let f={...b(t.params,"params")};if(l.pipeline){for(let g of l.pipeline.stages)if(g.params)for(let[y,p]of Object.entries(g.params))f[y]=p}if(!w.workflowOrchestrator.getWorkflow(l.workflow.id)){let g=w.workflowOrchestrator.registerWorkflow(l.workflow);g.success||(console.log(o.red(`Failed to register workflow: ${g.error.message}`)),await i(1))}let c=await w.workflowOrchestrator.executeWorkflow(l.workflow.id,f);if(!c.success){console.log(o.red(`Failed to start workflow: ${c.error.message}`)),await i(1);return}let a=c.value;if(console.log(o.cyan(` Execution ID: ${a}`)),console.log(o.gray(` Workflow: ${l.workflow.name}`)),console.log(o.gray(` Stages: ${l.workflow.steps.length}`)),console.log(""),t.watch){console.log(o.blue(`Workflow Progress:
5
5
  `));let g,y=Date.now();for(;;){let d=w.workflowOrchestrator.getWorkflowStatus(a);if(!d)break;if(!g||g.progress!==d.progress||g.status!==d.status||JSON.stringify(g.currentSteps)!==JSON.stringify(d.currentSteps)){process.stdout.write("\r\x1B[K");let S="\u2588".repeat(Math.floor(d.progress/5))+"\u2591".repeat(20-Math.floor(d.progress/5)),R=d.status==="completed"?o.green:d.status==="failed"?o.red:d.status==="running"?o.yellow:o.gray;console.log(` [${S}] ${d.progress}% - ${R(d.status)}`),d.currentSteps.length>0&&t.verbose&&console.log(o.gray(` Running: ${d.currentSteps.join(", ")}`)),g=d}if(d.status==="completed"||d.status==="failed"||d.status==="cancelled")break;await new Promise(S=>setTimeout(S,500))}let p=w.workflowOrchestrator.getWorkflowStatus(a);if(p){console.log("");let d=p.duration||Date.now()-y;p.status==="completed"?(console.log(o.green("Workflow completed successfully")),console.log(o.gray(` Duration: ${$(d)}`)),console.log(o.gray(` Completed: ${p.completedSteps.length} stages`)),p.skippedSteps.length>0&&console.log(o.yellow(` Skipped: ${p.skippedSteps.length} stages`))):p.status==="failed"?(console.log(o.red("Workflow failed")),console.log(o.red(` Error: ${p.error}`)),console.log(o.gray(` Failed stages: ${p.failedSteps.join(", ")}`))):console.log(o.yellow(`Workflow ${p.status}`))}console.log(""),await i(p?.status==="completed"?0:1);return}else console.log(o.green("Workflow execution started")),console.log(o.gray(` Use 'aqe workflow status ${a}' to check progress`));console.log(""),await i(0)}catch(l){console.error(o.red(`
@@ -35,10 +35,10 @@ Workflow cancelled: ${n}
35
35
  `)):console.log(o.red(`
36
36
  Failed to cancel workflow: ${t.error.message}
37
37
  `)),await i(t.success?0:1)}catch(t){console.error(o.red(`
38
- Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-WN7XNTCJ.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
38
+ Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-AEMIS6PA.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
39
39
  Browser Workflow Templates:
40
40
  `));for(let u of e.data.availableTemplates)console.log(` ${o.cyan(u)}`);console.log("")}else console.log(o.red(`Failed: ${e.error||"Unknown error"}`));await i(0)}catch(n){console.error(o.red(`
41
- Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-WN7XNTCJ.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-EBSUG6HP.js"),s=new e,f={variables:t.var||{}};if(t.yaml)f.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let c=await import("fs"),g=(await import("path")).resolve(n);c.existsSync(g)||(console.log(o.red(`
41
+ Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-AEMIS6PA.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-DPHTFIGX.js"),s=new e,f={variables:t.var||{}};if(t.yaml)f.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let c=await import("fs"),g=(await import("path")).resolve(n);c.existsSync(g)||(console.log(o.red(`
42
42
  File not found: ${g}
43
43
  `)),await i(1)),f.workflowYaml=c.readFileSync(g,"utf-8")}else f.templateName=n;else console.log(o.red(`
44
44
  Provide a template name or --yaml. Use "workflow browser-list" to see templates.
@@ -0,0 +1,2 @@
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.3");process.exit(0)}
2
+ import{a,b,c,d}from"./chunk-AEL4XJGJ.js";import"./chunk-DH5NWHH2.js";import"./chunk-7SWHW5AC.js";import"./chunk-OGARNKLS.js";import"./chunk-UGNTLSBL.js";import"./chunk-ASUXS4N4.js";import"./chunk-UTALYUMW.js";import"./chunk-NT6FYFJA.js";import"./chunk-7TW5UGDP.js";import"./chunk-D6PUDLJ4.js";import"./chunk-M3ONCPSU.js";import"./chunk-HVIFA73X.js";import"./chunk-CNQUU6CF.js";import"./chunk-POTVF6BY.js";import"./chunk-Z7UGEQ4G.js";import"./chunk-WSND64RL.js";import"./chunk-INVDDFJC.js";import"./chunk-FPFGN2Z5.js";import"./chunk-WLOHTLHO.js";import"./chunk-2GJJGO5D.js";import"./chunk-6TYTBQPV.js";import"./chunk-YTRGMILO.js";import"./chunk-Z7JPWXW2.js";import"./chunk-34Y4CIHD.js";import"./chunk-WSUYEVSY.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
@@ -0,0 +1,2 @@
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.3");process.exit(0)}
2
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-YQ3ZW47V.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-WTMLRMKW.js";import"./chunk-7SWHW5AC.js";import"./chunk-OGARNKLS.js";import"./chunk-UGNTLSBL.js";import"./chunk-ASUXS4N4.js";import"./chunk-UTALYUMW.js";import"./chunk-NT6FYFJA.js";import"./chunk-7TW5UGDP.js";import"./chunk-D6PUDLJ4.js";import"./chunk-M3ONCPSU.js";import"./chunk-HVIFA73X.js";import"./chunk-CNQUU6CF.js";import"./chunk-WSND64RL.js";import"./chunk-INVDDFJC.js";import"./chunk-FPFGN2Z5.js";import"./chunk-WLOHTLHO.js";import"./chunk-2GJJGO5D.js";import"./chunk-6TYTBQPV.js";import"./chunk-YTRGMILO.js";import"./chunk-Z7JPWXW2.js";import"./chunk-34Y4CIHD.js";import"./chunk-WSUYEVSY.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
@@ -9,6 +9,8 @@ import { filterTestFilesForFramework, walkSourceFiles } from '../utils/file-disc
9
9
  import { writeOutput, toJSON, toJUnit, testRunToMarkdown } from '../utils/ci-output.js';
10
10
  import { writeQualityEvidence } from '../../domains/quality-assessment/quality-evidence.js';
11
11
  import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
12
+ import { findProjectRoot } from '../../kernel/project-root.js';
13
+ import { writeGeneratedTestFile } from '../utils/generated-test-writer.js';
12
14
  export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
13
15
  const testCmd = new Command('test')
14
16
  .description('Test generation, execution, scheduling, and load testing')
@@ -19,6 +21,8 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
19
21
  .option('-t, --type <type>', 'Test type (unit|integration|e2e)', 'unit')
20
22
  .option('-F, --format <format>', 'Output format (text|json|junit|markdown)', 'text')
21
23
  .option('-o, --output <path>', 'Write output to file')
24
+ .option('--no-save', 'generate action: print the generated test code instead of writing test files beside the source (#925)')
25
+ .option('--force', 'generate action: overwrite existing test files instead of skipping them')
22
26
  .option('--git-ref <ref>', 'Git ref for schedule action (e.g., main, HEAD~3)')
23
27
  .option('--no-git-aware', 'Disable git-aware test selection (schedule action)')
24
28
  .option('--no-flaky', 'Disable flaky test tracking (schedule action)')
@@ -95,27 +99,56 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
95
99
  // Default text output
96
100
  console.log(chalk.green(`Generated ${generated.tests.length} tests\n`));
97
101
  console.log(chalk.cyan(' Tests:'));
98
- for (const test of generated.tests.slice(0, 10)) {
102
+ // #925/#936: every generated test is handled, with or without
103
+ // --no-save. A cap here used to drop tests past the 10th
104
+ // without writing or printing them.
105
+ const noSave = options.save === false;
106
+ // Files may only be written inside the project that owns the target.
107
+ const fs = await import('fs');
108
+ const projectRoot = findProjectRoot(fs.statSync(targetPath).isDirectory() ? targetPath : path.dirname(targetPath));
109
+ let written = 0;
110
+ let skipped = 0;
111
+ for (const test of generated.tests) {
99
112
  console.log(` ${chalk.white(test.name)}`);
100
113
  console.log(chalk.gray(` Source: ${path.basename(test.sourceFile)}`));
101
114
  console.log(chalk.gray(` Assertions: ${test.assertions}`));
102
115
  if (test.testCode) {
116
+ if (noSave) {
117
+ console.log(chalk.gray(` Would be written to: ${test.testFile} (not written, --no-save)`));
118
+ console.log(` ----- ${path.basename(test.testFile)} -----`);
119
+ console.log(test.testCode);
120
+ console.log(` ----- end ${path.basename(test.testFile)} -----`);
121
+ continue;
122
+ }
103
123
  console.log(chalk.gray(` Test File: ${test.testFile}`));
104
- // Bug #295 fix: Write generated test code to disk
105
- const fs = await import('fs');
106
- const testDir = path.dirname(test.testFile);
107
- fs.mkdirSync(testDir, { recursive: true });
108
- fs.writeFileSync(test.testFile, test.testCode, 'utf-8');
109
- console.log(chalk.green(` Written to: ${test.testFile}`));
124
+ // Bug #295 fix: Write generated test code to disk, but never
125
+ // outside the project or over an existing file without --force.
126
+ const outcome = writeGeneratedTestFile(test.testFile, test.testCode, { projectRoot, force: options.force === true });
127
+ if (outcome.status === 'written') {
128
+ console.log(chalk.green(` Written to: ${outcome.path}`));
129
+ written++;
130
+ }
131
+ else if (outcome.status === 'exists') {
132
+ console.log(chalk.yellow(` ${outcome.path} exists, skipped (use --force to overwrite)`));
133
+ skipped++;
134
+ }
135
+ else {
136
+ console.log(chalk.red(` ${outcome.path} is outside the project root ${projectRoot}, skipped (not written)`));
137
+ skipped++;
138
+ }
110
139
  }
111
140
  }
112
- if (generated.tests.length > 10) {
113
- console.log(chalk.gray(` ... and ${generated.tests.length - 10} more`));
141
+ if (!noSave) {
142
+ const skippedNote = skipped > 0 ? ` (${skipped} skipped)` : '';
143
+ console.log(chalk.gray(`\n Wrote ${written} of ${generated.tests.length} generated test files${skippedNote}.`));
114
144
  }
115
145
  console.log(`\n Coverage Estimate: ${chalk.yellow(generated.coverageEstimate == null ? 'Unmeasured' : generated.coverageEstimate + '%')}`);
116
146
  if (generated.patternsUsed.length > 0) {
117
147
  console.log(` Patterns Used: ${chalk.cyan(generated.patternsUsed.join(', '))}`);
118
148
  }
149
+ if (options.save === false) {
150
+ console.log(chalk.gray(' --no-save: no generated test files were written.'));
151
+ }
119
152
  }
120
153
  }
121
154
  else {
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `aqe init` negatable flag resolution (#922, #931, #935)
3
+ *
4
+ * Commander maps a negatable `--no-<name>` flag to `options.<name> === false`;
5
+ * it never sets `options.no<Name>`. Reading `noMcp` / `noGovernance` made
6
+ * `--no-mcp` (#931) and `--no-governance` (#935) silent no-ops. Every
7
+ * negatable init flag is resolved here, the same way, so the handler never
8
+ * reads a Commander option name by hand.
9
+ *
10
+ * The `no<Name>: true` spelling is still honoured for programmatic callers.
11
+ *
12
+ * `--no-mcp` and `--with-mcp` contradict each other. The CLI rejects the
13
+ * combination at parse time (Commander `.conflicts()`); this resolver
14
+ * rejects it for programmatic callers too, so neither path guesses.
15
+ */
16
+ export interface InitFlagInput {
17
+ /** `--no-mcp` sets this to false. */
18
+ mcp?: boolean;
19
+ /** `--no-governance` sets this to false. */
20
+ governance?: boolean;
21
+ /** `--no-claude` sets this to false (#532). */
22
+ claude?: boolean;
23
+ /** `--no-statusline` sets this to false (#591). */
24
+ statusline?: boolean;
25
+ /** `--no-database` sets this to false. */
26
+ database?: boolean;
27
+ /** Programmatic aliases. */
28
+ noMcp?: boolean;
29
+ noGovernance?: boolean;
30
+ noClaude?: boolean;
31
+ noStatusLine?: boolean;
32
+ /** `--with-mcp`: write the entry even when the agentic-qe-fleet plugin is enabled. */
33
+ withMcp?: boolean;
34
+ }
35
+ export interface ResolvedInitFlags {
36
+ noMcp: boolean;
37
+ withMcp: boolean;
38
+ noGovernance: boolean;
39
+ noClaude: boolean;
40
+ noStatusLine: boolean;
41
+ noDatabase: boolean;
42
+ }
43
+ export declare const INIT_MCP_FLAG_CONFLICT_MESSAGE = "--no-mcp and --with-mcp cannot be combined: --no-mcp skips the .mcp.json entry, --with-mcp forces it";
44
+ export declare function resolveInitFlags(options: InitFlagInput): ResolvedInitFlags;
45
+ //# sourceMappingURL=init-flags.d.ts.map
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `aqe init` negatable flag resolution (#922, #931, #935)
3
+ *
4
+ * Commander maps a negatable `--no-<name>` flag to `options.<name> === false`;
5
+ * it never sets `options.no<Name>`. Reading `noMcp` / `noGovernance` made
6
+ * `--no-mcp` (#931) and `--no-governance` (#935) silent no-ops. Every
7
+ * negatable init flag is resolved here, the same way, so the handler never
8
+ * reads a Commander option name by hand.
9
+ *
10
+ * The `no<Name>: true` spelling is still honoured for programmatic callers.
11
+ *
12
+ * `--no-mcp` and `--with-mcp` contradict each other. The CLI rejects the
13
+ * combination at parse time (Commander `.conflicts()`); this resolver
14
+ * rejects it for programmatic callers too, so neither path guesses.
15
+ */
16
+ export const INIT_MCP_FLAG_CONFLICT_MESSAGE = '--no-mcp and --with-mcp cannot be combined: --no-mcp skips the .mcp.json entry, --with-mcp forces it';
17
+ /** True when the negatable flag was turned off, or the programmatic alias was set. */
18
+ function isOff(value, alias) {
19
+ return value === false || alias === true;
20
+ }
21
+ export function resolveInitFlags(options) {
22
+ const resolved = {
23
+ noMcp: isOff(options.mcp, options.noMcp),
24
+ withMcp: options.withMcp === true,
25
+ noGovernance: isOff(options.governance, options.noGovernance),
26
+ noClaude: isOff(options.claude, options.noClaude),
27
+ noStatusLine: isOff(options.statusline, options.noStatusLine),
28
+ noDatabase: options.database === false,
29
+ };
30
+ if (resolved.noMcp && resolved.withMcp) {
31
+ throw new Error(INIT_MCP_FLAG_CONFLICT_MESSAGE);
32
+ }
33
+ return resolved;
34
+ }
35
+ //# sourceMappingURL=init-flags.js.map
@@ -114,10 +114,16 @@ interface InitOptions {
114
114
  withWindsurf?: boolean;
115
115
  withContinuedev?: boolean;
116
116
  withAllPlatforms?: boolean;
117
+ /** commander negatable flag: `--no-mcp` sets this to false (#931). */
118
+ mcp?: boolean;
119
+ /** Programmatic alias for `--no-mcp`. */
117
120
  noMcp?: boolean;
118
121
  withMcp?: boolean;
119
122
  withClaudeFlow?: boolean;
120
123
  skipClaudeFlow?: boolean;
124
+ /** commander negatable flag: `--no-governance` sets this to false (#935). */
125
+ governance?: boolean;
126
+ /** Programmatic alias for `--no-governance`. */
121
127
  noGovernance?: boolean;
122
128
  /** commander negatable flag: `--no-claude` sets this to false (#532). */
123
129
  claude?: boolean;
@@ -8,6 +8,7 @@ import chalk from 'chalk';
8
8
  import { createRequire } from 'node:module';
9
9
  import { ALL_DOMAINS } from '../../shared/types/index.js';
10
10
  import { toErrorMessage } from '../../shared/error-utils.js';
11
+ import { resolveInitFlags } from './init-flags.js';
11
12
  // ============================================================================
12
13
  // Init Handler
13
14
  // ============================================================================
@@ -58,8 +59,9 @@ export class InitHandler {
58
59
  .option('--with-ruflo', 'Add optional Ruflo guidance and lifecycle hooks to the Codex setup')
59
60
  .option('--with-windsurf', 'Include Windsurf MCP config and rules')
60
61
  .option('--with-continuedev', 'Include Continue.dev MCP config and rules')
61
- .option('--no-mcp', 'Skip MCP server config (MCP is enabled by default)')
62
- .option('--with-mcp', 'Enable MCP server config (default — kept for backward compatibility)')
62
+ .option('--no-mcp', 'Skip MCP server config (MCP is enabled by default). Cannot be combined with --with-mcp')
63
+ .addOption(new Option('--with-mcp', 'Write the project .mcp.json agentic-qe entry even when the agentic-qe-fleet Claude Code plugin already provides the AQE MCP server (#922). Cannot be combined with --no-mcp')
64
+ .conflicts('mcp'))
63
65
  .option('--with-all-platforms', 'Include all coding agent platform configurations')
64
66
  .option('--auto-migrate', 'Automatically migrate from v2 if detected')
65
67
  .option('--with-claude-flow', 'Force Claude Flow integration setup')
@@ -123,13 +125,14 @@ export class InitHandler {
123
125
  options.withCopilot || options.withCursor || options.withCline ||
124
126
  options.withKilocode || options.withRoocode || options.withCodex ||
125
127
  options.withWindsurf || options.withContinuedev || options.withAllPlatforms);
126
- const databaseFree = options.database === false || options.memory === 'memory';
128
+ const flags = resolveInitFlags(options);
129
+ const databaseFree = flags.noDatabase || options.memory === 'memory';
127
130
  // #532: `--no-claude` (commander negatable → options.claude === false) is
128
131
  // only honored by the modular orchestrator. Route there too, or the flag
129
132
  // silently falls through to runStandardInit and installs the full Claude
130
133
  // surface it was meant to suppress.
131
- const noClaudeRequested = options.claude === false;
132
- const noStatusLineRequested = options.statusline === false;
134
+ const noClaudeRequested = flags.noClaude;
135
+ const noStatusLineRequested = flags.noStatusLine;
133
136
  if (options.browserEngine || options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
134
137
  console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
135
138
  await this.runModularInit(options, context);
@@ -145,10 +148,12 @@ export class InitHandler {
145
148
  }
146
149
  async runModularInit(options, _context) {
147
150
  const isJsonMode = options.json === true;
151
+ // #931/#935: commander maps --no-<name> to options.<name> === false.
152
+ const flags = resolveInitFlags(options);
148
153
  // Database-free mode: `--no-database` or `--memory memory`. Skips the SQLite
149
154
  // database phase and configures any MCP server to run in-memory. Export the
150
155
  // backend env up-front so every subsystem spawned during init honors it.
151
- const memoryOnly = options.database === false || options.memory === 'memory';
156
+ const memoryOnly = flags.noDatabase || options.memory === 'memory';
152
157
  if (memoryOnly) {
153
158
  process.env.AQE_MEMORY_BACKEND = 'memory';
154
159
  if (!isJsonMode) {
@@ -159,7 +164,7 @@ export class InitHandler {
159
164
  // `--with-<platform>` flags become the only targets. Commander maps the
160
165
  // negatable flag to `options.claude === false`. Warn if it would produce an
161
166
  // empty install (no platform selected) so the user isn't surprised.
162
- const noClaude = options.claude === false;
167
+ const noClaude = flags.noClaude;
163
168
  if (noClaude) {
164
169
  const anyPlatform = Boolean(options.withOpencode || options.withN8n || options.withKiro ||
165
170
  options.withCopilot || options.withCursor || options.withCline ||
@@ -191,10 +196,11 @@ export class InitHandler {
191
196
  codexGuidance: options.codexGuidance,
192
197
  withWindsurf: options.withWindsurf,
193
198
  withContinueDev: options.withContinuedev,
194
- noMcp: options.noMcp && !options.withMcp,
195
- noGovernance: options.noGovernance,
199
+ noMcp: flags.noMcp,
200
+ withMcp: flags.withMcp,
201
+ noGovernance: flags.noGovernance,
196
202
  noClaude,
197
- noStatusLine: options.statusline === false,
203
+ noStatusLine: flags.noStatusLine,
198
204
  memoryBackend: memoryOnly ? 'memory' : undefined,
199
205
  });
200
206
  console.log(chalk.white(' Analyzing project...\n'));
@@ -299,6 +305,7 @@ export class InitHandler {
299
305
  await this.cleanupAndExit(0);
300
306
  }
301
307
  async runLegacyWizard(options, _context) {
308
+ const flags = resolveInitFlags(options);
302
309
  const { InitOrchestrator } = await import('../../init/init-wizard.js');
303
310
  const orchestratorOptions = {
304
311
  projectRoot: process.cwd(),
@@ -307,6 +314,8 @@ export class InitHandler {
307
314
  browserEngine: options.browserEngine,
308
315
  skipPatterns: options.skipPatterns,
309
316
  withN8n: options.withN8n,
317
+ noMcp: flags.noMcp,
318
+ withMcp: flags.withMcp,
310
319
  };
311
320
  const orchestrator = new InitOrchestrator(orchestratorOptions);
312
321
  if (options.wizard) {
@@ -464,6 +473,8 @@ Options:
464
473
  --with-claude-flow Force Claude Flow integration setup
465
474
  --skip-claude-flow Skip Claude Flow integration
466
475
  --no-mcp Skip MCP server config (MCP is enabled by default)
476
+ --with-mcp Add the .mcp.json entry even if the agentic-qe-fleet plugin is enabled
477
+ (--no-mcp and --with-mcp cannot be combined)
467
478
  --no-governance Skip governance configuration (ADR-058)
468
479
  --modular Use new modular init system
469
480
 
@@ -471,6 +482,9 @@ MCP Server:
471
482
  MCP server configuration is ENABLED BY DEFAULT. It writes .mcp.json
472
483
  at the project root so Claude Code auto-discovers the AQE MCP server.
473
484
  Use --no-mcp to skip if you only want CLI commands.
485
+ If the agentic-qe-fleet Claude Code plugin is enabled (user, project or
486
+ local settings), init skips the entry because the plugin already provides
487
+ the AQE MCP server. Use --with-mcp to add the project entry anyway.
474
488
 
475
489
  Governance:
476
490
  Governance is ENABLED BY DEFAULT. It installs .claude/guidance/ with:
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Agentic QE v3 - Generated test file writer (#936 follow-up)
3
+ *
4
+ * `aqe test generate` writes each generated test beside its source. This
5
+ * module decides whether a single write is safe:
6
+ * - the resolved path must stay inside the project root, so a bad path
7
+ * (for example from a directory named `my.ts-app`) can never create files
8
+ * outside the project;
9
+ * - an existing file is never replaced unless the caller passed --force,
10
+ * because generated files carry no marker that tells them apart from
11
+ * hand-written tests.
12
+ *
13
+ * @module cli/utils/generated-test-writer
14
+ */
15
+ export type GeneratedTestWriteStatus = 'written' | 'exists' | 'outside-project';
16
+ export interface GeneratedTestWriteResult {
17
+ status: GeneratedTestWriteStatus;
18
+ /** Absolute path that was (or would have been) written. */
19
+ path: string;
20
+ }
21
+ export interface GeneratedTestWriteOptions {
22
+ /** Directory every written file must stay inside. */
23
+ projectRoot: string;
24
+ /** Overwrite an existing file instead of skipping it. */
25
+ force?: boolean;
26
+ }
27
+ /** True when `file` is inside `root` (never equal to it). */
28
+ export declare function isInsideRoot(file: string, root: string): boolean;
29
+ /**
30
+ * Write one generated test file if it is safe to do so.
31
+ *
32
+ * @returns what happened; nothing is written unless status is 'written'.
33
+ */
34
+ export declare function writeGeneratedTestFile(testFile: string, testCode: string, options: GeneratedTestWriteOptions): GeneratedTestWriteResult;
35
+ //# sourceMappingURL=generated-test-writer.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Agentic QE v3 - Generated test file writer (#936 follow-up)
3
+ *
4
+ * `aqe test generate` writes each generated test beside its source. This
5
+ * module decides whether a single write is safe:
6
+ * - the resolved path must stay inside the project root, so a bad path
7
+ * (for example from a directory named `my.ts-app`) can never create files
8
+ * outside the project;
9
+ * - an existing file is never replaced unless the caller passed --force,
10
+ * because generated files carry no marker that tells them apart from
11
+ * hand-written tests.
12
+ *
13
+ * @module cli/utils/generated-test-writer
14
+ */
15
+ import * as fs from 'fs';
16
+ import * as path from 'path';
17
+ /** True when `file` is inside `root` (never equal to it). */
18
+ export function isInsideRoot(file, root) {
19
+ const rel = path.relative(path.resolve(root), path.resolve(file));
20
+ return rel !== '' && !rel.startsWith('..') && !path.isAbsolute(rel);
21
+ }
22
+ /**
23
+ * Write one generated test file if it is safe to do so.
24
+ *
25
+ * @returns what happened; nothing is written unless status is 'written'.
26
+ */
27
+ export function writeGeneratedTestFile(testFile, testCode, options) {
28
+ const target = path.resolve(testFile);
29
+ if (!isInsideRoot(target, options.projectRoot)) {
30
+ return { status: 'outside-project', path: target };
31
+ }
32
+ fs.mkdirSync(path.dirname(target), { recursive: true });
33
+ try {
34
+ // 'wx' fails if the file exists, so the check and the write are atomic.
35
+ fs.writeFileSync(target, testCode, { encoding: 'utf-8', flag: options.force ? 'w' : 'wx' });
36
+ }
37
+ catch (error) {
38
+ if (error.code === 'EEXIST')
39
+ return { status: 'exists', path: target };
40
+ throw error;
41
+ }
42
+ return { status: 'written', path: target };
43
+ }
44
+ //# sourceMappingURL=generated-test-writer.js.map
@@ -116,7 +116,10 @@ export class ContextCompiler {
116
116
  return { size: this.cache.size, ttlMs: this.cacheTtl };
117
117
  }
118
118
  buildCacheKey(request) {
119
- return `${request.agentType}:${request.targetFiles.sort().join(',')}:${request.taskDescription.slice(0, 100)}`;
119
+ // JSON tuple: a ',' or ':' in a file name or agent type cannot shift fields (#914).
120
+ // Sort a copy so the caller's targetFiles array is not reordered.
121
+ const files = [...request.targetFiles].sort();
122
+ return JSON.stringify([request.agentType, files, request.taskDescription.slice(0, 100)]);
120
123
  }
121
124
  generateSummary(request, fragments, sources) {
122
125
  return [
@@ -12,6 +12,7 @@ import { BaseModelProvider } from '../model-provider.js';
12
12
  import { CONSENSUS_CONSTANTS, OLLAMA_CONSTANTS } from '../../constants.js';
13
13
  import { toErrorMessage, toError } from '../../../shared/error-utils.js';
14
14
  import { resolveOllamaBaseUrl } from '../../../shared/llm/ollama-url.js';
15
+ import { fetchWithResponseDeadline } from '../../../shared/llm/providers/response-deadline.js';
15
16
  // ============================================================================
16
17
  // Model Information
17
18
  // ============================================================================
@@ -102,13 +103,9 @@ export class OllamaModelProvider extends BaseModelProvider {
102
103
  */
103
104
  async listModels() {
104
105
  try {
105
- const controller = new AbortController();
106
- const timeoutId = setTimeout(() => controller.abort(), CONSENSUS_CONSTANTS.OLLAMA_CONNECTION_TEST_TIMEOUT_MS);
107
- const response = await fetch(`${this.config.baseUrl}/api/tags`, {
108
- method: 'GET',
109
- signal: controller.signal,
110
- });
111
- clearTimeout(timeoutId);
106
+ // The deadline stays armed until the body is read (issue #961).
107
+ const timeoutMs = CONSENSUS_CONSTANTS.OLLAMA_CONNECTION_TEST_TIMEOUT_MS;
108
+ const response = await fetchWithResponseDeadline(`${this.config.baseUrl}/api/tags`, { method: 'GET' }, timeoutMs, () => new Error(`Ollama list models timed out after ${timeoutMs}ms`));
112
109
  if (!response.ok) {
113
110
  throw new Error(`Failed to list models: ${response.status}`);
114
111
  }
@@ -233,27 +230,19 @@ export class OllamaModelProvider extends BaseModelProvider {
233
230
  * Make a request to Ollama API
234
231
  */
235
232
  async makeRequest(request, timeout) {
236
- const controller = new AbortController();
237
- const timeoutId = setTimeout(() => controller.abort(), timeout);
238
- try {
239
- const response = await fetch(`${this.config.baseUrl}/api/chat`, {
240
- method: 'POST',
241
- headers: {
242
- 'Content-Type': 'application/json',
243
- },
244
- body: JSON.stringify(request),
245
- signal: controller.signal,
246
- });
247
- clearTimeout(timeoutId);
248
- if (!response.ok) {
249
- const errorBody = await response.text();
250
- throw new Error(`Ollama API error: ${response.status} - ${errorBody}`);
251
- }
252
- return (await response.json());
253
- }
254
- finally {
255
- clearTimeout(timeoutId);
233
+ // One deadline covers headers and the whole body, error bodies included (issue #961).
234
+ const response = await fetchWithResponseDeadline(`${this.config.baseUrl}/api/chat`, {
235
+ method: 'POST',
236
+ headers: {
237
+ 'Content-Type': 'application/json',
238
+ },
239
+ body: JSON.stringify(request),
240
+ }, timeout, () => new Error(`Ollama request timed out after ${timeout}ms`));
241
+ if (!response.ok) {
242
+ const errorBody = await response.text();
243
+ throw new Error(`Ollama API error: ${response.status} - ${errorBody}`);
256
244
  }
245
+ return (await response.json());
257
246
  }
258
247
  /**
259
248
  * Check if an error is non-retryable
@@ -11,6 +11,7 @@
11
11
  import { BaseModelProvider } from '../model-provider.js';
12
12
  import { toErrorMessage, toError } from '../../../shared/error-utils.js';
13
13
  import { resolveModelPricing } from '../../../shared/llm/cost-tracker.js';
14
+ import { fetchWithResponseDeadline } from '../../../shared/llm/providers/response-deadline.js';
14
15
  // ============================================================================
15
16
  // Model Cost and Tier Information
16
17
  // ============================================================================
@@ -286,31 +287,19 @@ export class OpenRouterModelProvider extends BaseModelProvider {
286
287
  * Make a request to OpenRouter API
287
288
  */
288
289
  async makeRequest(request, timeout) {
289
- const controller = new AbortController();
290
- const timeoutId = setTimeout(() => controller.abort(), timeout);
291
- try {
292
- const headers = {
293
- Authorization: `Bearer ${this.config.apiKey}`,
294
- 'Content-Type': 'application/json',
295
- 'HTTP-Referer': this.config.siteUrl || 'https://github.com/agentic-qe',
296
- 'X-Title': this.config.appName || 'Agentic QE',
297
- };
298
- const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
299
- method: 'POST',
300
- headers,
301
- body: JSON.stringify(request),
302
- signal: controller.signal,
303
- });
304
- clearTimeout(timeoutId);
305
- if (!response.ok) {
306
- const errorBody = await response.text();
307
- throw new Error(`OpenRouter API error: ${response.status} - ${errorBody}`);
308
- }
309
- return (await response.json());
310
- }
311
- finally {
312
- clearTimeout(timeoutId);
290
+ const headers = {
291
+ Authorization: `Bearer ${this.config.apiKey}`,
292
+ 'Content-Type': 'application/json',
293
+ 'HTTP-Referer': this.config.siteUrl || 'https://github.com/agentic-qe',
294
+ 'X-Title': this.config.appName || 'Agentic QE',
295
+ };
296
+ // One deadline covers headers and the whole body, error bodies included (issue #961).
297
+ const response = await fetchWithResponseDeadline('https://openrouter.ai/api/v1/chat/completions', { method: 'POST', headers, body: JSON.stringify(request) }, timeout, () => new Error(`OpenRouter request timed out after ${timeout}ms`));
298
+ if (!response.ok) {
299
+ const errorBody = await response.text();
300
+ throw new Error(`OpenRouter API error: ${response.status} - ${errorBody}`);
313
301
  }
302
+ return (await response.json());
314
303
  }
315
304
  /**
316
305
  * Check if an error is non-retryable
@@ -10,6 +10,7 @@ import { ok, err } from '../../shared/types/index.js';
10
10
  import { toError } from '../../shared/error-utils.js';
11
11
  import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
12
12
  import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
13
+ import { jestExactPathPattern, runnerFilePath } from '../../shared/test-runner-args.js';
13
14
  function escapeRegExp(s) {
14
15
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
15
16
  }
@@ -190,7 +191,8 @@ export function registerTestExecutionHandlers(ctx) {
190
191
  let execution;
191
192
  let output;
192
193
  try {
193
- execution = spawnSync('npx', ['vitest', 'run', ...testFiles, '--reporter=json', ...report.args], options);
194
+ // #909: absolute paths cannot be read as flags (e.g. a "--watch" entry).
195
+ execution = spawnSync('npx', ['vitest', 'run', ...testFiles.map(file => runnerFilePath(file, options.cwd)), '--reporter=json', ...report.args], options);
194
196
  output = execution.error || execution.signal
195
197
  ? ''
196
198
  : report.read(execution.stdout || '') ?? '';
@@ -201,7 +203,7 @@ export function registerTestExecutionHandlers(ctx) {
201
203
  // Preserve the existing Jest fallback when Vitest cannot produce a report.
202
204
  if (!output.includes('{') && execution.status !== 0 && !execution.error && !execution.signal) {
203
205
  runner = 'jest';
204
- execution = spawnSync('npx', ['jest', ...testFiles, '--json'], options);
206
+ execution = spawnSync('npx', ['jest', ...testFiles.map(file => jestExactPathPattern(file, options.cwd)), '--json'], options);
205
207
  output = execution.stdout || '';
206
208
  }
207
209
  const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
@@ -11,6 +11,7 @@ import { ok, err, } from '../../shared/types/index.js';
11
11
  import { createEvent } from '../../shared/events/domain-events.js';
12
12
  import { toError } from '../../shared/error-utils.js';
13
13
  import { LoggerFactory } from '../../logging/index.js';
14
+ import { addToCount } from '../../shared/utils/safe-record.js';
14
15
  const logger = LoggerFactory.create('defect-investigation');
15
16
  export const DefectInvestigationEvents = {
16
17
  DefectInvestigationStarted: 'coordination.DefectInvestigationStarted',
@@ -351,7 +352,9 @@ export class DefectInvestigationProtocol {
351
352
  totalInvestigations: 0,
352
353
  };
353
354
  const pattern = result.rootCause.rootCause;
354
- stats.patterns[pattern] = (stats.patterns[pattern] ?? 0) + 1;
355
+ // Root causes are free text and stats come back from storage as plain
356
+ // objects, so read and write own properties only (#914).
357
+ addToCount(stats.patterns, pattern);
355
358
  stats.totalInvestigations += 1;
356
359
  await this.memory.set(patternKey, stats, {
357
360
  namespace: this.config.namespace,
@@ -450,9 +450,11 @@ export class DomainTaskExecutor {
450
450
  await this.publishTaskCompleted(task.id, result.value, domain);
451
451
  // ADR-051: Record successful outcome
452
452
  this.recordOutcome(task, routingTier, true, Date.now() - startTime).catch((e) => { logger.warn('recordOutcome failed', { error: e instanceof Error ? e.message : String(e), taskId: task.id }); });
453
- // Save results to files if enabled
453
+ // Save results to files if enabled. A task can opt out per call with
454
+ // payload.saveResults === false (#925); the executor-wide config still
455
+ // acts as the global switch.
454
456
  let savedFiles;
455
- if (this._config.saveResults) {
457
+ if (this._config.saveResults && payload?.saveResults !== false) {
456
458
  try {
457
459
  const saveOptions = {
458
460
  language: payload?.language || this._config.defaultLanguage,