agentic-qe 3.14.5 → 3.14.6

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 (426) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +76 -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 +7 -7
  15. package/dist/cli/chunks/adapter-UYOJPTOX.js +2 -0
  16. package/dist/cli/chunks/agent-booster-wasm-2YGML6OU.js +2 -0
  17. package/dist/cli/chunks/{agent-handler-V6CZ7Q6S.js → agent-handler-D5SSQYNU.js} +2 -2
  18. package/dist/cli/chunks/{agent-memory-branch-ZMD6ULC3.js → agent-memory-branch-YHPLTITV.js} +2 -2
  19. package/dist/cli/chunks/aqe-learning-engine-JR5AVQXR.js +2 -0
  20. package/dist/cli/chunks/{arena-QLSBESC7.js → arena-7BGOXGXO.js} +2 -2
  21. package/dist/cli/chunks/{arena-4UPAEHFT.js → arena-MCE6EU7K.js} +4 -4
  22. package/dist/cli/chunks/audit-BMWTQECB.js +4 -0
  23. package/dist/cli/chunks/base-DRZ2LS6X.js +2 -0
  24. package/dist/cli/chunks/{better-sqlite3-4DSBPDRH.js → better-sqlite3-PMUNGASU.js} +2 -2
  25. package/dist/cli/chunks/{brain-handler-GBY4EZ4P.js → brain-handler-QPUFYX7F.js} +3 -3
  26. package/dist/cli/chunks/{branch-enumerator-XYBVXCNO.js → branch-enumerator-WKFDGRN4.js} +2 -2
  27. package/dist/cli/chunks/{browser-32F6MREU.js → browser-VY5HKH5X.js} +2 -2
  28. package/dist/cli/chunks/browser-workflow-CJ7T3MXF.js +2 -0
  29. package/dist/cli/chunks/{chunk-C3Z4VVHP.js → chunk-257E2A5M.js} +5 -5
  30. package/dist/cli/chunks/{chunk-EFV4ADMO.js → chunk-2JVWITNK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-IGBEJ4UJ.js → chunk-2NPKIBAZ.js} +2 -2
  32. package/dist/cli/chunks/{chunk-KIP6WZGV.js → chunk-2TMWAQQ3.js} +3 -3
  33. package/dist/cli/chunks/{chunk-DLF5BOJD.js → chunk-2YXGBZWV.js} +1 -1
  34. package/dist/cli/chunks/{chunk-KEY43ANX.js → chunk-3EA536JF.js} +2 -2
  35. package/dist/cli/chunks/{chunk-WX6RRIGW.js → chunk-3EZOZN25.js} +2 -2
  36. package/dist/cli/chunks/{chunk-BYG36QC5.js → chunk-3HZS4M3O.js} +2 -2
  37. package/dist/cli/chunks/{chunk-G3L5L6YQ.js → chunk-3NIG7S5W.js} +1 -1
  38. package/dist/cli/chunks/{chunk-CZO4BJG5.js → chunk-4N23RFDU.js} +2 -2
  39. package/dist/cli/chunks/{chunk-QWUXCG2L.js → chunk-5J6W7SIA.js} +1 -1
  40. package/dist/cli/chunks/{chunk-RD2VGOUH.js → chunk-5OOMJGFN.js} +1 -1
  41. package/dist/cli/chunks/{chunk-YDFL445W.js → chunk-5QQSIGUA.js} +2 -2
  42. package/dist/cli/chunks/{chunk-TUSSPKRM.js → chunk-5VFPCSK7.js} +1 -1
  43. package/dist/cli/chunks/{chunk-WLXK2KNU.js → chunk-62N4NUJH.js} +2 -2
  44. package/dist/cli/chunks/{chunk-JSZ663MU.js → chunk-64VGZQLB.js} +1 -1
  45. package/dist/cli/chunks/{chunk-UMGFMKDW.js → chunk-66VWCR67.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6ITZZIQX.js → chunk-6LIHFV7O.js} +2 -2
  47. package/dist/cli/chunks/{chunk-DKUBQQFG.js → chunk-6OS76PHI.js} +2 -2
  48. package/dist/cli/chunks/{chunk-Y5L3ES4L.js → chunk-6RE3X4V5.js} +2 -2
  49. package/dist/cli/chunks/{chunk-CVMNJSCB.js → chunk-6SH5VZUD.js} +2 -2
  50. package/dist/cli/chunks/chunk-6SQM2MUX.js +4 -0
  51. package/dist/cli/chunks/{chunk-6CR4VQBQ.js → chunk-6U7LNMWZ.js} +2 -2
  52. package/dist/cli/chunks/{chunk-HYEJJJY3.js → chunk-72KXSMWI.js} +1 -1
  53. package/dist/cli/chunks/chunk-7CUQCCMD.js +27 -0
  54. package/dist/cli/chunks/chunk-7D3V65N5.js +2 -0
  55. package/dist/cli/chunks/{chunk-K7NJHFLZ.js → chunk-7J6QC567.js} +3 -3
  56. package/dist/cli/chunks/{chunk-6LKDHEBY.js → chunk-7LPR6HJG.js} +2 -2
  57. package/dist/cli/chunks/{chunk-RGGK6VZ7.js → chunk-7NITCZWD.js} +1 -1
  58. package/dist/cli/chunks/{chunk-IYTLXUBO.js → chunk-7Z5LHRC3.js} +2 -2
  59. package/dist/cli/chunks/{chunk-ZCWERUYB.js → chunk-AHKELLIO.js} +3 -3
  60. package/dist/cli/chunks/{chunk-IJHCIXJC.js → chunk-AIRGNL55.js} +2 -2
  61. package/dist/cli/chunks/{chunk-2OMLTYQK.js → chunk-AJRUJAAK.js} +1 -1
  62. package/dist/cli/chunks/{chunk-QYOGD2VW.js → chunk-AVBJYI5I.js} +1 -1
  63. package/dist/cli/chunks/{chunk-PSPKSUF6.js → chunk-B6D2CHEH.js} +1 -1
  64. package/dist/cli/chunks/{chunk-M23ZOZVY.js → chunk-B6MOJC3X.js} +1 -1
  65. package/dist/cli/chunks/{chunk-VD5IO5EO.js → chunk-BAMN2CHI.js} +1 -1
  66. package/dist/cli/chunks/{chunk-KO4FNAUR.js → chunk-BBT64TII.js} +3 -3
  67. package/dist/cli/chunks/{chunk-7JZJJA7U.js → chunk-BJTJLJRZ.js} +3 -3
  68. package/dist/cli/chunks/{chunk-LULD4JV2.js → chunk-BMAPORJ7.js} +2 -2
  69. package/dist/cli/chunks/{chunk-GTKCGPJZ.js → chunk-BPEDWS6O.js} +2 -2
  70. package/dist/cli/chunks/{chunk-3DDXWYMO.js → chunk-BVR7RMC5.js} +1 -1
  71. package/dist/cli/chunks/{chunk-52L77RMG.js → chunk-C6KWXUFJ.js} +2 -2
  72. package/dist/cli/chunks/{chunk-BJPL6THQ.js → chunk-CCK4BF76.js} +1 -1
  73. package/dist/cli/chunks/{chunk-RP2ZKPYV.js → chunk-CD542DNJ.js} +1 -1
  74. package/dist/cli/chunks/{chunk-AFEDJ3RU.js → chunk-CF2ISEOJ.js} +2 -2
  75. package/dist/cli/chunks/chunk-CM7U6TAX.js +5 -0
  76. package/dist/cli/chunks/{chunk-R74ZKREV.js → chunk-D45SG6CP.js} +1 -1
  77. package/dist/cli/chunks/{chunk-YXP6BKGS.js → chunk-D6CJIGRU.js} +89 -83
  78. package/dist/cli/chunks/{chunk-NVYBM3R4.js → chunk-DBDPRORT.js} +2 -2
  79. package/dist/cli/chunks/{chunk-CYE2TJFV.js → chunk-DHVX5UB2.js} +2 -2
  80. package/dist/cli/chunks/{chunk-XUR2M2WB.js → chunk-DK4XN4CU.js} +2 -2
  81. package/dist/cli/chunks/{chunk-W2XCZU62.js → chunk-DPYSUDAO.js} +1 -1
  82. package/dist/cli/chunks/{chunk-WJHWH5D2.js → chunk-DUYOVM5I.js} +2 -2
  83. package/dist/cli/chunks/{chunk-XLAUGSW7.js → chunk-DZ3AUAAB.js} +2 -2
  84. package/dist/cli/chunks/{chunk-37TUN44F.js → chunk-E6G2RD5H.js} +2 -2
  85. package/dist/cli/chunks/{chunk-ELBZON4V.js → chunk-EAY2JMZG.js} +2 -2
  86. package/dist/cli/chunks/{chunk-HSVKZ5KI.js → chunk-ELLBS5RP.js} +2 -2
  87. package/dist/cli/chunks/chunk-ENGZ4D5V.js +2 -0
  88. package/dist/cli/chunks/chunk-FBMN7B46.js +4 -0
  89. package/dist/cli/chunks/{chunk-F34OAHOM.js → chunk-FWASDOT2.js} +2 -2
  90. package/dist/cli/chunks/{chunk-E4AZXCT5.js → chunk-FZOBD67M.js} +1 -1
  91. package/dist/cli/chunks/{chunk-QZMUXJHZ.js → chunk-GDSXITFH.js} +2 -2
  92. package/dist/cli/chunks/{chunk-LSUILON7.js → chunk-GGRHV6D7.js} +1 -1
  93. package/dist/cli/chunks/{chunk-3YUB5HER.js → chunk-GPYVDFB3.js} +101 -101
  94. package/dist/cli/chunks/{chunk-4FWTLJEP.js → chunk-GSF6MB64.js} +2 -2
  95. package/dist/cli/chunks/{chunk-3KDL6QDK.js → chunk-H52HZ67P.js} +2 -2
  96. package/dist/cli/chunks/{chunk-2JGEZHWY.js → chunk-H5BS5VH7.js} +2 -2
  97. package/dist/cli/chunks/{chunk-SQF6HRXR.js → chunk-H6ZM3PUT.js} +1 -1
  98. package/dist/cli/chunks/{chunk-OEIQTWQP.js → chunk-HM6ZSCPI.js} +1 -1
  99. package/dist/cli/chunks/{chunk-URVHZPWY.js → chunk-HNFVJP4I.js} +2 -2
  100. package/dist/cli/chunks/{chunk-RD6TEZ64.js → chunk-I33ERSGB.js} +2 -2
  101. package/dist/cli/chunks/{chunk-IUDWEOLX.js → chunk-IAF6T27S.js} +2 -2
  102. package/dist/cli/chunks/{chunk-XZSMZHM2.js → chunk-IB27QACC.js} +2 -2
  103. package/dist/cli/chunks/{chunk-I6X3EGJI.js → chunk-ICTXTNQZ.js} +1 -1
  104. package/dist/cli/chunks/chunk-IG5GNEC6.js +4 -0
  105. package/dist/cli/chunks/{chunk-6A44AOGN.js → chunk-IQO7UCFR.js} +2 -2
  106. package/dist/cli/chunks/{chunk-R6IU3EWP.js → chunk-IV5UZOHH.js} +2 -2
  107. package/dist/cli/chunks/{chunk-VTOVWHEM.js → chunk-JBTPOIAC.js} +2 -2
  108. package/dist/cli/chunks/{chunk-KLTP5IDB.js → chunk-JIXUMYKZ.js} +1 -1
  109. package/dist/cli/chunks/{chunk-3VIXOHMS.js → chunk-JMONHE4B.js} +1 -1
  110. package/dist/cli/chunks/{chunk-SX4JLSLV.js → chunk-JVNTSNWU.js} +2 -2
  111. package/dist/cli/chunks/{chunk-JVQBWYHW.js → chunk-JXGFRBUO.js} +2 -2
  112. package/dist/cli/chunks/{chunk-HVXJC3OC.js → chunk-JZOS5FCX.js} +2 -2
  113. package/dist/cli/chunks/{chunk-XEZIIQYJ.js → chunk-KNNISEDY.js} +1 -1
  114. package/dist/cli/chunks/{chunk-73EI4C2E.js → chunk-L4RUBPLR.js} +2 -2
  115. package/dist/cli/chunks/{chunk-AF4XKLXO.js → chunk-LL3IGZBI.js} +2 -2
  116. package/dist/cli/chunks/{chunk-UJWAWIRV.js → chunk-MBRHSU6W.js} +10 -10
  117. package/dist/cli/chunks/{chunk-J5UNP6W3.js → chunk-MJS53PRX.js} +2 -2
  118. package/dist/cli/chunks/{chunk-EOR2UT72.js → chunk-MQROI74N.js} +2 -2
  119. package/dist/cli/chunks/{chunk-BXVAVFGU.js → chunk-MUOG6QXR.js} +2 -2
  120. package/dist/cli/chunks/{chunk-O3JTQ7N4.js → chunk-MW2GGZZ5.js} +1 -1
  121. package/dist/cli/chunks/{chunk-IIAR5S7Q.js → chunk-NHWGMJAP.js} +2 -2
  122. package/dist/cli/chunks/{chunk-WOIGKU2N.js → chunk-NMAIY4PX.js} +3 -3
  123. package/dist/cli/chunks/{chunk-QIRL6B3C.js → chunk-NQZ5AR3D.js} +2 -2
  124. package/dist/cli/chunks/{chunk-6TU7FEMD.js → chunk-P6OYS755.js} +1 -1
  125. package/dist/cli/chunks/{chunk-HVU64GP5.js → chunk-PI7TJS62.js} +2 -2
  126. package/dist/cli/chunks/{chunk-N7H767TP.js → chunk-PX5YDCRH.js} +2 -2
  127. package/dist/cli/chunks/{chunk-3EZ5DR2R.js → chunk-PZPWRQ2M.js} +2 -2
  128. package/dist/cli/chunks/{chunk-RKOUXVZZ.js → chunk-Q5XTSMWR.js} +2 -2
  129. package/dist/cli/chunks/{chunk-K27SU3RE.js → chunk-Q7EAGKAE.js} +2 -2
  130. package/dist/cli/chunks/{chunk-M5AEL7IS.js → chunk-QDFTT3RF.js} +2 -2
  131. package/dist/cli/chunks/{chunk-TY5WC3FT.js → chunk-QGA55PFM.js} +3 -3
  132. package/dist/cli/chunks/{chunk-NQI7FWCS.js → chunk-QW6VMTBR.js} +2 -2
  133. package/dist/cli/chunks/{chunk-BHFR2EXL.js → chunk-QZANMBIT.js} +1 -1
  134. package/dist/cli/chunks/{chunk-5D36YHS3.js → chunk-RETBYIAC.js} +4 -4
  135. package/dist/cli/chunks/{chunk-UKGXWW64.js → chunk-RFNPJK6N.js} +3 -3
  136. package/dist/cli/chunks/{chunk-G3W6BMVJ.js → chunk-RG52OKAM.js} +1 -1
  137. package/dist/cli/chunks/{chunk-DO6EI5KB.js → chunk-RSXXCL4A.js} +1 -1
  138. package/dist/cli/chunks/{chunk-E3W6XQ57.js → chunk-RTFO5UQH.js} +2 -2
  139. package/dist/cli/chunks/{chunk-DDCIYOGT.js → chunk-RZZCUIAI.js} +2 -2
  140. package/dist/cli/chunks/{chunk-C3HQL6S4.js → chunk-SDRHUMJB.js} +2 -2
  141. package/dist/cli/chunks/{chunk-KYA5LARK.js → chunk-SE4WIB26.js} +1 -1
  142. package/dist/cli/chunks/{chunk-NU7UTXMP.js → chunk-SESK3ARK.js} +2 -2
  143. package/dist/cli/chunks/{chunk-YQGPQBCX.js → chunk-SJUXE4IC.js} +2 -2
  144. package/dist/cli/chunks/{chunk-HBCGYMQU.js → chunk-SMDN3BQZ.js} +1 -1
  145. package/dist/cli/chunks/{chunk-D6OUCB2H.js → chunk-SNOBH4AZ.js} +2 -2
  146. package/dist/cli/chunks/{chunk-QRCIZFNK.js → chunk-SPV2VKC5.js} +2 -2
  147. package/dist/cli/chunks/chunk-TCHGOB2N.js +2 -0
  148. package/dist/cli/chunks/{chunk-2KJQ2UQE.js → chunk-TVYY3OCX.js} +1 -1
  149. package/dist/cli/chunks/{chunk-RIZVC4XY.js → chunk-UCFQALXO.js} +2 -2
  150. package/dist/cli/chunks/{chunk-XFPPERA2.js → chunk-UKA2KOXE.js} +2 -2
  151. package/dist/cli/chunks/{chunk-UTBYJ4RF.js → chunk-UNFFDHER.js} +16 -11
  152. package/dist/cli/chunks/{chunk-6VAZAHQG.js → chunk-UQ32JHES.js} +2 -2
  153. package/dist/cli/chunks/{chunk-CPC7FN52.js → chunk-V4DM6ELU.js} +2 -2
  154. package/dist/cli/chunks/{chunk-67YV75XP.js → chunk-VGFFFKGK.js} +2 -2
  155. package/dist/cli/chunks/{chunk-WK7B4B6Y.js → chunk-VMNWDJIZ.js} +2 -2
  156. package/dist/cli/chunks/chunk-W6HXLH5G.js +180 -0
  157. package/dist/cli/chunks/{chunk-7VFY7TUR.js → chunk-WCJBU2KI.js} +2 -2
  158. package/dist/cli/chunks/{chunk-JROVR6YS.js → chunk-WGM35YWL.js} +2 -2
  159. package/dist/cli/chunks/{chunk-IUHB5GVS.js → chunk-WO4QMXIG.js} +2 -2
  160. package/dist/cli/chunks/{chunk-JES6R5KP.js → chunk-XAS3XRYM.js} +1 -1
  161. package/dist/cli/chunks/chunk-Y3LZ35OG.js +2 -0
  162. package/dist/cli/chunks/{chunk-75QJ5HWE.js → chunk-Y3UOUNHM.js} +2 -2
  163. package/dist/cli/chunks/{chunk-WJTSY5MC.js → chunk-YFBSPLJG.js} +1 -1
  164. package/dist/cli/chunks/{chunk-DPBRWP4J.js → chunk-YHKEDEAA.js} +3 -3
  165. package/dist/cli/chunks/{chunk-NRE4NAVA.js → chunk-YS4FCTWF.js} +1 -1
  166. package/dist/cli/chunks/{chunk-I2NENQ44.js → chunk-YSLL6VSL.js} +2 -2
  167. package/dist/cli/chunks/chunk-Z6GGIRQQ.js +65 -0
  168. package/dist/cli/chunks/{chunk-E4EYPYR3.js → chunk-Z7WODOTH.js} +2 -2
  169. package/dist/cli/chunks/{chunk-7DETTOPZ.js → chunk-ZCRTRYXK.js} +2 -2
  170. package/dist/cli/chunks/{chunk-FUNGTIF2.js → chunk-ZEV3YTO7.js} +2 -2
  171. package/dist/cli/chunks/{chunk-SQKW3B6B.js → chunk-ZL6SYKUK.js} +1 -1
  172. package/dist/cli/chunks/{chunk-AMMQOV35.js → chunk-ZSPU4MOS.js} +2 -2
  173. package/dist/cli/chunks/{chunk-KKHYJF5U.js → chunk-ZVWVV4EX.js} +1 -1
  174. package/dist/cli/chunks/{ci-RACDAJMR.js → ci-W6K6G2KZ.js} +2 -2
  175. package/dist/cli/chunks/{ci-output-EHRSZBKG.js → ci-output-LDT24TS3.js} +2 -2
  176. package/dist/cli/chunks/{circuit-breaker-GBV7M5XG.js → circuit-breaker-F5V4KITU.js} +2 -2
  177. package/dist/cli/chunks/claude-flow-setup-DT6WQQVD.js +2 -0
  178. package/dist/cli/chunks/client-KHWJT6FB.js +2 -0
  179. package/dist/cli/chunks/{cline-installer-W4NMXJSG.js → cline-installer-G7TJOAEX.js} +2 -2
  180. package/dist/cli/chunks/{code-JWXJMYXB.js → code-PGE6A42V.js} +3 -3
  181. package/dist/cli/chunks/{code-index-extractor-RVI2IFTM.js → code-index-extractor-RNITH372.js} +2 -2
  182. package/dist/cli/chunks/{codex-installer-3BORJINH.js → codex-installer-LBX77AI3.js} +6 -6
  183. package/dist/cli/chunks/{completions-A55NCTAO.js → completions-4AWLAARX.js} +2 -2
  184. package/dist/cli/chunks/{complexity-analyzer-JCXHGGLY.js → complexity-analyzer-ZPNSS476.js} +2 -2
  185. package/dist/cli/chunks/{continuedev-installer-PUVFMGYW.js → continuedev-installer-UAPWX6OA.js} +2 -2
  186. package/dist/cli/chunks/{copilot-installer-4DCMYWHB.js → copilot-installer-BJN2YJGI.js} +2 -2
  187. package/dist/cli/chunks/core-handlers-HING5RRG.js +2 -0
  188. package/dist/cli/chunks/{cost-tracker-5TV2GGKY.js → cost-tracker-MHP2VJ63.js} +2 -2
  189. package/dist/cli/chunks/{coverage-NNWM7TX3.js → coverage-PQB4IEFG.js} +3 -3
  190. package/dist/cli/chunks/cross-domain-router-PQTD6AZN.js +2 -0
  191. package/dist/cli/chunks/{cursor-installer-4NCHGJGK.js → cursor-installer-ZXBWYAS3.js} +2 -2
  192. package/dist/cli/chunks/{daemon-T4JO4IXP.js → daemon-64C7R6OJ.js} +3 -3
  193. package/dist/cli/chunks/{daemon-QIKCXKWO.js → daemon-N2BEGEFY.js} +4 -4
  194. package/dist/cli/chunks/{dag-attention-scheduler-RPAAIDAD.js → dag-attention-scheduler-SPZDAPNL.js} +2 -2
  195. package/dist/cli/chunks/{detect-SBEEVDSN.js → detect-LXJBSSZW.js} +2 -2
  196. package/dist/cli/chunks/{dist-node-ZHI6NCSU.js → dist-node-U3TKZ2IZ.js} +2 -2
  197. package/dist/cli/chunks/{domain-handler-LBC3GJ7Z.js → domain-handler-3DDWUVSR.js} +2 -2
  198. package/dist/cli/chunks/{domain-plugins-H6IZ5USZ.js → domain-plugins-JJVWI4OQ.js} +2 -2
  199. package/dist/cli/chunks/domain-transfer-M36KUJ2U.js +2 -0
  200. package/dist/cli/chunks/dream-WUGRSNCV.js +2 -0
  201. package/dist/cli/chunks/{embed-and-insert-pattern-AHTR7CRU.js → embed-and-insert-pattern-JPAR7TXX.js} +2 -2
  202. package/dist/cli/chunks/{eval-DZU2KISM.js → eval-SOLG23EA.js} +2 -2
  203. package/dist/cli/chunks/{experience-capture-middleware-5IQCWKSL.js → experience-capture-middleware-T7G2VOOD.js} +3 -3
  204. package/dist/cli/chunks/{fast-paths-2KLDUWCY.js → fast-paths-32N3ELI4.js} +2 -2
  205. package/dist/cli/chunks/{feature-flags-N6UAEZY4.js → feature-flags-APJDQ4N7.js} +2 -2
  206. package/dist/cli/chunks/{feature-flags-7AC3XDZA.js → feature-flags-NAHKLDRN.js} +2 -2
  207. package/dist/cli/chunks/{file-discovery-5SDIW4V2.js → file-discovery-YKVM3MDB.js} +2 -2
  208. package/dist/cli/chunks/{fleet-ZIQCAZ2Y.js → fleet-55M5CJS4.js} +3 -3
  209. package/dist/cli/chunks/{gnn-wrapper-DUMBZJEV.js → gnn-wrapper-UD6E6S6Z.js} +2 -2
  210. package/dist/cli/chunks/{heartbeat-handler-6HVM6ZMR.js → heartbeat-handler-OYVW3VSC.js} +4 -4
  211. package/dist/cli/chunks/heartbeat-scheduler-33XX5XNQ.js +2 -0
  212. package/dist/cli/chunks/hnsw-adapter-XQPERX3H.js +2 -0
  213. package/dist/cli/chunks/hnsw-index-2GNXTWHH.js +2 -0
  214. package/dist/cli/chunks/{hnsw-legacy-bridge-5DRL5FLX.js → hnsw-legacy-bridge-HBYIS3ZW.js} +2 -2
  215. package/dist/cli/chunks/{hnswlib-node-GW67GTCL.js → hnswlib-node-EQPM42OU.js} +2 -2
  216. package/dist/cli/chunks/{hooks-QHH6FVO4.js → hooks-5ZSSJWO6.js} +10 -10
  217. package/dist/cli/chunks/hybrid-backend-CCF7URKI.js +2 -0
  218. package/dist/cli/chunks/{hypergraph-engine-7XDCCVG2.js → hypergraph-engine-XBGVQ4PD.js} +2 -2
  219. package/dist/cli/chunks/{hypergraph-handler-QHF7NOU5.js → hypergraph-handler-CAWAQ673.js} +3 -3
  220. package/dist/cli/chunks/impact-analyzer-HGKAZWIG.js +2 -0
  221. package/dist/cli/chunks/{init-handler-5UIVOM7K.js → init-handler-PRHXSARK.js} +6 -6
  222. package/dist/cli/chunks/init-wizard-72MFBI3G.js +2 -0
  223. package/dist/cli/chunks/kernel-BRCBVMSK.js +2 -0
  224. package/dist/cli/chunks/{kilocode-installer-TGGV6K5Q.js → kilocode-installer-F7LXBM7I.js} +2 -2
  225. package/dist/cli/chunks/{kiro-installer-4XYBHZWW.js → kiro-installer-NM723ZRG.js} +2 -2
  226. package/dist/cli/chunks/knowledge-graph-DG44IPEI.js +2 -0
  227. package/dist/cli/chunks/{learning-STE5W6BS.js → learning-5QYIDHH3.js} +3 -3
  228. package/dist/cli/chunks/{llm-router-NKF7J3RI.js → llm-router-43HKWPSX.js} +4 -4
  229. package/dist/cli/chunks/llm-router-service-24KXFX32.js +2 -0
  230. package/dist/cli/chunks/{load-B2T77UJQ.js → load-5YDBWSCS.js} +2 -2
  231. package/dist/cli/chunks/load-test-N4TAYJY3.js +2 -0
  232. package/dist/cli/chunks/mcp-UMAPMNMY.js +2 -0
  233. package/dist/cli/chunks/{memory-WRFZKG56.js → memory-FWCPCQFP.js} +5 -5
  234. package/dist/cli/chunks/memory-backend-NVYFYVAU.js +2 -0
  235. package/dist/cli/chunks/memory-handlers-UTWCNCHL.js +2 -0
  236. package/dist/cli/chunks/multi-model-executor-2XTBGLE4.js +14 -0
  237. package/dist/cli/chunks/{opencode-installer-J36EMQU7.js → opencode-installer-GIXOJ6NS.js} +2 -2
  238. package/dist/cli/chunks/orchestrator-VW6BKHLI.js +393 -0
  239. package/dist/cli/chunks/pattern-null-store-SBPNYDBR.js +2 -0
  240. package/dist/cli/chunks/{pattern-usage-recorder-BVMTWI3E.js → pattern-usage-recorder-7CEUC3J7.js} +2 -2
  241. package/dist/cli/chunks/{pipeline-OWAHDUAQ.js → pipeline-IGUQPPPO.js} +2 -2
  242. package/dist/cli/chunks/{platform-ANGBFWBV.js → platform-2P636I7B.js} +2 -2
  243. package/dist/cli/chunks/{plugin-OO7ON2YW.js → plugin-NY6SWDPE.js} +2 -2
  244. package/dist/cli/chunks/{prime-radiant-advanced-wasm-HFG3BXWU.js → prime-radiant-advanced-wasm-2UUDTIO2.js} +2 -2
  245. package/dist/cli/chunks/{project-root-LNOYVTYY.js → project-root-IOISG5KX.js} +2 -2
  246. package/dist/cli/chunks/protocol-executor-IBYEII5Q.js +2 -0
  247. package/dist/cli/chunks/{protocol-handler-CE3Q6LY4.js → protocol-handler-ZTPCRQ5W.js} +2 -2
  248. package/dist/cli/chunks/{prove-7XPN53PY.js → prove-SQX5A3IG.js} +2 -2
  249. package/dist/cli/chunks/qe-reasoning-bank-7IETWW6W.js +2 -0
  250. package/dist/cli/chunks/{quality-TT23JRFX.js → quality-DROILKRY.js} +2 -2
  251. package/dist/cli/chunks/{quality-gate-PPPRP255.js → quality-gate-PWKWDJY2.js} +3 -3
  252. package/dist/cli/chunks/queen-coordinator-NHUK2MWJ.js +2 -0
  253. package/dist/cli/chunks/{real-embeddings-EYNZIFJE.js → real-embeddings-P5U3MGYC.js} +2 -2
  254. package/dist/cli/chunks/{ref-validation-QQR64ZXD.js → ref-validation-KY73NQXD.js} +2 -2
  255. package/dist/cli/chunks/{roocode-installer-UIGS7ZJD.js → roocode-installer-6JPPRB3W.js} +2 -2
  256. package/dist/cli/chunks/router-SRSO3IHF.js +2 -0
  257. package/dist/cli/chunks/routing-feedback-PASRE5HY.js +2 -0
  258. package/dist/cli/chunks/{routing-handler-6AENUIRG.js → routing-handler-VTJIVFUO.js} +2 -2
  259. package/dist/cli/chunks/{ruvector-commands-5AWMEV34.js → ruvector-commands-C6RPSJJO.js} +2 -2
  260. package/dist/cli/chunks/rvf-dual-writer-4M4J67OU.js +2 -0
  261. package/dist/cli/chunks/rvf-migration-adapter-TSXGT5LF.js +2 -0
  262. package/dist/cli/chunks/{rvf-migration-coordinator-NWRJ7C22.js → rvf-migration-coordinator-R53URRIO.js} +2 -2
  263. package/dist/cli/chunks/rvf-native-adapter-MOF3E7BR.js +2 -0
  264. package/dist/cli/chunks/{rvf-store-integrity-ISKRP563.js → rvf-store-integrity-MMXN5TEJ.js} +2 -2
  265. package/dist/cli/chunks/safe-db-QJLFO33B.js +2 -0
  266. package/dist/cli/chunks/schedule-YIVXW5O2.js +2 -0
  267. package/dist/cli/chunks/scheduler-AON7DWSJ.js +2 -0
  268. package/dist/cli/chunks/{security-325A7FMB.js → security-3B3R2NL4.js} +3 -3
  269. package/dist/cli/chunks/shared-rvf-adapter-VIJB7JUS.js +2 -0
  270. package/dist/cli/chunks/{shared-rvf-dual-writer-THFDYS2Z.js → shared-rvf-dual-writer-UVWGDUWC.js} +2 -2
  271. package/dist/cli/chunks/sqlite-persistence-75VHKKQB.js +2 -0
  272. package/dist/cli/chunks/{standalone-memory-UD4MJ6GZ.js → standalone-memory-M4LWAAYZ.js} +2 -2
  273. package/dist/cli/chunks/{status-handler-CPFTN4XL.js → status-handler-YYFV6OZL.js} +2 -2
  274. package/dist/cli/chunks/{structural-health-2MG2IVBL.js → structural-health-27E6LLKB.js} +2 -2
  275. package/dist/cli/chunks/sync-26CEGSTC.js +2 -0
  276. package/dist/cli/chunks/{sync-EE4VVKOW.js → sync-J3LJ56WN.js} +2 -2
  277. package/dist/cli/chunks/{task-handler-7H5OYJG4.js → task-handler-4MCEBQZL.js} +2 -2
  278. package/dist/cli/chunks/{task-handlers-NH4GJHCJ.js → task-handlers-GYBAWKE2.js} +3 -3
  279. package/dist/cli/chunks/{test-MPHGT4T6.js → test-MPC5HRH5.js} +4 -4
  280. package/dist/cli/chunks/{test-scheduling-CHQ4ZLLJ.js → test-scheduling-ZJBFRZ3J.js} +3 -3
  281. package/dist/cli/chunks/token-bootstrap-2Y2XITBX.js +2 -0
  282. package/dist/cli/chunks/{token-usage-EBXUJNRB.js → token-usage-3X5WMTG2.js} +2 -2
  283. package/dist/cli/chunks/{transformers-ZEKS2OJZ.js → transformers-MVL4C5IX.js} +2 -2
  284. package/dist/cli/chunks/tree-sitter-wasm-parser-SLW65ZFO.js +2 -0
  285. package/dist/cli/chunks/{types-KYAA5VLV.js → types-TG5P3CRS.js} +2 -2
  286. package/dist/cli/chunks/unified-memory-UCQ6AB32.js +2 -0
  287. package/dist/cli/chunks/unified-memory-hnsw-IXYUMKRR.js +2 -0
  288. package/dist/cli/chunks/unified-persistence-7E6JQ4FZ.js +2 -0
  289. package/dist/cli/chunks/{upgrade-UJBJ5AYM.js → upgrade-ETBHDEPY.js} +2 -2
  290. package/dist/cli/chunks/{validate-RUV6YMWS.js → validate-C2A73LZK.js} +2 -2
  291. package/dist/cli/chunks/{validate-swarm-IVEVMGVM.js → validate-swarm-67XN42ML.js} +2 -2
  292. package/dist/cli/chunks/{vibium-HOGMFJ2Z.js → vibium-NILGKHLN.js} +2 -2
  293. package/dist/cli/chunks/visual-security-4VZXPEVG.js +2 -0
  294. package/dist/cli/chunks/{web-tree-sitter-AVWA6HKE.js → web-tree-sitter-USJN77P4.js} +2 -2
  295. package/dist/cli/chunks/{windsurf-installer-DAH7HI2W.js → windsurf-installer-5GGZXGJW.js} +2 -2
  296. package/dist/cli/chunks/witness-chain-IWS5ZHHL.js +2 -0
  297. package/dist/cli/chunks/witness-chain-JQA2VPZI.js +2 -0
  298. package/dist/cli/chunks/witness-chain-repair-4UA7IPS3.js +2 -0
  299. package/dist/cli/chunks/witness-chain-verifier-3GEADWPE.js +2 -0
  300. package/dist/cli/chunks/{witness-key-manager-JSTBMG43.js → witness-key-manager-ZWEIK3VJ.js} +2 -2
  301. package/dist/cli/chunks/{workflow-TWOIA6LZ.js → workflow-KHMVVBBA.js} +4 -4
  302. package/dist/cli/chunks/workflow-orchestrator-GI5NQH7C.js +2 -0
  303. package/dist/cli/chunks/wrappers-N6XIK5PT.js +2 -0
  304. package/dist/cli/commands/audit.d.ts +20 -2
  305. package/dist/cli/commands/audit.js +158 -16
  306. package/dist/cli/commands/claude-flow-setup.js +5 -4
  307. package/dist/cli/index.js +2 -1
  308. package/dist/init/agents-installer.d.ts +4 -0
  309. package/dist/init/agents-installer.js +24 -11
  310. package/dist/init/codex-installer.js +4 -2
  311. package/dist/init/idempotent-write.d.ts +53 -0
  312. package/dist/init/idempotent-write.js +160 -0
  313. package/dist/init/phases/05-learning.js +3 -1
  314. package/dist/init/phases/07-hooks.js +32 -16
  315. package/dist/init/phases/08-mcp.js +4 -2
  316. package/dist/init/phases/10-workers.js +7 -5
  317. package/dist/init/phases/12-verification.js +7 -2
  318. package/dist/init/project-analyzer.d.ts +9 -0
  319. package/dist/init/project-analyzer.js +20 -1
  320. package/dist/init/self-configurator.d.ts +5 -3
  321. package/dist/init/self-configurator.js +18 -29
  322. package/dist/init/skills-installer.js +4 -2
  323. package/dist/init/types.d.ts +6 -0
  324. package/dist/init/types.js +20 -24
  325. package/dist/integrations/coherence/coherence-service.js +84 -24
  326. package/dist/integrations/coherence/vote-tally.d.ts +38 -0
  327. package/dist/integrations/coherence/vote-tally.js +39 -0
  328. package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +23 -0
  329. package/dist/integrations/ruvector/shared-rvf-adapter.js +24 -0
  330. package/dist/kernel/kernel.js +3 -2
  331. package/dist/learning/pattern-store.d.ts +11 -0
  332. package/dist/learning/pattern-store.js +26 -8
  333. package/dist/learning/qe-patterns.d.ts +6 -0
  334. package/dist/learning/qe-patterns.js +7 -1
  335. package/dist/learning/qe-reasoning-bank.js +3 -0
  336. package/dist/learning/rvf-pattern-store.js +20 -7
  337. package/dist/learning/sqlite-persistence.d.ts +8 -1
  338. package/dist/learning/sqlite-persistence.js +49 -9
  339. package/dist/logging/console-logger.d.ts +2 -5
  340. package/dist/logging/console-logger.js +10 -46
  341. package/dist/logging/index.d.ts +2 -0
  342. package/dist/logging/index.js +1 -0
  343. package/dist/logging/redaction.d.ts +27 -0
  344. package/dist/logging/redaction.js +170 -0
  345. package/dist/mcp/bundle.js +435 -421
  346. package/dist/mcp/handlers/core-handlers.js +5 -4
  347. package/dist/mcp/protocol-server.js +2 -1
  348. package/dist/mcp/tools/base.d.ts +9 -2
  349. package/dist/mcp/tools/base.js +7 -0
  350. package/dist/mcp/tools/coherence/consensus.js +51 -2
  351. package/dist/mcp/tools/planning/goap-plan.d.ts +20 -7
  352. package/dist/mcp/tools/planning/goap-plan.js +92 -20
  353. package/dist/mcp/tools/planning/goap-status.d.ts +37 -12
  354. package/dist/mcp/tools/planning/goap-status.js +52 -23
  355. package/dist/mcp/tools/planning/world-state.d.ts +101 -0
  356. package/dist/mcp/tools/planning/world-state.js +274 -0
  357. package/dist/mcp/types.d.ts +4 -2
  358. package/dist/planning/goap-planner.d.ts +60 -4
  359. package/dist/planning/goap-planner.js +218 -60
  360. package/dist/planning/index.d.ts +1 -1
  361. package/dist/planning/index.js +1 -1
  362. package/dist/planning/plan-executor.d.ts +20 -1
  363. package/dist/planning/plan-executor.js +209 -100
  364. package/dist/planning/types.d.ts +16 -0
  365. package/dist/planning/types.js +17 -0
  366. package/package.json +1 -1
  367. package/dist/cli/chunks/adapter-IYC62SXA.js +0 -2
  368. package/dist/cli/chunks/agent-booster-wasm-EDNKP3SP.js +0 -2
  369. package/dist/cli/chunks/aqe-learning-engine-LLOU2IXD.js +0 -2
  370. package/dist/cli/chunks/audit-CVZQMF55.js +0 -3
  371. package/dist/cli/chunks/base-P3Z4IKCT.js +0 -2
  372. package/dist/cli/chunks/browser-workflow-YYHQQ25X.js +0 -2
  373. package/dist/cli/chunks/chunk-5WOSWNDN.js +0 -2
  374. package/dist/cli/chunks/chunk-7CD7PBHY.js +0 -3
  375. package/dist/cli/chunks/chunk-7X7JYWT4.js +0 -27
  376. package/dist/cli/chunks/chunk-J27F4NSB.js +0 -2
  377. package/dist/cli/chunks/chunk-MI5Q55DG.js +0 -65
  378. package/dist/cli/chunks/chunk-UDHVCKGA.js +0 -5
  379. package/dist/cli/chunks/chunk-XQSIRBKT.js +0 -180
  380. package/dist/cli/chunks/chunk-ZBABIZ2D.js +0 -2
  381. package/dist/cli/chunks/claude-flow-setup-5LVJOFKP.js +0 -2
  382. package/dist/cli/chunks/client-HUVFA5PF.js +0 -2
  383. package/dist/cli/chunks/core-handlers-UEXO3VAA.js +0 -2
  384. package/dist/cli/chunks/cross-domain-router-ODU5IZD6.js +0 -2
  385. package/dist/cli/chunks/domain-transfer-JZA5TMW3.js +0 -2
  386. package/dist/cli/chunks/dream-HE3OX42F.js +0 -2
  387. package/dist/cli/chunks/heartbeat-scheduler-QUIFGGLX.js +0 -2
  388. package/dist/cli/chunks/hnsw-adapter-42KB37KP.js +0 -2
  389. package/dist/cli/chunks/hnsw-index-T2PGO77J.js +0 -2
  390. package/dist/cli/chunks/hybrid-backend-FRNWYRKH.js +0 -2
  391. package/dist/cli/chunks/impact-analyzer-A5QYOYBR.js +0 -2
  392. package/dist/cli/chunks/init-wizard-XBU674YH.js +0 -2
  393. package/dist/cli/chunks/kernel-DV5MTNZD.js +0 -2
  394. package/dist/cli/chunks/knowledge-graph-4ACGVJQK.js +0 -2
  395. package/dist/cli/chunks/llm-router-service-PSMASERT.js +0 -2
  396. package/dist/cli/chunks/load-test-MRUO2VPF.js +0 -2
  397. package/dist/cli/chunks/mcp-JGSFCEMH.js +0 -2
  398. package/dist/cli/chunks/memory-backend-2MPGI6JW.js +0 -2
  399. package/dist/cli/chunks/memory-handlers-XT4HMITB.js +0 -2
  400. package/dist/cli/chunks/multi-model-executor-26Q5BSVG.js +0 -14
  401. package/dist/cli/chunks/orchestrator-D5IFV65I.js +0 -393
  402. package/dist/cli/chunks/pattern-null-store-TGWUL237.js +0 -2
  403. package/dist/cli/chunks/protocol-executor-GEVH5KD6.js +0 -2
  404. package/dist/cli/chunks/qe-reasoning-bank-DJ2JL6QB.js +0 -2
  405. package/dist/cli/chunks/queen-coordinator-F7E3AS26.js +0 -2
  406. package/dist/cli/chunks/router-OZH3QSAU.js +0 -2
  407. package/dist/cli/chunks/routing-feedback-J2E3ADZB.js +0 -2
  408. package/dist/cli/chunks/rvf-dual-writer-HK525Y5Y.js +0 -2
  409. package/dist/cli/chunks/rvf-migration-adapter-Q7FB3BKR.js +0 -2
  410. package/dist/cli/chunks/rvf-native-adapter-5ZRCGUI6.js +0 -2
  411. package/dist/cli/chunks/safe-db-3OYEPVEH.js +0 -2
  412. package/dist/cli/chunks/schedule-AG4C2EIQ.js +0 -2
  413. package/dist/cli/chunks/scheduler-SQS2CZFZ.js +0 -2
  414. package/dist/cli/chunks/shared-rvf-adapter-NFL6QSZ6.js +0 -2
  415. package/dist/cli/chunks/sqlite-persistence-MAKDFSHC.js +0 -2
  416. package/dist/cli/chunks/sync-MBTW5XBF.js +0 -2
  417. package/dist/cli/chunks/token-bootstrap-SSDCYEKK.js +0 -2
  418. package/dist/cli/chunks/tree-sitter-wasm-parser-J6ZMAK37.js +0 -2
  419. package/dist/cli/chunks/unified-memory-DDWMC435.js +0 -2
  420. package/dist/cli/chunks/unified-memory-hnsw-4JA7SGBK.js +0 -2
  421. package/dist/cli/chunks/unified-persistence-F6OSNTXY.js +0 -2
  422. package/dist/cli/chunks/visual-security-25SMBIYT.js +0 -2
  423. package/dist/cli/chunks/witness-chain-PJOQPFUX.js +0 -2
  424. package/dist/cli/chunks/witness-chain-ZW6KKUZU.js +0 -2
  425. package/dist/cli/chunks/workflow-orchestrator-UKSIDM7Q.js +0 -2
  426. package/dist/cli/chunks/wrappers-UR7BLXKV.js +0 -2
