agentic-qe 3.14.5 → 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 (494) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +150 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/adapters/ag-ui/event-types.d.ts +1 -1
  5. package/dist/audit/witness-chain-hash.d.ts +18 -0
  6. package/dist/audit/witness-chain-hash.js +37 -0
  7. package/dist/audit/witness-chain-repair.d.ts +71 -0
  8. package/dist/audit/witness-chain-repair.js +203 -0
  9. package/dist/audit/witness-chain-verifier.d.ts +152 -0
  10. package/dist/audit/witness-chain-verifier.js +293 -0
  11. package/dist/audit/witness-chain.d.ts +10 -43
  12. package/dist/audit/witness-chain.js +16 -106
  13. package/dist/audit/witness-findings.js +4 -1
  14. package/dist/cli/bundle.js +8 -8
  15. package/dist/cli/chunks/adapter-TVQKH65T.js +2 -0
  16. package/dist/cli/chunks/agent-booster-wasm-AK2W76RG.js +2 -0
  17. package/dist/cli/chunks/{agent-handler-V6CZ7Q6S.js → agent-handler-MGZCWHIY.js} +2 -2
  18. package/dist/cli/chunks/{agent-memory-branch-ZMD6ULC3.js → agent-memory-branch-JZ54MCSP.js} +2 -2
  19. package/dist/cli/chunks/aqe-learning-engine-ULGTVVWE.js +2 -0
  20. package/dist/cli/chunks/{arena-QLSBESC7.js → arena-CUVH3V7H.js} +2 -2
  21. package/dist/cli/chunks/{arena-4UPAEHFT.js → arena-YSWTKBCL.js} +4 -4
  22. package/dist/cli/chunks/audit-LVU76QGA.js +4 -0
  23. package/dist/cli/chunks/base-W42BURDL.js +2 -0
  24. package/dist/cli/chunks/{better-sqlite3-4DSBPDRH.js → better-sqlite3-DB3LOJQU.js} +2 -2
  25. package/dist/cli/chunks/{brain-handler-GBY4EZ4P.js → brain-handler-SD63KOQ6.js} +3 -3
  26. package/dist/cli/chunks/{branch-enumerator-XYBVXCNO.js → branch-enumerator-4MNOPUC7.js} +2 -2
  27. package/dist/cli/chunks/{browser-32F6MREU.js → browser-OLPNTWQE.js} +2 -2
  28. package/dist/cli/chunks/browser-workflow-HKGHFFFT.js +2 -0
  29. package/dist/cli/chunks/{chunk-WLXK2KNU.js → chunk-23CX7JNL.js} +2 -2
  30. package/dist/cli/chunks/{chunk-O3JTQ7N4.js → chunk-25P6JA6V.js} +1 -1
  31. package/dist/cli/chunks/{chunk-DO6EI5KB.js → chunk-2G63VIJE.js} +1 -1
  32. package/dist/cli/chunks/{chunk-G3L5L6YQ.js → chunk-2IMSJ7IO.js} +1 -1
  33. package/dist/cli/chunks/{chunk-RD6TEZ64.js → chunk-36VKMAMN.js} +2 -2
  34. package/dist/cli/chunks/{chunk-KIP6WZGV.js → chunk-3M7J4U74.js} +3 -3
  35. package/dist/cli/chunks/chunk-3QJU4Q4R.js +5 -0
  36. package/dist/cli/chunks/{chunk-2JGEZHWY.js → chunk-4EKV7PHB.js} +2 -2
  37. package/dist/cli/chunks/chunk-4INST4ZL.js +4 -0
  38. package/dist/cli/chunks/{chunk-DPBRWP4J.js → chunk-53BXTTRO.js} +3 -3
  39. package/dist/cli/chunks/chunk-5D7ZFWDS.js +2 -0
  40. package/dist/cli/chunks/{chunk-XLAUGSW7.js → chunk-5FSLMYAC.js} +2 -2
  41. package/dist/cli/chunks/chunk-5GFKTJ65.js +4 -0
  42. package/dist/cli/chunks/{chunk-WOIGKU2N.js → chunk-5U6N4V5M.js} +11 -11
  43. package/dist/cli/chunks/{chunk-PSPKSUF6.js → chunk-6EGS77BB.js} +1 -1
  44. package/dist/cli/chunks/{chunk-QIRL6B3C.js → chunk-6PJPQGF4.js} +2 -2
  45. package/dist/cli/chunks/{chunk-I6X3EGJI.js → chunk-6RD44SCE.js} +1 -1
  46. package/dist/cli/chunks/{chunk-IGBEJ4UJ.js → chunk-74IOEOMH.js} +2 -2
  47. package/dist/cli/chunks/{chunk-E3W6XQ57.js → chunk-77QZHIVX.js} +2 -2
  48. package/dist/cli/chunks/{chunk-R74ZKREV.js → chunk-7EZ2Z2CK.js} +1 -1
  49. package/dist/cli/chunks/{chunk-UTBYJ4RF.js → chunk-7MIOK72I.js} +18 -35
  50. package/dist/cli/chunks/{chunk-URVHZPWY.js → chunk-7QYOTUOX.js} +2 -2
  51. package/dist/cli/chunks/{chunk-K27SU3RE.js → chunk-A2VUCUTT.js} +2 -2
  52. package/dist/cli/chunks/{chunk-2KJQ2UQE.js → chunk-A3DK3XNZ.js} +1 -1
  53. package/dist/cli/chunks/{chunk-5D36YHS3.js → chunk-A5MA7A23.js} +4 -4
  54. package/dist/cli/chunks/{chunk-WJHWH5D2.js → chunk-AEUEMVJK.js} +2 -2
  55. package/dist/cli/chunks/{chunk-6CR4VQBQ.js → chunk-AJUBT4NP.js} +2 -2
  56. package/dist/cli/chunks/chunk-B2YGVSOP.js +27 -0
  57. package/dist/cli/chunks/{chunk-D6OUCB2H.js → chunk-B4I43GE2.js} +2 -2
  58. package/dist/cli/chunks/{chunk-WK7B4B6Y.js → chunk-BD7FEUN3.js} +2 -2
  59. package/dist/cli/chunks/{chunk-OEIQTWQP.js → chunk-BE4KALTE.js} +1 -1
  60. package/dist/cli/chunks/{chunk-JROVR6YS.js → chunk-BEFTQVEW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-HBCGYMQU.js → chunk-BLG7SH4A.js} +1 -1
  62. package/dist/cli/chunks/{chunk-2OMLTYQK.js → chunk-C3FXFU2T.js} +1 -1
  63. package/dist/cli/chunks/{chunk-6A44AOGN.js → chunk-CBONQM5D.js} +2 -2
  64. package/dist/cli/chunks/{chunk-73EI4C2E.js → chunk-CQNMGK6Y.js} +2 -2
  65. package/dist/cli/chunks/{chunk-IIAR5S7Q.js → chunk-CVOQ6ESD.js} +2 -2
  66. package/dist/cli/chunks/{chunk-6TU7FEMD.js → chunk-DOBKEXMJ.js} +1 -1
  67. package/dist/cli/chunks/{chunk-BHFR2EXL.js → chunk-DYTQHRUS.js} +1 -1
  68. package/dist/cli/chunks/{chunk-E4AZXCT5.js → chunk-EADSQN5T.js} +1 -1
  69. package/dist/cli/chunks/{chunk-CYE2TJFV.js → chunk-EGOIIUBD.js} +2 -2
  70. package/dist/cli/chunks/{chunk-DKUBQQFG.js → chunk-EIGRV3J6.js} +2 -2
  71. package/dist/cli/chunks/{chunk-RP2ZKPYV.js → chunk-EJ6MMYLK.js} +1 -1
  72. package/dist/cli/chunks/{chunk-HSVKZ5KI.js → chunk-ENK44A6Q.js} +2 -2
  73. package/dist/cli/chunks/{chunk-67YV75XP.js → chunk-EYXE2XKP.js} +2 -2
  74. package/dist/cli/chunks/{chunk-HYEJJJY3.js → chunk-F2OPFVQH.js} +1 -1
  75. package/dist/cli/chunks/{chunk-XUR2M2WB.js → chunk-FBZC4IGB.js} +2 -2
  76. package/dist/cli/chunks/{chunk-BXVAVFGU.js → chunk-FSSR6WBE.js} +2 -2
  77. package/dist/cli/chunks/{chunk-W2XCZU62.js → chunk-FW4DJ4FJ.js} +1 -1
  78. package/dist/cli/chunks/{chunk-KKHYJF5U.js → chunk-FYPX5WBJ.js} +1 -1
  79. package/dist/cli/chunks/{chunk-K7NJHFLZ.js → chunk-G367W7XR.js} +3 -3
  80. package/dist/cli/chunks/{chunk-IUDWEOLX.js → chunk-GLGKQX2V.js} +2 -2
  81. package/dist/cli/chunks/{chunk-JVQBWYHW.js → chunk-GV4DYPJP.js} +2 -2
  82. package/dist/cli/chunks/{chunk-GTKCGPJZ.js → chunk-GVVFTFMB.js} +2 -2
  83. package/dist/cli/chunks/{chunk-AFEDJ3RU.js → chunk-H5RQPO3X.js} +2 -2
  84. package/dist/cli/chunks/{chunk-4FWTLJEP.js → chunk-HPWWYT67.js} +2 -2
  85. package/dist/cli/chunks/{chunk-G3W6BMVJ.js → chunk-HXXHMLJ5.js} +1 -1
  86. package/dist/cli/chunks/{chunk-NU7UTXMP.js → chunk-HYFQUWNB.js} +2 -2
  87. package/dist/cli/chunks/chunk-HYOPJHHW.js +2 -0
  88. package/dist/cli/chunks/{chunk-6LKDHEBY.js → chunk-HZY42OVU.js} +2 -2
  89. package/dist/cli/chunks/{chunk-C3HQL6S4.js → chunk-IAENZ2DR.js} +2 -2
  90. package/dist/cli/chunks/{chunk-M23ZOZVY.js → chunk-IEJ7ZV3M.js} +1 -1
  91. package/dist/cli/chunks/{chunk-RIZVC4XY.js → chunk-IWFFO6VT.js} +2 -2
  92. package/dist/cli/chunks/chunk-J7AQZLIH.js +21 -0
  93. package/dist/cli/chunks/{chunk-3KDL6QDK.js → chunk-JHJUSSAU.js} +2 -2
  94. package/dist/cli/chunks/{chunk-DLF5BOJD.js → chunk-JOZ47MV6.js} +1 -1
  95. package/dist/cli/chunks/{chunk-ELBZON4V.js → chunk-JZT7BU44.js} +2 -2
  96. package/dist/cli/chunks/{chunk-3DDXWYMO.js → chunk-KD2BLA5Y.js} +1 -1
  97. package/dist/cli/chunks/{chunk-VD5IO5EO.js → chunk-KUHLTVWC.js} +1 -1
  98. package/dist/cli/chunks/{chunk-YDFL445W.js → chunk-LU2EDWQK.js} +2 -2
  99. package/dist/cli/chunks/chunk-LXZMP3VX.js +736 -0
  100. package/dist/cli/chunks/{chunk-3YUB5HER.js → chunk-LY7MFGBD.js} +196 -187
  101. package/dist/cli/chunks/chunk-MM56VPNE.js +180 -0
  102. package/dist/cli/chunks/{chunk-37TUN44F.js → chunk-MNQN7UZX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-7DETTOPZ.js → chunk-MQZ53OR3.js} +2 -2
  104. package/dist/cli/chunks/{chunk-BYG36QC5.js → chunk-MT7UNBZ7.js} +2 -2
  105. package/dist/cli/chunks/{chunk-JES6R5KP.js → chunk-MZB2UV2O.js} +1 -1
  106. package/dist/cli/chunks/{chunk-QZMUXJHZ.js → chunk-MZMG6CUJ.js} +2 -2
  107. package/dist/cli/chunks/chunk-N5XOXPHZ.js +4 -0
  108. package/dist/cli/chunks/{chunk-RD2VGOUH.js → chunk-NBLDBVAW.js} +1 -1
  109. package/dist/cli/chunks/{chunk-HVU64GP5.js → chunk-ND4QTZOL.js} +2 -2
  110. package/dist/cli/chunks/{chunk-SQF6HRXR.js → chunk-NHUGHAY6.js} +1 -1
  111. package/dist/cli/chunks/{chunk-TUSSPKRM.js → chunk-NOHWJOBS.js} +1 -1
  112. package/dist/cli/chunks/{chunk-NVYBM3R4.js → chunk-O5V7RHVG.js} +2 -2
  113. package/dist/cli/chunks/{chunk-6VAZAHQG.js → chunk-O6MO5KMR.js} +2 -2
  114. package/dist/cli/chunks/{chunk-IUHB5GVS.js → chunk-OAZX6WFU.js} +2 -2
  115. package/dist/cli/chunks/{chunk-LSUILON7.js → chunk-OEPNNLR4.js} +1 -1
  116. package/dist/cli/chunks/{chunk-IJHCIXJC.js → chunk-OIDWDGLG.js} +2 -2
  117. package/dist/cli/chunks/{chunk-CPC7FN52.js → chunk-ON2UTP2U.js} +2 -2
  118. package/dist/cli/chunks/{chunk-UJWAWIRV.js → chunk-ONR2NXXD.js} +7 -7
  119. package/dist/cli/chunks/{chunk-7VFY7TUR.js → chunk-OXHF3L2T.js} +2 -2
  120. package/dist/cli/chunks/{chunk-QYOGD2VW.js → chunk-OZGIOKEA.js} +1 -1
  121. package/dist/cli/chunks/{chunk-WJTSY5MC.js → chunk-P2UPYSDJ.js} +1 -1
  122. package/dist/cli/chunks/{chunk-52L77RMG.js → chunk-P7XSPP5D.js} +2 -2
  123. package/dist/cli/chunks/{chunk-M5AEL7IS.js → chunk-PCJQCEBA.js} +2 -2
  124. package/dist/cli/chunks/chunk-PELENDDQ.js +2 -0
  125. package/dist/cli/chunks/{chunk-C3Z4VVHP.js → chunk-PYKY22GC.js} +5 -5
  126. package/dist/cli/chunks/{chunk-AF4XKLXO.js → chunk-Q3NSU24F.js} +2 -2
  127. package/dist/cli/chunks/chunk-Q6NTEICT.js +2 -0
  128. package/dist/cli/chunks/chunk-QFETNCNN.js +12 -0
  129. package/dist/cli/chunks/{chunk-KYA5LARK.js → chunk-QGOWNVVG.js} +1 -1
  130. package/dist/cli/chunks/{chunk-Y5L3ES4L.js → chunk-QPLSYEWJ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-F34OAHOM.js → chunk-QQFQDEUE.js} +2 -2
  132. package/dist/cli/chunks/{chunk-EFV4ADMO.js → chunk-QUORH2MG.js} +55 -79
  133. package/dist/cli/chunks/{chunk-QWUXCG2L.js → chunk-QVH5Y7AP.js} +1 -1
  134. package/dist/cli/chunks/{chunk-I2NENQ44.js → chunk-RC2A4JZ5.js} +2 -2
  135. package/dist/cli/chunks/{chunk-XZSMZHM2.js → chunk-RDGPXENG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-N7H767TP.js → chunk-RKI3IQKQ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-LULD4JV2.js → chunk-RKUAWQOF.js} +2 -2
  138. package/dist/cli/chunks/chunk-RLW25X66.js +2 -0
  139. package/dist/cli/chunks/{chunk-UKGXWW64.js → chunk-ROVZSZCS.js} +3 -3
  140. package/dist/cli/chunks/{chunk-EOR2UT72.js → chunk-RT6O2HW2.js} +2 -2
  141. package/dist/cli/chunks/{chunk-75QJ5HWE.js → chunk-SM2YJ2AL.js} +2 -2
  142. package/dist/cli/chunks/{chunk-KO4FNAUR.js → chunk-SRPLERER.js} +3 -3
  143. package/dist/cli/chunks/{chunk-NRE4NAVA.js → chunk-T77GZF4B.js} +1 -1
  144. package/dist/cli/chunks/{chunk-R6IU3EWP.js → chunk-TFK2AYIN.js} +2 -2
  145. package/dist/cli/chunks/chunk-TW3SR4TS.js +2 -0
  146. package/dist/cli/chunks/{chunk-IYTLXUBO.js → chunk-TXSPBLBT.js} +2 -2
  147. package/dist/cli/chunks/chunk-UA7TDVL7.js +12 -0
  148. package/dist/cli/chunks/{chunk-WX6RRIGW.js → chunk-UBJG3IHT.js} +2 -2
  149. package/dist/cli/chunks/{chunk-NQI7FWCS.js → chunk-UFSVUBTR.js} +2 -2
  150. package/dist/cli/chunks/{chunk-FUNGTIF2.js → chunk-UOI6ULCH.js} +2 -2
  151. package/dist/cli/chunks/{chunk-HVXJC3OC.js → chunk-UYUJT6QO.js} +2 -2
  152. package/dist/cli/chunks/{chunk-KEY43ANX.js → chunk-V5AK56DA.js} +2 -2
  153. package/dist/cli/chunks/{chunk-XFPPERA2.js → chunk-V6RE4YRQ.js} +2 -2
  154. package/dist/cli/chunks/{chunk-DDCIYOGT.js → chunk-VW6FRMLW.js} +2 -2
  155. package/dist/cli/chunks/chunk-VXKWNRGA.js +2 -0
  156. package/dist/cli/chunks/{chunk-CVMNJSCB.js → chunk-VYDVI6FZ.js} +2 -2
  157. package/dist/cli/chunks/{chunk-7JZJJA7U.js → chunk-WF6UISKW.js} +3 -3
  158. package/dist/cli/chunks/{chunk-SQKW3B6B.js → chunk-WIH522AP.js} +1 -1
  159. package/dist/cli/chunks/{chunk-KLTP5IDB.js → chunk-WOV6XI3A.js} +1 -1
  160. package/dist/cli/chunks/{chunk-VTOVWHEM.js → chunk-X7ADKL7T.js} +2 -2
  161. package/dist/cli/chunks/{chunk-SX4JLSLV.js → chunk-XBYQ2BS4.js} +2 -2
  162. package/dist/cli/chunks/{chunk-E4EYPYR3.js → chunk-XL5KIYE3.js} +2 -2
  163. package/dist/cli/chunks/{chunk-3VIXOHMS.js → chunk-XWYELBZS.js} +1 -1
  164. package/dist/cli/chunks/{chunk-YQGPQBCX.js → chunk-XYLQZWF6.js} +2 -2
  165. package/dist/cli/chunks/{chunk-XEZIIQYJ.js → chunk-Y6AKKQIQ.js} +1 -1
  166. package/dist/cli/chunks/{chunk-BJPL6THQ.js → chunk-YMW57PEL.js} +1 -1
  167. package/dist/cli/chunks/{chunk-JSZ663MU.js → chunk-YO4ESCB4.js} +1 -1
  168. package/dist/cli/chunks/{chunk-AMMQOV35.js → chunk-YRHTQZU4.js} +2 -2
  169. package/dist/cli/chunks/chunk-Z4Q5PCRZ.js +65 -0
  170. package/dist/cli/chunks/{chunk-RKOUXVZZ.js → chunk-ZELWDJXT.js} +2 -2
  171. package/dist/cli/chunks/{chunk-QRCIZFNK.js → chunk-ZQZD55MN.js} +2 -2
  172. package/dist/cli/chunks/{chunk-UMGFMKDW.js → chunk-ZS4XVJGV.js} +2 -2
  173. package/dist/cli/chunks/{chunk-6ITZZIQX.js → chunk-ZUB5YOCM.js} +2 -2
  174. package/dist/cli/chunks/chunk-ZUOVNFXK.js +2 -0
  175. package/dist/cli/chunks/{chunk-RGGK6VZ7.js → chunk-ZWEKAEEV.js} +1 -1
  176. package/dist/cli/chunks/{ci-RACDAJMR.js → ci-J3TDK5RA.js} +8 -8
  177. package/dist/cli/chunks/{ci-output-EHRSZBKG.js → ci-output-RLS32FUY.js} +2 -2
  178. package/dist/cli/chunks/{circuit-breaker-GBV7M5XG.js → circuit-breaker-MRCC7WCM.js} +2 -2
  179. package/dist/cli/chunks/claude-flow-setup-LIZCEKDF.js +2 -0
  180. package/dist/cli/chunks/client-3BD2DI4N.js +2 -0
  181. package/dist/cli/chunks/{cline-installer-W4NMXJSG.js → cline-installer-T7H6R2RC.js} +2 -2
  182. package/dist/cli/chunks/{code-JWXJMYXB.js → code-XMBLI7OF.js} +3 -3
  183. package/dist/cli/chunks/{code-index-extractor-RVI2IFTM.js → code-index-extractor-QS7BYLEX.js} +2 -2
  184. package/dist/cli/chunks/{codex-installer-3BORJINH.js → codex-installer-6PGT5FM6.js} +6 -6
  185. package/dist/cli/chunks/{completions-A55NCTAO.js → completions-2A3WRXY2.js} +2 -2
  186. package/dist/cli/chunks/{complexity-analyzer-JCXHGGLY.js → complexity-analyzer-23HOOGJ7.js} +2 -2
  187. package/dist/cli/chunks/{continuedev-installer-PUVFMGYW.js → continuedev-installer-4FSF7B3N.js} +2 -2
  188. package/dist/cli/chunks/{copilot-installer-4DCMYWHB.js → copilot-installer-A5GRQQUU.js} +2 -2
  189. package/dist/cli/chunks/core-handlers-C3H2ZCS2.js +2 -0
  190. package/dist/cli/chunks/{cost-tracker-5TV2GGKY.js → cost-tracker-Z4STQ5VB.js} +2 -2
  191. package/dist/cli/chunks/{coverage-NNWM7TX3.js → coverage-NUPP6KZZ.js} +3 -3
  192. package/dist/cli/chunks/cross-domain-router-JCQ7SWDP.js +2 -0
  193. package/dist/cli/chunks/{cursor-installer-4NCHGJGK.js → cursor-installer-FVJ7ROPJ.js} +2 -2
  194. package/dist/cli/chunks/{daemon-QIKCXKWO.js → daemon-7ZZA2MMN.js} +4 -4
  195. package/dist/cli/chunks/{daemon-T4JO4IXP.js → daemon-D662EX5N.js} +3 -3
  196. package/dist/cli/chunks/{dag-attention-scheduler-RPAAIDAD.js → dag-attention-scheduler-IB4TQ2KA.js} +2 -2
  197. package/dist/cli/chunks/{detect-SBEEVDSN.js → detect-LGLBZN4I.js} +2 -2
  198. package/dist/cli/chunks/{dist-node-ZHI6NCSU.js → dist-node-Z3OL42YE.js} +2 -2
  199. package/dist/cli/chunks/{domain-handler-LBC3GJ7Z.js → domain-handler-L3CLNL7U.js} +2 -2
  200. package/dist/cli/chunks/{domain-plugins-H6IZ5USZ.js → domain-plugins-GQ3V5X6L.js} +2 -2
  201. package/dist/cli/chunks/domain-transfer-MFCI76IY.js +2 -0
  202. package/dist/cli/chunks/dream-FTP33IJB.js +2 -0
  203. package/dist/cli/chunks/{embed-and-insert-pattern-AHTR7CRU.js → embed-and-insert-pattern-UGD6USYH.js} +2 -2
  204. package/dist/cli/chunks/{eval-DZU2KISM.js → eval-3B7UIYGY.js} +2 -2
  205. package/dist/cli/chunks/{experience-capture-middleware-5IQCWKSL.js → experience-capture-middleware-3RQ4NYY3.js} +3 -3
  206. package/dist/cli/chunks/{fast-paths-2KLDUWCY.js → fast-paths-QOSAEPYD.js} +2 -2
  207. package/dist/cli/chunks/{feature-flags-7AC3XDZA.js → feature-flags-3S5TH6P4.js} +2 -2
  208. package/dist/cli/chunks/{feature-flags-N6UAEZY4.js → feature-flags-TLF4NKOH.js} +2 -2
  209. package/dist/cli/chunks/{file-discovery-5SDIW4V2.js → file-discovery-AEVMJRNB.js} +2 -2
  210. package/dist/cli/chunks/{fleet-ZIQCAZ2Y.js → fleet-E6WTXWFL.js} +3 -3
  211. package/dist/cli/chunks/{gnn-wrapper-DUMBZJEV.js → gnn-wrapper-MCKH3AUU.js} +2 -2
  212. package/dist/cli/chunks/{heartbeat-handler-6HVM6ZMR.js → heartbeat-handler-U7XENHRR.js} +4 -4
  213. package/dist/cli/chunks/heartbeat-scheduler-HXBJVJL2.js +2 -0
  214. package/dist/cli/chunks/hnsw-adapter-TU6WG2ME.js +2 -0
  215. package/dist/cli/chunks/hnsw-index-MS5KODD7.js +2 -0
  216. package/dist/cli/chunks/{hnsw-legacy-bridge-5DRL5FLX.js → hnsw-legacy-bridge-5GW4SAEI.js} +2 -2
  217. package/dist/cli/chunks/{hnswlib-node-GW67GTCL.js → hnswlib-node-7BLZBK5T.js} +2 -2
  218. package/dist/cli/chunks/{hooks-QHH6FVO4.js → hooks-F3O2SB6H.js} +10 -10
  219. package/dist/cli/chunks/hybrid-backend-HT45LBHC.js +2 -0
  220. package/dist/cli/chunks/{hypergraph-engine-7XDCCVG2.js → hypergraph-engine-PV4EKXHB.js} +2 -2
  221. package/dist/cli/chunks/{hypergraph-handler-QHF7NOU5.js → hypergraph-handler-VOWO5ZTW.js} +3 -3
  222. package/dist/cli/chunks/impact-analyzer-AP4AGTG5.js +2 -0
  223. package/dist/cli/chunks/{init-handler-5UIVOM7K.js → init-handler-ENJ5ONJX.js} +16 -14
  224. package/dist/cli/chunks/init-wizard-I5DFZUQL.js +2 -0
  225. package/dist/cli/chunks/kernel-MISPSPPA.js +2 -0
  226. package/dist/cli/chunks/{kilocode-installer-TGGV6K5Q.js → kilocode-installer-HNNJOOPE.js} +2 -2
  227. package/dist/cli/chunks/{kiro-installer-4XYBHZWW.js → kiro-installer-UZBIQ3IC.js} +2 -2
  228. package/dist/cli/chunks/knowledge-graph-L26JESGE.js +2 -0
  229. package/dist/cli/chunks/{learning-STE5W6BS.js → learning-YMLCVFUT.js} +3 -3
  230. package/dist/cli/chunks/{llm-router-NKF7J3RI.js → llm-router-YWTARCCT.js} +4 -4
  231. package/dist/cli/chunks/llm-router-service-MWGC43ZA.js +2 -0
  232. package/dist/cli/chunks/{load-B2T77UJQ.js → load-DKE3F3IP.js} +2 -2
  233. package/dist/cli/chunks/load-test-H5ISNNM5.js +2 -0
  234. package/dist/cli/chunks/mcp-5PSGIUCW.js +2 -0
  235. package/dist/cli/chunks/{memory-WRFZKG56.js → memory-3L3O6JMM.js} +5 -5
  236. package/dist/cli/chunks/memory-backend-HWDNOBKW.js +2 -0
  237. package/dist/cli/chunks/memory-handlers-ZFDVQZM5.js +2 -0
  238. package/dist/cli/chunks/multi-model-executor-AEEO7IA4.js +14 -0
  239. package/dist/cli/chunks/{opencode-installer-J36EMQU7.js → opencode-installer-ABBO355U.js} +2 -2
  240. package/dist/cli/chunks/orchestrator-E36Q7MKE.js +393 -0
  241. package/dist/cli/chunks/pattern-null-store-GQP6ICWK.js +2 -0
  242. package/dist/cli/chunks/{pattern-usage-recorder-BVMTWI3E.js → pattern-usage-recorder-H4XKSID4.js} +2 -2
  243. package/dist/cli/chunks/{pipeline-OWAHDUAQ.js → pipeline-BGFEHXIN.js} +2 -2
  244. package/dist/cli/chunks/{platform-ANGBFWBV.js → platform-GK7ZVDJI.js} +2 -2
  245. package/dist/cli/chunks/{plugin-OO7ON2YW.js → plugin-CAH2CKI6.js} +2 -2
  246. package/dist/cli/chunks/{prime-radiant-advanced-wasm-HFG3BXWU.js → prime-radiant-advanced-wasm-M5EYRONA.js} +2 -2
  247. package/dist/cli/chunks/{project-root-LNOYVTYY.js → project-root-BSNZC243.js} +2 -2
  248. package/dist/cli/chunks/protocol-executor-AD5A4DAI.js +2 -0
  249. package/dist/cli/chunks/{protocol-handler-CE3Q6LY4.js → protocol-handler-JDSSC2SF.js} +2 -2
  250. package/dist/cli/chunks/{prove-7XPN53PY.js → prove-ANPTOZJE.js} +2 -2
  251. package/dist/cli/chunks/qe-reasoning-bank-W3Z2PKTR.js +2 -0
  252. package/dist/cli/chunks/{quality-TT23JRFX.js → quality-SXWGYRQR.js} +2 -2
  253. package/dist/cli/chunks/{quality-gate-PPPRP255.js → quality-gate-GYNCA4ZY.js} +3 -3
  254. package/dist/cli/chunks/queen-coordinator-HQRHLIJX.js +2 -0
  255. package/dist/cli/chunks/{real-embeddings-EYNZIFJE.js → real-embeddings-WSRYAOZM.js} +2 -2
  256. package/dist/cli/chunks/{ref-validation-QQR64ZXD.js → ref-validation-AZ3LRWEK.js} +2 -2
  257. package/dist/cli/chunks/{roocode-installer-UIGS7ZJD.js → roocode-installer-2QKGFIEU.js} +2 -2
  258. package/dist/cli/chunks/router-MTP5LH4H.js +2 -0
  259. package/dist/cli/chunks/routing-feedback-GWETVB4L.js +2 -0
  260. package/dist/cli/chunks/{routing-handler-6AENUIRG.js → routing-handler-UYDC5MMD.js} +2 -2
  261. package/dist/cli/chunks/{ruvector-commands-5AWMEV34.js → ruvector-commands-QXADPVEY.js} +2 -2
  262. package/dist/cli/chunks/rvf-dual-writer-4UE5S7WP.js +2 -0
  263. package/dist/cli/chunks/rvf-migration-adapter-PHH3HF4Q.js +2 -0
  264. package/dist/cli/chunks/{rvf-migration-coordinator-NWRJ7C22.js → rvf-migration-coordinator-GD4NBFKT.js} +2 -2
  265. package/dist/cli/chunks/rvf-native-adapter-KTLZBUWV.js +2 -0
  266. package/dist/cli/chunks/{rvf-store-integrity-ISKRP563.js → rvf-store-integrity-7SXG66IL.js} +2 -2
  267. package/dist/cli/chunks/safe-db-FWWGAPVE.js +2 -0
  268. package/dist/cli/chunks/schedule-TPA4V4D5.js +2 -0
  269. package/dist/cli/chunks/scheduler-5ZTEPNDD.js +2 -0
  270. package/dist/cli/chunks/{security-325A7FMB.js → security-YKB622PK.js} +3 -3
  271. package/dist/cli/chunks/shared-rvf-adapter-KMLAV7JK.js +2 -0
  272. package/dist/cli/chunks/{shared-rvf-dual-writer-THFDYS2Z.js → shared-rvf-dual-writer-OYY27DFV.js} +2 -2
  273. package/dist/cli/chunks/sqlite-persistence-HPTT624C.js +2 -0
  274. package/dist/cli/chunks/{standalone-memory-UD4MJ6GZ.js → standalone-memory-2DOABVLC.js} +2 -2
  275. package/dist/cli/chunks/{status-handler-CPFTN4XL.js → status-handler-EXRKETV7.js} +2 -2
  276. package/dist/cli/chunks/{structural-health-2MG2IVBL.js → structural-health-2SKK6DU6.js} +2 -2
  277. package/dist/cli/chunks/sync-DQ2YUNI6.js +2 -0
  278. package/dist/cli/chunks/{sync-EE4VVKOW.js → sync-UW7SX7GO.js} +2 -2
  279. package/dist/cli/chunks/{task-handler-7H5OYJG4.js → task-handler-LYQ6WYUY.js} +2 -2
  280. package/dist/cli/chunks/task-handlers-DIJO232S.js +9 -0
  281. package/dist/cli/chunks/test-WRHZMUCW.js +33 -0
  282. package/dist/cli/chunks/{test-scheduling-CHQ4ZLLJ.js → test-scheduling-HI23RXFK.js} +3 -3
  283. package/dist/cli/chunks/token-bootstrap-23SA6SWZ.js +2 -0
  284. package/dist/cli/chunks/{token-usage-EBXUJNRB.js → token-usage-M7RRDPXO.js} +2 -2
  285. package/dist/cli/chunks/{transformers-ZEKS2OJZ.js → transformers-4TC35KKS.js} +2 -2
  286. package/dist/cli/chunks/tree-sitter-wasm-parser-F4LTKAWD.js +2 -0
  287. package/dist/cli/chunks/{types-KYAA5VLV.js → types-NBXV6LXQ.js} +2 -2
  288. package/dist/cli/chunks/unified-memory-OVFEPRPS.js +2 -0
  289. package/dist/cli/chunks/unified-memory-hnsw-KKRSCZHR.js +2 -0
  290. package/dist/cli/chunks/unified-persistence-7GLR4RI3.js +2 -0
  291. package/dist/cli/chunks/{upgrade-UJBJ5AYM.js → upgrade-4BGOU5RM.js} +2 -2
  292. package/dist/cli/chunks/{validate-RUV6YMWS.js → validate-EDWAR63H.js} +2 -2
  293. package/dist/cli/chunks/{validate-swarm-IVEVMGVM.js → validate-swarm-VI72CPR7.js} +2 -2
  294. package/dist/cli/chunks/visual-security-2FUM5GLI.js +2 -0
  295. package/dist/cli/chunks/{web-tree-sitter-AVWA6HKE.js → web-tree-sitter-Y5XBRQXF.js} +2 -2
  296. package/dist/cli/chunks/{windsurf-installer-DAH7HI2W.js → windsurf-installer-VEX23WAF.js} +2 -2
  297. package/dist/cli/chunks/witness-chain-3YNL6YGY.js +2 -0
  298. package/dist/cli/chunks/witness-chain-MH6GA5L6.js +2 -0
  299. package/dist/cli/chunks/witness-chain-repair-MJZGZRWT.js +2 -0
  300. package/dist/cli/chunks/witness-chain-verifier-TTJYXTBE.js +2 -0
  301. package/dist/cli/chunks/{witness-key-manager-JSTBMG43.js → witness-key-manager-EM6YXYOY.js} +2 -2
  302. package/dist/cli/chunks/{workflow-TWOIA6LZ.js → workflow-2RBDOM7V.js} +4 -4
  303. package/dist/cli/chunks/workflow-orchestrator-H6G65YKU.js +2 -0
  304. package/dist/cli/chunks/wrappers-5OTAVVOV.js +2 -0
  305. package/dist/cli/commands/audit.d.ts +20 -2
  306. package/dist/cli/commands/audit.js +158 -16
  307. package/dist/cli/commands/ci.js +1 -1
  308. package/dist/cli/commands/claude-flow-setup.js +5 -4
  309. package/dist/cli/commands/test.js +18 -3
  310. package/dist/cli/handlers/init-handler.d.ts +2 -0
  311. package/dist/cli/handlers/init-handler.js +8 -2
  312. package/dist/cli/index.js +10 -1
  313. package/dist/coordination/handlers/test-execution-handlers.js +13 -8
  314. package/dist/coordination/index.d.ts +1 -1
  315. package/dist/coordination/queen-event-handlers.js +9 -6
  316. package/dist/coordination/result-saver.js +1 -1
  317. package/dist/coordination/services/index.d.ts +1 -1
  318. package/dist/coordination/services/task-audit-logger.d.ts +38 -13
  319. package/dist/coordination/services/task-audit-logger.js +33 -5
  320. package/dist/coordination/task-executor.d.ts +5 -0
  321. package/dist/coordination/task-executor.js +10 -5
  322. package/dist/domains/test-generation/coordinator.js +6 -5
  323. package/dist/domains/test-generation/interfaces.d.ts +11 -1
  324. package/dist/domains/test-generation/services/behavior-example-validation.d.ts +36 -0
  325. package/dist/domains/test-generation/services/behavior-example-validation.js +89 -0
  326. package/dist/domains/test-generation/services/behavior-examples.d.ts +8 -0
  327. package/dist/domains/test-generation/services/behavior-examples.js +65 -0
  328. package/dist/domains/test-generation/services/test-generator.d.ts +1 -1
  329. package/dist/domains/test-generation/services/test-generator.js +59 -30
  330. package/dist/domains/visual-accessibility/services/axe-core-audit.d.ts +0 -15
  331. package/dist/domains/visual-accessibility/services/axe-core-audit.js +12 -10
  332. package/dist/init/agents-installer.d.ts +4 -0
  333. package/dist/init/agents-installer.js +24 -11
  334. package/dist/init/browser-engine-installer.d.ts +5 -5
  335. package/dist/init/browser-engine-installer.js +28 -6
  336. package/dist/init/codex-installer.js +4 -2
  337. package/dist/init/idempotent-write.d.ts +53 -0
  338. package/dist/init/idempotent-write.js +160 -0
  339. package/dist/init/init-wizard.d.ts +2 -0
  340. package/dist/init/orchestrator.js +1 -0
  341. package/dist/init/phases/05-learning.js +3 -1
  342. package/dist/init/phases/07-hooks.js +32 -16
  343. package/dist/init/phases/08-mcp.js +4 -2
  344. package/dist/init/phases/09-assets.js +8 -18
  345. package/dist/init/phases/10-workers.js +7 -5
  346. package/dist/init/phases/12-verification.js +7 -2
  347. package/dist/init/phases/phase-interface.d.ts +2 -0
  348. package/dist/init/project-analyzer.d.ts +9 -0
  349. package/dist/init/project-analyzer.js +20 -1
  350. package/dist/init/self-configurator.d.ts +5 -3
  351. package/dist/init/self-configurator.js +18 -29
  352. package/dist/init/skills-installer.js +4 -2
  353. package/dist/init/types.d.ts +6 -0
  354. package/dist/init/types.js +20 -24
  355. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +2 -5
  356. package/dist/integrations/coherence/coherence-service.js +84 -24
  357. package/dist/integrations/coherence/vote-tally.d.ts +38 -0
  358. package/dist/integrations/coherence/vote-tally.js +39 -0
  359. package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +23 -0
  360. package/dist/integrations/ruvector/shared-rvf-adapter.js +24 -0
  361. package/dist/integrations/vibium/client.d.ts +1 -0
  362. package/dist/integrations/vibium/client.js +24 -11
  363. package/dist/integrations/vibium/runtime.d.ts +14 -0
  364. package/dist/integrations/vibium/runtime.js +94 -0
  365. package/dist/kernel/kernel.js +3 -2
  366. package/dist/kernel/pattern-fts-self-heal.d.ts +63 -0
  367. package/dist/kernel/pattern-fts-self-heal.js +193 -0
  368. package/dist/kernel/process-lifecycle.d.ts +60 -0
  369. package/dist/kernel/process-lifecycle.js +91 -0
  370. package/dist/kernel/unified-memory-schemas.d.ts +15 -1
  371. package/dist/kernel/unified-memory-schemas.js +53 -25
  372. package/dist/kernel/unified-memory.js +31 -34
  373. package/dist/kernel/unified-persistence.js +12 -6
  374. package/dist/learning/experience-capture.d.ts +2 -1
  375. package/dist/learning/experience-capture.js +23 -8
  376. package/dist/learning/pattern-store.d.ts +12 -1
  377. package/dist/learning/pattern-store.js +45 -30
  378. package/dist/learning/qe-patterns.d.ts +12 -0
  379. package/dist/learning/qe-patterns.js +7 -1
  380. package/dist/learning/qe-reasoning-bank.d.ts +1 -0
  381. package/dist/learning/qe-reasoning-bank.js +17 -4
  382. package/dist/learning/real-qe-reasoning-bank.d.ts +9 -4
  383. package/dist/learning/real-qe-reasoning-bank.js +28 -4
  384. package/dist/learning/rvf-pattern-store.js +36 -23
  385. package/dist/learning/sqlite-persistence.d.ts +8 -1
  386. package/dist/learning/sqlite-persistence.js +58 -33
  387. package/dist/logging/console-logger.d.ts +2 -5
  388. package/dist/logging/console-logger.js +10 -46
  389. package/dist/logging/index.d.ts +2 -0
  390. package/dist/logging/index.js +1 -0
  391. package/dist/logging/redaction.d.ts +27 -0
  392. package/dist/logging/redaction.js +170 -0
  393. package/dist/mcp/bundle.js +522 -545
  394. package/dist/mcp/entry.js +52 -6
  395. package/dist/mcp/handlers/core-handlers.js +5 -4
  396. package/dist/mcp/handlers/domain-handler-configs.js +12 -4
  397. package/dist/mcp/handlers/task-handlers.js +11 -7
  398. package/dist/mcp/protocol-server.js +20 -4
  399. package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
  400. package/dist/mcp/services/reasoning-bank-service.js +5 -1
  401. package/dist/mcp/tools/base.d.ts +9 -2
  402. package/dist/mcp/tools/base.js +7 -0
  403. package/dist/mcp/tools/coherence/consensus.js +51 -2
  404. package/dist/mcp/tools/planning/goap-plan.d.ts +20 -7
  405. package/dist/mcp/tools/planning/goap-plan.js +92 -20
  406. package/dist/mcp/tools/planning/goap-status.d.ts +37 -12
  407. package/dist/mcp/tools/planning/goap-status.js +52 -23
  408. package/dist/mcp/tools/planning/world-state.d.ts +101 -0
  409. package/dist/mcp/tools/planning/world-state.js +274 -0
  410. package/dist/mcp/tools/test-execution/e2e-execute.js +9 -1
  411. package/dist/mcp/tools/test-generation/generate.d.ts +6 -1
  412. package/dist/mcp/tools/test-generation/generate.js +8 -0
  413. package/dist/mcp/types.d.ts +10 -4
  414. package/dist/planning/goap-planner.d.ts +60 -4
  415. package/dist/planning/goap-planner.js +218 -60
  416. package/dist/planning/index.d.ts +1 -1
  417. package/dist/planning/index.js +1 -1
  418. package/dist/planning/plan-executor.d.ts +20 -1
  419. package/dist/planning/plan-executor.js +209 -100
  420. package/dist/planning/types.d.ts +16 -0
  421. package/dist/planning/types.js +17 -0
  422. package/dist/shared/error-utils.d.ts +15 -0
  423. package/dist/shared/error-utils.js +21 -0
  424. package/dist/shared/events/domain-events.d.ts +2 -1
  425. package/package.json +10 -6
  426. package/dist/cli/chunks/adapter-IYC62SXA.js +0 -2
  427. package/dist/cli/chunks/agent-booster-wasm-EDNKP3SP.js +0 -2
  428. package/dist/cli/chunks/aqe-learning-engine-LLOU2IXD.js +0 -2
  429. package/dist/cli/chunks/audit-CVZQMF55.js +0 -3
  430. package/dist/cli/chunks/base-P3Z4IKCT.js +0 -2
  431. package/dist/cli/chunks/browser-workflow-YYHQQ25X.js +0 -2
  432. package/dist/cli/chunks/chunk-3EZ5DR2R.js +0 -21
  433. package/dist/cli/chunks/chunk-5WOSWNDN.js +0 -2
  434. package/dist/cli/chunks/chunk-7CD7PBHY.js +0 -3
  435. package/dist/cli/chunks/chunk-7X7JYWT4.js +0 -27
  436. package/dist/cli/chunks/chunk-CZO4BJG5.js +0 -2
  437. package/dist/cli/chunks/chunk-J27F4NSB.js +0 -2
  438. package/dist/cli/chunks/chunk-J5UNP6W3.js +0 -2
  439. package/dist/cli/chunks/chunk-MI5Q55DG.js +0 -65
  440. package/dist/cli/chunks/chunk-TY5WC3FT.js +0 -12
  441. package/dist/cli/chunks/chunk-UDHVCKGA.js +0 -5
  442. package/dist/cli/chunks/chunk-XQSIRBKT.js +0 -180
  443. package/dist/cli/chunks/chunk-YXP6BKGS.js +0 -730
  444. package/dist/cli/chunks/chunk-ZBABIZ2D.js +0 -2
  445. package/dist/cli/chunks/chunk-ZCWERUYB.js +0 -12
  446. package/dist/cli/chunks/claude-flow-setup-5LVJOFKP.js +0 -2
  447. package/dist/cli/chunks/client-HUVFA5PF.js +0 -2
  448. package/dist/cli/chunks/core-handlers-UEXO3VAA.js +0 -2
  449. package/dist/cli/chunks/cross-domain-router-ODU5IZD6.js +0 -2
  450. package/dist/cli/chunks/domain-transfer-JZA5TMW3.js +0 -2
  451. package/dist/cli/chunks/dream-HE3OX42F.js +0 -2
  452. package/dist/cli/chunks/heartbeat-scheduler-QUIFGGLX.js +0 -2
  453. package/dist/cli/chunks/hnsw-adapter-42KB37KP.js +0 -2
  454. package/dist/cli/chunks/hnsw-index-T2PGO77J.js +0 -2
  455. package/dist/cli/chunks/hybrid-backend-FRNWYRKH.js +0 -2
  456. package/dist/cli/chunks/impact-analyzer-A5QYOYBR.js +0 -2
  457. package/dist/cli/chunks/init-wizard-XBU674YH.js +0 -2
  458. package/dist/cli/chunks/kernel-DV5MTNZD.js +0 -2
  459. package/dist/cli/chunks/knowledge-graph-4ACGVJQK.js +0 -2
  460. package/dist/cli/chunks/llm-router-service-PSMASERT.js +0 -2
  461. package/dist/cli/chunks/load-test-MRUO2VPF.js +0 -2
  462. package/dist/cli/chunks/mcp-JGSFCEMH.js +0 -2
  463. package/dist/cli/chunks/memory-backend-2MPGI6JW.js +0 -2
  464. package/dist/cli/chunks/memory-handlers-XT4HMITB.js +0 -2
  465. package/dist/cli/chunks/multi-model-executor-26Q5BSVG.js +0 -14
  466. package/dist/cli/chunks/orchestrator-D5IFV65I.js +0 -393
  467. package/dist/cli/chunks/pattern-null-store-TGWUL237.js +0 -2
  468. package/dist/cli/chunks/protocol-executor-GEVH5KD6.js +0 -2
  469. package/dist/cli/chunks/qe-reasoning-bank-DJ2JL6QB.js +0 -2
  470. package/dist/cli/chunks/queen-coordinator-F7E3AS26.js +0 -2
  471. package/dist/cli/chunks/router-OZH3QSAU.js +0 -2
  472. package/dist/cli/chunks/routing-feedback-J2E3ADZB.js +0 -2
  473. package/dist/cli/chunks/rvf-dual-writer-HK525Y5Y.js +0 -2
  474. package/dist/cli/chunks/rvf-migration-adapter-Q7FB3BKR.js +0 -2
  475. package/dist/cli/chunks/rvf-native-adapter-5ZRCGUI6.js +0 -2
  476. package/dist/cli/chunks/safe-db-3OYEPVEH.js +0 -2
  477. package/dist/cli/chunks/schedule-AG4C2EIQ.js +0 -2
  478. package/dist/cli/chunks/scheduler-SQS2CZFZ.js +0 -2
  479. package/dist/cli/chunks/shared-rvf-adapter-NFL6QSZ6.js +0 -2
  480. package/dist/cli/chunks/sqlite-persistence-MAKDFSHC.js +0 -2
  481. package/dist/cli/chunks/sync-MBTW5XBF.js +0 -2
  482. package/dist/cli/chunks/task-handlers-NH4GJHCJ.js +0 -9
  483. package/dist/cli/chunks/test-MPHGT4T6.js +0 -33
  484. package/dist/cli/chunks/token-bootstrap-SSDCYEKK.js +0 -2
  485. package/dist/cli/chunks/tree-sitter-wasm-parser-J6ZMAK37.js +0 -2
  486. package/dist/cli/chunks/unified-memory-DDWMC435.js +0 -2
  487. package/dist/cli/chunks/unified-memory-hnsw-4JA7SGBK.js +0 -2
  488. package/dist/cli/chunks/unified-persistence-F6OSNTXY.js +0 -2
  489. package/dist/cli/chunks/vibium-HOGMFJ2Z.js +0 -2
  490. package/dist/cli/chunks/visual-security-25SMBIYT.js +0 -2
  491. package/dist/cli/chunks/witness-chain-PJOQPFUX.js +0 -2
  492. package/dist/cli/chunks/witness-chain-ZW6KKUZU.js +0 -2
  493. package/dist/cli/chunks/workflow-orchestrator-UKSIDM7Q.js +0 -2
  494. package/dist/cli/chunks/wrappers-UR7BLXKV.js +0 -2
