agentic-qe 3.14.6 → 3.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +74 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +8 -8
  5. package/dist/cli/chunks/adapter-TVQKH65T.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-2YGML6OU.js → agent-booster-wasm-AK2W76RG.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-D5SSQYNU.js → agent-handler-MGZCWHIY.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-YHPLTITV.js → agent-memory-branch-JZ54MCSP.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-ULGTVVWE.js +2 -0
  10. package/dist/cli/chunks/{arena-7BGOXGXO.js → arena-CUVH3V7H.js} +2 -2
  11. package/dist/cli/chunks/{arena-MCE6EU7K.js → arena-YSWTKBCL.js} +4 -4
  12. package/dist/cli/chunks/{audit-BMWTQECB.js → audit-LVU76QGA.js} +3 -3
  13. package/dist/cli/chunks/base-W42BURDL.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-PMUNGASU.js → better-sqlite3-DB3LOJQU.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-QPUFYX7F.js → brain-handler-SD63KOQ6.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-WKFDGRN4.js → branch-enumerator-4MNOPUC7.js} +2 -2
  17. package/dist/cli/chunks/{browser-VY5HKH5X.js → browser-OLPNTWQE.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-HKGHFFFT.js +2 -0
  19. package/dist/cli/chunks/{chunk-62N4NUJH.js → chunk-23CX7JNL.js} +2 -2
  20. package/dist/cli/chunks/{chunk-MW2GGZZ5.js → chunk-25P6JA6V.js} +1 -1
  21. package/dist/cli/chunks/{chunk-RSXXCL4A.js → chunk-2G63VIJE.js} +1 -1
  22. package/dist/cli/chunks/{chunk-3NIG7S5W.js → chunk-2IMSJ7IO.js} +1 -1
  23. package/dist/cli/chunks/{chunk-I33ERSGB.js → chunk-36VKMAMN.js} +2 -2
  24. package/dist/cli/chunks/{chunk-2TMWAQQ3.js → chunk-3M7J4U74.js} +3 -3
  25. package/dist/cli/chunks/{chunk-CM7U6TAX.js → chunk-3QJU4Q4R.js} +2 -2
  26. package/dist/cli/chunks/{chunk-H5BS5VH7.js → chunk-4EKV7PHB.js} +2 -2
  27. package/dist/cli/chunks/{chunk-IG5GNEC6.js → chunk-4INST4ZL.js} +1 -1
  28. package/dist/cli/chunks/{chunk-YHKEDEAA.js → chunk-53BXTTRO.js} +3 -3
  29. package/dist/cli/chunks/{chunk-ENGZ4D5V.js → chunk-5D7ZFWDS.js} +2 -2
  30. package/dist/cli/chunks/{chunk-DZ3AUAAB.js → chunk-5FSLMYAC.js} +2 -2
  31. package/dist/cli/chunks/{chunk-FBMN7B46.js → chunk-5GFKTJ65.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NMAIY4PX.js → chunk-5U6N4V5M.js} +11 -11
  33. package/dist/cli/chunks/{chunk-B6D2CHEH.js → chunk-6EGS77BB.js} +1 -1
  34. package/dist/cli/chunks/{chunk-NQZ5AR3D.js → chunk-6PJPQGF4.js} +2 -2
  35. package/dist/cli/chunks/{chunk-ICTXTNQZ.js → chunk-6RD44SCE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-2NPKIBAZ.js → chunk-74IOEOMH.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RTFO5UQH.js → chunk-77QZHIVX.js} +2 -2
  38. package/dist/cli/chunks/{chunk-D45SG6CP.js → chunk-7EZ2Z2CK.js} +1 -1
  39. package/dist/cli/chunks/{chunk-UNFFDHER.js → chunk-7MIOK72I.js} +10 -32
  40. package/dist/cli/chunks/{chunk-HNFVJP4I.js → chunk-7QYOTUOX.js} +2 -2
  41. package/dist/cli/chunks/{chunk-Q7EAGKAE.js → chunk-A2VUCUTT.js} +2 -2
  42. package/dist/cli/chunks/{chunk-TVYY3OCX.js → chunk-A3DK3XNZ.js} +1 -1
  43. package/dist/cli/chunks/{chunk-RETBYIAC.js → chunk-A5MA7A23.js} +4 -4
  44. package/dist/cli/chunks/{chunk-DUYOVM5I.js → chunk-AEUEMVJK.js} +2 -2
  45. package/dist/cli/chunks/{chunk-6U7LNMWZ.js → chunk-AJUBT4NP.js} +2 -2
  46. package/dist/cli/chunks/{chunk-7CUQCCMD.js → chunk-B2YGVSOP.js} +2 -2
  47. package/dist/cli/chunks/{chunk-SNOBH4AZ.js → chunk-B4I43GE2.js} +2 -2
  48. package/dist/cli/chunks/{chunk-VMNWDJIZ.js → chunk-BD7FEUN3.js} +2 -2
  49. package/dist/cli/chunks/{chunk-HM6ZSCPI.js → chunk-BE4KALTE.js} +1 -1
  50. package/dist/cli/chunks/{chunk-WGM35YWL.js → chunk-BEFTQVEW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-SMDN3BQZ.js → chunk-BLG7SH4A.js} +1 -1
  52. package/dist/cli/chunks/{chunk-AJRUJAAK.js → chunk-C3FXFU2T.js} +1 -1
  53. package/dist/cli/chunks/{chunk-IQO7UCFR.js → chunk-CBONQM5D.js} +2 -2
  54. package/dist/cli/chunks/{chunk-L4RUBPLR.js → chunk-CQNMGK6Y.js} +2 -2
  55. package/dist/cli/chunks/{chunk-NHWGMJAP.js → chunk-CVOQ6ESD.js} +2 -2
  56. package/dist/cli/chunks/{chunk-P6OYS755.js → chunk-DOBKEXMJ.js} +1 -1
  57. package/dist/cli/chunks/{chunk-QZANMBIT.js → chunk-DYTQHRUS.js} +1 -1
  58. package/dist/cli/chunks/{chunk-FZOBD67M.js → chunk-EADSQN5T.js} +1 -1
  59. package/dist/cli/chunks/{chunk-DHVX5UB2.js → chunk-EGOIIUBD.js} +2 -2
  60. package/dist/cli/chunks/{chunk-6OS76PHI.js → chunk-EIGRV3J6.js} +2 -2
  61. package/dist/cli/chunks/{chunk-CD542DNJ.js → chunk-EJ6MMYLK.js} +1 -1
  62. package/dist/cli/chunks/{chunk-ELLBS5RP.js → chunk-ENK44A6Q.js} +2 -2
  63. package/dist/cli/chunks/{chunk-VGFFFKGK.js → chunk-EYXE2XKP.js} +2 -2
  64. package/dist/cli/chunks/{chunk-72KXSMWI.js → chunk-F2OPFVQH.js} +1 -1
  65. package/dist/cli/chunks/{chunk-DK4XN4CU.js → chunk-FBZC4IGB.js} +2 -2
  66. package/dist/cli/chunks/{chunk-MUOG6QXR.js → chunk-FSSR6WBE.js} +2 -2
  67. package/dist/cli/chunks/{chunk-DPYSUDAO.js → chunk-FW4DJ4FJ.js} +1 -1
  68. package/dist/cli/chunks/{chunk-ZVWVV4EX.js → chunk-FYPX5WBJ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-7J6QC567.js → chunk-G367W7XR.js} +3 -3
  70. package/dist/cli/chunks/{chunk-IAF6T27S.js → chunk-GLGKQX2V.js} +2 -2
  71. package/dist/cli/chunks/{chunk-JXGFRBUO.js → chunk-GV4DYPJP.js} +2 -2
  72. package/dist/cli/chunks/{chunk-BPEDWS6O.js → chunk-GVVFTFMB.js} +2 -2
  73. package/dist/cli/chunks/{chunk-CF2ISEOJ.js → chunk-H5RQPO3X.js} +2 -2
  74. package/dist/cli/chunks/{chunk-GSF6MB64.js → chunk-HPWWYT67.js} +2 -2
  75. package/dist/cli/chunks/{chunk-RG52OKAM.js → chunk-HXXHMLJ5.js} +1 -1
  76. package/dist/cli/chunks/{chunk-SESK3ARK.js → chunk-HYFQUWNB.js} +2 -2
  77. package/dist/cli/chunks/{chunk-7D3V65N5.js → chunk-HYOPJHHW.js} +1 -1
  78. package/dist/cli/chunks/{chunk-7LPR6HJG.js → chunk-HZY42OVU.js} +2 -2
  79. package/dist/cli/chunks/{chunk-SDRHUMJB.js → chunk-IAENZ2DR.js} +2 -2
  80. package/dist/cli/chunks/{chunk-B6MOJC3X.js → chunk-IEJ7ZV3M.js} +1 -1
  81. package/dist/cli/chunks/{chunk-UCFQALXO.js → chunk-IWFFO6VT.js} +2 -2
  82. package/dist/cli/chunks/chunk-J7AQZLIH.js +21 -0
  83. package/dist/cli/chunks/{chunk-H52HZ67P.js → chunk-JHJUSSAU.js} +2 -2
  84. package/dist/cli/chunks/{chunk-2YXGBZWV.js → chunk-JOZ47MV6.js} +1 -1
  85. package/dist/cli/chunks/{chunk-EAY2JMZG.js → chunk-JZT7BU44.js} +2 -2
  86. package/dist/cli/chunks/{chunk-BVR7RMC5.js → chunk-KD2BLA5Y.js} +1 -1
  87. package/dist/cli/chunks/{chunk-BAMN2CHI.js → chunk-KUHLTVWC.js} +1 -1
  88. package/dist/cli/chunks/{chunk-5QQSIGUA.js → chunk-LU2EDWQK.js} +2 -2
  89. package/dist/cli/chunks/{chunk-D6CJIGRU.js → chunk-LXZMP3VX.js} +54 -54
  90. package/dist/cli/chunks/{chunk-GPYVDFB3.js → chunk-LY7MFGBD.js} +196 -187
  91. package/dist/cli/chunks/{chunk-W6HXLH5G.js → chunk-MM56VPNE.js} +2 -2
  92. package/dist/cli/chunks/{chunk-E6G2RD5H.js → chunk-MNQN7UZX.js} +2 -2
  93. package/dist/cli/chunks/{chunk-ZCRTRYXK.js → chunk-MQZ53OR3.js} +2 -2
  94. package/dist/cli/chunks/{chunk-3HZS4M3O.js → chunk-MT7UNBZ7.js} +2 -2
  95. package/dist/cli/chunks/{chunk-XAS3XRYM.js → chunk-MZB2UV2O.js} +1 -1
  96. package/dist/cli/chunks/{chunk-GDSXITFH.js → chunk-MZMG6CUJ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-6SQM2MUX.js → chunk-N5XOXPHZ.js} +2 -2
  98. package/dist/cli/chunks/{chunk-5OOMJGFN.js → chunk-NBLDBVAW.js} +1 -1
  99. package/dist/cli/chunks/{chunk-PI7TJS62.js → chunk-ND4QTZOL.js} +2 -2
  100. package/dist/cli/chunks/{chunk-H6ZM3PUT.js → chunk-NHUGHAY6.js} +1 -1
  101. package/dist/cli/chunks/{chunk-5VFPCSK7.js → chunk-NOHWJOBS.js} +1 -1
  102. package/dist/cli/chunks/{chunk-DBDPRORT.js → chunk-O5V7RHVG.js} +2 -2
  103. package/dist/cli/chunks/{chunk-UQ32JHES.js → chunk-O6MO5KMR.js} +2 -2
  104. package/dist/cli/chunks/{chunk-WO4QMXIG.js → chunk-OAZX6WFU.js} +2 -2
  105. package/dist/cli/chunks/{chunk-GGRHV6D7.js → chunk-OEPNNLR4.js} +1 -1
  106. package/dist/cli/chunks/{chunk-AIRGNL55.js → chunk-OIDWDGLG.js} +2 -2
  107. package/dist/cli/chunks/{chunk-V4DM6ELU.js → chunk-ON2UTP2U.js} +2 -2
  108. package/dist/cli/chunks/{chunk-MBRHSU6W.js → chunk-ONR2NXXD.js} +10 -10
  109. package/dist/cli/chunks/{chunk-WCJBU2KI.js → chunk-OXHF3L2T.js} +2 -2
  110. package/dist/cli/chunks/{chunk-AVBJYI5I.js → chunk-OZGIOKEA.js} +1 -1
  111. package/dist/cli/chunks/{chunk-YFBSPLJG.js → chunk-P2UPYSDJ.js} +1 -1
  112. package/dist/cli/chunks/{chunk-C6KWXUFJ.js → chunk-P7XSPP5D.js} +2 -2
  113. package/dist/cli/chunks/{chunk-QDFTT3RF.js → chunk-PCJQCEBA.js} +2 -2
  114. package/dist/cli/chunks/chunk-PELENDDQ.js +2 -0
  115. package/dist/cli/chunks/{chunk-257E2A5M.js → chunk-PYKY22GC.js} +5 -5
  116. package/dist/cli/chunks/{chunk-LL3IGZBI.js → chunk-Q3NSU24F.js} +2 -2
  117. package/dist/cli/chunks/{chunk-Y3LZ35OG.js → chunk-Q6NTEICT.js} +2 -2
  118. package/dist/cli/chunks/chunk-QFETNCNN.js +12 -0
  119. package/dist/cli/chunks/{chunk-SE4WIB26.js → chunk-QGOWNVVG.js} +1 -1
  120. package/dist/cli/chunks/{chunk-6RE3X4V5.js → chunk-QPLSYEWJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-FWASDOT2.js → chunk-QQFQDEUE.js} +2 -2
  122. package/dist/cli/chunks/{chunk-2JVWITNK.js → chunk-QUORH2MG.js} +55 -79
  123. package/dist/cli/chunks/{chunk-5J6W7SIA.js → chunk-QVH5Y7AP.js} +1 -1
  124. package/dist/cli/chunks/{chunk-YSLL6VSL.js → chunk-RC2A4JZ5.js} +2 -2
  125. package/dist/cli/chunks/{chunk-IB27QACC.js → chunk-RDGPXENG.js} +2 -2
  126. package/dist/cli/chunks/{chunk-PX5YDCRH.js → chunk-RKI3IQKQ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-BMAPORJ7.js → chunk-RKUAWQOF.js} +2 -2
  128. package/dist/cli/chunks/chunk-RLW25X66.js +2 -0
  129. package/dist/cli/chunks/{chunk-RFNPJK6N.js → chunk-ROVZSZCS.js} +3 -3
  130. package/dist/cli/chunks/{chunk-MQROI74N.js → chunk-RT6O2HW2.js} +2 -2
  131. package/dist/cli/chunks/{chunk-Y3UOUNHM.js → chunk-SM2YJ2AL.js} +2 -2
  132. package/dist/cli/chunks/{chunk-BBT64TII.js → chunk-SRPLERER.js} +3 -3
  133. package/dist/cli/chunks/{chunk-YS4FCTWF.js → chunk-T77GZF4B.js} +1 -1
  134. package/dist/cli/chunks/{chunk-IV5UZOHH.js → chunk-TFK2AYIN.js} +2 -2
  135. package/dist/cli/chunks/chunk-TW3SR4TS.js +2 -0
  136. package/dist/cli/chunks/{chunk-7Z5LHRC3.js → chunk-TXSPBLBT.js} +2 -2
  137. package/dist/cli/chunks/chunk-UA7TDVL7.js +12 -0
  138. package/dist/cli/chunks/{chunk-3EZOZN25.js → chunk-UBJG3IHT.js} +2 -2
  139. package/dist/cli/chunks/{chunk-QW6VMTBR.js → chunk-UFSVUBTR.js} +2 -2
  140. package/dist/cli/chunks/{chunk-ZEV3YTO7.js → chunk-UOI6ULCH.js} +2 -2
  141. package/dist/cli/chunks/{chunk-JZOS5FCX.js → chunk-UYUJT6QO.js} +2 -2
  142. package/dist/cli/chunks/{chunk-3EA536JF.js → chunk-V5AK56DA.js} +2 -2
  143. package/dist/cli/chunks/{chunk-UKA2KOXE.js → chunk-V6RE4YRQ.js} +2 -2
  144. package/dist/cli/chunks/{chunk-RZZCUIAI.js → chunk-VW6FRMLW.js} +2 -2
  145. package/dist/cli/chunks/chunk-VXKWNRGA.js +2 -0
  146. package/dist/cli/chunks/{chunk-6SH5VZUD.js → chunk-VYDVI6FZ.js} +2 -2
  147. package/dist/cli/chunks/{chunk-BJTJLJRZ.js → chunk-WF6UISKW.js} +3 -3
  148. package/dist/cli/chunks/{chunk-ZL6SYKUK.js → chunk-WIH522AP.js} +1 -1
  149. package/dist/cli/chunks/{chunk-JIXUMYKZ.js → chunk-WOV6XI3A.js} +1 -1
  150. package/dist/cli/chunks/{chunk-JBTPOIAC.js → chunk-X7ADKL7T.js} +2 -2
  151. package/dist/cli/chunks/{chunk-JVNTSNWU.js → chunk-XBYQ2BS4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-Z7WODOTH.js → chunk-XL5KIYE3.js} +2 -2
  153. package/dist/cli/chunks/{chunk-JMONHE4B.js → chunk-XWYELBZS.js} +1 -1
  154. package/dist/cli/chunks/{chunk-SJUXE4IC.js → chunk-XYLQZWF6.js} +2 -2
  155. package/dist/cli/chunks/{chunk-KNNISEDY.js → chunk-Y6AKKQIQ.js} +1 -1
  156. package/dist/cli/chunks/{chunk-CCK4BF76.js → chunk-YMW57PEL.js} +1 -1
  157. package/dist/cli/chunks/{chunk-64VGZQLB.js → chunk-YO4ESCB4.js} +1 -1
  158. package/dist/cli/chunks/{chunk-ZSPU4MOS.js → chunk-YRHTQZU4.js} +2 -2
  159. package/dist/cli/chunks/chunk-Z4Q5PCRZ.js +65 -0
  160. package/dist/cli/chunks/{chunk-Q5XTSMWR.js → chunk-ZELWDJXT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-SPV2VKC5.js → chunk-ZQZD55MN.js} +2 -2
  162. package/dist/cli/chunks/{chunk-66VWCR67.js → chunk-ZS4XVJGV.js} +2 -2
  163. package/dist/cli/chunks/{chunk-6LIHFV7O.js → chunk-ZUB5YOCM.js} +2 -2
  164. package/dist/cli/chunks/chunk-ZUOVNFXK.js +2 -0
  165. package/dist/cli/chunks/{chunk-7NITCZWD.js → chunk-ZWEKAEEV.js} +1 -1
  166. package/dist/cli/chunks/{ci-W6K6G2KZ.js → ci-J3TDK5RA.js} +8 -8
  167. package/dist/cli/chunks/{ci-output-LDT24TS3.js → ci-output-RLS32FUY.js} +2 -2
  168. package/dist/cli/chunks/{circuit-breaker-F5V4KITU.js → circuit-breaker-MRCC7WCM.js} +2 -2
  169. package/dist/cli/chunks/{claude-flow-setup-DT6WQQVD.js → claude-flow-setup-LIZCEKDF.js} +2 -2
  170. package/dist/cli/chunks/client-3BD2DI4N.js +2 -0
  171. package/dist/cli/chunks/{cline-installer-G7TJOAEX.js → cline-installer-T7H6R2RC.js} +2 -2
  172. package/dist/cli/chunks/{code-PGE6A42V.js → code-XMBLI7OF.js} +3 -3
  173. package/dist/cli/chunks/{code-index-extractor-RNITH372.js → code-index-extractor-QS7BYLEX.js} +2 -2
  174. package/dist/cli/chunks/{codex-installer-LBX77AI3.js → codex-installer-6PGT5FM6.js} +2 -2
  175. package/dist/cli/chunks/{completions-4AWLAARX.js → completions-2A3WRXY2.js} +2 -2
  176. package/dist/cli/chunks/{complexity-analyzer-ZPNSS476.js → complexity-analyzer-23HOOGJ7.js} +2 -2
  177. package/dist/cli/chunks/{continuedev-installer-UAPWX6OA.js → continuedev-installer-4FSF7B3N.js} +2 -2
  178. package/dist/cli/chunks/{copilot-installer-BJN2YJGI.js → copilot-installer-A5GRQQUU.js} +2 -2
  179. package/dist/cli/chunks/core-handlers-C3H2ZCS2.js +2 -0
  180. package/dist/cli/chunks/{cost-tracker-MHP2VJ63.js → cost-tracker-Z4STQ5VB.js} +2 -2
  181. package/dist/cli/chunks/{coverage-PQB4IEFG.js → coverage-NUPP6KZZ.js} +3 -3
  182. package/dist/cli/chunks/cross-domain-router-JCQ7SWDP.js +2 -0
  183. package/dist/cli/chunks/{cursor-installer-ZXBWYAS3.js → cursor-installer-FVJ7ROPJ.js} +2 -2
  184. package/dist/cli/chunks/{daemon-N2BEGEFY.js → daemon-7ZZA2MMN.js} +4 -4
  185. package/dist/cli/chunks/{daemon-64C7R6OJ.js → daemon-D662EX5N.js} +3 -3
  186. package/dist/cli/chunks/{dag-attention-scheduler-SPZDAPNL.js → dag-attention-scheduler-IB4TQ2KA.js} +2 -2
  187. package/dist/cli/chunks/{detect-LXJBSSZW.js → detect-LGLBZN4I.js} +2 -2
  188. package/dist/cli/chunks/{dist-node-U3TKZ2IZ.js → dist-node-Z3OL42YE.js} +2 -2
  189. package/dist/cli/chunks/{domain-handler-3DDWUVSR.js → domain-handler-L3CLNL7U.js} +2 -2
  190. package/dist/cli/chunks/{domain-plugins-JJVWI4OQ.js → domain-plugins-GQ3V5X6L.js} +2 -2
  191. package/dist/cli/chunks/{domain-transfer-M36KUJ2U.js → domain-transfer-MFCI76IY.js} +2 -2
  192. package/dist/cli/chunks/dream-FTP33IJB.js +2 -0
  193. package/dist/cli/chunks/{embed-and-insert-pattern-JPAR7TXX.js → embed-and-insert-pattern-UGD6USYH.js} +2 -2
  194. package/dist/cli/chunks/{eval-SOLG23EA.js → eval-3B7UIYGY.js} +2 -2
  195. package/dist/cli/chunks/{experience-capture-middleware-T7G2VOOD.js → experience-capture-middleware-3RQ4NYY3.js} +3 -3
  196. package/dist/cli/chunks/{fast-paths-32N3ELI4.js → fast-paths-QOSAEPYD.js} +2 -2
  197. package/dist/cli/chunks/{feature-flags-NAHKLDRN.js → feature-flags-3S5TH6P4.js} +2 -2
  198. package/dist/cli/chunks/{feature-flags-APJDQ4N7.js → feature-flags-TLF4NKOH.js} +2 -2
  199. package/dist/cli/chunks/{file-discovery-YKVM3MDB.js → file-discovery-AEVMJRNB.js} +2 -2
  200. package/dist/cli/chunks/{fleet-55M5CJS4.js → fleet-E6WTXWFL.js} +3 -3
  201. package/dist/cli/chunks/{gnn-wrapper-UD6E6S6Z.js → gnn-wrapper-MCKH3AUU.js} +2 -2
  202. package/dist/cli/chunks/{heartbeat-handler-OYVW3VSC.js → heartbeat-handler-U7XENHRR.js} +4 -4
  203. package/dist/cli/chunks/heartbeat-scheduler-HXBJVJL2.js +2 -0
  204. package/dist/cli/chunks/hnsw-adapter-TU6WG2ME.js +2 -0
  205. package/dist/cli/chunks/hnsw-index-MS5KODD7.js +2 -0
  206. package/dist/cli/chunks/{hnsw-legacy-bridge-HBYIS3ZW.js → hnsw-legacy-bridge-5GW4SAEI.js} +2 -2
  207. package/dist/cli/chunks/{hnswlib-node-EQPM42OU.js → hnswlib-node-7BLZBK5T.js} +2 -2
  208. package/dist/cli/chunks/{hooks-5ZSSJWO6.js → hooks-F3O2SB6H.js} +10 -10
  209. package/dist/cli/chunks/hybrid-backend-HT45LBHC.js +2 -0
  210. package/dist/cli/chunks/{hypergraph-engine-XBGVQ4PD.js → hypergraph-engine-PV4EKXHB.js} +2 -2
  211. package/dist/cli/chunks/{hypergraph-handler-CAWAQ673.js → hypergraph-handler-VOWO5ZTW.js} +3 -3
  212. package/dist/cli/chunks/impact-analyzer-AP4AGTG5.js +2 -0
  213. package/dist/cli/chunks/{init-handler-PRHXSARK.js → init-handler-ENJ5ONJX.js} +16 -14
  214. package/dist/cli/chunks/init-wizard-I5DFZUQL.js +2 -0
  215. package/dist/cli/chunks/kernel-MISPSPPA.js +2 -0
  216. package/dist/cli/chunks/{kilocode-installer-F7LXBM7I.js → kilocode-installer-HNNJOOPE.js} +2 -2
  217. package/dist/cli/chunks/{kiro-installer-NM723ZRG.js → kiro-installer-UZBIQ3IC.js} +2 -2
  218. package/dist/cli/chunks/knowledge-graph-L26JESGE.js +2 -0
  219. package/dist/cli/chunks/{learning-5QYIDHH3.js → learning-YMLCVFUT.js} +3 -3
  220. package/dist/cli/chunks/{llm-router-43HKWPSX.js → llm-router-YWTARCCT.js} +4 -4
  221. package/dist/cli/chunks/llm-router-service-MWGC43ZA.js +2 -0
  222. package/dist/cli/chunks/{load-5YDBWSCS.js → load-DKE3F3IP.js} +2 -2
  223. package/dist/cli/chunks/load-test-H5ISNNM5.js +2 -0
  224. package/dist/cli/chunks/{mcp-UMAPMNMY.js → mcp-5PSGIUCW.js} +2 -2
  225. package/dist/cli/chunks/{memory-FWCPCQFP.js → memory-3L3O6JMM.js} +5 -5
  226. package/dist/cli/chunks/memory-backend-HWDNOBKW.js +2 -0
  227. package/dist/cli/chunks/memory-handlers-ZFDVQZM5.js +2 -0
  228. package/dist/cli/chunks/{multi-model-executor-2XTBGLE4.js → multi-model-executor-AEEO7IA4.js} +2 -2
  229. package/dist/cli/chunks/{opencode-installer-GIXOJ6NS.js → opencode-installer-ABBO355U.js} +2 -2
  230. package/dist/cli/chunks/{orchestrator-VW6BKHLI.js → orchestrator-E36Q7MKE.js} +17 -17
  231. package/dist/cli/chunks/pattern-null-store-GQP6ICWK.js +2 -0
  232. package/dist/cli/chunks/{pattern-usage-recorder-7CEUC3J7.js → pattern-usage-recorder-H4XKSID4.js} +2 -2
  233. package/dist/cli/chunks/{pipeline-IGUQPPPO.js → pipeline-BGFEHXIN.js} +2 -2
  234. package/dist/cli/chunks/{platform-2P636I7B.js → platform-GK7ZVDJI.js} +2 -2
  235. package/dist/cli/chunks/{plugin-NY6SWDPE.js → plugin-CAH2CKI6.js} +2 -2
  236. package/dist/cli/chunks/{prime-radiant-advanced-wasm-2UUDTIO2.js → prime-radiant-advanced-wasm-M5EYRONA.js} +2 -2
  237. package/dist/cli/chunks/{project-root-IOISG5KX.js → project-root-BSNZC243.js} +2 -2
  238. package/dist/cli/chunks/protocol-executor-AD5A4DAI.js +2 -0
  239. package/dist/cli/chunks/{protocol-handler-ZTPCRQ5W.js → protocol-handler-JDSSC2SF.js} +2 -2
  240. package/dist/cli/chunks/{prove-SQX5A3IG.js → prove-ANPTOZJE.js} +2 -2
  241. package/dist/cli/chunks/qe-reasoning-bank-W3Z2PKTR.js +2 -0
  242. package/dist/cli/chunks/{quality-DROILKRY.js → quality-SXWGYRQR.js} +2 -2
  243. package/dist/cli/chunks/{quality-gate-PWKWDJY2.js → quality-gate-GYNCA4ZY.js} +3 -3
  244. package/dist/cli/chunks/queen-coordinator-HQRHLIJX.js +2 -0
  245. package/dist/cli/chunks/{real-embeddings-P5U3MGYC.js → real-embeddings-WSRYAOZM.js} +2 -2
  246. package/dist/cli/chunks/{ref-validation-KY73NQXD.js → ref-validation-AZ3LRWEK.js} +2 -2
  247. package/dist/cli/chunks/{roocode-installer-6JPPRB3W.js → roocode-installer-2QKGFIEU.js} +2 -2
  248. package/dist/cli/chunks/router-MTP5LH4H.js +2 -0
  249. package/dist/cli/chunks/routing-feedback-GWETVB4L.js +2 -0
  250. package/dist/cli/chunks/{routing-handler-VTJIVFUO.js → routing-handler-UYDC5MMD.js} +2 -2
  251. package/dist/cli/chunks/{ruvector-commands-C6RPSJJO.js → ruvector-commands-QXADPVEY.js} +2 -2
  252. package/dist/cli/chunks/rvf-dual-writer-4UE5S7WP.js +2 -0
  253. package/dist/cli/chunks/rvf-migration-adapter-PHH3HF4Q.js +2 -0
  254. package/dist/cli/chunks/{rvf-migration-coordinator-R53URRIO.js → rvf-migration-coordinator-GD4NBFKT.js} +2 -2
  255. package/dist/cli/chunks/rvf-native-adapter-KTLZBUWV.js +2 -0
  256. package/dist/cli/chunks/{rvf-store-integrity-MMXN5TEJ.js → rvf-store-integrity-7SXG66IL.js} +2 -2
  257. package/dist/cli/chunks/safe-db-FWWGAPVE.js +2 -0
  258. package/dist/cli/chunks/schedule-TPA4V4D5.js +2 -0
  259. package/dist/cli/chunks/scheduler-5ZTEPNDD.js +2 -0
  260. package/dist/cli/chunks/{security-3B3R2NL4.js → security-YKB622PK.js} +3 -3
  261. package/dist/cli/chunks/{shared-rvf-adapter-VIJB7JUS.js → shared-rvf-adapter-KMLAV7JK.js} +2 -2
  262. package/dist/cli/chunks/{shared-rvf-dual-writer-UVWGDUWC.js → shared-rvf-dual-writer-OYY27DFV.js} +2 -2
  263. package/dist/cli/chunks/sqlite-persistence-HPTT624C.js +2 -0
  264. package/dist/cli/chunks/{standalone-memory-M4LWAAYZ.js → standalone-memory-2DOABVLC.js} +2 -2
  265. package/dist/cli/chunks/{status-handler-YYFV6OZL.js → status-handler-EXRKETV7.js} +2 -2
  266. package/dist/cli/chunks/{structural-health-27E6LLKB.js → structural-health-2SKK6DU6.js} +2 -2
  267. package/dist/cli/chunks/sync-DQ2YUNI6.js +2 -0
  268. package/dist/cli/chunks/{sync-J3LJ56WN.js → sync-UW7SX7GO.js} +2 -2
  269. package/dist/cli/chunks/{task-handler-4MCEBQZL.js → task-handler-LYQ6WYUY.js} +2 -2
  270. package/dist/cli/chunks/task-handlers-DIJO232S.js +9 -0
  271. package/dist/cli/chunks/test-WRHZMUCW.js +33 -0
  272. package/dist/cli/chunks/{test-scheduling-ZJBFRZ3J.js → test-scheduling-HI23RXFK.js} +3 -3
  273. package/dist/cli/chunks/token-bootstrap-23SA6SWZ.js +2 -0
  274. package/dist/cli/chunks/{token-usage-3X5WMTG2.js → token-usage-M7RRDPXO.js} +2 -2
  275. package/dist/cli/chunks/{transformers-MVL4C5IX.js → transformers-4TC35KKS.js} +2 -2
  276. package/dist/cli/chunks/{tree-sitter-wasm-parser-SLW65ZFO.js → tree-sitter-wasm-parser-F4LTKAWD.js} +2 -2
  277. package/dist/cli/chunks/{types-TG5P3CRS.js → types-NBXV6LXQ.js} +2 -2
  278. package/dist/cli/chunks/unified-memory-OVFEPRPS.js +2 -0
  279. package/dist/cli/chunks/unified-memory-hnsw-KKRSCZHR.js +2 -0
  280. package/dist/cli/chunks/unified-persistence-7GLR4RI3.js +2 -0
  281. package/dist/cli/chunks/{upgrade-ETBHDEPY.js → upgrade-4BGOU5RM.js} +2 -2
  282. package/dist/cli/chunks/{validate-C2A73LZK.js → validate-EDWAR63H.js} +2 -2
  283. package/dist/cli/chunks/{validate-swarm-67XN42ML.js → validate-swarm-VI72CPR7.js} +2 -2
  284. package/dist/cli/chunks/visual-security-2FUM5GLI.js +2 -0
  285. package/dist/cli/chunks/{web-tree-sitter-USJN77P4.js → web-tree-sitter-Y5XBRQXF.js} +2 -2
  286. package/dist/cli/chunks/{windsurf-installer-5GGZXGJW.js → windsurf-installer-VEX23WAF.js} +2 -2
  287. package/dist/cli/chunks/{witness-chain-IWS5ZHHL.js → witness-chain-3YNL6YGY.js} +2 -2
  288. package/dist/cli/chunks/witness-chain-MH6GA5L6.js +2 -0
  289. package/dist/cli/chunks/witness-chain-repair-MJZGZRWT.js +2 -0
  290. package/dist/cli/chunks/{witness-chain-verifier-3GEADWPE.js → witness-chain-verifier-TTJYXTBE.js} +2 -2
  291. package/dist/cli/chunks/{witness-key-manager-ZWEIK3VJ.js → witness-key-manager-EM6YXYOY.js} +2 -2
  292. package/dist/cli/chunks/{workflow-KHMVVBBA.js → workflow-2RBDOM7V.js} +4 -4
  293. package/dist/cli/chunks/workflow-orchestrator-H6G65YKU.js +2 -0
  294. package/dist/cli/chunks/wrappers-5OTAVVOV.js +2 -0
  295. package/dist/cli/commands/ci.js +1 -1
  296. package/dist/cli/commands/test.js +18 -3
  297. package/dist/cli/handlers/init-handler.d.ts +2 -0
  298. package/dist/cli/handlers/init-handler.js +8 -2
  299. package/dist/cli/index.js +8 -0
  300. package/dist/coordination/handlers/test-execution-handlers.js +13 -8
  301. package/dist/coordination/index.d.ts +1 -1
  302. package/dist/coordination/queen-event-handlers.js +9 -6
  303. package/dist/coordination/result-saver.js +1 -1
  304. package/dist/coordination/services/index.d.ts +1 -1
  305. package/dist/coordination/services/task-audit-logger.d.ts +38 -13
  306. package/dist/coordination/services/task-audit-logger.js +33 -5
  307. package/dist/coordination/task-executor.d.ts +5 -0
  308. package/dist/coordination/task-executor.js +10 -5
  309. package/dist/domains/test-generation/coordinator.js +6 -5
  310. package/dist/domains/test-generation/interfaces.d.ts +11 -1
  311. package/dist/domains/test-generation/services/behavior-example-validation.d.ts +36 -0
  312. package/dist/domains/test-generation/services/behavior-example-validation.js +89 -0
  313. package/dist/domains/test-generation/services/behavior-examples.d.ts +8 -0
  314. package/dist/domains/test-generation/services/behavior-examples.js +65 -0
  315. package/dist/domains/test-generation/services/test-generator.d.ts +1 -1
  316. package/dist/domains/test-generation/services/test-generator.js +59 -30
  317. package/dist/domains/visual-accessibility/services/axe-core-audit.d.ts +0 -15
  318. package/dist/domains/visual-accessibility/services/axe-core-audit.js +12 -10
  319. package/dist/init/browser-engine-installer.d.ts +5 -5
  320. package/dist/init/browser-engine-installer.js +28 -6
  321. package/dist/init/init-wizard.d.ts +2 -0
  322. package/dist/init/orchestrator.js +1 -0
  323. package/dist/init/phases/09-assets.js +8 -18
  324. package/dist/init/phases/phase-interface.d.ts +2 -0
  325. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +2 -5
  326. package/dist/integrations/vibium/client.d.ts +1 -0
  327. package/dist/integrations/vibium/client.js +24 -11
  328. package/dist/integrations/vibium/runtime.d.ts +14 -0
  329. package/dist/integrations/vibium/runtime.js +94 -0
  330. package/dist/kernel/pattern-fts-self-heal.d.ts +63 -0
  331. package/dist/kernel/pattern-fts-self-heal.js +193 -0
  332. package/dist/kernel/process-lifecycle.d.ts +60 -0
  333. package/dist/kernel/process-lifecycle.js +91 -0
  334. package/dist/kernel/unified-memory-schemas.d.ts +15 -1
  335. package/dist/kernel/unified-memory-schemas.js +53 -25
  336. package/dist/kernel/unified-memory.js +31 -34
  337. package/dist/kernel/unified-persistence.js +12 -6
  338. package/dist/learning/experience-capture.d.ts +2 -1
  339. package/dist/learning/experience-capture.js +23 -8
  340. package/dist/learning/pattern-store.d.ts +1 -1
  341. package/dist/learning/pattern-store.js +27 -30
  342. package/dist/learning/qe-patterns.d.ts +6 -0
  343. package/dist/learning/qe-reasoning-bank.d.ts +1 -0
  344. package/dist/learning/qe-reasoning-bank.js +14 -4
  345. package/dist/learning/real-qe-reasoning-bank.d.ts +9 -4
  346. package/dist/learning/real-qe-reasoning-bank.js +28 -4
  347. package/dist/learning/rvf-pattern-store.js +19 -19
  348. package/dist/learning/sqlite-persistence.js +9 -24
  349. package/dist/mcp/bundle.js +508 -545
  350. package/dist/mcp/entry.js +52 -6
  351. package/dist/mcp/handlers/domain-handler-configs.js +12 -4
  352. package/dist/mcp/handlers/task-handlers.js +11 -7
  353. package/dist/mcp/protocol-server.js +18 -3
  354. package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
  355. package/dist/mcp/services/reasoning-bank-service.js +5 -1
  356. package/dist/mcp/tools/test-execution/e2e-execute.js +9 -1
  357. package/dist/mcp/tools/test-generation/generate.d.ts +6 -1
  358. package/dist/mcp/tools/test-generation/generate.js +8 -0
  359. package/dist/mcp/types.d.ts +6 -2
  360. package/dist/shared/error-utils.d.ts +15 -0
  361. package/dist/shared/error-utils.js +21 -0
  362. package/dist/shared/events/domain-events.d.ts +2 -1
  363. package/package.json +10 -6
  364. package/dist/cli/chunks/adapter-UYOJPTOX.js +0 -2
  365. package/dist/cli/chunks/aqe-learning-engine-JR5AVQXR.js +0 -2
  366. package/dist/cli/chunks/base-DRZ2LS6X.js +0 -2
  367. package/dist/cli/chunks/browser-workflow-CJ7T3MXF.js +0 -2
  368. package/dist/cli/chunks/chunk-4N23RFDU.js +0 -2
  369. package/dist/cli/chunks/chunk-AHKELLIO.js +0 -12
  370. package/dist/cli/chunks/chunk-MJS53PRX.js +0 -2
  371. package/dist/cli/chunks/chunk-PZPWRQ2M.js +0 -21
  372. package/dist/cli/chunks/chunk-QGA55PFM.js +0 -12
  373. package/dist/cli/chunks/chunk-TCHGOB2N.js +0 -2
  374. package/dist/cli/chunks/chunk-Z6GGIRQQ.js +0 -65
  375. package/dist/cli/chunks/client-KHWJT6FB.js +0 -2
  376. package/dist/cli/chunks/core-handlers-HING5RRG.js +0 -2
  377. package/dist/cli/chunks/cross-domain-router-PQTD6AZN.js +0 -2
  378. package/dist/cli/chunks/dream-WUGRSNCV.js +0 -2
  379. package/dist/cli/chunks/heartbeat-scheduler-33XX5XNQ.js +0 -2
  380. package/dist/cli/chunks/hnsw-adapter-XQPERX3H.js +0 -2
  381. package/dist/cli/chunks/hnsw-index-2GNXTWHH.js +0 -2
  382. package/dist/cli/chunks/hybrid-backend-CCF7URKI.js +0 -2
  383. package/dist/cli/chunks/impact-analyzer-HGKAZWIG.js +0 -2
  384. package/dist/cli/chunks/init-wizard-72MFBI3G.js +0 -2
  385. package/dist/cli/chunks/kernel-BRCBVMSK.js +0 -2
  386. package/dist/cli/chunks/knowledge-graph-DG44IPEI.js +0 -2
  387. package/dist/cli/chunks/llm-router-service-24KXFX32.js +0 -2
  388. package/dist/cli/chunks/load-test-N4TAYJY3.js +0 -2
  389. package/dist/cli/chunks/memory-backend-NVYFYVAU.js +0 -2
  390. package/dist/cli/chunks/memory-handlers-UTWCNCHL.js +0 -2
  391. package/dist/cli/chunks/pattern-null-store-SBPNYDBR.js +0 -2
  392. package/dist/cli/chunks/protocol-executor-IBYEII5Q.js +0 -2
  393. package/dist/cli/chunks/qe-reasoning-bank-7IETWW6W.js +0 -2
  394. package/dist/cli/chunks/queen-coordinator-NHUK2MWJ.js +0 -2
  395. package/dist/cli/chunks/router-SRSO3IHF.js +0 -2
  396. package/dist/cli/chunks/routing-feedback-PASRE5HY.js +0 -2
  397. package/dist/cli/chunks/rvf-dual-writer-4M4J67OU.js +0 -2
  398. package/dist/cli/chunks/rvf-migration-adapter-TSXGT5LF.js +0 -2
  399. package/dist/cli/chunks/rvf-native-adapter-MOF3E7BR.js +0 -2
  400. package/dist/cli/chunks/safe-db-QJLFO33B.js +0 -2
  401. package/dist/cli/chunks/schedule-YIVXW5O2.js +0 -2
  402. package/dist/cli/chunks/scheduler-AON7DWSJ.js +0 -2
  403. package/dist/cli/chunks/sqlite-persistence-75VHKKQB.js +0 -2
  404. package/dist/cli/chunks/sync-26CEGSTC.js +0 -2
  405. package/dist/cli/chunks/task-handlers-GYBAWKE2.js +0 -9
  406. package/dist/cli/chunks/test-MPC5HRH5.js +0 -33
  407. package/dist/cli/chunks/token-bootstrap-2Y2XITBX.js +0 -2
  408. package/dist/cli/chunks/unified-memory-UCQ6AB32.js +0 -2
  409. package/dist/cli/chunks/unified-memory-hnsw-IXYUMKRR.js +0 -2
  410. package/dist/cli/chunks/unified-persistence-7E6JQ4FZ.js +0 -2
  411. package/dist/cli/chunks/vibium-NILGKHLN.js +0 -2
  412. package/dist/cli/chunks/visual-security-4VZXPEVG.js +0 -2
  413. package/dist/cli/chunks/witness-chain-JQA2VPZI.js +0 -2
  414. package/dist/cli/chunks/witness-chain-repair-4UA7IPS3.js +0 -2
  415. package/dist/cli/chunks/workflow-orchestrator-GI5NQH7C.js +0 -2
  416. package/dist/cli/chunks/wrappers-N6XIK5PT.js +0 -2
@@ -0,0 +1,65 @@
1
+ import ts from 'typescript';
2
+ import { CallerInputError } from '../../../shared/error-utils.js';
3
+ import { assertBehaviorJsonValue, validateBehaviorExamples } from './behavior-example-validation.js';
4
+ /** JSON-only data is emitted as a parsed string, never interpolated as source. */
5
+ function literal(value) {
6
+ assertBehaviorJsonValue(value);
7
+ return `JSON.parse(${JSON.stringify(JSON.stringify(value))})`;
8
+ }
9
+ export function generateBehaviorExamples(source, sourceFile, importPath, framework, examples, testType) {
10
+ const supported = ['vitest', 'jest', 'node-test'].includes(framework) && testType === 'unit';
11
+ const ast = ts.createSourceFile(sourceFile, source, ts.ScriptTarget.Latest, true);
12
+ const diagnostics = ast.parseDiagnostics;
13
+ if (diagnostics.length)
14
+ throw new CallerInputError('Cannot generate behavior examples from syntactically invalid source');
15
+ const exports = new Map();
16
+ for (const node of ast.statements) {
17
+ if (!ts.canHaveModifiers(node) || !ts.getModifiers(node)?.some(m => m.kind === ts.SyntaxKind.ExportKeyword))
18
+ continue;
19
+ if (ts.getModifiers(node)?.some(m => m.kind === ts.SyntaxKind.DefaultKeyword))
20
+ continue;
21
+ const add = (name, fn) => {
22
+ if (fn.body && !fn.asteriskToken && fn.parameters.every(p => ts.isIdentifier(p.name) && p.name.text !== 'this' && !p.dotDotDotToken && !p.questionToken && !p.initializer))
23
+ exports.set(name, fn.parameters.length);
24
+ };
25
+ if (ts.isFunctionDeclaration(node) && node.name)
26
+ add(node.name.text, node);
27
+ if (ts.isVariableStatement(node))
28
+ for (const decl of node.declarationList.declarations) {
29
+ if (ts.isIdentifier(decl.name) && decl.initializer && (ts.isArrowFunction(decl.initializer) || ts.isFunctionExpression(decl.initializer)))
30
+ add(decl.name.text, decl.initializer);
31
+ }
32
+ }
33
+ validateBehaviorExamples(examples);
34
+ if (examples?.length && !supported)
35
+ throw new CallerInputError('Behavior examples support unit tests with vitest, jest, or node-test only');
36
+ const limits = [];
37
+ if (importPath === './module-under-test')
38
+ limits.push('Inline source: save the source and replace ./module-under-test with its real import path before running.');
39
+ const lines = [framework === 'node-test' ? "import { test } from 'node:test';\nimport assert from 'node:assert/strict';" : framework === 'vitest' ? "import { test, expect } from 'vitest';" : "import { test, expect } from '@jest/globals';"];
40
+ if (!examples?.length) {
41
+ limits.push('Scaffolding only: supply behaviorExamples from a specification or trusted fixtures. No behavior or coverage has been verified.');
42
+ lines.push(`test.skip('Scaffolding: behaviorExamples required for ${exports.size} supported named exports', () => {});`);
43
+ }
44
+ else {
45
+ lines.push(`import * as subject from ${JSON.stringify(importPath)};`);
46
+ for (const [index, example] of examples.entries()) {
47
+ if (!example || typeof example.functionName !== 'string' || !exports.has(example.functionName))
48
+ throw new CallerInputError(`Behavior example ${index + 1} must target a named exported function with required simple parameters; '${String(example?.functionName)}' is not one (supported: ${[...exports.keys()].join(', ') || 'none'})`);
49
+ if (!Array.isArray(example.args) || example.args.length !== exports.get(example.functionName))
50
+ throw new CallerInputError(`Behavior example argument count does not match ${example.functionName}`);
51
+ if (!Object.prototype.hasOwnProperty.call(example, 'expected'))
52
+ throw new CallerInputError('Behavior example requires an explicit expected value');
53
+ const call = `await subject[${JSON.stringify(example.functionName)}](${Array.from(example.args).map(a => literal(a)).join(', ')})`;
54
+ const assertion = framework === 'node-test' ? `assert.deepStrictEqual(${call}, ${literal(example.expected)});` : `expect(${call}).toStrictEqual(${literal(example.expected)});`;
55
+ lines.push(`test(${JSON.stringify(`${example.functionName}: specification example ${index + 1}`)}, async () => { ${assertion} });`);
56
+ }
57
+ const uncovered = [...exports.keys()].filter(name => !examples.some(e => e.functionName === name));
58
+ if (uncovered.length)
59
+ limits.push(`No supplied behavior examples for: ${uncovered.join(', ')}`);
60
+ limits.push('Only supplied examples are asserted; coverage is unmeasured. Re-exports, default exports, classes, rest/default/destructured/optional parameters and thrown-error specifications are unsupported.');
61
+ }
62
+ return { code: `// ${limits.join('\n// ')}\n${lines.join('\n')}\n`, limits, assertions: examples?.length ?? 0,
63
+ mode: examples?.length ? 'behavior-examples' : 'scaffolding' };
64
+ }
65
+ //# sourceMappingURL=behavior-examples.js.map
@@ -70,6 +70,7 @@ export declare class TestGeneratorService implements ITestGenerationService {
70
70
  private readonly config;
71
71
  private readonly memory;
72
72
  private readonly generatorFactory;
73
+ private readonly usesDefaultGenerator;
73
74
  private readonly tddGenerator;
74
75
  private readonly propertyTestGenerator;
75
76
  private readonly testDataGenerator;
@@ -164,7 +165,6 @@ export declare class TestGeneratorService implements ITestGenerationService {
164
165
  private extractModuleName;
165
166
  private getImportPath;
166
167
  private countAssertions;
167
- private estimateCoverage;
168
168
  private storeGenerationMetadata;
169
169
  }
170
170
  /**
@@ -6,13 +6,15 @@
6
6
  * Uses TypeScript AST parser for code analysis
7
7
  * Delegates to specialized services for TDD, property tests, and test data
8
8
  */
9
+ import { generateBehaviorExamples } from './behavior-examples.js';
10
+ import { validateBehaviorExamples } from './behavior-example-validation.js';
9
11
  import { LoggerFactory } from '../../../logging/index.js';
10
12
  import { v4 as uuidv4 } from 'uuid';
11
13
  import * as fs from 'fs';
12
14
  import * as path from 'path';
13
15
  import ts from 'typescript';
14
16
  import { ok, err } from '../../../shared/types/index.js';
15
- import { toErrorMessage } from '../../../shared/error-utils.js';
17
+ import { CallerInputError, toErrorMessage } from '../../../shared/error-utils.js';
16
18
  import { TestGeneratorFactory } from '../factories/test-generator-factory.js';
17
19
  import { TDDGeneratorService } from './tdd-generator.js';
18
20
  import { PropertyTestGeneratorService } from './property-test-generator.js';
@@ -83,6 +85,7 @@ export class TestGeneratorService {
83
85
  config;
84
86
  memory;
85
87
  generatorFactory;
88
+ usesDefaultGenerator;
86
89
  tddGenerator;
87
90
  propertyTestGenerator;
88
91
  testDataGenerator;
@@ -92,6 +95,7 @@ export class TestGeneratorService {
92
95
  constructor(dependencies, config = {}) {
93
96
  this.config = { ...DEFAULT_CONFIG, ...config };
94
97
  this.memory = dependencies.memory;
98
+ this.usesDefaultGenerator = !dependencies.generatorFactory;
95
99
  this.generatorFactory = dependencies.generatorFactory || new TestGeneratorFactory();
96
100
  this.tddGenerator = dependencies.tddGenerator || new TDDGeneratorService();
97
101
  this.propertyTestGenerator = dependencies.propertyTestGenerator || new PropertyTestGeneratorService();
@@ -123,11 +127,11 @@ export class TestGeneratorService {
123
127
  * Enhance generated test code using LLM
124
128
  * Adds edge cases, improves assertions, and adds documentation
125
129
  */
126
- async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context) {
130
+ async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context, showSourcePath = true) {
127
131
  if (!this.llmRouter)
128
132
  return { code: testCode, enhanced: false };
129
133
  try {
130
- let prompt = this.buildTestEnhancementPrompt(testCode, sourceCode, analysis);
134
+ let prompt = this.buildTestEnhancementPrompt(testCode, sourceCode, analysis, showSourcePath ? sourceFilePath : undefined, context?.importPath);
131
135
  // Prepend historical edge case patterns if injector is available (loki-mode Item 5)
132
136
  if (this.edgeCaseInjector) {
133
137
  try {
@@ -223,8 +227,17 @@ Return ONLY the enhanced test code, no explanations.`,
223
227
  /**
224
228
  * Build prompt for test enhancement
225
229
  */
226
- buildTestEnhancementPrompt(testCode, sourceCode, analysis) {
227
- let prompt = `## Source Code to Test:\n\`\`\`typescript\n${sourceCode}\n\`\`\`\n\n`;
230
+ buildTestEnhancementPrompt(testCode, sourceCode, analysis, sourceFilePath, importPath) {
231
+ let prompt = '';
232
+ if (sourceFilePath || importPath) {
233
+ prompt += '## Module Under Test:\n';
234
+ if (sourceFilePath)
235
+ prompt += `- Source file: ${sourceFilePath}\n`;
236
+ if (importPath)
237
+ prompt += `- Import it in the tests from: '${importPath}'\n`;
238
+ prompt += '\n';
239
+ }
240
+ prompt += `## Source Code to Test:\n\`\`\`typescript\n${sourceCode}\n\`\`\`\n\n`;
228
241
  prompt += `## Current Test Code:\n\`\`\`typescript\n${testCode}\n\`\`\`\n\n`;
229
242
  if (analysis) {
230
243
  if (analysis.functions.length > 0) {
@@ -303,6 +316,8 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
303
316
  */
304
317
  async generateTests(request) {
305
318
  try {
319
+ // Throws CallerInputError (caught below) for malformed examples.
320
+ validateBehaviorExamples(request.behaviorExamples);
306
321
  // Auto-detect language and framework if not provided (ADR-078)
307
322
  const resolved = resolveRequest({
308
323
  sourceFiles: request.sourceFiles,
@@ -312,7 +327,10 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
312
327
  });
313
328
  const effectiveFramework = (request.framework || resolved?.framework || 'vitest');
314
329
  const effectiveLanguage = request.language || resolved?.language;
315
- const { sourceFiles, testType, coverageTarget = this.config.coverageTargetDefault, patterns = [], } = request;
330
+ const { sourceFiles, testType, patterns = [], } = request;
331
+ if (request.behaviorExamples?.length && sourceFiles.length !== 1) {
332
+ return err(new CallerInputError('behaviorExamples requires exactly one source file'));
333
+ }
316
334
  if (sourceFiles.length === 0) {
317
335
  return err(new Error('No source files provided'));
318
336
  }
@@ -335,7 +353,9 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
335
353
  }
336
354
  }
337
355
  }
338
- const coverageEstimate = this.estimateCoverage(tests, coverageTarget);
356
+ // Generation does not execute or instrument the source. Assertion counts
357
+ // are not coverage evidence, including LLM-generated and empty results.
358
+ const coverageEstimate = null;
339
359
  await this.storeGenerationMetadata(tests, patternsUsed);
340
360
  return ok({
341
361
  tests,
@@ -458,16 +478,41 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
458
478
  dependencies,
459
479
  similarCode,
460
480
  };
461
- let testCode = generator.generateTests(context);
462
- // ADR-051: Enhance with LLM if enabled and available.
481
+ const hasExamples = (originalRequest?.behaviorExamples?.length ?? 0) > 0;
482
+ const jsSource = /\.(?:[cm]?[jt]s|[jt]sx)$/i.test(sourceFile);
483
+ const deterministicEligible = (this.usesDefaultGenerator || hasExamples)
484
+ && testType === 'unit' && jsSource && ['vitest', 'jest', 'node-test'].includes(framework);
485
+ if (hasExamples && !deterministicEligible) {
486
+ throw new CallerInputError('Behavior examples require JavaScript/TypeScript and vitest, jest, or node-test');
487
+ }
488
+ const buildDeterministic = () => generateBehaviorExamples(sourceContent, sourceFile, originalRequest?.importPathOverrides?.[sourceFile] ?? path.resolve(sourceFile), framework, originalRequest?.behaviorExamples, testType);
489
+ // ADR-051: Enhance with LLM if enabled and available. Caller-supplied
490
+ // behavior examples are the oracle, so they are never rewritten by an LLM.
463
491
  // #567: `llmEnhanced` reflects whether the LLM actually produced the code,
464
492
  // not merely whether a router was configured — a broken provider must not
465
493
  // report AI-enhanced output it did not produce.
494
+ const willEnhance = this.isLLMEnhancementAvailable() && !!sourceContent && !hasExamples;
495
+ // #795: without fixtures the LLM must start from the framework template,
496
+ // which carries the real import line for the module under test. The
497
+ // zero-assertion scaffold is only emitted when no LLM output is used.
498
+ let deterministic = deterministicEligible && !willEnhance ? buildDeterministic() : undefined;
499
+ let testCode = deterministic?.code ?? generator.generateTests(context);
466
500
  let llmEnhanced = false;
467
- if (this.isLLMEnhancementAvailable() && sourceContent) {
468
- const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, sourceFile, context);
469
- testCode = result.code;
501
+ if (willEnhance) {
502
+ // An import override means `sourceFile` is a stand-in (the MCP handler's
503
+ // /tmp/aqe-temp-* copy of inline source). Do not show the LLM that path:
504
+ // it could echo it into the test in a form the temp-path rewrite misses.
505
+ const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, sourceFile, context, originalRequest?.importPathOverrides?.[sourceFile] === undefined);
470
506
  llmEnhanced = result.enhanced;
507
+ if (llmEnhanced) {
508
+ testCode = result.code;
509
+ }
510
+ else if (deterministicEligible) {
511
+ // The LLM produced nothing usable: fall back to the honest scaffold,
512
+ // never to template assertions with guessed expected values (#787).
513
+ deterministic = buildDeterministic();
514
+ testCode = deterministic.code;
515
+ }
471
516
  }
472
517
  const test = {
473
518
  id: uuidv4(),
@@ -476,7 +521,8 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
476
521
  testFile,
477
522
  testCode,
478
523
  type: testType,
479
- assertions: this.countAssertions(testCode),
524
+ assertions: deterministic && !llmEnhanced ? deterministic.assertions : this.countAssertions(testCode),
525
+ ...(!llmEnhanced && deterministic ? { generationMode: deterministic.mode, generationLimits: deterministic.limits } : {}),
480
526
  // ADR-078: Include detected language and framework
481
527
  language: effectiveLanguage,
482
528
  framework: framework,
@@ -976,23 +1022,6 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
976
1022
  }
977
1023
  return Math.max(1, count);
978
1024
  }
979
- estimateCoverage(tests, target) {
980
- const totalAssertions = tests.reduce((sum, t) => sum + t.assertions, 0);
981
- const totalTests = tests.length;
982
- const testBasedCoverage = totalTests * 4;
983
- const assertionCoverage = totalAssertions * 1.5;
984
- const typeMultiplier = tests.reduce((mult, t) => {
985
- if (t.type === 'integration')
986
- return mult + 0.1;
987
- if (t.type === 'e2e')
988
- return mult + 0.15;
989
- return mult;
990
- }, 1);
991
- const rawEstimate = (testBasedCoverage + assertionCoverage) * typeMultiplier;
992
- const diminishedEstimate = rawEstimate * (1 - rawEstimate / 200);
993
- const estimatedCoverage = Math.min(target, Math.max(0, diminishedEstimate));
994
- return Math.round(estimatedCoverage * 10) / 10;
995
- }
996
1025
  async storeGenerationMetadata(tests, patterns) {
997
1026
  const metadata = {
998
1027
  generatedAt: new Date().toISOString(),
@@ -1,18 +1,3 @@
1
- /**
2
- * Agentic QE v3 - Axe-Core Accessibility Audit
3
- *
4
- * Lightweight implementation using vibium + axe-core for accessibility testing.
5
- * Vibium provides browser automation via WebDriver BiDi (~202KB),
6
- * axe-core provides accessibility rules (~3MB).
7
- *
8
- * Features:
9
- * - WCAG 2.0/2.1/2.2 compliance testing
10
- * - Section 508 compliance
11
- * - Best practices validation
12
- * - Custom rule configuration
13
- *
14
- * @module visual-accessibility/axe-core-audit
15
- */
16
1
  /**
17
2
  * WCAG conformance levels
18
3
  */
@@ -1,3 +1,4 @@
1
+ import { loadVibium, isVibiumReady, VIBIUM_SETUP } from '../../../integrations/vibium/runtime.js';
1
2
  /**
2
3
  * Agentic QE v3 - Axe-Core Accessibility Audit
3
4
  *
@@ -83,8 +84,8 @@ export class AccessibilityAuditor {
83
84
  }
84
85
  // Check for vibium
85
86
  try {
86
- await import('vibium');
87
- this.toolsAvailable.vibium = true;
87
+ await loadVibium();
88
+ this.toolsAvailable.vibium = isVibiumReady();
88
89
  }
89
90
  catch {
90
91
  this.toolsAvailable.vibium = false;
@@ -138,11 +139,12 @@ export class AccessibilityAuditor {
138
139
  * Run actual axe-core audit using vibium
139
140
  */
140
141
  async runAxeCoreAudit(startTime) {
141
- const { browser } = await import('vibium');
142
- let vibe = null;
142
+ const { browser } = await loadVibium();
143
+ let instance = null;
143
144
  try {
144
145
  // Launch browser
145
- vibe = await browser.launch();
146
+ instance = await browser.start({ headless: true });
147
+ const vibe = await instance.page();
146
148
  // Navigate to URL
147
149
  await vibe.go(this.config.url);
148
150
  // Wait for selector if configured
@@ -153,12 +155,12 @@ export class AccessibilityAuditor {
153
155
  }
154
156
  // Inject axe-core library
155
157
  const axeSource = loadAxeCoreSource();
156
- await vibe.evaluate(axeSource);
158
+ await vibe.addScript(axeSource);
157
159
  // Build axe configuration
158
160
  const axeConfig = this.buildAxeConfig();
159
161
  // Run axe-core audit
160
162
  const axeScript = `
161
- return axe.run(${this.config.context ? `'${this.config.context}'` : 'document'}, ${JSON.stringify(axeConfig)});
163
+ axe.run(${this.config.context ? JSON.stringify(this.config.context) : 'document'}, ${JSON.stringify(axeConfig)})
162
164
  `;
163
165
  const results = await vibe.evaluate(axeScript);
164
166
  // Convert results
@@ -188,8 +190,8 @@ export class AccessibilityAuditor {
188
190
  };
189
191
  }
190
192
  finally {
191
- if (vibe) {
192
- await vibe.quit();
193
+ if (instance) {
194
+ await instance.stop();
193
195
  }
194
196
  }
195
197
  }
@@ -218,7 +220,7 @@ export class AccessibilityAuditor {
218
220
  createFallbackResult(startTime) {
219
221
  const errors = [];
220
222
  if (!this.toolsAvailable.vibium) {
221
- errors.push('vibium is not installed. Install with: npm install vibium');
223
+ errors.push(`Vibium runtime or browser payload unavailable; run ${VIBIUM_SETUP}`);
222
224
  }
223
225
  if (!this.toolsAvailable.axeCore) {
224
226
  errors.push('axe-core is not installed. Install with: npm install axe-core');
@@ -9,13 +9,13 @@
9
9
  * Design goals:
10
10
  * - Graceful: never fail init if Vibium install fails; report and continue.
11
11
  * - Idempotent: skip if Vibium is already on PATH.
12
- * - Opt-out friendly: respect --minimal and --no-browser-engine flags.
12
+ * - Opt-in only: called by init only with --browser-engine.
13
13
  * - No new runtime deps: shells out to `npm install -g vibium` via child_process.
14
14
  */
15
15
  import { type SpawnSyncReturns } from 'node:child_process';
16
16
  /**
17
- * Default Vibium npm spec. Major-line pin via caret (`^26.3.18`) — npm
18
- * semver will accept any 26.x.y >= 26.3.18 but reject 27.0.0+. The intent
17
+ * Default Vibium npm spec. Major-line pin via caret (`^26.8.21`) — npm
18
+ * semver will accept any 26.x.y >= 26.8.21 but reject 27.0.0+. The intent
19
19
  * is to auto-receive security patches and additive minor features while
20
20
  * blocking breaking-change major bumps, which is where Vibium's CLI
21
21
  * contract (`go`, `--headless`, `viewport`, exit codes) can change.
@@ -27,7 +27,7 @@ import { type SpawnSyncReturns } from 'node:child_process';
27
27
  * Bump procedure: update this constant (e.g. to ^27.0.0 at a major), run
28
28
  * scripts/smoke-test.sh against the new version, then land the bump.
29
29
  */
30
- export declare const DEFAULT_VIBIUM_SPEC = "vibium@^26.3.18";
30
+ export declare const DEFAULT_VIBIUM_SPEC = "vibium@^26.8.21";
31
31
  /**
32
32
  * Spawner injected into {@link installBrowserEngine} so tests can mock the
33
33
  * shell-out without monkey-patching the child_process module (ESM namespaces
@@ -66,7 +66,7 @@ export interface BrowserEngineInstallResult {
66
66
  */
67
67
  platformHint?: PlatformHint;
68
68
  }
69
- export type BrowserEngineDetectionStatus = 'ready' | 'cli-missing' | 'payload-missing';
69
+ export type BrowserEngineDetectionStatus = 'ready' | 'cli-missing' | 'payload-missing' | 'unsupported-version';
70
70
  export interface BrowserEngineDetectionResult {
71
71
  status: BrowserEngineDetectionStatus;
72
72
  version?: string;
@@ -9,7 +9,7 @@
9
9
  * Design goals:
10
10
  * - Graceful: never fail init if Vibium install fails; report and continue.
11
11
  * - Idempotent: skip if Vibium is already on PATH.
12
- * - Opt-out friendly: respect --minimal and --no-browser-engine flags.
12
+ * - Opt-in only: called by init only with --browser-engine.
13
13
  * - No new runtime deps: shells out to `npm install -g vibium` via child_process.
14
14
  */
15
15
  import { spawnSync as realSpawnSync } from 'node:child_process';
@@ -17,8 +17,8 @@ import * as os from 'node:os';
17
17
  import * as fs from 'node:fs';
18
18
  import { toErrorMessage } from '../shared/error-utils.js';
19
19
  /**
20
- * Default Vibium npm spec. Major-line pin via caret (`^26.3.18`) — npm
21
- * semver will accept any 26.x.y >= 26.3.18 but reject 27.0.0+. The intent
20
+ * Default Vibium npm spec. Major-line pin via caret (`^26.8.21`) — npm
21
+ * semver will accept any 26.x.y >= 26.8.21 but reject 27.0.0+. The intent
22
22
  * is to auto-receive security patches and additive minor features while
23
23
  * blocking breaking-change major bumps, which is where Vibium's CLI
24
24
  * contract (`go`, `--headless`, `viewport`, exit codes) can change.
@@ -30,7 +30,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
30
30
  * Bump procedure: update this constant (e.g. to ^27.0.0 at a major), run
31
31
  * scripts/smoke-test.sh against the new version, then land the bump.
32
32
  */
33
- export const DEFAULT_VIBIUM_SPEC = 'vibium@^26.3.18';
33
+ export const DEFAULT_VIBIUM_SPEC = 'vibium@^26.8.21';
34
34
  const defaultPlatformProbe = {
35
35
  platform: () => os.platform(),
36
36
  arch: () => os.arch(),
@@ -109,7 +109,7 @@ export function detectVibium(spawner = defaultSpawner, timeoutMs = 5_000) {
109
109
  const raw = stdout || stderr;
110
110
  if (!raw)
111
111
  return 'unknown';
112
- // Extract first semver-looking token if present (e.g. "vibium version 26.3.18" → "26.3.18")
112
+ // Extract first semver-looking token if present (e.g. "vibium version 26.8.21" → "26.8.21")
113
113
  const match = raw.match(/v?(\d+\.\d+\.\d+(?:[-+][\w.]+)?)/);
114
114
  return match ? match[1] : raw.split(/\s+/)[0] || 'unknown';
115
115
  }
@@ -121,6 +121,15 @@ export function detectBrowserEngine(spawner = defaultSpawner, timeoutMs = 5_000)
121
121
  const version = detectVibium(spawner, timeoutMs);
122
122
  if (!version)
123
123
  return { status: 'cli-missing' };
124
+ // The modern JS adapter is supported only by stable 26.x releases >= 26.8.21.
125
+ const semver = /^(\d+)\.(\d+)\.(\d+)(?:\+[\w.]+)?$/.exec(version);
126
+ if (!semver || Number(semver[1]) !== 26 ||
127
+ Number(semver[2]) < 8 || (Number(semver[2]) === 8 && Number(semver[3]) < 21)) {
128
+ return {
129
+ status: 'unsupported-version', version,
130
+ message: `Vibium ${version} is unsupported; install ${DEFAULT_VIBIUM_SPEC} for the browser.start() API`,
131
+ };
132
+ }
124
133
  const payload = tryRun(spawner, 'vibium', ['is-installed'], timeoutMs);
125
134
  if (payload.status === 0)
126
135
  return { status: 'ready', version };
@@ -176,7 +185,20 @@ export function installBrowserEngine(options = {}) {
176
185
  'unknown npm install failure',
177
186
  };
178
187
  }
179
- const verified = detectBrowserEngine(spawner);
188
+ let verified = detectBrowserEngine(spawner);
189
+ if (verified.status === 'payload-missing') {
190
+ // Reinstalling an already-current npm package may not rerun postinstall.
191
+ // This installer is explicitly requested, so provision the payload directly.
192
+ const payloadInstall = tryRun(spawner, 'vibium', ['install'], timeoutMs);
193
+ if (payloadInstall.status !== 0) {
194
+ return {
195
+ status: 'install-failed', packageSpec, platformHint,
196
+ message: `Browser payload installation failed: ${payloadInstall.stderr?.trim() ||
197
+ payloadInstall.stdout?.trim() || 'vibium install failed'}. Run \`vibium install\` and verify with \`vibium is-installed\`.`,
198
+ };
199
+ }
200
+ verified = detectBrowserEngine(spawner);
201
+ }
180
202
  if (verified.status !== 'ready') {
181
203
  const reason = verified.message ? `: ${verified.message}` : '';
182
204
  return {
@@ -16,6 +16,8 @@ export interface InitOrchestratorOptions {
16
16
  autoMode?: boolean;
17
17
  /** Skip pattern loading */
18
18
  skipPatterns?: boolean;
19
+ /** Explicitly install the optional browser engine and browser payload. */
20
+ browserEngine?: boolean;
19
21
  /** Minimal configuration */
20
22
  minimal?: boolean;
21
23
  /** Pre-trained patterns library */
@@ -33,6 +33,7 @@ export class ModularInitOrchestrator {
33
33
  skipPatterns: options.skipPatterns,
34
34
  skipCodeIndex: options.skipCodeIndex,
35
35
  minimal: options.minimal,
36
+ browserEngine: options.browserEngine,
36
37
  withN8n: options.withN8n,
37
38
  withOpenCode: options.withOpenCode,
38
39
  withKiro: options.withKiro,
@@ -79,19 +79,9 @@ export class AssetsPhase extends BasePhase {
79
79
  // Initialize overlay configs in agent registry for runtime use
80
80
  initializeOverlays(projectRoot);
81
81
  }
82
- // Install Vibium browser engine for the qe-browser fleet skill.
83
- // Graceful — never fails init if Vibium cannot be installed.
84
- // Skipped in --minimal mode per ADR-086 minimal-footprint guidance.
85
- //
86
- // H6 (devil's-advocate finding): the install can take up to 3 minutes
87
- // on cold caches because npm downloads Vibium AND lazily downloads a
88
- // Chrome for Testing binary. spawnSync blocks the event loop, so the
89
- // user sees no output for the entire duration. We log a clear pre-spawn
90
- // message so users don't Ctrl-C thinking init hung. Future work: move
91
- // this to a lazy/on-first-use install path so non-browser users never
92
- // pay the cost.
82
+ // Browser setup is explicitly requested; normal init never downloads a browser.
93
83
  let browserEngine;
94
- if (!options.minimal) {
84
+ if (options.browserEngine === true && !options.minimal) {
95
85
  try {
96
86
  // Pre-flight check: if vibium is already on PATH, skip the loud
97
87
  // banner so we don't scare users on the common path.
@@ -108,7 +98,7 @@ export class AssetsPhase extends BasePhase {
108
98
  else {
109
99
  // Not installed → we're about to spawn `npm install -g vibium`
110
100
  // which can take 1–3 minutes on a cold cache. Tell the user.
111
- context.services.log(' Browser engine: installing vibium via npm (this can take 1–3 minutes on first run; downloads Chrome for Testing lazily)…');
101
+ context.services.log(' Browser engine: installing vibium via npm (this can take 1–3 minutes on first run; downloads Chrome for Testing)…');
112
102
  browserEngine = installBrowserEngine({ skip: false });
113
103
  switch (browserEngine.status) {
114
104
  case 'installed':
@@ -118,10 +108,10 @@ export class AssetsPhase extends BasePhase {
118
108
  context.services.log(' Browser engine: skipped');
119
109
  break;
120
110
  case 'install-failed':
121
- context.services.warn(`Browser engine install failed (qe-browser skill will be unavailable until you run \`npm install -g vibium\`): ${browserEngine.message || 'unknown'}`);
111
+ context.services.warn(`Browser engine install failed (qe-browser skill will be unavailable until you run \`aqe init --browser-engine\`): ${browserEngine.message || 'unknown'}`);
122
112
  break;
123
113
  case 'npm-unavailable':
124
- context.services.warn('Browser engine: npm not on PATH — install Node.js + npm, then `npm install -g vibium` to enable qe-browser');
114
+ context.services.warn('Browser engine: npm not on PATH — install Node.js + npm, then `aqe init --browser-engine` to enable qe-browser');
125
115
  break;
126
116
  // 'already-installed' handled by the pre-flight branch above
127
117
  }
@@ -141,12 +131,12 @@ export class AssetsPhase extends BasePhase {
141
131
  const msg = error instanceof Error ? error.message : String(error);
142
132
  context.services.warn(`Browser engine install error: ${msg}\n` +
143
133
  ` qe-browser fleet skill will be unavailable until you run:\n` +
144
- ` npm install -g vibium\n` +
145
- ` Then re-run \`aqe init\` to verify. The rest of the AQE install will continue.`);
134
+ ` npm install -g ${DEFAULT_VIBIUM_SPEC}\n` +
135
+ ` Then re-run \`aqe init --browser-engine\` to verify. The rest of the AQE install will continue.`);
146
136
  }
147
137
  }
148
138
  else {
149
- browserEngine = { status: 'skipped', packageSpec: DEFAULT_VIBIUM_SPEC, message: 'minimal mode' };
139
+ browserEngine = { status: 'skipped', packageSpec: DEFAULT_VIBIUM_SPEC, message: options.minimal ? 'minimal mode' : 'browser setup not requested; run aqe init --browser-engine' };
150
140
  }
151
141
  // Install n8n platform (optional)
152
142
  if (options.withN8n) {
@@ -92,6 +92,8 @@ export interface InitOptions {
92
92
  */
93
93
  skipCodeIndex?: boolean;
94
94
  /** Minimal configuration (no skills, patterns, workers) */
95
+ /** Explicitly install the optional browser engine and browser payload. */
96
+ browserEngine?: boolean;
95
97
  minimal?: boolean;
96
98
  /** Automatically migrate from v2 if detected */
97
99
  /** Install n8n workflow testing platform */
@@ -15,7 +15,7 @@
15
15
  * - Automatic strategy recommendations
16
16
  * - Pattern quality improvement over time
17
17
  */
18
- import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
18
+ import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
19
19
  import { TrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig } from './trajectory-tracker.js';
20
20
  import { ExperienceReplay, type ExperienceGuidance, type ExperienceReplayConfig } from './experience-replay.js';
21
21
  import { PatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig } from './pattern-evolution.js';
@@ -182,10 +182,7 @@ export declare class EnhancedReasoningBankAdapter {
182
182
  limit?: number;
183
183
  domain?: QEDomain;
184
184
  minSimilarity?: number;
185
- }): Promise<Result<Array<{
186
- pattern: QEPattern;
187
- similarity: number;
188
- }>>>;
185
+ }): Promise<Result<RealQEPatternSearchResult[]>>;
189
186
  /**
190
187
  * Record a pattern outcome with evolution tracking
191
188
  */
@@ -41,6 +41,7 @@ export declare class VibiumClientImpl implements VibiumClient {
41
41
  private _initialized;
42
42
  private _available;
43
43
  private vibeInstance;
44
+ private browserInstance;
44
45
  /**
45
46
  * Create a new Vibium client
46
47
  *