agentic-qe 3.15.0 → 3.15.2

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 (359) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +87 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +5 -5
  5. package/dist/cli/chunks/adapter-EUIELRLI.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-GDHJ6QUN.js → agent-booster-wasm-664M7426.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-MPYYQ2RZ.js → agent-handler-E47ITH45.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-QBSHKLA2.js → agent-memory-branch-CFWVOJX3.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-LXRKHASR.js +2 -0
  10. package/dist/cli/chunks/{arena-UJE2FROF.js → arena-JM3OY263.js} +4 -4
  11. package/dist/cli/chunks/{arena-WIGSL37B.js → arena-ZU5CGBGH.js} +2 -2
  12. package/dist/cli/chunks/{audit-VT7Y2Z7V.js → audit-HVBRC5AS.js} +3 -3
  13. package/dist/cli/chunks/base-4DSLX33Y.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-DSL7LFRK.js → better-sqlite3-45JLBQX3.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-N3C2MDMK.js → brain-handler-FKDONZYA.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-B6NSQ3PZ.js → branch-enumerator-M3DPS3D5.js} +2 -2
  17. package/dist/cli/chunks/{browser-KQ3YNRGW.js → browser-TG2TV6NR.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-AWCQLQZK.js +2 -0
  19. package/dist/cli/chunks/{chunk-DXA7RLYU.js → chunk-2AOAEMJG.js} +2 -2
  20. package/dist/cli/chunks/{chunk-BH2SQQ2N.js → chunk-2AWU2E6R.js} +1 -1
  21. package/dist/cli/chunks/{chunk-DZHIE5UW.js → chunk-2B2MGJ2W.js} +2 -2
  22. package/dist/cli/chunks/{chunk-ISAMM7QA.js → chunk-2JEPRQMT.js} +1 -1
  23. package/dist/cli/chunks/{chunk-7WUHVGGT.js → chunk-2Q4Y3VQ6.js} +2 -2
  24. package/dist/cli/chunks/{chunk-2ZEV3O24.js → chunk-326V7N25.js} +1 -1
  25. package/dist/cli/chunks/{chunk-URUOTHPO.js → chunk-3DCRAW43.js} +2 -2
  26. package/dist/cli/chunks/{chunk-X5RELRY7.js → chunk-3KTAMNKI.js} +2 -2
  27. package/dist/cli/chunks/{chunk-XZDPR6I2.js → chunk-3KXKJSKS.js} +2 -2
  28. package/dist/cli/chunks/{chunk-GV7P5JYF.js → chunk-3RC5UMRJ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-7JC3LHA6.js → chunk-3XF7YTQC.js} +48 -48
  30. package/dist/cli/chunks/{chunk-FCSETOWZ.js → chunk-4MCO43NX.js} +1 -1
  31. package/dist/cli/chunks/{chunk-AW5OWYQ4.js → chunk-55T7PDYP.js} +2 -2
  32. package/dist/cli/chunks/{chunk-MRIZY6HB.js → chunk-56CE7UO4.js} +2 -2
  33. package/dist/cli/chunks/{chunk-P725KXHX.js → chunk-5DFPAJ5O.js} +2 -2
  34. package/dist/cli/chunks/{chunk-OBSX3I4Y.js → chunk-5TEPPW4J.js} +2 -2
  35. package/dist/cli/chunks/{chunk-A37YYHUD.js → chunk-5YS2DF5G.js} +2 -2
  36. package/dist/cli/chunks/chunk-6KEYA4EH.js +316 -0
  37. package/dist/cli/chunks/{chunk-5DJGP4TA.js → chunk-6O4KVU4K.js} +2 -2
  38. package/dist/cli/chunks/{chunk-EBK6CUBD.js → chunk-6OL2WES5.js} +1 -1
  39. package/dist/cli/chunks/{chunk-R6CZCMKD.js → chunk-6UO5YSNN.js} +2 -2
  40. package/dist/cli/chunks/{chunk-WPSGMTI4.js → chunk-6WVEICL2.js} +3 -3
  41. package/dist/cli/chunks/{chunk-XEABMIUH.js → chunk-6XLCFDIB.js} +2 -2
  42. package/dist/cli/chunks/{chunk-P4FRYNHL.js → chunk-7UA7SMM4.js} +1 -1
  43. package/dist/cli/chunks/{chunk-YFRZVNE4.js → chunk-A6L2OCMO.js} +2 -2
  44. package/dist/cli/chunks/{chunk-J4XCBOPA.js → chunk-ANI3KPB7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-FZ3TQAPW.js → chunk-AR5V7VNC.js} +1 -1
  46. package/dist/cli/chunks/{chunk-FFE4XAQA.js → chunk-AS27JP67.js} +1 -1
  47. package/dist/cli/chunks/{chunk-FPTZP7W5.js → chunk-ATGIGJSL.js} +1 -1
  48. package/dist/cli/chunks/{chunk-2ORTL5WG.js → chunk-AXJ75X6I.js} +1 -1
  49. package/dist/cli/chunks/{chunk-OLD2CIDI.js → chunk-B4H66LPR.js} +1 -1
  50. package/dist/cli/chunks/{chunk-I3BH3KIF.js → chunk-BKZSTZDB.js} +1 -1
  51. package/dist/cli/chunks/{chunk-AQZSF32Y.js → chunk-BT6TZTCL.js} +2 -2
  52. package/dist/cli/chunks/{chunk-H77AUJNW.js → chunk-CFDIYZGA.js} +2 -2
  53. package/dist/cli/chunks/{chunk-PN3FYSQ6.js → chunk-CRYZXTSQ.js} +2 -2
  54. package/dist/cli/chunks/{chunk-OYVDTD3A.js → chunk-CV7E627D.js} +2 -2
  55. package/dist/cli/chunks/{chunk-GX5RFGW2.js → chunk-D75HDHX3.js} +1 -1
  56. package/dist/cli/chunks/{chunk-4DCDIKBX.js → chunk-DGKPGRBT.js} +2 -2
  57. package/dist/cli/chunks/{chunk-KUTMQBV4.js → chunk-DHSGCI6H.js} +4 -4
  58. package/dist/cli/chunks/{chunk-CZWWC7GC.js → chunk-DNS37AHW.js} +1 -1
  59. package/dist/cli/chunks/{chunk-F7JVDLOI.js → chunk-E2QHUMCR.js} +2 -2
  60. package/dist/cli/chunks/{chunk-FTFIA4I5.js → chunk-E6GANSLP.js} +2 -2
  61. package/dist/cli/chunks/{chunk-62IEVKN3.js → chunk-EATZW5T2.js} +2 -2
  62. package/dist/cli/chunks/{chunk-LLS6JYPN.js → chunk-EDRIROCG.js} +2 -2
  63. package/dist/cli/chunks/{chunk-S2GNFAOC.js → chunk-EQG3JYSV.js} +2 -2
  64. package/dist/cli/chunks/{chunk-XPUY3ZKD.js → chunk-FCMCQ6OX.js} +9 -9
  65. package/dist/cli/chunks/{chunk-UGYXUPGN.js → chunk-FH6N2LKG.js} +2 -2
  66. package/dist/cli/chunks/{chunk-6GTIJNRO.js → chunk-FNPZINHV.js} +1 -1
  67. package/dist/cli/chunks/{chunk-4FOKHGP5.js → chunk-FRZVLRVR.js} +2 -2
  68. package/dist/cli/chunks/{chunk-5PNRUMRV.js → chunk-GDSLQTJC.js} +2 -2
  69. package/dist/cli/chunks/{chunk-NZ556KZN.js → chunk-GHXNRF63.js} +2 -2
  70. package/dist/cli/chunks/{chunk-N5ZHIQAV.js → chunk-GJ7DON5S.js} +3 -3
  71. package/dist/cli/chunks/{chunk-3Y24VTZ3.js → chunk-GJTH6VBH.js} +1 -1
  72. package/dist/cli/chunks/{chunk-ZXIIB3QE.js → chunk-GSC6JXDE.js} +1 -1
  73. package/dist/cli/chunks/{chunk-4EEY23JS.js → chunk-HADOG2PT.js} +2 -2
  74. package/dist/cli/chunks/{chunk-PJU5HVWV.js → chunk-HBMBO4FD.js} +2 -2
  75. package/dist/cli/chunks/{chunk-VYERAOQL.js → chunk-HFF5ERIE.js} +2 -2
  76. package/dist/cli/chunks/{chunk-GRN47ANK.js → chunk-HMDSBWF6.js} +2 -2
  77. package/dist/cli/chunks/{chunk-LDJ5DZT5.js → chunk-HOBBYORR.js} +1 -1
  78. package/dist/cli/chunks/{chunk-EQ4SDE4L.js → chunk-HS3O763N.js} +3 -3
  79. package/dist/cli/chunks/{chunk-YIDZ3TEN.js → chunk-HSXLHNSS.js} +2 -2
  80. package/dist/cli/chunks/{chunk-4YPL3OXS.js → chunk-HXT4XDQO.js} +2 -2
  81. package/dist/cli/chunks/{chunk-S7CROKX4.js → chunk-HYWW4A2E.js} +2 -2
  82. package/dist/cli/chunks/chunk-I7ECEOFV.js +2 -0
  83. package/dist/cli/chunks/{chunk-FTS6NGBP.js → chunk-I7J2ESGR.js} +2 -2
  84. package/dist/cli/chunks/{chunk-JYRBOSOF.js → chunk-IAOB2G3X.js} +2 -2
  85. package/dist/cli/chunks/{chunk-MEYSIVMP.js → chunk-IBAXNCR2.js} +2 -2
  86. package/dist/cli/chunks/{chunk-JLPNYHJJ.js → chunk-IHKRKRAV.js} +1 -1
  87. package/dist/cli/chunks/{chunk-JJ7WAU4I.js → chunk-IM67YHDK.js} +2 -2
  88. package/dist/cli/chunks/{chunk-DSGRXW6K.js → chunk-IQB5ZBYO.js} +3 -3
  89. package/dist/cli/chunks/{chunk-WR54SKKL.js → chunk-IT753IPZ.js} +2 -2
  90. package/dist/cli/chunks/{chunk-WBR4VRQE.js → chunk-ITM26I6O.js} +2 -2
  91. package/dist/cli/chunks/{chunk-VT5SMBEM.js → chunk-J4EJMAH3.js} +1 -1
  92. package/dist/cli/chunks/{chunk-7JABIXP3.js → chunk-JCB6K24D.js} +2 -2
  93. package/dist/cli/chunks/{chunk-VWCFXCSV.js → chunk-JFFVYCTV.js} +2 -2
  94. package/dist/cli/chunks/{chunk-OTJ22IO2.js → chunk-JIRX6KUR.js} +3 -3
  95. package/dist/cli/chunks/{chunk-X7JEBPEW.js → chunk-JSTKSPYT.js} +1 -1
  96. package/dist/cli/chunks/{chunk-N2MDNEF7.js → chunk-KQMCCHPO.js} +2 -2
  97. package/dist/cli/chunks/{chunk-Z6CRROLU.js → chunk-KTLYL3BS.js} +2 -2
  98. package/dist/cli/chunks/{chunk-QVX22EIM.js → chunk-L77Z3Q6L.js} +2 -2
  99. package/dist/cli/chunks/{chunk-O5AUOBGU.js → chunk-LH3H4V7C.js} +2 -2
  100. package/dist/cli/chunks/{chunk-VQVFGFYK.js → chunk-LRVR56PD.js} +1 -1
  101. package/dist/cli/chunks/{chunk-6MN4L6BS.js → chunk-LVDZ25VX.js} +2 -2
  102. package/dist/cli/chunks/{chunk-7D6NVIGP.js → chunk-LW4BCFIV.js} +2 -2
  103. package/dist/cli/chunks/{chunk-GCHDMO5V.js → chunk-M36DAETL.js} +2 -2
  104. package/dist/cli/chunks/{chunk-P2PPJUGD.js → chunk-MDDECCAC.js} +10 -10
  105. package/dist/cli/chunks/{chunk-C6M27NQE.js → chunk-MEUJWTOX.js} +2 -2
  106. package/dist/cli/chunks/{chunk-DGRE6ZAA.js → chunk-MOSXT6AO.js} +2 -2
  107. package/dist/cli/chunks/{chunk-4BWDCUZZ.js → chunk-MY2XZHW3.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QRALXNNX.js → chunk-MYDZBABD.js} +2 -2
  109. package/dist/cli/chunks/{chunk-F76SYOBT.js → chunk-N4MNSEKY.js} +1 -1
  110. package/dist/cli/chunks/{chunk-CMYZWIXS.js → chunk-N653RGT3.js} +2 -2
  111. package/dist/cli/chunks/{chunk-ZPH2YT3J.js → chunk-NBV37CEK.js} +2 -2
  112. package/dist/cli/chunks/{chunk-XELFJC77.js → chunk-NKWMTXBL.js} +3 -3
  113. package/dist/cli/chunks/{chunk-VTGRGYY4.js → chunk-NL6HKEPR.js} +3 -3
  114. package/dist/cli/chunks/{chunk-P7MNF2SK.js → chunk-NLY5NUHZ.js} +2 -2
  115. package/dist/cli/chunks/{chunk-J46XGXPS.js → chunk-NP2WWIZ3.js} +1 -1
  116. package/dist/cli/chunks/{chunk-ISGFAMHZ.js → chunk-NWYAV2UG.js} +2 -2
  117. package/dist/cli/chunks/{chunk-HBIV7PQH.js → chunk-O6QTCUSL.js} +1 -1
  118. package/dist/cli/chunks/{chunk-IRHBR56R.js → chunk-OWZ3F7DJ.js} +1 -1
  119. package/dist/cli/chunks/{chunk-WDV6CBED.js → chunk-PZK7O445.js} +2 -2
  120. package/dist/cli/chunks/{chunk-W6H2SOIK.js → chunk-Q32UGPWK.js} +2 -2
  121. package/dist/cli/chunks/{chunk-KLGFEHEN.js → chunk-QB7H62A4.js} +2 -2
  122. package/dist/cli/chunks/{chunk-JO2YLIZH.js → chunk-QGCFMACF.js} +2 -2
  123. package/dist/cli/chunks/{chunk-WO7NPGUD.js → chunk-QJGKL67W.js} +3 -3
  124. package/dist/cli/chunks/{chunk-D7NOHASX.js → chunk-QJN5RW2U.js} +3 -3
  125. package/dist/cli/chunks/{chunk-JIWMFLHV.js → chunk-QR5ILM34.js} +2 -2
  126. package/dist/cli/chunks/{chunk-ILKMNDUM.js → chunk-QZNFZ5IQ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-L6PUBB6L.js → chunk-RIAKRZCZ.js} +2 -2
  128. package/dist/cli/chunks/{chunk-ROK5YQ5P.js → chunk-RLQ4MYB6.js} +2 -2
  129. package/dist/cli/chunks/{chunk-M5EKZA7Q.js → chunk-RO6HAZLV.js} +1 -1
  130. package/dist/cli/chunks/{chunk-ANUZGOLQ.js → chunk-SKQTRYE7.js} +2 -2
  131. package/dist/cli/chunks/{chunk-S7QUHLXV.js → chunk-SVHFSOGT.js} +1 -1
  132. package/dist/cli/chunks/{chunk-32YSI6OT.js → chunk-SZYK5JL7.js} +1 -1
  133. package/dist/cli/chunks/{chunk-LPCFIFZF.js → chunk-T5N2PIPS.js} +2 -2
  134. package/dist/cli/chunks/{chunk-P4WE6VRR.js → chunk-T75PWWK4.js} +2 -2
  135. package/dist/cli/chunks/{chunk-BAPMEDWC.js → chunk-TC4B5D4Z.js} +1 -1
  136. package/dist/cli/chunks/{chunk-S644OORE.js → chunk-TMYGGYRY.js} +1 -1
  137. package/dist/cli/chunks/{chunk-AAQNRZKT.js → chunk-TZH2QAFZ.js} +2 -2
  138. package/dist/cli/chunks/{chunk-KU4WLKDK.js → chunk-UKRK3IE3.js} +2 -2
  139. package/dist/cli/chunks/{chunk-ATXAMGVE.js → chunk-URWT3EQT.js} +2 -2
  140. package/dist/cli/chunks/{chunk-Q4RCUCHD.js → chunk-UX4BOI6K.js} +1 -1
  141. package/dist/cli/chunks/{chunk-AV3RX2L5.js → chunk-UZL4JYVW.js} +2 -2
  142. package/dist/cli/chunks/{chunk-Y63DADOR.js → chunk-V67UQRQN.js} +2 -2
  143. package/dist/cli/chunks/{chunk-EZPWSS3B.js → chunk-VTGAPHJE.js} +2 -2
  144. package/dist/cli/chunks/{chunk-AGYPPPXR.js → chunk-W5EKSBS4.js} +2 -2
  145. package/dist/cli/chunks/{chunk-EPEKEUCF.js → chunk-W6PLBRRS.js} +1 -1
  146. package/dist/cli/chunks/{chunk-MM57SD2F.js → chunk-W7P7EOJ4.js} +1 -1
  147. package/dist/cli/chunks/{chunk-URRPJ3M7.js → chunk-WBCE6V2N.js} +1 -1
  148. package/dist/cli/chunks/{chunk-B6QTNTCU.js → chunk-WBZIOTY6.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VCYOFWMG.js → chunk-WJ7657IX.js} +2 -2
  150. package/dist/cli/chunks/{chunk-5KN4QL3G.js → chunk-WMNVFCKY.js} +2 -2
  151. package/dist/cli/chunks/{chunk-JSYNSJDQ.js → chunk-WUSSZ2S6.js} +2 -2
  152. package/dist/cli/chunks/{chunk-4OQSAUKR.js → chunk-X43HA3RF.js} +2 -2
  153. package/dist/cli/chunks/{chunk-G35KP72N.js → chunk-X4CADOSD.js} +2 -2
  154. package/dist/cli/chunks/{chunk-WQMXQO3O.js → chunk-XQBH3366.js} +2 -2
  155. package/dist/cli/chunks/{chunk-KEZ4PXVF.js → chunk-Y5VPLOA7.js} +1 -1
  156. package/dist/cli/chunks/{chunk-5LN7FQZI.js → chunk-YH7VOLBP.js} +2 -2
  157. package/dist/cli/chunks/{chunk-MFGLRMO4.js → chunk-YJSKT6G6.js} +1 -1
  158. package/dist/cli/chunks/{chunk-X4OESN7M.js → chunk-YYVLMW65.js} +2 -2
  159. package/dist/cli/chunks/{chunk-PPFW3H7E.js → chunk-Z3K4JZXQ.js} +1 -1
  160. package/dist/cli/chunks/{chunk-MO3QXLF2.js → chunk-Z3PANQUT.js} +1 -1
  161. package/dist/cli/chunks/{chunk-VY4557VF.js → chunk-Z7XCXHEB.js} +2 -2
  162. package/dist/cli/chunks/{chunk-HOPXHZA3.js → chunk-ZIKH7U5A.js} +2 -2
  163. package/dist/cli/chunks/{chunk-WPOYFV4X.js → chunk-ZSKQPXRW.js} +1 -1
  164. package/dist/cli/chunks/{chunk-ZV7LJPSI.js → chunk-ZVQSIH7Y.js} +5 -5
  165. package/dist/cli/chunks/{ci-63JINRNB.js → ci-JNBOR6FP.js} +3 -3
  166. package/dist/cli/chunks/{ci-output-CRFWLUAA.js → ci-output-FYNKONEQ.js} +2 -2
  167. package/dist/cli/chunks/{circuit-breaker-PJLG3WYL.js → circuit-breaker-KOIXRDAD.js} +2 -2
  168. package/dist/cli/chunks/{claude-flow-setup-UKHSQMJU.js → claude-flow-setup-4CO7KHRN.js} +2 -2
  169. package/dist/cli/chunks/client-UJVHZXNQ.js +2 -0
  170. package/dist/cli/chunks/{cline-installer-PYQ27AS3.js → cline-installer-CMYAPKK5.js} +2 -2
  171. package/dist/cli/chunks/{code-K7VGLZ3W.js → code-WFIAEP3H.js} +3 -3
  172. package/dist/cli/chunks/{code-index-extractor-NNWAVWSL.js → code-index-extractor-IYM6HWJN.js} +2 -2
  173. package/dist/cli/chunks/{codex-installer-U4VJIKRN.js → codex-installer-DORVWRSU.js} +2 -2
  174. package/dist/cli/chunks/{completions-DOCI3P4W.js → completions-54VM2MX2.js} +2 -2
  175. package/dist/cli/chunks/{complexity-analyzer-RFW2QRFR.js → complexity-analyzer-EGZDP5N4.js} +2 -2
  176. package/dist/cli/chunks/{continuedev-installer-S5WXXOBU.js → continuedev-installer-4SDVDD4T.js} +2 -2
  177. package/dist/cli/chunks/{copilot-installer-AAQ6YLVJ.js → copilot-installer-7FJQ7PCL.js} +2 -2
  178. package/dist/cli/chunks/core-handlers-AFXZOSH3.js +2 -0
  179. package/dist/cli/chunks/{cost-tracker-R4VOHTWQ.js → cost-tracker-D6YSKTQC.js} +2 -2
  180. package/dist/cli/chunks/{coverage-P54HPCLV.js → coverage-DI5LDRJ7.js} +3 -3
  181. package/dist/cli/chunks/cross-domain-router-ZLNVKLIR.js +2 -0
  182. package/dist/cli/chunks/{cursor-installer-VHBWZE5A.js → cursor-installer-RTSZP5YD.js} +2 -2
  183. package/dist/cli/chunks/{daemon-JLH5TTWZ.js → daemon-LM7LETPV.js} +4 -4
  184. package/dist/cli/chunks/{daemon-BTRSWNB4.js → daemon-SP3APEZY.js} +3 -3
  185. package/dist/cli/chunks/{dag-attention-scheduler-5Z6DCRFK.js → dag-attention-scheduler-C3QBODFE.js} +2 -2
  186. package/dist/cli/chunks/{detect-NWGASRJJ.js → detect-I4RBUFFJ.js} +2 -2
  187. package/dist/cli/chunks/{dist-node-XMNNSEFJ.js → dist-node-PT6TCBCO.js} +2 -2
  188. package/dist/cli/chunks/{domain-handler-BWVBZTNR.js → domain-handler-MJMTMB5X.js} +2 -2
  189. package/dist/cli/chunks/{domain-plugins-YAD4USA4.js → domain-plugins-Y4A2WYJW.js} +2 -2
  190. package/dist/cli/chunks/{domain-transfer-Z3MRPZEZ.js → domain-transfer-DUO42TLA.js} +2 -2
  191. package/dist/cli/chunks/dream-4OPJXXEG.js +2 -0
  192. package/dist/cli/chunks/{embed-and-insert-pattern-5CCO45WC.js → embed-and-insert-pattern-66ZQK4AI.js} +2 -2
  193. package/dist/cli/chunks/{eval-JEMLTGY4.js → eval-NQ7H27UF.js} +2 -2
  194. package/dist/cli/chunks/{experience-capture-middleware-FKVYBBAN.js → experience-capture-middleware-MHEYPTIG.js} +3 -3
  195. package/dist/cli/chunks/{fast-paths-TFL32H3C.js → fast-paths-YYDGN6ZC.js} +2 -2
  196. package/dist/cli/chunks/{feature-flags-CNGAUUMT.js → feature-flags-FY4DOYS2.js} +2 -2
  197. package/dist/cli/chunks/{feature-flags-OHGD2NCW.js → feature-flags-YFGUORHY.js} +2 -2
  198. package/dist/cli/chunks/{file-discovery-IHGDYW34.js → file-discovery-TOMDY7TK.js} +2 -2
  199. package/dist/cli/chunks/{fleet-OGTSDGJ2.js → fleet-MO3UCWB4.js} +3 -3
  200. package/dist/cli/chunks/{gnn-wrapper-QYTTKNCE.js → gnn-wrapper-SLW4PPXQ.js} +2 -2
  201. package/dist/cli/chunks/{heartbeat-handler-R5OD2SKN.js → heartbeat-handler-36RFCP4E.js} +4 -4
  202. package/dist/cli/chunks/heartbeat-scheduler-J5KLHO6C.js +2 -0
  203. package/dist/cli/chunks/hnsw-adapter-56P6XSFR.js +2 -0
  204. package/dist/cli/chunks/hnsw-index-GFZ6XCEW.js +2 -0
  205. package/dist/cli/chunks/{hnsw-legacy-bridge-ULJWYXBQ.js → hnsw-legacy-bridge-BJLWBKHE.js} +2 -2
  206. package/dist/cli/chunks/{hnswlib-node-SYKJXGE2.js → hnswlib-node-RAYNVJCJ.js} +2 -2
  207. package/dist/cli/chunks/{hooks-XAJXPXTU.js → hooks-JMHFWVEQ.js} +10 -10
  208. package/dist/cli/chunks/hybrid-backend-TUBWJDDN.js +2 -0
  209. package/dist/cli/chunks/{hypergraph-engine-GIBPGW4N.js → hypergraph-engine-JUDBKPOX.js} +2 -2
  210. package/dist/cli/chunks/{hypergraph-handler-ENFK6IDN.js → hypergraph-handler-AXTWXOZU.js} +3 -3
  211. package/dist/cli/chunks/impact-analyzer-FXVGKS6B.js +2 -0
  212. package/dist/cli/chunks/init-handler-PARJNZFF.js +86 -0
  213. package/dist/cli/chunks/init-wizard-LK73HQ7W.js +2 -0
  214. package/dist/cli/chunks/kernel-TCZDKRSI.js +2 -0
  215. package/dist/cli/chunks/{kilocode-installer-YXFIRTSA.js → kilocode-installer-22HX2E4V.js} +2 -2
  216. package/dist/cli/chunks/{kiro-installer-JW3BG2MQ.js → kiro-installer-OVPBLY7J.js} +2 -2
  217. package/dist/cli/chunks/knowledge-graph-TWMB2GH2.js +2 -0
  218. package/dist/cli/chunks/{learning-BDBZ7ZVG.js → learning-DWXPJ3R6.js} +3 -3
  219. package/dist/cli/chunks/{llm-router-CCX2DYTC.js → llm-router-7PPVVKNG.js} +4 -4
  220. package/dist/cli/chunks/llm-router-service-HPDH3P77.js +2 -0
  221. package/dist/cli/chunks/{load-UJTTEOOK.js → load-VI5XHNZA.js} +2 -2
  222. package/dist/cli/chunks/load-test-HTYOUYSN.js +2 -0
  223. package/dist/cli/chunks/{mcp-2NAJYREC.js → mcp-UW4Z3Z64.js} +2 -2
  224. package/dist/cli/chunks/{memory-C3UQSN5F.js → memory-UD2KCB5M.js} +5 -5
  225. package/dist/cli/chunks/memory-backend-X5BE2MPK.js +2 -0
  226. package/dist/cli/chunks/{memory-handlers-ESFIJENU.js → memory-handlers-SQXMFX5X.js} +2 -2
  227. package/dist/cli/chunks/{multi-model-executor-SIHSHAD7.js → multi-model-executor-5O4WWU5Z.js} +2 -2
  228. package/dist/cli/chunks/{opencode-installer-KDYHUGPG.js → opencode-installer-DTRFDGM7.js} +2 -2
  229. package/dist/cli/chunks/{orchestrator-MJHIQEHD.js → orchestrator-ENJIKV6Z.js} +18 -18
  230. package/dist/cli/chunks/pattern-null-store-OCQGQZU6.js +2 -0
  231. package/dist/cli/chunks/{pattern-usage-recorder-OLBE4UIF.js → pattern-usage-recorder-QPNIU5PD.js} +2 -2
  232. package/dist/cli/chunks/{pipeline-IOK2CV3U.js → pipeline-G3JYDNPE.js} +2 -2
  233. package/dist/cli/chunks/{platform-53JQ7JXN.js → platform-P4WR6N3D.js} +2 -2
  234. package/dist/cli/chunks/{plugin-L5SDIWDI.js → plugin-C7763Q5W.js} +2 -2
  235. package/dist/cli/chunks/{prime-radiant-advanced-wasm-2DS67JFS.js → prime-radiant-advanced-wasm-DH6R3XSZ.js} +2 -2
  236. package/dist/cli/chunks/{project-root-LQMOFO2Z.js → project-root-7DTXDLEG.js} +2 -2
  237. package/dist/cli/chunks/protocol-executor-CYEQHQCL.js +2 -0
  238. package/dist/cli/chunks/{protocol-handler-NXG2M43B.js → protocol-handler-EODULGOZ.js} +2 -2
  239. package/dist/cli/chunks/{prove-7K7PFSSX.js → prove-A7G3SIOF.js} +2 -2
  240. package/dist/cli/chunks/qe-reasoning-bank-GSTA5WJ4.js +2 -0
  241. package/dist/cli/chunks/{quality-ATILUGMJ.js → quality-JTURFUX3.js} +2 -2
  242. package/dist/cli/chunks/{quality-gate-MPZMDPIZ.js → quality-gate-M2EI754V.js} +3 -3
  243. package/dist/cli/chunks/queen-coordinator-Y2Q5RQL7.js +2 -0
  244. package/dist/cli/chunks/{real-embeddings-VZN3KIAI.js → real-embeddings-DI7JMCG7.js} +2 -2
  245. package/dist/cli/chunks/{ref-validation-EUATPVXX.js → ref-validation-MSFMNKDR.js} +2 -2
  246. package/dist/cli/chunks/{roocode-installer-7M2GOUNZ.js → roocode-installer-XIMFFHOH.js} +2 -2
  247. package/dist/cli/chunks/router-4QB5L4IW.js +2 -0
  248. package/dist/cli/chunks/routing-feedback-YBVHJY5L.js +2 -0
  249. package/dist/cli/chunks/{routing-handler-VWANE652.js → routing-handler-MCDKNBQW.js} +2 -2
  250. package/dist/cli/chunks/{ruvector-commands-B2YIPGOV.js → ruvector-commands-OBSYAK2X.js} +2 -2
  251. package/dist/cli/chunks/rvf-dual-writer-T5B456SW.js +2 -0
  252. package/dist/cli/chunks/rvf-migration-adapter-2O2NL7ZF.js +2 -0
  253. package/dist/cli/chunks/{rvf-migration-coordinator-RQXOQJ5T.js → rvf-migration-coordinator-4DTRIHY6.js} +2 -2
  254. package/dist/cli/chunks/rvf-native-adapter-RDB3GWTW.js +2 -0
  255. package/dist/cli/chunks/{rvf-store-integrity-7P5YDXRH.js → rvf-store-integrity-CWAVMRC4.js} +2 -2
  256. package/dist/cli/chunks/safe-db-YXVMLFU4.js +2 -0
  257. package/dist/cli/chunks/schedule-K6XWCCSK.js +2 -0
  258. package/dist/cli/chunks/scheduler-4MW22D6Q.js +2 -0
  259. package/dist/cli/chunks/{security-VJ7TVSQF.js → security-74TWSO74.js} +3 -3
  260. package/dist/cli/chunks/{shared-rvf-adapter-63NXQFBX.js → shared-rvf-adapter-ZHNAGE5H.js} +2 -2
  261. package/dist/cli/chunks/{shared-rvf-dual-writer-JQRP7P5A.js → shared-rvf-dual-writer-BS5WAVCC.js} +2 -2
  262. package/dist/cli/chunks/sqlite-persistence-UVDHUSAU.js +2 -0
  263. package/dist/cli/chunks/{standalone-memory-WJ72PH5P.js → standalone-memory-3HGHTE7S.js} +2 -2
  264. package/dist/cli/chunks/{status-handler-G72ZSLAX.js → status-handler-XWEEGNGH.js} +2 -2
  265. package/dist/cli/chunks/{structural-health-HYBGP4BD.js → structural-health-TB5JGMVS.js} +2 -2
  266. package/dist/cli/chunks/{sync-5YMZZIF4.js → sync-LSPNSVDI.js} +2 -2
  267. package/dist/cli/chunks/{sync-O5FQAHT7.js → sync-T4VLBURM.js} +2 -2
  268. package/dist/cli/chunks/{task-handler-E6IFNHZG.js → task-handler-RQ65QKXX.js} +2 -2
  269. package/dist/cli/chunks/{task-handlers-P3GC2L5L.js → task-handlers-USYWJ4H2.js} +3 -3
  270. package/dist/cli/chunks/test-M2XTKD62.js +33 -0
  271. package/dist/cli/chunks/{test-scheduling-3HY4I3HY.js → test-scheduling-GYXJQHJL.js} +3 -3
  272. package/dist/cli/chunks/{token-bootstrap-A5QA4CWK.js → token-bootstrap-OTEMRUFR.js} +2 -2
  273. package/dist/cli/chunks/{token-usage-MUNQVPFT.js → token-usage-CISTB5K5.js} +2 -2
  274. package/dist/cli/chunks/{transformers-IEO25W5V.js → transformers-C7LV763N.js} +2 -2
  275. package/dist/cli/chunks/{tree-sitter-wasm-parser-T2EQHEAY.js → tree-sitter-wasm-parser-P26JC3YV.js} +2 -2
  276. package/dist/cli/chunks/{types-ODCPGCID.js → types-YMVMKIWB.js} +2 -2
  277. package/dist/cli/chunks/unified-memory-UUK77NSE.js +2 -0
  278. package/dist/cli/chunks/unified-memory-hnsw-JOUE6WNF.js +2 -0
  279. package/dist/cli/chunks/unified-persistence-3DRJGNQE.js +2 -0
  280. package/dist/cli/chunks/{upgrade-4DN6EIW2.js → upgrade-U2REOPAW.js} +2 -2
  281. package/dist/cli/chunks/{validate-TBNAPDE3.js → validate-NDTCKN7P.js} +2 -2
  282. package/dist/cli/chunks/{validate-swarm-ZN7XXUY4.js → validate-swarm-OJUGVH5Q.js} +2 -2
  283. package/dist/cli/chunks/visual-security-EM7FQG5X.js +2 -0
  284. package/dist/cli/chunks/{web-tree-sitter-DWAWVD2X.js → web-tree-sitter-2CLRSA7K.js} +2 -2
  285. package/dist/cli/chunks/{windsurf-installer-U6EROS5S.js → windsurf-installer-DSUJJ4PG.js} +2 -2
  286. package/dist/cli/chunks/witness-chain-7NZ6IIUN.js +2 -0
  287. package/dist/cli/chunks/{witness-chain-EQEJS2P4.js → witness-chain-TEGL4ZWB.js} +2 -2
  288. package/dist/cli/chunks/{witness-chain-repair-KBXDRXS3.js → witness-chain-repair-ZWS5WXFL.js} +2 -2
  289. package/dist/cli/chunks/{witness-chain-verifier-HSQGZ4R4.js → witness-chain-verifier-SPXKFC67.js} +2 -2
  290. package/dist/cli/chunks/{witness-key-manager-RAODG73T.js → witness-key-manager-EALOV4OV.js} +2 -2
  291. package/dist/cli/chunks/{workflow-KNFJNNKG.js → workflow-PYI6HCAG.js} +4 -4
  292. package/dist/cli/chunks/workflow-orchestrator-3C3S5FIM.js +2 -0
  293. package/dist/cli/chunks/{wrappers-NIJBA22T.js → wrappers-NXJHGK3W.js} +2 -2
  294. package/dist/cli/commands/test.js +17 -2
  295. package/dist/cli/handlers/init-flags.d.ts +45 -0
  296. package/dist/cli/handlers/init-flags.js +35 -0
  297. package/dist/cli/handlers/init-handler.d.ts +6 -0
  298. package/dist/cli/handlers/init-handler.js +24 -10
  299. package/dist/coordination/task-executor.js +4 -2
  300. package/dist/init/claude-plugin-detection.d.ts +63 -0
  301. package/dist/init/claude-plugin-detection.js +118 -0
  302. package/dist/init/init-wizard-hooks.d.ts +6 -1
  303. package/dist/init/init-wizard-hooks.js +9 -1
  304. package/dist/init/init-wizard.d.ts +4 -0
  305. package/dist/init/init-wizard.js +3 -1
  306. package/dist/init/orchestrator.js +1 -0
  307. package/dist/init/phases/08-mcp.d.ts +7 -0
  308. package/dist/init/phases/08-mcp.js +22 -0
  309. package/dist/init/phases/phase-interface.d.ts +5 -1
  310. package/dist/mcp/bundle.js +298 -298
  311. package/dist/mcp/handlers/domain-handler-configs.js +3 -1
  312. package/dist/mcp/handlers/handler-factory.js +5 -0
  313. package/dist/mcp/handlers/save-results-option.d.ts +35 -0
  314. package/dist/mcp/handlers/save-results-option.js +59 -0
  315. package/dist/mcp/protocol-server.js +2 -1
  316. package/dist/mcp/types.d.ts +9 -0
  317. package/package.json +1 -1
  318. package/dist/cli/chunks/adapter-D7G5MIDQ.js +0 -2
  319. package/dist/cli/chunks/aqe-learning-engine-G6TUFGHC.js +0 -2
  320. package/dist/cli/chunks/base-B45BOC7E.js +0 -2
  321. package/dist/cli/chunks/browser-workflow-MIBU4XMV.js +0 -2
  322. package/dist/cli/chunks/chunk-3DKYBHNA.js +0 -316
  323. package/dist/cli/chunks/chunk-AIE6OKCD.js +0 -2
  324. package/dist/cli/chunks/client-A4FTITK3.js +0 -2
  325. package/dist/cli/chunks/core-handlers-FO3QTNWI.js +0 -2
  326. package/dist/cli/chunks/cross-domain-router-LIV6SRWF.js +0 -2
  327. package/dist/cli/chunks/dream-DNLGHYXY.js +0 -2
  328. package/dist/cli/chunks/heartbeat-scheduler-DL4LXXJF.js +0 -2
  329. package/dist/cli/chunks/hnsw-adapter-Y64M43J4.js +0 -2
  330. package/dist/cli/chunks/hnsw-index-5V6DDMTA.js +0 -2
  331. package/dist/cli/chunks/hybrid-backend-JWT2V4FQ.js +0 -2
  332. package/dist/cli/chunks/impact-analyzer-XUZQSZZC.js +0 -2
  333. package/dist/cli/chunks/init-handler-CSA62LGT.js +0 -81
  334. package/dist/cli/chunks/init-wizard-KDJKHEPN.js +0 -2
  335. package/dist/cli/chunks/kernel-MUDYPGFR.js +0 -2
  336. package/dist/cli/chunks/knowledge-graph-GR52N7PU.js +0 -2
  337. package/dist/cli/chunks/llm-router-service-QL6LVKZ4.js +0 -2
  338. package/dist/cli/chunks/load-test-76V75WZ5.js +0 -2
  339. package/dist/cli/chunks/memory-backend-SMQRS5QN.js +0 -2
  340. package/dist/cli/chunks/pattern-null-store-MWAJMOYU.js +0 -2
  341. package/dist/cli/chunks/protocol-executor-32X3GAJT.js +0 -2
  342. package/dist/cli/chunks/qe-reasoning-bank-KAFV3TGI.js +0 -2
  343. package/dist/cli/chunks/queen-coordinator-L3SODGRX.js +0 -2
  344. package/dist/cli/chunks/router-DDCSSXYQ.js +0 -2
  345. package/dist/cli/chunks/routing-feedback-RFASKYCD.js +0 -2
  346. package/dist/cli/chunks/rvf-dual-writer-HCIF2G56.js +0 -2
  347. package/dist/cli/chunks/rvf-migration-adapter-UVAHQ7SV.js +0 -2
  348. package/dist/cli/chunks/rvf-native-adapter-F2I5FFHK.js +0 -2
  349. package/dist/cli/chunks/safe-db-6ZAA4S23.js +0 -2
  350. package/dist/cli/chunks/schedule-SM5Q6UVP.js +0 -2
  351. package/dist/cli/chunks/scheduler-4EYP4EZ6.js +0 -2
  352. package/dist/cli/chunks/sqlite-persistence-KLN2K266.js +0 -2
  353. package/dist/cli/chunks/test-OU6ERW67.js +0 -33
  354. package/dist/cli/chunks/unified-memory-B5IA2KKQ.js +0 -2
  355. package/dist/cli/chunks/unified-memory-hnsw-YF74LL3Z.js +0 -2
  356. package/dist/cli/chunks/unified-persistence-VZMGNGWY.js +0 -2
  357. package/dist/cli/chunks/visual-security-ZV3BLLSH.js +0 -2
  358. package/dist/cli/chunks/witness-chain-OA24MQWX.js +0 -2
  359. package/dist/cli/chunks/workflow-orchestrator-IMX2LSVE.js +0 -2
@@ -1,2 +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.0");process.exit(0)}
2
- import{a as E}from"./chunk-7JABIXP3.js";import"./chunk-4DCDIKBX.js";import{b as R,c as b,e as A,h as y,k as C}from"./chunk-WPOYFV4X.js";import"./chunk-XZDPR6I2.js";import"./chunk-ILKMNDUM.js";import"./chunk-ATXAMGVE.js";import"./chunk-JJ7WAU4I.js";import"./chunk-7WUHVGGT.js";import"./chunk-UGYXUPGN.js";import"./chunk-HOPXHZA3.js";import"./chunk-B6QTNTCU.js";import"./chunk-WBR4VRQE.js";import"./chunk-GV7P5JYF.js";import"./chunk-5LN7FQZI.js";import"./chunk-AIE6OKCD.js";import"./chunk-OYVDTD3A.js";import"./chunk-OBSX3I4Y.js";import"./chunk-X5RELRY7.js";import"./chunk-URUOTHPO.js";import"./chunk-QRALXNNX.js";import{a as g,b as _}from"./chunk-AGYPPPXR.js";import"./chunk-WDV6CBED.js";import"./chunk-GX5RFGW2.js";_();import{existsSync as v}from"node:fs";import{basename as I}from"node:path";var w={includeArchive:!0};function l(e){let r=n=>C(e,n)?e.prepare(`SELECT COUNT(*) AS n FROM ${n}`).get().n:0;return{live:r("witness_chain"),archive:r("witness_chain_archive")}}function O(e){return{status:e.status,entriesChecked:e.entriesChecked,forks:e.forks.length,unacknowledgedForks:e.forks.length-e.acknowledgedForks.length,...e.tamperedAt!==void 0?{tamperedAt:e.tamperedAt}:{},...e.tamperReason?{tamperReason:e.tamperReason}:{}}}function $(e){return e.forkDetails.filter(r=>!r.acknowledged).map(({id:r,parentId:n,prevHash:s,actionHash:c})=>({id:r,parentId:n,prevHash:s,actionHash:c}))}function x(e,r){let n=new Set,s=e.prepare("SELECT prev_hash FROM witness_chain UNION ALL SELECT prev_hash FROM witness_chain_archive").pluck().iterate();for(let t of s)n.add(t);let c=[],a=new Set;for(let t of["witness_chain","witness_chain_archive"]){let f=e.prepare(`SELECT * FROM ${t} ORDER BY id ASC`).iterate();for(let o of f){if(o.id===r||a.has(o.id))continue;a.add(o.id);let i=A(o);!n.has(b(i))&&!n.has(R(i))&&c.push({id:o.id,hash:y(o)})}}return c.sort((t,f)=>t.id-f.id)}function S(e){return`Refusing to repair: tampering detected at id=${e.tamperedAt} (${e.tamperReason}). Only accidental forks can be re-anchored; restore from a backup and investigate.`}function M(e){let r=`${e}.bak-${Math.floor(Date.now()/1e3)}`;if(!v(r))return r;let n=1;for(;v(`${r}-${n}`);)n++;return`${r}-${n}`}function W(e,r){let n=M(e),s=g(e,{readonly:!0,fileMustExist:!0});try{s.prepare("VACUUM INTO ?").run(n)}finally{s.close()}let c=g(n,{readonly:!0,fileMustExist:!0});try{let a=c.pragma("integrity_check",{simple:!0});if(a!=="ok")throw new Error(`backup integrity_check failed: ${String(a)}`);let t=l(c);if(t.live!==r.live||t.archive!==r.archive)throw new Error(`backup holds ${JSON.stringify(t)} witness rows, expected ${JSON.stringify(r)}`)}finally{c.close()}return n}async function L(e,r){let n=r.dryRun===!0,s=new E(e,r.keyManager??void 0);await s.initialize();let c=l(e),a=s.verify(w),t={dryRun:n,before:O(a),rowsBefore:c,rowsAfter:c};if(a.tampered)return{...t,action:"refused",message:S(a),forksAcknowledged:[]};let f=$(a);if(f.length===0){let d=a.forks.length>0?`Nothing to repair: all ${a.forks.length} fork(s) are already re-anchored.`:"Nothing to repair: the audit chain has no forks.";return{...t,action:"none",message:d,forksAcknowledged:[]}}if(n)return{...t,action:"would-reanchor",forksAcknowledged:f.map(d=>d.id),message:`Dry run: would back up the database and append a CHAIN_REANCHOR entry acknowledging ${f.length} fork(s). Nothing was written.`};let o,i=e.transaction(()=>{let d=l(e),p=s.verify(w);if(p.tampered)return{kind:"refused",check:p};let h=$(p);if(h.length===0)return{kind:"noop"};o=W(r.dbPath,d);let m=e.prepare("SELECT * FROM witness_chain ORDER BY id DESC LIMIT 1").get(),T=s.append("CHAIN_REANCHOR",{reason:"fork-repair",issue:"https://github.com/proffesor-for-testing/agentic-qe/issues/753",note:"Acknowledges accidental forks from pre-3.14.5 concurrent appends; no rows were changed.",forkCount:h.length,forks:h,pins:x(e,m.id),verifiedTipId:m.id,verifiedTipHash:y(m),entriesChecked:p.entriesChecked,rows:d,backup:I(o)},r.actor??"aqe-audit-repair"),k=l(e);if(k.live!==d.live+1||k.archive!==d.archive)throw new Error(`row-count check failed: before ${JSON.stringify(d)}, after ${JSON.stringify(k)}`);return{kind:"reanchored",entry:T,forks:h,txAfter:k}}).immediate();if(i.kind==="refused")return{...t,action:"refused",message:S(i.check),forksAcknowledged:[]};if(i.kind==="noop")return{...t,action:"none",message:"Nothing to repair (another process re-anchored first).",forksAcknowledged:[]};let u=s.verify(w),N=u.valid&&!u.tampered;return{...t,action:"reanchored",after:O(u),rowsAfter:i.txAfter,forksAcknowledged:i.forks.map(d=>d.id),reanchorId:i.entry.id,backupPath:o,message:N?`Re-anchored ${i.forks.length} fork(s) with CHAIN_REANCHOR id=${i.entry.id}; chain now ${u.status}. Backup: ${o}`:`Appended CHAIN_REANCHOR id=${i.entry.id}, but the chain still verifies as ${u.status}. Backup: ${o}`}}export{L as repairWitnessChainForks};
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.2");process.exit(0)}
2
+ import{a as E}from"./chunk-JCB6K24D.js";import"./chunk-DGKPGRBT.js";import{b as R,c as b,e as A,h as y,k as C}from"./chunk-ZSKQPXRW.js";import"./chunk-3KXKJSKS.js";import"./chunk-QZNFZ5IQ.js";import"./chunk-URWT3EQT.js";import"./chunk-IM67YHDK.js";import"./chunk-2Q4Y3VQ6.js";import"./chunk-FH6N2LKG.js";import"./chunk-ZIKH7U5A.js";import"./chunk-WBZIOTY6.js";import"./chunk-ITM26I6O.js";import"./chunk-3RC5UMRJ.js";import"./chunk-YH7VOLBP.js";import"./chunk-I7ECEOFV.js";import"./chunk-CV7E627D.js";import"./chunk-5TEPPW4J.js";import"./chunk-3KTAMNKI.js";import"./chunk-3DCRAW43.js";import"./chunk-MYDZBABD.js";import{a as g,b as _}from"./chunk-W5EKSBS4.js";import"./chunk-PZK7O445.js";import"./chunk-D75HDHX3.js";_();import{existsSync as v}from"node:fs";import{basename as I}from"node:path";var w={includeArchive:!0};function l(e){let r=n=>C(e,n)?e.prepare(`SELECT COUNT(*) AS n FROM ${n}`).get().n:0;return{live:r("witness_chain"),archive:r("witness_chain_archive")}}function O(e){return{status:e.status,entriesChecked:e.entriesChecked,forks:e.forks.length,unacknowledgedForks:e.forks.length-e.acknowledgedForks.length,...e.tamperedAt!==void 0?{tamperedAt:e.tamperedAt}:{},...e.tamperReason?{tamperReason:e.tamperReason}:{}}}function $(e){return e.forkDetails.filter(r=>!r.acknowledged).map(({id:r,parentId:n,prevHash:s,actionHash:c})=>({id:r,parentId:n,prevHash:s,actionHash:c}))}function x(e,r){let n=new Set,s=e.prepare("SELECT prev_hash FROM witness_chain UNION ALL SELECT prev_hash FROM witness_chain_archive").pluck().iterate();for(let t of s)n.add(t);let c=[],a=new Set;for(let t of["witness_chain","witness_chain_archive"]){let f=e.prepare(`SELECT * FROM ${t} ORDER BY id ASC`).iterate();for(let o of f){if(o.id===r||a.has(o.id))continue;a.add(o.id);let i=A(o);!n.has(b(i))&&!n.has(R(i))&&c.push({id:o.id,hash:y(o)})}}return c.sort((t,f)=>t.id-f.id)}function S(e){return`Refusing to repair: tampering detected at id=${e.tamperedAt} (${e.tamperReason}). Only accidental forks can be re-anchored; restore from a backup and investigate.`}function M(e){let r=`${e}.bak-${Math.floor(Date.now()/1e3)}`;if(!v(r))return r;let n=1;for(;v(`${r}-${n}`);)n++;return`${r}-${n}`}function W(e,r){let n=M(e),s=g(e,{readonly:!0,fileMustExist:!0});try{s.prepare("VACUUM INTO ?").run(n)}finally{s.close()}let c=g(n,{readonly:!0,fileMustExist:!0});try{let a=c.pragma("integrity_check",{simple:!0});if(a!=="ok")throw new Error(`backup integrity_check failed: ${String(a)}`);let t=l(c);if(t.live!==r.live||t.archive!==r.archive)throw new Error(`backup holds ${JSON.stringify(t)} witness rows, expected ${JSON.stringify(r)}`)}finally{c.close()}return n}async function L(e,r){let n=r.dryRun===!0,s=new E(e,r.keyManager??void 0);await s.initialize();let c=l(e),a=s.verify(w),t={dryRun:n,before:O(a),rowsBefore:c,rowsAfter:c};if(a.tampered)return{...t,action:"refused",message:S(a),forksAcknowledged:[]};let f=$(a);if(f.length===0){let d=a.forks.length>0?`Nothing to repair: all ${a.forks.length} fork(s) are already re-anchored.`:"Nothing to repair: the audit chain has no forks.";return{...t,action:"none",message:d,forksAcknowledged:[]}}if(n)return{...t,action:"would-reanchor",forksAcknowledged:f.map(d=>d.id),message:`Dry run: would back up the database and append a CHAIN_REANCHOR entry acknowledging ${f.length} fork(s). Nothing was written.`};let o,i=e.transaction(()=>{let d=l(e),p=s.verify(w);if(p.tampered)return{kind:"refused",check:p};let h=$(p);if(h.length===0)return{kind:"noop"};o=W(r.dbPath,d);let m=e.prepare("SELECT * FROM witness_chain ORDER BY id DESC LIMIT 1").get(),T=s.append("CHAIN_REANCHOR",{reason:"fork-repair",issue:"https://github.com/proffesor-for-testing/agentic-qe/issues/753",note:"Acknowledges accidental forks from pre-3.14.5 concurrent appends; no rows were changed.",forkCount:h.length,forks:h,pins:x(e,m.id),verifiedTipId:m.id,verifiedTipHash:y(m),entriesChecked:p.entriesChecked,rows:d,backup:I(o)},r.actor??"aqe-audit-repair"),k=l(e);if(k.live!==d.live+1||k.archive!==d.archive)throw new Error(`row-count check failed: before ${JSON.stringify(d)}, after ${JSON.stringify(k)}`);return{kind:"reanchored",entry:T,forks:h,txAfter:k}}).immediate();if(i.kind==="refused")return{...t,action:"refused",message:S(i.check),forksAcknowledged:[]};if(i.kind==="noop")return{...t,action:"none",message:"Nothing to repair (another process re-anchored first).",forksAcknowledged:[]};let u=s.verify(w),N=u.valid&&!u.tampered;return{...t,action:"reanchored",after:O(u),rowsAfter:i.txAfter,forksAcknowledged:i.forks.map(d=>d.id),reanchorId:i.entry.id,backupPath:o,message:N?`Re-anchored ${i.forks.length} fork(s) with CHAIN_REANCHOR id=${i.entry.id}; chain now ${u.status}. Backup: ${o}`:`Appended CHAIN_REANCHOR id=${i.entry.id}, but the chain still verifies as ${u.status}. Backup: ${o}`}}export{L as repairWitnessChainForks};
@@ -1,2 +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.0");process.exit(0)}
2
- import{g as a,h as b,i as c,j as d,k as e}from"./chunk-WPOYFV4X.js";import"./chunk-GX5RFGW2.js";export{a as CHAIN_REANCHOR_ACTION,c as WitnessChainVerifier,b as ownHash,e as tableExists,d as verifyWitnessChain};
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.2");process.exit(0)}
2
+ import{g as a,h as b,i as c,j as d,k as e}from"./chunk-ZSKQPXRW.js";import"./chunk-D75HDHX3.js";export{a as CHAIN_REANCHOR_ACTION,c as WitnessChainVerifier,b as ownHash,e as tableExists,d as verifyWitnessChain};
@@ -1,2 +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.0");process.exit(0)}
2
- import{a,b,c}from"./chunk-4DCDIKBX.js";import"./chunk-QRALXNNX.js";import"./chunk-GX5RFGW2.js";export{a as WitnessKeyManager,c as _resetDefaultWitnessKeyManagerForTests,b as getDefaultWitnessKeyManager};
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.2");process.exit(0)}
2
+ import{a,b,c}from"./chunk-DGKPGRBT.js";import"./chunk-MYDZBABD.js";import"./chunk-D75HDHX3.js";export{a as WitnessKeyManager,c as _resetDefaultWitnessKeyManagerForTests,b as getDefaultWitnessKeyManager};
@@ -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.0");process.exit(0)}
2
- import"./chunk-YFRZVNE4.js";import{b as $}from"./chunk-FPTZP7W5.js";import{a as k,b as W,c as v,g as C}from"./chunk-ROK5YQ5P.js";import{c as b}from"./chunk-ATXAMGVE.js";import"./chunk-BH2SQQ2N.js";import"./chunk-X5RELRY7.js";import"./chunk-GX5RFGW2.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.2");process.exit(0)}
2
+ import"./chunk-A6L2OCMO.js";import{b as $}from"./chunk-ATGIGJSL.js";import{a as k,b as W,c as v,g as C}from"./chunk-RLQ4MYB6.js";import{c as b}from"./chunk-URWT3EQT.js";import"./chunk-2AWU2E6R.js";import"./chunk-3KTAMNKI.js";import"./chunk-D75HDHX3.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-MIBU4XMV.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-AWCQLQZK.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-MIBU4XMV.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-CRFWLUAA.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-AWCQLQZK.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-FYNKONEQ.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.2");process.exit(0)}
2
+ import{a,b,c,d}from"./chunk-X4CADOSD.js";import"./chunk-VTGAPHJE.js";import"./chunk-3KXKJSKS.js";import"./chunk-QZNFZ5IQ.js";import"./chunk-URWT3EQT.js";import"./chunk-IM67YHDK.js";import"./chunk-2Q4Y3VQ6.js";import"./chunk-FH6N2LKG.js";import"./chunk-ZIKH7U5A.js";import"./chunk-WBZIOTY6.js";import"./chunk-ITM26I6O.js";import"./chunk-3RC5UMRJ.js";import"./chunk-Z3PANQUT.js";import"./chunk-2AWU2E6R.js";import"./chunk-YH7VOLBP.js";import"./chunk-I7ECEOFV.js";import"./chunk-CV7E627D.js";import"./chunk-5TEPPW4J.js";import"./chunk-3KTAMNKI.js";import"./chunk-3DCRAW43.js";import"./chunk-MYDZBABD.js";import"./chunk-W5EKSBS4.js";import"./chunk-PZK7O445.js";import"./chunk-D75HDHX3.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
@@ -1,2 +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.0");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-MEYSIVMP.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-4YPL3OXS.js";import"./chunk-XZDPR6I2.js";import"./chunk-ILKMNDUM.js";import"./chunk-ATXAMGVE.js";import"./chunk-JJ7WAU4I.js";import"./chunk-7WUHVGGT.js";import"./chunk-UGYXUPGN.js";import"./chunk-HOPXHZA3.js";import"./chunk-B6QTNTCU.js";import"./chunk-WBR4VRQE.js";import"./chunk-GV7P5JYF.js";import"./chunk-5LN7FQZI.js";import"./chunk-AIE6OKCD.js";import"./chunk-OYVDTD3A.js";import"./chunk-OBSX3I4Y.js";import"./chunk-X5RELRY7.js";import"./chunk-URUOTHPO.js";import"./chunk-QRALXNNX.js";import"./chunk-AGYPPPXR.js";import"./chunk-WDV6CBED.js";import"./chunk-GX5RFGW2.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};
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.2");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-IBAXNCR2.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-HXT4XDQO.js";import"./chunk-3KXKJSKS.js";import"./chunk-QZNFZ5IQ.js";import"./chunk-URWT3EQT.js";import"./chunk-IM67YHDK.js";import"./chunk-2Q4Y3VQ6.js";import"./chunk-FH6N2LKG.js";import"./chunk-ZIKH7U5A.js";import"./chunk-WBZIOTY6.js";import"./chunk-ITM26I6O.js";import"./chunk-3RC5UMRJ.js";import"./chunk-YH7VOLBP.js";import"./chunk-I7ECEOFV.js";import"./chunk-CV7E627D.js";import"./chunk-5TEPPW4J.js";import"./chunk-3KTAMNKI.js";import"./chunk-3DCRAW43.js";import"./chunk-MYDZBABD.js";import"./chunk-W5EKSBS4.js";import"./chunk-PZK7O445.js";import"./chunk-D75HDHX3.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};
@@ -19,6 +19,7 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
19
19
  .option('-t, --type <type>', 'Test type (unit|integration|e2e)', 'unit')
