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
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
* Uses TypeScript AST parser for code analysis
|
|
7
7
|
* Delegates to specialized services for TDD, property tests, and test data
|
|
8
8
|
*/
|
|
9
|
+
import { generateBehaviorExamples } from './behavior-examples.js';
|
|
10
|
+
import { validateBehaviorExamples } from './behavior-example-validation.js';
|
|
9
11
|
import { LoggerFactory } from '../../../logging/index.js';
|
|
10
12
|
import { v4 as uuidv4 } from 'uuid';
|
|
11
13
|
import * as fs from 'fs';
|
|
12
14
|
import * as path from 'path';
|
|
13
15
|
import ts from 'typescript';
|
|
14
16
|
import { ok, err } from '../../../shared/types/index.js';
|
|
15
|
-
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
17
|
+
import { CallerInputError, toErrorMessage } from '../../../shared/error-utils.js';
|
|
16
18
|
import { TestGeneratorFactory } from '../factories/test-generator-factory.js';
|
|
17
19
|
import { TDDGeneratorService } from './tdd-generator.js';
|
|
18
20
|
import { PropertyTestGeneratorService } from './property-test-generator.js';
|
|
@@ -83,6 +85,7 @@ export class TestGeneratorService {
|
|
|
83
85
|
config;
|
|
84
86
|
memory;
|
|
85
87
|
generatorFactory;
|
|
88
|
+
usesDefaultGenerator;
|
|
86
89
|
tddGenerator;
|
|
87
90
|
propertyTestGenerator;
|
|
88
91
|
testDataGenerator;
|
|
@@ -92,6 +95,7 @@ export class TestGeneratorService {
|
|
|
92
95
|
constructor(dependencies, config = {}) {
|
|
93
96
|
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
94
97
|
this.memory = dependencies.memory;
|
|
98
|
+
this.usesDefaultGenerator = !dependencies.generatorFactory;
|
|
95
99
|
this.generatorFactory = dependencies.generatorFactory || new TestGeneratorFactory();
|
|
96
100
|
this.tddGenerator = dependencies.tddGenerator || new TDDGeneratorService();
|
|
97
101
|
this.propertyTestGenerator = dependencies.propertyTestGenerator || new PropertyTestGeneratorService();
|
|
@@ -123,11 +127,11 @@ export class TestGeneratorService {
|
|
|
123
127
|
* Enhance generated test code using LLM
|
|
124
128
|
* Adds edge cases, improves assertions, and adds documentation
|
|
125
129
|
*/
|
|
126
|
-
async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context) {
|
|
130
|
+
async enhanceTestWithLLM(testCode, sourceCode, analysis, sourceFilePath, context, showSourcePath = true) {
|
|
127
131
|
if (!this.llmRouter)
|
|
128
132
|
return { code: testCode, enhanced: false };
|
|
129
133
|
try {
|
|
130
|
-
let prompt = this.buildTestEnhancementPrompt(testCode, sourceCode, analysis);
|
|
134
|
+
let prompt = this.buildTestEnhancementPrompt(testCode, sourceCode, analysis, showSourcePath ? sourceFilePath : undefined, context?.importPath);
|
|
131
135
|
// Prepend historical edge case patterns if injector is available (loki-mode Item 5)
|
|
132
136
|
if (this.edgeCaseInjector) {
|
|
133
137
|
try {
|
|
@@ -223,8 +227,17 @@ Return ONLY the enhanced test code, no explanations.`,
|
|
|
223
227
|
/**
|
|
224
228
|
* Build prompt for test enhancement
|
|
225
229
|
*/
|
|
226
|
-
buildTestEnhancementPrompt(testCode, sourceCode, analysis) {
|
|
227
|
-
let prompt =
|
|
230
|
+
buildTestEnhancementPrompt(testCode, sourceCode, analysis, sourceFilePath, importPath) {
|
|
231
|
+
let prompt = '';
|
|
232
|
+
if (sourceFilePath || importPath) {
|
|
233
|
+
prompt += '## Module Under Test:\n';
|
|
234
|
+
if (sourceFilePath)
|
|
235
|
+
prompt += `- Source file: ${sourceFilePath}\n`;
|
|
236
|
+
if (importPath)
|
|
237
|
+
prompt += `- Import it in the tests from: '${importPath}'\n`;
|
|
238
|
+
prompt += '\n';
|
|
239
|
+
}
|
|
240
|
+
prompt += `## Source Code to Test:\n\`\`\`typescript\n${sourceCode}\n\`\`\`\n\n`;
|
|
228
241
|
prompt += `## Current Test Code:\n\`\`\`typescript\n${testCode}\n\`\`\`\n\n`;
|
|
229
242
|
if (analysis) {
|
|
230
243
|
if (analysis.functions.length > 0) {
|
|
@@ -303,6 +316,8 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
303
316
|
*/
|
|
304
317
|
async generateTests(request) {
|
|
305
318
|
try {
|
|
319
|
+
// Throws CallerInputError (caught below) for malformed examples.
|
|
320
|
+
validateBehaviorExamples(request.behaviorExamples);
|
|
306
321
|
// Auto-detect language and framework if not provided (ADR-078)
|
|
307
322
|
const resolved = resolveRequest({
|
|
308
323
|
sourceFiles: request.sourceFiles,
|
|
@@ -312,7 +327,10 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
312
327
|
});
|
|
313
328
|
const effectiveFramework = (request.framework || resolved?.framework || 'vitest');
|
|
314
329
|
const effectiveLanguage = request.language || resolved?.language;
|
|
315
|
-
const { sourceFiles, testType,
|
|
330
|
+
const { sourceFiles, testType, patterns = [], } = request;
|
|
331
|
+
if (request.behaviorExamples?.length && sourceFiles.length !== 1) {
|
|
332
|
+
return err(new CallerInputError('behaviorExamples requires exactly one source file'));
|
|
333
|
+
}
|
|
316
334
|
if (sourceFiles.length === 0) {
|
|
317
335
|
return err(new Error('No source files provided'));
|
|
318
336
|
}
|
|
@@ -335,7 +353,9 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
335
353
|
}
|
|
336
354
|
}
|
|
337
355
|
}
|
|
338
|
-
|
|
356
|
+
// Generation does not execute or instrument the source. Assertion counts
|
|
357
|
+
// are not coverage evidence, including LLM-generated and empty results.
|
|
358
|
+
const coverageEstimate = null;
|
|
339
359
|
await this.storeGenerationMetadata(tests, patternsUsed);
|
|
340
360
|
return ok({
|
|
341
361
|
tests,
|
|
@@ -458,16 +478,41 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
458
478
|
dependencies,
|
|
459
479
|
similarCode,
|
|
460
480
|
};
|
|
461
|
-
|
|
462
|
-
|
|
481
|
+
const hasExamples = (originalRequest?.behaviorExamples?.length ?? 0) > 0;
|
|
482
|
+
const jsSource = /\.(?:[cm]?[jt]s|[jt]sx)$/i.test(sourceFile);
|
|
483
|
+
const deterministicEligible = (this.usesDefaultGenerator || hasExamples)
|
|
484
|
+
&& testType === 'unit' && jsSource && ['vitest', 'jest', 'node-test'].includes(framework);
|
|
485
|
+
if (hasExamples && !deterministicEligible) {
|
|
486
|
+
throw new CallerInputError('Behavior examples require JavaScript/TypeScript and vitest, jest, or node-test');
|
|
487
|
+
}
|
|
488
|
+
const buildDeterministic = () => generateBehaviorExamples(sourceContent, sourceFile, originalRequest?.importPathOverrides?.[sourceFile] ?? path.resolve(sourceFile), framework, originalRequest?.behaviorExamples, testType);
|
|
489
|
+
// ADR-051: Enhance with LLM if enabled and available. Caller-supplied
|
|
490
|
+
// behavior examples are the oracle, so they are never rewritten by an LLM.
|
|
463
491
|
// #567: `llmEnhanced` reflects whether the LLM actually produced the code,
|
|
464
492
|
// not merely whether a router was configured — a broken provider must not
|
|
465
493
|
// report AI-enhanced output it did not produce.
|
|
494
|
+
const willEnhance = this.isLLMEnhancementAvailable() && !!sourceContent && !hasExamples;
|
|
495
|
+
// #795: without fixtures the LLM must start from the framework template,
|
|
496
|
+
// which carries the real import line for the module under test. The
|
|
497
|
+
// zero-assertion scaffold is only emitted when no LLM output is used.
|
|
498
|
+
let deterministic = deterministicEligible && !willEnhance ? buildDeterministic() : undefined;
|
|
499
|
+
let testCode = deterministic?.code ?? generator.generateTests(context);
|
|
466
500
|
let llmEnhanced = false;
|
|
467
|
-
if (
|
|
468
|
-
|
|
469
|
-
|
|
501
|
+
if (willEnhance) {
|
|
502
|
+
// An import override means `sourceFile` is a stand-in (the MCP handler's
|
|
503
|
+
// /tmp/aqe-temp-* copy of inline source). Do not show the LLM that path:
|
|
504
|
+
// it could echo it into the test in a form the temp-path rewrite misses.
|
|
505
|
+
const result = await this.enhanceTestWithLLM(testCode, sourceContent, codeAnalysis, sourceFile, context, originalRequest?.importPathOverrides?.[sourceFile] === undefined);
|
|
470
506
|
llmEnhanced = result.enhanced;
|
|
507
|
+
if (llmEnhanced) {
|
|
508
|
+
testCode = result.code;
|
|
509
|
+
}
|
|
510
|
+
else if (deterministicEligible) {
|
|
511
|
+
// The LLM produced nothing usable: fall back to the honest scaffold,
|
|
512
|
+
// never to template assertions with guessed expected values (#787).
|
|
513
|
+
deterministic = buildDeterministic();
|
|
514
|
+
testCode = deterministic.code;
|
|
515
|
+
}
|
|
471
516
|
}
|
|
472
517
|
const test = {
|
|
473
518
|
id: uuidv4(),
|
|
@@ -476,7 +521,8 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
476
521
|
testFile,
|
|
477
522
|
testCode,
|
|
478
523
|
type: testType,
|
|
479
|
-
assertions: this.countAssertions(testCode),
|
|
524
|
+
assertions: deterministic && !llmEnhanced ? deterministic.assertions : this.countAssertions(testCode),
|
|
525
|
+
...(!llmEnhanced && deterministic ? { generationMode: deterministic.mode, generationLimits: deterministic.limits } : {}),
|
|
480
526
|
// ADR-078: Include detected language and framework
|
|
481
527
|
language: effectiveLanguage,
|
|
482
528
|
framework: framework,
|
|
@@ -976,23 +1022,6 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
|
|
|
976
1022
|
}
|
|
977
1023
|
return Math.max(1, count);
|
|
978
1024
|
}
|
|
979
|
-
estimateCoverage(tests, target) {
|
|
980
|
-
const totalAssertions = tests.reduce((sum, t) => sum + t.assertions, 0);
|
|
981
|
-
const totalTests = tests.length;
|
|
982
|
-
const testBasedCoverage = totalTests * 4;
|
|
983
|
-
const assertionCoverage = totalAssertions * 1.5;
|
|
984
|
-
const typeMultiplier = tests.reduce((mult, t) => {
|
|
985
|
-
if (t.type === 'integration')
|
|
986
|
-
return mult + 0.1;
|
|
987
|
-
if (t.type === 'e2e')
|
|
988
|
-
return mult + 0.15;
|
|
989
|
-
return mult;
|
|
990
|
-
}, 1);
|
|
991
|
-
const rawEstimate = (testBasedCoverage + assertionCoverage) * typeMultiplier;
|
|
992
|
-
const diminishedEstimate = rawEstimate * (1 - rawEstimate / 200);
|
|
993
|
-
const estimatedCoverage = Math.min(target, Math.max(0, diminishedEstimate));
|
|
994
|
-
return Math.round(estimatedCoverage * 10) / 10;
|
|
995
|
-
}
|
|
996
1025
|
async storeGenerationMetadata(tests, patterns) {
|
|
997
1026
|
const metadata = {
|
|
998
1027
|
generatedAt: new Date().toISOString(),
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Axe-Core Accessibility Audit
|
|
3
|
-
*
|
|
4
|
-
* Lightweight implementation using vibium + axe-core for accessibility testing.
|
|
5
|
-
* Vibium provides browser automation via WebDriver BiDi (~202KB),
|
|
6
|
-
* axe-core provides accessibility rules (~3MB).
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - WCAG 2.0/2.1/2.2 compliance testing
|
|
10
|
-
* - Section 508 compliance
|
|
11
|
-
* - Best practices validation
|
|
12
|
-
* - Custom rule configuration
|
|
13
|
-
*
|
|
14
|
-
* @module visual-accessibility/axe-core-audit
|
|
15
|
-
*/
|
|
16
1
|
/**
|
|
17
2
|
* WCAG conformance levels
|
|
18
3
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { loadVibium, isVibiumReady, VIBIUM_SETUP } from '../../../integrations/vibium/runtime.js';
|
|
1
2
|
/**
|
|
2
3
|
* Agentic QE v3 - Axe-Core Accessibility Audit
|
|
3
4
|
*
|
|
@@ -83,8 +84,8 @@ export class AccessibilityAuditor {
|
|
|
83
84
|
}
|
|
84
85
|
// Check for vibium
|
|
85
86
|
try {
|
|
86
|
-
await
|
|
87
|
-
this.toolsAvailable.vibium =
|
|
87
|
+
await loadVibium();
|
|
88
|
+
this.toolsAvailable.vibium = isVibiumReady();
|
|
88
89
|
}
|
|
89
90
|
catch {
|
|
90
91
|
this.toolsAvailable.vibium = false;
|
|
@@ -138,11 +139,12 @@ export class AccessibilityAuditor {
|
|
|
138
139
|
* Run actual axe-core audit using vibium
|
|
139
140
|
*/
|
|
140
141
|
async runAxeCoreAudit(startTime) {
|
|
141
|
-
const { browser } = await
|
|
142
|
-
let
|
|
142
|
+
const { browser } = await loadVibium();
|
|
143
|
+
let instance = null;
|
|
143
144
|
try {
|
|
144
145
|
// Launch browser
|
|
145
|
-
|
|
146
|
+
instance = await browser.start({ headless: true });
|
|
147
|
+
const vibe = await instance.page();
|
|
146
148
|
// Navigate to URL
|
|
147
149
|
await vibe.go(this.config.url);
|
|
148
150
|
// Wait for selector if configured
|
|
@@ -153,12 +155,12 @@ export class AccessibilityAuditor {
|
|
|
153
155
|
}
|
|
154
156
|
// Inject axe-core library
|
|
155
157
|
const axeSource = loadAxeCoreSource();
|
|
156
|
-
await vibe.
|
|
158
|
+
await vibe.addScript(axeSource);
|
|
157
159
|
// Build axe configuration
|
|
158
160
|
const axeConfig = this.buildAxeConfig();
|
|
159
161
|
// Run axe-core audit
|
|
160
162
|
const axeScript = `
|
|
161
|
-
|
|
163
|
+
axe.run(${this.config.context ? JSON.stringify(this.config.context) : 'document'}, ${JSON.stringify(axeConfig)})
|
|
162
164
|
`;
|
|
163
165
|
const results = await vibe.evaluate(axeScript);
|
|
164
166
|
// Convert results
|
|
@@ -188,8 +190,8 @@ export class AccessibilityAuditor {
|
|
|
188
190
|
};
|
|
189
191
|
}
|
|
190
192
|
finally {
|
|
191
|
-
if (
|
|
192
|
-
await
|
|
193
|
+
if (instance) {
|
|
194
|
+
await instance.stop();
|
|
193
195
|
}
|
|
194
196
|
}
|
|
195
197
|
}
|
|
@@ -218,7 +220,7 @@ export class AccessibilityAuditor {
|
|
|
218
220
|
createFallbackResult(startTime) {
|
|
219
221
|
const errors = [];
|
|
220
222
|
if (!this.toolsAvailable.vibium) {
|
|
221
|
-
errors.push(
|
|
223
|
+
errors.push(`Vibium runtime or browser payload unavailable; run ${VIBIUM_SETUP}`);
|
|
222
224
|
}
|
|
223
225
|
if (!this.toolsAvailable.axeCore) {
|
|
224
226
|
errors.push('axe-core is not installed. Install with: npm install axe-core');
|
|
@@ -74,6 +74,10 @@ export declare class AgentsInstaller {
|
|
|
74
74
|
* Install a single agent
|
|
75
75
|
*/
|
|
76
76
|
private installAgent;
|
|
77
|
+
/**
|
|
78
|
+
* Describe an agent from its installed file (type, description, domain).
|
|
79
|
+
*/
|
|
80
|
+
private describeAgent;
|
|
77
81
|
/**
|
|
78
82
|
* Get the type of an agent based on its name
|
|
79
83
|
*/
|
|
@@ -11,6 +11,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
|
|
|
11
11
|
import { loadOverlays, applyOverlayToContent } from '../agents/overlay-loader.js';
|
|
12
12
|
import { validateFleetMcpDeps } from '../validation/steps/agent-mcp-validator.js';
|
|
13
13
|
import { findPackageRoot } from './find-package-root.js';
|
|
14
|
+
import { GENERATED_ON_LINE, writeTextIfChangedIgnoring } from './idempotent-write.js';
|
|
14
15
|
// ============================================================================
|
|
15
16
|
// Helpers
|
|
16
17
|
// ============================================================================
|
|
@@ -240,15 +241,21 @@ export class AgentsInstaller {
|
|
|
240
241
|
result.totalCount = availableAgents.length;
|
|
241
242
|
// Filter agents based on options
|
|
242
243
|
const agentsToInstall = this.filterAgents(availableAgents);
|
|
244
|
+
// Every selected agent present on disk after this run — newly installed or
|
|
245
|
+
// already there — so the index describes the install, not just this run's
|
|
246
|
+
// delta (a repeat init used to rewrite it as "Total Agents: 0", #778).
|
|
247
|
+
const presentAgents = [];
|
|
243
248
|
// Install each agent
|
|
244
249
|
for (const agentName of agentsToInstall) {
|
|
245
250
|
try {
|
|
246
251
|
const agentInfo = await this.installAgent(agentName, targetAgentsDir, targetSubagentsDir);
|
|
247
252
|
if (agentInfo) {
|
|
248
253
|
result.installed.push(agentInfo);
|
|
254
|
+
presentAgents.push(agentInfo);
|
|
249
255
|
}
|
|
250
256
|
else {
|
|
251
257
|
result.skipped.push(agentName);
|
|
258
|
+
presentAgents.push(this.describeAgent(agentName, targetAgentsDir, targetSubagentsDir));
|
|
252
259
|
}
|
|
253
260
|
}
|
|
254
261
|
catch (error) {
|
|
@@ -313,7 +320,7 @@ export class AgentsInstaller {
|
|
|
313
320
|
}
|
|
314
321
|
}
|
|
315
322
|
// Create agents index file
|
|
316
|
-
await this.createAgentsIndex(targetAgentsDir,
|
|
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
|
/**
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
* Design goals:
|
|
10
10
|
* - Graceful: never fail init if Vibium install fails; report and continue.
|
|
11
11
|
* - Idempotent: skip if Vibium is already on PATH.
|
|
12
|
-
* - Opt-
|
|
12
|
+
* - Opt-in only: called by init only with --browser-engine.
|
|
13
13
|
* - No new runtime deps: shells out to `npm install -g vibium` via child_process.
|
|
14
14
|
*/
|
|
15
15
|
import { type SpawnSyncReturns } from 'node:child_process';
|
|
16
16
|
/**
|
|
17
|
-
* Default Vibium npm spec. Major-line pin via caret (`^26.
|
|
18
|
-
* semver will accept any 26.x.y >= 26.
|
|
17
|
+
* Default Vibium npm spec. Major-line pin via caret (`^26.8.21`) — npm
|
|
18
|
+
* semver will accept any 26.x.y >= 26.8.21 but reject 27.0.0+. The intent
|
|
19
19
|
* is to auto-receive security patches and additive minor features while
|
|
20
20
|
* blocking breaking-change major bumps, which is where Vibium's CLI
|
|
21
21
|
* contract (`go`, `--headless`, `viewport`, exit codes) can change.
|
|
@@ -27,7 +27,7 @@ import { type SpawnSyncReturns } from 'node:child_process';
|
|
|
27
27
|
* Bump procedure: update this constant (e.g. to ^27.0.0 at a major), run
|
|
28
28
|
* scripts/smoke-test.sh against the new version, then land the bump.
|
|
29
29
|
*/
|
|
30
|
-
export declare const DEFAULT_VIBIUM_SPEC = "vibium@^26.
|
|
30
|
+
export declare const DEFAULT_VIBIUM_SPEC = "vibium@^26.8.21";
|
|
31
31
|
/**
|
|
32
32
|
* Spawner injected into {@link installBrowserEngine} so tests can mock the
|
|
33
33
|
* shell-out without monkey-patching the child_process module (ESM namespaces
|
|
@@ -66,7 +66,7 @@ export interface BrowserEngineInstallResult {
|
|
|
66
66
|
*/
|
|
67
67
|
platformHint?: PlatformHint;
|
|
68
68
|
}
|
|
69
|
-
export type BrowserEngineDetectionStatus = 'ready' | 'cli-missing' | 'payload-missing';
|
|
69
|
+
export type BrowserEngineDetectionStatus = 'ready' | 'cli-missing' | 'payload-missing' | 'unsupported-version';
|
|
70
70
|
export interface BrowserEngineDetectionResult {
|
|
71
71
|
status: BrowserEngineDetectionStatus;
|
|
72
72
|
version?: string;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Design goals:
|
|
10
10
|
* - Graceful: never fail init if Vibium install fails; report and continue.
|
|
11
11
|
* - Idempotent: skip if Vibium is already on PATH.
|
|
12
|
-
* - Opt-
|
|
12
|
+
* - Opt-in only: called by init only with --browser-engine.
|
|
13
13
|
* - No new runtime deps: shells out to `npm install -g vibium` via child_process.
|
|
14
14
|
*/
|
|
15
15
|
import { spawnSync as realSpawnSync } from 'node:child_process';
|
|
@@ -17,8 +17,8 @@ import * as os from 'node:os';
|
|
|
17
17
|
import * as fs from 'node:fs';
|
|
18
18
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
19
19
|
/**
|
|
20
|
-
* Default Vibium npm spec. Major-line pin via caret (`^26.
|
|
21
|
-
* semver will accept any 26.x.y >= 26.
|
|
20
|
+
* Default Vibium npm spec. Major-line pin via caret (`^26.8.21`) — npm
|
|
21
|
+
* semver will accept any 26.x.y >= 26.8.21 but reject 27.0.0+. The intent
|
|
22
22
|
* is to auto-receive security patches and additive minor features while
|
|
23
23
|
* blocking breaking-change major bumps, which is where Vibium's CLI
|
|
24
24
|
* contract (`go`, `--headless`, `viewport`, exit codes) can change.
|
|
@@ -30,7 +30,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
|
|
|
30
30
|
* Bump procedure: update this constant (e.g. to ^27.0.0 at a major), run
|
|
31
31
|
* scripts/smoke-test.sh against the new version, then land the bump.
|
|
32
32
|
*/
|
|
33
|
-
export const DEFAULT_VIBIUM_SPEC = 'vibium@^26.
|
|
33
|
+
export const DEFAULT_VIBIUM_SPEC = 'vibium@^26.8.21';
|
|
34
34
|
const defaultPlatformProbe = {
|
|
35
35
|
platform: () => os.platform(),
|
|
36
36
|
arch: () => os.arch(),
|
|
@@ -109,7 +109,7 @@ export function detectVibium(spawner = defaultSpawner, timeoutMs = 5_000) {
|
|
|
109
109
|
const raw = stdout || stderr;
|
|
110
110
|
if (!raw)
|
|
111
111
|
return 'unknown';
|
|
112
|
-
// Extract first semver-looking token if present (e.g. "vibium version 26.
|
|
112
|
+
// Extract first semver-looking token if present (e.g. "vibium version 26.8.21" → "26.8.21")
|
|
113
113
|
const match = raw.match(/v?(\d+\.\d+\.\d+(?:[-+][\w.]+)?)/);
|
|
114
114
|
return match ? match[1] : raw.split(/\s+/)[0] || 'unknown';
|
|
115
115
|
}
|
|
@@ -121,6 +121,15 @@ export function detectBrowserEngine(spawner = defaultSpawner, timeoutMs = 5_000)
|
|
|
121
121
|
const version = detectVibium(spawner, timeoutMs);
|
|
122
122
|
if (!version)
|
|
123
123
|
return { status: 'cli-missing' };
|
|
124
|
+
// The modern JS adapter is supported only by stable 26.x releases >= 26.8.21.
|
|
125
|
+
const semver = /^(\d+)\.(\d+)\.(\d+)(?:\+[\w.]+)?$/.exec(version);
|
|
126
|
+
if (!semver || Number(semver[1]) !== 26 ||
|
|
127
|
+
Number(semver[2]) < 8 || (Number(semver[2]) === 8 && Number(semver[3]) < 21)) {
|
|
128
|
+
return {
|
|
129
|
+
status: 'unsupported-version', version,
|
|
130
|
+
message: `Vibium ${version} is unsupported; install ${DEFAULT_VIBIUM_SPEC} for the browser.start() API`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
124
133
|
const payload = tryRun(spawner, 'vibium', ['is-installed'], timeoutMs);
|
|
125
134
|
if (payload.status === 0)
|
|
126
135
|
return { status: 'ready', version };
|
|
@@ -176,7 +185,20 @@ export function installBrowserEngine(options = {}) {
|
|
|
176
185
|
'unknown npm install failure',
|
|
177
186
|
};
|
|
178
187
|
}
|
|
179
|
-
|
|
188
|
+
let verified = detectBrowserEngine(spawner);
|
|
189
|
+
if (verified.status === 'payload-missing') {
|
|
190
|
+
// Reinstalling an already-current npm package may not rerun postinstall.
|
|
191
|
+
// This installer is explicitly requested, so provision the payload directly.
|
|
192
|
+
const payloadInstall = tryRun(spawner, 'vibium', ['install'], timeoutMs);
|
|
193
|
+
if (payloadInstall.status !== 0) {
|
|
194
|
+
return {
|
|
195
|
+
status: 'install-failed', packageSpec, platformHint,
|
|
196
|
+
message: `Browser payload installation failed: ${payloadInstall.stderr?.trim() ||
|
|
197
|
+
payloadInstall.stdout?.trim() || 'vibium install failed'}. Run \`vibium install\` and verify with \`vibium is-installed\`.`,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
verified = detectBrowserEngine(spawner);
|
|
201
|
+
}
|
|
180
202
|
if (verified.status !== 'ready') {
|
|
181
203
|
const reason = verified.message ? `: ${verified.message}` : '';
|
|
182
204
|
return {
|
|
@@ -10,6 +10,7 @@ import { join, dirname } from 'path';
|
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
11
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
12
12
|
import { findPackageRoot } from './find-package-root.js';
|
|
13
|
+
import { writeFileIfChanged } from './idempotent-write.js';
|
|
13
14
|
import { selectCodexSkills } from './codex-skill-manifest.js';
|
|
14
15
|
import { createPlatformConfigGenerator, } from './platform-config-generator.js';
|
|
15
16
|
export const CODEX_COMPACT_GUIDANCE_MAX_BYTES = 512;
|
|
@@ -236,9 +237,10 @@ export class CodexInstaller {
|
|
|
236
237
|
const userGroups = (existing.hooks?.[event] || []).filter((group) => !owned(group));
|
|
237
238
|
mergedHooks[event] = [...userGroups, ...(generated.hooks?.[event] || [])];
|
|
238
239
|
}
|
|
239
|
-
|
|
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
|