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
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
export const MIGRATION_VERSION = '20260830_add_learning_evidence_tables';
|
|
2
|
+
export const LEARNING_EVIDENCE_SCHEMA = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS learning_evidence_manifests (
|
|
4
|
+
id TEXT PRIMARY KEY,
|
|
5
|
+
trajectory_id TEXT,
|
|
6
|
+
trajectory_hash TEXT,
|
|
7
|
+
manifest_hash TEXT NOT NULL UNIQUE,
|
|
8
|
+
task_family TEXT NOT NULL,
|
|
9
|
+
task_identity TEXT,
|
|
10
|
+
run_identity TEXT,
|
|
11
|
+
correlation_group TEXT,
|
|
12
|
+
dedupe_fingerprint TEXT,
|
|
13
|
+
revision TEXT,
|
|
14
|
+
environment TEXT,
|
|
15
|
+
outcome TEXT NOT NULL CHECK (outcome IN ('verified-success','verified-failure','unknown')),
|
|
16
|
+
oracle_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
17
|
+
source_kind TEXT NOT NULL CHECK (source_kind IN ('executed','static','human-reviewed','inferred')),
|
|
18
|
+
process_signals_json TEXT NOT NULL DEFAULT '{}',
|
|
19
|
+
manifest_version INTEGER NOT NULL DEFAULT 1,
|
|
20
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE TABLE IF NOT EXISTS learning_evidence_segments (
|
|
24
|
+
id TEXT NOT NULL,
|
|
25
|
+
manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
|
|
26
|
+
segment_order INTEGER NOT NULL,
|
|
27
|
+
kind TEXT NOT NULL CHECK (kind IN ('observe','decide','act','verify','recover','other')),
|
|
28
|
+
contribution TEXT NOT NULL CHECK (contribution IN ('causal','supporting','irrelevant','harmful','unknown')),
|
|
29
|
+
evidence_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
30
|
+
admit_for_learning INTEGER NOT NULL CHECK (admit_for_learning IN (0,1)),
|
|
31
|
+
reasons_json TEXT NOT NULL DEFAULT '[]',
|
|
32
|
+
content_hash TEXT,
|
|
33
|
+
PRIMARY KEY (manifest_id, id),
|
|
34
|
+
UNIQUE (manifest_id, segment_order)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS learning_segment_edges (
|
|
38
|
+
manifest_id TEXT NOT NULL,
|
|
39
|
+
parent_segment_id TEXT NOT NULL,
|
|
40
|
+
child_segment_id TEXT NOT NULL,
|
|
41
|
+
edge_kind TEXT NOT NULL DEFAULT 'depends-on',
|
|
42
|
+
PRIMARY KEY (manifest_id, parent_segment_id, child_segment_id, edge_kind),
|
|
43
|
+
FOREIGN KEY (manifest_id, parent_segment_id)
|
|
44
|
+
REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,
|
|
45
|
+
FOREIGN KEY (manifest_id, child_segment_id)
|
|
46
|
+
REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT,
|
|
47
|
+
CHECK (parent_segment_id <> child_segment_id)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS learning_evidence_admissions (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
|
|
53
|
+
decision_seq INTEGER NOT NULL CHECK (decision_seq > 0),
|
|
54
|
+
disposition TEXT NOT NULL CHECK (disposition IN ('admitted','rejected','review-required','legacy-unknown')),
|
|
55
|
+
reason_codes_json TEXT NOT NULL DEFAULT '[]',
|
|
56
|
+
assessor_kind TEXT NOT NULL CHECK (assessor_kind IN ('executed','static','human-reviewed','inferred')),
|
|
57
|
+
evidence_class TEXT NOT NULL CHECK (evidence_class IN ('EXECUTED','STATIC','INFERRED','CONJECTURE')),
|
|
58
|
+
policy_version TEXT,
|
|
59
|
+
policy_hash TEXT,
|
|
60
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
61
|
+
UNIQUE (manifest_id, decision_seq)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE TABLE IF NOT EXISTS pattern_manifest_lineage (
|
|
65
|
+
pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,
|
|
66
|
+
manifest_id TEXT NOT NULL REFERENCES learning_evidence_manifests(id) ON DELETE RESTRICT,
|
|
67
|
+
pattern_version_id TEXT,
|
|
68
|
+
use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback','legacy-context')),
|
|
69
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
70
|
+
PRIMARY KEY (pattern_id, manifest_id, use_kind)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE TABLE IF NOT EXISTS pattern_segment_lineage (
|
|
74
|
+
pattern_id TEXT NOT NULL REFERENCES qe_patterns(id) ON DELETE RESTRICT,
|
|
75
|
+
manifest_id TEXT NOT NULL,
|
|
76
|
+
segment_id TEXT NOT NULL,
|
|
77
|
+
pattern_version_id TEXT,
|
|
78
|
+
use_kind TEXT NOT NULL CHECK (use_kind IN ('candidate-source','promotion-support','rejection','rollback')),
|
|
79
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
80
|
+
PRIMARY KEY (pattern_id, manifest_id, segment_id, use_kind),
|
|
81
|
+
FOREIGN KEY (manifest_id, segment_id)
|
|
82
|
+
REFERENCES learning_evidence_segments(manifest_id, id) ON DELETE RESTRICT
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_learning_manifest_trajectory ON learning_evidence_manifests(trajectory_id);
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_learning_manifest_task ON learning_evidence_manifests(task_family);
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_learning_manifest_dedupe ON learning_evidence_manifests(dedupe_fingerprint);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_learning_manifest_correlation ON learning_evidence_manifests(correlation_group);
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_learning_manifest_outcome ON learning_evidence_manifests(outcome, source_kind);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_learning_admission_manifest ON learning_evidence_admissions(manifest_id, decision_seq DESC);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_pattern_manifest_lineage_manifest ON pattern_manifest_lineage(manifest_id);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_pattern_segment_lineage_manifest ON pattern_segment_lineage(manifest_id, segment_id);
|
|
93
|
+
|
|
94
|
+
CREATE TRIGGER IF NOT EXISTS learning_manifests_no_update BEFORE UPDATE ON learning_evidence_manifests
|
|
95
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;
|
|
96
|
+
CREATE TRIGGER IF NOT EXISTS learning_manifests_no_delete BEFORE DELETE ON learning_evidence_manifests
|
|
97
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence manifests are append-only'); END;
|
|
98
|
+
CREATE TRIGGER IF NOT EXISTS learning_segments_no_update BEFORE UPDATE ON learning_evidence_segments
|
|
99
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;
|
|
100
|
+
CREATE TRIGGER IF NOT EXISTS learning_segments_no_delete BEFORE DELETE ON learning_evidence_segments
|
|
101
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence segments are append-only'); END;
|
|
102
|
+
CREATE TRIGGER IF NOT EXISTS learning_edges_no_update BEFORE UPDATE ON learning_segment_edges
|
|
103
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;
|
|
104
|
+
CREATE TRIGGER IF NOT EXISTS learning_edges_no_delete BEFORE DELETE ON learning_segment_edges
|
|
105
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence edges are append-only'); END;
|
|
106
|
+
CREATE TRIGGER IF NOT EXISTS learning_admissions_no_update BEFORE UPDATE ON learning_evidence_admissions
|
|
107
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;
|
|
108
|
+
CREATE TRIGGER IF NOT EXISTS learning_admissions_no_delete BEFORE DELETE ON learning_evidence_admissions
|
|
109
|
+
BEGIN SELECT RAISE(ABORT, 'learning evidence admissions are append-only'); END;
|
|
110
|
+
`;
|
|
111
|
+
export function applyMigration(db) {
|
|
112
|
+
db.exec(LEARNING_EVIDENCE_SCHEMA);
|
|
113
|
+
db.exec(`
|
|
114
|
+
INSERT OR IGNORE INTO learning_evidence_manifests (
|
|
115
|
+
id, trajectory_id, trajectory_hash, manifest_hash, task_family,
|
|
116
|
+
outcome, oracle_refs_json, source_kind, process_signals_json
|
|
117
|
+
)
|
|
118
|
+
SELECT
|
|
119
|
+
'legacy-pattern:' || id, NULL, NULL, 'legacy-pattern:' || id,
|
|
120
|
+
COALESCE(NULLIF(qe_domain, ''), NULLIF(domain, ''), 'unknown'),
|
|
121
|
+
'unknown', '[]', 'inferred', '{"legacy":true,"unassessed":true}'
|
|
122
|
+
FROM qe_patterns;
|
|
123
|
+
|
|
124
|
+
INSERT OR IGNORE INTO learning_evidence_admissions (
|
|
125
|
+
id, manifest_id, decision_seq, disposition, reason_codes_json,
|
|
126
|
+
assessor_kind, evidence_class
|
|
127
|
+
)
|
|
128
|
+
SELECT
|
|
129
|
+
'legacy-admission:' || id, 'legacy-pattern:' || id, 1, 'legacy-unknown',
|
|
130
|
+
'["legacy-pattern-without-qualified-trajectory"]', 'inferred', 'INFERRED'
|
|
131
|
+
FROM qe_patterns;
|
|
132
|
+
|
|
133
|
+
INSERT OR IGNORE INTO pattern_manifest_lineage (
|
|
134
|
+
pattern_id, manifest_id, use_kind
|
|
135
|
+
)
|
|
136
|
+
SELECT id, 'legacy-pattern:' || id, 'legacy-context' FROM qe_patterns;
|
|
137
|
+
`);
|
|
138
|
+
}
|
|
139
|
+
export function isMigrationApplied(db) {
|
|
140
|
+
const required = [
|
|
141
|
+
'learning_evidence_manifests', 'learning_evidence_segments',
|
|
142
|
+
'learning_segment_edges', 'learning_evidence_admissions',
|
|
143
|
+
'pattern_manifest_lineage', 'pattern_segment_lineage',
|
|
144
|
+
];
|
|
145
|
+
const rows = db.prepare(`
|
|
146
|
+
SELECT name FROM sqlite_master WHERE type = 'table' AND name IN (${required.map(() => '?').join(',')})
|
|
147
|
+
`).all(...required);
|
|
148
|
+
return rows.length === required.length;
|
|
149
|
+
}
|
|
150
|
+
export function rollbackMigration(db) {
|
|
151
|
+
const tables = [
|
|
152
|
+
'learning_evidence_manifests', 'learning_evidence_segments',
|
|
153
|
+
'learning_segment_edges', 'learning_evidence_admissions',
|
|
154
|
+
'pattern_manifest_lineage', 'pattern_segment_lineage',
|
|
155
|
+
];
|
|
156
|
+
for (const table of tables) {
|
|
157
|
+
const exists = db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?").get(table);
|
|
158
|
+
if (!exists)
|
|
159
|
+
continue;
|
|
160
|
+
const count = db.prepare(`SELECT COUNT(*) AS count FROM ${table}`).get().count;
|
|
161
|
+
if (count > 0)
|
|
162
|
+
throw new Error(`REFUSING rollback: ${table} contains ${count} learning evidence row(s)`);
|
|
163
|
+
}
|
|
164
|
+
db.exec(`
|
|
165
|
+
DROP TABLE IF EXISTS pattern_segment_lineage;
|
|
166
|
+
DROP TABLE IF EXISTS pattern_manifest_lineage;
|
|
167
|
+
DROP TABLE IF EXISTS learning_evidence_admissions;
|
|
168
|
+
DROP TABLE IF EXISTS learning_segment_edges;
|
|
169
|
+
DROP TABLE IF EXISTS learning_evidence_segments;
|
|
170
|
+
DROP TABLE IF EXISTS learning_evidence_manifests;
|
|
171
|
+
`);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=20260830_add_learning_evidence_tables.js.map
|
|
@@ -26,6 +26,8 @@ export interface MigrationAdapterConfig {
|
|
|
26
26
|
dimensions: number;
|
|
27
27
|
/** Enable fallback on RVF read failure in stage 3+ */
|
|
28
28
|
enableFallback: boolean;
|
|
29
|
+
/** Runtime provenance for injected embedding pipelines. */
|
|
30
|
+
embeddingSpaceId?: string;
|
|
29
31
|
}
|
|
30
32
|
export interface WriteResult {
|
|
31
33
|
sqliteSuccess: boolean;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module persistence/rvf-migration-adapter
|
|
16
16
|
*/
|
|
17
|
+
import { getActiveEmbeddingSpaceIdentity } from '../learning/real-embeddings.js';
|
|
17
18
|
export const STAGE_NAMES = {
|
|
18
19
|
0: 'sqlite-only',
|
|
19
20
|
1: 'hybrid',
|
|
@@ -80,6 +81,12 @@ export class RvfMigrationAdapter {
|
|
|
80
81
|
stage: this.config.stage,
|
|
81
82
|
fallbackUsed: false,
|
|
82
83
|
};
|
|
84
|
+
const hasSpaceContract = this.db
|
|
85
|
+
? this.db.prepare("PRAGMA table_info('qe_pattern_embeddings')").all().some((row) => row.name === 'space_id')
|
|
86
|
+
: false;
|
|
87
|
+
const spaceId = getActiveEmbeddingSpaceIdentity()?.spaceId ?? this.config.embeddingSpaceId;
|
|
88
|
+
if (!hasSpaceContract || !spaceId)
|
|
89
|
+
return result;
|
|
83
90
|
const shouldWriteSqlite = this.config.stage < 4;
|
|
84
91
|
const shouldWriteRvf = this.config.stage >= 2;
|
|
85
92
|
// Write to SQLite
|
|
@@ -87,12 +94,23 @@ export class RvfMigrationAdapter {
|
|
|
87
94
|
const start = performance.now();
|
|
88
95
|
try {
|
|
89
96
|
const blob = Buffer.from(vector instanceof Float32Array ? vector.buffer : new Float32Array(vector).buffer);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
if (hasSpaceContract) {
|
|
98
|
+
this.db.prepare(`
|
|
99
|
+
INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, space_id, created_at)
|
|
100
|
+
VALUES (?, ?, ?, 'all-MiniLM-L6-v2', ?, datetime('now'))
|
|
101
|
+
ON CONFLICT(pattern_id) DO UPDATE SET
|
|
102
|
+
embedding = excluded.embedding, dimension = excluded.dimension,
|
|
103
|
+
space_id = excluded.space_id, created_at = datetime('now')
|
|
104
|
+
`).run(id, blob, vector.length, spaceId);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.db.prepare(`
|
|
108
|
+
INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
|
|
109
|
+
VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
|
|
110
|
+
ON CONFLICT(pattern_id) DO UPDATE SET
|
|
111
|
+
embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
|
|
112
|
+
`).run(id, blob, vector.length);
|
|
113
|
+
}
|
|
96
114
|
result.sqliteSuccess = true;
|
|
97
115
|
this.sqliteWriteLatencies.push(performance.now() - start);
|
|
98
116
|
}
|
|
@@ -120,12 +138,23 @@ export class RvfMigrationAdapter {
|
|
|
120
138
|
if (this.config.stage === 4 && !result.rvfSuccess && this.config.enableFallback && this.db) {
|
|
121
139
|
try {
|
|
122
140
|
const blob = Buffer.from(vector instanceof Float32Array ? vector.buffer : new Float32Array(vector).buffer);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
141
|
+
if (hasSpaceContract) {
|
|
142
|
+
this.db.prepare(`
|
|
143
|
+
INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, space_id, created_at)
|
|
144
|
+
VALUES (?, ?, ?, 'all-MiniLM-L6-v2', ?, datetime('now'))
|
|
145
|
+
ON CONFLICT(pattern_id) DO UPDATE SET
|
|
146
|
+
embedding = excluded.embedding, dimension = excluded.dimension,
|
|
147
|
+
space_id = excluded.space_id, created_at = datetime('now')
|
|
148
|
+
`).run(id, blob, vector.length, spaceId);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.db.prepare(`
|
|
152
|
+
INSERT INTO qe_pattern_embeddings (pattern_id, embedding, dimension, model, created_at)
|
|
153
|
+
VALUES (?, ?, ?, 'all-MiniLM-L6-v2', datetime('now'))
|
|
154
|
+
ON CONFLICT(pattern_id) DO UPDATE SET
|
|
155
|
+
embedding = excluded.embedding, dimension = excluded.dimension, created_at = datetime('now')
|
|
156
|
+
`).run(id, blob, vector.length);
|
|
157
|
+
}
|
|
129
158
|
result.sqliteSuccess = true;
|
|
130
159
|
result.fallbackUsed = true;
|
|
131
160
|
this.fallbacksUsed++;
|
|
@@ -177,6 +206,21 @@ export class RvfMigrationAdapter {
|
|
|
177
206
|
search(query, k) {
|
|
178
207
|
this.totalReads++;
|
|
179
208
|
const useRvf = this.config.stage >= 3;
|
|
209
|
+
if (this.db) {
|
|
210
|
+
const hasSpaceContract = this.db.prepare("PRAGMA table_info('qe_pattern_embeddings')").all().some((row) => row.name === 'space_id');
|
|
211
|
+
if (!hasSpaceContract) {
|
|
212
|
+
return { data: null, source: useRvf ? 'rvf' : 'sqlite', latencyMs: 0, stage: this.config.stage };
|
|
213
|
+
}
|
|
214
|
+
{
|
|
215
|
+
const spaceId = getActiveEmbeddingSpaceIdentity()?.spaceId ?? this.config.embeddingSpaceId;
|
|
216
|
+
const incompatible = spaceId
|
|
217
|
+
? this.db.prepare('SELECT COUNT(*) AS count FROM qe_pattern_embeddings WHERE space_id IS NULL OR space_id <> ?').get(spaceId).count
|
|
218
|
+
: 1;
|
|
219
|
+
if (incompatible > 0) {
|
|
220
|
+
return { data: null, source: useRvf ? 'rvf' : 'sqlite', latencyMs: 0, stage: this.config.stage };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
180
224
|
if (useRvf && this.rvfStore) {
|
|
181
225
|
const start = performance.now();
|
|
182
226
|
try {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import { ProviderManager } from './provider-manager.js';
|
|
23
23
|
import { HybridRouter } from './router/hybrid-router.js';
|
|
24
24
|
import type { RouterConfig, ExtendedProviderType } from './router/types.js';
|
|
25
|
+
import type { ProviderManagerConfig } from './interfaces.js';
|
|
25
26
|
/**
|
|
26
27
|
* Options accepted by createLLMRouterService(). All optional — defaults
|
|
27
28
|
* produce a router suitable for kernel boot when at least one provider
|
|
@@ -39,6 +40,8 @@ export interface LLMRouterServiceOptions {
|
|
|
39
40
|
* When supplied, config loading and provider construction is skipped.
|
|
40
41
|
*/
|
|
41
42
|
providerManager?: ProviderManager;
|
|
43
|
+
/** Ignore project-controlled network endpoints before attaching ambient credentials. */
|
|
44
|
+
allowProjectProviderEndpoints?: boolean;
|
|
42
45
|
}
|
|
43
46
|
/**
|
|
44
47
|
* Result of building a router. Carries the router plus the resolved
|
|
@@ -74,4 +77,9 @@ export declare function pickPrimaryAndFallbacks(config: RouterConfig, enabled: E
|
|
|
74
77
|
primary: ExtendedProviderType;
|
|
75
78
|
fallbacks: ExtendedProviderType[];
|
|
76
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Extract only the provider configs for the enabled set, so
|
|
82
|
+
* ProviderManager doesn't try to construct providers we don't need.
|
|
83
|
+
*/
|
|
84
|
+
export declare function extractProviderConfigs(config: RouterConfig, enabled: ExtendedProviderType[], allowProjectProviderEndpoints?: boolean): ProviderManagerConfig['providers'];
|
|
77
85
|
//# sourceMappingURL=llm-router-service.d.ts.map
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { ProviderManager } from './provider-manager.js';
|
|
23
23
|
import { HybridRouter } from './router/hybrid-router.js';
|
|
24
|
+
import { ALL_PROVIDER_TYPES } from './router/types.js';
|
|
24
25
|
import { loadRouterConfig, shouldEnableRouter, detectAvailableProvidersFromEnv, } from './router/config-store.js';
|
|
25
26
|
import { setAgentProviderOverrides, createOverrideRoutingRules, } from './router/agent-router-config.js';
|
|
26
27
|
import { DEFAULT_QE_ROUTING_RULES } from './router/routing-rules.js';
|
|
@@ -131,7 +132,7 @@ export async function createLLMRouterService(options = {}) {
|
|
|
131
132
|
const providerManagerConfig = {
|
|
132
133
|
primary: primary,
|
|
133
134
|
fallbacks: fallbacks,
|
|
134
|
-
providers: extractProviderConfigs(config, enabled),
|
|
135
|
+
providers: extractProviderConfigs(config, enabled, options.allowProjectProviderEndpoints ?? true),
|
|
135
136
|
loadBalancing: 'round-robin',
|
|
136
137
|
global: { enableCostTracking: true, enableMetrics: true },
|
|
137
138
|
};
|
|
@@ -175,6 +176,14 @@ export function pickEnabledProviders(config, env = process.env) {
|
|
|
175
176
|
for (const p of FALLBACK_PRIORITY) {
|
|
176
177
|
consider(p);
|
|
177
178
|
}
|
|
179
|
+
// Finally, every AQE-shipped provider. The fixed priority list is an ordering
|
|
180
|
+
// policy, not an allowlist: treating it as one made enabled subscription
|
|
181
|
+
// hosts (`codex`, `claude-code`) unreachable unless repeated in fallbackChain.
|
|
182
|
+
// Do not implicitly activate project-declared external commands here: a
|
|
183
|
+
// checkout must not gain code execution merely through `enabled: true`.
|
|
184
|
+
for (const p of ALL_PROVIDER_TYPES) {
|
|
185
|
+
consider(p);
|
|
186
|
+
}
|
|
178
187
|
return result;
|
|
179
188
|
}
|
|
180
189
|
/**
|
|
@@ -208,12 +217,21 @@ export function pickPrimaryAndFallbacks(config, enabled) {
|
|
|
208
217
|
* Extract only the provider configs for the enabled set, so
|
|
209
218
|
* ProviderManager doesn't try to construct providers we don't need.
|
|
210
219
|
*/
|
|
211
|
-
function extractProviderConfigs(config, enabled) {
|
|
220
|
+
export function extractProviderConfigs(config, enabled, allowProjectProviderEndpoints = true) {
|
|
212
221
|
const out = {};
|
|
213
222
|
for (const p of enabled) {
|
|
214
223
|
const cfg = config.providers?.[p];
|
|
215
224
|
if (cfg) {
|
|
216
|
-
|
|
225
|
+
// The kernel reads project-local config. Never let a checkout replace a
|
|
226
|
+
// trusted subscription CLI with an arbitrary executable. Callers that
|
|
227
|
+
// intentionally need a custom binary can still construct ProviderManager
|
|
228
|
+
// directly with an explicit config.
|
|
229
|
+
const sanitized = { ...cfg };
|
|
230
|
+
if (p === 'codex' || p === 'claude-code')
|
|
231
|
+
delete sanitized.binaryPath;
|
|
232
|
+
if (!allowProjectProviderEndpoints)
|
|
233
|
+
delete sanitized.baseUrl;
|
|
234
|
+
out[p] = sanitized;
|
|
217
235
|
}
|
|
218
236
|
}
|
|
219
237
|
return out;
|
|
@@ -45,6 +45,10 @@ export const ALLOWED_TABLE_NAMES = new Set([
|
|
|
45
45
|
// Learning/metrics tables
|
|
46
46
|
'learning_daily_snapshots', 'metrics_outcomes',
|
|
47
47
|
'experience_consolidation_log', 'qe_pattern_reuse',
|
|
48
|
+
// Qualified learning-evidence and lineage tables
|
|
49
|
+
'learning_evidence_manifests', 'learning_evidence_segments',
|
|
50
|
+
'learning_segment_edges', 'learning_evidence_admissions',
|
|
51
|
+
'pattern_manifest_lineage', 'pattern_segment_lineage',
|
|
48
52
|
// Co-execution tables
|
|
49
53
|
'qe_agent_co_execution',
|
|
50
54
|
]);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync, realpathSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { resolveVerdict, shouldEmitScore, validateCourtConfig, validatePanel, } from './referee.js';
|
|
5
|
+
const MUTANT = {
|
|
6
|
+
id: 'boundary-off-by-one', fatal: true, reproduced: true, depthFound: 1,
|
|
7
|
+
};
|
|
8
|
+
export function runRefereeCli(argv) {
|
|
9
|
+
const [command, value] = argv;
|
|
10
|
+
if (command === 'validate-config' && value) {
|
|
11
|
+
const config = JSON.parse(readFileSync(value, 'utf8'));
|
|
12
|
+
const violations = validateCourtConfig(config);
|
|
13
|
+
process.stdout.write(JSON.stringify({ valid: violations.length === 0, violations }) + '\n');
|
|
14
|
+
return violations.length === 0 ? 0 : 2;
|
|
15
|
+
}
|
|
16
|
+
if (command === 'self-test' && value) {
|
|
17
|
+
const passed = runOracle(value);
|
|
18
|
+
process.stdout.write(JSON.stringify({ oracle: value, passed }) + '\n');
|
|
19
|
+
return passed ? 0 : 3;
|
|
20
|
+
}
|
|
21
|
+
process.stderr.write('Usage: aqe-court-referee validate-config <config.json> | self-test <oracle>\n');
|
|
22
|
+
return 64;
|
|
23
|
+
}
|
|
24
|
+
function runOracle(name) {
|
|
25
|
+
switch (name) {
|
|
26
|
+
case 'overturn-catches-mutant':
|
|
27
|
+
return resolveVerdict([MUTANT], 2) === 'BLOCK';
|
|
28
|
+
case 'overturn-disabled':
|
|
29
|
+
return resolveVerdict([MUTANT], 0) === 'SHIP';
|
|
30
|
+
case 'writer-not-juror':
|
|
31
|
+
return validatePanel([
|
|
32
|
+
{ role: 'writer', provider: 'codex' },
|
|
33
|
+
{ role: 'jury', provider: 'codex' },
|
|
34
|
+
{ role: 'prosecutor', provider: 'claude-code' },
|
|
35
|
+
]).includes('writerIsNeverJuror');
|
|
36
|
+
case 'vendor-diversity':
|
|
37
|
+
return validatePanel([
|
|
38
|
+
{ role: 'writer', provider: 'cognitum-low' },
|
|
39
|
+
{ role: 'jury', provider: 'cognitum-high' },
|
|
40
|
+
]).includes('vendor-diversity');
|
|
41
|
+
case 'doe-score-gate':
|
|
42
|
+
return !shouldEmitScore(false, true) && shouldEmitScore(true, true);
|
|
43
|
+
case 'verdict-classes':
|
|
44
|
+
return resolveVerdict([{ ...MUTANT, depthFound: 0 }], 2) === 'BLOCK'
|
|
45
|
+
&& resolveVerdict([{ ...MUTANT, fatal: false, depthFound: 0 }], 2) === 'REMAND'
|
|
46
|
+
&& resolveVerdict([], 2) === 'SHIP';
|
|
47
|
+
default:
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (process.argv[1] && realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
52
|
+
process.exitCode = runRefereeCli(process.argv.slice(2));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -8,14 +8,17 @@
|
|
|
8
8
|
* 1. loads the pinned, hash-checked ADR-117 anchor via `loadAnchorSet` (which
|
|
9
9
|
* throws on drift — the frozen checklist can't be silently edited),
|
|
10
10
|
* 2. selects the constant-denominator checklist for `checklistId`,
|
|
11
|
-
* 3.
|
|
12
|
-
*
|
|
11
|
+
* 3. evaluates the revision-bound failure-mode reach manifest before any
|
|
12
|
+
* judge call (missing legacy manifests remain explicitly inconclusive),
|
|
13
|
+
* 4. runs the two-gate, three-valued `computeQualityVerdict` with the injected
|
|
14
|
+
* frontier judge and combines the independent verdicts fail-closed.
|
|
13
15
|
*
|
|
14
16
|
* The oracle result and the judge are injected — this module owns no LLM and no
|
|
15
17
|
* mutation runner, so it is deterministic and unit-testable with a fake judge.
|
|
16
18
|
*/
|
|
17
19
|
import { type Judge, type QualityVerdictResult, type RequirementChecklist } from './quality-verdict.js';
|
|
18
20
|
import type { OracleResult } from './oracle-eval.js';
|
|
21
|
+
import { type VerificationCoverageVerdict, type VerificationReachManifest, type VerificationReachResult } from './verification-reach.js';
|
|
19
22
|
/** Default frozen anchor location, relative to the project root (ADR-117). */
|
|
20
23
|
export declare const DEFAULT_ANCHOR_RELATIVE_PATH = "verification/anchors/qe-anchor-v1.json";
|
|
21
24
|
export interface QualityGateRequest {
|
|
@@ -32,13 +35,33 @@ export interface QualityGateRequest {
|
|
|
32
35
|
judge: Judge;
|
|
33
36
|
/** Override the frozen anchor path (absolute, or relative to project root). */
|
|
34
37
|
anchorPath?: string;
|
|
38
|
+
/** Revision-bound failure-mode reach evidence. Omit only for legacy migration. */
|
|
39
|
+
verificationManifest?: VerificationReachManifest;
|
|
40
|
+
}
|
|
41
|
+
export interface LegacyUnknownVerificationCoverage {
|
|
42
|
+
kind: 'legacy-unknown';
|
|
43
|
+
coverageVerdict: 'inconclusive';
|
|
44
|
+
reason: string;
|
|
45
|
+
}
|
|
46
|
+
export interface VerifiedVerificationCoverage extends VerificationReachResult {
|
|
47
|
+
kind: 'verified';
|
|
48
|
+
}
|
|
49
|
+
export type QualityGateVerificationCoverage = LegacyUnknownVerificationCoverage | VerifiedVerificationCoverage;
|
|
50
|
+
export interface ReachAwareQualityGateResult extends QualityVerdictResult {
|
|
51
|
+
/** Threshold/oracle/judge verdict before verification-reach preflight. */
|
|
52
|
+
qualityVerdict: QualityVerdictResult['verdict'];
|
|
53
|
+
/** Independent verdict for required failure-mode observation coverage. */
|
|
54
|
+
coverageVerdict: VerificationCoverageVerdict;
|
|
55
|
+
/** Overall fail-closed verdict. A pass requires both independent gates to pass. */
|
|
56
|
+
verdict: QualityVerdictResult['verdict'];
|
|
57
|
+
verification: QualityGateVerificationCoverage;
|
|
35
58
|
}
|
|
36
59
|
/**
|
|
37
60
|
* Run the two-gate quality gate for one artifact against one pinned checklist.
|
|
38
61
|
* Throws only for caller error (unknown checklist id, unloadable/drifted anchor);
|
|
39
|
-
* every judgement outcome is returned as a three-valued
|
|
62
|
+
* every judgement outcome is returned as a three-valued reach-aware result.
|
|
40
63
|
*/
|
|
41
|
-
export declare function runQualityGate(req: QualityGateRequest): Promise<
|
|
64
|
+
export declare function runQualityGate(req: QualityGateRequest): Promise<ReachAwareQualityGateResult>;
|
|
42
65
|
/**
|
|
43
66
|
* Load the pinned checklist for `checklistId` from the frozen anchor. Exposed so
|
|
44
67
|
* callers (CLI/MCP) can list valid ids or pre-validate before building a judge.
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
* 1. loads the pinned, hash-checked ADR-117 anchor via `loadAnchorSet` (which
|
|
9
9
|
* throws on drift — the frozen checklist can't be silently edited),
|
|
10
10
|
* 2. selects the constant-denominator checklist for `checklistId`,
|
|
11
|
-
* 3.
|
|
12
|
-
*
|
|
11
|
+
* 3. evaluates the revision-bound failure-mode reach manifest before any
|
|
12
|
+
* judge call (missing legacy manifests remain explicitly inconclusive),
|
|
13
|
+
* 4. runs the two-gate, three-valued `computeQualityVerdict` with the injected
|
|
14
|
+
* frontier judge and combines the independent verdicts fail-closed.
|
|
13
15
|
*
|
|
14
16
|
* The oracle result and the judge are injected — this module owns no LLM and no
|
|
15
17
|
* mutation runner, so it is deterministic and unit-testable with a fake judge.
|
|
@@ -18,21 +20,48 @@ import path from 'node:path';
|
|
|
18
20
|
import { loadAnchorSet } from './anchor-set.js';
|
|
19
21
|
import { computeQualityVerdict, } from './quality-verdict.js';
|
|
20
22
|
import { findProjectRoot } from '../kernel/unified-memory.js';
|
|
23
|
+
import { computeVerificationArtifactDigest, evaluateVerificationReach, } from './verification-reach.js';
|
|
21
24
|
/** Default frozen anchor location, relative to the project root (ADR-117). */
|
|
22
25
|
export const DEFAULT_ANCHOR_RELATIVE_PATH = 'verification/anchors/qe-anchor-v1.json';
|
|
23
26
|
/**
|
|
24
27
|
* Run the two-gate quality gate for one artifact against one pinned checklist.
|
|
25
28
|
* Throws only for caller error (unknown checklist id, unloadable/drifted anchor);
|
|
26
|
-
* every judgement outcome is returned as a three-valued
|
|
29
|
+
* every judgement outcome is returned as a three-valued reach-aware result.
|
|
27
30
|
*/
|
|
28
31
|
export async function runQualityGate(req) {
|
|
29
32
|
const checklist = loadChecklist(req.checklistId, req.anchorPath);
|
|
30
|
-
|
|
33
|
+
if (req.verificationManifest
|
|
34
|
+
&& req.verificationManifest.artifact.digest !== computeVerificationArtifactDigest(req.artifact)) {
|
|
35
|
+
throw new Error('Verification reach manifest artifact digest does not match the judged artifact');
|
|
36
|
+
}
|
|
37
|
+
const verification = req.verificationManifest
|
|
38
|
+
? { kind: 'verified', ...evaluateVerificationReach(req.verificationManifest) }
|
|
39
|
+
: {
|
|
40
|
+
kind: 'legacy-unknown',
|
|
41
|
+
coverageVerdict: 'inconclusive',
|
|
42
|
+
reason: 'legacy quality-gate request has no verification reach manifest',
|
|
43
|
+
};
|
|
44
|
+
const coverageVerdict = verification.coverageVerdict;
|
|
45
|
+
const quality = await computeQualityVerdict({
|
|
31
46
|
oracle: req.oracleResult,
|
|
32
47
|
artifact: req.artifact,
|
|
33
48
|
checklist,
|
|
34
49
|
judge: req.judge,
|
|
35
50
|
});
|
|
51
|
+
return {
|
|
52
|
+
...quality,
|
|
53
|
+
qualityVerdict: quality.verdict,
|
|
54
|
+
coverageVerdict,
|
|
55
|
+
verdict: combineVerdicts(quality.verdict, coverageVerdict),
|
|
56
|
+
verification,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function combineVerdicts(quality, coverage) {
|
|
60
|
+
if (quality === 'fail' || coverage === 'fail')
|
|
61
|
+
return 'fail';
|
|
62
|
+
if (quality === 'pass' && coverage === 'pass')
|
|
63
|
+
return 'pass';
|
|
64
|
+
return 'inconclusive';
|
|
36
65
|
}
|
|
37
66
|
/**
|
|
38
67
|
* Load the pinned checklist for `checklistId` from the frozen anchor. Exposed so
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Failure-mode verification reach contracts (#651).
|
|
3
|
+
*
|
|
4
|
+
* Quality evidence is useful only within the boundary it actually observed.
|
|
5
|
+
* This module keeps that boundary revision-bound and fail-closed: direct,
|
|
6
|
+
* executed, fresh evidence with the required oracle can cover a risk; partial,
|
|
7
|
+
* inferred, stale, unavailable, and wrong-target evidence remains visible but
|
|
8
|
+
* cannot silently produce a passing coverage verdict.
|
|
9
|
+
*/
|
|
10
|
+
export type FailureModeSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
11
|
+
export type VerificationChannel = 'static' | 'build' | 'runtime' | 'api' | 'browser' | 'telemetry' | 'hardware' | 'human';
|
|
12
|
+
export type VerificationReachLevel = 'direct' | 'partial' | 'none';
|
|
13
|
+
export type VerificationEvidenceClass = 'EXECUTED' | 'STATIC' | 'INFERRED' | 'UNKNOWN';
|
|
14
|
+
export type VerificationExecutionStatus = 'passed' | 'failed' | 'not-run' | 'unavailable';
|
|
15
|
+
export type UncoveredDisposition = 'fail' | 'inconclusive' | 'human-review';
|
|
16
|
+
export type VerificationCoverageVerdict = 'pass' | UncoveredDisposition;
|
|
17
|
+
export interface VerificationTarget {
|
|
18
|
+
revision: string;
|
|
19
|
+
digest: string;
|
|
20
|
+
environment: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VerificationCost {
|
|
23
|
+
tokens?: number;
|
|
24
|
+
durationMs?: number;
|
|
25
|
+
monetary?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface VerificationReach {
|
|
28
|
+
checkId: string;
|
|
29
|
+
channel: VerificationChannel;
|
|
30
|
+
reach: VerificationReachLevel;
|
|
31
|
+
evidenceClass: VerificationEvidenceClass;
|
|
32
|
+
executionStatus: VerificationExecutionStatus;
|
|
33
|
+
target: VerificationTarget;
|
|
34
|
+
oracleRef?: string;
|
|
35
|
+
observedAt?: string;
|
|
36
|
+
limitations: string[];
|
|
37
|
+
cost?: VerificationCost;
|
|
38
|
+
}
|
|
39
|
+
export interface FailureModeRequirement {
|
|
40
|
+
riskId: string;
|
|
41
|
+
failureMode: string;
|
|
42
|
+
severity: FailureModeSeverity;
|
|
43
|
+
requiredOracle: string;
|
|
44
|
+
requiredObservations: VerificationChannel[];
|
|
45
|
+
checks: VerificationReach[];
|
|
46
|
+
dispositionWhenUncovered: UncoveredDisposition;
|
|
47
|
+
}
|
|
48
|
+
export interface VerificationReachManifest {
|
|
49
|
+
id: string;
|
|
50
|
+
systemUnderTest: string;
|
|
51
|
+
artifact: VerificationTarget;
|
|
52
|
+
risks: FailureModeRequirement[];
|
|
53
|
+
generatedAt: string;
|
|
54
|
+
expiresAt?: string;
|
|
55
|
+
manifestHash: string;
|
|
56
|
+
}
|
|
57
|
+
export type VerificationReachManifestInput = Omit<VerificationReachManifest, 'manifestHash'>;
|
|
58
|
+
export interface FailureModeReachResult {
|
|
59
|
+
riskId: string;
|
|
60
|
+
failureMode: string;
|
|
61
|
+
severity: FailureModeSeverity;
|
|
62
|
+
verdict: VerificationCoverageVerdict;
|
|
63
|
+
directCheckIds: string[];
|
|
64
|
+
partialCheckIds: string[];
|
|
65
|
+
failedCheckIds: string[];
|
|
66
|
+
uncoveredObservations: VerificationChannel[];
|
|
67
|
+
limitations: string[];
|
|
68
|
+
reason: string;
|
|
69
|
+
}
|
|
70
|
+
export interface VerificationReachResult {
|
|
71
|
+
manifestId: string;
|
|
72
|
+
manifestHash: string;
|
|
73
|
+
systemUnderTest: string;
|
|
74
|
+
artifact: VerificationTarget;
|
|
75
|
+
coverageVerdict: VerificationCoverageVerdict;
|
|
76
|
+
risks: FailureModeReachResult[];
|
|
77
|
+
evaluatedAt: string;
|
|
78
|
+
}
|
|
79
|
+
export interface VerificationReachEvaluationOptions {
|
|
80
|
+
now?: Date;
|
|
81
|
+
}
|
|
82
|
+
/** Create a manifest whose hash binds its target, risks, checks, and lifetime. */
|
|
83
|
+
export declare function createVerificationReachManifest(input: VerificationReachManifestInput): VerificationReachManifest;
|
|
84
|
+
/** Compute the canonical SHA-256 identity for all manifest content except the hash itself. */
|
|
85
|
+
export declare function computeVerificationReachManifestHash(manifest: VerificationReachManifest | VerificationReachManifestInput): string;
|
|
86
|
+
/** Bind a reach manifest to the exact artifact bytes submitted to the gate. */
|
|
87
|
+
export declare function computeVerificationArtifactDigest(artifact: string): string;
|
|
88
|
+
/** Evaluate whether the declared evidence can directly observe every required failure mode. */
|
|
89
|
+
export declare function evaluateVerificationReach(manifest: VerificationReachManifest, options?: VerificationReachEvaluationOptions): VerificationReachResult;
|
|
90
|
+
//# sourceMappingURL=verification-reach.d.ts.map
|