20
20
  .option('-F, --format <format>', 'Output format (text|json|junit|markdown)', 'text')
21
21
  .option('-o, --output <path>', 'Write output to file')
22
+ .option('--no-save', 'generate action: print the generated test code instead of writing test files beside the source (#925)')
22
23
  .option('--git-ref <ref>', 'Git ref for schedule action (e.g., main, HEAD~3)')
23
24
  .option('--no-git-aware', 'Disable git-aware test selection (schedule action)')
24
25
  .option('--no-flaky', 'Disable flaky test tracking (schedule action)')
@@ -95,11 +96,22 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
95
96
  // Default text output
96
97
  console.log(chalk.green(`Generated ${generated.tests.length} tests\n`));
97
98
  console.log(chalk.cyan(' Tests:'));
98
- for (const test of generated.tests.slice(0, 10)) {
99
+ // #925: with --no-save the printed code is the only output, so
100
+ // show every test instead of the first 10.
101
+ const noSave = options.save === false;
102
+ const shown = noSave ? generated.tests : generated.tests.slice(0, 10);
103
+ for (const test of shown) {
99
104
  console.log(` ${chalk.white(test.name)}`);
100
105
  console.log(chalk.gray(` Source: ${path.basename(test.sourceFile)}`));
101
106
  console.log(chalk.gray(` Assertions: ${test.assertions}`));
102
107
  if (test.testCode) {
108
+ if (noSave) {
109
+ console.log(chalk.gray(` Would be written to: ${test.testFile} (not written, --no-save)`));
110
+ console.log(` ----- ${path.basename(test.testFile)} -----`);
111
+ console.log(test.testCode);
112
+ console.log(` ----- end ${path.basename(test.testFile)} -----`);
113
+ continue;
114
+ }
103
115
  console.log(chalk.gray(` Test File: ${test.testFile}`));
104
116
  // Bug #295 fix: Write generated test code to disk
105
117
  const fs = await import('fs');
@@ -109,13 +121,16 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
109
121
  console.log(chalk.green(` Written to: ${test.testFile}`));
110
122
  }
111
123
  }
112
- if (generated.tests.length > 10) {
124
+ if (!noSave && generated.tests.length > 10) {
113
125
  console.log(chalk.gray(` ... and ${generated.tests.length - 10} more`));
114
126
  }
115
127
  console.log(`\n Coverage Estimate: ${chalk.yellow(generated.coverageEstimate == null ? 'Unmeasured' : generated.coverageEstimate + '%')}`);
116
128
  if (generated.patternsUsed.length > 0) {
117
129
  console.log(` Patterns Used: ${chalk.cyan(generated.patternsUsed.join(', '))}`);
118
130
  }
131
+ if (options.save === false) {
132
+ console.log(chalk.gray(' --no-save: no generated test files were written.'));
133
+ }
119
134
  }
120
135
  }
