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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +76 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/ag-ui/event-types.d.ts +1 -1
- package/dist/audit/witness-chain-hash.d.ts +18 -0
- package/dist/audit/witness-chain-hash.js +37 -0
- package/dist/audit/witness-chain-repair.d.ts +71 -0
- package/dist/audit/witness-chain-repair.js +203 -0
- package/dist/audit/witness-chain-verifier.d.ts +152 -0
- package/dist/audit/witness-chain-verifier.js +293 -0
- package/dist/audit/witness-chain.d.ts +10 -43
- package/dist/audit/witness-chain.js +16 -106
- package/dist/audit/witness-findings.js +4 -1
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-UYOJPTOX.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-2YGML6OU.js +2 -0
- package/dist/cli/chunks/{agent-handler-V6CZ7Q6S.js → agent-handler-D5SSQYNU.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-ZMD6ULC3.js → agent-memory-branch-YHPLTITV.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-JR5AVQXR.js +2 -0
- package/dist/cli/chunks/{arena-QLSBESC7.js → arena-7BGOXGXO.js} +2 -2
- package/dist/cli/chunks/{arena-4UPAEHFT.js → arena-MCE6EU7K.js} +4 -4
- package/dist/cli/chunks/audit-BMWTQECB.js +4 -0
- package/dist/cli/chunks/base-DRZ2LS6X.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-4DSBPDRH.js → better-sqlite3-PMUNGASU.js} +2 -2
- package/dist/cli/chunks/{brain-handler-GBY4EZ4P.js → brain-handler-QPUFYX7F.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-XYBVXCNO.js → branch-enumerator-WKFDGRN4.js} +2 -2
- package/dist/cli/chunks/{browser-32F6MREU.js → browser-VY5HKH5X.js} +2 -2
- package/dist/cli/chunks/browser-workflow-CJ7T3MXF.js +2 -0
- package/dist/cli/chunks/{chunk-C3Z4VVHP.js → chunk-257E2A5M.js} +5 -5
- package/dist/cli/chunks/{chunk-EFV4ADMO.js → chunk-2JVWITNK.js} +2 -2
- package/dist/cli/chunks/{chunk-IGBEJ4UJ.js → chunk-2NPKIBAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-KIP6WZGV.js → chunk-2TMWAQQ3.js} +3 -3
- package/dist/cli/chunks/{chunk-DLF5BOJD.js → chunk-2YXGBZWV.js} +1 -1
- package/dist/cli/chunks/{chunk-KEY43ANX.js → chunk-3EA536JF.js} +2 -2
- package/dist/cli/chunks/{chunk-WX6RRIGW.js → chunk-3EZOZN25.js} +2 -2
- package/dist/cli/chunks/{chunk-BYG36QC5.js → chunk-3HZS4M3O.js} +2 -2
- package/dist/cli/chunks/{chunk-G3L5L6YQ.js → chunk-3NIG7S5W.js} +1 -1
- package/dist/cli/chunks/{chunk-CZO4BJG5.js → chunk-4N23RFDU.js} +2 -2
- package/dist/cli/chunks/{chunk-QWUXCG2L.js → chunk-5J6W7SIA.js} +1 -1
- package/dist/cli/chunks/{chunk-RD2VGOUH.js → chunk-5OOMJGFN.js} +1 -1
- package/dist/cli/chunks/{chunk-YDFL445W.js → chunk-5QQSIGUA.js} +2 -2
- package/dist/cli/chunks/{chunk-TUSSPKRM.js → chunk-5VFPCSK7.js} +1 -1
- package/dist/cli/chunks/{chunk-WLXK2KNU.js → chunk-62N4NUJH.js} +2 -2
- package/dist/cli/chunks/{chunk-JSZ663MU.js → chunk-64VGZQLB.js} +1 -1
- package/dist/cli/chunks/{chunk-UMGFMKDW.js → chunk-66VWCR67.js} +2 -2
- package/dist/cli/chunks/{chunk-6ITZZIQX.js → chunk-6LIHFV7O.js} +2 -2
- package/dist/cli/chunks/{chunk-DKUBQQFG.js → chunk-6OS76PHI.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5L3ES4L.js → chunk-6RE3X4V5.js} +2 -2
- package/dist/cli/chunks/{chunk-CVMNJSCB.js → chunk-6SH5VZUD.js} +2 -2
- package/dist/cli/chunks/chunk-6SQM2MUX.js +4 -0
- package/dist/cli/chunks/{chunk-6CR4VQBQ.js → chunk-6U7LNMWZ.js} +2 -2
- package/dist/cli/chunks/{chunk-HYEJJJY3.js → chunk-72KXSMWI.js} +1 -1
- package/dist/cli/chunks/chunk-7CUQCCMD.js +27 -0
- package/dist/cli/chunks/chunk-7D3V65N5.js +2 -0
- package/dist/cli/chunks/{chunk-K7NJHFLZ.js → chunk-7J6QC567.js} +3 -3
- package/dist/cli/chunks/{chunk-6LKDHEBY.js → chunk-7LPR6HJG.js} +2 -2
- package/dist/cli/chunks/{chunk-RGGK6VZ7.js → chunk-7NITCZWD.js} +1 -1
- package/dist/cli/chunks/{chunk-IYTLXUBO.js → chunk-7Z5LHRC3.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCWERUYB.js → chunk-AHKELLIO.js} +3 -3
- package/dist/cli/chunks/{chunk-IJHCIXJC.js → chunk-AIRGNL55.js} +2 -2
- package/dist/cli/chunks/{chunk-2OMLTYQK.js → chunk-AJRUJAAK.js} +1 -1
- package/dist/cli/chunks/{chunk-QYOGD2VW.js → chunk-AVBJYI5I.js} +1 -1
- package/dist/cli/chunks/{chunk-PSPKSUF6.js → chunk-B6D2CHEH.js} +1 -1
- package/dist/cli/chunks/{chunk-M23ZOZVY.js → chunk-B6MOJC3X.js} +1 -1
- package/dist/cli/chunks/{chunk-VD5IO5EO.js → chunk-BAMN2CHI.js} +1 -1
- package/dist/cli/chunks/{chunk-KO4FNAUR.js → chunk-BBT64TII.js} +3 -3
- package/dist/cli/chunks/{chunk-7JZJJA7U.js → chunk-BJTJLJRZ.js} +3 -3
- package/dist/cli/chunks/{chunk-LULD4JV2.js → chunk-BMAPORJ7.js} +2 -2
- package/dist/cli/chunks/{chunk-GTKCGPJZ.js → chunk-BPEDWS6O.js} +2 -2
- package/dist/cli/chunks/{chunk-3DDXWYMO.js → chunk-BVR7RMC5.js} +1 -1
- package/dist/cli/chunks/{chunk-52L77RMG.js → chunk-C6KWXUFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-BJPL6THQ.js → chunk-CCK4BF76.js} +1 -1
- package/dist/cli/chunks/{chunk-RP2ZKPYV.js → chunk-CD542DNJ.js} +1 -1
- package/dist/cli/chunks/{chunk-AFEDJ3RU.js → chunk-CF2ISEOJ.js} +2 -2
- package/dist/cli/chunks/chunk-CM7U6TAX.js +5 -0
- package/dist/cli/chunks/{chunk-R74ZKREV.js → chunk-D45SG6CP.js} +1 -1
- package/dist/cli/chunks/{chunk-YXP6BKGS.js → chunk-D6CJIGRU.js} +89 -83
- package/dist/cli/chunks/{chunk-NVYBM3R4.js → chunk-DBDPRORT.js} +2 -2
- package/dist/cli/chunks/{chunk-CYE2TJFV.js → chunk-DHVX5UB2.js} +2 -2
- package/dist/cli/chunks/{chunk-XUR2M2WB.js → chunk-DK4XN4CU.js} +2 -2
- package/dist/cli/chunks/{chunk-W2XCZU62.js → chunk-DPYSUDAO.js} +1 -1
- package/dist/cli/chunks/{chunk-WJHWH5D2.js → chunk-DUYOVM5I.js} +2 -2
- package/dist/cli/chunks/{chunk-XLAUGSW7.js → chunk-DZ3AUAAB.js} +2 -2
- package/dist/cli/chunks/{chunk-37TUN44F.js → chunk-E6G2RD5H.js} +2 -2
- package/dist/cli/chunks/{chunk-ELBZON4V.js → chunk-EAY2JMZG.js} +2 -2
- package/dist/cli/chunks/{chunk-HSVKZ5KI.js → chunk-ELLBS5RP.js} +2 -2
- package/dist/cli/chunks/chunk-ENGZ4D5V.js +2 -0
- package/dist/cli/chunks/chunk-FBMN7B46.js +4 -0
- package/dist/cli/chunks/{chunk-F34OAHOM.js → chunk-FWASDOT2.js} +2 -2
- package/dist/cli/chunks/{chunk-E4AZXCT5.js → chunk-FZOBD67M.js} +1 -1
- package/dist/cli/chunks/{chunk-QZMUXJHZ.js → chunk-GDSXITFH.js} +2 -2
- package/dist/cli/chunks/{chunk-LSUILON7.js → chunk-GGRHV6D7.js} +1 -1
- package/dist/cli/chunks/{chunk-3YUB5HER.js → chunk-GPYVDFB3.js} +101 -101
- package/dist/cli/chunks/{chunk-4FWTLJEP.js → chunk-GSF6MB64.js} +2 -2
- package/dist/cli/chunks/{chunk-3KDL6QDK.js → chunk-H52HZ67P.js} +2 -2
- package/dist/cli/chunks/{chunk-2JGEZHWY.js → chunk-H5BS5VH7.js} +2 -2
- package/dist/cli/chunks/{chunk-SQF6HRXR.js → chunk-H6ZM3PUT.js} +1 -1
- package/dist/cli/chunks/{chunk-OEIQTWQP.js → chunk-HM6ZSCPI.js} +1 -1
- package/dist/cli/chunks/{chunk-URVHZPWY.js → chunk-HNFVJP4I.js} +2 -2
- package/dist/cli/chunks/{chunk-RD6TEZ64.js → chunk-I33ERSGB.js} +2 -2
- package/dist/cli/chunks/{chunk-IUDWEOLX.js → chunk-IAF6T27S.js} +2 -2
- package/dist/cli/chunks/{chunk-XZSMZHM2.js → chunk-IB27QACC.js} +2 -2
- package/dist/cli/chunks/{chunk-I6X3EGJI.js → chunk-ICTXTNQZ.js} +1 -1
- package/dist/cli/chunks/chunk-IG5GNEC6.js +4 -0
- package/dist/cli/chunks/{chunk-6A44AOGN.js → chunk-IQO7UCFR.js} +2 -2
- package/dist/cli/chunks/{chunk-R6IU3EWP.js → chunk-IV5UZOHH.js} +2 -2
- package/dist/cli/chunks/{chunk-VTOVWHEM.js → chunk-JBTPOIAC.js} +2 -2
- package/dist/cli/chunks/{chunk-KLTP5IDB.js → chunk-JIXUMYKZ.js} +1 -1
- package/dist/cli/chunks/{chunk-3VIXOHMS.js → chunk-JMONHE4B.js} +1 -1
- package/dist/cli/chunks/{chunk-SX4JLSLV.js → chunk-JVNTSNWU.js} +2 -2
- package/dist/cli/chunks/{chunk-JVQBWYHW.js → chunk-JXGFRBUO.js} +2 -2
- package/dist/cli/chunks/{chunk-HVXJC3OC.js → chunk-JZOS5FCX.js} +2 -2
- package/dist/cli/chunks/{chunk-XEZIIQYJ.js → chunk-KNNISEDY.js} +1 -1
- package/dist/cli/chunks/{chunk-73EI4C2E.js → chunk-L4RUBPLR.js} +2 -2
- package/dist/cli/chunks/{chunk-AF4XKLXO.js → chunk-LL3IGZBI.js} +2 -2
- package/dist/cli/chunks/{chunk-UJWAWIRV.js → chunk-MBRHSU6W.js} +10 -10
- package/dist/cli/chunks/{chunk-J5UNP6W3.js → chunk-MJS53PRX.js} +2 -2
- package/dist/cli/chunks/{chunk-EOR2UT72.js → chunk-MQROI74N.js} +2 -2
- package/dist/cli/chunks/{chunk-BXVAVFGU.js → chunk-MUOG6QXR.js} +2 -2
- package/dist/cli/chunks/{chunk-O3JTQ7N4.js → chunk-MW2GGZZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-IIAR5S7Q.js → chunk-NHWGMJAP.js} +2 -2
- package/dist/cli/chunks/{chunk-WOIGKU2N.js → chunk-NMAIY4PX.js} +3 -3
- package/dist/cli/chunks/{chunk-QIRL6B3C.js → chunk-NQZ5AR3D.js} +2 -2
- package/dist/cli/chunks/{chunk-6TU7FEMD.js → chunk-P6OYS755.js} +1 -1
- package/dist/cli/chunks/{chunk-HVU64GP5.js → chunk-PI7TJS62.js} +2 -2
- package/dist/cli/chunks/{chunk-N7H767TP.js → chunk-PX5YDCRH.js} +2 -2
- package/dist/cli/chunks/{chunk-3EZ5DR2R.js → chunk-PZPWRQ2M.js} +2 -2
- package/dist/cli/chunks/{chunk-RKOUXVZZ.js → chunk-Q5XTSMWR.js} +2 -2
- package/dist/cli/chunks/{chunk-K27SU3RE.js → chunk-Q7EAGKAE.js} +2 -2
- package/dist/cli/chunks/{chunk-M5AEL7IS.js → chunk-QDFTT3RF.js} +2 -2
- package/dist/cli/chunks/{chunk-TY5WC3FT.js → chunk-QGA55PFM.js} +3 -3
- package/dist/cli/chunks/{chunk-NQI7FWCS.js → chunk-QW6VMTBR.js} +2 -2
- package/dist/cli/chunks/{chunk-BHFR2EXL.js → chunk-QZANMBIT.js} +1 -1
- package/dist/cli/chunks/{chunk-5D36YHS3.js → chunk-RETBYIAC.js} +4 -4
- package/dist/cli/chunks/{chunk-UKGXWW64.js → chunk-RFNPJK6N.js} +3 -3
- package/dist/cli/chunks/{chunk-G3W6BMVJ.js → chunk-RG52OKAM.js} +1 -1
- package/dist/cli/chunks/{chunk-DO6EI5KB.js → chunk-RSXXCL4A.js} +1 -1
- package/dist/cli/chunks/{chunk-E3W6XQ57.js → chunk-RTFO5UQH.js} +2 -2
- package/dist/cli/chunks/{chunk-DDCIYOGT.js → chunk-RZZCUIAI.js} +2 -2
- package/dist/cli/chunks/{chunk-C3HQL6S4.js → chunk-SDRHUMJB.js} +2 -2
- package/dist/cli/chunks/{chunk-KYA5LARK.js → chunk-SE4WIB26.js} +1 -1
- package/dist/cli/chunks/{chunk-NU7UTXMP.js → chunk-SESK3ARK.js} +2 -2
- package/dist/cli/chunks/{chunk-YQGPQBCX.js → chunk-SJUXE4IC.js} +2 -2
- package/dist/cli/chunks/{chunk-HBCGYMQU.js → chunk-SMDN3BQZ.js} +1 -1
- package/dist/cli/chunks/{chunk-D6OUCB2H.js → chunk-SNOBH4AZ.js} +2 -2
- package/dist/cli/chunks/{chunk-QRCIZFNK.js → chunk-SPV2VKC5.js} +2 -2
- package/dist/cli/chunks/chunk-TCHGOB2N.js +2 -0
- package/dist/cli/chunks/{chunk-2KJQ2UQE.js → chunk-TVYY3OCX.js} +1 -1
- package/dist/cli/chunks/{chunk-RIZVC4XY.js → chunk-UCFQALXO.js} +2 -2
- package/dist/cli/chunks/{chunk-XFPPERA2.js → chunk-UKA2KOXE.js} +2 -2
- package/dist/cli/chunks/{chunk-UTBYJ4RF.js → chunk-UNFFDHER.js} +16 -11
- package/dist/cli/chunks/{chunk-6VAZAHQG.js → chunk-UQ32JHES.js} +2 -2
- package/dist/cli/chunks/{chunk-CPC7FN52.js → chunk-V4DM6ELU.js} +2 -2
- package/dist/cli/chunks/{chunk-67YV75XP.js → chunk-VGFFFKGK.js} +2 -2
- package/dist/cli/chunks/{chunk-WK7B4B6Y.js → chunk-VMNWDJIZ.js} +2 -2
- package/dist/cli/chunks/chunk-W6HXLH5G.js +180 -0
- package/dist/cli/chunks/{chunk-7VFY7TUR.js → chunk-WCJBU2KI.js} +2 -2
- package/dist/cli/chunks/{chunk-JROVR6YS.js → chunk-WGM35YWL.js} +2 -2
- package/dist/cli/chunks/{chunk-IUHB5GVS.js → chunk-WO4QMXIG.js} +2 -2
- package/dist/cli/chunks/{chunk-JES6R5KP.js → chunk-XAS3XRYM.js} +1 -1
- package/dist/cli/chunks/chunk-Y3LZ35OG.js +2 -0
- package/dist/cli/chunks/{chunk-75QJ5HWE.js → chunk-Y3UOUNHM.js} +2 -2
- package/dist/cli/chunks/{chunk-WJTSY5MC.js → chunk-YFBSPLJG.js} +1 -1
- package/dist/cli/chunks/{chunk-DPBRWP4J.js → chunk-YHKEDEAA.js} +3 -3
- package/dist/cli/chunks/{chunk-NRE4NAVA.js → chunk-YS4FCTWF.js} +1 -1
- package/dist/cli/chunks/{chunk-I2NENQ44.js → chunk-YSLL6VSL.js} +2 -2
- package/dist/cli/chunks/chunk-Z6GGIRQQ.js +65 -0
- package/dist/cli/chunks/{chunk-E4EYPYR3.js → chunk-Z7WODOTH.js} +2 -2
- package/dist/cli/chunks/{chunk-7DETTOPZ.js → chunk-ZCRTRYXK.js} +2 -2
- package/dist/cli/chunks/{chunk-FUNGTIF2.js → chunk-ZEV3YTO7.js} +2 -2
- package/dist/cli/chunks/{chunk-SQKW3B6B.js → chunk-ZL6SYKUK.js} +1 -1
- package/dist/cli/chunks/{chunk-AMMQOV35.js → chunk-ZSPU4MOS.js} +2 -2
- package/dist/cli/chunks/{chunk-KKHYJF5U.js → chunk-ZVWVV4EX.js} +1 -1
- package/dist/cli/chunks/{ci-RACDAJMR.js → ci-W6K6G2KZ.js} +2 -2
- package/dist/cli/chunks/{ci-output-EHRSZBKG.js → ci-output-LDT24TS3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GBV7M5XG.js → circuit-breaker-F5V4KITU.js} +2 -2
- package/dist/cli/chunks/claude-flow-setup-DT6WQQVD.js +2 -0
- package/dist/cli/chunks/client-KHWJT6FB.js +2 -0
- package/dist/cli/chunks/{cline-installer-W4NMXJSG.js → cline-installer-G7TJOAEX.js} +2 -2
- package/dist/cli/chunks/{code-JWXJMYXB.js → code-PGE6A42V.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-RVI2IFTM.js → code-index-extractor-RNITH372.js} +2 -2
- package/dist/cli/chunks/{codex-installer-3BORJINH.js → codex-installer-LBX77AI3.js} +6 -6
- package/dist/cli/chunks/{completions-A55NCTAO.js → completions-4AWLAARX.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-JCXHGGLY.js → complexity-analyzer-ZPNSS476.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-PUVFMGYW.js → continuedev-installer-UAPWX6OA.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4DCMYWHB.js → copilot-installer-BJN2YJGI.js} +2 -2
- package/dist/cli/chunks/core-handlers-HING5RRG.js +2 -0
- package/dist/cli/chunks/{cost-tracker-5TV2GGKY.js → cost-tracker-MHP2VJ63.js} +2 -2
- package/dist/cli/chunks/{coverage-NNWM7TX3.js → coverage-PQB4IEFG.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-PQTD6AZN.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4NCHGJGK.js → cursor-installer-ZXBWYAS3.js} +2 -2
- package/dist/cli/chunks/{daemon-T4JO4IXP.js → daemon-64C7R6OJ.js} +3 -3
- package/dist/cli/chunks/{daemon-QIKCXKWO.js → daemon-N2BEGEFY.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-RPAAIDAD.js → dag-attention-scheduler-SPZDAPNL.js} +2 -2
- package/dist/cli/chunks/{detect-SBEEVDSN.js → detect-LXJBSSZW.js} +2 -2
- package/dist/cli/chunks/{dist-node-ZHI6NCSU.js → dist-node-U3TKZ2IZ.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LBC3GJ7Z.js → domain-handler-3DDWUVSR.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-H6IZ5USZ.js → domain-plugins-JJVWI4OQ.js} +2 -2
- package/dist/cli/chunks/domain-transfer-M36KUJ2U.js +2 -0
- package/dist/cli/chunks/dream-WUGRSNCV.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-AHTR7CRU.js → embed-and-insert-pattern-JPAR7TXX.js} +2 -2
- package/dist/cli/chunks/{eval-DZU2KISM.js → eval-SOLG23EA.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-5IQCWKSL.js → experience-capture-middleware-T7G2VOOD.js} +3 -3
- package/dist/cli/chunks/{fast-paths-2KLDUWCY.js → fast-paths-32N3ELI4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-N6UAEZY4.js → feature-flags-APJDQ4N7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-7AC3XDZA.js → feature-flags-NAHKLDRN.js} +2 -2
- package/dist/cli/chunks/{file-discovery-5SDIW4V2.js → file-discovery-YKVM3MDB.js} +2 -2
- package/dist/cli/chunks/{fleet-ZIQCAZ2Y.js → fleet-55M5CJS4.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-DUMBZJEV.js → gnn-wrapper-UD6E6S6Z.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6HVM6ZMR.js → heartbeat-handler-OYVW3VSC.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-33XX5XNQ.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-XQPERX3H.js +2 -0
- package/dist/cli/chunks/hnsw-index-2GNXTWHH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-5DRL5FLX.js → hnsw-legacy-bridge-HBYIS3ZW.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-GW67GTCL.js → hnswlib-node-EQPM42OU.js} +2 -2
- package/dist/cli/chunks/{hooks-QHH6FVO4.js → hooks-5ZSSJWO6.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-CCF7URKI.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-7XDCCVG2.js → hypergraph-engine-XBGVQ4PD.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-QHF7NOU5.js → hypergraph-handler-CAWAQ673.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HGKAZWIG.js +2 -0
- package/dist/cli/chunks/{init-handler-5UIVOM7K.js → init-handler-PRHXSARK.js} +6 -6
- package/dist/cli/chunks/init-wizard-72MFBI3G.js +2 -0
- package/dist/cli/chunks/kernel-BRCBVMSK.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TGGV6K5Q.js → kilocode-installer-F7LXBM7I.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-4XYBHZWW.js → kiro-installer-NM723ZRG.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-DG44IPEI.js +2 -0
- package/dist/cli/chunks/{learning-STE5W6BS.js → learning-5QYIDHH3.js} +3 -3
- package/dist/cli/chunks/{llm-router-NKF7J3RI.js → llm-router-43HKWPSX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-24KXFX32.js +2 -0
- package/dist/cli/chunks/{load-B2T77UJQ.js → load-5YDBWSCS.js} +2 -2
- package/dist/cli/chunks/load-test-N4TAYJY3.js +2 -0
- package/dist/cli/chunks/mcp-UMAPMNMY.js +2 -0
- package/dist/cli/chunks/{memory-WRFZKG56.js → memory-FWCPCQFP.js} +5 -5
- package/dist/cli/chunks/memory-backend-NVYFYVAU.js +2 -0
- package/dist/cli/chunks/memory-handlers-UTWCNCHL.js +2 -0
- package/dist/cli/chunks/multi-model-executor-2XTBGLE4.js +14 -0
- package/dist/cli/chunks/{opencode-installer-J36EMQU7.js → opencode-installer-GIXOJ6NS.js} +2 -2
- package/dist/cli/chunks/orchestrator-VW6BKHLI.js +393 -0
- package/dist/cli/chunks/pattern-null-store-SBPNYDBR.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-BVMTWI3E.js → pattern-usage-recorder-7CEUC3J7.js} +2 -2
- package/dist/cli/chunks/{pipeline-OWAHDUAQ.js → pipeline-IGUQPPPO.js} +2 -2
- package/dist/cli/chunks/{platform-ANGBFWBV.js → platform-2P636I7B.js} +2 -2
- package/dist/cli/chunks/{plugin-OO7ON2YW.js → plugin-NY6SWDPE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-HFG3BXWU.js → prime-radiant-advanced-wasm-2UUDTIO2.js} +2 -2
- package/dist/cli/chunks/{project-root-LNOYVTYY.js → project-root-IOISG5KX.js} +2 -2
- package/dist/cli/chunks/protocol-executor-IBYEII5Q.js +2 -0
- package/dist/cli/chunks/{protocol-handler-CE3Q6LY4.js → protocol-handler-ZTPCRQ5W.js} +2 -2
- package/dist/cli/chunks/{prove-7XPN53PY.js → prove-SQX5A3IG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-7IETWW6W.js +2 -0
- package/dist/cli/chunks/{quality-TT23JRFX.js → quality-DROILKRY.js} +2 -2
- package/dist/cli/chunks/{quality-gate-PPPRP255.js → quality-gate-PWKWDJY2.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-NHUK2MWJ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-EYNZIFJE.js → real-embeddings-P5U3MGYC.js} +2 -2
- package/dist/cli/chunks/{ref-validation-QQR64ZXD.js → ref-validation-KY73NQXD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-UIGS7ZJD.js → roocode-installer-6JPPRB3W.js} +2 -2
- package/dist/cli/chunks/router-SRSO3IHF.js +2 -0
- package/dist/cli/chunks/routing-feedback-PASRE5HY.js +2 -0
- package/dist/cli/chunks/{routing-handler-6AENUIRG.js → routing-handler-VTJIVFUO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5AWMEV34.js → ruvector-commands-C6RPSJJO.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-4M4J67OU.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-TSXGT5LF.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-NWRJ7C22.js → rvf-migration-coordinator-R53URRIO.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-MOF3E7BR.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-ISKRP563.js → rvf-store-integrity-MMXN5TEJ.js} +2 -2
- package/dist/cli/chunks/safe-db-QJLFO33B.js +2 -0
- package/dist/cli/chunks/schedule-YIVXW5O2.js +2 -0
- package/dist/cli/chunks/scheduler-AON7DWSJ.js +2 -0
- package/dist/cli/chunks/{security-325A7FMB.js → security-3B3R2NL4.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-VIJB7JUS.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-THFDYS2Z.js → shared-rvf-dual-writer-UVWGDUWC.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-75VHKKQB.js +2 -0
- package/dist/cli/chunks/{standalone-memory-UD4MJ6GZ.js → standalone-memory-M4LWAAYZ.js} +2 -2
- package/dist/cli/chunks/{status-handler-CPFTN4XL.js → status-handler-YYFV6OZL.js} +2 -2
- package/dist/cli/chunks/{structural-health-2MG2IVBL.js → structural-health-27E6LLKB.js} +2 -2
- package/dist/cli/chunks/sync-26CEGSTC.js +2 -0
- package/dist/cli/chunks/{sync-EE4VVKOW.js → sync-J3LJ56WN.js} +2 -2
- package/dist/cli/chunks/{task-handler-7H5OYJG4.js → task-handler-4MCEBQZL.js} +2 -2
- package/dist/cli/chunks/{task-handlers-NH4GJHCJ.js → task-handlers-GYBAWKE2.js} +3 -3
- package/dist/cli/chunks/{test-MPHGT4T6.js → test-MPC5HRH5.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-CHQ4ZLLJ.js → test-scheduling-ZJBFRZ3J.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-2Y2XITBX.js +2 -0
- package/dist/cli/chunks/{token-usage-EBXUJNRB.js → token-usage-3X5WMTG2.js} +2 -2
- package/dist/cli/chunks/{transformers-ZEKS2OJZ.js → transformers-MVL4C5IX.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-SLW65ZFO.js +2 -0
- package/dist/cli/chunks/{types-KYAA5VLV.js → types-TG5P3CRS.js} +2 -2
- package/dist/cli/chunks/unified-memory-UCQ6AB32.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-IXYUMKRR.js +2 -0
- package/dist/cli/chunks/unified-persistence-7E6JQ4FZ.js +2 -0
- package/dist/cli/chunks/{upgrade-UJBJ5AYM.js → upgrade-ETBHDEPY.js} +2 -2
- package/dist/cli/chunks/{validate-RUV6YMWS.js → validate-C2A73LZK.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IVEVMGVM.js → validate-swarm-67XN42ML.js} +2 -2
- package/dist/cli/chunks/{vibium-HOGMFJ2Z.js → vibium-NILGKHLN.js} +2 -2
- package/dist/cli/chunks/visual-security-4VZXPEVG.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-AVWA6HKE.js → web-tree-sitter-USJN77P4.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DAH7HI2W.js → windsurf-installer-5GGZXGJW.js} +2 -2
- package/dist/cli/chunks/witness-chain-IWS5ZHHL.js +2 -0
- package/dist/cli/chunks/witness-chain-JQA2VPZI.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-4UA7IPS3.js +2 -0
- package/dist/cli/chunks/witness-chain-verifier-3GEADWPE.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-JSTBMG43.js → witness-key-manager-ZWEIK3VJ.js} +2 -2
- package/dist/cli/chunks/{workflow-TWOIA6LZ.js → workflow-KHMVVBBA.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-GI5NQH7C.js +2 -0
- package/dist/cli/chunks/wrappers-N6XIK5PT.js +2 -0
- package/dist/cli/commands/audit.d.ts +20 -2
- package/dist/cli/commands/audit.js +158 -16
- package/dist/cli/commands/claude-flow-setup.js +5 -4
- package/dist/cli/index.js +2 -1
- package/dist/init/agents-installer.d.ts +4 -0
- package/dist/init/agents-installer.js +24 -11
- package/dist/init/codex-installer.js +4 -2
- package/dist/init/idempotent-write.d.ts +53 -0
- package/dist/init/idempotent-write.js +160 -0
- package/dist/init/phases/05-learning.js +3 -1
- package/dist/init/phases/07-hooks.js +32 -16
- package/dist/init/phases/08-mcp.js +4 -2
- package/dist/init/phases/10-workers.js +7 -5
- package/dist/init/phases/12-verification.js +7 -2
- package/dist/init/project-analyzer.d.ts +9 -0
- package/dist/init/project-analyzer.js +20 -1
- package/dist/init/self-configurator.d.ts +5 -3
- package/dist/init/self-configurator.js +18 -29
- package/dist/init/skills-installer.js +4 -2
- package/dist/init/types.d.ts +6 -0
- package/dist/init/types.js +20 -24
- package/dist/integrations/coherence/coherence-service.js +84 -24
- package/dist/integrations/coherence/vote-tally.d.ts +38 -0
- package/dist/integrations/coherence/vote-tally.js +39 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +23 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.js +24 -0
- package/dist/kernel/kernel.js +3 -2
- package/dist/learning/pattern-store.d.ts +11 -0
- package/dist/learning/pattern-store.js +26 -8
- package/dist/learning/qe-patterns.d.ts +6 -0
- package/dist/learning/qe-patterns.js +7 -1
- package/dist/learning/qe-reasoning-bank.js +3 -0
- package/dist/learning/rvf-pattern-store.js +20 -7
- package/dist/learning/sqlite-persistence.d.ts +8 -1
- package/dist/learning/sqlite-persistence.js +49 -9
- package/dist/logging/console-logger.d.ts +2 -5
- package/dist/logging/console-logger.js +10 -46
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.js +1 -0
- package/dist/logging/redaction.d.ts +27 -0
- package/dist/logging/redaction.js +170 -0
- package/dist/mcp/bundle.js +435 -421
- package/dist/mcp/handlers/core-handlers.js +5 -4
- package/dist/mcp/protocol-server.js +2 -1
- package/dist/mcp/tools/base.d.ts +9 -2
- package/dist/mcp/tools/base.js +7 -0
- package/dist/mcp/tools/coherence/consensus.js +51 -2
- package/dist/mcp/tools/planning/goap-plan.d.ts +20 -7
- package/dist/mcp/tools/planning/goap-plan.js +92 -20
- package/dist/mcp/tools/planning/goap-status.d.ts +37 -12
- package/dist/mcp/tools/planning/goap-status.js +52 -23
- package/dist/mcp/tools/planning/world-state.d.ts +101 -0
- package/dist/mcp/tools/planning/world-state.js +274 -0
- package/dist/mcp/types.d.ts +4 -2
- package/dist/planning/goap-planner.d.ts +60 -4
- package/dist/planning/goap-planner.js +218 -60
- package/dist/planning/index.d.ts +1 -1
- package/dist/planning/index.js +1 -1
- package/dist/planning/plan-executor.d.ts +20 -1
- package/dist/planning/plan-executor.js +209 -100
- package/dist/planning/types.d.ts +16 -0
- package/dist/planning/types.js +17 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-IYC62SXA.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-EDNKP3SP.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-LLOU2IXD.js +0 -2
- package/dist/cli/chunks/audit-CVZQMF55.js +0 -3
- package/dist/cli/chunks/base-P3Z4IKCT.js +0 -2
- package/dist/cli/chunks/browser-workflow-YYHQQ25X.js +0 -2
- package/dist/cli/chunks/chunk-5WOSWNDN.js +0 -2
- package/dist/cli/chunks/chunk-7CD7PBHY.js +0 -3
- package/dist/cli/chunks/chunk-7X7JYWT4.js +0 -27
- package/dist/cli/chunks/chunk-J27F4NSB.js +0 -2
- package/dist/cli/chunks/chunk-MI5Q55DG.js +0 -65
- package/dist/cli/chunks/chunk-UDHVCKGA.js +0 -5
- package/dist/cli/chunks/chunk-XQSIRBKT.js +0 -180
- package/dist/cli/chunks/chunk-ZBABIZ2D.js +0 -2
- package/dist/cli/chunks/claude-flow-setup-5LVJOFKP.js +0 -2
- package/dist/cli/chunks/client-HUVFA5PF.js +0 -2
- package/dist/cli/chunks/core-handlers-UEXO3VAA.js +0 -2
- package/dist/cli/chunks/cross-domain-router-ODU5IZD6.js +0 -2
- package/dist/cli/chunks/domain-transfer-JZA5TMW3.js +0 -2
- package/dist/cli/chunks/dream-HE3OX42F.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-QUIFGGLX.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-42KB37KP.js +0 -2
- package/dist/cli/chunks/hnsw-index-T2PGO77J.js +0 -2
- package/dist/cli/chunks/hybrid-backend-FRNWYRKH.js +0 -2
- package/dist/cli/chunks/impact-analyzer-A5QYOYBR.js +0 -2
- package/dist/cli/chunks/init-wizard-XBU674YH.js +0 -2
- package/dist/cli/chunks/kernel-DV5MTNZD.js +0 -2
- package/dist/cli/chunks/knowledge-graph-4ACGVJQK.js +0 -2
- package/dist/cli/chunks/llm-router-service-PSMASERT.js +0 -2
- package/dist/cli/chunks/load-test-MRUO2VPF.js +0 -2
- package/dist/cli/chunks/mcp-JGSFCEMH.js +0 -2
- package/dist/cli/chunks/memory-backend-2MPGI6JW.js +0 -2
- package/dist/cli/chunks/memory-handlers-XT4HMITB.js +0 -2
- package/dist/cli/chunks/multi-model-executor-26Q5BSVG.js +0 -14
- package/dist/cli/chunks/orchestrator-D5IFV65I.js +0 -393
- package/dist/cli/chunks/pattern-null-store-TGWUL237.js +0 -2
- package/dist/cli/chunks/protocol-executor-GEVH5KD6.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-DJ2JL6QB.js +0 -2
- package/dist/cli/chunks/queen-coordinator-F7E3AS26.js +0 -2
- package/dist/cli/chunks/router-OZH3QSAU.js +0 -2
- package/dist/cli/chunks/routing-feedback-J2E3ADZB.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HK525Y5Y.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-Q7FB3BKR.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-5ZRCGUI6.js +0 -2
- package/dist/cli/chunks/safe-db-3OYEPVEH.js +0 -2
- package/dist/cli/chunks/schedule-AG4C2EIQ.js +0 -2
- package/dist/cli/chunks/scheduler-SQS2CZFZ.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-NFL6QSZ6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-MAKDFSHC.js +0 -2
- package/dist/cli/chunks/sync-MBTW5XBF.js +0 -2
- package/dist/cli/chunks/token-bootstrap-SSDCYEKK.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-J6ZMAK37.js +0 -2
- package/dist/cli/chunks/unified-memory-DDWMC435.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4JA7SGBK.js +0 -2
- package/dist/cli/chunks/unified-persistence-F6OSNTXY.js +0 -2
- package/dist/cli/chunks/visual-security-25SMBIYT.js +0 -2
- package/dist/cli/chunks/witness-chain-PJOQPFUX.js +0 -2
- package/dist/cli/chunks/witness-chain-ZW6KKUZU.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKSIDM7Q.js +0 -2
- 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.
|
|
2
|
-
import"./chunk-
|
|
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-
|
|
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-
|
|
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 =
|
|
34
|
-
? chalk.
|
|
35
|
-
:
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
132
|
-
|
|
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
|
|
143
|
-
|
|
144
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|