@@ -1,5 +1,5 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.5");process.exit(0)}
2
- import"./chunk-73EI4C2E.js";import{b as $}from"./chunk-R74ZKREV.js";import{d as C}from"./chunk-XUR2M2WB.js";import{b as k,c as W,d as v}from"./chunk-QRCIZFNK.js";import{c as b}from"./chunk-IJHCIXJC.js";import"./chunk-XEZIIQYJ.js";import"./chunk-J5UNP6W3.js";import"./chunk-JSZ663MU.js";import{Command as D}from"commander";import o from"chalk";function O(w,i){let h=w.indexOf("=");return h>0&&(i[w.substring(0,h)]=w.substring(h+1)),i}function V(w,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.6");process.exit(0)}
2
+ import"./chunk-L4RUBPLR.js";import{b as $}from"./chunk-D45SG6CP.js";import{d as C}from"./chunk-DK4XN4CU.js";import{b as k,c as W,d as v}from"./chunk-SPV2VKC5.js";import{c as b}from"./chunk-AIRGNL55.js";import"./chunk-KNNISEDY.js";import"./chunk-MJS53PRX.js";import"./chunk-64VGZQLB.js";import{Command as D}from"commander";import o from"chalk";function O(w,i){let h=w.indexOf("=");return h>0&&(i[w.substring(0,h)]=w.substring(h+1)),i}function V(w,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
3
3
  Running workflow from: ${n}
4
4
  `));let l=k(u);if(!l.success||!l.workflow){console.log(o.red("Failed to parse pipeline:"));for(let g of l.errors)console.log(o.red(` ${g}`));await i(1)}let f={...b(t.params,"params")};if(l.pipeline){for(let g of l.pipeline.stages)if(g.params)for(let[y,p]of Object.entries(g.params))f[y]=p}if(!w.workflowOrchestrator.getWorkflow(l.workflow.id)){let g=w.workflowOrchestrator.registerWorkflow(l.workflow);g.success||(console.log(o.red(`Failed to register workflow: ${g.error.message}`)),await i(1))}let c=await w.workflowOrchestrator.executeWorkflow(l.workflow.id,f);if(!c.success){console.log(o.red(`Failed to start workflow: ${c.error.message}`)),await i(1);return}let a=c.value;if(console.log(o.cyan(` Execution ID: ${a}`)),console.log(o.gray(` Workflow: ${l.workflow.name}`)),console.log(o.gray(` Stages: ${l.workflow.steps.length}`)),console.log(""),t.watch){console.log(o.blue(`Workflow Progress:
5
5
  `));let g,y=Date.now();for(;;){let d=w.workflowOrchestrator.getWorkflowStatus(a);if(!d)break;if(!g||g.progress!==d.progress||g.status!==d.status||JSON.stringify(g.currentSteps)!==JSON.stringify(d.currentSteps)){process.stdout.write("\r\x1B[K");let S="\u2588".repeat(Math.floor(d.progress/5))+"\u2591".repeat(20-Math.floor(d.progress/5)),R=d.status==="completed"?o.green:d.status==="failed"?o.red:d.status==="running"?o.yellow:o.gray;console.log(` [${S}] ${d.progress}% - ${R(d.status)}`),d.currentSteps.length>0&&t.verbose&&console.log(o.gray(` Running: ${d.currentSteps.join(", ")}`)),g=d}if(d.status==="completed"||d.status==="failed"||d.status==="cancelled")break;await new Promise(S=>setTimeout(S,500))}let p=w.workflowOrchestrator.getWorkflowStatus(a);if(p){console.log("");let d=p.duration||Date.now()-y;p.status==="completed"?(console.log(o.green("Workflow completed successfully")),console.log(o.gray(` Duration: ${$(d)}`)),console.log(o.gray(` Completed: ${p.completedSteps.length} stages`)),p.skippedSteps.length>0&&console.log(o.yellow(` Skipped: ${p.skippedSteps.length} stages`))):p.status==="failed"?(console.log(o.red("Workflow failed")),console.log(o.red(` Error: ${p.error}`)),console.log(o.gray(` Failed stages: ${p.failedSteps.join(", ")}`))):console.log(o.yellow(`Workflow ${p.status}`))}console.log(""),await i(p?.status==="completed"?0:1);return}else console.log(o.green("Workflow execution started")),console.log(o.gray(` Use 'aqe workflow status ${a}' to check progress`));console.log(""),await i(0)}catch(l){console.error(o.red(`
@@ -35,10 +35,10 @@ Workflow cancelled: ${n}
35
35
  `)):console.log(o.red(`
36
36
  Failed to cancel workflow: ${t.error.message}
37
37
  `)),await i(t.success?0:1)}catch(t){console.error(o.red(`
38
- Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-YYHQQ25X.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
38
+ Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-CJ7T3MXF.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
39
39
  Browser Workflow Templates:
40
40
  `));for(let u of e.data.availableTemplates)console.log(` ${o.cyan(u)}`);console.log("")}else console.log(o.red(`Failed: ${e.error||"Unknown error"}`));await i(0)}catch(n){console.error(o.red(`
41
- Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-YYHQQ25X.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-EHRSZBKG.js"),s=new e,f={variables:t.var||{}};if(t.yaml)f.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let c=await import("fs"),g=(await import("path")).resolve(n);c.existsSync(g)||(console.log(o.red(`
41
+ Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-CJ7T3MXF.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-LDT24TS3.js"),s=new e,f={variables:t.var||{}};if(t.yaml)f.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let c=await import("fs"),g=(await import("path")).resolve(n);c.existsSync(g)||(console.log(o.red(`
42
42
  File not found: ${g}
43
43
  `)),await i(1)),f.workflowYaml=c.readFileSync(g,"utf-8")}else f.templateName=n;else console.log(o.red(`
44
44
  Provide a template name or --yaml. Use "workflow browser-list" to see templates.
@@ -0,0 +1,2 @@
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.6");process.exit(0)}
2
+ import{a,b,c,d}from"./chunk-GSF6MB64.js";import"./chunk-DHVX5UB2.js";import"./chunk-2JVWITNK.js";import"./chunk-Q5XTSMWR.js";import"./chunk-AIRGNL55.js";import"./chunk-QW6VMTBR.js";import"./chunk-SDRHUMJB.js";import"./chunk-KNNISEDY.js";import"./chunk-TCHGOB2N.js";import"./chunk-FBMN7B46.js";import"./chunk-ENGZ4D5V.js";import"./chunk-MJS53PRX.js";import"./chunk-DPYSUDAO.js";import"./chunk-PI7TJS62.js";import"./chunk-EAY2JMZG.js";import"./chunk-C6KWXUFJ.js";import"./chunk-IB27QACC.js";import"./chunk-6SH5VZUD.js";import"./chunk-SESK3ARK.js";import"./chunk-SNOBH4AZ.js";import"./chunk-IQO7UCFR.js";import"./chunk-DUYOVM5I.js";import"./chunk-64VGZQLB.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
@@ -0,0 +1,2 @@
1
+ import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.6");process.exit(0)}
2
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-UKA2KOXE.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-VGFFFKGK.js";import"./chunk-2JVWITNK.js";import"./chunk-Q5XTSMWR.js";import"./chunk-AIRGNL55.js";import"./chunk-QW6VMTBR.js";import"./chunk-SDRHUMJB.js";import"./chunk-TCHGOB2N.js";import"./chunk-FBMN7B46.js";import"./chunk-ENGZ4D5V.js";import"./chunk-MJS53PRX.js";import"./chunk-PI7TJS62.js";import"./chunk-EAY2JMZG.js";import"./chunk-C6KWXUFJ.js";import"./chunk-IB27QACC.js";import"./chunk-6SH5VZUD.js";import"./chunk-SESK3ARK.js";import"./chunk-SNOBH4AZ.js";import"./chunk-IQO7UCFR.js";import"./chunk-DUYOVM5I.js";import"./chunk-64VGZQLB.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
@@ -4,7 +4,8 @@
4
4
  * Verifies the witness chain audit trail integrity.
5
5
  * Shows chain length, integrity status, and last receipt hash.
6
6
  *
7
- * Usage: aqe audit verify [--format json|text]
7
+ * Usage: aqe audit verify [--chain governance|audit] [--format json|text]
8
+ * aqe audit repair --chain audit [--dry-run] [--format json|text]
8
9
  *
9
10
  * @module cli/commands/audit
10
11
  * @see ADR-083-coherence-gated-agent-actions.md
@@ -12,6 +13,8 @@
12
13
  import { Command } from 'commander';
13
14
  import { type ChainVerificationResult } from '../../governance/witness-chain.js';
14
15
  import type { CLIContext } from '../handlers/interfaces.js';
16
+ import type { ChainStatus } from '../../audit/witness-chain-verifier.js';
17
+ import type { RepairResult } from '../../audit/witness-chain-repair.js';
15
18
  /**
16
19
  * Verification output for JSON format.
17
20
  */
@@ -22,11 +25,17 @@ export interface AuditVerifyOutput {
22
25
  brokenAt: number;
23
26
  lastHash: string;
24
27
  message: string;
28
+ status?: ChainStatus;
29
+ tampered?: boolean;
30
+ tamperedAt?: number;
31
+ tamperReason?: string;
32
+ forks?: number[];
33
+ acknowledgedForks?: number[];
25
34
  }
26
35
  /**
27
36
  * Format verification result as human-readable text.
28
37
  */
29
- export declare function formatVerificationText(result: ChainVerificationResult, featureEnabled: boolean): string;
38
+ export declare function formatVerificationText(result: ChainVerificationResult, featureEnabled: boolean, audit?: Pick<AuditVerifyOutput, 'status' | 'tamperedAt' | 'tamperReason' | 'forks' | 'acknowledgedForks'>): string;
30
39
  /**
31
40
  * Handle the audit verify command.
32
41
  *
@@ -48,6 +57,15 @@ export declare function handleAuditVerify(options: {
48
57
  export declare function handleAuditChainVerify(options: {
49
58
  format?: 'json' | 'text';
50
59
  }): Promise<AuditVerifyOutput>;
60
+ /**
61
+ * `aqe audit repair --chain audit`: re-anchor a store whose only breaks are
62
+ * accidental pre-3.14.5 forks (#753). Refuses on tampering, backs up first,
63
+ * never rewrites existing rows. See src/audit/witness-chain-repair.ts.
64
+ */
65
+ export declare function handleAuditChainRepair(options: {
66
+ format?: 'json' | 'text';
67
+ dryRun?: boolean;
68
+ }): Promise<RepairResult>;
51
69
  /**
52
70
  * Create the audit command group following the project convention.
53
71
  */
@@ -4,7 +4,8 @@
4
4
  * Verifies the witness chain audit trail integrity.
5
5
  * Shows chain length, integrity status, and last receipt hash.
6
6
  *
7
- * Usage: aqe audit verify [--format json|text]
7
+ * Usage: aqe audit verify [--chain governance|audit] [--format json|text]
8
+ * aqe audit repair --chain audit [--dry-run] [--format json|text]
8
9
  *
9
10
  * @module cli/commands/audit
10
11
  * @see ADR-083-coherence-gated-agent-actions.md
@@ -18,7 +19,7 @@ import path from 'node:path';
18
19
  /**
19
20
  * Format verification result as human-readable text.
20
21
  */
21
- export function formatVerificationText(result, featureEnabled) {
22
+ export function formatVerificationText(result, featureEnabled, audit) {
22
23
  const lines = [];
23
24
  lines.push(chalk.bold('Witness Chain Audit Verification'));
24
25
  lines.push('');
@@ -30,20 +31,36 @@ export function formatVerificationText(result, featureEnabled) {
30
31
  // Chain length
31
32
  lines.push(` Chain Length: ${result.length} receipts`);
32
33
  // Integrity status
33
- const integrityStatus = result.valid
34
- ? chalk.green('VALID')
35
- : chalk.red('BROKEN');
34
+ const integrityStatus = audit?.status === 'forked'
35
+ ? chalk.yellow('FORKED (no tampering detected)')
36
+ : result.valid
37
+ ? chalk.green(audit?.status === 'valid-with-forks' ? 'VALID (forks re-anchored)' : 'VALID')
38
+ : chalk.red(audit?.status === 'tampered' ? 'BROKEN (tampering detected)' : 'BROKEN');
36
39
  lines.push(` Integrity: ${integrityStatus}`);
37
40
  // Last hash
38
41
  if (result.length > 0) {
39
42
  lines.push(` Last Hash: ${result.lastHash.slice(0, 16)}...`);
40
43
  }
44
+ const forkCount = audit?.forks?.length ?? 0;
45
+ if (forkCount > 0) {
46
+ const reanchored = audit?.acknowledgedForks?.length ?? 0;
47
+ lines.push(` Forks: ${forkCount} accidental (pre-3.14.5 concurrent writes, #753), ${reanchored} re-anchored`);
48
+ }
41
49
  // Details
42
- if (!result.valid && result.brokenAt >= 0) {
50
+ if (audit?.status === 'forked') {
51
+ lines.push('');
52
+ lines.push(chalk.yellow(` ${result.message}`));
53
+ }
54
+ else if (!result.valid && result.brokenAt >= 0) {
43
55
  lines.push('');
44
- lines.push(chalk.red(` Break detected at index ${result.brokenAt}`));
56
+ const at = audit?.status === 'tampered' && audit.tamperedAt !== undefined ? audit.tamperedAt : result.brokenAt;
57
+ lines.push(chalk.red(` Break detected at index ${at}${audit?.tamperReason ? ` (${audit.tamperReason})` : ''}`));
45
58
  lines.push(chalk.red(` ${result.message}`));
46
59
  }
60
+ else if (result.valid && forkCount > 0) {
61
+ lines.push('');
62
+ lines.push(chalk.green(` ${result.message}`));
63
+ }
47
64
  lines.push('');
48
65
  return lines.join('\n');
49
66
  }
@@ -109,8 +126,7 @@ export async function handleAuditVerify(options) {
109
126
  */
110
127
  export async function handleAuditChainVerify(options) {
111
128
  const { WitnessChain, hashWith, serializeEntry } = await import('../../audit/witness-chain.js');
112
- const root = findProjectRoot();
113
- const dbPath = path.join(root, '.agentic-qe', 'memory.db');
129
+ const { dbPath, keyDir } = auditChainPaths();
114
130
  let output;
115
131
  if (!existsSync(dbPath)) {
116
132
  output = {
@@ -126,10 +142,15 @@ export async function handleAuditChainVerify(options) {
126
142
  const { default: Database } = await import('better-sqlite3');
127
143
  const db = new Database(dbPath, { readonly: true });
128
144
  try {
129
- const chain = new WitnessChain(db);
145
+ const chain = new WitnessChain(db, (await loadReadOnlyKeyManager(keyDir)) ?? undefined);
130
146
  await chain.initialize();
131
- const result = chain.verify({ includeArchive: true, checkSignatures: true });
132
- const lastEntry = db.prepare('SELECT * FROM witness_chain ORDER BY id DESC LIMIT 1').get();
147
+ // Fork and CHAIN_REANCHOR rows signed by a key in witness-keys/ are always
148
+ // signature-checked. The every-row `checkSignatures` sweep stays off, as it
149
+ // effectively was before this command loaded keys: it would fail rows
150
+ // signed by keys this project never stored (e.g. imported rows).
151
+ const result = chain.verify({ includeArchive: true, checkSignatures: false });
152
+ const { tableExists } = await import('../../audit/witness-chain-verifier.js');
153
+ const lastEntry = !tableExists(db, 'witness_chain') ? undefined : db.prepare('SELECT * FROM witness_chain ORDER BY id DESC LIMIT 1').get();
133
154
  const lastHash = lastEntry
134
155
  ? hashWith(lastEntry.hash_algo || 'sha256', serializeEntry(lastEntry))
135
156
  : '';
@@ -139,9 +160,13 @@ export async function handleAuditChainVerify(options) {
139
160
  integrity: result.valid,
140
161
  brokenAt: result.brokenAt ?? -1,
141
162
  lastHash,
142
- message: result.valid
143
- ? `Audit chain verified: ${result.entriesChecked} entries checked, ${result.signatureFailures ?? 0} signature failures`
144
- : `Audit chain BROKEN at id=${result.brokenAt} (${result.entriesChecked} entries checked before the break)`,
163
+ message: auditChainMessage(result),
164
+ status: result.status,
165
+ tampered: result.tampered,
166
+ ...(result.tamperedAt !== undefined ? { tamperedAt: result.tamperedAt } : {}),
167
+ ...(result.tamperReason ? { tamperReason: result.tamperReason } : {}),
168
+ forks: result.forks,
169
+ acknowledgedForks: result.acknowledgedForks,
145
170
  };
146
171
  }
147
172
  finally {
@@ -152,10 +177,103 @@ export async function handleAuditChainVerify(options) {
152
177
  console.log(JSON.stringify(output, null, 2));
153
178
  }
154
179
  else {
155
- console.log(formatVerificationText({ valid: output.integrity, length: output.chainLength, brokenAt: output.brokenAt, lastHash: output.lastHash, message: output.message }, output.featureEnabled));
180
+ console.log(formatVerificationText({ valid: output.integrity, length: output.chainLength, brokenAt: output.brokenAt, lastHash: output.lastHash, message: output.message }, output.featureEnabled, output));
156
181
  }
157
182
  return output;
158
183
  }
184
+ function auditChainPaths() {
185
+ const root = findProjectRoot();
186
+ return {
187
+ dbPath: path.join(root, '.agentic-qe', 'memory.db'),
188
+ keyDir: path.join(root, '.agentic-qe', 'witness-keys'),
189
+ };
190
+ }
191
+ /** Persisted witness keys, loaded without generating (or writing) anything. */
192
+ async function loadReadOnlyKeyManager(keyDir) {
193
+ if (!existsSync(keyDir))
194
+ return null;
195
+ const { WitnessKeyManager: KeyManager } = await import('../../audit/witness-key-manager.js');
196
+ return new KeyManager({ keyDir, autoGenerate: false });
197
+ }
198
+ function auditChainMessage(result) {
199
+ const n = result.entriesChecked;
200
+ const forks = result.forks.length;
201
+ const pending = forks - result.acknowledgedForks.length;
202
+ switch (result.status) {
203
+ case 'valid':
204
+ return `Audit chain verified: ${n} entries checked, ${result.signatureFailures ?? 0} signature failures`;
205
+ case 'valid-with-forks':
206
+ return `Audit chain verified: ${n} entries checked; ${forks} accidental fork(s) from pre-3.14.5 ` +
207
+ 'concurrent writes are re-anchored by CHAIN_REANCHOR, no tampering detected';
208
+ case 'forked':
209
+ return `${pending} accidental fork(s) (pre-3.14.5 concurrent writes, #753), no tampering detected — ` +
210
+ `${n} entries checked, first fork at id=${result.brokenAt}. ` +
211
+ 'Run `aqe audit repair --chain audit` to back up the store and re-anchor.';
212
+ default:
213
+ return `Audit chain BROKEN: tampering detected at id=${result.tamperedAt} (${result.tamperReason}); ` +
214
+ `${n} entries checked` + (forks > 0 ? `, ${forks} accidental fork(s) found before it` : '');
215
+ }
216
+ }
217
+ function repairFailed(result) {
218
+ if (result.action === 'refused')
219
+ return true;
220
+ return result.action === 'reanchored' && !(result.after?.status === 'valid' || result.after?.status === 'valid-with-forks');
221
+ }
222
+ /**
223
+ * `aqe audit repair --chain audit`: re-anchor a store whose only breaks are
224
+ * accidental pre-3.14.5 forks (#753). Refuses on tampering, backs up first,
225
+ * never rewrites existing rows. See src/audit/witness-chain-repair.ts.
226
+ */
227
+ export async function handleAuditChainRepair(options) {
228
+ const { repairWitnessChainForks } = await import('../../audit/witness-chain-repair.js');
229
+ const { dbPath, keyDir } = auditChainPaths();
230
+ const dryRun = options.dryRun === true;
231
+ let result;
232
+ if (!existsSync(dbPath)) {
233
+ const empty = { status: 'valid', entriesChecked: 0, forks: 0, unacknowledgedForks: 0 };
234
+ result = {
235
+ action: 'none', dryRun, message: `No database found at ${dbPath} — nothing to repair`,
236
+ before: empty, rowsBefore: { live: 0, archive: 0 }, rowsAfter: { live: 0, archive: 0 }, forksAcknowledged: [],
237
+ };
238
+ }
239
+ else {
240
+ const { openDatabase } = await import('../../shared/safe-db.js');
241
+ // A dry run opens read-only and never generates a signing key.
242
+ const db = openDatabase(dbPath, { readonly: dryRun, fileMustExist: true });
243
+ try {
244
+ const keyManager = dryRun
245
+ ? await loadReadOnlyKeyManager(keyDir)
246
+ : (await import('../../audit/witness-key-manager.js')).getDefaultWitnessKeyManager();
247
+ result = await repairWitnessChainForks(db, { dbPath, dryRun, keyManager });
248
+ }
249
+ finally {
250
+ db.close();
251
+ }
252
+ }
253
+ if (options.format === 'json') {
254
+ console.log(JSON.stringify(result, null, 2));
255
+ }
256
+ else {
257
+ console.log(formatRepairText(result));
258
+ }
259
+ return result;
260
+ }
261
+ function formatRepairText(result) {
262
+ const color = result.action === 'refused' ? chalk.red : result.action === 'reanchored' ? chalk.green : chalk.yellow;
263
+ const lines = [
264
+ chalk.bold('Witness Chain Audit Repair'),
265
+ '',
266
+ ` Action: ${color(result.action.toUpperCase())}${result.dryRun ? ' (dry run)' : ''}`,
267
+ ` Before: ${result.before.status}, ${result.before.forks} fork(s), ${result.before.unacknowledgedForks} unacknowledged`,
268
+ ` Rows: live ${result.rowsBefore.live} -> ${result.rowsAfter.live}, archive ${result.rowsBefore.archive} -> ${result.rowsAfter.archive}`,
269
+ ];
270
+ if (result.after)
271
+ lines.push(` After: ${result.after.status}`);
272
+ if (result.backupPath)
273
+ lines.push(` Backup: ${result.backupPath}`);
274
+ lines.push('', ` ${color(result.message)}`, '');
275
+ return lines.join('\n');
276
+ }
159
277
  /**
160
278
  * Create the audit command group following the project convention.
161
279
  */
@@ -180,6 +298,30 @@ export function createAuditCommand(_context, cleanupAndExit, _ensureInitialized)
180
298
  await cleanupAndExit(1);
181
299
  }
182
300
  });
301
+ audit
302
+ .command('repair')
303
+ .description('Re-anchor accidental pre-3.14.5 forks in the audit chain (#753); backs up first, refuses on tampering')
304
+ .option('-C, --chain <chain>', 'Chain to repair (only "audit" is supported)', 'audit')
305
+ .option('--dry-run', 'Report what would be done without writing anything', false)
306
+ .option('-F, --format <format>', 'Output format (json|text)', 'text')
307
+ .action(async (options) => {
308
+ try {
309
+ if (options.chain !== 'audit') {
310
+ console.error(`aqe audit repair supports only --chain audit (got "${options.chain}")`);
311
+ await cleanupAndExit(1);
312
+ return;
313
+ }
314
+ const result = await handleAuditChainRepair({
315
+ format: options.format,
316
+ dryRun: options.dryRun === true,
317
+ });
318
+ await cleanupAndExit(repairFailed(result) ? 1 : 0);
319
+ }
320
+ catch (error) {
321
+ console.error('Failed to repair witness chain:', error);
322
+ await cleanupAndExit(1);
323
+ }
324
+ });
183
325
  return audit;
184
326
  }
185
327
  //# sourceMappingURL=audit.js.map
@@ -16,7 +16,8 @@
16
16
  * - Rule-based model routing
17
17
  * - Local pattern learning
18
18
  */
19
- import { existsSync, writeFileSync, readFileSync } from 'node:fs';
19
+ import { existsSync, readFileSync } from 'node:fs';
20
+ import { writeFileIfChanged } from '../../init/idempotent-write.js';
20
21
  import { join } from 'node:path';
21
22
  import { safeJsonParse } from '../../shared/safe-json.js';
22
23
  import { toErrorMessage } from '../../shared/error-utils.js';
@@ -143,8 +144,8 @@ function updateMCPConfig(projectRoot) {
143
144
  env: {},
144
145
  };
145
146
  }
146
- // Write updated settings
147
- writeFileSync(claudeSettingsPath, JSON.stringify(settings, null, 2));
147
+ // Write updated settings — only when something changed (#778).
148
+ writeFileIfChanged(claudeSettingsPath, JSON.stringify(settings, null, 2));
148
149
  }
149
150
  // ============================================================================
150
151
  // Main Setup Function
@@ -195,7 +196,7 @@ export async function setupClaudeFlowIntegration(options) {
195
196
  const configPath = join(aqeDir, 'claude-flow-integration.json');
196
197
  try {
197
198
  const config = generateClaudeFlowConfig(projectRoot, features);
198
- writeFileSync(configPath, JSON.stringify(config, null, 2));
199
+ writeFileIfChanged(configPath, JSON.stringify(config, null, 2));
199
200
  if (debug)
200
201
  console.log(`[ClaudeFlow] Config written to: ${configPath}`);
201
202
  }
package/dist/cli/index.js CHANGED
@@ -21,6 +21,7 @@ import { ALL_DOMAINS } from '../shared/types/index.js';
21
21
  // ============================================================================
22
22
  import { applyCommandVerbosity, installCliLogGate, isCliLogLevelEnabled } from './log-gate.js';
23
23
  import { LogLevel } from '../logging/index.js';
24
+ import { formatErrorForLog } from '../logging/redaction.js';
24
25
  installCliLogGate();
25
26
  // ============================================================================
26
27
  // CLI State
@@ -420,7 +421,7 @@ async function main() {
420
421
  await cleanupAndExit(process.exitCode ?? 0);
421
422
  }
422
423
  main().catch(async (error) => {
423
- console.error(chalk.red('Fatal error:'), error);
424
+ console.error(chalk.red('Fatal error:'), formatErrorForLog(error));
424
425
  await cleanupAndExit(1);
425
426
  });
426
427
  //# sourceMappingURL=index.js.map
@@ -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
  /**
@@ -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