agentic-qe 3.14.5 → 3.14.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +150 -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 +8 -8
- package/dist/cli/chunks/adapter-TVQKH65T.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-AK2W76RG.js +2 -0
- package/dist/cli/chunks/{agent-handler-V6CZ7Q6S.js → agent-handler-MGZCWHIY.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-ZMD6ULC3.js → agent-memory-branch-JZ54MCSP.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-ULGTVVWE.js +2 -0
- package/dist/cli/chunks/{arena-QLSBESC7.js → arena-CUVH3V7H.js} +2 -2
- package/dist/cli/chunks/{arena-4UPAEHFT.js → arena-YSWTKBCL.js} +4 -4
- package/dist/cli/chunks/audit-LVU76QGA.js +4 -0
- package/dist/cli/chunks/base-W42BURDL.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-4DSBPDRH.js → better-sqlite3-DB3LOJQU.js} +2 -2
- package/dist/cli/chunks/{brain-handler-GBY4EZ4P.js → brain-handler-SD63KOQ6.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-XYBVXCNO.js → branch-enumerator-4MNOPUC7.js} +2 -2
- package/dist/cli/chunks/{browser-32F6MREU.js → browser-OLPNTWQE.js} +2 -2
- package/dist/cli/chunks/browser-workflow-HKGHFFFT.js +2 -0
- package/dist/cli/chunks/{chunk-WLXK2KNU.js → chunk-23CX7JNL.js} +2 -2
- package/dist/cli/chunks/{chunk-O3JTQ7N4.js → chunk-25P6JA6V.js} +1 -1
- package/dist/cli/chunks/{chunk-DO6EI5KB.js → chunk-2G63VIJE.js} +1 -1
- package/dist/cli/chunks/{chunk-G3L5L6YQ.js → chunk-2IMSJ7IO.js} +1 -1
- package/dist/cli/chunks/{chunk-RD6TEZ64.js → chunk-36VKMAMN.js} +2 -2
- package/dist/cli/chunks/{chunk-KIP6WZGV.js → chunk-3M7J4U74.js} +3 -3
- package/dist/cli/chunks/chunk-3QJU4Q4R.js +5 -0
- package/dist/cli/chunks/{chunk-2JGEZHWY.js → chunk-4EKV7PHB.js} +2 -2
- package/dist/cli/chunks/chunk-4INST4ZL.js +4 -0
- package/dist/cli/chunks/{chunk-DPBRWP4J.js → chunk-53BXTTRO.js} +3 -3
- package/dist/cli/chunks/chunk-5D7ZFWDS.js +2 -0
- package/dist/cli/chunks/{chunk-XLAUGSW7.js → chunk-5FSLMYAC.js} +2 -2
- package/dist/cli/chunks/chunk-5GFKTJ65.js +4 -0
- package/dist/cli/chunks/{chunk-WOIGKU2N.js → chunk-5U6N4V5M.js} +11 -11
- package/dist/cli/chunks/{chunk-PSPKSUF6.js → chunk-6EGS77BB.js} +1 -1
- package/dist/cli/chunks/{chunk-QIRL6B3C.js → chunk-6PJPQGF4.js} +2 -2
- package/dist/cli/chunks/{chunk-I6X3EGJI.js → chunk-6RD44SCE.js} +1 -1
- package/dist/cli/chunks/{chunk-IGBEJ4UJ.js → chunk-74IOEOMH.js} +2 -2
- package/dist/cli/chunks/{chunk-E3W6XQ57.js → chunk-77QZHIVX.js} +2 -2
- package/dist/cli/chunks/{chunk-R74ZKREV.js → chunk-7EZ2Z2CK.js} +1 -1
- package/dist/cli/chunks/{chunk-UTBYJ4RF.js → chunk-7MIOK72I.js} +18 -35
- package/dist/cli/chunks/{chunk-URVHZPWY.js → chunk-7QYOTUOX.js} +2 -2
- package/dist/cli/chunks/{chunk-K27SU3RE.js → chunk-A2VUCUTT.js} +2 -2
- package/dist/cli/chunks/{chunk-2KJQ2UQE.js → chunk-A3DK3XNZ.js} +1 -1
- package/dist/cli/chunks/{chunk-5D36YHS3.js → chunk-A5MA7A23.js} +4 -4
- package/dist/cli/chunks/{chunk-WJHWH5D2.js → chunk-AEUEMVJK.js} +2 -2
- package/dist/cli/chunks/{chunk-6CR4VQBQ.js → chunk-AJUBT4NP.js} +2 -2
- package/dist/cli/chunks/chunk-B2YGVSOP.js +27 -0
- package/dist/cli/chunks/{chunk-D6OUCB2H.js → chunk-B4I43GE2.js} +2 -2
- package/dist/cli/chunks/{chunk-WK7B4B6Y.js → chunk-BD7FEUN3.js} +2 -2
- package/dist/cli/chunks/{chunk-OEIQTWQP.js → chunk-BE4KALTE.js} +1 -1
- package/dist/cli/chunks/{chunk-JROVR6YS.js → chunk-BEFTQVEW.js} +2 -2
- package/dist/cli/chunks/{chunk-HBCGYMQU.js → chunk-BLG7SH4A.js} +1 -1
- package/dist/cli/chunks/{chunk-2OMLTYQK.js → chunk-C3FXFU2T.js} +1 -1
- package/dist/cli/chunks/{chunk-6A44AOGN.js → chunk-CBONQM5D.js} +2 -2
- package/dist/cli/chunks/{chunk-73EI4C2E.js → chunk-CQNMGK6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-IIAR5S7Q.js → chunk-CVOQ6ESD.js} +2 -2
- package/dist/cli/chunks/{chunk-6TU7FEMD.js → chunk-DOBKEXMJ.js} +1 -1
- package/dist/cli/chunks/{chunk-BHFR2EXL.js → chunk-DYTQHRUS.js} +1 -1
- package/dist/cli/chunks/{chunk-E4AZXCT5.js → chunk-EADSQN5T.js} +1 -1
- package/dist/cli/chunks/{chunk-CYE2TJFV.js → chunk-EGOIIUBD.js} +2 -2
- package/dist/cli/chunks/{chunk-DKUBQQFG.js → chunk-EIGRV3J6.js} +2 -2
- package/dist/cli/chunks/{chunk-RP2ZKPYV.js → chunk-EJ6MMYLK.js} +1 -1
- package/dist/cli/chunks/{chunk-HSVKZ5KI.js → chunk-ENK44A6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-67YV75XP.js → chunk-EYXE2XKP.js} +2 -2
- package/dist/cli/chunks/{chunk-HYEJJJY3.js → chunk-F2OPFVQH.js} +1 -1
- package/dist/cli/chunks/{chunk-XUR2M2WB.js → chunk-FBZC4IGB.js} +2 -2
- package/dist/cli/chunks/{chunk-BXVAVFGU.js → chunk-FSSR6WBE.js} +2 -2
- package/dist/cli/chunks/{chunk-W2XCZU62.js → chunk-FW4DJ4FJ.js} +1 -1
- package/dist/cli/chunks/{chunk-KKHYJF5U.js → chunk-FYPX5WBJ.js} +1 -1
- package/dist/cli/chunks/{chunk-K7NJHFLZ.js → chunk-G367W7XR.js} +3 -3
- package/dist/cli/chunks/{chunk-IUDWEOLX.js → chunk-GLGKQX2V.js} +2 -2
- package/dist/cli/chunks/{chunk-JVQBWYHW.js → chunk-GV4DYPJP.js} +2 -2
- package/dist/cli/chunks/{chunk-GTKCGPJZ.js → chunk-GVVFTFMB.js} +2 -2
- package/dist/cli/chunks/{chunk-AFEDJ3RU.js → chunk-H5RQPO3X.js} +2 -2
- package/dist/cli/chunks/{chunk-4FWTLJEP.js → chunk-HPWWYT67.js} +2 -2
- package/dist/cli/chunks/{chunk-G3W6BMVJ.js → chunk-HXXHMLJ5.js} +1 -1
- package/dist/cli/chunks/{chunk-NU7UTXMP.js → chunk-HYFQUWNB.js} +2 -2
- package/dist/cli/chunks/chunk-HYOPJHHW.js +2 -0
- package/dist/cli/chunks/{chunk-6LKDHEBY.js → chunk-HZY42OVU.js} +2 -2
- package/dist/cli/chunks/{chunk-C3HQL6S4.js → chunk-IAENZ2DR.js} +2 -2
- package/dist/cli/chunks/{chunk-M23ZOZVY.js → chunk-IEJ7ZV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-RIZVC4XY.js → chunk-IWFFO6VT.js} +2 -2
- package/dist/cli/chunks/chunk-J7AQZLIH.js +21 -0
- package/dist/cli/chunks/{chunk-3KDL6QDK.js → chunk-JHJUSSAU.js} +2 -2
- package/dist/cli/chunks/{chunk-DLF5BOJD.js → chunk-JOZ47MV6.js} +1 -1
- package/dist/cli/chunks/{chunk-ELBZON4V.js → chunk-JZT7BU44.js} +2 -2
- package/dist/cli/chunks/{chunk-3DDXWYMO.js → chunk-KD2BLA5Y.js} +1 -1
- package/dist/cli/chunks/{chunk-VD5IO5EO.js → chunk-KUHLTVWC.js} +1 -1
- package/dist/cli/chunks/{chunk-YDFL445W.js → chunk-LU2EDWQK.js} +2 -2
- package/dist/cli/chunks/chunk-LXZMP3VX.js +736 -0
- package/dist/cli/chunks/{chunk-3YUB5HER.js → chunk-LY7MFGBD.js} +196 -187
- package/dist/cli/chunks/chunk-MM56VPNE.js +180 -0
- package/dist/cli/chunks/{chunk-37TUN44F.js → chunk-MNQN7UZX.js} +2 -2
- package/dist/cli/chunks/{chunk-7DETTOPZ.js → chunk-MQZ53OR3.js} +2 -2
- package/dist/cli/chunks/{chunk-BYG36QC5.js → chunk-MT7UNBZ7.js} +2 -2
- package/dist/cli/chunks/{chunk-JES6R5KP.js → chunk-MZB2UV2O.js} +1 -1
- package/dist/cli/chunks/{chunk-QZMUXJHZ.js → chunk-MZMG6CUJ.js} +2 -2
- package/dist/cli/chunks/chunk-N5XOXPHZ.js +4 -0
- package/dist/cli/chunks/{chunk-RD2VGOUH.js → chunk-NBLDBVAW.js} +1 -1
- package/dist/cli/chunks/{chunk-HVU64GP5.js → chunk-ND4QTZOL.js} +2 -2
- package/dist/cli/chunks/{chunk-SQF6HRXR.js → chunk-NHUGHAY6.js} +1 -1
- package/dist/cli/chunks/{chunk-TUSSPKRM.js → chunk-NOHWJOBS.js} +1 -1
- package/dist/cli/chunks/{chunk-NVYBM3R4.js → chunk-O5V7RHVG.js} +2 -2
- package/dist/cli/chunks/{chunk-6VAZAHQG.js → chunk-O6MO5KMR.js} +2 -2
- package/dist/cli/chunks/{chunk-IUHB5GVS.js → chunk-OAZX6WFU.js} +2 -2
- package/dist/cli/chunks/{chunk-LSUILON7.js → chunk-OEPNNLR4.js} +1 -1
- package/dist/cli/chunks/{chunk-IJHCIXJC.js → chunk-OIDWDGLG.js} +2 -2
- package/dist/cli/chunks/{chunk-CPC7FN52.js → chunk-ON2UTP2U.js} +2 -2
- package/dist/cli/chunks/{chunk-UJWAWIRV.js → chunk-ONR2NXXD.js} +7 -7
- package/dist/cli/chunks/{chunk-7VFY7TUR.js → chunk-OXHF3L2T.js} +2 -2
- package/dist/cli/chunks/{chunk-QYOGD2VW.js → chunk-OZGIOKEA.js} +1 -1
- package/dist/cli/chunks/{chunk-WJTSY5MC.js → chunk-P2UPYSDJ.js} +1 -1
- package/dist/cli/chunks/{chunk-52L77RMG.js → chunk-P7XSPP5D.js} +2 -2
- package/dist/cli/chunks/{chunk-M5AEL7IS.js → chunk-PCJQCEBA.js} +2 -2
- package/dist/cli/chunks/chunk-PELENDDQ.js +2 -0
- package/dist/cli/chunks/{chunk-C3Z4VVHP.js → chunk-PYKY22GC.js} +5 -5
- package/dist/cli/chunks/{chunk-AF4XKLXO.js → chunk-Q3NSU24F.js} +2 -2
- package/dist/cli/chunks/chunk-Q6NTEICT.js +2 -0
- package/dist/cli/chunks/chunk-QFETNCNN.js +12 -0
- package/dist/cli/chunks/{chunk-KYA5LARK.js → chunk-QGOWNVVG.js} +1 -1
- package/dist/cli/chunks/{chunk-Y5L3ES4L.js → chunk-QPLSYEWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-F34OAHOM.js → chunk-QQFQDEUE.js} +2 -2
- package/dist/cli/chunks/{chunk-EFV4ADMO.js → chunk-QUORH2MG.js} +55 -79
- package/dist/cli/chunks/{chunk-QWUXCG2L.js → chunk-QVH5Y7AP.js} +1 -1
- package/dist/cli/chunks/{chunk-I2NENQ44.js → chunk-RC2A4JZ5.js} +2 -2
- package/dist/cli/chunks/{chunk-XZSMZHM2.js → chunk-RDGPXENG.js} +2 -2
- package/dist/cli/chunks/{chunk-N7H767TP.js → chunk-RKI3IQKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-LULD4JV2.js → chunk-RKUAWQOF.js} +2 -2
- package/dist/cli/chunks/chunk-RLW25X66.js +2 -0
- package/dist/cli/chunks/{chunk-UKGXWW64.js → chunk-ROVZSZCS.js} +3 -3
- package/dist/cli/chunks/{chunk-EOR2UT72.js → chunk-RT6O2HW2.js} +2 -2
- package/dist/cli/chunks/{chunk-75QJ5HWE.js → chunk-SM2YJ2AL.js} +2 -2
- package/dist/cli/chunks/{chunk-KO4FNAUR.js → chunk-SRPLERER.js} +3 -3
- package/dist/cli/chunks/{chunk-NRE4NAVA.js → chunk-T77GZF4B.js} +1 -1
- package/dist/cli/chunks/{chunk-R6IU3EWP.js → chunk-TFK2AYIN.js} +2 -2
- package/dist/cli/chunks/chunk-TW3SR4TS.js +2 -0
- package/dist/cli/chunks/{chunk-IYTLXUBO.js → chunk-TXSPBLBT.js} +2 -2
- package/dist/cli/chunks/chunk-UA7TDVL7.js +12 -0
- package/dist/cli/chunks/{chunk-WX6RRIGW.js → chunk-UBJG3IHT.js} +2 -2
- package/dist/cli/chunks/{chunk-NQI7FWCS.js → chunk-UFSVUBTR.js} +2 -2
- package/dist/cli/chunks/{chunk-FUNGTIF2.js → chunk-UOI6ULCH.js} +2 -2
- package/dist/cli/chunks/{chunk-HVXJC3OC.js → chunk-UYUJT6QO.js} +2 -2
- package/dist/cli/chunks/{chunk-KEY43ANX.js → chunk-V5AK56DA.js} +2 -2
- package/dist/cli/chunks/{chunk-XFPPERA2.js → chunk-V6RE4YRQ.js} +2 -2
- package/dist/cli/chunks/{chunk-DDCIYOGT.js → chunk-VW6FRMLW.js} +2 -2
- package/dist/cli/chunks/chunk-VXKWNRGA.js +2 -0
- package/dist/cli/chunks/{chunk-CVMNJSCB.js → chunk-VYDVI6FZ.js} +2 -2
- package/dist/cli/chunks/{chunk-7JZJJA7U.js → chunk-WF6UISKW.js} +3 -3
- package/dist/cli/chunks/{chunk-SQKW3B6B.js → chunk-WIH522AP.js} +1 -1
- package/dist/cli/chunks/{chunk-KLTP5IDB.js → chunk-WOV6XI3A.js} +1 -1
- package/dist/cli/chunks/{chunk-VTOVWHEM.js → chunk-X7ADKL7T.js} +2 -2
- package/dist/cli/chunks/{chunk-SX4JLSLV.js → chunk-XBYQ2BS4.js} +2 -2
- package/dist/cli/chunks/{chunk-E4EYPYR3.js → chunk-XL5KIYE3.js} +2 -2
- package/dist/cli/chunks/{chunk-3VIXOHMS.js → chunk-XWYELBZS.js} +1 -1
- package/dist/cli/chunks/{chunk-YQGPQBCX.js → chunk-XYLQZWF6.js} +2 -2
- package/dist/cli/chunks/{chunk-XEZIIQYJ.js → chunk-Y6AKKQIQ.js} +1 -1
- package/dist/cli/chunks/{chunk-BJPL6THQ.js → chunk-YMW57PEL.js} +1 -1
- package/dist/cli/chunks/{chunk-JSZ663MU.js → chunk-YO4ESCB4.js} +1 -1
- package/dist/cli/chunks/{chunk-AMMQOV35.js → chunk-YRHTQZU4.js} +2 -2
- package/dist/cli/chunks/chunk-Z4Q5PCRZ.js +65 -0
- package/dist/cli/chunks/{chunk-RKOUXVZZ.js → chunk-ZELWDJXT.js} +2 -2
- package/dist/cli/chunks/{chunk-QRCIZFNK.js → chunk-ZQZD55MN.js} +2 -2
- package/dist/cli/chunks/{chunk-UMGFMKDW.js → chunk-ZS4XVJGV.js} +2 -2
- package/dist/cli/chunks/{chunk-6ITZZIQX.js → chunk-ZUB5YOCM.js} +2 -2
- package/dist/cli/chunks/chunk-ZUOVNFXK.js +2 -0
- package/dist/cli/chunks/{chunk-RGGK6VZ7.js → chunk-ZWEKAEEV.js} +1 -1
- package/dist/cli/chunks/{ci-RACDAJMR.js → ci-J3TDK5RA.js} +8 -8
- package/dist/cli/chunks/{ci-output-EHRSZBKG.js → ci-output-RLS32FUY.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GBV7M5XG.js → circuit-breaker-MRCC7WCM.js} +2 -2
- package/dist/cli/chunks/claude-flow-setup-LIZCEKDF.js +2 -0
- package/dist/cli/chunks/client-3BD2DI4N.js +2 -0
- package/dist/cli/chunks/{cline-installer-W4NMXJSG.js → cline-installer-T7H6R2RC.js} +2 -2
- package/dist/cli/chunks/{code-JWXJMYXB.js → code-XMBLI7OF.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-RVI2IFTM.js → code-index-extractor-QS7BYLEX.js} +2 -2
- package/dist/cli/chunks/{codex-installer-3BORJINH.js → codex-installer-6PGT5FM6.js} +6 -6
- package/dist/cli/chunks/{completions-A55NCTAO.js → completions-2A3WRXY2.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-JCXHGGLY.js → complexity-analyzer-23HOOGJ7.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-PUVFMGYW.js → continuedev-installer-4FSF7B3N.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4DCMYWHB.js → copilot-installer-A5GRQQUU.js} +2 -2
- package/dist/cli/chunks/core-handlers-C3H2ZCS2.js +2 -0
- package/dist/cli/chunks/{cost-tracker-5TV2GGKY.js → cost-tracker-Z4STQ5VB.js} +2 -2
- package/dist/cli/chunks/{coverage-NNWM7TX3.js → coverage-NUPP6KZZ.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-JCQ7SWDP.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4NCHGJGK.js → cursor-installer-FVJ7ROPJ.js} +2 -2
- package/dist/cli/chunks/{daemon-QIKCXKWO.js → daemon-7ZZA2MMN.js} +4 -4
- package/dist/cli/chunks/{daemon-T4JO4IXP.js → daemon-D662EX5N.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-RPAAIDAD.js → dag-attention-scheduler-IB4TQ2KA.js} +2 -2
- package/dist/cli/chunks/{detect-SBEEVDSN.js → detect-LGLBZN4I.js} +2 -2
- package/dist/cli/chunks/{dist-node-ZHI6NCSU.js → dist-node-Z3OL42YE.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LBC3GJ7Z.js → domain-handler-L3CLNL7U.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-H6IZ5USZ.js → domain-plugins-GQ3V5X6L.js} +2 -2
- package/dist/cli/chunks/domain-transfer-MFCI76IY.js +2 -0
- package/dist/cli/chunks/dream-FTP33IJB.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-AHTR7CRU.js → embed-and-insert-pattern-UGD6USYH.js} +2 -2
- package/dist/cli/chunks/{eval-DZU2KISM.js → eval-3B7UIYGY.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-5IQCWKSL.js → experience-capture-middleware-3RQ4NYY3.js} +3 -3
- package/dist/cli/chunks/{fast-paths-2KLDUWCY.js → fast-paths-QOSAEPYD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-7AC3XDZA.js → feature-flags-3S5TH6P4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-N6UAEZY4.js → feature-flags-TLF4NKOH.js} +2 -2
- package/dist/cli/chunks/{file-discovery-5SDIW4V2.js → file-discovery-AEVMJRNB.js} +2 -2
- package/dist/cli/chunks/{fleet-ZIQCAZ2Y.js → fleet-E6WTXWFL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-DUMBZJEV.js → gnn-wrapper-MCKH3AUU.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6HVM6ZMR.js → heartbeat-handler-U7XENHRR.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-HXBJVJL2.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-TU6WG2ME.js +2 -0
- package/dist/cli/chunks/hnsw-index-MS5KODD7.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-5DRL5FLX.js → hnsw-legacy-bridge-5GW4SAEI.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-GW67GTCL.js → hnswlib-node-7BLZBK5T.js} +2 -2
- package/dist/cli/chunks/{hooks-QHH6FVO4.js → hooks-F3O2SB6H.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-HT45LBHC.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-7XDCCVG2.js → hypergraph-engine-PV4EKXHB.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-QHF7NOU5.js → hypergraph-handler-VOWO5ZTW.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-AP4AGTG5.js +2 -0
- package/dist/cli/chunks/{init-handler-5UIVOM7K.js → init-handler-ENJ5ONJX.js} +16 -14
- package/dist/cli/chunks/init-wizard-I5DFZUQL.js +2 -0
- package/dist/cli/chunks/kernel-MISPSPPA.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TGGV6K5Q.js → kilocode-installer-HNNJOOPE.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-4XYBHZWW.js → kiro-installer-UZBIQ3IC.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-L26JESGE.js +2 -0
- package/dist/cli/chunks/{learning-STE5W6BS.js → learning-YMLCVFUT.js} +3 -3
- package/dist/cli/chunks/{llm-router-NKF7J3RI.js → llm-router-YWTARCCT.js} +4 -4
- package/dist/cli/chunks/llm-router-service-MWGC43ZA.js +2 -0
- package/dist/cli/chunks/{load-B2T77UJQ.js → load-DKE3F3IP.js} +2 -2
- package/dist/cli/chunks/load-test-H5ISNNM5.js +2 -0
- package/dist/cli/chunks/mcp-5PSGIUCW.js +2 -0
- package/dist/cli/chunks/{memory-WRFZKG56.js → memory-3L3O6JMM.js} +5 -5
- package/dist/cli/chunks/memory-backend-HWDNOBKW.js +2 -0
- package/dist/cli/chunks/memory-handlers-ZFDVQZM5.js +2 -0
- package/dist/cli/chunks/multi-model-executor-AEEO7IA4.js +14 -0
- package/dist/cli/chunks/{opencode-installer-J36EMQU7.js → opencode-installer-ABBO355U.js} +2 -2
- package/dist/cli/chunks/orchestrator-E36Q7MKE.js +393 -0
- package/dist/cli/chunks/pattern-null-store-GQP6ICWK.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-BVMTWI3E.js → pattern-usage-recorder-H4XKSID4.js} +2 -2
- package/dist/cli/chunks/{pipeline-OWAHDUAQ.js → pipeline-BGFEHXIN.js} +2 -2
- package/dist/cli/chunks/{platform-ANGBFWBV.js → platform-GK7ZVDJI.js} +2 -2
- package/dist/cli/chunks/{plugin-OO7ON2YW.js → plugin-CAH2CKI6.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-HFG3BXWU.js → prime-radiant-advanced-wasm-M5EYRONA.js} +2 -2
- package/dist/cli/chunks/{project-root-LNOYVTYY.js → project-root-BSNZC243.js} +2 -2
- package/dist/cli/chunks/protocol-executor-AD5A4DAI.js +2 -0
- package/dist/cli/chunks/{protocol-handler-CE3Q6LY4.js → protocol-handler-JDSSC2SF.js} +2 -2
- package/dist/cli/chunks/{prove-7XPN53PY.js → prove-ANPTOZJE.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-W3Z2PKTR.js +2 -0
- package/dist/cli/chunks/{quality-TT23JRFX.js → quality-SXWGYRQR.js} +2 -2
- package/dist/cli/chunks/{quality-gate-PPPRP255.js → quality-gate-GYNCA4ZY.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-HQRHLIJX.js +2 -0
- package/dist/cli/chunks/{real-embeddings-EYNZIFJE.js → real-embeddings-WSRYAOZM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-QQR64ZXD.js → ref-validation-AZ3LRWEK.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-UIGS7ZJD.js → roocode-installer-2QKGFIEU.js} +2 -2
- package/dist/cli/chunks/router-MTP5LH4H.js +2 -0
- package/dist/cli/chunks/routing-feedback-GWETVB4L.js +2 -0
- package/dist/cli/chunks/{routing-handler-6AENUIRG.js → routing-handler-UYDC5MMD.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5AWMEV34.js → ruvector-commands-QXADPVEY.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-4UE5S7WP.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-PHH3HF4Q.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-NWRJ7C22.js → rvf-migration-coordinator-GD4NBFKT.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-KTLZBUWV.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-ISKRP563.js → rvf-store-integrity-7SXG66IL.js} +2 -2
- package/dist/cli/chunks/safe-db-FWWGAPVE.js +2 -0
- package/dist/cli/chunks/schedule-TPA4V4D5.js +2 -0
- package/dist/cli/chunks/scheduler-5ZTEPNDD.js +2 -0
- package/dist/cli/chunks/{security-325A7FMB.js → security-YKB622PK.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-KMLAV7JK.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-THFDYS2Z.js → shared-rvf-dual-writer-OYY27DFV.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HPTT624C.js +2 -0
- package/dist/cli/chunks/{standalone-memory-UD4MJ6GZ.js → standalone-memory-2DOABVLC.js} +2 -2
- package/dist/cli/chunks/{status-handler-CPFTN4XL.js → status-handler-EXRKETV7.js} +2 -2
- package/dist/cli/chunks/{structural-health-2MG2IVBL.js → structural-health-2SKK6DU6.js} +2 -2
- package/dist/cli/chunks/sync-DQ2YUNI6.js +2 -0
- package/dist/cli/chunks/{sync-EE4VVKOW.js → sync-UW7SX7GO.js} +2 -2
- package/dist/cli/chunks/{task-handler-7H5OYJG4.js → task-handler-LYQ6WYUY.js} +2 -2
- package/dist/cli/chunks/task-handlers-DIJO232S.js +9 -0
- package/dist/cli/chunks/test-WRHZMUCW.js +33 -0
- package/dist/cli/chunks/{test-scheduling-CHQ4ZLLJ.js → test-scheduling-HI23RXFK.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-23SA6SWZ.js +2 -0
- package/dist/cli/chunks/{token-usage-EBXUJNRB.js → token-usage-M7RRDPXO.js} +2 -2
- package/dist/cli/chunks/{transformers-ZEKS2OJZ.js → transformers-4TC35KKS.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-F4LTKAWD.js +2 -0
- package/dist/cli/chunks/{types-KYAA5VLV.js → types-NBXV6LXQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-OVFEPRPS.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-KKRSCZHR.js +2 -0
- package/dist/cli/chunks/unified-persistence-7GLR4RI3.js +2 -0
- package/dist/cli/chunks/{upgrade-UJBJ5AYM.js → upgrade-4BGOU5RM.js} +2 -2
- package/dist/cli/chunks/{validate-RUV6YMWS.js → validate-EDWAR63H.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IVEVMGVM.js → validate-swarm-VI72CPR7.js} +2 -2
- package/dist/cli/chunks/visual-security-2FUM5GLI.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-AVWA6HKE.js → web-tree-sitter-Y5XBRQXF.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DAH7HI2W.js → windsurf-installer-VEX23WAF.js} +2 -2
- package/dist/cli/chunks/witness-chain-3YNL6YGY.js +2 -0
- package/dist/cli/chunks/witness-chain-MH6GA5L6.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-MJZGZRWT.js +2 -0
- package/dist/cli/chunks/witness-chain-verifier-TTJYXTBE.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-JSTBMG43.js → witness-key-manager-EM6YXYOY.js} +2 -2
- package/dist/cli/chunks/{workflow-TWOIA6LZ.js → workflow-2RBDOM7V.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-H6G65YKU.js +2 -0
- package/dist/cli/chunks/wrappers-5OTAVVOV.js +2 -0
- package/dist/cli/commands/audit.d.ts +20 -2
- package/dist/cli/commands/audit.js +158 -16
- package/dist/cli/commands/ci.js +1 -1
- package/dist/cli/commands/claude-flow-setup.js +5 -4
- package/dist/cli/commands/test.js +18 -3
- package/dist/cli/handlers/init-handler.d.ts +2 -0
- package/dist/cli/handlers/init-handler.js +8 -2
- package/dist/cli/index.js +10 -1
- package/dist/coordination/handlers/test-execution-handlers.js +13 -8
- package/dist/coordination/index.d.ts +1 -1
- package/dist/coordination/queen-event-handlers.js +9 -6
- package/dist/coordination/result-saver.js +1 -1
- package/dist/coordination/services/index.d.ts +1 -1
- package/dist/coordination/services/task-audit-logger.d.ts +38 -13
- package/dist/coordination/services/task-audit-logger.js +33 -5
- package/dist/coordination/task-executor.d.ts +5 -0
- package/dist/coordination/task-executor.js +10 -5
- package/dist/domains/test-generation/coordinator.js +6 -5
- package/dist/domains/test-generation/interfaces.d.ts +11 -1
- package/dist/domains/test-generation/services/behavior-example-validation.d.ts +36 -0
- package/dist/domains/test-generation/services/behavior-example-validation.js +89 -0
- package/dist/domains/test-generation/services/behavior-examples.d.ts +8 -0
- package/dist/domains/test-generation/services/behavior-examples.js +65 -0
- package/dist/domains/test-generation/services/test-generator.d.ts +1 -1
- package/dist/domains/test-generation/services/test-generator.js +59 -30
- package/dist/domains/visual-accessibility/services/axe-core-audit.d.ts +0 -15
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +12 -10
- package/dist/init/agents-installer.d.ts +4 -0
- package/dist/init/agents-installer.js +24 -11
- package/dist/init/browser-engine-installer.d.ts +5 -5
- package/dist/init/browser-engine-installer.js +28 -6
- 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/init-wizard.d.ts +2 -0
- package/dist/init/orchestrator.js +1 -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/09-assets.js +8 -18
- package/dist/init/phases/10-workers.js +7 -5
- package/dist/init/phases/12-verification.js +7 -2
- package/dist/init/phases/phase-interface.d.ts +2 -0
- 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/agentic-flow/reasoning-bank/index.d.ts +2 -5
- 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/integrations/vibium/client.d.ts +1 -0
- package/dist/integrations/vibium/client.js +24 -11
- package/dist/integrations/vibium/runtime.d.ts +14 -0
- package/dist/integrations/vibium/runtime.js +94 -0
- package/dist/kernel/kernel.js +3 -2
- package/dist/kernel/pattern-fts-self-heal.d.ts +63 -0
- package/dist/kernel/pattern-fts-self-heal.js +193 -0
- package/dist/kernel/process-lifecycle.d.ts +60 -0
- package/dist/kernel/process-lifecycle.js +91 -0
- package/dist/kernel/unified-memory-schemas.d.ts +15 -1
- package/dist/kernel/unified-memory-schemas.js +53 -25
- package/dist/kernel/unified-memory.js +31 -34
- package/dist/kernel/unified-persistence.js +12 -6
- package/dist/learning/experience-capture.d.ts +2 -1
- package/dist/learning/experience-capture.js +23 -8
- package/dist/learning/pattern-store.d.ts +12 -1
- package/dist/learning/pattern-store.js +45 -30
- package/dist/learning/qe-patterns.d.ts +12 -0
- package/dist/learning/qe-patterns.js +7 -1
- package/dist/learning/qe-reasoning-bank.d.ts +1 -0
- package/dist/learning/qe-reasoning-bank.js +17 -4
- package/dist/learning/real-qe-reasoning-bank.d.ts +9 -4
- package/dist/learning/real-qe-reasoning-bank.js +28 -4
- package/dist/learning/rvf-pattern-store.js +36 -23
- package/dist/learning/sqlite-persistence.d.ts +8 -1
- package/dist/learning/sqlite-persistence.js +58 -33
- 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 +522 -545
- package/dist/mcp/entry.js +52 -6
- package/dist/mcp/handlers/core-handlers.js +5 -4
- package/dist/mcp/handlers/domain-handler-configs.js +12 -4
- package/dist/mcp/handlers/task-handlers.js +11 -7
- package/dist/mcp/protocol-server.js +20 -4
- package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
- package/dist/mcp/services/reasoning-bank-service.js +5 -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/tools/test-execution/e2e-execute.js +9 -1
- package/dist/mcp/tools/test-generation/generate.d.ts +6 -1
- package/dist/mcp/tools/test-generation/generate.js +8 -0
- package/dist/mcp/types.d.ts +10 -4
- 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/dist/shared/error-utils.d.ts +15 -0
- package/dist/shared/error-utils.js +21 -0
- package/dist/shared/events/domain-events.d.ts +2 -1
- package/package.json +10 -6
- 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-3EZ5DR2R.js +0 -21
- 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-CZO4BJG5.js +0 -2
- package/dist/cli/chunks/chunk-J27F4NSB.js +0 -2
- package/dist/cli/chunks/chunk-J5UNP6W3.js +0 -2
- package/dist/cli/chunks/chunk-MI5Q55DG.js +0 -65
- package/dist/cli/chunks/chunk-TY5WC3FT.js +0 -12
- package/dist/cli/chunks/chunk-UDHVCKGA.js +0 -5
- package/dist/cli/chunks/chunk-XQSIRBKT.js +0 -180
- package/dist/cli/chunks/chunk-YXP6BKGS.js +0 -730
- package/dist/cli/chunks/chunk-ZBABIZ2D.js +0 -2
- package/dist/cli/chunks/chunk-ZCWERUYB.js +0 -12
- 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/task-handlers-NH4GJHCJ.js +0 -9
- package/dist/cli/chunks/test-MPHGT4T6.js +0 -33
- 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/vibium-HOGMFJ2Z.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
|
@@ -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
|
package/dist/cli/commands/ci.js
CHANGED
|
@@ -53,7 +53,7 @@ async function executePhase(phase, context, outputDir, phaseIndex) {
|
|
|
53
53
|
if (result.success && result.value) {
|
|
54
54
|
const gen = result.value;
|
|
55
55
|
details = { testsGenerated: gen.tests.length, coverageEstimate: gen.coverageEstimate };
|
|
56
|
-
summary = `Generated ${gen.tests.length} tests (est. ${gen.coverageEstimate}% coverage)`;
|
|
56
|
+
summary = `Generated ${gen.tests.length} tests (${gen.coverageEstimate == null ? 'coverage unmeasured' : `est. ${gen.coverageEstimate}% coverage`})`;
|
|
57
57
|
const artifactPath = path.join(outputDir, 'test-generation.json');
|
|
58
58
|
fs.writeFileSync(artifactPath, toJSON(gen), 'utf-8');
|
|
59
59
|
artifacts.push(artifactPath);
|
|
@@ -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
|
}
|
|
@@ -8,11 +8,13 @@ import chalk from 'chalk';
|
|
|
8
8
|
import { filterTestFilesForFramework, walkSourceFiles } from '../utils/file-discovery.js';
|
|
9
9
|
import { writeOutput, toJSON, toJUnit, testRunToMarkdown } from '../utils/ci-output.js';
|
|
10
10
|
import { writeQualityEvidence } from '../../domains/quality-assessment/quality-evidence.js';
|
|
11
|
+
import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
|
|
11
12
|
export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
12
13
|
const testCmd = new Command('test')
|
|
13
14
|
.description('Test generation, execution, scheduling, and load testing')
|
|
14
15
|
.argument('<action>', 'Action (generate|execute|schedule|load)')
|
|
15
16
|
.argument('[target]', 'Target file or directory')
|
|
17
|
+
.option('--behavior-examples <path>', 'JSON specification examples for a single source file')
|
|
16
18
|
.option('-f, --framework <framework>', 'Test framework', 'vitest')
|
|
17
19
|
.option('-t, --type <type>', 'Test type (unit|integration|e2e)', 'unit')
|
|
18
20
|
.option('-F, --format <format>', 'Output format (text|json|junit|markdown)', 'text')
|
|
@@ -44,7 +46,17 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
44
46
|
return;
|
|
45
47
|
}
|
|
46
48
|
console.log(chalk.gray(` Found ${sourceFiles.length} source files\n`));
|
|
49
|
+
let behaviorExamples;
|
|
50
|
+
if (options.behaviorExamples) {
|
|
51
|
+
if (sourceFiles.length !== 1)
|
|
52
|
+
throw new Error('--behavior-examples requires exactly one source file');
|
|
53
|
+
const fs = await import('node:fs/promises');
|
|
54
|
+
// Same boundary validator as the MCP tools (#795): a malformed
|
|
55
|
+
// fixture file fails here with a non-zero exit.
|
|
56
|
+
behaviorExamples = validateBehaviorExamples(JSON.parse(await fs.readFile(options.behaviorExamples, 'utf8')));
|
|
57
|
+
}
|
|
47
58
|
const result = await testGenAPI.generateTests({
|
|
59
|
+
behaviorExamples,
|
|
48
60
|
sourceFiles,
|
|
49
61
|
testType: options.type,
|
|
50
62
|
framework: options.framework,
|
|
@@ -73,7 +85,7 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
73
85
|
else if (format === 'markdown') {
|
|
74
86
|
const md = `# Test Generation Report\n\n` +
|
|
75
87
|
`- **Tests Generated**: ${generated.tests.length}\n` +
|
|
76
|
-
`- **Coverage Estimate**: ${generated.coverageEstimate}
|
|
88
|
+
`- **Coverage Estimate**: ${generated.coverageEstimate == null ? 'Unmeasured' : generated.coverageEstimate + '%'}\n` +
|
|
77
89
|
`- **Patterns Used**: ${generated.patternsUsed.join(', ') || 'none'}\n\n` +
|
|
78
90
|
`## Tests\n\n` +
|
|
79
91
|
generated.tests.map(t => `- **${t.name}** (${t.assertions} assertions) — \`${t.sourceFile}\``).join('\n') + '\n';
|
|
@@ -100,14 +112,17 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
100
112
|
if (generated.tests.length > 10) {
|
|
101
113
|
console.log(chalk.gray(` ... and ${generated.tests.length - 10} more`));
|
|
102
114
|
}
|
|
103
|
-
console.log(`\n Coverage Estimate: ${chalk.yellow(generated.coverageEstimate + '%')}`);
|
|
115
|
+
console.log(`\n Coverage Estimate: ${chalk.yellow(generated.coverageEstimate == null ? 'Unmeasured' : generated.coverageEstimate + '%')}`);
|
|
104
116
|
if (generated.patternsUsed.length > 0) {
|
|
105
117
|
console.log(` Patterns Used: ${chalk.cyan(generated.patternsUsed.join(', '))}`);
|
|
106
118
|
}
|
|
107
119
|
}
|
|
108
120
|
}
|
|
109
121
|
else {
|
|
110
|
-
|
|
122
|
+
// A rejected generation (including fixtures the domain refuses,
|
|
123
|
+
// e.g. an unknown export) must not exit 0 (#795).
|
|
124
|
+
console.error(chalk.red(`Failed: ${result.error?.message || 'Unknown error'}`));
|
|
125
|
+
await cleanupAndExit(1);
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
else if (action === 'execute') {
|
|
@@ -94,6 +94,8 @@ interface InitOptions {
|
|
|
94
94
|
wizard?: boolean;
|
|
95
95
|
auto?: boolean;
|
|
96
96
|
upgrade?: boolean;
|
|
97
|
+
/** Explicitly install the optional browser engine and browser payload. */
|
|
98
|
+
browserEngine?: boolean;
|
|
97
99
|
minimal?: boolean;
|
|
98
100
|
skipPatterns?: boolean;
|
|
99
101
|
skipCodeIndex?: boolean;
|
|
@@ -37,6 +37,8 @@ export class InitHandler {
|
|
|
37
37
|
.option('--wizard', 'Run interactive setup wizard')
|
|
38
38
|
.option('--auto', 'Auto-configure based on project analysis')
|
|
39
39
|
.option('-u, --upgrade', 'Upgrade existing installation (overwrite skills, agents, validation)')
|
|
40
|
+
.option('--browser-engine', 'Install optional Vibium and browser payload (explicit download)', false)
|
|
41
|
+
.option('--no-browser-engine', 'Skip optional browser setup (default)')
|
|
40
42
|
.option('--minimal', 'Minimal configuration (skip optional features)')
|
|
41
43
|
.option('--skip-patterns', 'Skip loading pre-trained patterns')
|
|
42
44
|
.option('--skip-code-index', 'Skip code intelligence pre-scan (supported escape hatch — KG can be built later via `aqe code index`, also via env AQE_SKIP_CODE_INDEX=1)')
|
|
@@ -103,7 +105,7 @@ export class InitHandler {
|
|
|
103
105
|
if (options.wizard || options.auto) {
|
|
104
106
|
console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
|
|
105
107
|
// Use modular orchestrator for --auto or --modular
|
|
106
|
-
if (options.auto || options.modular) {
|
|
108
|
+
if (options.auto || options.modular || options.browserEngine) {
|
|
107
109
|
await this.runModularInit(options, context);
|
|
108
110
|
return;
|
|
109
111
|
}
|
|
@@ -128,7 +130,7 @@ export class InitHandler {
|
|
|
128
130
|
// surface it was meant to suppress.
|
|
129
131
|
const noClaudeRequested = options.claude === false;
|
|
130
132
|
const noStatusLineRequested = options.statusline === false;
|
|
131
|
-
if (options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
|
|
133
|
+
if (options.browserEngine || options.modular || platformRequested || databaseFree || noClaudeRequested || noStatusLineRequested) {
|
|
132
134
|
console.log(chalk.blue('\n Agentic QE v3 Initialization\n'));
|
|
133
135
|
await this.runModularInit(options, context);
|
|
134
136
|
return;
|
|
@@ -173,6 +175,7 @@ export class InitHandler {
|
|
|
173
175
|
autoMode: options.auto,
|
|
174
176
|
upgrade: options.upgrade,
|
|
175
177
|
minimal: options.minimal,
|
|
178
|
+
browserEngine: options.browserEngine,
|
|
176
179
|
skipPatterns: options.skipPatterns,
|
|
177
180
|
skipCodeIndex: options.skipCodeIndex,
|
|
178
181
|
withN8n: options.withN8n,
|
|
@@ -301,6 +304,7 @@ export class InitHandler {
|
|
|
301
304
|
projectRoot: process.cwd(),
|
|
302
305
|
autoMode: options.auto,
|
|
303
306
|
minimal: options.minimal,
|
|
307
|
+
browserEngine: options.browserEngine,
|
|
304
308
|
skipPatterns: options.skipPatterns,
|
|
305
309
|
withN8n: options.withN8n,
|
|
306
310
|
};
|
|
@@ -449,6 +453,8 @@ Options:
|
|
|
449
453
|
-u, --upgrade Upgrade existing installation (overwrite skills, agents, validation)
|
|
450
454
|
--minimal Minimal configuration (skip optional features)
|
|
451
455
|
--skip-patterns Skip loading pre-trained patterns
|
|
456
|
+
--browser-engine Install optional Vibium and browser payload
|
|
457
|
+
--no-browser-engine Skip browser setup (default)
|
|
452
458
|
--with-n8n Install n8n workflow testing agents and skills
|
|
453
459
|
--with-opencode Include OpenCode agent/skill provisioning
|
|
454
460
|
--with-codex Include OpenAI Codex hooks, instructions, skills, and MCP
|
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
|
|
@@ -213,6 +214,7 @@ program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
|
213
214
|
// ============================================================================
|
|
214
215
|
import { registerLazyCommand, registerLazyHandler } from './lazy-registry.js';
|
|
215
216
|
import { isForegroundCommandActive } from './foreground-command.js';
|
|
217
|
+
import { requestOwnedShutdown } from '../kernel/process-lifecycle.js';
|
|
216
218
|
registerLazyHandler(program, 'init', 'Initialize the AQE v3 system', () => import('./handlers/init-handler.js').then(m => m.createInitHandler(cleanupAndExit)), context);
|
|
217
219
|
registerLazyHandler(program, 'status', 'Show system status', () => import('./handlers/status-handler.js').then(m => m.createStatusHandler(cleanupAndExit, ensureInitializedStrict)), context);
|
|
218
220
|
registerLazyHandler(program, 'health', 'Check system health', () => import('./handlers/status-handler.js').then(m => m.createHealthHandler(cleanupAndExit, ensureInitializedStrict)), context);
|
|
@@ -378,12 +380,19 @@ registerLazyCommand(program, {
|
|
|
378
380
|
// ============================================================================
|
|
379
381
|
// Shutdown Handlers
|
|
380
382
|
// ============================================================================
|
|
383
|
+
// #801: `aqe mcp` runs the MCP server in this process and it claims the
|
|
384
|
+
// lifecycle; exiting here would pre-empt its graceful shutdown (which releases
|
|
385
|
+
// the shared patterns RVF lock). Every other command keeps the immediate exit.
|
|
381
386
|
process.on('SIGINT', async () => {
|
|
387
|
+
if (requestOwnedShutdown('SIGINT'))
|
|
388
|
+
return;
|
|
382
389
|
console.log(chalk.yellow('\n\nShutting down...'));
|
|
383
390
|
console.log(chalk.green('Shutdown complete\n'));
|
|
384
391
|
await cleanupAndExit(0);
|
|
385
392
|
});
|
|
386
393
|
process.on('SIGTERM', async () => {
|
|
394
|
+
if (requestOwnedShutdown('SIGTERM'))
|
|
395
|
+
return;
|
|
387
396
|
console.log(chalk.yellow('\nReceived SIGTERM, shutting down gracefully...'));
|
|
388
397
|
await cleanupAndExit(0);
|
|
389
398
|
});
|
|
@@ -420,7 +429,7 @@ async function main() {
|
|
|
420
429
|
await cleanupAndExit(process.exitCode ?? 0);
|
|
421
430
|
}
|
|
422
431
|
main().catch(async (error) => {
|
|
423
|
-
console.error(chalk.red('Fatal error:'), error);
|
|
432
|
+
console.error(chalk.red('Fatal error:'), formatErrorForLog(error));
|
|
424
433
|
await cleanupAndExit(1);
|
|
425
434
|
});
|
|
426
435
|
//# sourceMappingURL=index.js.map
|
|
@@ -87,7 +87,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
87
87
|
// Return a graceful fallback with warning when no source files provided
|
|
88
88
|
return ok({
|
|
89
89
|
testsGenerated: 0,
|
|
90
|
-
coverageEstimate:
|
|
90
|
+
coverageEstimate: null,
|
|
91
91
|
tests: [],
|
|
92
92
|
patternsUsed: [],
|
|
93
93
|
warning: 'No source files or code provided for test generation. Provide sourceCode, filePath, or sourceFiles in the payload.',
|
|
@@ -111,6 +111,7 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
111
111
|
coverageTarget: payload.coverageGoal || 80,
|
|
112
112
|
patterns: [],
|
|
113
113
|
importPathOverrides,
|
|
114
|
+
behaviorExamples: payload.behaviorExamples,
|
|
114
115
|
});
|
|
115
116
|
// Always clean up the temp file we created — even on failure
|
|
116
117
|
if (tempPath) {
|
|
@@ -134,6 +135,8 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
134
135
|
type: t.type,
|
|
135
136
|
sourceFile: rewritten.sourceFile,
|
|
136
137
|
assertions: t.assertions,
|
|
138
|
+
generationMode: t.generationMode,
|
|
139
|
+
generationLimits: t.generationLimits,
|
|
137
140
|
testCode: rewritten.testCode,
|
|
138
141
|
};
|
|
139
142
|
});
|
|
@@ -148,13 +151,15 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
148
151
|
patternsUsed: generatedTests.patternsUsed,
|
|
149
152
|
llmEnhanced,
|
|
150
153
|
...(llmEnhanced ? {} : {
|
|
151
|
-
generationMode: 'deterministic-template',
|
|
152
|
-
note:
|
|
153
|
-
? '
|
|
154
|
-
:
|
|
155
|
-
'
|
|
156
|
-
'
|
|
157
|
-
|
|
154
|
+
generationMode: generatedTests.tests.some(t => t.generationMode === 'behavior-examples') ? 'behavior-examples' : 'deterministic-template',
|
|
155
|
+
note: generatedTests.tests.some(t => t.generationMode === 'behavior-examples')
|
|
156
|
+
? 'Assertions use caller-supplied specification examples. Coverage is unmeasured; inspect generationLimits on each test.'
|
|
157
|
+
: payload.aiEnhancement === false
|
|
158
|
+
? 'LLM enhancement was disabled by the caller (aiEnhancement: false). Coverage is unmeasured; inspect generationLimits on each test.'
|
|
159
|
+
: 'No LLM provider was available, so tests are deterministic template ' +
|
|
160
|
+
'scaffolding rather than source-aware. Configure a provider in ' +
|
|
161
|
+
'.agentic-qe/llm-config.json (or set a provider API key) and ensure ' +
|
|
162
|
+
'AQE_LLM_ROUTER_DISABLED is not set.',
|
|
158
163
|
}),
|
|
159
164
|
});
|
|
160
165
|
}
|
|
@@ -7,7 +7,7 @@ export * from './consensus';
|
|
|
7
7
|
export * from './claims';
|
|
8
8
|
export type { Protocol, ProtocolSchedule, ProtocolAction, ProtocolExecution, ProtocolExecutionStatus, ActionExecutionResult, ActionExecutionStatus, ProtocolExecutor, WorkflowDefinition as CrossDomainWorkflowDefinition, WorkflowStep as CrossDomainWorkflowStep, WorkflowCondition, WorkflowTrigger as CrossDomainWorkflowTrigger, WorkflowHandler, WorkflowContext as CrossDomainWorkflowContext, WorkflowExecution as CrossDomainWorkflowExecution, WorkflowExecutionStatus as CrossDomainWorkflowExecutionStatus, StepExecutionResult as CrossDomainStepExecutionResult, WorkflowExecutor, CrossDomainHandler, CrossDomainHandlerConfig, DomainRoute, EventSubscription, EventCorrelation, EventAggregation, CrossDomainRouter, } from './interfaces';
|
|
9
9
|
export { TaskAuditLogger, createTaskAuditLogger, } from './services';
|
|
10
|
-
export type { TaskAuditEntry, TaskAuditConfig, TaskOperation, } from './services';
|
|
10
|
+
export type { TaskAuditEntry, TaskAuditSequencedEntry, TaskAuditConfig, TaskAuditFilter, TaskAuditWindow, TaskAuditSnapshot, TaskOperation, } from './services';
|
|
11
11
|
export { CrossDomainEventRouter, createCrossDomainRouter, } from './cross-domain-router';
|
|
12
12
|
export { DefaultProtocolExecutor, createProtocolExecutor, } from './protocol-executor';
|
|
13
13
|
export { WorkflowOrchestrator, createWorkflowOrchestrator, WorkflowEvents, } from './workflow-orchestrator';
|
|
@@ -162,7 +162,7 @@ export async function handleTaskCompleted(ctx, event) {
|
|
|
162
162
|
// Task failed handler
|
|
163
163
|
// ============================================================================
|
|
164
164
|
export async function handleTaskFailed(ctx, event) {
|
|
165
|
-
const { taskId, error } = event.payload;
|
|
165
|
+
const { taskId, error, callerError } = event.payload;
|
|
166
166
|
const cancelled = settleCancelledTask(ctx.tasks, taskId);
|
|
167
167
|
if (cancelled.ignored) {
|
|
168
168
|
if (cancelled.settledNow) {
|
|
@@ -177,8 +177,10 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
177
177
|
if (execution.status === 'running' || execution.status === 'assigned') {
|
|
178
178
|
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
179
179
|
}
|
|
180
|
-
// ADR-064: Record failure in domain circuit breaker
|
|
181
|
-
|
|
180
|
+
// ADR-064: Record failure in domain circuit breaker. A task rejected for
|
|
181
|
+
// invalid caller input says nothing about the domain's health, so it must
|
|
182
|
+
// not open the breaker for every other caller (#795).
|
|
183
|
+
if (ctx.domainBreakerRegistry && execution.assignedDomain && !callerError) {
|
|
182
184
|
ctx.domainBreakerRegistry.getBreaker(execution.assignedDomain).recordFailure(new Error(error || 'Task failed'));
|
|
183
185
|
}
|
|
184
186
|
// ADR-064 Phase 3: Fail the trace span for this task
|
|
@@ -189,8 +191,9 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
189
191
|
ctx.taskTraceContexts.delete(taskId);
|
|
190
192
|
}
|
|
191
193
|
}
|
|
192
|
-
// Check if we should retry
|
|
193
|
-
|
|
194
|
+
// Check if we should retry. Caller-input errors are deterministic, so a
|
|
195
|
+
// retry would fail the same way.
|
|
196
|
+
if (!callerError && execution.retryCount < ctx.config.taskRetryLimit) {
|
|
194
197
|
ctx.auditLogger.logFail(taskId, execution.assignedAgents[0], error);
|
|
195
198
|
const retried = {
|
|
196
199
|
...execution,
|
|
@@ -227,7 +230,7 @@ export async function handleTaskFailed(ctx, event) {
|
|
|
227
230
|
}
|
|
228
231
|
// ADR-064 Phase 4A: Create competing hypotheses investigation for
|
|
229
232
|
// permanent failures in critical domains (p0/p1 priority)
|
|
230
|
-
if (ctx.hypothesisManager && (execution.task.priority === 'p0' || execution.task.priority === 'p1')) {
|
|
233
|
+
if (!callerError && ctx.hypothesisManager && (execution.task.priority === 'p0' || execution.task.priority === 'p1')) {
|
|
231
234
|
try {
|
|
232
235
|
const domain = execution.assignedDomain || 'test-generation';
|
|
233
236
|
const investigation = ctx.hypothesisManager.createInvestigation(taskId, domain, `Root cause analysis for ${execution.task.type} failure: ${error}`);
|
|
@@ -372,7 +372,7 @@ end_of_record
|
|
|
372
372
|
| Metric | Value |
|
|
373
373
|
|--------|-------|
|
|
374
374
|
| Tests Generated | ${data.testsGenerated} |
|
|
375
|
-
| Coverage Estimate | ${data.coverageEstimate}
|
|
375
|
+
| Coverage Estimate | ${data.coverageEstimate == null ? 'Unmeasured' : data.coverageEstimate + '%'} |
|
|
376
376
|
| Patterns Used | ${data.patternsUsed.length} |
|
|
377
377
|
|
|
378
378
|
## Patterns Applied
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Agentic QE v3 - Coordination Services
|
|
3
3
|
* Exports services used by coordination components
|
|
4
4
|
*/
|
|
5
|
-
export { TaskAuditLogger, createTaskAuditLogger, type TaskAuditEntry, type TaskAuditConfig, type TaskOperation, } from './task-audit-logger';
|
|
5
|
+
export { TaskAuditLogger, createTaskAuditLogger, type TaskAuditEntry, type TaskAuditSequencedEntry, type TaskAuditConfig, type TaskAuditFilter, type TaskAuditWindow, type TaskAuditSnapshot, type TaskOperation, } from './task-audit-logger';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|