@@ -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');
@@ -74,6 +74,10 @@ export declare class AgentsInstaller {
74
74
  * Install a single agent
75
75
  */
76
76
  private installAgent;
77
+ /**
78
+ * Describe an agent from its installed file (type, description, domain).
79
+ */
80
+ private describeAgent;
77
81
  /**
78
82
  * Get the type of an agent based on its name
79
83
  */
@@ -11,6 +11,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
11
11
  import { loadOverlays, applyOverlayToContent } from '../agents/overlay-loader.js';
12
12
  import { validateFleetMcpDeps } from '../validation/steps/agent-mcp-validator.js';
13
13
  import { findPackageRoot } from './find-package-root.js';
14
+ import { GENERATED_ON_LINE, writeTextIfChangedIgnoring } from './idempotent-write.js';
14
15
  // ============================================================================
15
16
  // Helpers
16
17
  // ============================================================================
@@ -240,15 +241,21 @@ export class AgentsInstaller {
240
241
  result.totalCount = availableAgents.length;
241
242
  // Filter agents based on options
242
243
  const agentsToInstall = this.filterAgents(availableAgents);
244
+ // Every selected agent present on disk after this run — newly installed or
245
+ // already there — so the index describes the install, not just this run's
246
+ // delta (a repeat init used to rewrite it as "Total Agents: 0", #778).
247
+ const presentAgents = [];
243
248
  // Install each agent
244
249
  for (const agentName of agentsToInstall) {
245
250
  try {
246
251
  const agentInfo = await this.installAgent(agentName, targetAgentsDir, targetSubagentsDir);
247
252
  if (agentInfo) {
248
253
  result.installed.push(agentInfo);
254
+ presentAgents.push(agentInfo);
249
255
  }
250
256
  else {
251
257
  result.skipped.push(agentName);
258
+ presentAgents.push(this.describeAgent(agentName, targetAgentsDir, targetSubagentsDir));
252
259
  }
253
260
  }
254
261
  catch (error) {
@@ -313,7 +320,7 @@ export class AgentsInstaller {
313
320
  }
314
321
  }
315
322
  // Create agents index file
316
- await this.createAgentsIndex(targetAgentsDir, result.installed);
323
+ await this.createAgentsIndex(targetAgentsDir, presentAgents);
317
324
  return result;
318
325
  }
319
326
  /**
@@ -405,17 +412,22 @@ export class AgentsInstaller {
405
412
  else {
406
413
  throw new Error(`Source file not found: ${sourceFile}`);
407
414
  }
408
- // Determine agent type
409
- const agentType = this.getAgentType(agentName, isSubagent);
410
- // Get description from agent file
411
- const description = this.getAgentDescription(targetFile);
412
- // Get domain from agent name
413
- const domain = this.getAgentDomain(agentName);
415
+ return this.describeAgent(agentPath, targetDir, targetSubagentsDir);
416
+ }
417
+ /**
418
+ * Describe an agent from its installed file (type, description, domain).
419
+ */
420
+ describeAgent(agentPath, targetDir, targetSubagentsDir) {
421
+ const isSubagent = agentPath.startsWith('subagents/');
422
+ const agentName = isSubagent ? agentPath.split('/')[1] : agentPath;
423
+ const targetFile = isSubagent
424
+ ? join(targetSubagentsDir, `${agentName}.md`)
425
+ : join(targetDir, `${agentName}.md`);
414
426
  return {
415
427
  name: agentName,
416
- type: agentType,
417
- description,
418
- domain,
428
+ type: this.getAgentType(agentName, isSubagent),
429
+ description: this.getAgentDescription(targetFile),
430
+ domain: this.getAgentDomain(agentName),
419
431
  };
420
432
  }
421
433
  /**
@@ -629,7 +641,8 @@ ${subagents.map(a => `- **${a.name}**${a.description ? `: ${a.description}` : ''
629
641
  if (!existsSync(docsDir)) {
630
642
  mkdirSync(docsDir, { recursive: true });
631
643
  }
632
- writeFileSync(join(docsDir, 'v3-agents-index.md'), indexContent, 'utf-8');
644
+ // #778: ignore the generation-timestamp footer when deciding to rewrite.
645
+ writeTextIfChangedIgnoring(join(docsDir, 'v3-agents-index.md'), indexContent, GENERATED_ON_LINE);
633
646
  }
634
647
  }
635
648
  /**
@@ -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 {
@@ -10,6 +10,7 @@ import { join, dirname } from 'path';
10
10
  import { fileURLToPath } from 'url';
11
11
  import { toErrorMessage } from '../shared/error-utils.js';
12
12
  import { findPackageRoot } from './find-package-root.js';
13
+ import { writeFileIfChanged } from './idempotent-write.js';
13
14
  import { selectCodexSkills } from './codex-skill-manifest.js';
14
15
  import { createPlatformConfigGenerator, } from './platform-config-generator.js';
15
16
  export const CODEX_COMPACT_GUIDANCE_MAX_BYTES = 512;
@@ -236,9 +237,10 @@ export class CodexInstaller {
236
237
  const userGroups = (existing.hooks?.[event] || []).filter((group) => !owned(group));
237
238
  mergedHooks[event] = [...userGroups, ...(generated.hooks?.[event] || [])];
238
239
  }
239
- writeFileSync(targetConfig, JSON.stringify({ ...existing, description: generated.description, hooks: mergedHooks }, null, 2) + '\n');
240
+ // #778: a converged hooks.json is left untouched (no mtime churn).
241
+ const changed = writeFileIfChanged(targetConfig, JSON.stringify({ ...existing, description: generated.description, hooks: mergedHooks }, null, 2) + '\n');
240
242
  result.hooksConfigured = true;
241
- return 'updated';
243
+ return changed ? 'updated' : 'preserved';
242
244
  }
243
245
  /** Install the curated repo-scoped AQE skills Codex discovers automatically. */
244
246
  installCodexSkills() {
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Idempotent file writers for `aqe init` (#778).
3
+ *
4
+ * A repeat `aqe init` on an unchanged project must be a byte-stable
5
+ * convergence step: files whose content would not change are left alone (no
6
+ * rewrite, so the mtime is preserved too), and volatile fields such as
7
+ * generation timestamps are carried over from the existing file unless
8
+ * something else in that file actually changed.
9
+ */
10
+ /**
11
+ * Write `content` to `path` only when the bytes on disk differ.
12
+ * @returns true when the file was written.
13
+ */
14
+ export declare function writeFileIfChanged(path: string, content: string | Buffer): boolean;
15
+ /**
16
+ * Copy `src` to `dest` only when `dest` is missing or its bytes differ.
17
+ * Uses copyFileSync for the actual copy so file-mode semantics are unchanged.
18
+ * @returns true when the file was copied.
19
+ */
20
+ export declare function copyFileIfChanged(src: string, dest: string): boolean;
21
+ /**
22
+ * Write a text file whose content embeds a volatile line (e.g. a generation
23
+ * timestamp). When the existing file matches `content` on every line except
24
+ * the lines matching `volatileLine`, the file is left untouched.
25
+ * @returns true when the file was written.
26
+ */
27
+ export declare function writeTextIfChangedIgnoring(path: string, content: string, volatileLine: RegExp): boolean;
28
+ /** The `*Generated by AQE v3 init on <ISO>*` footer of generated index docs. */
29
+ export declare const GENERATED_ON_LINE: RegExp;
30
+ /** JSON serialization with object keys sorted, for order-insensitive comparison. */
31
+ export declare function canonicalJson(value: unknown): string;
32
+ /** Deep structural equality of two JSON values, ignoring object key order. */
33
+ export declare function jsonEquivalent(a: unknown, b: unknown): boolean;
34
+ /**
35
+ * Carry volatile fields (timestamps) over from `previous` into `next` when
36
+ * `next` is otherwise identical to `previous`.
37
+ *
38
+ * - Unchanged (apart from the volatile fields): `next` is mutated to hold the
39
+ * previous values and `false` is returned — the caller should not write.
40
+ * - Changed, or no previous document: `next` keeps its fresh values and
41
+ * `true` is returned — the caller should write.
42
+ */
43
+ export declare function stabilizeVolatileFields(previous: unknown, next: Record<string, unknown>, volatilePaths: ReadonlyArray<readonly string[]>): boolean;
44
+ /** Read and parse a JSON file, or return undefined when missing/unparseable. */
45
+ export declare function readJsonIfPresent(path: string): unknown;
46
+ /**
47
+ * Write a generated JSON document (2-space indent) unless it is equivalent to
48
+ * the one already on disk, preserving the existing values of `volatilePaths`
49
+ * (e.g. `[['createdAt']]`) when nothing else changed.
50
+ * @returns true when the file was written.
51
+ */
52
+ export declare function writeJsonIfChanged(path: string, doc: Record<string, unknown>, volatilePaths?: ReadonlyArray<readonly string[]>): boolean;
53
+ //# sourceMappingURL=idempotent-write.d.ts.map