agentic-qe 3.13.0 → 3.13.2
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/.agents/skills/aqe-plan-quality/SKILL.md +25 -0
- package/.agents/skills/aqe-plan-quality/agents/openai.yaml +4 -0
- package/.agents/skills/aqe-plan-quality/references/qe-routing.md +22 -0
- package/.agents/skills/aqe-review-quality/SKILL.md +24 -0
- package/.agents/skills/aqe-review-quality/agents/openai.yaml +4 -0
- package/.agents/skills/aqe-review-quality/references/quality-gates.md +20 -0
- package/.agents/skills/aqe-test-change/SKILL.md +26 -0
- package/.agents/skills/aqe-test-change/agents/openai.yaml +4 -0
- package/.agents/skills/aqe-test-change/references/test-specialties.md +23 -0
- package/.claude/helpers/ruflo-hook.cjs +5 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/.codex/hooks/aqe-codex-hook.cjs +69 -0
- package/.codex/hooks/ruflo-codex-hook.cjs +94 -0
- package/.codex/hooks.json +169 -0
- package/CHANGELOG.md +123 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-I4SNWMCM.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-ACX2DK7Y.js → agent-booster-wasm-PZYYTKSS.js} +2 -2
- package/dist/cli/chunks/{agent-handler-B45WP4ZJ.js → agent-handler-DNN7GXUN.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-QQLZDE56.js → agent-memory-branch-LVCBBCQY.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-WI47XKXI.js +2 -0
- package/dist/cli/chunks/{arena-SDB7723R.js → arena-422HSTPE.js} +2 -2
- package/dist/cli/chunks/{arena-G3IKZAG5.js → arena-OCEOLMCH.js} +4 -4
- package/dist/cli/chunks/{audit-GY46XUZA.js → audit-5O45K34M.js} +3 -3
- package/dist/cli/chunks/base-VJ6VDLD7.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-RJPBJU2Q.js → better-sqlite3-Y36THYK2.js} +2 -2
- package/dist/cli/chunks/{brain-handler-347CYMPN.js → brain-handler-7VHXYN3P.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-Z3ULBFSM.js → branch-enumerator-PZKOD6S6.js} +2 -2
- package/dist/cli/chunks/{browser-OYEIHD7F.js → browser-M74UO4WJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WRYHQQDU.js +2 -0
- package/dist/cli/chunks/{chunk-RVJPWRV6.js → chunk-24S5IUSI.js} +2 -2
- package/dist/cli/chunks/{chunk-3NOCK6ED.js → chunk-2DG44UZ5.js} +2 -2
- package/dist/cli/chunks/{chunk-34PEINFS.js → chunk-2QJPAQE5.js} +2 -2
- package/dist/cli/chunks/{chunk-SHCTEXNH.js → chunk-4DKL4H5L.js} +2 -2
- package/dist/cli/chunks/{chunk-A4QLGPYO.js → chunk-4FYTWD4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-YFGAHNCG.js → chunk-4HFNY3Z2.js} +3 -3
- package/dist/cli/chunks/{chunk-RVRBTOWX.js → chunk-4PM5VORA.js} +2 -2
- package/dist/cli/chunks/{chunk-QWYISZTN.js → chunk-4SFOQSXU.js} +2 -2
- package/dist/cli/chunks/{chunk-RSFIOR2I.js → chunk-4STE6VLR.js} +87 -87
- package/dist/cli/chunks/{chunk-54MFKCLT.js → chunk-54BCLRRJ.js} +2 -2
- package/dist/cli/chunks/{chunk-IYDYJ33J.js → chunk-5AAG7JTB.js} +2 -2
- package/dist/cli/chunks/{chunk-TVMFH5N2.js → chunk-5EFNZEOB.js} +2 -2
- package/dist/cli/chunks/{chunk-GUEZQOHL.js → chunk-5GGGZYFA.js} +1 -1
- package/dist/cli/chunks/{chunk-5KAT6WBQ.js → chunk-5KMBZTDI.js} +2 -2
- package/dist/cli/chunks/{chunk-ANYYTWOQ.js → chunk-5XYVRTI6.js} +2 -2
- package/dist/cli/chunks/{chunk-ANIDFJCT.js → chunk-62D27BDO.js} +3 -3
- package/dist/cli/chunks/{chunk-SNTUKW4Q.js → chunk-6DMB6WK5.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCFZ4USU.js → chunk-6R7TX5L4.js} +1 -1
- package/dist/cli/chunks/chunk-6UGYFYS4.js +2 -0
- package/dist/cli/chunks/chunk-6XHDH3IJ.js +3 -0
- package/dist/cli/chunks/{chunk-IHQTXJAQ.js → chunk-73HALJY5.js} +1 -1
- package/dist/cli/chunks/{chunk-7YXT6BXN.js → chunk-7TCVVVFA.js} +3 -3
- package/dist/cli/chunks/{chunk-RJZRWVL4.js → chunk-A2OD5Z4B.js} +1 -1
- package/dist/cli/chunks/{chunk-ES7WCYOU.js → chunk-AJ7A52GF.js} +1 -1
- package/dist/cli/chunks/{chunk-QCEW4ZDW.js → chunk-AP2BBV2D.js} +2 -2
- package/dist/cli/chunks/{chunk-FQLWQWRU.js → chunk-AS2HVJ42.js} +3 -3
- package/dist/cli/chunks/{chunk-7UNY32PU.js → chunk-ASIGTVFQ.js} +1 -1
- package/dist/cli/chunks/{chunk-EECM5XKY.js → chunk-B7KZMPF2.js} +1 -1
- package/dist/cli/chunks/{chunk-Z6QCOZ2H.js → chunk-BFKXHXWW.js} +2 -2
- package/dist/cli/chunks/{chunk-VC6EXDGY.js → chunk-BO2RBAPF.js} +2 -2
- package/dist/cli/chunks/{chunk-OXXMVQDF.js → chunk-BSQ32ZS5.js} +2 -2
- package/dist/cli/chunks/{chunk-WRYT4HTZ.js → chunk-CKTFKA7Q.js} +2 -2
- package/dist/cli/chunks/{chunk-QQB55ZJJ.js → chunk-CLBBFKXV.js} +2 -2
- package/dist/cli/chunks/{chunk-5FLTZ3KT.js → chunk-COOMXCCP.js} +2 -2
- package/dist/cli/chunks/{chunk-DYUC7WFA.js → chunk-DAHNHVND.js} +1 -1
- package/dist/cli/chunks/{chunk-6AOBLBR4.js → chunk-DCQQJLUY.js} +2 -2
- package/dist/cli/chunks/{chunk-LBE2P6UC.js → chunk-DIPOFCBX.js} +2 -2
- package/dist/cli/chunks/{chunk-EFRESRLB.js → chunk-DL2HDULJ.js} +5 -5
- package/dist/cli/chunks/{chunk-YRQLVGCI.js → chunk-DQXSDWRP.js} +2 -2
- package/dist/cli/chunks/{chunk-QI4CGJNK.js → chunk-E6JJ4ZRQ.js} +1 -1
- package/dist/cli/chunks/{chunk-KUA4HHU6.js → chunk-E6PYV3DB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZJG6N2OK.js → chunk-EABGQVTV.js} +1 -1
- package/dist/cli/chunks/{chunk-U2SW6KK5.js → chunk-EFHMS7TJ.js} +2 -2
- package/dist/cli/chunks/{chunk-CWUBOLKY.js → chunk-ELVUERQW.js} +2 -2
- package/dist/cli/chunks/{chunk-A7GLWWSE.js → chunk-EU7NUUL6.js} +1 -1
- package/dist/cli/chunks/{chunk-3UHEZ5HZ.js → chunk-F6UMLI5Y.js} +2 -2
- package/dist/cli/chunks/{chunk-TZPKTRJB.js → chunk-FECBWGCA.js} +2 -2
- package/dist/cli/chunks/{chunk-OETDMOOE.js → chunk-FFMUTX26.js} +1 -1
- package/dist/cli/chunks/{chunk-VLNPJAVH.js → chunk-FJ2L6P7O.js} +1 -1
- package/dist/cli/chunks/{chunk-2DIT5AUU.js → chunk-FMYNKZ2S.js} +2 -2
- package/dist/cli/chunks/{chunk-L4LLA5U7.js → chunk-FXXXLDB3.js} +1 -1
- package/dist/cli/chunks/{chunk-D3MPV5G7.js → chunk-FZEWEG6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-BGYLNCL6.js → chunk-G4LZ5SBC.js} +2 -2
- package/dist/cli/chunks/{chunk-J3L52EA4.js → chunk-GHJRLC3C.js} +5 -5
- package/dist/cli/chunks/{chunk-3JVUWKCO.js → chunk-GKKD22CC.js} +2 -2
- package/dist/cli/chunks/{chunk-32ZGV4Q4.js → chunk-GMKJWOXZ.js} +1 -1
- package/dist/cli/chunks/chunk-GMKQJEKX.js +2 -0
- package/dist/cli/chunks/{chunk-3GSYD5SL.js → chunk-GZ775E5O.js} +2 -2
- package/dist/cli/chunks/{chunk-GTUFX7AR.js → chunk-H6C2YTPX.js} +2 -2
- package/dist/cli/chunks/{chunk-UIPPJKON.js → chunk-HANBJ37Z.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOXWASCC.js → chunk-HANJESCY.js} +2 -2
- package/dist/cli/chunks/{chunk-JPIBPKBP.js → chunk-HD6PZHLC.js} +3 -3
- package/dist/cli/chunks/{chunk-FQY3UTGA.js → chunk-HHUKHEW5.js} +2 -2
- package/dist/cli/chunks/{chunk-W5YEIHIO.js → chunk-HQCJYUKC.js} +2 -2
- package/dist/cli/chunks/{chunk-CYL2FV23.js → chunk-IIZ3HBPV.js} +2 -2
- package/dist/cli/chunks/{chunk-HTPM3URI.js → chunk-IV77BQ2R.js} +2 -2
- package/dist/cli/chunks/{chunk-THBTN7XB.js → chunk-J722Z7VO.js} +2 -2
- package/dist/cli/chunks/{chunk-5EIOQCGN.js → chunk-JDRYENTD.js} +2 -2
- package/dist/cli/chunks/{chunk-NQNKKVNO.js → chunk-JKVUSXT4.js} +3 -3
- package/dist/cli/chunks/{chunk-CQFT7H3F.js → chunk-JMRUHQEL.js} +2 -2
- package/dist/cli/chunks/{chunk-PERJO2DY.js → chunk-JPO4AC5Q.js} +1 -1
- package/dist/cli/chunks/{chunk-KSYLRM4Q.js → chunk-JPPHM3I6.js} +2 -2
- package/dist/cli/chunks/{chunk-56WZFXTQ.js → chunk-K3MNTU4O.js} +2 -2
- package/dist/cli/chunks/{chunk-CPH5JP4L.js → chunk-K47EWX3M.js} +1 -1
- package/dist/cli/chunks/{chunk-7DMXCCSD.js → chunk-KAHMXURL.js} +1 -1
- package/dist/cli/chunks/{chunk-UNIBND6A.js → chunk-KHVW6DQS.js} +1 -1
- package/dist/cli/chunks/{chunk-RLCWR7TS.js → chunk-KKPWS3XJ.js} +98 -88
- package/dist/cli/chunks/chunk-KRRGOJ6K.js +2 -0
- package/dist/cli/chunks/chunk-LEOSNZR2.js +2 -0
- package/dist/cli/chunks/{chunk-TNRIGQ6U.js → chunk-LG6UUM55.js} +2 -2
- package/dist/cli/chunks/{chunk-HOKON5EL.js → chunk-LJWIBYTR.js} +2 -2
- package/dist/cli/chunks/{chunk-N7VOOI3U.js → chunk-LQDQTLWV.js} +2 -2
- package/dist/cli/chunks/{chunk-2NRZYQSF.js → chunk-LXYVWAFN.js} +2 -2
- package/dist/cli/chunks/{chunk-YPTGE5NJ.js → chunk-LZNJ7HXB.js} +2 -2
- package/dist/cli/chunks/{chunk-6SXKCIN5.js → chunk-M4JZOCV3.js} +1 -1
- package/dist/cli/chunks/{chunk-UMG5URNV.js → chunk-MBTVAIFF.js} +1 -1
- package/dist/cli/chunks/{chunk-N5MMBA35.js → chunk-MNDPSIEI.js} +1 -1
- package/dist/cli/chunks/{chunk-L4S722JD.js → chunk-MUSLUG6Y.js} +1 -1
- package/dist/cli/chunks/{chunk-VLBV2VL3.js → chunk-MVJ5UQI3.js} +1 -1
- package/dist/cli/chunks/{chunk-XFCWYQHW.js → chunk-N2AGOQCL.js} +2 -2
- package/dist/cli/chunks/{chunk-KVL63BSU.js → chunk-N4O2RWSL.js} +1 -1
- package/dist/cli/chunks/{chunk-L2SFGFE6.js → chunk-NBRKZOPM.js} +1 -1
- package/dist/cli/chunks/{chunk-NETN3OUG.js → chunk-NIE3SGZM.js} +1 -1
- package/dist/cli/chunks/{chunk-LOXVVMS4.js → chunk-NNIKJZA4.js} +3 -3
- package/dist/cli/chunks/{chunk-5ICQL42E.js → chunk-NTKIDOIW.js} +2 -2
- package/dist/cli/chunks/{chunk-Q7PBGNUD.js → chunk-ODE7Z667.js} +1 -1
- package/dist/cli/chunks/{chunk-K5N6SLHO.js → chunk-OYWZYG6Q.js} +1 -1
- package/dist/cli/chunks/{chunk-CFVEDUTW.js → chunk-P33EORZZ.js} +2 -2
- package/dist/cli/chunks/{chunk-R3GEXYO4.js → chunk-PILZKQX7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZJIX5FGQ.js → chunk-PJOH5Z5I.js} +2 -2
- package/dist/cli/chunks/{chunk-JGM6XCCP.js → chunk-PNQWEOE2.js} +1 -1
- package/dist/cli/chunks/{chunk-XKFE3FLI.js → chunk-PRQPUOSH.js} +2 -2
- package/dist/cli/chunks/{chunk-LWYLW7RX.js → chunk-PT6NTWGT.js} +2 -2
- package/dist/cli/chunks/{chunk-FBBZHATF.js → chunk-Q45FBGVV.js} +1 -1
- package/dist/cli/chunks/{chunk-SRQ3CPJE.js → chunk-Q625ISQI.js} +4 -4
- package/dist/cli/chunks/{chunk-BOVH6WSM.js → chunk-QS6TI7NR.js} +2 -2
- package/dist/cli/chunks/{chunk-4BDLD7V2.js → chunk-QVD3LU27.js} +1 -1
- package/dist/cli/chunks/{chunk-ZLXBNNNT.js → chunk-QZACODX6.js} +2 -2
- package/dist/cli/chunks/{chunk-NUQBJGGF.js → chunk-REBNPQI7.js} +2 -2
- package/dist/cli/chunks/{chunk-FAQLI3P5.js → chunk-RF2DMPX2.js} +2 -2
- package/dist/cli/chunks/{chunk-2VQVEQS4.js → chunk-RI2V2U2N.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMZR7WU.js → chunk-RJYAUJDC.js} +3 -3
- package/dist/cli/chunks/{chunk-KZTBNDNE.js → chunk-RWHHOQIC.js} +1 -1
- package/dist/cli/chunks/{chunk-ZEIG5IQ4.js → chunk-RWUK5VMZ.js} +2 -2
- package/dist/cli/chunks/{chunk-E3B5XTXJ.js → chunk-SOOI2HJB.js} +1 -1
- package/dist/cli/chunks/{chunk-IPHLXAMX.js → chunk-T2XXTEZV.js} +2 -2
- package/dist/cli/chunks/{chunk-USMDIIHY.js → chunk-T55XIENI.js} +2 -2
- package/dist/cli/chunks/{chunk-VSNRPMAZ.js → chunk-T726SRYP.js} +2 -2
- package/dist/cli/chunks/{chunk-RDU4WTV2.js → chunk-TLG56A27.js} +2 -2
- package/dist/cli/chunks/{chunk-FUU32QY5.js → chunk-TTWWCWAR.js} +2 -2
- package/dist/cli/chunks/{chunk-LXPB7H2P.js → chunk-TVWX7NYD.js} +1 -1
- package/dist/cli/chunks/{chunk-G5DFYX3J.js → chunk-U2FCUBBW.js} +2 -2
- package/dist/cli/chunks/{chunk-DRIJYTSK.js → chunk-UIQVVS7K.js} +2 -2
- package/dist/cli/chunks/{chunk-6DTOGSDV.js → chunk-UPGJZA3D.js} +4 -4
- package/dist/cli/chunks/{chunk-3K4SF57Q.js → chunk-UVLWT6QM.js} +1 -1
- package/dist/cli/chunks/{chunk-FL3BM54K.js → chunk-VKU5BUUC.js} +1 -1
- package/dist/cli/chunks/{chunk-AO7AHX6K.js → chunk-VOYUCJLK.js} +2 -2
- package/dist/cli/chunks/{chunk-BCKTBGDM.js → chunk-WMK2ZNLM.js} +3 -3
- package/dist/cli/chunks/{chunk-4BESADKE.js → chunk-WTSVP6OK.js} +2 -2
- package/dist/cli/chunks/{chunk-MBCGI3M2.js → chunk-XS2S3ECA.js} +5 -5
- package/dist/cli/chunks/chunk-XXQLFPIK.js +2 -0
- package/dist/cli/chunks/{chunk-HL2QMM4M.js → chunk-XZOTFJHU.js} +2 -2
- package/dist/cli/chunks/{chunk-QTU3CVOB.js → chunk-YTHUTBBH.js} +2 -2
- package/dist/cli/chunks/{chunk-BUGWPTMF.js → chunk-YWJ2GPD4.js} +2 -2
- package/dist/cli/chunks/{chunk-GFBLWFRV.js → chunk-YXTDCP6H.js} +1 -1
- package/dist/cli/chunks/{chunk-TZ73SXQ5.js → chunk-YZUMCXH6.js} +1 -1
- package/dist/cli/chunks/{chunk-VHYMSZNF.js → chunk-ZIT5VF43.js} +2 -2
- package/dist/cli/chunks/{chunk-IZRLIWFN.js → chunk-ZY5FB3JV.js} +2 -2
- package/dist/cli/chunks/{ci-74ZUCO5V.js → ci-EOFZKCSH.js} +2 -2
- package/dist/cli/chunks/{ci-output-HD6IZNJA.js → ci-output-TAJFQWDP.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-USZVMA42.js → circuit-breaker-QA7YJ3IF.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-S4XKNCD5.js → claude-flow-setup-4RNAIALK.js} +2 -2
- package/dist/cli/chunks/client-N2WAM5IK.js +2 -0
- package/dist/cli/chunks/{cline-installer-6EW4CHAR.js → cline-installer-K25NUUA4.js} +2 -2
- package/dist/cli/chunks/{code-TOLWD2XL.js → code-JM4D3I2W.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-UA4QQ7B3.js → code-index-extractor-6B6TJ2B5.js} +2 -2
- package/dist/cli/chunks/codex-installer-GRUENCIO.js +10 -0
- package/dist/cli/chunks/{completions-KVUMQQ4K.js → completions-LADTXGCC.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-DFH6LMK2.js → complexity-analyzer-IQITOJH5.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-LYDQSAU7.js → continuedev-installer-H6NAXFZK.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-7USXLZHZ.js → copilot-installer-W7HCQKOS.js} +2 -2
- package/dist/cli/chunks/core-handlers-VSX474R3.js +2 -0
- package/dist/cli/chunks/{cost-tracker-JBDIUMKZ.js → cost-tracker-MC7KEENQ.js} +2 -2
- package/dist/cli/chunks/{coverage-RGO3K357.js → coverage-NOOKPFYQ.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-VNE7QKX4.js +2 -0
- package/dist/cli/chunks/{cursor-installer-YEZGD37F.js → cursor-installer-GOZ64GZJ.js} +2 -2
- package/dist/cli/chunks/{daemon-FVETQ3LL.js → daemon-G4ABQMFJ.js} +3 -3
- package/dist/cli/chunks/{daemon-LPEXHNYG.js → daemon-V23WTCJJ.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-UKYE2FII.js → dag-attention-scheduler-YKOO6ZWL.js} +2 -2
- package/dist/cli/chunks/{detect-WBG5P7ER.js → detect-SNEMKQGJ.js} +2 -2
- package/dist/cli/chunks/{dist-node-YW6YRBCU.js → dist-node-VBNEM6K6.js} +2 -2
- package/dist/cli/chunks/{domain-handler-HH7J4A32.js → domain-handler-2G5XEERC.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-V34GXD5I.js → domain-transfer-HSEUUM7E.js} +2 -2
- package/dist/cli/chunks/dream-A5LVJU7T.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-WYLRS3CL.js → embed-and-insert-pattern-H6MU5HK4.js} +2 -2
- package/dist/cli/chunks/{eval-EIMVXY5J.js → eval-XYVDJXJF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-QMZHRUKM.js → experience-capture-middleware-BZQJVXTE.js} +3 -3
- package/dist/cli/chunks/{fast-paths-NHLW6XS6.js → fast-paths-76WWBJ4H.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NE3MBL3P.js → feature-flags-7E5YZ4P5.js} +2 -2
- package/dist/cli/chunks/{feature-flags-N3UHMSZ3.js → feature-flags-SCQ35J6M.js} +2 -2
- package/dist/cli/chunks/{file-discovery-SI44X4YS.js → file-discovery-LU5MAXWA.js} +2 -2
- package/dist/cli/chunks/{fleet-MMYUXRRM.js → fleet-M3TH65SV.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-RLYXYU2Q.js → gnn-wrapper-OYUJEJD2.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6EDRUYLV.js → heartbeat-handler-II4NSOXK.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-CFZ6DNQY.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-I4Y2T4HO.js +2 -0
- package/dist/cli/chunks/hnsw-index-SBR5VYGN.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-RVM7EAIH.js → hnsw-legacy-bridge-322R2UAB.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-DUZ6FFAH.js → hnswlib-node-OVLAHTPU.js} +2 -2
- package/dist/cli/chunks/{hooks-ZF4VKHEO.js → hooks-2A27XCUJ.js} +37 -37
- package/dist/cli/chunks/hybrid-router-E6YM74NQ.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-YWS66PGO.js → hypergraph-engine-ERA527UR.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-OQHVRPWB.js → hypergraph-handler-7XL4OL6W.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-GHYFSSMJ.js +2 -0
- package/dist/cli/chunks/{init-handler-YW74YF2V.js → init-handler-WN6KQ5WY.js} +6 -6
- package/dist/cli/chunks/init-wizard-KAN5KOGD.js +2 -0
- package/dist/cli/chunks/kernel-LET4HEEF.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-APWB2GMA.js → kilocode-installer-5UCCFZ7V.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-DICKFVNC.js → kiro-installer-77DPEP3K.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-P3UJWNQS.js +2 -0
- package/dist/cli/chunks/{learning-MXHNYW5D.js → learning-A5GKUD73.js} +3 -3
- package/dist/cli/chunks/{llm-router-LTFIX7NY.js → llm-router-SINJNEGP.js} +4 -4
- package/dist/cli/chunks/llm-router-service-BOBENURJ.js +2 -0
- package/dist/cli/chunks/{load-JUMIQ4LZ.js → load-Q56GLXHJ.js} +2 -2
- package/dist/cli/chunks/load-test-4VDCVB7S.js +2 -0
- package/dist/cli/chunks/{mcp-WHIARJGO.js → mcp-VBDU2WLY.js} +2 -2
- package/dist/cli/chunks/{memory-KAHS6Z5A.js → memory-IGWBRDIT.js} +5 -5
- package/dist/cli/chunks/memory-backend-RRFAYQYS.js +2 -0
- package/dist/cli/chunks/{memory-handlers-DG3RRXB6.js → memory-handlers-IITHQ7KV.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-E3Y2RHMX.js → multi-model-executor-2QUEY4CC.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3RKGNGGE.js → opencode-installer-FZJ5N2B3.js} +2 -2
- package/dist/cli/chunks/{orchestrator-TXITUKWD.js → orchestrator-BGLDS47V.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-V7DEZEF2.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-EE2BUFZT.js → pattern-usage-recorder-4MFN4WKV.js} +2 -2
- package/dist/cli/chunks/{pipeline-AXTT6KZB.js → pipeline-GZHAORGP.js} +2 -2
- package/dist/cli/chunks/{platform-TICPVKE2.js → platform-TZEX4YZQ.js} +2 -2
- package/dist/cli/chunks/{plugin-VQKNV3EM.js → plugin-VEYUFCNY.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-6GY5YY7D.js → prime-radiant-advanced-wasm-OA5DLXJJ.js} +2 -2
- package/dist/cli/chunks/protocol-executor-I3C2ZETP.js +2 -0
- package/dist/cli/chunks/{protocol-handler-YFWDR7UZ.js → protocol-handler-MVJ5N4X5.js} +2 -2
- package/dist/cli/chunks/{prove-FUMRCXAA.js → prove-VKF7YCUA.js} +2 -2
- package/dist/cli/chunks/provider-manager-HB4YVQDI.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-RDLBAXJY.js +2 -0
- package/dist/cli/chunks/{quality-2APISBW5.js → quality-NLB5LVGM.js} +2 -2
- package/dist/cli/chunks/{quality-gate-MCC3E5TM.js → quality-gate-OM6A7FQM.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-QRWRNUDR.js +2 -0
- package/dist/cli/chunks/{real-embeddings-CC5TNOTI.js → real-embeddings-NONEKGAV.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-YAHTEVPI.js → roocode-installer-ORXQQO3F.js} +2 -2
- package/dist/cli/chunks/router-WDF7KV4M.js +2 -0
- package/dist/cli/chunks/routing-feedback-DHYB4ZNL.js +2 -0
- package/dist/cli/chunks/{routing-handler-6NQBW4TQ.js → routing-handler-LGMIBVDS.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-ZHXLHUPG.js → ruvector-commands-4GZMU4BZ.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-5KF2DGCW.js → rvf-dual-writer-45HKI22F.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-BBU57BGF.js → rvf-migration-adapter-RHYIXI3I.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-VN4VRZA4.js → rvf-migration-coordinator-ANTAYKNN.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-7W53TYTH.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-XCY2XQZA.js → rvf-store-integrity-CPQUTFST.js} +2 -2
- package/dist/cli/chunks/safe-db-4HBFO7OQ.js +2 -0
- package/dist/cli/chunks/schedule-M2OSBJZM.js +2 -0
- package/dist/cli/chunks/scheduler-JWV5MSGE.js +2 -0
- package/dist/cli/chunks/{security-PYP4H3KN.js → security-BM6LMCBI.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-3CJHRNX6.js → shared-rvf-adapter-3HGARKJX.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MKSLKWDI.js → shared-rvf-dual-writer-UQ4O46ZI.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-QA4JRQZ2.js +2 -0
- package/dist/cli/chunks/{status-handler-VYIZ3VJF.js → status-handler-TGRAM5PC.js} +2 -2
- package/dist/cli/chunks/{structural-health-MVV4OWXP.js → structural-health-RXETMBB3.js} +2 -2
- package/dist/cli/chunks/{sync-VNX6L3TI.js → sync-B4KEYFCP.js} +2 -2
- package/dist/cli/chunks/{sync-G47OYIQ3.js → sync-JTBZIACA.js} +2 -2
- package/dist/cli/chunks/{task-handler-GOWF2GEH.js → task-handler-D7VXHWPG.js} +2 -2
- package/dist/cli/chunks/{task-handlers-J2WC6J37.js → task-handlers-XF6VVPTR.js} +3 -3
- package/dist/cli/chunks/{test-DMCJ3BXS.js → test-BKEIMBSX.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-TRFHHKFM.js → test-scheduling-A4OHR7KW.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-KEQ7AHFF.js → token-bootstrap-LIDDAOAK.js} +2 -2
- package/dist/cli/chunks/{token-usage-B54FOFOF.js → token-usage-BJUFIU4V.js} +2 -2
- package/dist/cli/chunks/{transformers-IACZG7IV.js → transformers-YYUQCGMV.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-N7H4X37E.js → tree-sitter-wasm-parser-DFXYTJ23.js} +2 -2
- package/dist/cli/chunks/{types-B3SHT4OD.js → types-Z75HK5HH.js} +2 -2
- package/dist/cli/chunks/unified-memory-BEUZQTTC.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-FHLSAEX4.js +2 -0
- package/dist/cli/chunks/unified-persistence-TVEQGCSB.js +2 -0
- package/dist/cli/chunks/{upgrade-A2PQ5EWK.js → upgrade-NETNZZH3.js} +2 -2
- package/dist/cli/chunks/{validate-UXV7UQUT.js → validate-U2WQ7P6T.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-MMBU4FPP.js → validate-swarm-DKD7H2E3.js} +2 -2
- package/dist/cli/chunks/{vibium-R4GUVADA.js → vibium-FOQ73JBW.js} +2 -2
- package/dist/cli/chunks/visual-security-AYV46OUO.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-MP6E6CJB.js → web-tree-sitter-PQXWMQO6.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-Z6BWMUUO.js → windsurf-installer-CTFSFOBX.js} +2 -2
- package/dist/cli/chunks/{witness-chain-EFLTABBA.js → witness-chain-NCRHNFQM.js} +2 -2
- package/dist/cli/chunks/witness-chain-RU356H6R.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-PN36TV43.js → witness-key-manager-WGCSSB23.js} +2 -2
- package/dist/cli/chunks/{workflow-A2AX3RJU.js → workflow-FE5QGP2U.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-N2DQTC3X.js +2 -0
- package/dist/cli/chunks/{wrappers-NA6FHA63.js → wrappers-AHL5K2LO.js} +2 -2
- package/dist/cli/commands/hooks-handlers/hooks-shared.d.ts +9 -0
- package/dist/cli/commands/hooks-handlers/hooks-shared.js +38 -0
- package/dist/cli/commands/hooks.d.ts +2 -2
- package/dist/cli/commands/hooks.js +8 -2
- package/dist/cli/handlers/init-handler.js +1 -1
- package/dist/coordination/handlers/coverage-collection.d.ts +161 -0
- package/dist/coordination/handlers/coverage-collection.js +643 -0
- package/dist/coordination/handlers/coverage-handlers.js +199 -146
- package/dist/coordination/handlers/handler-types.d.ts +6 -1
- package/dist/coordination/handlers/handler-utils.js +10 -3
- package/dist/coordination/handlers/security-handlers.js +17 -2
- package/dist/coordination/handlers/test-execution-handlers.js +16 -1
- package/dist/coordination/queen-coordinator.js +4 -3
- package/dist/coordination/result-saver.js +119 -97
- package/dist/coordination/task-executor.d.ts +26 -1
- package/dist/coordination/task-executor.js +52 -4
- package/dist/domains/code-intelligence/services/knowledge-graph.js +8 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +4 -0
- package/dist/domains/coverage-analysis/services/gap-detector.js +4 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +4 -0
- package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +4 -0
- package/dist/domains/quality-assessment/services/deployment-advisor.js +4 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.js +4 -0
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -0
- package/dist/domains/test-generation/index.js +17 -2
- package/dist/domains/test-generation/services/test-generator.js +31 -9
- package/dist/init/codex-installer.d.ts +13 -0
- package/dist/init/codex-installer.js +122 -1
- package/dist/init/phases/09-assets.js +4 -0
- package/dist/init/phases/phase-interface.d.ts +1 -1
- package/dist/integrations/ruvector/rvf-store-integrity.js +5 -1
- package/dist/integrations/ruvector/shared-rvf-adapter.js +5 -5
- package/dist/learning/real-embeddings.js +15 -1
- package/dist/mcp/bundle.js +429 -419
- package/dist/mcp/handlers/domain-handler-configs.js +79 -14
- package/dist/mcp/types.d.ts +42 -4
- package/dist/optimization/session-cache.d.ts +13 -1
- package/dist/optimization/session-cache.js +27 -2
- package/dist/shared/llm/llm-router-service.js +59 -4
- package/dist/shared/llm/router/agent-router-config.d.ts +46 -2
- package/dist/shared/llm/router/agent-router-config.js +124 -2
- package/dist/shared/llm/router/config-store.d.ts +17 -1
- package/dist/shared/llm/router/config-store.js +103 -0
- package/dist/shared/llm/router/index.d.ts +2 -2
- package/dist/shared/llm/router/index.js +2 -0
- package/dist/shared/llm/router/types.d.ts +44 -0
- package/dist/shared/llm/router/types.js +1 -0
- package/package.json +9 -6
- package/dist/cli/chunks/adapter-CWIMFWAI.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-OTXT2DLN.js +0 -2
- package/dist/cli/chunks/base-O3SPSWBA.js +0 -2
- package/dist/cli/chunks/browser-workflow-MXS3ZKY2.js +0 -2
- package/dist/cli/chunks/chunk-G4GTE3RJ.js +0 -2
- package/dist/cli/chunks/chunk-G7FMYFTN.js +0 -2
- package/dist/cli/chunks/chunk-HVB2L52I.js +0 -2
- package/dist/cli/chunks/chunk-MVI2QMRW.js +0 -2
- package/dist/cli/chunks/chunk-OZR25R7W.js +0 -2
- package/dist/cli/chunks/chunk-PP2RYSHT.js +0 -3
- package/dist/cli/chunks/client-33PGO5FA.js +0 -2
- package/dist/cli/chunks/codex-installer-C2CUP4FW.js +0 -8
- package/dist/cli/chunks/core-handlers-CSNZIM3A.js +0 -2
- package/dist/cli/chunks/cross-domain-router-DRIBR5L3.js +0 -2
- package/dist/cli/chunks/dream-WUNO723O.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-VAFQDJLL.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-TIRPA7XE.js +0 -2
- package/dist/cli/chunks/hnsw-index-SSQBRQCQ.js +0 -2
- package/dist/cli/chunks/hybrid-router-AKBWZOQ3.js +0 -2
- package/dist/cli/chunks/impact-analyzer-46FQIZ6Y.js +0 -2
- package/dist/cli/chunks/init-wizard-U3NHGYSS.js +0 -2
- package/dist/cli/chunks/kernel-ZDXHT6QF.js +0 -2
- package/dist/cli/chunks/knowledge-graph-6XTW6WO6.js +0 -2
- package/dist/cli/chunks/llm-router-service-3F4E64SY.js +0 -2
- package/dist/cli/chunks/load-test-SWZNGEIY.js +0 -2
- package/dist/cli/chunks/memory-backend-PR74ZPBA.js +0 -2
- package/dist/cli/chunks/pattern-null-store-EPE36BVT.js +0 -2
- package/dist/cli/chunks/protocol-executor-IELENNST.js +0 -2
- package/dist/cli/chunks/provider-manager-3R3KOBHG.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-S2R2PCBS.js +0 -2
- package/dist/cli/chunks/queen-coordinator-2E23NEV4.js +0 -2
- package/dist/cli/chunks/router-3FVLWO6S.js +0 -2
- package/dist/cli/chunks/routing-feedback-ZQLRNNR7.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-YFGLQNEB.js +0 -2
- package/dist/cli/chunks/safe-db-4SBLBTW7.js +0 -2
- package/dist/cli/chunks/schedule-5Y3BGVAA.js +0 -2
- package/dist/cli/chunks/scheduler-DOID3QF3.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-M4JEQO57.js +0 -2
- package/dist/cli/chunks/unified-memory-WNYWTGVX.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-YPAV7U4E.js +0 -2
- package/dist/cli/chunks/unified-persistence-TJ252S7L.js +0 -2
- package/dist/cli/chunks/visual-security-VKYXEGJB.js +0 -2
- package/dist/cli/chunks/witness-chain-WVXRXKQP.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-GOWSPR3G.js +0 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aqe-plan-quality
|
|
3
|
+
description: Create risk-based quality and test plans for Agentic QE changes. Use when scoping a feature, translating requirements into verification work, selecting QE specialties, assessing testability, or deciding which `.claude/agents/v3/qe-*.md` capabilities should inform a task. Do not use merely to execute an already-defined test command.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan AQE Quality
|
|
7
|
+
|
|
8
|
+
1. Read `AGENTS.md`, the requested change, and the affected public boundaries.
|
|
9
|
+
2. Inspect the closest implementation and tests before proposing work.
|
|
10
|
+
3. Classify the risk domains using [references/qe-routing.md](references/qe-routing.md).
|
|
11
|
+
4. Select only the QE specialties needed. Treat Claude agent definitions as
|
|
12
|
+
domain references; do not copy their Claude-only `Task`, `SendMessage`, or
|
|
13
|
+
hook syntax into Codex actions.
|
|
14
|
+
5. Produce a plan that covers:
|
|
15
|
+
- observable requirements and acceptance criteria;
|
|
16
|
+
- affected boundaries, dependencies, and failure modes;
|
|
17
|
+
- durable tests first, then implementation-coupled tests;
|
|
18
|
+
- security, performance, accessibility, contract, or resilience checks when
|
|
19
|
+
triggered by the change;
|
|
20
|
+
- the narrowest repository verification commands.
|
|
21
|
+
6. Flag assumptions, unavailable environments, destructive operations, and
|
|
22
|
+
decisions requiring human approval.
|
|
23
|
+
|
|
24
|
+
Prefer evidence from repository code and configuration over generic test
|
|
25
|
+
checklists. Keep the selected fleet small and explain each specialty’s purpose.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# QE Routing Reference
|
|
2
|
+
|
|
3
|
+
Use the shipped definitions in `.claude/agents/v3/qe-*.md` as detailed domain
|
|
4
|
+
references. The principal routing map is:
|
|
5
|
+
|
|
6
|
+
| Need | QE specialties |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| Requirements and testability | `qe-requirements-validator`, `qe-bdd-generator`, `qe-product-factors-assessor`, `qe-quality-criteria-recommender` |
|
|
9
|
+
| Test design and implementation | `qe-test-architect`, `qe-tdd-specialist`, `qe-property-tester`, `qe-integration-tester`, `qe-test-idea-rewriter` |
|
|
10
|
+
| Execution and reliability | `qe-parallel-executor`, `qe-flaky-hunter`, `qe-retry-handler` |
|
|
11
|
+
| Coverage and effectiveness | `qe-coverage-specialist`, `qe-gap-detector`, `qe-mutation-tester` |
|
|
12
|
+
| Code impact | `qe-code-intelligence`, `qe-dependency-mapper`, `qe-impact-analyzer`, `qe-kg-builder`, `qe-code-complexity` |
|
|
13
|
+
| Defect analysis | `qe-regression-analyzer`, `qe-root-cause-analyzer`, `qe-defect-predictor` |
|
|
14
|
+
| Quality decision | `qe-risk-assessor`, `qe-quality-gate`, `qe-deployment-advisor`, `qe-devils-advocate` |
|
|
15
|
+
| Security | `qe-security-scanner`, `qe-security-auditor`, `qe-pentest-validator`, `qe-sod-analyzer` |
|
|
16
|
+
| Contract and integration | `qe-contract-validator`, `qe-graphql-tester`, `qe-soap-tester`, `qe-odata-contract-tester`, `qe-message-broker-tester`, `qe-middleware-validator`, `qe-sap-rfc-tester`, `qe-sap-idoc-tester` |
|
|
17
|
+
| Performance and resilience | `qe-performance-tester`, `qe-load-tester`, `qe-chaos-engineer` |
|
|
18
|
+
| UX and accessibility | `qe-visual-tester`, `qe-responsive-tester`, `qe-accessibility-auditor`, `qe-qx-partner` |
|
|
19
|
+
| Learning | `qe-pattern-learner`, `qe-learning-coordinator`, `qe-metrics-optimizer`, `qe-transfer-specialist` |
|
|
20
|
+
| Cross-domain coordination | `qe-fleet-commander`, `qe-queen-coordinator` |
|
|
21
|
+
|
|
22
|
+
Select the smallest set that covers the actual change.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aqe-review-quality
|
|
3
|
+
description: Review Agentic QE changes and issue an evidence-backed quality verdict. Use for code review, regression-risk assessment, release readiness, quality-gate evaluation, security/performance/testability review, or checking whether a change has sufficient verification. Do not use when the user primarily asks to implement a feature.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Review AQE Quality
|
|
7
|
+
|
|
8
|
+
1. Read `AGENTS.md`, the diff or requested scope, affected implementation,
|
|
9
|
+
tests, and configuration.
|
|
10
|
+
2. Review for correctness first: broken behavior, data loss, security,
|
|
11
|
+
concurrency, compatibility, and missing error paths.
|
|
12
|
+
3. Use [references/quality-gates.md](references/quality-gates.md) to select
|
|
13
|
+
relevant QE review lenses. Do not run unrelated broad scans.
|
|
14
|
+
4. Verify claims with focused commands where safe and available. Distinguish
|
|
15
|
+
observed failures from inferred risks.
|
|
16
|
+
5. Report findings by severity with file and line references, the triggering
|
|
17
|
+
scenario, and the smallest useful remediation.
|
|
18
|
+
6. End with one verdict:
|
|
19
|
+
- `PASS`: no material finding and adequate evidence;
|
|
20
|
+
- `CONDITIONAL`: bounded risks or missing environment-dependent evidence;
|
|
21
|
+
- `FAIL`: correctness, safety, compatibility, or verification blocker.
|
|
22
|
+
7. List the exact checks run and any checks not run.
|
|
23
|
+
|
|
24
|
+
Do not edit code during a review unless the user also asks for fixes.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# AQE Quality Gates
|
|
2
|
+
|
|
3
|
+
Apply only relevant gates:
|
|
4
|
+
|
|
5
|
+
| Gate | Blocking signal |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Correctness | A realistic input violates the stated behavior or invariant |
|
|
8
|
+
| Data safety | A path can corrupt, overwrite, or silently lose persisted data |
|
|
9
|
+
| Security | Authorization bypass, injection, secret exposure, unsafe path, or unvalidated boundary |
|
|
10
|
+
| Compatibility | Public API, CLI, MCP, schema, or shipped asset changes without migration/compatibility handling |
|
|
11
|
+
| Test adequacy | Changed behavior lacks a durable assertion or the test cannot detect a plausible defect |
|
|
12
|
+
| CLI/MCP parity | Equivalent surfaces behave differently or only one was verified |
|
|
13
|
+
| Reliability | Race, leak, retry masking, nondeterministic result, or unbounded resource use |
|
|
14
|
+
| Performance | Measured regression beyond an established threshold |
|
|
15
|
+
| Distribution | `.claude/agents/v3`, `assets/agents/v3`, manifests, or generated bundles are out of sync |
|
|
16
|
+
| Release evidence | Required build, invariant, parity, or smoke check failed or was not run |
|
|
17
|
+
|
|
18
|
+
Use `.claude/agents/v3/qe-quality-gate.md`,
|
|
19
|
+
`qe-risk-assessor.md`, `qe-deployment-advisor.md`, and the domain-specific QE
|
|
20
|
+
definitions as deeper references when a gate needs specialized criteria.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aqe-test-change
|
|
3
|
+
description: Design, implement, and run durable tests for Agentic QE code changes. Use when adding tests, reproducing a defect, filling a coverage gap, selecting affected Vitest suites, checking CLI/MCP parity, or verifying a fix in this repository. Do not use for a read-only quality review with no requested edits.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Test an AQE Change
|
|
7
|
+
|
|
8
|
+
1. Read `AGENTS.md`, the changed code, nearby tests, and relevant public
|
|
9
|
+
interfaces.
|
|
10
|
+
2. Reproduce a reported defect with the exact scenario before changing code.
|
|
11
|
+
3. Identify the affected QE specialty from
|
|
12
|
+
[references/test-specialties.md](references/test-specialties.md).
|
|
13
|
+
4. Add tests in this order:
|
|
14
|
+
- durable boundary contracts, invariants, or properties;
|
|
15
|
+
- integration behavior across affected components;
|
|
16
|
+
- focused unit examples needed for the red-green loop.
|
|
17
|
+
5. Keep tests deterministic. Do not hide failures with retries, skips, weakened
|
|
18
|
+
assertions, fabricated fixtures, or mocks of the behavior under test.
|
|
19
|
+
6. Run the narrowest matching Vitest target first. Expand to typecheck, build,
|
|
20
|
+
agent/skill parity, MCP integration, or full CI checks in proportion to the
|
|
21
|
+
changed surface.
|
|
22
|
+
7. For capabilities exposed through both CLI and MCP, verify both paths.
|
|
23
|
+
8. Report commands, pass/fail counts, limitations, and untested external
|
|
24
|
+
dependencies.
|
|
25
|
+
|
|
26
|
+
Never modify or reset `.agentic-qe/memory.db`. Use a copy for any database test.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Test Specialty Selection
|
|
2
|
+
|
|
3
|
+
- Public algorithm or data structure: invariants and property tests; consult
|
|
4
|
+
`qe-property-tester` and `qe-test-architect`.
|
|
5
|
+
- CLI behavior: command-level test plus the equivalent MCP check when exposed;
|
|
6
|
+
consult `qe-integration-tester`.
|
|
7
|
+
- MCP handler or protocol: handler tests are insufficient by themselves; add a
|
|
8
|
+
protocol-level integration check.
|
|
9
|
+
- Coverage gap: inspect risk and branch behavior before adding examples; consult
|
|
10
|
+
`qe-coverage-specialist`, `qe-gap-detector`, and `qe-mutation-tester`.
|
|
11
|
+
- Intermittent failure: preserve evidence and classify nondeterminism; consult
|
|
12
|
+
`qe-flaky-hunter` and `qe-root-cause-analyzer`.
|
|
13
|
+
- API/schema change: test backward compatibility and negative cases; consult
|
|
14
|
+
`qe-contract-validator` or the protocol-specific QE definition.
|
|
15
|
+
- Security boundary: test authorization, input validation, path safety, secret
|
|
16
|
+
handling, and failure disclosure; consult `qe-security-auditor`.
|
|
17
|
+
- Performance-sensitive path: measure a baseline and regression threshold;
|
|
18
|
+
consult `qe-performance-tester`.
|
|
19
|
+
- Browser or UI change: cover keyboard/accessibility, responsive layout, and
|
|
20
|
+
stable visual evidence where relevant.
|
|
21
|
+
|
|
22
|
+
Repository test commands are defined in `package.json`; follow `AGENTS.md` for
|
|
23
|
+
the recommended narrow-to-broad sequence.
|
|
@@ -52,7 +52,11 @@ function main() {
|
|
|
52
52
|
|
|
53
53
|
if (commandExists('ruflo')) { invokeHook('ruflo', [], hookArgs, stdinData); done(); }
|
|
54
54
|
if (commandExists('claude-flow')) { invokeHook('claude-flow', [], hookArgs, stdinData); done(); }
|
|
55
|
-
|
|
55
|
+
// Repository-local Codex hooks disable the network-capable fallback. They
|
|
56
|
+
// should use an installed stack binary and quietly no-op when it is absent.
|
|
57
|
+
if (process.env.RUFLO_HOOK_NPX !== '0') {
|
|
58
|
+
invokeHook('npx', ['--prefer-offline', '--yes', 'ruflo@latest'], hookArgs, stdinData);
|
|
59
|
+
}
|
|
56
60
|
done();
|
|
57
61
|
}
|
|
58
62
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { spawnSync } = require('node:child_process');
|
|
5
|
+
const path = require('node:path');
|
|
6
|
+
|
|
7
|
+
let input = {};
|
|
8
|
+
try {
|
|
9
|
+
input = JSON.parse(require('node:fs').readFileSync(0, 'utf8') || '{}');
|
|
10
|
+
} catch {
|
|
11
|
+
process.exit(0);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const root = input.cwd
|
|
15
|
+
? spawnSync('git', ['-C', input.cwd, 'rev-parse', '--show-toplevel'], {
|
|
16
|
+
encoding: 'utf8',
|
|
17
|
+
timeout: 1000,
|
|
18
|
+
}).stdout.trim()
|
|
19
|
+
: '';
|
|
20
|
+
if (!root) process.exit(0);
|
|
21
|
+
|
|
22
|
+
const subcommand = process.argv[2];
|
|
23
|
+
if (!subcommand) process.exit(0);
|
|
24
|
+
|
|
25
|
+
const codexShim = path.join(root, '.codex', 'hooks', 'aqe-runtime.cjs');
|
|
26
|
+
const shim = require('node:fs').existsSync(codexShim)
|
|
27
|
+
? codexShim
|
|
28
|
+
: path.join(root, '.claude', 'hooks', 'aqe-hook.cjs');
|
|
29
|
+
const result = spawnSync(process.execPath, [shim, subcommand, '--json'], {
|
|
30
|
+
cwd: root,
|
|
31
|
+
env: { ...process.env, CLAUDE_PROJECT_DIR: root },
|
|
32
|
+
input: JSON.stringify(input),
|
|
33
|
+
encoding: 'utf8',
|
|
34
|
+
timeout: Number(process.env.AQE_CODEX_HOOK_TIMEOUT_MS) || 20000,
|
|
35
|
+
maxBuffer: 4 * 1024 * 1024,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (!result.stdout) process.exit(0);
|
|
39
|
+
|
|
40
|
+
let output;
|
|
41
|
+
try {
|
|
42
|
+
output = JSON.parse(result.stdout);
|
|
43
|
+
} catch {
|
|
44
|
+
process.exit(0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// AQE route results are useful context but are not themselves a Codex hook
|
|
48
|
+
// response. Wrap them in the supported additional-context envelope.
|
|
49
|
+
if (subcommand === 'route' && !output.hookSpecificOutput) {
|
|
50
|
+
const agent = output.recommendedAgent || 'unspecified';
|
|
51
|
+
const confidence = Number.isFinite(output.confidence)
|
|
52
|
+
? ` (${Math.round(output.confidence * 100)}% confidence)`
|
|
53
|
+
: '';
|
|
54
|
+
const domains = Array.isArray(output.domains) && output.domains.length
|
|
55
|
+
? ` Domains: ${output.domains.join(', ')}.`
|
|
56
|
+
: '';
|
|
57
|
+
const guidance = Array.isArray(output.guidance) && output.guidance.length
|
|
58
|
+
? ` Guidance: ${output.guidance.join('; ')}.`
|
|
59
|
+
: '';
|
|
60
|
+
output = {
|
|
61
|
+
hookSpecificOutput: {
|
|
62
|
+
hookEventName: 'UserPromptSubmit',
|
|
63
|
+
additionalContext:
|
|
64
|
+
`AQE routing recommends ${agent}${confidence}.${domains}${guidance}`,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
process.stdout.write(`${JSON.stringify(output)}\n`);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const path = require('node:path');
|
|
6
|
+
const { spawnSync } = require('node:child_process');
|
|
7
|
+
|
|
8
|
+
let input = {};
|
|
9
|
+
let rawInput = '';
|
|
10
|
+
try {
|
|
11
|
+
rawInput = fs.readFileSync(0, 'utf8');
|
|
12
|
+
input = JSON.parse(rawInput || '{}');
|
|
13
|
+
} catch {
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const git = input.cwd
|
|
18
|
+
? spawnSync('git', ['-C', input.cwd, 'rev-parse', '--show-toplevel'], {
|
|
19
|
+
encoding: 'utf8',
|
|
20
|
+
timeout: 1000,
|
|
21
|
+
})
|
|
22
|
+
: null;
|
|
23
|
+
const root = git && git.status === 0 ? git.stdout.trim() : '';
|
|
24
|
+
if (!root) process.exit(0);
|
|
25
|
+
|
|
26
|
+
const requested = process.argv[2];
|
|
27
|
+
if (!requested) process.exit(0);
|
|
28
|
+
|
|
29
|
+
const toolInput = input.tool_input || {};
|
|
30
|
+
const toolResponse = input.tool_response || input.tool_result || {};
|
|
31
|
+
const args = [requested];
|
|
32
|
+
|
|
33
|
+
function add(flag, value) {
|
|
34
|
+
if (value !== undefined && value !== null && String(value).length) {
|
|
35
|
+
args.push(flag, String(value));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
switch (requested) {
|
|
40
|
+
case 'route':
|
|
41
|
+
case 'pre-task':
|
|
42
|
+
add('--task', input.prompt || input.user_prompt || toolInput.prompt);
|
|
43
|
+
break;
|
|
44
|
+
case 'pre-command':
|
|
45
|
+
case 'post-command':
|
|
46
|
+
add('--command', toolInput.command);
|
|
47
|
+
if (requested === 'post-command') {
|
|
48
|
+
add('--success', toolResponse.success !== false);
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case 'pre-edit':
|
|
52
|
+
case 'post-edit':
|
|
53
|
+
add(
|
|
54
|
+
'--file',
|
|
55
|
+
toolInput.file_path || toolInput.path || toolInput.target_file,
|
|
56
|
+
);
|
|
57
|
+
if (requested === 'post-edit') {
|
|
58
|
+
add('--success', toolResponse.success !== false);
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
case 'session-restore':
|
|
62
|
+
case 'session-end':
|
|
63
|
+
add('--session-id', input.session_id);
|
|
64
|
+
break;
|
|
65
|
+
case 'post-task':
|
|
66
|
+
add('--task-id', input.agent_id || input.subagent_id || input.turn_id);
|
|
67
|
+
add('--success', true);
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const codexHelper = path.join(root, '.codex', 'hooks', 'ruflo-runtime.cjs');
|
|
74
|
+
const helper = fs.existsSync(codexHelper)
|
|
75
|
+
? codexHelper
|
|
76
|
+
: path.join(root, '.claude', 'helpers', 'ruflo-hook.cjs');
|
|
77
|
+
if (!fs.existsSync(helper)) process.exit(0);
|
|
78
|
+
|
|
79
|
+
// Ruflo is development-time coordination tooling. Keep this hook fail-open,
|
|
80
|
+
// avoid network installation during a lifecycle event, and suppress its
|
|
81
|
+
// provider-specific output rather than exposing unsupported Codex hook fields.
|
|
82
|
+
spawnSync(process.execPath, [helper, ...args], {
|
|
83
|
+
cwd: root,
|
|
84
|
+
env: {
|
|
85
|
+
...process.env,
|
|
86
|
+
CLAUDE_PROJECT_DIR: root,
|
|
87
|
+
RUFLO_HOOK_NPX: '0',
|
|
88
|
+
},
|
|
89
|
+
input: rawInput,
|
|
90
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
91
|
+
timeout: Number(process.env.RUFLO_CODEX_HOOK_TIMEOUT_MS) || 15000,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
process.exit(0);
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "AQE routing, lifecycle learning, and edit/command guardrails for Codex.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "startup|resume|clear|compact",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" session-start",
|
|
11
|
+
"timeout": 25,
|
|
12
|
+
"statusMessage": "Loading AQE learning context"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "command",
|
|
16
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-restore",
|
|
17
|
+
"timeout": 15,
|
|
18
|
+
"statusMessage": "Restoring ruflo coordination context"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"UserPromptSubmit": [
|
|
24
|
+
{
|
|
25
|
+
"hooks": [
|
|
26
|
+
{
|
|
27
|
+
"type": "command",
|
|
28
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" route",
|
|
29
|
+
"timeout": 20,
|
|
30
|
+
"statusMessage": "Routing through the AQE fleet"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "command",
|
|
34
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" route",
|
|
35
|
+
"timeout": 15,
|
|
36
|
+
"statusMessage": "Recording ruflo task routing"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"PreToolUse": [
|
|
42
|
+
{
|
|
43
|
+
"matcher": "^Bash$",
|
|
44
|
+
"hooks": [
|
|
45
|
+
{
|
|
46
|
+
"type": "command",
|
|
47
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" pre-command",
|
|
48
|
+
"timeout": 20,
|
|
49
|
+
"statusMessage": "Applying AQE command guardrails"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "command",
|
|
53
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-command",
|
|
54
|
+
"timeout": 15,
|
|
55
|
+
"statusMessage": "Assessing command risk with ruflo"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"matcher": "^(apply_patch|Edit|Write)$",
|
|
61
|
+
"hooks": [
|
|
62
|
+
{
|
|
63
|
+
"type": "command",
|
|
64
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" pre-edit",
|
|
65
|
+
"timeout": 20,
|
|
66
|
+
"statusMessage": "Applying AQE edit guardrails"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"type": "command",
|
|
70
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-edit",
|
|
71
|
+
"timeout": 15,
|
|
72
|
+
"statusMessage": "Loading ruflo edit context"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"PostToolUse": [
|
|
78
|
+
{
|
|
79
|
+
"matcher": "^Bash$",
|
|
80
|
+
"hooks": [
|
|
81
|
+
{
|
|
82
|
+
"type": "command",
|
|
83
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" post-command",
|
|
84
|
+
"timeout": 20,
|
|
85
|
+
"statusMessage": "Recording AQE command outcome"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "command",
|
|
89
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-command",
|
|
90
|
+
"timeout": 15,
|
|
91
|
+
"statusMessage": "Recording command outcome in ruflo"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"matcher": "^(apply_patch|Edit|Write)$",
|
|
97
|
+
"hooks": [
|
|
98
|
+
{
|
|
99
|
+
"type": "command",
|
|
100
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" post-edit",
|
|
101
|
+
"timeout": 20,
|
|
102
|
+
"statusMessage": "Recording AQE edit outcome"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"type": "command",
|
|
106
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-edit",
|
|
107
|
+
"timeout": 15,
|
|
108
|
+
"statusMessage": "Recording edit outcome in ruflo"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"PreCompact": [
|
|
114
|
+
{
|
|
115
|
+
"matcher": "manual|auto",
|
|
116
|
+
"hooks": [
|
|
117
|
+
{
|
|
118
|
+
"type": "command",
|
|
119
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-end",
|
|
120
|
+
"timeout": 15,
|
|
121
|
+
"statusMessage": "Checkpointing ruflo state before compaction"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"SubagentStart": [
|
|
127
|
+
{
|
|
128
|
+
"hooks": [
|
|
129
|
+
{
|
|
130
|
+
"type": "command",
|
|
131
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-task",
|
|
132
|
+
"timeout": 15,
|
|
133
|
+
"statusMessage": "Registering subagent task with ruflo"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"SubagentStop": [
|
|
139
|
+
{
|
|
140
|
+
"hooks": [
|
|
141
|
+
{
|
|
142
|
+
"type": "command",
|
|
143
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-task",
|
|
144
|
+
"timeout": 15,
|
|
145
|
+
"statusMessage": "Recording subagent outcome in ruflo"
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"Stop": [
|
|
151
|
+
{
|
|
152
|
+
"hooks": [
|
|
153
|
+
{
|
|
154
|
+
"type": "command",
|
|
155
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" session-end",
|
|
156
|
+
"timeout": 20,
|
|
157
|
+
"statusMessage": "Saving AQE session state"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"type": "command",
|
|
161
|
+
"command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-end",
|
|
162
|
+
"timeout": 15,
|
|
163
|
+
"statusMessage": "Saving ruflo session state"
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,129 @@ All notable changes to the Agentic QE project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.13.2] - 2026-07-24
|
|
9
|
+
|
|
10
|
+
Stops short-lived learning hooks from repeatedly producing
|
|
11
|
+
`brain.rvf.corrupt-*` and `patterns.rvf.corrupt-*` files. A busy project could
|
|
12
|
+
accumulate thousands of these derived-cache artifacts while vector search
|
|
13
|
+
repeatedly fell back to SQLite.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **Hook processes now close every RVF store before exiting** ([#574]).
|
|
18
|
+
Every `aqe hooks` invocation opened the shared pattern index and brain
|
|
19
|
+
dual-writer, but the CLI had no teardown step. The native stores therefore
|
|
20
|
+
exited without a clean close; the next hook found an unusable 162-byte store,
|
|
21
|
+
quarantined it, rebuilt it, and repeated the cycle. Hook commands now dispose
|
|
22
|
+
the reasoning bank and reset both RVF singletons after every action.
|
|
23
|
+
- **A duplicate opener can no longer break its own process's live RVF lock**
|
|
24
|
+
([#574]). Recovery protected locks owned by other live processes but treated
|
|
25
|
+
a lock containing the current PID as stale. Another initialization path in
|
|
26
|
+
that process could then remove the lock and replace a store still in use.
|
|
27
|
+
Every live owner is now protected; duplicate paths degrade safely to SQLite
|
|
28
|
+
instead of moving a live store.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **RVF hook cleanup is idempotent and fail-open.** Partial initialization,
|
|
33
|
+
optional native bindings, or an individual close failure cannot block the
|
|
34
|
+
host editor or command. True stale locks remain recoverable after their owner
|
|
35
|
+
exits.
|
|
36
|
+
|
|
37
|
+
## [3.13.1] - 2026-07-23
|
|
38
|
+
|
|
39
|
+
Fixes four reported issues, three of which come down to the same thing: a tool
|
|
40
|
+
told you something it had not actually established. Coverage analysis reported
|
|
41
|
+
numbers it never measured, test generation claimed AI enhancement it never
|
|
42
|
+
performed, and a security advisory reached users through a dependency they never
|
|
43
|
+
asked for.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- **Coverage analysis no longer reports numbers it did not measure** ([#569]).
|
|
48
|
+
On a Rust crate, `coverage_analyze_sublinear` returned `78.3%` lines,
|
|
49
|
+
`100%` branches and `0%` functions — none of it measured. It flagged
|
|
50
|
+
`#[cfg(test)]` blocks as untested production code, cited line numbers past the
|
|
51
|
+
end of the file, and analysed test files as coverage targets, all with a
|
|
52
|
+
confidence score attached. Rust crates are now measured with `cargo llvm-cov`
|
|
53
|
+
when it is available. When nothing can be measured, the result says so
|
|
54
|
+
(`estimated: true`, `measured: false`) instead of presenting a guess as data.
|
|
55
|
+
- **`test_generate_enhanced` actually calls your LLM now** ([#567]). The tool
|
|
56
|
+
advertised AI-powered generation but the LLM router never reached the code path
|
|
57
|
+
it runs, so it always returned the same generic scaffold regardless of how you
|
|
58
|
+
configured your provider. It now routes through your configured model, and the
|
|
59
|
+
result reports `llmEnhanced` so a silent fall back to templates is visible
|
|
60
|
+
rather than something you infer from a suspiciously fast response. A broken
|
|
61
|
+
provider (bad key, timeout) reports the fallback honestly instead of claiming
|
|
62
|
+
enhancement it did not perform.
|
|
63
|
+
- **A HIGH-severity advisory no longer reaches consumers** ([#565]).
|
|
64
|
+
`@huggingface/transformers` was declared an *optional* peer dependency, but npm
|
|
65
|
+
installs optional peers — so every install pulled in
|
|
66
|
+
`onnxruntime-node -> adm-zip` and its advisory. It is now an explicit opt-in:
|
|
67
|
+
install it yourself only if you want local in-process embeddings. Everyone
|
|
68
|
+
using an embedding endpoint (the default) no longer carries the advisory.
|
|
69
|
+
- **`codex` is selectable through the LLM router.** The provider existed and
|
|
70
|
+
worked, but was missing from the router's provider list, so it could never
|
|
71
|
+
actually be chosen.
|
|
72
|
+
- **Fixes now take effect immediately after an upgrade.** Operation results were
|
|
73
|
+
cached per project and keyed without the build version, so an upgraded install
|
|
74
|
+
could keep replaying the previous version's answers for up to an hour — making
|
|
75
|
+
a fix look like it had not worked. Set `AQE_SESSION_CACHE_SALT` to force a cold
|
|
76
|
+
cache at any time.
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
|
|
80
|
+
- **Per-agent LLM routing you can configure on disk** ([#568]). Route individual
|
|
81
|
+
agent types through different providers via an `agentOverrides` map in
|
|
82
|
+
`.agentic-qe/llm-config.json` — a strong reasoning model for security agents, a
|
|
83
|
+
free local model for mechanical ones — without changing your global default:
|
|
84
|
+
|
|
85
|
+
```jsonc
|
|
86
|
+
{
|
|
87
|
+
"defaultProvider": "ollama",
|
|
88
|
+
"agentOverrides": {
|
|
89
|
+
"qe-security-scanner": { "provider": "claude-code", "model": "opus" },
|
|
90
|
+
"qe-mutation-tester": { "provider": "ollama" }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Entries are partial (unset fields keep their defaults), invalid entries are
|
|
96
|
+
dropped with an explanation rather than failing startup, and credentials are
|
|
97
|
+
never persisted here. See `docs/guides/llm-provider-routing.md`.
|
|
98
|
+
- **`AQE_COVERAGE_NO_EXEC=1` — opt out of running build tooling.** Measuring
|
|
99
|
+
coverage means running your project's tests, which executes code from the
|
|
100
|
+
analysed repository (`cargo` also runs `build.rs`; `npx` runs lifecycle
|
|
101
|
+
scripts). That is what you want for your own code, but is worth being able to
|
|
102
|
+
turn off when pointing the tool at something you do not trust. Existing
|
|
103
|
+
coverage reports are still read; everything else degrades to a labelled
|
|
104
|
+
estimate.
|
|
105
|
+
- **QE skills and lifecycle hooks for the Codex CLI.** `aqe init` now installs
|
|
106
|
+
three Codex-native skills — `aqe-test-change`, `aqe-review-quality`,
|
|
107
|
+
`aqe-plan-quality` — under `.agents/skills/`, plus Codex lifecycle hooks in
|
|
108
|
+
`.codex/`, and an `AGENTS.md` describing the repository's conventions. If you
|
|
109
|
+
drive this project with Codex rather than Claude Code, the QE workflows are now
|
|
110
|
+
available there natively instead of Claude-only.
|
|
111
|
+
- **Security scans state how deeply they looked.** Full SAST is implemented for
|
|
112
|
+
JS/TS only; other languages get cross-language pattern matching. Results now
|
|
113
|
+
carry `analysisDepth`, so a zero-finding scan reads as "nothing matched a
|
|
114
|
+
generic pattern" rather than "no vulnerabilities".
|
|
115
|
+
|
|
116
|
+
### Changed
|
|
117
|
+
|
|
118
|
+
- **BREAKING (result shape):** `coverage_analyze_sublinear` now returns
|
|
119
|
+
`null` — not `0` — for any coverage metric that was not collected.
|
|
120
|
+
`lineCoverage`, `statementCoverage`, `branchCoverage` and `functionCoverage`
|
|
121
|
+
are all `number | null`. `0` now means a measured zero; `null` means unknown.
|
|
122
|
+
Callers doing arithmetic or comparisons on these fields should handle `null`;
|
|
123
|
+
check the new `measured` / `estimated` flags to tell the cases apart. This is
|
|
124
|
+
deliberately a visible break rather than a silent wrong number.
|
|
125
|
+
|
|
126
|
+
[#565]: https://github.com/proffesor-for-testing/agentic-qe/issues/565
|
|
127
|
+
[#567]: https://github.com/proffesor-for-testing/agentic-qe/issues/567
|
|
128
|
+
[#568]: https://github.com/proffesor-for-testing/agentic-qe/issues/568
|
|
129
|
+
[#569]: https://github.com/proffesor-for-testing/agentic-qe/issues/569
|
|
130
|
+
|
|
8
131
|
## [3.13.0] - 2026-07-18
|
|
9
132
|
|
|
10
133
|
Introduces **QE-Court** — an adversarial review court where a change is
|