agentic-qe 3.13.12 → 3.14.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/.claude/helpers/brain-checkpoint.cjs +2 -1
- package/.claude/helpers/validate-v3-config.sh +6 -5
- package/.claude/hooks/aqe-hook.cjs +14 -14
- package/.claude/skills/qe-browser/evals/qe-browser.yaml +30 -41
- package/.claude/skills/qe-browser/fixtures/serve-skills.js +37 -0
- package/.claude/skills/qe-browser/scripts/lib/vibium.js +1 -1
- package/.claude/skills/qe-browser/scripts/smoke-test.sh +56 -25
- package/.claude/skills/qe-browser/scripts/visual-diff.js +24 -15
- package/.claude/skills/qe-court/SKILL.md +4 -4
- package/.claude/skills/qe-court/config-schema.json +38 -0
- package/.claude/skills/qe-court/evals/qe-court.yaml +8 -8
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +130 -0
- package/assets/skills/qe-browser/evals/qe-browser.yaml +30 -41
- package/assets/skills/qe-browser/fixtures/serve-skills.js +37 -0
- package/assets/skills/qe-browser/scripts/lib/vibium.js +1 -1
- package/assets/skills/qe-browser/scripts/smoke-test.sh +56 -25
- package/assets/skills/qe-browser/scripts/visual-diff.js +24 -15
- package/assets/skills/qe-court/SKILL.md +4 -4
- package/assets/skills/qe-court/config-schema.json +38 -0
- package/assets/skills/qe-court/evals/qe-court.yaml +8 -8
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/brain-commands.d.ts +1 -0
- package/dist/cli/brain-commands.js +1 -0
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-I2N7PEKG.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-7I7LZFNC.js → agent-booster-wasm-OY5Y2CUM.js} +2 -2
- package/dist/cli/chunks/{agent-handler-QZZT52BH.js → agent-handler-TUOH55LD.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-MLQS5Y26.js → agent-memory-branch-XM3IYKT3.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-U4ALUH6A.js +2 -0
- package/dist/cli/chunks/{arena-WRIY37EJ.js → arena-DOCLIEBL.js} +4 -4
- package/dist/cli/chunks/{arena-IM4CP6LP.js → arena-UMFJZKG7.js} +2 -2
- package/dist/cli/chunks/{audit-BSAQ4EFN.js → audit-KZLU5VLW.js} +3 -3
- package/dist/cli/chunks/base-RCYIBNHM.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-X2XZUXWZ.js → better-sqlite3-MIEZBNUI.js} +2 -2
- package/dist/cli/chunks/brain-handler-6PZN46B7.js +90 -0
- package/dist/cli/chunks/{branch-enumerator-NI4Q7DSJ.js → branch-enumerator-XCETHA4F.js} +2 -2
- package/dist/cli/chunks/{browser-PXBLORUZ.js → browser-UEXISDCJ.js} +2 -2
- package/dist/cli/chunks/browser-workflow-L6TDB5O5.js +2 -0
- package/dist/cli/chunks/{chunk-5PNQNBDZ.js → chunk-3AYNHOWS.js} +1 -1
- package/dist/cli/chunks/{chunk-NL2SCAGJ.js → chunk-3BRR2FLH.js} +3 -3
- package/dist/cli/chunks/chunk-3FFMUB3B.js +14 -0
- package/dist/cli/chunks/{chunk-GJJWXRAD.js → chunk-3JMSXOU4.js} +2 -2
- package/dist/cli/chunks/{chunk-MB2KLJ6Q.js → chunk-3TMUCJNJ.js} +1 -1
- package/dist/cli/chunks/{chunk-JVFZAJ5N.js → chunk-3WSH4HD2.js} +2 -2
- package/dist/cli/chunks/{chunk-SCQNISGS.js → chunk-3XRXUVUI.js} +1 -1
- package/dist/cli/chunks/{chunk-Z56BBX77.js → chunk-45S5553E.js} +2 -2
- package/dist/cli/chunks/{chunk-6BSZHNOC.js → chunk-4MT62HKK.js} +1 -1
- package/dist/cli/chunks/{chunk-PVINNJ4P.js → chunk-4ZLFUO4I.js} +2 -2
- package/dist/cli/chunks/{chunk-MYVKTG55.js → chunk-5F5V4QYU.js} +3 -3
- package/dist/cli/chunks/{chunk-2W3D5A4R.js → chunk-5KP62DC3.js} +2 -2
- package/dist/cli/chunks/{chunk-BODFJ3DC.js → chunk-5NSSJUWW.js} +2 -2
- package/dist/cli/chunks/{chunk-KXSUDN46.js → chunk-5T6PAUZD.js} +1 -1
- package/dist/cli/chunks/{chunk-7ZVO7I4Q.js → chunk-5TYGSQOL.js} +1 -1
- package/dist/cli/chunks/{chunk-M7CPJW53.js → chunk-5Y2QFSVZ.js} +2 -2
- package/dist/cli/chunks/{chunk-VQD2ELNL.js → chunk-6B77GPWL.js} +2 -2
- package/dist/cli/chunks/{chunk-GJUGG6UR.js → chunk-6DDMHZWH.js} +2 -2
- package/dist/cli/chunks/{chunk-IPZEBALY.js → chunk-6HMNN2Y2.js} +54 -54
- package/dist/cli/chunks/{chunk-M73KM3AZ.js → chunk-6YIMLUH6.js} +160 -26
- package/dist/cli/chunks/{chunk-UBOGJHWC.js → chunk-6Z6Y3YBX.js} +1 -1
- package/dist/cli/chunks/{chunk-M3354CE4.js → chunk-75SC3GEX.js} +2 -2
- package/dist/cli/chunks/{chunk-TJVTV3HP.js → chunk-7AF55H2D.js} +2 -2
- package/dist/cli/chunks/{chunk-3XVZHJQT.js → chunk-7AYTM426.js} +1 -1
- package/dist/cli/chunks/{chunk-U5G6OC2C.js → chunk-7GF6IRSU.js} +2 -2
- package/dist/cli/chunks/{chunk-LRO74LPA.js → chunk-7XL2D56F.js} +4 -4
- package/dist/cli/chunks/{chunk-MGKH4LCM.js → chunk-A6RB34Y6.js} +1 -1
- package/dist/cli/chunks/{chunk-X2SZCVDA.js → chunk-AESYVAPH.js} +8 -7
- package/dist/cli/chunks/{chunk-3ASVQILY.js → chunk-AZUC7E5S.js} +2 -2
- package/dist/cli/chunks/{chunk-R7LGVJMZ.js → chunk-B6Y6AF4M.js} +2 -2
- package/dist/cli/chunks/chunk-C3XNFIOM.js +2 -0
- package/dist/cli/chunks/{chunk-ZSAGRDXA.js → chunk-CBWF42ET.js} +2 -2
- package/dist/cli/chunks/{chunk-VNODKACB.js → chunk-CCZZZBAO.js} +2 -2
- package/dist/cli/chunks/{chunk-5E76HULA.js → chunk-CGDW47WP.js} +2 -2
- package/dist/cli/chunks/chunk-CGZ7LTUK.js +2 -0
- package/dist/cli/chunks/{chunk-6KI6LAAZ.js → chunk-D6RCRTTR.js} +2 -2
- package/dist/cli/chunks/{chunk-TB2N3CAK.js → chunk-DFXQLHQM.js} +2 -2
- package/dist/cli/chunks/chunk-DKSLJZVA.js +2 -0
- package/dist/cli/chunks/{chunk-JTYCOFTD.js → chunk-DKUKGBJE.js} +1 -1
- package/dist/cli/chunks/{chunk-AN5CGTTJ.js → chunk-DKXSJDII.js} +2 -2
- package/dist/cli/chunks/chunk-EEJP3WTQ.js +4 -0
- package/dist/cli/chunks/{chunk-ZMYV4R32.js → chunk-EHW62JL2.js} +1 -1
- package/dist/cli/chunks/{chunk-WYFAPA2G.js → chunk-EPBWFTHH.js} +2 -2
- package/dist/cli/chunks/{chunk-P6EFKHNI.js → chunk-ERTGGFXZ.js} +2 -2
- package/dist/cli/chunks/{chunk-G45AOQDZ.js → chunk-F7TRO2OM.js} +1 -1
- package/dist/cli/chunks/{chunk-XT473WPO.js → chunk-FFRKTZYP.js} +2 -2
- package/dist/cli/chunks/{chunk-5VSS2RBD.js → chunk-FH7SCX2I.js} +2 -2
- package/dist/cli/chunks/{chunk-44NPKZGI.js → chunk-FHBGALBG.js} +2 -2
- package/dist/cli/chunks/{chunk-NTALX2YC.js → chunk-FOAFRC2W.js} +2 -2
- package/dist/cli/chunks/{chunk-7LATB5IR.js → chunk-FPBQ7BXU.js} +2 -2
- package/dist/cli/chunks/{chunk-AKUDUB3O.js → chunk-FRRRDCXY.js} +2 -2
- package/dist/cli/chunks/{chunk-NG6A7LCG.js → chunk-FZ47ZCRL.js} +1 -1
- package/dist/cli/chunks/{chunk-VD53LBF7.js → chunk-GH3NJOTC.js} +3 -3
- package/dist/cli/chunks/{chunk-NDRZZSD5.js → chunk-GO66DCIZ.js} +2 -2
- package/dist/cli/chunks/{chunk-Z6DSYLAG.js → chunk-GRVR3Y6I.js} +1 -1
- package/dist/cli/chunks/chunk-GYTWUOKU.js +65 -0
- package/dist/cli/chunks/{chunk-6KKVMPPR.js → chunk-H2DX36SC.js} +2 -2
- package/dist/cli/chunks/{chunk-NJ3QXJ54.js → chunk-H5LSXVWY.js} +2 -2
- package/dist/cli/chunks/{chunk-HQWFZQMJ.js → chunk-HBAQVJDP.js} +2 -2
- package/dist/cli/chunks/{chunk-33YZGOT6.js → chunk-HCCILQGN.js} +2 -2
- package/dist/cli/chunks/{chunk-KRZYWVS3.js → chunk-HJD52N32.js} +2 -2
- package/dist/cli/chunks/{chunk-IPDM3CAK.js → chunk-HKU5PPS7.js} +1 -1
- package/dist/cli/chunks/{chunk-7RVLVIAI.js → chunk-HPQU6XZH.js} +1 -1
- package/dist/cli/chunks/{chunk-TWUWLSGQ.js → chunk-HRUQWABO.js} +10 -10
- package/dist/cli/chunks/{chunk-HAJG44BD.js → chunk-IGRTQ6VT.js} +2 -2
- package/dist/cli/chunks/{chunk-WXU7FAEB.js → chunk-IIBXGHZT.js} +2 -2
- package/dist/cli/chunks/{chunk-QG5L2JM5.js → chunk-IYB3GRXF.js} +10 -10
- package/dist/cli/chunks/{chunk-NNLZAVFH.js → chunk-IYIMLLUV.js} +1 -1
- package/dist/cli/chunks/{chunk-SXFSJJZF.js → chunk-J2VF7ZO7.js} +2 -2
- package/dist/cli/chunks/{chunk-4FVOJBEU.js → chunk-J33LKXVH.js} +1 -1
- package/dist/cli/chunks/{chunk-IOJ34SXJ.js → chunk-J7VAD4RG.js} +2 -2
- package/dist/cli/chunks/{chunk-VQCLSX7T.js → chunk-JJ4GUO4K.js} +1 -1
- package/dist/cli/chunks/{chunk-QM4Z7TQH.js → chunk-JMULRLD4.js} +1 -1
- package/dist/cli/chunks/{chunk-LXVT6JXO.js → chunk-JNSTKE3K.js} +2 -2
- package/dist/cli/chunks/{chunk-SOS37ECY.js → chunk-JZUWPDVS.js} +1 -1
- package/dist/cli/chunks/chunk-KHUO4NCW.js +11 -0
- package/dist/cli/chunks/chunk-KXMW7XTJ.js +2 -0
- package/dist/cli/chunks/{chunk-4AITMWFZ.js → chunk-KXTN3FR4.js} +2 -2
- package/dist/cli/chunks/{chunk-4Z4X2ND4.js → chunk-L4WATX6B.js} +2 -2
- package/dist/cli/chunks/{chunk-GMLRIZ4E.js → chunk-L66BWYQH.js} +1 -1
- package/dist/cli/chunks/{chunk-52VGZJSD.js → chunk-LJ63HPPN.js} +1 -1
- package/dist/cli/chunks/{chunk-WE3VKDMK.js → chunk-LMPK63PO.js} +3 -3
- package/dist/cli/chunks/{chunk-S6WHYOWV.js → chunk-LQDFWLKK.js} +27 -25
- package/dist/cli/chunks/{chunk-EG73WYAW.js → chunk-LSXQPMPI.js} +2 -2
- package/dist/cli/chunks/{chunk-NJ4YVAG7.js → chunk-MDLLEUFN.js} +3 -3
- package/dist/cli/chunks/{chunk-YQOQVSYU.js → chunk-MFAN5W27.js} +1 -1
- package/dist/cli/chunks/{chunk-A5RWLPVT.js → chunk-MZ2PJUN6.js} +2 -2
- package/dist/cli/chunks/{chunk-HRTSYT4N.js → chunk-N22LMACN.js} +2 -2
- package/dist/cli/chunks/{chunk-L3GBNX7B.js → chunk-NAJCQJSK.js} +2 -2
- package/dist/cli/chunks/{chunk-XM5I7J5S.js → chunk-ND6JBUVH.js} +2 -2
- package/dist/cli/chunks/{chunk-YL2GOJF6.js → chunk-NEEZ6M4W.js} +2 -2
- package/dist/cli/chunks/{chunk-DGFINXUE.js → chunk-NNJ63W77.js} +1 -1
- package/dist/cli/chunks/{chunk-G6FJHDUG.js → chunk-O7KF3GBV.js} +1 -1
- package/dist/cli/chunks/{chunk-RP2BRRLX.js → chunk-OBKMLOHU.js} +2 -2
- package/dist/cli/chunks/{chunk-AOOCV56W.js → chunk-OBLHI4HA.js} +1 -1
- package/dist/cli/chunks/{chunk-OZ53BIY5.js → chunk-ODNLKYOM.js} +1 -1
- package/dist/cli/chunks/{chunk-VBHA4SDU.js → chunk-PMREFRPP.js} +2 -2
- package/dist/cli/chunks/{chunk-ASWWBNX2.js → chunk-PMUF7WU6.js} +2 -2
- package/dist/cli/chunks/{chunk-I5SXLV7D.js → chunk-PS5NIMWJ.js} +2 -2
- package/dist/cli/chunks/chunk-PS6Y662P.js +13 -0
- package/dist/cli/chunks/{chunk-N4OQ4D4V.js → chunk-PYAH4K2U.js} +2 -2
- package/dist/cli/chunks/{chunk-H3GAR4SV.js → chunk-PZZX57ZA.js} +2 -2
- package/dist/cli/chunks/chunk-QAE4BOIV.js +2 -0
- package/dist/cli/chunks/{chunk-7A4WTRWI.js → chunk-QIY43XQJ.js} +1 -1
- package/dist/cli/chunks/{chunk-MLXLGBQZ.js → chunk-QM6EJHP5.js} +1 -1
- package/dist/cli/chunks/{chunk-4ANJV6I4.js → chunk-QMTBWHGR.js} +3 -3
- package/dist/cli/chunks/{chunk-IT5QIUUA.js → chunk-RCHDSUVU.js} +2 -2
- package/dist/cli/chunks/{chunk-AYH3DMW2.js → chunk-RUEHSOE6.js} +1 -1
- package/dist/cli/chunks/{chunk-DCVFHVPR.js → chunk-RVCMZUSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-2JAC57JE.js → chunk-RXHI6CKK.js} +1 -1
- package/dist/cli/chunks/{chunk-QXO35J6F.js → chunk-RXPHQ4ZE.js} +2 -2
- package/dist/cli/chunks/{chunk-FI6J3UHJ.js → chunk-RYHCYTFE.js} +1 -1
- package/dist/cli/chunks/{chunk-DFLASG3B.js → chunk-S4WIAKPL.js} +1 -1
- package/dist/cli/chunks/{chunk-2VY7FL6A.js → chunk-S53ZUAVI.js} +2 -2
- package/dist/cli/chunks/{chunk-4M7YZ2X7.js → chunk-SEKOMKNG.js} +1 -1
- package/dist/cli/chunks/{chunk-UC4EIULB.js → chunk-SZRDEPUY.js} +19 -19
- package/dist/cli/chunks/chunk-T7XYQX5G.js +24 -0
- package/dist/cli/chunks/{chunk-OG3DBHIV.js → chunk-TF33GKWA.js} +2 -2
- package/dist/cli/chunks/{chunk-2VTX4SYW.js → chunk-TGFJUL6M.js} +2 -2
- package/dist/cli/chunks/{chunk-4THFPRFM.js → chunk-TLD727EF.js} +2 -2
- package/dist/cli/chunks/{chunk-7PCIN7UN.js → chunk-TQ2JZVZ3.js} +2 -2
- package/dist/cli/chunks/{chunk-UWZYXI3R.js → chunk-TT7DF2GX.js} +2 -2
- package/dist/cli/chunks/{chunk-X3JNFQW2.js → chunk-UCJEAK7D.js} +2 -2
- package/dist/cli/chunks/{chunk-AM42ROKZ.js → chunk-UN7EHLRV.js} +1 -1
- package/dist/cli/chunks/{chunk-42AS3HPO.js → chunk-UUE5CBZQ.js} +2 -2
- package/dist/cli/chunks/{chunk-E67ZXRG6.js → chunk-UWRMPRY5.js} +1 -1
- package/dist/cli/chunks/{chunk-4YFXF5AQ.js → chunk-VEWYUEVY.js} +5 -5
- package/dist/cli/chunks/{chunk-UJUK6T4V.js → chunk-VUXHJPUS.js} +2 -2
- package/dist/cli/chunks/{chunk-VA2ORJB5.js → chunk-VVP2ROXD.js} +2 -2
- package/dist/cli/chunks/{chunk-BZIPYXSW.js → chunk-WFJKLM6Z.js} +3 -3
- package/dist/cli/chunks/{chunk-MLFELTJX.js → chunk-X5G3UDWP.js} +2 -2
- package/dist/cli/chunks/{chunk-IQH2RDN3.js → chunk-Y63V33M6.js} +5 -5
- package/dist/cli/chunks/{chunk-XIKYUBIV.js → chunk-YXN47QOI.js} +2 -2
- package/dist/cli/chunks/{chunk-RP5VFZJO.js → chunk-Z5YU2TDS.js} +2 -2
- package/dist/cli/chunks/{chunk-KYJBJ56M.js → chunk-ZAHCVRR7.js} +2 -2
- package/dist/cli/chunks/{chunk-66OQ7AB3.js → chunk-ZC3HC6FO.js} +1 -1
- package/dist/cli/chunks/{ci-QAUD62WH.js → ci-Q2VX75PS.js} +2 -2
- package/dist/cli/chunks/{ci-output-TZDVTNE7.js → ci-output-MD5GTVR2.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ZWPHJ7YJ.js → circuit-breaker-JMRLG2XI.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-SCB4EURN.js → claude-flow-setup-IMXYALBU.js} +2 -2
- package/dist/cli/chunks/client-L4PIXCGV.js +2 -0
- package/dist/cli/chunks/{cline-installer-EHZLMLXF.js → cline-installer-HWFASEGE.js} +2 -2
- package/dist/cli/chunks/{code-3N6PBJMK.js → code-3V37TCAD.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-6DIKHNRI.js → code-index-extractor-5V54WGFL.js} +2 -2
- package/dist/cli/chunks/codex-installer-UCA5AVE6.js +14 -0
- package/dist/cli/chunks/{completions-5MKWWCCE.js → completions-2DMRCQU6.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-TPM4IPEK.js → complexity-analyzer-MMQRXBTD.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-VXODKGVX.js → continuedev-installer-FAARXP3S.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-PVD5O56P.js → copilot-installer-AKQALMB5.js} +2 -2
- package/dist/cli/chunks/core-handlers-KROSXP4V.js +2 -0
- package/dist/cli/chunks/{cost-tracker-JOMZEQF3.js → cost-tracker-AXWHDND5.js} +2 -2
- package/dist/cli/chunks/{coverage-HTXLEV3B.js → coverage-ZLSKKCG5.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-WMTYBOON.js +2 -0
- package/dist/cli/chunks/{cursor-installer-SHKDTDDZ.js → cursor-installer-UALCQKVD.js} +2 -2
- package/dist/cli/chunks/{daemon-FCFEWVVJ.js → daemon-4LNOPJGN.js} +3 -3
- package/dist/cli/chunks/{daemon-PN4FEPLE.js → daemon-K3DFGCXC.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-PLOHU5SR.js → dag-attention-scheduler-LCQ7MYKC.js} +2 -2
- package/dist/cli/chunks/{detect-F3H4ZEZY.js → detect-P7PEN3MZ.js} +2 -2
- package/dist/cli/chunks/{dist-node-5TC665N6.js → dist-node-I72BJC2D.js} +2 -2
- package/dist/cli/chunks/{domain-handler-ZIWVFXCU.js → domain-handler-LROF6KWN.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-7Q5JYMYR.js → domain-transfer-M2ZSSTPV.js} +2 -2
- package/dist/cli/chunks/dream-AV63YQ2Y.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-MTBPUGO4.js +3 -0
- package/dist/cli/chunks/{eval-E2K2T75A.js → eval-O24ALB3W.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-Z5SE2O53.js → experience-capture-middleware-7JXEOGRE.js} +3 -3
- package/dist/cli/chunks/{fast-paths-3H52RSUK.js → fast-paths-4CFYJV4U.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ONIKUZVK.js → feature-flags-CHPUA7IM.js} +2 -2
- package/dist/cli/chunks/{feature-flags-LUHSMHPS.js → feature-flags-E6PIM6ZB.js} +2 -2
- package/dist/cli/chunks/{file-discovery-FLYSYSS4.js → file-discovery-2ANIAUCP.js} +2 -2
- package/dist/cli/chunks/{fleet-6OJUAAKV.js → fleet-2MQ3OGCP.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-PUL6B7KZ.js → gnn-wrapper-P7JW3622.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-HGHHDUDY.js → heartbeat-handler-WWWZSA7V.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-5IZUGMC2.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-NV2NNBJL.js +2 -0
- package/dist/cli/chunks/hnsw-index-GRJ3KA2O.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-NDZSNMYX.js → hnsw-legacy-bridge-W634ZOTV.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-PISLKSO2.js → hnswlib-node-SLZDLMKM.js} +2 -2
- package/dist/cli/chunks/{hooks-WYG54MRI.js → hooks-3BFAZGG7.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-EDHKHZZ2.js → hypergraph-engine-XJSGXP2J.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-OCHZAPPL.js → hypergraph-handler-RVUWZMOX.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-YM4QUWVH.js +2 -0
- package/dist/cli/chunks/{init-handler-5TCJ672H.js → init-handler-FYOZNNNO.js} +9 -8
- package/dist/cli/chunks/init-wizard-YESXGIK6.js +2 -0
- package/dist/cli/chunks/kernel-VH5SKESU.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-SWUQRCTZ.js → kilocode-installer-MAAKFVSB.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-L22EBAM5.js → kiro-installer-GX3TLZC5.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-F3NL4WJV.js +2 -0
- package/dist/cli/chunks/learning-T4QZ6C26.js +122 -0
- package/dist/cli/chunks/{llm-router-F2L4LFT2.js → llm-router-N2M4WXOC.js} +14 -14
- package/dist/cli/chunks/llm-router-service-HQYCJMPK.js +2 -0
- package/dist/cli/chunks/{load-A4ZF2KHC.js → load-6RU3G4P2.js} +2 -2
- package/dist/cli/chunks/load-test-GWRGKWMN.js +2 -0
- package/dist/cli/chunks/{mcp-T2Z46NNK.js → mcp-EFBO7BAU.js} +2 -2
- package/dist/cli/chunks/{memory-PUC3J6XC.js → memory-AXU2M3DN.js} +5 -5
- package/dist/cli/chunks/memory-backend-7A2PFKPV.js +2 -0
- package/dist/cli/chunks/memory-handlers-65CXN76C.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-U5L4FI4O.js → multi-model-executor-W7AFGVNH.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-UWI6KHYH.js → opencode-installer-KJE2RLCH.js} +2 -2
- package/dist/cli/chunks/{orchestrator-3BEI7R5D.js → orchestrator-CL6MLGVU.js} +22 -24
- package/dist/cli/chunks/pattern-null-store-K2WPRYCP.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-EGWUI5LU.js → pattern-usage-recorder-7SNSJ7K2.js} +2 -2
- package/dist/cli/chunks/{pipeline-JG6M4RHD.js → pipeline-3UU6ON3F.js} +2 -2
- package/dist/cli/chunks/platform-SNMPIDIT.js +2 -0
- package/dist/cli/chunks/{plugin-EEGN3PMK.js → plugin-65IIUUCU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-7KZAINFT.js → prime-radiant-advanced-wasm-WWWJRLRP.js} +2 -2
- package/dist/cli/chunks/protocol-executor-TJDLEHND.js +2 -0
- package/dist/cli/chunks/{protocol-handler-UCEHYK2R.js → protocol-handler-SEBHCLLJ.js} +2 -2
- package/dist/cli/chunks/{prove-JSNG75VD.js → prove-N4X7CCJ4.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-CGRMFPDM.js +2 -0
- package/dist/cli/chunks/{quality-7SRM2HBM.js → quality-LBCJWXMU.js} +2 -2
- package/dist/cli/chunks/quality-gate-KZIQI7QT.js +7 -0
- package/dist/cli/chunks/queen-coordinator-FKP6QZAQ.js +2 -0
- package/dist/cli/chunks/real-embeddings-XCZFHFME.js +2 -0
- package/dist/cli/chunks/{roocode-installer-UYQK64BZ.js → roocode-installer-P3O6B7PT.js} +2 -2
- package/dist/cli/chunks/router-KZ5BISAM.js +2 -0
- package/dist/cli/chunks/routing-feedback-O4Y5TTR6.js +2 -0
- package/dist/cli/chunks/{routing-handler-PY3KPDTH.js → routing-handler-OXZ4DOV4.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-GCAOUTYS.js → ruvector-commands-PSY5IDSL.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-NG3UF3D5.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-PUHVTKQY.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-4SUT7GTJ.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-ODXFKZ6G.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-HNDKOM4L.js → rvf-store-integrity-TCKC22FH.js} +2 -2
- package/dist/cli/chunks/safe-db-BUQDNH2R.js +2 -0
- package/dist/cli/chunks/schedule-ZXNDZNNB.js +2 -0
- package/dist/cli/chunks/scheduler-YUQQWWW3.js +2 -0
- package/dist/cli/chunks/{security-MQ2VB7PY.js → security-RQGUQGSI.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-TAZEU6QK.js → shared-rvf-adapter-ZJFN52C2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-B7N6AOCY.js → shared-rvf-dual-writer-V2R37HWV.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HVSX46C7.js +2 -0
- package/dist/cli/chunks/{status-handler-NZP7DFHE.js → status-handler-XEKWNVDR.js} +2 -2
- package/dist/cli/chunks/{structural-health-ALLUQ4X6.js → structural-health-QMIW6WUN.js} +2 -2
- package/dist/cli/chunks/{sync-WJJG5J6V.js → sync-GDYJ2ULT.js} +2 -2
- package/dist/cli/chunks/{sync-MM7OCUYD.js → sync-H5SXWXPP.js} +2 -2
- package/dist/cli/chunks/{task-handler-CAQUEEB4.js → task-handler-EPLKCQHY.js} +2 -2
- package/dist/cli/chunks/{task-handlers-25BJ7D3W.js → task-handlers-22NTLWTC.js} +3 -3
- package/dist/cli/chunks/{test-HW7GVGVN.js → test-WHJFRZ3F.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-HTMFJMSP.js → test-scheduling-KZVFZOQN.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-BW5WA6PY.js +2 -0
- package/dist/cli/chunks/{token-usage-RJZDMBDP.js → token-usage-4A4O57R6.js} +2 -2
- package/dist/cli/chunks/{transformers-3YFW3EUO.js → transformers-FYTBRV46.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-U3PQPIK7.js → tree-sitter-wasm-parser-TZIJPLF3.js} +2 -2
- package/dist/cli/chunks/{types-7Q762WDO.js → types-B2L6LKFA.js} +2 -2
- package/dist/cli/chunks/unified-memory-AHN4RVBP.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-XB7JPF74.js +2 -0
- package/dist/cli/chunks/unified-persistence-53KWNFQJ.js +2 -0
- package/dist/cli/chunks/{upgrade-F7MKJWBQ.js → upgrade-O6U7EA7V.js} +2 -2
- package/dist/cli/chunks/{validate-B27AVRA6.js → validate-FHNZ5XL3.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-GYZR3GNL.js → validate-swarm-YOLLUEHE.js} +2 -2
- package/dist/cli/chunks/{vibium-W4XQMPJP.js → vibium-UXRPEIXB.js} +2 -2
- package/dist/cli/chunks/visual-security-CRPYS7L7.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-I7CDCFJU.js → web-tree-sitter-JJ5UIYFD.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-UYLHFDHU.js → windsurf-installer-I4QMQPIL.js} +2 -2
- package/dist/cli/chunks/witness-chain-5WCR2CAS.js +2 -0
- package/dist/cli/chunks/{witness-chain-B66SYZKU.js → witness-chain-BIJ7WDGS.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-U4JPAHVW.js → witness-key-manager-3SMMLJLP.js} +2 -2
- package/dist/cli/chunks/{workflow-DYMO47FF.js → workflow-33PUXXJV.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-RZWCLTT5.js +2 -0
- package/dist/cli/chunks/{wrappers-7S6DQTEA.js → wrappers-ASAU36VK.js} +2 -2
- package/dist/cli/commands/learning.js +44 -0
- package/dist/cli/commands/llm-router.js +27 -21
- package/dist/cli/commands/platform.d.ts +1 -0
- package/dist/cli/commands/platform.js +28 -6
- package/dist/cli/commands/quality-gate.js +25 -3
- package/dist/cli/handlers/brain-handler.js +2 -0
- package/dist/cli/handlers/init-handler.d.ts +5 -0
- package/dist/cli/handlers/init-handler.js +6 -0
- package/dist/cli/index.js +4 -1
- package/dist/context/compaction/index.d.ts +1 -0
- package/dist/context/compaction/index.js +3 -0
- package/dist/context/compaction/instruction-provenance.d.ts +20 -0
- package/dist/context/compaction/instruction-provenance.js +18 -0
- package/dist/context/compaction/tier2-session-summary.d.ts +8 -0
- package/dist/context/compaction/tier2-session-summary.js +20 -0
- package/dist/context/compaction/tier3-llm-compact.d.ts +4 -0
- package/dist/context/compaction/tier3-llm-compact.js +32 -4
- package/dist/contracts/verdicts.d.ts +625 -0
- package/dist/contracts/verdicts.js +202 -14
- package/dist/coordination/handlers/coverage-handlers.js +8 -1
- package/dist/domains/chaos-resilience/diagnosis/corpus.d.ts +5 -0
- package/dist/domains/chaos-resilience/diagnosis/corpus.js +141 -0
- package/dist/domains/chaos-resilience/diagnosis/detectors.d.ts +11 -0
- package/dist/domains/chaos-resilience/diagnosis/detectors.js +109 -0
- package/dist/domains/chaos-resilience/diagnosis/index.d.ts +5 -0
- package/dist/domains/chaos-resilience/diagnosis/index.js +5 -0
- package/dist/domains/chaos-resilience/diagnosis/scorer.d.ts +8 -0
- package/dist/domains/chaos-resilience/diagnosis/scorer.js +128 -0
- package/dist/domains/chaos-resilience/diagnosis/types.d.ts +171 -0
- package/dist/domains/chaos-resilience/diagnosis/types.js +3 -0
- package/dist/domains/chaos-resilience/index.d.ts +1 -0
- package/dist/domains/chaos-resilience/index.js +1 -0
- package/dist/domains/index.d.ts +1 -0
- package/dist/domains/index.js +1 -0
- package/dist/early-exit/early-exit-controller.d.ts +4 -2
- package/dist/early-exit/early-exit-controller.js +95 -7
- package/dist/early-exit/index.d.ts +1 -1
- package/dist/early-exit/speculative-executor.js +3 -0
- package/dist/early-exit/types.d.ts +51 -0
- package/dist/early-exit/types.js +3 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +2 -1
- package/dist/init/browser-engine-installer.d.ts +11 -0
- package/dist/init/browser-engine-installer.js +35 -5
- package/dist/init/codex-installer.d.ts +11 -1
- package/dist/init/codex-installer.js +90 -24
- package/dist/init/init-wizard-hooks.js +11 -11
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/07-hooks.d.ts +3 -3
- package/dist/init/phases/07-hooks.js +19 -21
- package/dist/init/phases/09-assets.d.ts +4 -0
- package/dist/init/phases/09-assets.js +13 -10
- package/dist/init/phases/phase-interface.d.ts +2 -0
- package/dist/init/types.d.ts +4 -0
- package/dist/integrations/embeddings/base/EmbeddingGenerator.js +4 -2
- package/dist/integrations/ruvector/brain-exporter.d.ts +1 -1
- package/dist/integrations/ruvector/brain-exporter.js +15 -3
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +4 -0
- package/dist/integrations/ruvector/brain-rvf-exporter.js +118 -37
- package/dist/integrations/ruvector/brain-search.d.ts +1 -1
- package/dist/integrations/ruvector/brain-search.js +1 -1
- package/dist/integrations/ruvector/brain-shared.d.ts +4 -2
- package/dist/integrations/ruvector/brain-shared.js +11 -4
- package/dist/integrations/ruvector/brain-table-ddl.d.ts +2 -2
- package/dist/integrations/ruvector/brain-table-ddl.js +20 -8
- package/dist/integrations/ruvector/cognitive-container.js +1 -1
- package/dist/integrations/ruvector/rvf-dual-writer.d.ts +4 -0
- package/dist/integrations/ruvector/rvf-dual-writer.js +57 -9
- package/dist/integrations/ruvector/rvf-store-integrity.js +1 -1
- package/dist/kernel/unified-memory-schemas.d.ts +4 -3
- package/dist/kernel/unified-memory-schemas.js +19 -9
- package/dist/kernel/unified-memory.d.ts +2 -0
- package/dist/kernel/unified-memory.js +19 -0
- package/dist/learning/embed-and-insert-pattern.js +6 -3
- package/dist/learning/embedding-space.d.ts +50 -0
- package/dist/learning/embedding-space.js +128 -0
- package/dist/learning/evidence-admission-store.d.ts +15 -0
- package/dist/learning/evidence-admission-store.js +68 -0
- package/dist/learning/index.d.ts +7 -0
- package/dist/learning/index.js +4 -0
- package/dist/learning/learning-evidence-admission.d.ts +44 -0
- package/dist/learning/learning-evidence-admission.js +97 -0
- package/dist/learning/pattern-mutation-error.d.ts +9 -0
- package/dist/learning/pattern-mutation-error.js +14 -0
- package/dist/learning/pattern-store.d.ts +5 -0
- package/dist/learning/pattern-store.js +60 -9
- package/dist/learning/qe-flywheel/coupled-anchor.d.ts +8 -0
- package/dist/learning/qe-flywheel/coupled-anchor.js +46 -3
- package/dist/learning/qe-reasoning-bank.js +28 -5
- package/dist/learning/real-embeddings.d.ts +3 -0
- package/dist/learning/real-embeddings.js +40 -3
- package/dist/learning/real-qe-reasoning-bank.js +7 -3
- package/dist/learning/rvf-pattern-migration.d.ts +2 -0
- package/dist/learning/rvf-pattern-migration.js +5 -3
- package/dist/learning/rvf-pattern-store.d.ts +3 -0
- package/dist/learning/rvf-pattern-store.js +44 -6
- package/dist/learning/sqlite-persistence.d.ts +7 -2
- package/dist/learning/sqlite-persistence.js +58 -21
- package/dist/learning/structural-retrieval/corpus.d.ts +5 -0
- package/dist/learning/structural-retrieval/corpus.js +97 -0
- package/dist/learning/structural-retrieval/evaluate.d.ts +7 -0
- package/dist/learning/structural-retrieval/evaluate.js +124 -0
- package/dist/learning/structural-retrieval/index.d.ts +6 -0
- package/dist/learning/structural-retrieval/index.js +4 -0
- package/dist/learning/structural-retrieval/receipt.d.ts +14 -0
- package/dist/learning/structural-retrieval/receipt.js +36 -0
- package/dist/learning/structural-retrieval/types.d.ts +83 -0
- package/dist/learning/structural-retrieval/types.js +2 -0
- package/dist/mcp/bundle.js +589 -433
- package/dist/mcp/handlers/memory-handlers.js +6 -2
- package/dist/mcp/services/session-resume.d.ts +15 -19
- package/dist/mcp/services/session-resume.js +204 -194
- package/dist/mcp/tools/quality-assessment/gate.d.ts +8 -5
- package/dist/mcp/tools/quality-assessment/gate.js +9 -4
- package/dist/migrations/20260830_add_learning_evidence_tables.d.ts +7 -0
- package/dist/migrations/20260830_add_learning_evidence_tables.js +173 -0
- package/dist/persistence/rvf-migration-adapter.d.ts +2 -0
- package/dist/persistence/rvf-migration-adapter.js +56 -12
- package/dist/shared/llm/llm-router-service.d.ts +8 -0
- package/dist/shared/llm/llm-router-service.js +21 -3
- package/dist/shared/sql-safety.js +4 -0
- package/dist/skills/qe-court/cli.d.ts +3 -0
- package/dist/skills/qe-court/cli.js +54 -0
- package/dist/validation/quality-gate-runner.d.ts +27 -4
- package/dist/validation/quality-gate-runner.js +33 -4
- package/dist/validation/verification-reach.d.ts +90 -0
- package/dist/validation/verification-reach.js +187 -0
- package/dist/verification/adversarial-verify/calibrate.d.ts +46 -2
- package/dist/verification/adversarial-verify/calibrate.js +104 -2
- package/dist/verification/adversarial-verify/index.d.ts +2 -2
- package/dist/verification/adversarial-verify/index.js +1 -1
- package/dist/verification/adversarial-verify/measurement-receipt.d.ts +13 -0
- package/dist/verification/adversarial-verify/measurement-receipt.js +136 -0
- package/dist/verification/adversarial-verify/synthesize.js +7 -10
- package/dist/verification/adversarial-verify/types.d.ts +35 -0
- package/dist/verification/adversarial-verify/verify.js +6 -1
- package/package.json +14 -6
- package/schemas/coverage-gap.schema.json +41 -0
- package/schemas/finding-verdict.schema.json +470 -0
- package/schemas/risk-decision.schema.json +41 -0
- package/dist/cli/chunks/adapter-FUV6LBJT.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-QNFNA3J4.js +0 -2
- package/dist/cli/chunks/base-37W2XIXC.js +0 -2
- package/dist/cli/chunks/brain-handler-TVTTWZGP.js +0 -89
- package/dist/cli/chunks/browser-workflow-PDIUEK7B.js +0 -2
- package/dist/cli/chunks/chunk-5PI75QYP.js +0 -4
- package/dist/cli/chunks/chunk-EDRPTLAX.js +0 -2
- package/dist/cli/chunks/chunk-GEQWCK4F.js +0 -2
- package/dist/cli/chunks/chunk-GQLJYTXN.js +0 -2
- package/dist/cli/chunks/chunk-NLZUGANH.js +0 -11
- package/dist/cli/chunks/chunk-O4BWESH5.js +0 -2
- package/dist/cli/chunks/chunk-PGFCKE4G.js +0 -12
- package/dist/cli/chunks/chunk-RACWX2ZX.js +0 -9
- package/dist/cli/chunks/chunk-SNC73DWF.js +0 -2
- package/dist/cli/chunks/chunk-TDVMILKO.js +0 -2
- package/dist/cli/chunks/chunk-TK5XLF3Z.js +0 -65
- package/dist/cli/chunks/chunk-UQ4UCHO7.js +0 -2
- package/dist/cli/chunks/chunk-VZGP77YU.js +0 -12
- package/dist/cli/chunks/chunk-WA6CSEOX.js +0 -2
- package/dist/cli/chunks/chunk-WYIXNHPF.js +0 -2
- package/dist/cli/chunks/client-4W3KWTAU.js +0 -2
- package/dist/cli/chunks/codex-installer-P7DPQMYL.js +0 -15
- package/dist/cli/chunks/core-handlers-BDU2XBLO.js +0 -2
- package/dist/cli/chunks/cross-domain-router-BPB6IHN4.js +0 -2
- package/dist/cli/chunks/dream-WFCZGFDY.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-VESJQSYD.js +0 -3
- package/dist/cli/chunks/heartbeat-scheduler-HWS4SHRM.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-7QOBHKRB.js +0 -2
- package/dist/cli/chunks/hnsw-index-6WUKYJH7.js +0 -2
- package/dist/cli/chunks/hybrid-router-525JTRA5.js +0 -2
- package/dist/cli/chunks/impact-analyzer-GG6CJEOK.js +0 -2
- package/dist/cli/chunks/init-wizard-4VFAOK4Y.js +0 -2
- package/dist/cli/chunks/kernel-N3FQGOST.js +0 -2
- package/dist/cli/chunks/knowledge-graph-I5QIHB4G.js +0 -2
- package/dist/cli/chunks/learning-TQOGG3CR.js +0 -119
- package/dist/cli/chunks/llm-router-service-NCJZYJLG.js +0 -2
- package/dist/cli/chunks/load-test-DCJEYIXD.js +0 -2
- package/dist/cli/chunks/memory-backend-O6KO2KTX.js +0 -2
- package/dist/cli/chunks/memory-handlers-4Z43WEKD.js +0 -2
- package/dist/cli/chunks/pattern-null-store-5WIJKX2K.js +0 -2
- package/dist/cli/chunks/platform-F76G6RUI.js +0 -2
- package/dist/cli/chunks/protocol-executor-5TPNAZTB.js +0 -2
- package/dist/cli/chunks/provider-manager-3VMOZ6HV.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-BATV4NTT.js +0 -2
- package/dist/cli/chunks/quality-gate-A5MPWHST.js +0 -7
- package/dist/cli/chunks/queen-coordinator-EIHGYBUO.js +0 -2
- package/dist/cli/chunks/real-embeddings-ZBF5EQOG.js +0 -2
- package/dist/cli/chunks/router-EMVGY4HU.js +0 -2
- package/dist/cli/chunks/routing-feedback-JUP4OFB2.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-BUNP4SKD.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-VSOAPLMB.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-LSWEHAWX.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-LOC42TQ6.js +0 -2
- package/dist/cli/chunks/safe-db-WQ62IQKV.js +0 -2
- package/dist/cli/chunks/schedule-XJRP57TE.js +0 -2
- package/dist/cli/chunks/scheduler-EZH5SDIM.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-HPEVCTIB.js +0 -2
- package/dist/cli/chunks/token-bootstrap-F2DCLWGW.js +0 -2
- package/dist/cli/chunks/unified-memory-ATILROKR.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-XJXAX7DW.js +0 -2
- package/dist/cli/chunks/unified-persistence-3TN5PBWE.js +0 -2
- package/dist/cli/chunks/visual-security-VFWRBCNA.js +0 -2
- package/dist/cli/chunks/witness-chain-JC5LEXRV.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-TKQUF2KN.js +0 -2
|
@@ -17,6 +17,7 @@ const AQE_DIR = path.join(PROJECT_ROOT, '.agentic-qe');
|
|
|
17
17
|
const RVF_PATH = path.join(AQE_DIR, 'aqe.rvf');
|
|
18
18
|
const DB_PATH = path.join(AQE_DIR, 'memory.db');
|
|
19
19
|
const MAX_AGE_HOURS = 24;
|
|
20
|
+
const AQE_BIN = process.env.AQE_HOOK_BIN || (process.platform === 'win32' ? 'aqe.cmd' : 'aqe');
|
|
20
21
|
|
|
21
22
|
// Mount-local kill switch. `brain export` (below) spawns a native RVF writer
|
|
22
23
|
// that, on a macOS Docker virtiofs bind mount, deadlocks in a futex and IGNORES
|
|
@@ -37,7 +38,7 @@ function exportBrain() {
|
|
|
37
38
|
const idmap = RVF_PATH + '.idmap.json';
|
|
38
39
|
if (fs.existsSync(idmap)) fs.unlinkSync(idmap);
|
|
39
40
|
const result = execFileSync(
|
|
40
|
-
|
|
41
|
+
AQE_BIN, ['brain', 'export', '-o', RVF_PATH, '--format', 'rvf'],
|
|
41
42
|
{ timeout: 60000, encoding: 'utf-8' }
|
|
42
43
|
);
|
|
43
44
|
const m = result.match(/Patterns:\s+(\d+)/);
|
|
@@ -144,12 +144,13 @@ if command -v node >/dev/null 2>&1; then
|
|
|
144
144
|
node_version=$(node --version)
|
|
145
145
|
log_success "Node.js installed: $node_version"
|
|
146
146
|
|
|
147
|
-
# Check if Node.js version is
|
|
147
|
+
# Check if Node.js version is 22.13+
|
|
148
148
|
node_major=$(echo "$node_version" | cut -d'.' -f1 | sed 's/v//')
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
node_minor=$(echo "$node_version" | cut -d'.' -f2)
|
|
150
|
+
if [ "$node_major" -gt 22 ] || { [ "$node_major" -eq 22 ] && [ "$node_minor" -ge 13 ]; }; then
|
|
151
|
+
log_success "Node.js version meets requirements (≥22.13.0)"
|
|
151
152
|
else
|
|
152
|
-
log_error "Node.js version too old. Required: ≥
|
|
153
|
+
log_error "Node.js version too old. Required: ≥22.13.0, Found: $node_version"
|
|
153
154
|
fi
|
|
154
155
|
else
|
|
155
156
|
log_error "Node.js not installed"
|
|
@@ -213,4 +214,4 @@ else
|
|
|
213
214
|
fi
|
|
214
215
|
log_error "Please fix critical errors before proceeding with V3 development."
|
|
215
216
|
exit 1
|
|
216
|
-
fi
|
|
217
|
+
fi
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Resilient AQE hook shim (#510 item 5 — ports ruflo's hook-shim contract).
|
|
4
4
|
*
|
|
5
5
|
* Written in Node (CommonJS) so ONE file is cross-platform — Node is already a
|
|
6
|
-
* hard dependency of AQE (the CLI is Node >=
|
|
6
|
+
* hard dependency of AQE (the CLI is Node >= 22.13), so this runs identically on
|
|
7
7
|
* Windows / macOS / Linux with no POSIX `.sh` + `.cjs` twin. (It replaced an
|
|
8
8
|
* earlier `aqe-hook.sh`, which forced a Windows twin and a `node_modules/.bin`
|
|
9
9
|
* shell-wrapper spawn — see PR #512 discussion.)
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* polluting the transcript, and a crash/slow init can surface a hook error.
|
|
15
15
|
*
|
|
16
16
|
* Contract:
|
|
17
|
-
* * resolve a PROJECT-LOCAL AQE bundle and run it via THIS node (no shell,
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* * resolve a PROJECT-LOCAL AQE bundle and run it via THIS node (no shell),
|
|
18
|
+
* or invoke an already-installed `aqe` binary without package-manager or
|
|
19
|
+
* network resolution;
|
|
20
20
|
* * if nothing resolves, no-op (a hook must never block a turn);
|
|
21
21
|
* * keep stderr OUT of the transcript, but tee fatal native-init markers
|
|
22
22
|
* (e.g. better-sqlite3 `invalid ELF header`) to a throttled, durable
|
|
@@ -49,14 +49,14 @@ const args = process.argv.slice(2); // hook subcommand + its args
|
|
|
49
49
|
// 2. local source build (this repo: ./dist)
|
|
50
50
|
// -> run either directly via process.execPath (this node): no shell, no
|
|
51
51
|
// node_modules/.bin/aqe(.cmd) wrapper, fully cross-platform.
|
|
52
|
-
// 3.
|
|
53
|
-
// bundle)
|
|
54
|
-
//
|
|
55
|
-
// reach). When disabled and no local bundle exists, we no-op.
|
|
52
|
+
// 3. installed `aqe` binary (global/managed installs without a local
|
|
53
|
+
// bundle). AQE_HOOK_BIN is a test/managed-install seam; no package manager
|
|
54
|
+
// is ever invoked from a lifecycle hook.
|
|
56
55
|
const candidates = [
|
|
56
|
+
process.env.AQE_HOOK_BUNDLE,
|
|
57
57
|
path.join(PROJECT, 'node_modules', 'agentic-qe', 'dist', 'cli', 'bundle.js'),
|
|
58
58
|
path.join(PROJECT, 'dist', 'cli', 'bundle.js'),
|
|
59
|
-
];
|
|
59
|
+
].filter(Boolean);
|
|
60
60
|
|
|
61
61
|
let cmd;
|
|
62
62
|
let cmdArgs;
|
|
@@ -67,11 +67,9 @@ for (const p of candidates) {
|
|
|
67
67
|
if (bundle) {
|
|
68
68
|
cmd = process.execPath;
|
|
69
69
|
cmdArgs = [bundle, 'hooks', ...args];
|
|
70
|
-
} else if (process.env.AQE_HOOK_NPX !== '0') {
|
|
71
|
-
cmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
72
|
-
cmdArgs = ['-y', '--prefer-offline', 'agentic-qe', 'hooks', ...args];
|
|
73
70
|
} else {
|
|
74
|
-
process.
|
|
71
|
+
cmd = process.env.AQE_HOOK_BIN || (process.platform === 'win32' ? 'aqe.cmd' : 'aqe');
|
|
72
|
+
cmdArgs = ['hooks', ...args];
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
// Fatal init markers that mean the hook ran but its persistence layer is dead
|
|
@@ -94,7 +92,9 @@ const FATAL_MARKERS = [
|
|
|
94
92
|
// harness timeout vs. this shim's own admitted ~30-60s cold start left
|
|
95
93
|
// routing_outcomes writes silently dropped for a month — nothing recorded
|
|
96
94
|
// the mismatch because nothing was watching for it.)
|
|
97
|
-
const
|
|
95
|
+
const FAST_HOOKS = new Set(['guard', 'pre-command']);
|
|
96
|
+
const SPAWN_TIMEOUT_MS = Number(process.env.AQE_HOOK_TIMEOUT_MS)
|
|
97
|
+
|| (FAST_HOOKS.has(args[0]) ? 2500 : 4500);
|
|
98
98
|
|
|
99
99
|
function recordHookHealth(line) {
|
|
100
100
|
try {
|
|
@@ -52,26 +52,18 @@ setup:
|
|
|
52
52
|
optional_tools:
|
|
53
53
|
- pixelmatch
|
|
54
54
|
- pngjs
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
# (the check-injection severity path) live in scripts/smoke-test.sh, which
|
|
59
|
-
# starts fixtures/serve-skills.js out of band.
|
|
55
|
+
# The CI workflow starts fixtures/serve-skills.js on loopback before this
|
|
56
|
+
# suite runs. Keeping browser targets local removes rate limits and makes
|
|
57
|
+
# every page stable across repeated visual comparisons.
|
|
60
58
|
|
|
61
59
|
fixtures:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
url: "
|
|
68
|
-
description: "
|
|
69
|
-
httpbin_html:
|
|
70
|
-
url: "https://httpbin.org/html"
|
|
71
|
-
description: "Static HTML page with known headings"
|
|
72
|
-
httpbin_status_404:
|
|
73
|
-
url: "https://httpbin.org/status/404"
|
|
74
|
-
description: "Known 404 for testing no_failed_requests"
|
|
60
|
+
local:
|
|
61
|
+
form:
|
|
62
|
+
url: "http://127.0.0.1:8088/fixtures/form.html"
|
|
63
|
+
description: "Deterministic form with an email input and submit button"
|
|
64
|
+
content:
|
|
65
|
+
url: "http://127.0.0.1:8088/fixtures/content.html"
|
|
66
|
+
description: "Deterministic static page with a known heading"
|
|
75
67
|
|
|
76
68
|
test_cases:
|
|
77
69
|
# -------- assert.js --------
|
|
@@ -81,10 +73,10 @@ test_cases:
|
|
|
81
73
|
priority: critical
|
|
82
74
|
input:
|
|
83
75
|
setup:
|
|
84
|
-
- "vibium --headless go
|
|
76
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/form.html"
|
|
85
77
|
command: |
|
|
86
78
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
87
|
-
'[{"kind": "url_contains", "text": "
|
|
79
|
+
'[{"kind": "url_contains", "text": "/fixtures/form.html"}]'
|
|
88
80
|
expected:
|
|
89
81
|
exit_code: 0
|
|
90
82
|
json_fields:
|
|
@@ -98,7 +90,7 @@ test_cases:
|
|
|
98
90
|
priority: critical
|
|
99
91
|
input:
|
|
100
92
|
setup:
|
|
101
|
-
- "vibium --headless go
|
|
93
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
102
94
|
command: |
|
|
103
95
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
104
96
|
'[{"kind": "selector_visible", "selector": "h1"}]'
|
|
@@ -113,7 +105,7 @@ test_cases:
|
|
|
113
105
|
priority: critical
|
|
114
106
|
input:
|
|
115
107
|
setup:
|
|
116
|
-
- "vibium --headless go
|
|
108
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
117
109
|
command: |
|
|
118
110
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
119
111
|
'[{"kind": "url_contains", "text": "this-does-not-exist"}]'
|
|
@@ -132,10 +124,10 @@ test_cases:
|
|
|
132
124
|
command: |
|
|
133
125
|
node .claude/skills/qe-browser/scripts/batch.js --steps \
|
|
134
126
|
'[
|
|
135
|
-
{"action": "go", "url": "
|
|
127
|
+
{"action": "go", "url": "http://127.0.0.1:8088/fixtures/content.html"},
|
|
136
128
|
{"action": "wait_load"},
|
|
137
129
|
{"action": "assert", "checks": [
|
|
138
|
-
{"kind": "url_contains", "text": "/html"},
|
|
130
|
+
{"kind": "url_contains", "text": "/fixtures/content.html"},
|
|
139
131
|
{"kind": "selector_visible", "selector": "h1"}
|
|
140
132
|
]}
|
|
141
133
|
]' --summary-only
|
|
@@ -154,9 +146,11 @@ test_cases:
|
|
|
154
146
|
command: |
|
|
155
147
|
node .claude/skills/qe-browser/scripts/batch.js --steps \
|
|
156
148
|
'[
|
|
157
|
-
{"action": "go", "url": "
|
|
158
|
-
{"action": "
|
|
159
|
-
|
|
149
|
+
{"action": "go", "url": "http://127.0.0.1:8088/fixtures/content.html"},
|
|
150
|
+
{"action": "assert", "checks": [
|
|
151
|
+
{"kind": "url_contains", "text": "/does-not-exist"}
|
|
152
|
+
]},
|
|
153
|
+
{"action": "go", "url": "http://127.0.0.1:8088/fixtures/form.html"}
|
|
160
154
|
]'
|
|
161
155
|
expected:
|
|
162
156
|
exit_code: 1
|
|
@@ -177,7 +171,7 @@ test_cases:
|
|
|
177
171
|
# different dimensions (768×654 vs 765×672 observed), making the
|
|
178
172
|
# pixel-diff in tc007 spuriously fail. Mirrors scripts/smoke-test.sh.
|
|
179
173
|
- "vibium --headless viewport 1280 720"
|
|
180
|
-
- "vibium --headless go
|
|
174
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
181
175
|
- "rm -rf .aqe/visual-baselines/eval_httpbin_html*"
|
|
182
176
|
command: |
|
|
183
177
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
@@ -195,7 +189,7 @@ test_cases:
|
|
|
195
189
|
input:
|
|
196
190
|
setup:
|
|
197
191
|
- "vibium --headless viewport 1280 720"
|
|
198
|
-
- "vibium --headless go
|
|
192
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
199
193
|
command: |
|
|
200
194
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
201
195
|
--name eval_httpbin_html --threshold 0.02
|
|
@@ -212,7 +206,7 @@ test_cases:
|
|
|
212
206
|
priority: critical
|
|
213
207
|
input:
|
|
214
208
|
setup:
|
|
215
|
-
- "vibium --headless go
|
|
209
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
216
210
|
command: |
|
|
217
211
|
node .claude/skills/qe-browser/scripts/check-injection.js --include-hidden
|
|
218
212
|
expected:
|
|
@@ -221,15 +215,11 @@ test_cases:
|
|
|
221
215
|
".status": "success"
|
|
222
216
|
".output.checkInjection.severity": "none"
|
|
223
217
|
|
|
224
|
-
#
|
|
225
|
-
#
|
|
226
|
-
# fixtures/serve-skills.js. That's out of scope for this yaml — we keep
|
|
227
|
-
# CommandEvalRunner dependency-free so it can run anywhere httpbin.org
|
|
228
|
-
# is reachable. Coverage of the high-severity path is currently
|
|
218
|
+
# The "poisoned-page detected with severity>=high" contract is currently
|
|
219
|
+
# asserted outside this command suite. Coverage of the high-severity path is
|
|
229
220
|
# only asserted by unit tests on check-injection.js (see
|
|
230
221
|
# tests/unit/scripts/qe-browser-check-injection.test.ts). Follow-up:
|
|
231
|
-
#
|
|
232
|
-
# tc009 to scripts/smoke-test.sh that starts/stops it out of band.
|
|
222
|
+
# add tc009 against fixtures/injection-poisoned.html.
|
|
233
223
|
|
|
234
224
|
# -------- intent-score.js --------
|
|
235
225
|
- id: tc010_intent_submit_form_on_httpbin
|
|
@@ -238,7 +228,7 @@ test_cases:
|
|
|
238
228
|
priority: critical
|
|
239
229
|
input:
|
|
240
230
|
setup:
|
|
241
|
-
- "vibium --headless go
|
|
231
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/form.html"
|
|
242
232
|
command: |
|
|
243
233
|
node .claude/skills/qe-browser/scripts/intent-score.js \
|
|
244
234
|
--intent submit_form
|
|
@@ -255,7 +245,7 @@ test_cases:
|
|
|
255
245
|
priority: medium
|
|
256
246
|
input:
|
|
257
247
|
setup:
|
|
258
|
-
- "vibium --headless go
|
|
248
|
+
- "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
|
|
259
249
|
command: |
|
|
260
250
|
node .claude/skills/qe-browser/scripts/intent-score.js --intent fill_email
|
|
261
251
|
expected:
|
|
@@ -270,5 +260,4 @@ validation:
|
|
|
270
260
|
notes: |
|
|
271
261
|
Evaluation assumes:
|
|
272
262
|
- `vibium` v26.3.x+ is on PATH (from `aqe init` or `npm install -g vibium`)
|
|
273
|
-
-
|
|
274
|
-
- Local fixtures server running on :8088 (started in setup.local_docs_server)
|
|
263
|
+
- Local fixtures server running on 127.0.0.1:8088
|
|
@@ -74,6 +74,31 @@ const POISONED_HTML = `<!doctype html>
|
|
|
74
74
|
</body>
|
|
75
75
|
</html>`;
|
|
76
76
|
|
|
77
|
+
const CONTENT_HTML = `<!doctype html>
|
|
78
|
+
<html lang="en">
|
|
79
|
+
<head><meta charset="utf-8"><title>QE Browser Content Fixture</title></head>
|
|
80
|
+
<body>
|
|
81
|
+
<main>
|
|
82
|
+
<h1>QE Browser Content Fixture</h1>
|
|
83
|
+
<p>This deterministic page exercises browser assertions and visual comparisons.</p>
|
|
84
|
+
</main>
|
|
85
|
+
</body>
|
|
86
|
+
</html>`;
|
|
87
|
+
|
|
88
|
+
const FORM_HTML = `<!doctype html>
|
|
89
|
+
<html lang="en">
|
|
90
|
+
<head><meta charset="utf-8"><title>QE Browser Form Fixture</title></head>
|
|
91
|
+
<body>
|
|
92
|
+
<main>
|
|
93
|
+
<h1>Contact form</h1>
|
|
94
|
+
<form method="post" action="/fixtures/form.html">
|
|
95
|
+
<label>Email <input id="email" name="email" type="email" autocomplete="email"></label>
|
|
96
|
+
<button type="submit">Submit</button>
|
|
97
|
+
</form>
|
|
98
|
+
</main>
|
|
99
|
+
</body>
|
|
100
|
+
</html>`;
|
|
101
|
+
|
|
77
102
|
function notFound(res, message) {
|
|
78
103
|
res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
79
104
|
res.end(`404 Not Found: ${message}\n`);
|
|
@@ -95,6 +120,18 @@ function serve(req, res) {
|
|
|
95
120
|
return;
|
|
96
121
|
}
|
|
97
122
|
|
|
123
|
+
if (pathname === '/fixtures/content.html') {
|
|
124
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
125
|
+
res.end(CONTENT_HTML);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (pathname === '/fixtures/form.html') {
|
|
130
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
131
|
+
res.end(FORM_HTML);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
98
135
|
// Rewrite /foo/SKILL.md.html → /foo/SKILL.md (or similar) and serve wrapped.
|
|
99
136
|
if (pathname.endsWith('.html')) {
|
|
100
137
|
const mdPath = pathname.replace(/\.html$/, '');
|
|
@@ -292,7 +292,7 @@ function readInlineOrFile(value) {
|
|
|
292
292
|
// "we couldn't run the test because the browser engine isn't installed."
|
|
293
293
|
function emit(env) {
|
|
294
294
|
process.stdout.write(`${JSON.stringify(env, null, 2)}\n`);
|
|
295
|
-
if (env.status === 'success') return 0;
|
|
295
|
+
if (env.status === 'success' || env.status === 'partial') return 0;
|
|
296
296
|
if (env.status === 'skipped') return 2;
|
|
297
297
|
return 1;
|
|
298
298
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# qe-browser smoke test (bash mirror of evals/qe-browser.yaml)
|
|
3
3
|
#
|
|
4
|
-
# Runs each helper script against
|
|
4
|
+
# Runs each helper script against deterministic local fixtures and
|
|
5
5
|
# verifies the output structure. Gates PR-reopen per ADR-091 Phase 3.
|
|
6
6
|
#
|
|
7
7
|
# RELATIONSHIP TO evals/qe-browser.yaml
|
|
@@ -24,16 +24,25 @@
|
|
|
24
24
|
# 2 — vibium binary not on PATH (precondition unmet)
|
|
25
25
|
#
|
|
26
26
|
# Per feedback_no_unverified_failure_modes.md, this is the script we
|
|
27
|
-
# actually run, not just write.
|
|
28
|
-
#
|
|
29
|
-
# stubs, no inline HTML.
|
|
27
|
+
# actually run, not just write. The fixture pages are maintained with the
|
|
28
|
+
# skill and served only on loopback, removing public-service rate limits.
|
|
30
29
|
|
|
31
30
|
set -uo pipefail
|
|
32
31
|
|
|
33
32
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
34
33
|
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
35
34
|
WORK_DIR="$(mktemp -d)"
|
|
36
|
-
|
|
35
|
+
FIXTURE_PORT="${QE_BROWSER_FIXTURE_PORT:-8088}"
|
|
36
|
+
FIXTURE_URL="${QE_BROWSER_FIXTURE_URL:-http://127.0.0.1:${FIXTURE_PORT}}"
|
|
37
|
+
FIXTURE_PID=""
|
|
38
|
+
|
|
39
|
+
cleanup() {
|
|
40
|
+
if [ -n "$FIXTURE_PID" ]; then
|
|
41
|
+
kill "$FIXTURE_PID" >/dev/null 2>&1 || true
|
|
42
|
+
fi
|
|
43
|
+
rm -rf "$WORK_DIR"
|
|
44
|
+
}
|
|
45
|
+
trap cleanup EXIT
|
|
37
46
|
|
|
38
47
|
GREEN='\033[0;32m'
|
|
39
48
|
RED='\033[0;31m'
|
|
@@ -57,6 +66,28 @@ if ! command -v vibium >/dev/null 2>&1; then
|
|
|
57
66
|
exit 2
|
|
58
67
|
fi
|
|
59
68
|
|
|
69
|
+
if ! curl --silent --fail "$FIXTURE_URL/fixtures/content.html" >/dev/null 2>&1; then
|
|
70
|
+
QE_BROWSER_FIXTURE_PORT="$FIXTURE_PORT" \
|
|
71
|
+
node "$SKILL_DIR/fixtures/serve-skills.js" >"$WORK_DIR/fixture-server.log" 2>&1 &
|
|
72
|
+
FIXTURE_PID=$!
|
|
73
|
+
fixture_ready=0
|
|
74
|
+
for _attempt in 1 2 3 4 5; do
|
|
75
|
+
if curl --silent --fail "$FIXTURE_URL/fixtures/content.html" >/dev/null 2>&1; then
|
|
76
|
+
fixture_ready=1
|
|
77
|
+
break
|
|
78
|
+
fi
|
|
79
|
+
sleep 1
|
|
80
|
+
done
|
|
81
|
+
if [ "$fixture_ready" != "1" ]; then
|
|
82
|
+
cat "$WORK_DIR/fixture-server.log" >&2
|
|
83
|
+
echo -e "${RED}qe-browser fixture server did not become ready${NC}" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
CONTENT_URL="$FIXTURE_URL/fixtures/content.html"
|
|
89
|
+
FORM_URL="$FIXTURE_URL/fixtures/form.html"
|
|
90
|
+
|
|
60
91
|
VIBIUM_VERSION=$(vibium --version 2>&1 | head -1)
|
|
61
92
|
echo "Smoke testing against $VIBIUM_VERSION"
|
|
62
93
|
echo "Skill dir: $SKILL_DIR"
|
|
@@ -64,29 +95,29 @@ echo "Work dir: $WORK_DIR"
|
|
|
64
95
|
echo ""
|
|
65
96
|
|
|
66
97
|
# ---------------------------------------------------------------------------
|
|
67
|
-
# tc001 — assert.js url_contains against
|
|
98
|
+
# tc001 — assert.js url_contains against the local form fixture
|
|
68
99
|
# ---------------------------------------------------------------------------
|
|
69
|
-
vibium --headless go
|
|
100
|
+
vibium --headless go "$FORM_URL" >/dev/null 2>&1 || true
|
|
70
101
|
RESULT=$(node "$SKILL_DIR/scripts/assert.js" --checks \
|
|
71
|
-
'[{"kind": "url_contains", "text": "
|
|
102
|
+
'[{"kind": "url_contains", "text": "/fixtures/form.html"}]' 2>&1)
|
|
72
103
|
EXIT=$?
|
|
73
104
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"status": "success"'; then
|
|
74
|
-
ok "tc001 url_contains on
|
|
105
|
+
ok "tc001 url_contains on local form"
|
|
75
106
|
else
|
|
76
|
-
bad "tc001 url_contains on
|
|
107
|
+
bad "tc001 url_contains on local form" "exit=$EXIT, result=$RESULT"
|
|
77
108
|
fi
|
|
78
109
|
|
|
79
110
|
# ---------------------------------------------------------------------------
|
|
80
|
-
# tc002 — assert.js selector_visible against
|
|
111
|
+
# tc002 — assert.js selector_visible against the local content fixture
|
|
81
112
|
# ---------------------------------------------------------------------------
|
|
82
|
-
vibium --headless go
|
|
113
|
+
vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
|
|
83
114
|
RESULT=$(node "$SKILL_DIR/scripts/assert.js" --checks \
|
|
84
115
|
'[{"kind": "selector_visible", "selector": "h1"}]' 2>&1)
|
|
85
116
|
EXIT=$?
|
|
86
117
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"passed": true'; then
|
|
87
|
-
ok "tc002 selector_visible h1 on
|
|
118
|
+
ok "tc002 selector_visible h1 on local content"
|
|
88
119
|
else
|
|
89
|
-
bad "tc002 selector_visible h1 on
|
|
120
|
+
bad "tc002 selector_visible h1 on local content" "exit=$EXIT"
|
|
90
121
|
fi
|
|
91
122
|
|
|
92
123
|
# ---------------------------------------------------------------------------
|
|
@@ -105,7 +136,7 @@ fi
|
|
|
105
136
|
# tc004 — batch.js navigate + wait + assert in one call
|
|
106
137
|
# ---------------------------------------------------------------------------
|
|
107
138
|
RESULT=$(node "$SKILL_DIR/scripts/batch.js" --steps \
|
|
108
|
-
|
|
139
|
+
"[{\"action\":\"go\",\"url\":\"$CONTENT_URL\"},{\"action\":\"wait_load\"},{\"action\":\"assert\",\"checks\":[{\"kind\":\"url_contains\",\"text\":\"/fixtures/content.html\"}]}]" \
|
|
109
140
|
--summary-only 2>&1)
|
|
110
141
|
EXIT=$?
|
|
111
142
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"passedSteps": 3'; then
|
|
@@ -118,7 +149,7 @@ fi
|
|
|
118
149
|
# tc005 — batch.js stops on failure
|
|
119
150
|
# ---------------------------------------------------------------------------
|
|
120
151
|
RESULT=$(node "$SKILL_DIR/scripts/batch.js" --steps \
|
|
121
|
-
|
|
152
|
+
"[{\"action\":\"go\",\"url\":\"$CONTENT_URL\"},{\"action\":\"assert\",\"checks\":[{\"kind\":\"url_contains\",\"text\":\"/does-not-exist\"}]},{\"action\":\"go\",\"url\":\"$FORM_URL\"}]" 2>&1)
|
|
122
153
|
EXIT=$?
|
|
123
154
|
if [ "$EXIT" = "1" ] && echo "$RESULT" | grep -q '"failedStep"'; then
|
|
124
155
|
ok "tc005 batch stops on first failure"
|
|
@@ -131,19 +162,19 @@ fi
|
|
|
131
162
|
#
|
|
132
163
|
# Set explicit viewport BEFORE screenshot so the two visual-diff runs have
|
|
133
164
|
# the same dimensions. Without this the chromium headless window picks
|
|
134
|
-
# whatever size it likes per run, and
|
|
165
|
+
# whatever size it likes per run, and pages may render at different
|
|
135
166
|
# sizes between runs (768×654 vs 765×672 observed), making pixel-diff
|
|
136
167
|
# spuriously fail. This is documented in references/assertion-kinds.md.
|
|
137
168
|
# ---------------------------------------------------------------------------
|
|
138
169
|
rm -rf "$PWD/.aqe/visual-baselines/smoke_test_baseline"*
|
|
139
170
|
vibium --headless viewport 1280 720 >/dev/null 2>&1 || true
|
|
140
|
-
vibium --headless go
|
|
171
|
+
vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
|
|
141
172
|
RESULT=$(node "$SKILL_DIR/scripts/visual-diff.js" --name smoke_test_baseline 2>&1)
|
|
142
173
|
EXIT=$?
|
|
143
174
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"baseline_created"'; then
|
|
144
175
|
ok "tc006 visual-diff baseline created"
|
|
145
176
|
else
|
|
146
|
-
bad "tc006 visual-diff baseline created" "exit=$EXIT"
|
|
177
|
+
bad "tc006 visual-diff baseline created" "exit=$EXIT, result=$RESULT"
|
|
147
178
|
fi
|
|
148
179
|
|
|
149
180
|
# ---------------------------------------------------------------------------
|
|
@@ -157,13 +188,13 @@ EXIT=$?
|
|
|
157
188
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -qE '"(match|baseline_created)"'; then
|
|
158
189
|
ok "tc007 visual-diff second run matches"
|
|
159
190
|
else
|
|
160
|
-
bad "tc007 visual-diff second run matches" "exit=$EXIT"
|
|
191
|
+
bad "tc007 visual-diff second run matches" "exit=$EXIT, result=$RESULT"
|
|
161
192
|
fi
|
|
162
193
|
|
|
163
194
|
# ---------------------------------------------------------------------------
|
|
164
195
|
# tc008 — check-injection.js clean page
|
|
165
196
|
# ---------------------------------------------------------------------------
|
|
166
|
-
vibium --headless go
|
|
197
|
+
vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
|
|
167
198
|
RESULT=$(node "$SKILL_DIR/scripts/check-injection.js" --include-hidden 2>&1)
|
|
168
199
|
EXIT=$?
|
|
169
200
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"severity": "none"'; then
|
|
@@ -173,15 +204,15 @@ else
|
|
|
173
204
|
fi
|
|
174
205
|
|
|
175
206
|
# ---------------------------------------------------------------------------
|
|
176
|
-
# tc010 — intent-score.js submit_form on
|
|
207
|
+
# tc010 — intent-score.js submit_form on the local form fixture
|
|
177
208
|
# ---------------------------------------------------------------------------
|
|
178
|
-
vibium --headless go
|
|
209
|
+
vibium --headless go "$FORM_URL" >/dev/null 2>&1 || true
|
|
179
210
|
RESULT=$(node "$SKILL_DIR/scripts/intent-score.js" --intent submit_form 2>&1)
|
|
180
211
|
EXIT=$?
|
|
181
212
|
if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"intent": "submit_form"'; then
|
|
182
|
-
ok "tc010 intent-score submit_form on
|
|
213
|
+
ok "tc010 intent-score submit_form on local form"
|
|
183
214
|
else
|
|
184
|
-
bad "tc010 intent-score submit_form on
|
|
215
|
+
bad "tc010 intent-score submit_form on local form" "exit=$EXIT"
|
|
185
216
|
fi
|
|
186
217
|
|
|
187
218
|
# ---------------------------------------------------------------------------
|
|
@@ -45,11 +45,10 @@ function ensureDir(dir) {
|
|
|
45
45
|
fs.mkdirSync(dir, { recursive: true });
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
// Vibium screenshot
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
// Vibium's actual output dir and copying to the requested location.
|
|
48
|
+
// Vibium screenshot output changed across the supported 26.x releases.
|
|
49
|
+
// Older releases ignore the directory passed to `-o` and save under
|
|
50
|
+
// `~/Pictures/Vibium`; newer releases may honor the requested path. Accept
|
|
51
|
+
// both behaviors so AQE init's compatible-version range stays usable.
|
|
53
52
|
// 2. `--selector` flag does NOT exist on `vibium screenshot`. Selector-
|
|
54
53
|
// scoped baselines are not supported in v26.3.x. We surface a clear
|
|
55
54
|
// error if a caller passes one. Future Vibium versions may add it.
|
|
@@ -69,21 +68,31 @@ function captureScreenshot(selector, outputPath) {
|
|
|
69
68
|
);
|
|
70
69
|
}
|
|
71
70
|
const basename = path.basename(outputPath);
|
|
72
|
-
const
|
|
71
|
+
const candidates = [
|
|
72
|
+
outputPath,
|
|
73
|
+
path.resolve(process.cwd(), basename),
|
|
74
|
+
path.join(vibiumPicturesDir(), basename),
|
|
75
|
+
];
|
|
76
|
+
for (const candidate of candidates) {
|
|
77
|
+
fs.rmSync(candidate, { force: true });
|
|
78
|
+
}
|
|
79
|
+
const args = ['screenshot', '-o', outputPath, '--full-page'];
|
|
73
80
|
const res = vibium(args);
|
|
74
81
|
if (res.status !== 0) {
|
|
75
82
|
throw new Error(`vibium screenshot failed: ${res.stderr.trim() || res.stdout.trim()}`);
|
|
76
83
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
const screenshotPath = candidates.find((candidate) => fs.existsSync(candidate));
|
|
85
|
+
if (!screenshotPath) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`screenshot output not created at any supported path (${candidates.join(', ')}; ` +
|
|
88
|
+
`vibium said: ${res.stdout.trim()})`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
if (screenshotPath !== outputPath) {
|
|
92
|
+
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
93
|
+
fs.copyFileSync(screenshotPath, outputPath);
|
|
94
|
+
fs.unlinkSync(screenshotPath);
|
|
83
95
|
}
|
|
84
|
-
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
85
|
-
fs.copyFileSync(vibiumPath, outputPath);
|
|
86
|
-
fs.unlinkSync(vibiumPath);
|
|
87
96
|
return outputPath;
|
|
88
97
|
}
|
|
89
98
|
|
|
@@ -161,7 +161,7 @@ is Phase 2). To run a court now:
|
|
|
161
161
|
the panel before seating it** — this step is not optional:
|
|
162
162
|
|
|
163
163
|
```ts
|
|
164
|
-
import { validateCourtConfig } from '
|
|
164
|
+
import { validateCourtConfig } from 'agentic-qe/skills/qe-court/referee';
|
|
165
165
|
const violations = validateCourtConfig(config); // [] == valid
|
|
166
166
|
if (violations.length) throw new Error(`Cannot convene: ${violations.join(', ')}`);
|
|
167
167
|
```
|
|
@@ -188,9 +188,9 @@ Durable, attestable evidence — the "jury waiting for everything you ship."
|
|
|
188
188
|
|
|
189
189
|
## Trust tier
|
|
190
190
|
|
|
191
|
-
**Tier 3 (verified).** The court's falsifiable invariants are enforced
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
**Tier 3 (verified).** The court's falsifiable invariants are enforced by the
|
|
192
|
+
published `agentic-qe/skills/qe-court/referee` entrypoint and covered by a
|
|
193
|
+
consumer-runnable `aqe-court-referee self-test <oracle>` suite that the acceptance eval
|
|
194
194
|
(`evals/qe-court.yaml`, command-eval mode) runs through the `aqe eval` CLI —
|
|
195
195
|
15/15 green as of 2026-07-29. That suite now validates the **shipped `config.json`
|
|
196
196
|
itself**, so a routing edit that seats a colluding panel fails in CI rather than in
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://agentic-qe.dev/schemas/qe-court-config.json",
|
|
4
|
+
"title": "QE-Court configuration",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["prosecutors", "overturnDepth", "routing", "options"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"prosecutors": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
|
|
9
|
+
"overturnDepth": { "type": "integer", "minimum": 0 },
|
|
10
|
+
"emitScore": { "type": "boolean" },
|
|
11
|
+
"routing": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["jury"],
|
|
14
|
+
"additionalProperties": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{ "type": "string" },
|
|
17
|
+
{
|
|
18
|
+
"type": "object",
|
|
19
|
+
"properties": { "provider": { "type": "string", "minLength": 1 }, "model": { "type": "string" } },
|
|
20
|
+
"additionalProperties": false
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"options": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["writerIsNeverJuror", "minDistinctVendors"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"blindFiling": { "type": "boolean" },
|
|
30
|
+
"writerIsNeverJuror": { "const": true },
|
|
31
|
+
"minDistinctVendors": { "type": "integer", "minimum": 2 },
|
|
32
|
+
"requireDoeGatedScore": { "type": "boolean" },
|
|
33
|
+
"signCourtRecord": { "type": "boolean" }
|
|
34
|
+
},
|
|
35
|
+
"additionalProperties": false
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|