agentic-qe 3.12.3 → 3.13.1
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/.helpers-version +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/helpers.manifest.json +6 -5
- package/.claude/helpers/hook-handler.cjs +565 -311
- package/.claude/helpers/intelligence.cjs +1058 -1058
- package/.claude/helpers/ruflo-hook.cjs +5 -1
- package/.claude/helpers/statusline.cjs +995 -682
- package/.claude/skills/qe-court/SKILL.md +186 -0
- package/.claude/skills/qe-court/config.json +27 -0
- package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +38 -0
- package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.test.ts +21 -0
- package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.ts +25 -0
- package/.claude/skills/qe-court/evals/qe-court.yaml +70 -0
- package/.claude/skills/qe-court/schemas/output.json +92 -0
- package/.claude/skills/qe-court/scripts/validate-config.json +30 -0
- package/.claude/skills/skills-manifest.json +9 -8
- 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 +159 -0
- package/README.md +3 -3
- package/assets/skills/qe-court/SKILL.md +186 -0
- package/assets/skills/qe-court/config.json +27 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +38 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.test.ts +21 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.ts +25 -0
- package/assets/skills/qe-court/evals/qe-court.yaml +70 -0
- package/assets/skills/qe-court/schemas/output.json +92 -0
- package/assets/skills/qe-court/scripts/validate-config.json +30 -0
- package/assets/skills/skills-manifest.json +9 -8
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-VRZNL53W.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-XFAQATTH.js → agent-booster-wasm-4VM3DE42.js} +2 -2
- package/dist/cli/chunks/{agent-handler-2ZV4CA3U.js → agent-handler-ZDLMZQQX.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-6WGP7F5T.js → agent-memory-branch-P72MDHHV.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-XCNMNERX.js +2 -0
- package/dist/cli/chunks/{arena-FWX7XZAE.js → arena-55FZGKEV.js} +4 -4
- package/dist/cli/chunks/{arena-KJUNQK4N.js → arena-GCRBQ26R.js} +2 -2
- package/dist/cli/chunks/{audit-YFUDEOKN.js → audit-VYAYVLIV.js} +3 -3
- package/dist/cli/chunks/base-VZZNR4UR.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-SKTT5KIH.js → better-sqlite3-JDDFYVCX.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ZCK4WTPK.js → brain-handler-IUKMRGWO.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HTVINRYG.js → branch-enumerator-TUI3RWLX.js} +2 -2
- package/dist/cli/chunks/{browser-WUL2B77M.js → browser-NBQTZYX2.js} +2 -2
- package/dist/cli/chunks/browser-workflow-5DZNIFUY.js +2 -0
- package/dist/cli/chunks/{chunk-IWQHQLT6.js → chunk-23MT7OBY.js} +2 -2
- package/dist/cli/chunks/{chunk-KE3RK35K.js → chunk-2CQAWYYE.js} +1 -1
- package/dist/cli/chunks/{chunk-ADQFQBFJ.js → chunk-2D2XFUKI.js} +2 -2
- package/dist/cli/chunks/{chunk-2YDZXFO2.js → chunk-2G2QWV7B.js} +2 -2
- package/dist/cli/chunks/{chunk-HGJQSTQD.js → chunk-2ISLQU3G.js} +1 -1
- package/dist/cli/chunks/{chunk-6E47R27C.js → chunk-2OM3TDC4.js} +1 -1
- package/dist/cli/chunks/{chunk-WQASUQ5P.js → chunk-2XZ4BHWS.js} +1 -1
- package/dist/cli/chunks/{chunk-E2U3LTGM.js → chunk-3F4XH4ZA.js} +1 -1
- package/dist/cli/chunks/{chunk-YUDGQZJN.js → chunk-3K4YC3GC.js} +2 -2
- package/dist/cli/chunks/chunk-3KGCBAUH.js +2 -0
- package/dist/cli/chunks/{chunk-PXCJDB7J.js → chunk-3Y6CHW67.js} +1 -1
- package/dist/cli/chunks/{chunk-MOX25RZQ.js → chunk-4QMWWYNU.js} +2 -2
- package/dist/cli/chunks/{chunk-XZGOXLZH.js → chunk-4WGSMODQ.js} +1 -1
- package/dist/cli/chunks/{chunk-2CPJCXV6.js → chunk-55WDVSCM.js} +2 -2
- package/dist/cli/chunks/{chunk-EHO52NKU.js → chunk-5BB5DUL4.js} +2 -2
- package/dist/cli/chunks/{chunk-BEPP57C2.js → chunk-6C3MZLYW.js} +2 -2
- package/dist/cli/chunks/{chunk-DTZFZ5M7.js → chunk-6QKQFHS7.js} +2 -2
- package/dist/cli/chunks/{chunk-KXKACV3E.js → chunk-6XZXMEK4.js} +3 -3
- package/dist/cli/chunks/{chunk-L6GZGEFQ.js → chunk-7D7XFZZI.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDLUHOF.js → chunk-7WEHZCSK.js} +2 -2
- package/dist/cli/chunks/{chunk-TXLPOXAN.js → chunk-A2MG3YXO.js} +1 -1
- package/dist/cli/chunks/{chunk-HJ2LG5IH.js → chunk-AHTOWWSE.js} +1 -1
- package/dist/cli/chunks/{chunk-GV2BS5NC.js → chunk-AOMXMFDH.js} +2 -2
- package/dist/cli/chunks/{chunk-EH7TSJPS.js → chunk-ARTLSAXO.js} +2 -2
- package/dist/cli/chunks/{chunk-CXMOIE7D.js → chunk-AY7S7AWN.js} +2 -2
- package/dist/cli/chunks/{chunk-2LNDU7AW.js → chunk-AYYDO52G.js} +2 -2
- package/dist/cli/chunks/chunk-BBLWZT5I.js +2 -0
- package/dist/cli/chunks/{chunk-KRS4KGX5.js → chunk-BF5BKSDU.js} +2 -2
- package/dist/cli/chunks/{chunk-BQ2K4BPD.js → chunk-BOCEOLLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-KKOFH26C.js → chunk-CE6LYEHT.js} +1 -1
- package/dist/cli/chunks/{chunk-GS6G7AVS.js → chunk-CWP4RMOM.js} +2 -2
- package/dist/cli/chunks/{chunk-DCYBV6HV.js → chunk-CWXDL7AH.js} +1 -1
- package/dist/cli/chunks/{chunk-KGHSKDC7.js → chunk-DTRFZD7N.js} +2 -2
- package/dist/cli/chunks/{chunk-CYSBM52D.js → chunk-DVPGQG4W.js} +2 -2
- package/dist/cli/chunks/{chunk-MSDIIRLM.js → chunk-E4D47QTF.js} +2 -2
- package/dist/cli/chunks/{chunk-MB7TZQW3.js → chunk-EAKHU5YX.js} +3 -3
- package/dist/cli/chunks/{chunk-TP3UAWMB.js → chunk-EGMGOWCE.js} +2 -2
- package/dist/cli/chunks/{chunk-4EHW4TNA.js → chunk-ELMUHNXN.js} +2 -2
- package/dist/cli/chunks/chunk-EVDYFGVH.js +2 -0
- package/dist/cli/chunks/{chunk-D4GMAUTP.js → chunk-FDUSWM6O.js} +98 -88
- package/dist/cli/chunks/{chunk-YEC55GO5.js → chunk-FM272B4O.js} +2 -2
- package/dist/cli/chunks/{chunk-DMD6WVJ2.js → chunk-FQUUMC57.js} +2 -2
- package/dist/cli/chunks/{chunk-Y625LP6K.js → chunk-FQXQJMSF.js} +2 -2
- package/dist/cli/chunks/{chunk-Z3SXMYVI.js → chunk-FRAGSKXQ.js} +3 -3
- package/dist/cli/chunks/{chunk-MOXKKY5Q.js → chunk-GASOBSNB.js} +4 -4
- package/dist/cli/chunks/{chunk-PTPN6HQ7.js → chunk-GJEEPKAT.js} +2 -2
- package/dist/cli/chunks/{chunk-WFPGIP4N.js → chunk-GOV2MHLV.js} +2 -2
- package/dist/cli/chunks/{chunk-NKTLKMUB.js → chunk-GTPZVLL6.js} +1 -1
- package/dist/cli/chunks/chunk-H7YZ2YF2.js +3 -0
- package/dist/cli/chunks/{chunk-WKE6WL5C.js → chunk-HFI5PHG5.js} +3 -3
- package/dist/cli/chunks/chunk-HUMQU4ES.js +153 -0
- package/dist/cli/chunks/{chunk-5FAWIIWF.js → chunk-HYIRFJDB.js} +2 -2
- package/dist/cli/chunks/{chunk-DZ775UGW.js → chunk-IBSBOHUX.js} +2 -2
- package/dist/cli/chunks/{chunk-NAMJGRGC.js → chunk-IJA4WS7B.js} +2 -2
- package/dist/cli/chunks/{chunk-XUUVAAHV.js → chunk-IJP42OGW.js} +2 -2
- package/dist/cli/chunks/{chunk-UZ7FXVH5.js → chunk-IMQKEFW6.js} +1 -1
- package/dist/cli/chunks/{chunk-MZ7SIO6R.js → chunk-INYS35DV.js} +2 -2
- package/dist/cli/chunks/{chunk-MS6VOSPY.js → chunk-IV2VCR75.js} +5 -5
- package/dist/cli/chunks/{chunk-UAPUA6OY.js → chunk-IZO6TPGX.js} +2 -2
- package/dist/cli/chunks/{chunk-XBOCRCC6.js → chunk-J45DX3IK.js} +1 -1
- package/dist/cli/chunks/{chunk-RE42RJYR.js → chunk-J4T6D2OQ.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5L37K7X.js → chunk-JAPOMPFD.js} +2 -2
- package/dist/cli/chunks/{chunk-M7W6VJ65.js → chunk-JELNVHBF.js} +1 -1
- package/dist/cli/chunks/{chunk-YDYKFSD2.js → chunk-JOTNKZ7A.js} +87 -87
- package/dist/cli/chunks/{chunk-VUCVSKJC.js → chunk-KNWDXI3I.js} +2 -2
- package/dist/cli/chunks/{chunk-SPI4LUJ6.js → chunk-KW5NBORV.js} +2 -2
- package/dist/cli/chunks/{chunk-2OX74DOO.js → chunk-L7IOTWWY.js} +1 -1
- package/dist/cli/chunks/{chunk-VFYMWDSJ.js → chunk-LJQ27PUE.js} +1 -1
- package/dist/cli/chunks/{chunk-NT66CT73.js → chunk-LSKQUUUN.js} +2 -2
- package/dist/cli/chunks/{chunk-ROFCS47F.js → chunk-LSZZQ7H6.js} +1 -1
- package/dist/cli/chunks/{chunk-Y6XNISHP.js → chunk-LTKNCYMO.js} +2 -2
- package/dist/cli/chunks/{chunk-7WF3TW3G.js → chunk-LTWT4GZD.js} +4 -4
- package/dist/cli/chunks/chunk-LVHMXGDI.js +29 -0
- package/dist/cli/chunks/{chunk-3YC4YUGB.js → chunk-M3T6FB54.js} +2 -2
- package/dist/cli/chunks/{chunk-M32DTUZM.js → chunk-MAYZTGJ2.js} +3 -3
- package/dist/cli/chunks/{chunk-RLBNAB6Y.js → chunk-MCIO7BDK.js} +1 -1
- package/dist/cli/chunks/{chunk-SFS3UHNF.js → chunk-MPD7RR4P.js} +1 -1
- package/dist/cli/chunks/{chunk-DDYP6FBC.js → chunk-MUFYDKVC.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFLE4D4X.js → chunk-MX5ZDKRR.js} +2 -2
- package/dist/cli/chunks/{chunk-WBZNLFTV.js → chunk-MXKHIZVM.js} +5 -5
- package/dist/cli/chunks/chunk-MY47CR27.js +2 -0
- package/dist/cli/chunks/chunk-N7WAZ2Y6.js +2 -0
- package/dist/cli/chunks/{chunk-2HCMRGMO.js → chunk-NHV4PTG6.js} +2 -2
- package/dist/cli/chunks/{chunk-HJ4U64BL.js → chunk-NP4CP3LR.js} +2 -2
- package/dist/cli/chunks/{chunk-UIHZ34SJ.js → chunk-OCKTPTQ7.js} +2 -2
- package/dist/cli/chunks/{chunk-SGMJ277D.js → chunk-OE4B6LDZ.js} +1 -1
- package/dist/cli/chunks/{chunk-SV7J5FDW.js → chunk-OPQY2333.js} +2 -2
- package/dist/cli/chunks/{chunk-FTM562PF.js → chunk-ORDH4VPL.js} +1 -1
- package/dist/cli/chunks/{chunk-YOG5KQZF.js → chunk-P4Y3G6OB.js} +2 -2
- package/dist/cli/chunks/{chunk-LHAUFY4Y.js → chunk-PIOO2M4W.js} +2 -2
- package/dist/cli/chunks/{chunk-UGW23T6S.js → chunk-PKMCZFET.js} +2 -2
- package/dist/cli/chunks/{chunk-OPG2HV2W.js → chunk-QES4QHQW.js} +1 -1
- package/dist/cli/chunks/{chunk-BDGKB2PT.js → chunk-QG6BXSNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-BSNNTOHY.js → chunk-QLOOW23R.js} +3 -3
- package/dist/cli/chunks/{chunk-AIWRYWK2.js → chunk-RSCGBHLM.js} +2 -2
- package/dist/cli/chunks/{chunk-LCM7TY76.js → chunk-RZ6CO3RZ.js} +2 -2
- package/dist/cli/chunks/chunk-S6F3IJMK.js +2 -0
- package/dist/cli/chunks/{chunk-WUE53ZPH.js → chunk-S6VNPKHO.js} +1 -1
- package/dist/cli/chunks/{chunk-L2X3BWMN.js → chunk-SHWXADCI.js} +2 -2
- package/dist/cli/chunks/{chunk-GMFFMJD6.js → chunk-SPJQJWGK.js} +2 -2
- package/dist/cli/chunks/{chunk-KVHCWH4H.js → chunk-SS6K4FBH.js} +2 -2
- package/dist/cli/chunks/{chunk-ZGKQCUPB.js → chunk-SXADKQJN.js} +2 -2
- package/dist/cli/chunks/{chunk-LGYEOYQJ.js → chunk-TBQTGQ75.js} +2 -2
- package/dist/cli/chunks/{chunk-J2RJOJ5Q.js → chunk-TDGE52HJ.js} +1 -1
- package/dist/cli/chunks/chunk-THFLRJT6.js +54 -0
- package/dist/cli/chunks/{chunk-GGTCD4MA.js → chunk-TQ2MA3SR.js} +1 -1
- package/dist/cli/chunks/{chunk-NOSQI2OW.js → chunk-UCQ66N6M.js} +3 -3
- package/dist/cli/chunks/{chunk-CL6SNCFF.js → chunk-UHGMS2PJ.js} +1 -1
- package/dist/cli/chunks/{chunk-XDHGCBTS.js → chunk-UHKXKWMD.js} +2 -2
- package/dist/cli/chunks/{chunk-PEHEANAM.js → chunk-UJ6TMZC6.js} +2 -2
- package/dist/cli/chunks/{chunk-PSDH7CIL.js → chunk-UKBDH27A.js} +1 -1
- package/dist/cli/chunks/{chunk-ZTKCGEB6.js → chunk-UMCEEXQN.js} +1 -1
- package/dist/cli/chunks/{chunk-KA4EAMMQ.js → chunk-USUFTHHT.js} +3 -3
- package/dist/cli/chunks/{chunk-QILF6BZH.js → chunk-V32MDID3.js} +2 -2
- package/dist/cli/chunks/{chunk-6SUSRXXF.js → chunk-VAJT6QWX.js} +1 -1
- package/dist/cli/chunks/{chunk-7Q74K3HZ.js → chunk-VLUJWI56.js} +1 -1
- package/dist/cli/chunks/{chunk-DW7OI5IF.js → chunk-WINA3XUT.js} +2 -2
- package/dist/cli/chunks/{chunk-S47YGWXK.js → chunk-WWCH5SSF.js} +2 -2
- package/dist/cli/chunks/{chunk-FJACKKRL.js → chunk-WWP2VXYJ.js} +2 -2
- package/dist/cli/chunks/{chunk-N4ML23ZG.js → chunk-WZROSTQZ.js} +1 -1
- package/dist/cli/chunks/{chunk-FXOOOJQD.js → chunk-XFUF654L.js} +1 -1
- package/dist/cli/chunks/{chunk-PDX7IYTJ.js → chunk-XN2CD5S6.js} +2 -2
- package/dist/cli/chunks/{chunk-DHUZHT5D.js → chunk-XOQQGZFY.js} +1 -1
- package/dist/cli/chunks/{chunk-4HP7N6SP.js → chunk-XSCOEY4C.js} +2 -2
- package/dist/cli/chunks/{chunk-KNWBRMLL.js → chunk-Y734CWHJ.js} +2 -2
- package/dist/cli/chunks/{chunk-NJDLJ3KD.js → chunk-YBPCBFEE.js} +2 -2
- package/dist/cli/chunks/{chunk-67BCEHU5.js → chunk-YLAEIS6F.js} +1 -1
- package/dist/cli/chunks/{chunk-E53UR2EW.js → chunk-YMMVCOPF.js} +3 -3
- package/dist/cli/chunks/{chunk-VSD6JE2H.js → chunk-YQCAXYBF.js} +2 -2
- package/dist/cli/chunks/{chunk-32L7DKNQ.js → chunk-YRVUYM62.js} +2 -2
- package/dist/cli/chunks/{chunk-LNIHLNW4.js → chunk-YVKMHXQK.js} +3 -3
- package/dist/cli/chunks/{chunk-CHFTHSMM.js → chunk-ZCLFAOVT.js} +2 -2
- package/dist/cli/chunks/{chunk-AZ24ONMX.js → chunk-ZH6ZBDVV.js} +1 -1
- package/dist/cli/chunks/{chunk-R6WMGSEK.js → chunk-ZHEKGB4A.js} +2 -2
- package/dist/cli/chunks/{chunk-EOUJ6X5H.js → chunk-ZIBW7CB4.js} +1 -1
- package/dist/cli/chunks/{chunk-OBL6W4Z5.js → chunk-ZLCATRXI.js} +2 -2
- package/dist/cli/chunks/{chunk-UGXHMQ6P.js → chunk-ZXX2VFMA.js} +2 -2
- package/dist/cli/chunks/{chunk-72QQDR3Y.js → chunk-ZYPESQ4M.js} +2 -2
- package/dist/cli/chunks/{ci-MMLUV6L6.js → ci-HHL5WQXQ.js} +2 -2
- package/dist/cli/chunks/{ci-output-25GS6RXR.js → ci-output-HVOJC2KN.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4OWAN6R6.js → circuit-breaker-HRXMIY2G.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-LR3SRBX6.js → claude-flow-setup-3I7WVMZN.js} +2 -2
- package/dist/cli/chunks/client-EY2IYQDL.js +2 -0
- package/dist/cli/chunks/{cline-installer-YSZWRZUI.js → cline-installer-NBREL4QT.js} +2 -2
- package/dist/cli/chunks/{code-UUWUIXI7.js → code-TX4E2RWU.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-2LSPQORU.js → code-index-extractor-YELOFLSL.js} +2 -2
- package/dist/cli/chunks/codex-installer-HEX3KFRB.js +10 -0
- package/dist/cli/chunks/{completions-YKXBKZSO.js → completions-72GGFRGG.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-HNT2QRWB.js → complexity-analyzer-WRAKDYUK.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-AW5VCB66.js → continuedev-installer-UGYKSKTI.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-B6SVZXQT.js → copilot-installer-RPCRUKIJ.js} +2 -2
- package/dist/cli/chunks/core-handlers-G4GLA4DT.js +2 -0
- package/dist/cli/chunks/{cost-tracker-POZMBN2V.js → cost-tracker-CNHJ7G4M.js} +2 -2
- package/dist/cli/chunks/{coverage-V5BGPN5Q.js → coverage-RHIQ4XEX.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-P3K4IH5H.js +2 -0
- package/dist/cli/chunks/{cursor-installer-EYBI4QVK.js → cursor-installer-KSRVA4V2.js} +2 -2
- package/dist/cli/chunks/{daemon-CF6ENQB2.js → daemon-IT4AAFBW.js} +3 -3
- package/dist/cli/chunks/{daemon-HKARXY2W.js → daemon-QBXSJABV.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-XIL5IAP7.js → dag-attention-scheduler-F7WCQTLY.js} +2 -2
- package/dist/cli/chunks/{detect-RRX2U2KK.js → detect-2IYU332U.js} +2 -2
- package/dist/cli/chunks/{dist-node-DOANNRCS.js → dist-node-CIYNYCYN.js} +2 -2
- package/dist/cli/chunks/{domain-handler-QMTJV5OR.js → domain-handler-QRYQO2QK.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FSNH75XW.js → domain-transfer-2OQDOD3G.js} +2 -2
- package/dist/cli/chunks/dream-IT4ZQGEO.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-NI7PGONV.js → embed-and-insert-pattern-P2IFC7JL.js} +2 -2
- package/dist/cli/chunks/{eval-6ZAF2RY3.js → eval-SBPK37IB.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-JMXR7N5G.js → experience-capture-middleware-3GMFND3F.js} +3 -3
- package/dist/cli/chunks/{fast-paths-YB7XZZ76.js → fast-paths-4OYYII2F.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2RC4GFC4.js → feature-flags-BM6QTMMC.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KJSP7KR6.js → feature-flags-NFCAYUWO.js} +2 -2
- package/dist/cli/chunks/{file-discovery-SUPBXFYI.js → file-discovery-2M3ZUAGC.js} +2 -2
- package/dist/cli/chunks/{fleet-KSXFOLFW.js → fleet-QMGGVIDV.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-DFZ5KPPK.js → gnn-wrapper-WGMAGZMO.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-G3EADK2H.js → heartbeat-handler-5RSMEZGG.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-UUWSPHF2.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-YUJVSFPD.js +2 -0
- package/dist/cli/chunks/hnsw-index-FQZ47RSJ.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-MA676GER.js → hnsw-legacy-bridge-TYPQ2T6P.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-FE55OGYB.js → hnswlib-node-GMRPPMDM.js} +2 -2
- package/dist/cli/chunks/{hooks-HTCPMZNZ.js → hooks-NUC5P3OJ.js} +10 -10
- package/dist/cli/chunks/hybrid-router-T5MF73NF.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-QPB3IH4A.js → hypergraph-engine-OIB7WK54.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-GBFSVD7N.js → hypergraph-handler-XX2N75QC.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-AEGELYMD.js +2 -0
- package/dist/cli/chunks/{init-handler-XYBTBCPD.js → init-handler-AKSTJMZY.js} +6 -6
- package/dist/cli/chunks/init-wizard-WKX3OGWM.js +2 -0
- package/dist/cli/chunks/kernel-5CVWFIGR.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-LY6JOBFY.js → kilocode-installer-375V5ZZB.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-JF6NXTJL.js → kiro-installer-GKY5GB5Q.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-EGPMNDMT.js +2 -0
- package/dist/cli/chunks/{learning-BIISN67N.js → learning-2CQE3QP6.js} +3 -3
- package/dist/cli/chunks/{llm-router-YZUNVZQE.js → llm-router-FTQNRF45.js} +5 -5
- package/dist/cli/chunks/llm-router-service-H4LXOARB.js +2 -0
- package/dist/cli/chunks/{load-MTWNBNLL.js → load-3DBAO5ZG.js} +2 -2
- package/dist/cli/chunks/load-test-OOOGITSN.js +2 -0
- package/dist/cli/chunks/{mcp-37PYMNHQ.js → mcp-AWR6TDXM.js} +2 -2
- package/dist/cli/chunks/{memory-IXUUDCI3.js → memory-GI4LCNXY.js} +5 -5
- package/dist/cli/chunks/memory-backend-O2YOT4LW.js +2 -0
- package/dist/cli/chunks/{memory-handlers-RM2VOFJX.js → memory-handlers-MALKG7GP.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-RKKS5XYG.js → multi-model-executor-SWFT5U72.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3VXI5MTR.js → opencode-installer-EYXGYJX5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-UO3ZOGFZ.js → orchestrator-MP3EAZVC.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-WBOHE2XL.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-YJKRL2GI.js → pattern-usage-recorder-25P3R3W7.js} +2 -2
- package/dist/cli/chunks/{pipeline-GJQJKXWX.js → pipeline-LSAFL25D.js} +2 -2
- package/dist/cli/chunks/{platform-RHVCZK6C.js → platform-IJ6DJ2PG.js} +2 -2
- package/dist/cli/chunks/{plugin-ZKAIW7O6.js → plugin-OXOZRZW2.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-4X3DSKQV.js → prime-radiant-advanced-wasm-HJNJQQ3R.js} +2 -2
- package/dist/cli/chunks/protocol-executor-JCNTPW5J.js +2 -0
- package/dist/cli/chunks/{protocol-handler-KKYQZMB2.js → protocol-handler-TCMUH2HL.js} +2 -2
- package/dist/cli/chunks/{prove-OD6RPKWX.js → prove-ADXQ2GOX.js} +2 -2
- package/dist/cli/chunks/provider-manager-LPGQ5GOO.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-FWVYVSPP.js +2 -0
- package/dist/cli/chunks/{quality-ZRWBXCKO.js → quality-EWP36ORX.js} +2 -2
- package/dist/cli/chunks/{quality-gate-Y6BWQV7J.js → quality-gate-3BIG7PVU.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-UXNALRVD.js +2 -0
- package/dist/cli/chunks/{real-embeddings-YYEUO4P2.js → real-embeddings-D4NBT7W5.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-JBCPS3FK.js → roocode-installer-DOPWH6YV.js} +2 -2
- package/dist/cli/chunks/router-C6LUIQYY.js +2 -0
- package/dist/cli/chunks/routing-feedback-KMSGGDVD.js +2 -0
- package/dist/cli/chunks/{routing-handler-KTPJOSBJ.js → routing-handler-5ADEFOHS.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-SCZZVRE7.js → ruvector-commands-PLMEIHSN.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-IP7GELQJ.js → rvf-dual-writer-EQWKVNQB.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-WLFTDARU.js → rvf-migration-adapter-2OWFUUCG.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-MGFDQ5WD.js → rvf-migration-coordinator-URAETAPU.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-K54BELUE.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-OTOAGT5W.js → rvf-store-integrity-4AWPW4TF.js} +2 -2
- package/dist/cli/chunks/safe-db-NGOZWF2D.js +2 -0
- package/dist/cli/chunks/schedule-B3Y5P64E.js +2 -0
- package/dist/cli/chunks/scheduler-Z6QVRMTB.js +2 -0
- package/dist/cli/chunks/{security-B2CLZKRB.js → security-HDLZVM62.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-2PMFAQMN.js → shared-rvf-adapter-YQT7PF7X.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-B6P732AV.js → shared-rvf-dual-writer-N5D3NSJ7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-PLOUGATS.js +2 -0
- package/dist/cli/chunks/{status-handler-M6SN2W2D.js → status-handler-KLYRJ2MR.js} +2 -2
- package/dist/cli/chunks/{structural-health-YCCTGI3K.js → structural-health-6LKVRP6Y.js} +2 -2
- package/dist/cli/chunks/sync-7VMFPBVB.js +2 -0
- package/dist/cli/chunks/{sync-KSRF77ID.js → sync-YYOW6L6W.js} +2 -2
- package/dist/cli/chunks/{task-handler-MIKRB2SL.js → task-handler-RKQDGFN2.js} +2 -2
- package/dist/cli/chunks/{task-handlers-YXKRUBQ4.js → task-handlers-6YJ4QTEP.js} +3 -3
- package/dist/cli/chunks/{test-MLOLQCB7.js → test-ASPUIUJH.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-3KXESUZS.js → test-scheduling-I7ABQBBU.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-6V2PMDBJ.js → token-bootstrap-2XZBTODN.js} +2 -2
- package/dist/cli/chunks/{token-usage-DP6THJ3I.js → token-usage-TMUE6PTF.js} +2 -2
- package/dist/cli/chunks/transformers-FDHHH4SL.js +2 -0
- package/dist/cli/chunks/{tree-sitter-wasm-parser-COK2XERS.js → tree-sitter-wasm-parser-G7PGZA5C.js} +2 -2
- package/dist/cli/chunks/{types-PYHUCVOZ.js → types-JGT57UFP.js} +2 -2
- package/dist/cli/chunks/unified-memory-P5YVLMFI.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-7HI43A2O.js +2 -0
- package/dist/cli/chunks/unified-persistence-U26YP3N3.js +2 -0
- package/dist/cli/chunks/{upgrade-ONP2HNGL.js → upgrade-V6UQODJF.js} +2 -2
- package/dist/cli/chunks/{validate-NWSICDAY.js → validate-UBZAE5RW.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-KXS5P3U7.js → validate-swarm-TSO2MI5X.js} +2 -2
- package/dist/cli/chunks/{vibium-TZSGZRCQ.js → vibium-7G3VYSQA.js} +2 -2
- package/dist/cli/chunks/visual-security-6FCDY5FF.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-V2FADNRA.js → web-tree-sitter-MIYJSF2L.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-GQM7KWDC.js → windsurf-installer-5TLZSQIJ.js} +2 -2
- package/dist/cli/chunks/witness-chain-I3K3WQID.js +2 -0
- package/dist/cli/chunks/{witness-chain-GTITDIA2.js → witness-chain-LTV7H2HM.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-AHRM2M52.js → witness-key-manager-PAJ2J4AL.js} +2 -2
- package/dist/cli/chunks/{workflow-XCGHEL3I.js → workflow-DL3ESR2H.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-MAALP4WA.js +2 -0
- package/dist/cli/chunks/{wrappers-VGO2GO4J.js → wrappers-5HSU665E.js} +2 -2
- package/dist/cli/commands/llm-router.js +1 -0
- 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 +639 -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/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/init/skills-installer.js +1 -0
- package/dist/integrations/embeddings/base/EmbeddingGenerator.js +13 -1
- package/dist/kernel/unified-memory.js +4 -0
- package/dist/learning/qe-flywheel/corpus-scorer.js +10 -7
- package/dist/learning/qe-flywheel/generation.d.ts +7 -0
- package/dist/learning/qe-flywheel/generation.js +5 -0
- package/dist/learning/qe-flywheel/witness-verify.d.ts +86 -0
- package/dist/learning/qe-flywheel/witness-verify.js +156 -0
- package/dist/learning/real-embeddings.js +15 -1
- package/dist/mcp/bundle.js +455 -434
- 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/db-recovery.d.ts +55 -0
- package/dist/shared/db-recovery.js +184 -0
- package/dist/shared/llm/billing-modes.js +5 -2
- package/dist/shared/llm/cost-tracker.js +1 -0
- package/dist/shared/llm/interfaces.d.ts +14 -1
- package/dist/shared/llm/llm-router-service.js +59 -4
- package/dist/shared/llm/provider-manager.d.ts +1 -1
- package/dist/shared/llm/provider-manager.js +7 -3
- package/dist/shared/llm/providers/claude-code.js +12 -3
- package/dist/shared/llm/providers/codex.d.ts +58 -0
- package/dist/shared/llm/providers/codex.js +305 -0
- package/dist/shared/llm/providers/index.d.ts +1 -0
- package/dist/shared/llm/providers/index.js +1 -0
- 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 +108 -0
- package/dist/shared/llm/router/hybrid-router.js +2 -2
- 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/dist/shared/llm/spend-ledger.d.ts +24 -0
- package/dist/shared/llm/spend-ledger.js +86 -15
- package/dist/shared/llm/translation/message-formatter.js +1 -0
- package/dist/shared/safe-db.d.ts +10 -0
- package/dist/shared/safe-db.js +17 -0
- package/dist/skills/qe-court/referee.d.ts +62 -0
- package/dist/skills/qe-court/referee.js +78 -0
- package/dist/validation/gate-reexecute.d.ts +9 -0
- package/dist/validation/gate-reexecute.js +61 -0
- package/dist/validation/paired-bootstrap.d.ts +36 -0
- package/dist/validation/paired-bootstrap.js +58 -0
- package/package.json +9 -2
- package/dist/cli/chunks/adapter-D657MKZY.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-AFR6OZJK.js +0 -2
- package/dist/cli/chunks/base-K5QRGZWE.js +0 -2
- package/dist/cli/chunks/browser-workflow-ZMMKCGYW.js +0 -2
- package/dist/cli/chunks/chunk-6HQDPDN5.js +0 -2
- package/dist/cli/chunks/chunk-6SQ72FG7.js +0 -2
- package/dist/cli/chunks/chunk-7XUM4LBC.js +0 -2
- package/dist/cli/chunks/chunk-FHHCH7WL.js +0 -2
- package/dist/cli/chunks/chunk-G5OGKVLO.js +0 -2
- package/dist/cli/chunks/chunk-ILRKO6A5.js +0 -43
- package/dist/cli/chunks/chunk-NX522PRH.js +0 -153
- package/dist/cli/chunks/chunk-PPUDKQ4X.js +0 -29
- package/dist/cli/chunks/chunk-RSZOCQOL.js +0 -2
- package/dist/cli/chunks/chunk-ULQCEM7K.js +0 -2
- package/dist/cli/chunks/chunk-XQ5JT7KM.js +0 -3
- package/dist/cli/chunks/client-WI7RRUZO.js +0 -2
- package/dist/cli/chunks/codex-installer-E5BVXZVA.js +0 -8
- package/dist/cli/chunks/core-handlers-T6URR57V.js +0 -2
- package/dist/cli/chunks/cross-domain-router-WHTTKHWM.js +0 -2
- package/dist/cli/chunks/dream-QUL6SURC.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-VZNKE33K.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-LGWLDZLC.js +0 -2
- package/dist/cli/chunks/hnsw-index-66FOOI7U.js +0 -2
- package/dist/cli/chunks/hybrid-router-I5MEVQDF.js +0 -2
- package/dist/cli/chunks/impact-analyzer-K6ANYIY3.js +0 -2
- package/dist/cli/chunks/init-wizard-URHGXJ32.js +0 -2
- package/dist/cli/chunks/kernel-OKI5ZY5P.js +0 -2
- package/dist/cli/chunks/knowledge-graph-VQQSK7T5.js +0 -2
- package/dist/cli/chunks/llm-router-service-TISH33SY.js +0 -2
- package/dist/cli/chunks/load-test-KWKWC4Q7.js +0 -2
- package/dist/cli/chunks/memory-backend-JSQQMXVS.js +0 -2
- package/dist/cli/chunks/pattern-null-store-SXBIUKE5.js +0 -2
- package/dist/cli/chunks/protocol-executor-D3Q5P3WY.js +0 -2
- package/dist/cli/chunks/provider-manager-2EIX7E5Q.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-ITOW2ZHC.js +0 -2
- package/dist/cli/chunks/queen-coordinator-TO5X2EXL.js +0 -2
- package/dist/cli/chunks/router-GZJQEJU3.js +0 -2
- package/dist/cli/chunks/routing-feedback-CRXSKFNS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-WHADT5HX.js +0 -2
- package/dist/cli/chunks/safe-db-MIZ2OFWC.js +0 -2
- package/dist/cli/chunks/schedule-XFILYTYC.js +0 -2
- package/dist/cli/chunks/scheduler-EIPJ777A.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-PFU3GSRD.js +0 -2
- package/dist/cli/chunks/sync-3SDMVAIU.js +0 -2
- package/dist/cli/chunks/transformers-QFOBOP2Y.js +0 -2
- package/dist/cli/chunks/unified-memory-OUVCMFGK.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-YGQPOHXB.js +0 -2
- package/dist/cli/chunks/unified-persistence-GFRZVDOW.js +0 -2
- package/dist/cli/chunks/visual-security-LVOOYQ64.js +0 -2
- package/dist/cli/chunks/witness-chain-QNFPV4UL.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-MIVBCALG.js +0 -2
|
@@ -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,165 @@ 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.1] - 2026-07-23
|
|
9
|
+
|
|
10
|
+
Fixes four reported issues, three of which come down to the same thing: a tool
|
|
11
|
+
told you something it had not actually established. Coverage analysis reported
|
|
12
|
+
numbers it never measured, test generation claimed AI enhancement it never
|
|
13
|
+
performed, and a security advisory reached users through a dependency they never
|
|
14
|
+
asked for.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Coverage analysis no longer reports numbers it did not measure** ([#569]).
|
|
19
|
+
On a Rust crate, `coverage_analyze_sublinear` returned `78.3%` lines,
|
|
20
|
+
`100%` branches and `0%` functions — none of it measured. It flagged
|
|
21
|
+
`#[cfg(test)]` blocks as untested production code, cited line numbers past the
|
|
22
|
+
end of the file, and analysed test files as coverage targets, all with a
|
|
23
|
+
confidence score attached. Rust crates are now measured with `cargo llvm-cov`
|
|
24
|
+
when it is available. When nothing can be measured, the result says so
|
|
25
|
+
(`estimated: true`, `measured: false`) instead of presenting a guess as data.
|
|
26
|
+
- **`test_generate_enhanced` actually calls your LLM now** ([#567]). The tool
|
|
27
|
+
advertised AI-powered generation but the LLM router never reached the code path
|
|
28
|
+
it runs, so it always returned the same generic scaffold regardless of how you
|
|
29
|
+
configured your provider. It now routes through your configured model, and the
|
|
30
|
+
result reports `llmEnhanced` so a silent fall back to templates is visible
|
|
31
|
+
rather than something you infer from a suspiciously fast response. A broken
|
|
32
|
+
provider (bad key, timeout) reports the fallback honestly instead of claiming
|
|
33
|
+
enhancement it did not perform.
|
|
34
|
+
- **A HIGH-severity advisory no longer reaches consumers** ([#565]).
|
|
35
|
+
`@huggingface/transformers` was declared an *optional* peer dependency, but npm
|
|
36
|
+
installs optional peers — so every install pulled in
|
|
37
|
+
`onnxruntime-node -> adm-zip` and its advisory. It is now an explicit opt-in:
|
|
38
|
+
install it yourself only if you want local in-process embeddings. Everyone
|
|
39
|
+
using an embedding endpoint (the default) no longer carries the advisory.
|
|
40
|
+
- **`codex` is selectable through the LLM router.** The provider existed and
|
|
41
|
+
worked, but was missing from the router's provider list, so it could never
|
|
42
|
+
actually be chosen.
|
|
43
|
+
- **Fixes now take effect immediately after an upgrade.** Operation results were
|
|
44
|
+
cached per project and keyed without the build version, so an upgraded install
|
|
45
|
+
could keep replaying the previous version's answers for up to an hour — making
|
|
46
|
+
a fix look like it had not worked. Set `AQE_SESSION_CACHE_SALT` to force a cold
|
|
47
|
+
cache at any time.
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- **Per-agent LLM routing you can configure on disk** ([#568]). Route individual
|
|
52
|
+
agent types through different providers via an `agentOverrides` map in
|
|
53
|
+
`.agentic-qe/llm-config.json` — a strong reasoning model for security agents, a
|
|
54
|
+
free local model for mechanical ones — without changing your global default:
|
|
55
|
+
|
|
56
|
+
```jsonc
|
|
57
|
+
{
|
|
58
|
+
"defaultProvider": "ollama",
|
|
59
|
+
"agentOverrides": {
|
|
60
|
+
"qe-security-scanner": { "provider": "claude-code", "model": "opus" },
|
|
61
|
+
"qe-mutation-tester": { "provider": "ollama" }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Entries are partial (unset fields keep their defaults), invalid entries are
|
|
67
|
+
dropped with an explanation rather than failing startup, and credentials are
|
|
68
|
+
never persisted here. See `docs/guides/llm-provider-routing.md`.
|
|
69
|
+
- **`AQE_COVERAGE_NO_EXEC=1` — opt out of running build tooling.** Measuring
|
|
70
|
+
coverage means running your project's tests, which executes code from the
|
|
71
|
+
analysed repository (`cargo` also runs `build.rs`; `npx` runs lifecycle
|
|
72
|
+
scripts). That is what you want for your own code, but is worth being able to
|
|
73
|
+
turn off when pointing the tool at something you do not trust. Existing
|
|
74
|
+
coverage reports are still read; everything else degrades to a labelled
|
|
75
|
+
estimate.
|
|
76
|
+
- **QE skills and lifecycle hooks for the Codex CLI.** `aqe init` now installs
|
|
77
|
+
three Codex-native skills — `aqe-test-change`, `aqe-review-quality`,
|
|
78
|
+
`aqe-plan-quality` — under `.agents/skills/`, plus Codex lifecycle hooks in
|
|
79
|
+
`.codex/`, and an `AGENTS.md` describing the repository's conventions. If you
|
|
80
|
+
drive this project with Codex rather than Claude Code, the QE workflows are now
|
|
81
|
+
available there natively instead of Claude-only.
|
|
82
|
+
- **Security scans state how deeply they looked.** Full SAST is implemented for
|
|
83
|
+
JS/TS only; other languages get cross-language pattern matching. Results now
|
|
84
|
+
carry `analysisDepth`, so a zero-finding scan reads as "nothing matched a
|
|
85
|
+
generic pattern" rather than "no vulnerabilities".
|
|
86
|
+
|
|
87
|
+
### Changed
|
|
88
|
+
|
|
89
|
+
- **BREAKING (result shape):** `coverage_analyze_sublinear` now returns
|
|
90
|
+
`null` — not `0` — for any coverage metric that was not collected.
|
|
91
|
+
`lineCoverage`, `statementCoverage`, `branchCoverage` and `functionCoverage`
|
|
92
|
+
are all `number | null`. `0` now means a measured zero; `null` means unknown.
|
|
93
|
+
Callers doing arithmetic or comparisons on these fields should handle `null`;
|
|
94
|
+
check the new `measured` / `estimated` flags to tell the cases apart. This is
|
|
95
|
+
deliberately a visible break rather than a silent wrong number.
|
|
96
|
+
|
|
97
|
+
[#565]: https://github.com/proffesor-for-testing/agentic-qe/issues/565
|
|
98
|
+
[#567]: https://github.com/proffesor-for-testing/agentic-qe/issues/567
|
|
99
|
+
[#568]: https://github.com/proffesor-for-testing/agentic-qe/issues/568
|
|
100
|
+
[#569]: https://github.com/proffesor-for-testing/agentic-qe/issues/569
|
|
101
|
+
|
|
102
|
+
## [3.13.0] - 2026-07-18
|
|
103
|
+
|
|
104
|
+
Introduces **QE-Court** — an adversarial review court where a change is
|
|
105
|
+
prosecuted by independent AI reviewers from *different vendors*, each with its
|
|
106
|
+
own probe set, and a `SHIP` verdict must survive an escalating deeper review
|
|
107
|
+
before it stands (`SHIP` / `REMAND` / `BLOCK`). It debuted by reviewing this
|
|
108
|
+
very release — and blocked it, catching three data-loss/crash bugs a green unit
|
|
109
|
+
suite had missed (all fixed below). This release also adds a Codex (GPT) provider
|
|
110
|
+
so the court can seat a genuinely cross-vendor reviewer, a statistical
|
|
111
|
+
significance gate for the self-learning flywheel, automatic `memory.db` recovery,
|
|
112
|
+
and per-agent cost tracking.
|
|
113
|
+
|
|
114
|
+
### Added
|
|
115
|
+
|
|
116
|
+
- **QE-Court — adversarial review as a verdict (`/qe-court`).** Convenes
|
|
117
|
+
independent, cross-vendor reviewers (Codex/GPT, Cognitum, Claude) against a
|
|
118
|
+
diff/PR/test-suite; a passing grade must *survive* an escalating overturn round
|
|
119
|
+
before it stands. Emits a signed court record with a three-valued verdict. The
|
|
120
|
+
court's rules are enforced in code and verified by a runnable acceptance eval
|
|
121
|
+
(`aqe eval run --skill qe-court`) — trust tier 3.
|
|
122
|
+
- **Codex CLI provider — run QE on your ChatGPT subscription.** A `codex`
|
|
123
|
+
provider (like the existing `claude-code` one) shells out to `codex exec`, so
|
|
124
|
+
GPT-family models cost against your subscription rather than a per-token API
|
|
125
|
+
key. Gives the fleet a cross-vendor engine for review diversity and fallback.
|
|
126
|
+
- **Statistical significance gate for the self-learning flywheel.** A new
|
|
127
|
+
`accept/v1+sig` promotion rule requires a candidate's held-out gain to be
|
|
128
|
+
*statistically significant* (paired bootstrap CI > 0), not just larger by any
|
|
129
|
+
amount — so the flywheel no longer promotes within-noise improvements.
|
|
130
|
+
- **Automatic `memory.db` recovery.** If the learning database opens genuinely
|
|
131
|
+
corrupt, AQE now restores the newest integrity-verified backup automatically
|
|
132
|
+
and parks the corrupt file (never deletes it), instead of asking you to restore
|
|
133
|
+
by hand. Deliberately conservative — a healthy database is never touched.
|
|
134
|
+
- **Per-agent cost attribution.** The spend ledger now records which QE agent
|
|
135
|
+
incurred each LLM charge, so cost can be broken down across the fleet.
|
|
136
|
+
- **Cognitum QE cost-Pareto benchmark** (`scripts/cognitum-qe-bench/`). A
|
|
137
|
+
self-contained harness that measures, per QE task, the cheapest model tier that
|
|
138
|
+
clears the quality bar against `api.cognitum.one` — so tier routing is set by
|
|
139
|
+
evidence. First finding: on these tasks the cheap tier matched or beat the
|
|
140
|
+
frontier tier at 3–4× less cost.
|
|
141
|
+
- Draft `/v1/qe/verdict` API specification for a future hosted QE-Court service.
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
|
|
145
|
+
- **4 HIGH-severity CVEs no longer reach consumers (#565).** `@huggingface/`
|
|
146
|
+
`transformers` (which pulled a vulnerable `onnxruntime-node` → `adm-zip`) is now
|
|
147
|
+
an optional peer dependency, so a default `npm install agentic-qe` no longer
|
|
148
|
+
installs it. Local/in-process embeddings still work when the package is present;
|
|
149
|
+
endpoint-based embeddings are unaffected.
|
|
150
|
+
- **Three data-loss / crash bugs caught by QE-Court's own first review.**
|
|
151
|
+
(1) A subscription-provider subprocess exiting early could crash the calling
|
|
152
|
+
process with an unhandled `EPIPE`; (2) the new auto-restore could tear the
|
|
153
|
+
database under concurrent access or misdiagnose a *healthy* database on certain
|
|
154
|
+
bind-mount filesystems and revert to an older backup — both fixed to be atomic,
|
|
155
|
+
locked, and conservative; (3) a failed spend-ledger migration could silently
|
|
156
|
+
stop recording spend, bypassing the budget cap. Plus witness-verification now
|
|
157
|
+
fails closed by default and the flywheel gate rejects statistically
|
|
158
|
+
under-powered samples.
|
|
159
|
+
|
|
160
|
+
### Changed
|
|
161
|
+
|
|
162
|
+
- The user-facing QE skill count is now **76** (adds `qe-court`), with **50**
|
|
163
|
+
Tier-3 verified skills. `CONTRIBUTING.md` now clarifies that `ruflo` /
|
|
164
|
+
`claude-flow` are development-time tooling, **not** runtime dependencies of the
|
|
165
|
+
shipped package.
|
|
166
|
+
|
|
8
167
|
## [3.12.3] - 2026-07-17
|
|
9
168
|
|
|
10
169
|
Fixes a bug that could silently switch off vector search — permanently. If an
|
package/README.md
CHANGED
|
@@ -147,7 +147,7 @@ Or invoke an agent through the Task tool:
|
|
|
147
147
|
| | **Plugin** | **`aqe init`** |
|
|
148
148
|
|---|---|---|
|
|
149
149
|
| Setup | One slash command | Full project setup |
|
|
150
|
-
| Scope | 11 agents, 9 skills | 60 agents,
|
|
150
|
+
| Scope | 11 agents, 9 skills | 60 agents, 86 skills |
|
|
151
151
|
| Persistent learning DB | No (uses MCP server's) | Yes (`.agentic-qe/memory.db`) |
|
|
152
152
|
| Cross-platform support | Claude Code only | 11 platforms (Cursor, Copilot, Cline, etc.) |
|
|
153
153
|
| Use when | Quick start, single Claude Code project | Production team setup, multi-platform, full fleet |
|
|
@@ -275,7 +275,7 @@ Agents automatically apply relevant skills from the skill library. Skills are ra
|
|
|
275
275
|
| **Tier 0 — Advisory** | 5 | Guidance only |
|
|
276
276
|
|
|
277
277
|
<details>
|
|
278
|
-
<summary><b>View all
|
|
278
|
+
<summary><b>View all 76 skills</b></summary>
|
|
279
279
|
|
|
280
280
|
**Core Testing (12):** agentic-quality-engineering, holistic-testing-pact, context-driven-testing, tdd-london-chicago, xp-practices, risk-based-testing, test-automation-strategy, refactoring-patterns, shift-left-testing, shift-right-testing, regression-testing, verification-quality
|
|
281
281
|
|
|
@@ -285,7 +285,7 @@ Agents automatically apply relevant skills from the skill library. Skills are ra
|
|
|
285
285
|
|
|
286
286
|
**Domain Skills (11):** qe-test-generation, qe-test-execution, qe-coverage-analysis, qe-quality-assessment, qe-defect-intelligence, qe-requirements-validation, qe-code-intelligence, qe-visual-accessibility, qe-chaos-resilience, qe-learning-optimization, qe-iterative-loop
|
|
287
287
|
|
|
288
|
-
**Strategic (
|
|
288
|
+
**Strategic (9):** six-thinking-hats, brutal-honesty-review, sherlock-review, qe-court (adversarial review court — SHIP/REMAND/BLOCK verdict that must survive escalating cross-vendor reviewers; see [ADR-124](docs/implementation/adrs/ADR-124-qe-court-adversarial-verdict-service.md)), cicd-pipeline-qe-orchestrator, bug-reporting-excellence, consultancy-practices, quality-metrics, pair-programming
|
|
289
289
|
|
|
290
290
|
**Testing Techniques (9):** exploratory-testing-advanced, test-design-techniques, test-data-management, test-environment-management, test-reporting-analytics, testability-scoring, technical-writing, code-review-quality, api-testing-patterns
|
|
291
291
|
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "qe-court"
|
|
3
|
+
description: "Adversarial review court — a delivery (diff, PR, test suite, or artifact) is prosecuted by independent AI reviewers from different vendors, each with its own probe set, then a SHIP verdict must SURVIVE escalating deeper reviewers before it stands. Use when you want more than one reviewer's opinion on whether something is safe to ship: pre-merge gating, release go/no-go, catching a too-easy PASS, or any 'is this actually done?' decision where a shallow approval is a risk. Produces a signed court record with a three-valued verdict (SHIP / REMAND / BLOCK) and a human as final judge. Learns over time: reproduced charges and overturned SHIPs feed the QE flywheel."
|
|
4
|
+
trust_tier: 3
|
|
5
|
+
validation:
|
|
6
|
+
schema_path: schemas/output.json
|
|
7
|
+
validator_path: scripts/validate-config.json
|
|
8
|
+
eval_path: evals/qe-court.yaml
|
|
9
|
+
status: passing
|
|
10
|
+
passRate: 1.0
|
|
11
|
+
criticalPassRate: 1.0
|
|
12
|
+
lastValidated: "2026-07-18"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# QE-Court: Adversarial Review as a Verdict
|
|
16
|
+
|
|
17
|
+
## Purpose
|
|
18
|
+
|
|
19
|
+
One reviewer — even a strong one — is one Einstein squinting at the chalkboard.
|
|
20
|
+
QE-Court convenes **independent adversaries from different vendors, with different
|
|
21
|
+
roles and different probe sets**, makes them attack the delivery, and then forces
|
|
22
|
+
any `SHIP` verdict to *survive* an escalating deeper review before it stands. You
|
|
23
|
+
stay in the loop as the final judge. Implements ADR-124; composes ADR-117..122.
|
|
24
|
+
|
|
25
|
+
**The one rule that makes it a court and not a rubber stamp:** a passing grade is
|
|
26
|
+
the *claim under attack*, not the finish line. A shallow `91/100 SHIP` that a
|
|
27
|
+
deeper reviewer can overturn is a bug in the review, not a delivery that shipped.
|
|
28
|
+
|
|
29
|
+
## When to convene the court
|
|
30
|
+
|
|
31
|
+
- Pre-merge gate on a risky PR or diff
|
|
32
|
+
- Release go/no-go ("deployment readiness with a jury")
|
|
33
|
+
- You got a PASS that felt too easy and want it stress-tested
|
|
34
|
+
- A test suite claims coverage you don't trust (does it kill mutants?)
|
|
35
|
+
- Any high-stakes "is this actually done?" call
|
|
36
|
+
|
|
37
|
+
For a quick single-lens review, use `/sherlock-review`, `/brutal-honesty-review`,
|
|
38
|
+
or `/code-review` instead — the court is for when one opinion isn't enough.
|
|
39
|
+
|
|
40
|
+
## The court roster (composes existing skills/agents — do NOT reimplement critics)
|
|
41
|
+
|
|
42
|
+
| Role | Who | Job |
|
|
43
|
+
|------|-----|-----|
|
|
44
|
+
| **Defense** | writer model (summarizer) | States the case-FOR-ship from the evidence. Never grades. |
|
|
45
|
+
| **Prosecution** | `qe-devils-advocate`, `brutal-honesty-review`, `sherlock-review`, `qe-security-scanner`, `qe-mutation-tester`, **`codex exec review`** | Each files CHARGES against the delivery, **with its own probe set**, blind to the others until filing. |
|
|
46
|
+
| **Blind refuter** | `src/verification/adversarial-verify` | Tries to KILL weak charges (default-refuted-if-uncertain). |
|
|
47
|
+
| **Jury** | two-gate LLM-judge (ADR-119), cross-model | Weighs surviving charges → verdict + (optional) score. |
|
|
48
|
+
| **Deeper reviewer** | higher effort/model tier of any prosecutor | The overturn round. |
|
|
49
|
+
| **Judge** | **you (the human)** | Sees the strongest case for AND against; rules. |
|
|
50
|
+
|
|
51
|
+
> ⚠️ **Do NOT run the reduced 3-dimension QCSD workflow as the court engine.** It
|
|
52
|
+
> can falsely rate SHIP by skipping the security / mutation / defect lanes. Spawn
|
|
53
|
+
> the *specialized* `qe-*` prosecutors above, or you reproduce the exact
|
|
54
|
+
> false-SHIP the court exists to catch. (ADR-124; see `qcsd-development-swarm`.)
|
|
55
|
+
|
|
56
|
+
## Model routing (configurable — this is the point of the court)
|
|
57
|
+
|
|
58
|
+
The court's guarantees come from **who** reviews, not just how. Routing is
|
|
59
|
+
**user-configurable** in `config.json` under `routing`; the defaults below enforce
|
|
60
|
+
the invariants. Every model call goes through AQE's provider layer (ADR-123), so
|
|
61
|
+
budget caps and cost receipts apply automatically.
|
|
62
|
+
|
|
63
|
+
| Step | Default provider / tier | Why |
|
|
64
|
+
|------|------------------------|-----|
|
|
65
|
+
| **Defense** | `cognitum-low` or `claude-code` (may equal writer) | Cheap; states the case, never grades |
|
|
66
|
+
| Prosecutor — devils-advocate | `cognitum-mid` | Gap/assumption hunting |
|
|
67
|
+
| Prosecutor — brutal-honesty | `claude-code` (Opus/Sonnet) | Rigor lens, different family from jury |
|
|
68
|
+
| Prosecutor — sherlock | `cognitum-high` | Deductive/root-cause needs a strong model |
|
|
69
|
+
| Prosecutor — security-scanner | SAST tool + `cognitum-mid` | Determinism where possible |
|
|
70
|
+
| Prosecutor — mutation | mutation tool + `local`/booster | Test-adequacy is mechanical |
|
|
71
|
+
| Prosecutor — codex-review | `codex` (ChatGPT sub) | **Cross-vendor GPT brain — true writer≠juror; ≈$0** |
|
|
72
|
+
| **Jury** (two-gate judge) | `cognitum-high` or Opus, `provider ≠ writer` | Must not grade its own family's output |
|
|
73
|
+
| **Deeper reviewer** | highest tier / best-of-N @ higher effort | Escalation must be *stronger* than the base panel |
|
|
74
|
+
|
|
75
|
+
**Provider menu** (mix freely in `routing`): `claude-code` (Claude subscription),
|
|
76
|
+
`cognitum-{low,mid,high}` (Cognitum's own multi-model tiers — one option, it routes
|
|
77
|
+
internally), `openrouter` (**use when you want many distinct models** across vendors
|
|
78
|
+
for breadth), `codex` (GPT via ChatGPT subscription), `claude`/`openai`/`gemini`
|
|
79
|
+
(metered APIs), `ollama` (local). Cognitum and OpenRouter are *separate* options:
|
|
80
|
+
Cognitum already resolves multiple models behind its tiers; OpenRouter is the lever
|
|
81
|
+
when you explicitly want to name several different models.
|
|
82
|
+
|
|
83
|
+
**Enforced invariants** (defaults; do not weaken without reason):
|
|
84
|
+
1. **≥2 distinct vendors** across the panel — Claude / Cognitum / GPT-via-Codex — not just tiers.
|
|
85
|
+
2. **Jury provider ∉ {writer, defense}** — no model grades its own or its writer's output.
|
|
86
|
+
3. All calls routed through `ProviderManager` → ADR-123 budget cap + receipts.
|
|
87
|
+
|
|
88
|
+
## The protocol
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
DELIVERY (diff / PR / test-suite / artifact)
|
|
92
|
+
│ 1. DEFENSE — writer model states the case for shipping, from evidence only.
|
|
93
|
+
│ 2. PROSECUTION (parallel, blind) — N specialized reviewers, DIFFERENT vendors,
|
|
94
|
+
│ each generates its OWN probe set and files CHARGES (finding + reproduction).
|
|
95
|
+
│ 3. KILL ROUND — blind refuters attack each charge; weak/unreproducible ones dropped.
|
|
96
|
+
│ 4. JURY — two-gate judge, cross-model, writer≠juror. 3-valued verdict.
|
|
97
|
+
│ A numeric score is emitted ONLY if its rubric passed the ADR-122 ANOVA screen.
|
|
98
|
+
│ 5. OVERTURN ROUND — if verdict == SHIP, escalate ONE deeper reviewer. Loop-until-dry:
|
|
99
|
+
│ SHIP only STANDS if K consecutive deeper rounds find nothing new. Surviving fatal → flip.
|
|
100
|
+
│ 6. SIGNED COURT RECORD — provenance-tier surviving charges (ADR-121), sign (ADR-118).
|
|
101
|
+
▼ HUMAN JUDGE (you) — rules SHIP / REMAND / BLOCK on the strongest case both ways.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Verdict states (three-valued — never a bare pass/fail)
|
|
105
|
+
|
|
106
|
+
| Verdict | Meaning | Trigger |
|
|
107
|
+
|---------|---------|---------|
|
|
108
|
+
| **SHIP** | Survived the overturn round | No fatal charge survived K deeper rounds |
|
|
109
|
+
| **REMAND** | Fixable charges — back to author | Non-fatal charges survived; delivery is close |
|
|
110
|
+
| **BLOCK** | A fatal charge survived | ≥1 fatal charge reproduced and not refuted |
|
|
111
|
+
|
|
112
|
+
## Self-learning — the court feeds the flywheel (ADR-124 M0.B)
|
|
113
|
+
|
|
114
|
+
A verdict is not the end; it is training signal. After each court run:
|
|
115
|
+
|
|
116
|
+
1. **Sign the court record → a flywheel receipt.** Use the ADR-118 signer
|
|
117
|
+
(`src/learning/qe-flywheel/receipt.ts` `createSigner` / `platform-signer.ts`,
|
|
118
|
+
persisted via `receipt-store.ts`). The verdict + surviving charges are the body.
|
|
119
|
+
2. **Each reproduced, surviving charge → a `qe_pattern`** (ADR-110) at provenance
|
|
120
|
+
tier **`oracle:test-exec`** (ADR-121 — it reproduced, so it is oracle-grade).
|
|
121
|
+
Killed/refuted charges are NOT stored as positives (noise control).
|
|
122
|
+
3. **An overturned SHIP is the highest-value signal there is** — persist
|
|
123
|
+
`{shallow: SHIP, true: BLOCK|REMAND, charge}` as a discriminator training pair
|
|
124
|
+
for the frozen anchor (ADR-117) and two-gate judge (ADR-119). This is what makes
|
|
125
|
+
the court *harder to fool* over time.
|
|
126
|
+
4. **Retrieval-augment the next panel:** seed each prosecutor's probe set with the
|
|
127
|
+
HNSW-nearest prior charges for similar deliveries (`qe_pattern_embeddings`).
|
|
128
|
+
|
|
129
|
+
All writes are **appends** to existing stores — never destructive to `memory.db`.
|
|
130
|
+
|
|
131
|
+
## Improvement over time (ADR-124 M0.C)
|
|
132
|
+
|
|
133
|
+
- **Probe-set promotion:** track each probe's historical **mutant-kill rate**;
|
|
134
|
+
promote high-kill probes, retire dead ones (stored under a `qe-court/probes` namespace).
|
|
135
|
+
- **DoE-gated scoring:** emit a numeric score ONLY if its rubric passes the ADR-122
|
|
136
|
+
ANOVA screen (it must actually discriminate). Otherwise report the verdict class +
|
|
137
|
+
charges, no number — never a noise "91/100".
|
|
138
|
+
- **Learnable overturn depth K:** start K=2; learn per-domain the depth at which new
|
|
139
|
+
charges stop appearing (the empirical loop-until-dry tail).
|
|
140
|
+
|
|
141
|
+
## Anti-collusion invariants (enforce these or it isn't a court)
|
|
142
|
+
|
|
143
|
+
1. **Writer ≠ any juror.** 2. **Prosecutors file blind.** 3. **Overturn is asymmetric**
|
|
144
|
+
(SHIP must survive escalation; BLOCK needs one surviving fatal charge). 4. **No un-validated scores.**
|
|
145
|
+
|
|
146
|
+
## How to run it (today)
|
|
147
|
+
|
|
148
|
+
QE-Court is an orchestration skill: the driving agent convenes the court by
|
|
149
|
+
composing existing agents/skills — there is no monolithic binary yet (a thin
|
|
150
|
+
`aqe court` CLI wrapper is planned as ADR-124 Phase 1; the hosted `/v1/qe/verdict`
|
|
151
|
+
is Phase 2). To run a court now:
|
|
152
|
+
|
|
153
|
+
1. Read `config.json` for the panel + `routing` + `overturnDepth`.
|
|
154
|
+
2. Spawn the prosecutors **in one message, in parallel** (`Task`/`Agent`,
|
|
155
|
+
`run_in_background: true`), each with its routed provider; run
|
|
156
|
+
`codex exec review` for the cross-vendor lens via Bash.
|
|
157
|
+
3. Collect charges → run the blind-refuter kill round (`adversarial-verify`).
|
|
158
|
+
4. Jury (two-gate judge) → verdict. If SHIP, run the overturn loop to `overturnDepth`.
|
|
159
|
+
5. Emit the signed court record; persist learning per the section above.
|
|
160
|
+
6. Present the strongest case FOR and AGAINST to the human judge.
|
|
161
|
+
|
|
162
|
+
## Output: the court record
|
|
163
|
+
|
|
164
|
+
Markdown: the delivery under review, the Defense case, each prosecutor's surviving
|
|
165
|
+
charges (provenance-tiered, with the vendor that filed them), the kill-round
|
|
166
|
+
casualties, the jury verdict, the overturn transcript, and the signed verdict block.
|
|
167
|
+
Durable, attestable evidence — the "jury waiting for everything you ship."
|
|
168
|
+
|
|
169
|
+
## Trust tier
|
|
170
|
+
|
|
171
|
+
**Tier 3 (verified).** The court's falsifiable invariants are enforced in code
|
|
172
|
+
(`src/skills/qe-court/referee.ts`) and covered by an oracle suite
|
|
173
|
+
(`tests/unit/skills/qe-court/referee.test.ts`) that the acceptance eval
|
|
174
|
+
(`evals/qe-court.yaml`, command-eval mode) runs through the `aqe eval` CLI —
|
|
175
|
+
6/6 green as of 2026-07-18. The keystone oracle: a seeded mutant a shallow panel
|
|
176
|
+
rated SHIP is overturned to BLOCK when the overturn round is active, and MUST
|
|
177
|
+
regress to SHIP at `overturnDepth: 0` — proving the mechanic carries its weight.
|
|
178
|
+
Run it yourself: `aqe eval run --skill qe-court --model cognitum-low`.
|
|
179
|
+
|
|
180
|
+
## Related
|
|
181
|
+
|
|
182
|
+
- Reference implementation of ADR-124; hosted sibling is `/v1/qe/verdict` (Cognitum, planned).
|
|
183
|
+
- Prosecutors: `/brutal-honesty-review`, `/sherlock-review`, `qe-devils-advocate` agent, `codex exec review`.
|
|
184
|
+
- Verification core: `src/verification/adversarial-verify`. Signer: `src/learning/qe-flywheel/receipt.ts`.
|
|
185
|
+
- Jury/rigor: ADR-117 (frozen anchor), ADR-119 (two-gate judge), ADR-121 (provenance), ADR-122 (DoE).
|
|
186
|
+
- Contrast: `/code-review`, `/pr-review` (single-lens); `qcsd-cicd-swarm` (phase gate, not adversarial court).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./config-schema.json",
|
|
3
|
+
"_description": "QE-Court adversarial review configuration (ADR-124). Auto-created on first run. Edit `routing` to choose which provider/model runs each court role. All providers route through AQE's ADR-123 provider layer (budget caps + receipts apply).",
|
|
4
|
+
"prosecutors": ["devils-advocate", "brutal-honesty", "sherlock", "security-scanner", "mutation", "codex-review"],
|
|
5
|
+
"overturnDepth": 2,
|
|
6
|
+
"emitScore": false,
|
|
7
|
+
"routing": {
|
|
8
|
+
"_note": "provider ids: claude-code | cognitum-{low,mid,high} | openrouter | codex | claude | openai | gemini | ollama. Cognitum resolves multiple models behind its tiers; use openrouter when you want to name several distinct models for breadth.",
|
|
9
|
+
"defense": { "provider": "cognitum-low" },
|
|
10
|
+
"prosecutor.devils-advocate": { "provider": "cognitum-mid" },
|
|
11
|
+
"prosecutor.brutal-honesty": { "provider": "claude-code", "model": "sonnet" },
|
|
12
|
+
"prosecutor.sherlock": { "provider": "cognitum-high" },
|
|
13
|
+
"prosecutor.security-scanner": { "provider": "cognitum-mid" },
|
|
14
|
+
"prosecutor.mutation": { "provider": "ollama" },
|
|
15
|
+
"prosecutor.codex-review": { "provider": "codex" },
|
|
16
|
+
"jury": { "provider": "cognitum-high" },
|
|
17
|
+
"deeperReviewer": { "provider": "codex" }
|
|
18
|
+
},
|
|
19
|
+
"options": {
|
|
20
|
+
"blindFiling": true,
|
|
21
|
+
"writerIsNeverJuror": true,
|
|
22
|
+
"minDistinctVendors": 2,
|
|
23
|
+
"requireDoeGatedScore": true,
|
|
24
|
+
"signCourtRecord": true
|
|
25
|
+
},
|
|
26
|
+
"_setupPrompt": "If unsure, keep the default 3-vendor panel (Claude + Cognitum + Codex/GPT). ALWAYS include 'security-scanner' and 'mutation' for security- or test-quality-sensitive deliveries — omitting them is how a false SHIP happens. The jury provider MUST differ in vendor from the writer/defense (writerIsNeverJuror). Set emitScore=true only after the scoring rubric has passed the ADR-122 ANOVA screen."
|
|
27
|
+
}
|