121
136
  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:
@@ -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,
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Claude Code plugin detection (#922)
3
+ *
4
+ * The `agentic-qe-fleet` Claude Code plugin bundles its own `agentic-qe` MCP
5
+ * server (exposed as `mcp__plugin_agentic-qe-fleet_agentic-qe__*`). When that
6
+ * plugin is enabled, `aqe init` must not also register a project-level
7
+ * `agentic-qe` server in `.mcp.json`, or AQE ends up registered twice.
8
+ *
9
+ * Detection reads `enabledPlugins` from the three Claude Code settings scopes
10
+ * and merges them per key with Claude Code's precedence (local > project >
11
+ * user):
12
+ * - user: `$CLAUDE_CONFIG_DIR/settings.json` (default `~/.claude/settings.json`)
13
+ * - project: `<project>/.claude/settings.json`
14
+ * - local: `<project>/.claude/settings.local.json`
15
+ *
16
+ * A key `agentic-qe-fleet@<marketplace>` whose merged value is `true` means
17
+ * the plugin is enabled. Missing, unreadable or invalid files count as "no
18
+ * opinion"; detection never throws.
19
+ */
20
+ /** Plugin name as published in the `agentic-qe` marketplace. */
21
+ export declare const AQE_FLEET_PLUGIN_NAME = "agentic-qe-fleet";
22
+ export type ClaudeSettingsScope = 'user' | 'project' | 'local';
23
+ export interface PluginDetectionOptions {
24
+ /** Environment to read CLAUDE_CONFIG_DIR from (defaults to process.env). */
25
+ env?: NodeJS.ProcessEnv;
26
+ /** Home directory used when CLAUDE_CONFIG_DIR is unset (defaults to os.homedir()). */
27
+ homeDir?: string;
28
+ }
29
+ export interface PluginDetectionResult {
30
+ /** True when at least one `agentic-qe-fleet@*` key resolves to `true`. */
31
+ enabled: boolean;
32
+ /** The enabled plugin key, e.g. `agentic-qe-fleet@agentic-qe`. */
33
+ pluginKey?: string;
34
+ /** Scope whose setting decided the enabled key. */
35
+ scope?: ClaudeSettingsScope;
36
+ /** Settings file that decided the enabled key. */
37
+ settingsPath?: string;
38
+ }
39
+ /**
40
+ * Settings files in ascending precedence order (later entries win).
41
+ */
42
+ export declare function claudeSettingsPaths(projectRoot: string, options?: PluginDetectionOptions): Array<{
43
+ scope: ClaudeSettingsScope;
44
+ path: string;
45
+ }>;
46
+ /**
47
+ * Detect whether the `agentic-qe-fleet` Claude Code plugin is enabled for
48
+ * `projectRoot`. Never throws.
49
+ */
50
+ export declare function detectAqeFleetPlugin(projectRoot: string, options?: PluginDetectionOptions): PluginDetectionResult;
51
+ /** One-line notice printed when init skips the project MCP entry. */
52
+ export declare const AQE_PLUGIN_MCP_SKIP_MESSAGE: string;
53
+ /**
54
+ * One-line notice printed when the plugin is enabled but `.mcp.json` already
55
+ * has an `agentic-qe` entry (e.g. an upgrade from 3.15.1). Init never deletes
56
+ * user config, so the entry is kept and the user is told how to remove it.
57
+ */
58
+ export declare const AQE_PLUGIN_MCP_EXISTING_ENTRY_MESSAGE: string;
59
+ /** True when `<projectRoot>/.mcp.json` declares an `agentic-qe` server. Never throws. */
60
+ export declare function hasProjectAqeMcpEntry(projectRoot: string): boolean;
61
+ /** The notice to print when init skips the project entry because of the plugin. */
62
+ export declare function aqePluginMcpSkipMessage(projectRoot: string): string;
63
+ //# sourceMappingURL=claude-plugin-detection.d.ts.map
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Claude Code plugin detection (#922)
3
+ *
4
+ * The `agentic-qe-fleet` Claude Code plugin bundles its own `agentic-qe` MCP
5
+ * server (exposed as `mcp__plugin_agentic-qe-fleet_agentic-qe__*`). When that
6
+ * plugin is enabled, `aqe init` must not also register a project-level
7
+ * `agentic-qe` server in `.mcp.json`, or AQE ends up registered twice.
8
+ *
9
+ * Detection reads `enabledPlugins` from the three Claude Code settings scopes
10
+ * and merges them per key with Claude Code's precedence (local > project >
11
+ * user):
12
+ * - user: `$CLAUDE_CONFIG_DIR/settings.json` (default `~/.claude/settings.json`)
13
+ * - project: `<project>/.claude/settings.json`
14
+ * - local: `<project>/.claude/settings.local.json`
15
+ *
16
+ * A key `agentic-qe-fleet@<marketplace>` whose merged value is `true` means
17
+ * the plugin is enabled. Missing, unreadable or invalid files count as "no
18
+ * opinion"; detection never throws.
19
+ */
20
+ import { readFileSync } from 'fs';
21
+ import { homedir } from 'os';
22
+ import { join } from 'path';
23
+ import { safeJsonParse } from '../shared/safe-json.js';
24
+ /** Plugin name as published in the `agentic-qe` marketplace. */
25
+ export const AQE_FLEET_PLUGIN_NAME = 'agentic-qe-fleet';
26
+ /**
27
+ * Settings files in ascending precedence order (later entries win).
28
+ */
29
+ export function claudeSettingsPaths(projectRoot, options = {}) {
30
+ const env = options.env ?? process.env;
31
+ const configDir = env.CLAUDE_CONFIG_DIR?.trim()
32
+ ? env.CLAUDE_CONFIG_DIR.trim()
33
+ : join(options.homeDir ?? homedir(), '.claude');
34
+ return [
35
+ { scope: 'user', path: join(configDir, 'settings.json') },
36
+ { scope: 'project', path: join(projectRoot, '.claude', 'settings.json') },
37
+ { scope: 'local', path: join(projectRoot, '.claude', 'settings.local.json') },
38
+ ];
39
+ }
40
+ /** Read `enabledPlugins` from one settings file; null on any failure. */
41
+ function readEnabledPlugins(path) {
42
+ try {
43
+ const parsed = safeJsonParse(readFileSync(path, 'utf-8'));
44
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
45
+ return null;
46
+ const plugins = parsed.enabledPlugins;
47
+ if (!plugins || typeof plugins !== 'object' || Array.isArray(plugins))
48
+ return null;
49
+ return plugins;
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ function isFleetPluginKey(key) {
56
+ const at = key.lastIndexOf('@');
57
+ const name = at === -1 ? key : key.slice(0, at);
58
+ return name === AQE_FLEET_PLUGIN_NAME && at > 0 && at < key.length - 1;
59
+ }
60
+ /**
61
+ * Detect whether the `agentic-qe-fleet` Claude Code plugin is enabled for
62
+ * `projectRoot`. Never throws.
63
+ */
64
+ export function detectAqeFleetPlugin(projectRoot, options = {}) {
65
+ try {
66
+ const merged = new Map();
67
+ for (const { scope, path } of claudeSettingsPaths(projectRoot, options)) {
68
+ const plugins = readEnabledPlugins(path);
69
+ if (!plugins)
70
+ continue;
71
+ for (const [key, value] of Object.entries(plugins)) {
72
+ if (isFleetPluginKey(key))
73
+ merged.set(key, { value, scope, path });
74
+ }
75
+ }
76
+ for (const [key, entry] of merged) {
77
+ if (entry.value === true) {
78
+ return { enabled: true, pluginKey: key, scope: entry.scope, settingsPath: entry.path };
79
+ }
80
+ }
81
+ }
82
+ catch {
83
+ // Detection is advisory; fall through to "not enabled".
84
+ }
85
+ return { enabled: false };
86
+ }
87
+ /** One-line notice printed when init skips the project MCP entry. */
88
+ export const AQE_PLUGIN_MCP_SKIP_MESSAGE = ' MCP: skipped — the agentic-qe-fleet plugin already provides the AQE MCP server ' +
89
+ '(mcp__plugin_agentic-qe-fleet_agentic-qe__* tools); run `aqe init --with-mcp` to add the project entry anyway';
90
+ /**
91
+ * One-line notice printed when the plugin is enabled but `.mcp.json` already
92
+ * has an `agentic-qe` entry (e.g. an upgrade from 3.15.1). Init never deletes
93
+ * user config, so the entry is kept and the user is told how to remove it.
94
+ */
95
+ export const AQE_PLUGIN_MCP_EXISTING_ENTRY_MESSAGE = ' MCP: kept the existing project `agentic-qe` entry in .mcp.json — it duplicates the agentic-qe-fleet ' +
96
+ "plugin's AQE MCP server (mcp__plugin_agentic-qe-fleet_agentic-qe__* tools); to remove it, delete the " +
97
+ '`agentic-qe` key from .mcp.json or run `claude mcp remove agentic-qe -s project`';
98
+ /** True when `<projectRoot>/.mcp.json` declares an `agentic-qe` server. Never throws. */
99
+ export function hasProjectAqeMcpEntry(projectRoot) {
100
+ try {
101
+ const parsed = safeJsonParse(readFileSync(join(projectRoot, '.mcp.json'), 'utf-8'));
102
+ if (!parsed || typeof parsed !== 'object')
103
+ return false;
104
+ const servers = parsed.mcpServers;
105
+ return !!servers && typeof servers === 'object' && !Array.isArray(servers) &&
106
+ Object.prototype.hasOwnProperty.call(servers, 'agentic-qe');
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ /** The notice to print when init skips the project entry because of the plugin. */
113
+ export function aqePluginMcpSkipMessage(projectRoot) {
114
+ return hasProjectAqeMcpEntry(projectRoot)
115
+ ? AQE_PLUGIN_MCP_EXISTING_ENTRY_MESSAGE
116
+ : AQE_PLUGIN_MCP_SKIP_MESSAGE;
117
+ }
118
+ //# sourceMappingURL=claude-plugin-detection.js.map
@@ -22,8 +22,13 @@ export declare function configureHooks(projectRoot: string, config: AQEInitConfi
22
22
  * Configure MCP server.
23
23
  * Creates .mcp.json (root level) with AQE v3 MCP server configuration.
24
24
  * Uses npx to run the MCP server without requiring global installation.
25
+ *
26
+ * #922: skipped when the agentic-qe-fleet Claude Code plugin is enabled (it
27
+ * already provides the AQE MCP server) unless `force` is set (--with-mcp).
25
28
  */
26
- export declare function configureMCP(projectRoot: string): Promise<boolean>;
29
+ export declare function configureMCP(projectRoot: string, options?: {
30
+ force?: boolean;
31
+ }): Promise<boolean>;
27
32
  /**
28
33
  * Generate CLAUDE.md for the project.
29
34
  * Creates a comprehensive guide for Claude Code with V3-specific instructions.
@@ -12,6 +12,7 @@
12
12
  import { existsSync, mkdirSync, writeFileSync, readFileSync, copyFileSync } from 'fs';
13
13
  import { join, dirname } from 'path';
14
14
  import { safeJsonParse } from '../shared/safe-json.js';
15
+ import { aqePluginMcpSkipMessage, detectAqeFleetPlugin } from './claude-plugin-detection.js';
15
16
  import { mergeHooksSmart, generateAqeEnvVars, generateV3SettingsSections, applyV3Sections, mergeAqeEnv, backupSettingsFile, } from './settings-merge.js';
16
17
  // ============================================================================
17
18
  // Hook Configuration
@@ -272,8 +273,15 @@ routing:
272
273
  * Configure MCP server.
273
274
  * Creates .mcp.json (root level) with AQE v3 MCP server configuration.
274
275
  * Uses npx to run the MCP server without requiring global installation.
276
+ *
277
+ * #922: skipped when the agentic-qe-fleet Claude Code plugin is enabled (it
278
+ * already provides the AQE MCP server) unless `force` is set (--with-mcp).
275
279
  */
276
- export async function configureMCP(projectRoot) {
280
+ export async function configureMCP(projectRoot, options = {}) {
281
+ if (!options.force && detectAqeFleetPlugin(projectRoot).enabled) {
282
+ console.log(aqePluginMcpSkipMessage(projectRoot));
283
+ return false;
284
+ }
277
285
  const mcpPath = join(projectRoot, '.mcp.json');
278
286
  let mcpConfig = {};
279
287
  if (existsSync(mcpPath)) {
@@ -26,6 +26,10 @@ export interface InitOrchestratorOptions {
26
26
  wizardAnswers?: Record<string, unknown>;
27
27
  /** Install n8n workflow testing agents and skills */
28
28
  withN8n?: boolean;
29
+ /** Write the .mcp.json entry even when the agentic-qe-fleet plugin is enabled (#922) */
30
+ withMcp?: boolean;
31
+ /** Skip the .mcp.json entry entirely (--no-mcp, #931) */
32
+ noMcp?: boolean;
29
33
  /** N8n API configuration */
30
34
  n8nApiConfig?: {
31
35
  baseUrl?: string;
@@ -146,7 +146,9 @@ export class InitOrchestrator {
146
146
  });
147
147
  // Step 6: Configure MCP server
148
148
  const mcpConfigured = await this.runStep('MCP Configuration', async () => {
149
- return await configureMCP(this.projectRoot);
149
+ if (this.options.noMcp)
150
+ return false;
151
+ return await configureMCP(this.projectRoot, { force: this.options.withMcp });
150
152
  });
151
153
  // Step 7: Generate CLAUDE.md
152
154
  const claudeMdGenerated = await this.runStep('CLAUDE.md Generation', async () => {