@runcofactor/cli 0.57.0 → 0.58.0
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/README.md +40 -0
- package/dist/{account-S7VHLHYX.js → account-CWSADXJD.js} +5 -5
- package/dist/{alert-DZUI3JEU.js → alert-VEZZJPIH.js} +8 -8
- package/dist/{api-catalog-WP6AQYUG.js → api-catalog-OBE6ITCJ.js} +5 -5
- package/dist/{api-key-U57EC2YF.js → api-key-265DBPSR.js} +5 -5
- package/dist/{attachment-MICVVXUW.js → attachment-QE65VNDG.js} +5 -5
- package/dist/{auth-UDD77PG6.js → auth-DG6RD4UA.js} +3 -3
- package/dist/{benchmark-Q5BVGQ3I.js → benchmark-3R75GENH.js} +5 -5
- package/dist/billing-AGY6VUCA.js +64 -0
- package/dist/billing-AGY6VUCA.js.map +1 -0
- package/dist/{blackcat-TZNSDQAC.js → blackcat-EKZS3TBD.js} +3 -3
- package/dist/{chunk-AHS2HMEH.js → chunk-4KFJQPJF.js} +3 -3
- package/dist/{chunk-LP4X7TWI.js → chunk-56WV7CFM.js} +2 -2
- package/dist/{chunk-3EKIGWMN.js → chunk-A6VDLUMH.js} +3 -3
- package/dist/{chunk-XQZJWDM4.js → chunk-B7G4TOYC.js} +5 -5
- package/dist/{chunk-U3MXJTTD.js → chunk-BDPNJKUZ.js} +10 -10
- package/dist/{chunk-IIDQM4MY.js → chunk-BMFD4OPC.js} +2 -2
- package/dist/{chunk-EYHJ5FIA.js → chunk-C6SNLHVE.js} +10 -1
- package/dist/chunk-C6SNLHVE.js.map +1 -0
- package/dist/{chunk-T5MU76RA.js → chunk-C77XIO2W.js} +4 -4
- package/dist/{chunk-FBEQNW2P.js → chunk-DFN2NH37.js} +2 -2
- package/dist/{chunk-4SQKKD3R.js → chunk-EDX47DXT.js} +2 -2
- package/dist/{chunk-BSCEOIYX.js → chunk-FQ6P522C.js} +2 -2
- package/dist/{chunk-6IMNRYC3.js → chunk-GQSW6ZY3.js} +5 -5
- package/dist/{chunk-4GDEKB5S.js → chunk-GVNSCSIC.js} +4 -4
- package/dist/{chunk-W4P6BGJ7.js → chunk-IN3AF6LI.js} +4 -4
- package/dist/{chunk-CZOYFKTY.js → chunk-IVJU3LP6.js} +3 -3
- package/dist/{chunk-H2K3ABPO.js → chunk-K54XL64A.js} +6 -6
- package/dist/{chunk-T6ZNIMI4.js → chunk-LRIP5IQD.js} +3 -3
- package/dist/chunk-LRIP5IQD.js.map +1 -0
- package/dist/{chunk-T6KTBHWD.js → chunk-LZLSRN5Q.js} +6 -6
- package/dist/{chunk-YILSW5ZY.js → chunk-MCJOF3JX.js} +4 -4
- package/dist/{chunk-SBQLD7X6.js → chunk-PN5IK7CJ.js} +2 -2
- package/dist/{chunk-K3MG2ZMH.js → chunk-RIBSXEAM.js} +2 -2
- package/dist/{chunk-DTB5HUD2.js → chunk-SPTLZJOF.js} +5 -4
- package/dist/chunk-SPTLZJOF.js.map +1 -0
- package/dist/{chunk-K2USFSTX.js → chunk-T7NZHHC5.js} +3 -3
- package/dist/{chunk-5MFHNT56.js → chunk-TWPCN4DV.js} +2 -2
- package/dist/chunk-UPP4F2BE.js +519 -0
- package/dist/chunk-UPP4F2BE.js.map +1 -0
- package/dist/{chunk-KD7VGZX7.js → chunk-UZZ5OHXT.js} +7 -7
- package/dist/{chunk-N55RKCGR.js → chunk-V22CGGHO.js} +6 -1
- package/dist/chunk-V22CGGHO.js.map +1 -0
- package/dist/{chunk-YFXTMFYB.js → chunk-V6OC2WQL.js} +5 -5
- package/dist/{chunk-YV4RASGX.js → chunk-W43YGZOP.js} +18 -6
- package/dist/chunk-W43YGZOP.js.map +1 -0
- package/dist/{chunk-TG32WC4J.js → chunk-W6TPKE5S.js} +2 -2
- package/dist/{chunk-72Y65NWI.js → chunk-WY4R4IL5.js} +3 -3
- package/dist/{chunk-XGGHOHZS.js → chunk-XD3PSGFG.js} +3 -3
- package/dist/chunk-XD3PSGFG.js.map +1 -0
- package/dist/{chunk-ETXIGTS7.js → chunk-XKR275VJ.js} +3 -3
- package/dist/{credential-HM4THJOS.js → credential-DPUCDGYC.js} +5 -5
- package/dist/{credential-template-JBV3FZBY.js → credential-template-67RQWMH2.js} +5 -5
- package/dist/{dev-D2HS5XXN.js → dev-MU45HWAN.js} +456 -170
- package/dist/dev-MU45HWAN.js.map +1 -0
- package/dist/{digest-54VJ7KTF.js → digest-4PABSK2F.js} +8 -8
- package/dist/{docs-PPQSNRP6.js → docs-ZL5QOHCB.js} +5 -5
- package/dist/{doctor-CXFGSPWH.js → doctor-J5X2HSLJ.js} +3 -3
- package/dist/{environment-6MXRQV5L.js → environment-7Q6WDKMM.js} +7 -7
- package/dist/{eval-HCDXL4QT.js → eval-37P36M53.js} +51 -358
- package/dist/eval-37P36M53.js.map +1 -0
- package/dist/{exploration-U2WMYBZ3.js → exploration-7PHVC753.js} +5 -5
- package/dist/{exploratory-test-FD7VGUKE.js → exploratory-test-NE7ECFWS.js} +6 -6
- package/dist/{external-run-THSD26B7.js → external-run-KZGHVSHY.js} +134 -11
- package/dist/external-run-KZGHVSHY.js.map +1 -0
- package/dist/{feature-flag-D5IZ6OEG.js → feature-flag-YFWCPWIR.js} +5 -5
- package/dist/{feedback-6YCQMQQ3.js → feedback-HVR7LMFL.js} +6 -6
- package/dist/{flow-OVEA7273.js → flow-M6QBA4WR.js} +5 -5
- package/dist/{github-L2AFIEVN.js → github-HUBAWWFS.js} +6 -6
- package/dist/index.js +87 -80
- package/dist/index.js.map +1 -1
- package/dist/{init-ADOE2D6R.js → init-5A7VDZU4.js} +5 -5
- package/dist/{install-SB6NLXDQ.js → install-HM3USHVU.js} +5 -5
- package/dist/{issues-V2DSZXAN.js → issues-W6WIQ4RX.js} +8 -8
- package/dist/{knobs-MR4H55EB.js → knobs-NR52HEAL.js} +5 -5
- package/dist/{landing-KTYDL7QJ.js → landing-FHE7RWCR.js} +7 -7
- package/dist/{list-DFBHWU77.js → list-6J6BCU2L.js} +5 -5
- package/dist/{local-QXSTGDFN.js → local-DNRUTJBN.js} +7 -7
- package/dist/{login-KGIZAZCR.js → login-K7CNO4QS.js} +5 -5
- package/dist/{mcp-EDYHUOFI.js → mcp-G72SEYO5.js} +10 -10
- package/dist/mcp-eval-X4AGPFWW.js +450 -0
- package/dist/mcp-eval-X4AGPFWW.js.map +1 -0
- package/dist/{metrics-JUONV7EL.js → metrics-WXQPVDQY.js} +5 -5
- package/dist/{monitor-F7F7EJAL.js → monitor-URPOJOER.js} +5 -5
- package/dist/{perf-L2YL4Z2L.js → perf-WG6DAZBT.js} +11 -11
- package/dist/{product-UBLNRF5Y.js → product-TGOCFPCC.js} +5 -5
- package/dist/{product-map-7K5I5TVU.js → product-map-PKDPF2FB.js} +7 -7
- package/dist/{prompts-3JNN4M46.js → prompts-63KKMXLZ.js} +5 -5
- package/dist/{proofs-MJ7MGBCW.js → proofs-XRQ3BMM2.js} +9 -9
- package/dist/{property-TCDBREZL.js → property-O3PMHQLJ.js} +6 -6
- package/dist/{psql-YD54GQMP.js → psql-SUE2TORV.js} +5 -5
- package/dist/{record-OWBURAZ4.js → record-C245ESQA.js} +6 -6
- package/dist/{redis-3SIKQULP.js → redis-CAOX2ODS.js} +5 -5
- package/dist/{release-DMCBRVA5.js → release-ALUGJZTN.js} +5 -5
- package/dist/{runbook-ZRKWCLZE.js → runbook-63HBD7WH.js} +5 -5
- package/dist/{sandbox-HMZR6SKM.js → sandbox-IC5E53CC.js} +9 -9
- package/dist/{scenarios-2QHT5A4F.js → scenarios-JR2H7SZC.js} +5 -5
- package/dist/{schedule-4L7LOUDB.js → schedule-FHMCSKPL.js} +8 -8
- package/dist/{session-JHLYECKM.js → session-BKHVVZS3.js} +9 -9
- package/dist/{skill-ARJSVWCZ.js → skill-TZE27TIN.js} +3 -3
- package/dist/{slack-T7CR4SAU.js → slack-3BQ2T3ZS.js} +6 -6
- package/dist/{spec-RDNTNUE2.js → spec-PCAK2BX5.js} +5 -5
- package/dist/{src-DJETLMXP.js → src-BCJZMHSQ.js} +3 -3
- package/dist/{src-H7IBLPDW.js → src-BPKBSXKX.js} +4 -4
- package/dist/{src-DPJGVNYG.js → src-PNV4HGUY.js} +3 -3
- package/dist/{src-UKPMEXXT.js → src-ZJGBNWYB.js} +5 -5
- package/dist/{start-NR7W2LIP.js → start-BA5UEI3W.js} +5 -5
- package/dist/{status-UDNXR5GK.js → status-TUXK57H4.js} +5 -5
- package/dist/{tag-ADP2MZ3V.js → tag-IBDEJZM7.js} +6 -6
- package/dist/{task-KQOUTIJU.js → task-WXZQM4BW.js} +6 -6
- package/dist/{teams-D4QXSVDA.js → teams-656T2IHZ.js} +7 -7
- package/dist/{test-suite-DYMY4YAG.js → test-suite-ETXWE5HB.js} +12 -12
- package/dist/{tickets-BX3LFWUS.js → tickets-LWP3XIHG.js} +5 -5
- package/dist/{trace-MBRU6DLE.js → trace-RNEY6XCJ.js} +8 -8
- package/dist/{triage-IXAU73VL.js → triage-VZIIN7KB.js} +6 -6
- package/dist/{trigger-CHSWCUV3.js → trigger-KTTSNSRU.js} +10 -10
- package/dist/{update-check-LLETICM4.js → update-check-SLGKNOUC.js} +4 -4
- package/dist/{upgrade-35WVNUEG.js → upgrade-2KSYA4GE.js} +5 -5
- package/dist/{usage-YUYXUNF2.js → usage-SC4NWQ5A.js} +99 -14
- package/dist/usage-SC4NWQ5A.js.map +1 -0
- package/dist/{utilities-MOHIKBBF.js → utilities-O4VVADHM.js} +6 -6
- package/dist/{visual-RNYERKX4.js → visual-ZWQTVXTM.js} +5 -5
- package/dist/{workflow-NM5IC7ZQ.js → workflow-7HKA2WKO.js} +30 -30
- package/dist/{workflow-cache-JNN7BS2K.js → workflow-cache-FDN2N5HH.js} +18 -18
- package/dist/{workflow-cache-convergence-resolve-4SO2MP7T.js → workflow-cache-convergence-resolve-BGEUM7WV.js} +5 -5
- package/dist/{workflow-debug-E7BXSSOG.js → workflow-debug-KNE7SVXQ.js} +11 -11
- package/dist/{workflow-feedback-EWAK45AB.js → workflow-feedback-YY2FZTV4.js} +5 -5
- package/dist/{workflow-fork-NO5IFBD4.js → workflow-fork-FH5KBVWP.js} +5 -5
- package/dist/{workflow-promotion-NWIZNAR4.js → workflow-promotion-RRI53FB6.js} +5 -5
- package/dist/{workflow-proposals-XMAZJT3X.js → workflow-proposals-5XGCOTEU.js} +5 -5
- package/dist/{workflow-revisions-4EQMLZGY.js → workflow-revisions-M6WPGXAT.js} +5 -5
- package/dist/{workflow-status-AZMXQZLC.js → workflow-status-I5BSSWHY.js} +5 -5
- package/package.json +2 -2
- package/dist/chunk-DTB5HUD2.js.map +0 -1
- package/dist/chunk-EYHJ5FIA.js.map +0 -1
- package/dist/chunk-N55RKCGR.js.map +0 -1
- package/dist/chunk-T6ZNIMI4.js.map +0 -1
- package/dist/chunk-XGGHOHZS.js.map +0 -1
- package/dist/chunk-YV4RASGX.js.map +0 -1
- package/dist/dev-D2HS5XXN.js.map +0 -1
- package/dist/eval-HCDXL4QT.js.map +0 -1
- package/dist/external-run-THSD26B7.js.map +0 -1
- package/dist/mcp-eval-YT2RFIC5.js +0 -196
- package/dist/mcp-eval-YT2RFIC5.js.map +0 -1
- package/dist/usage-YUYXUNF2.js.map +0 -1
- /package/dist/{account-S7VHLHYX.js.map → account-CWSADXJD.js.map} +0 -0
- /package/dist/{alert-DZUI3JEU.js.map → alert-VEZZJPIH.js.map} +0 -0
- /package/dist/{api-catalog-WP6AQYUG.js.map → api-catalog-OBE6ITCJ.js.map} +0 -0
- /package/dist/{api-key-U57EC2YF.js.map → api-key-265DBPSR.js.map} +0 -0
- /package/dist/{attachment-MICVVXUW.js.map → attachment-QE65VNDG.js.map} +0 -0
- /package/dist/{auth-UDD77PG6.js.map → auth-DG6RD4UA.js.map} +0 -0
- /package/dist/{benchmark-Q5BVGQ3I.js.map → benchmark-3R75GENH.js.map} +0 -0
- /package/dist/{blackcat-TZNSDQAC.js.map → blackcat-EKZS3TBD.js.map} +0 -0
- /package/dist/{chunk-AHS2HMEH.js.map → chunk-4KFJQPJF.js.map} +0 -0
- /package/dist/{chunk-LP4X7TWI.js.map → chunk-56WV7CFM.js.map} +0 -0
- /package/dist/{chunk-3EKIGWMN.js.map → chunk-A6VDLUMH.js.map} +0 -0
- /package/dist/{chunk-XQZJWDM4.js.map → chunk-B7G4TOYC.js.map} +0 -0
- /package/dist/{chunk-U3MXJTTD.js.map → chunk-BDPNJKUZ.js.map} +0 -0
- /package/dist/{chunk-IIDQM4MY.js.map → chunk-BMFD4OPC.js.map} +0 -0
- /package/dist/{chunk-T5MU76RA.js.map → chunk-C77XIO2W.js.map} +0 -0
- /package/dist/{chunk-FBEQNW2P.js.map → chunk-DFN2NH37.js.map} +0 -0
- /package/dist/{chunk-4SQKKD3R.js.map → chunk-EDX47DXT.js.map} +0 -0
- /package/dist/{chunk-BSCEOIYX.js.map → chunk-FQ6P522C.js.map} +0 -0
- /package/dist/{chunk-6IMNRYC3.js.map → chunk-GQSW6ZY3.js.map} +0 -0
- /package/dist/{chunk-4GDEKB5S.js.map → chunk-GVNSCSIC.js.map} +0 -0
- /package/dist/{chunk-W4P6BGJ7.js.map → chunk-IN3AF6LI.js.map} +0 -0
- /package/dist/{chunk-CZOYFKTY.js.map → chunk-IVJU3LP6.js.map} +0 -0
- /package/dist/{chunk-H2K3ABPO.js.map → chunk-K54XL64A.js.map} +0 -0
- /package/dist/{chunk-T6KTBHWD.js.map → chunk-LZLSRN5Q.js.map} +0 -0
- /package/dist/{chunk-YILSW5ZY.js.map → chunk-MCJOF3JX.js.map} +0 -0
- /package/dist/{chunk-SBQLD7X6.js.map → chunk-PN5IK7CJ.js.map} +0 -0
- /package/dist/{chunk-K3MG2ZMH.js.map → chunk-RIBSXEAM.js.map} +0 -0
- /package/dist/{chunk-K2USFSTX.js.map → chunk-T7NZHHC5.js.map} +0 -0
- /package/dist/{chunk-5MFHNT56.js.map → chunk-TWPCN4DV.js.map} +0 -0
- /package/dist/{chunk-KD7VGZX7.js.map → chunk-UZZ5OHXT.js.map} +0 -0
- /package/dist/{chunk-YFXTMFYB.js.map → chunk-V6OC2WQL.js.map} +0 -0
- /package/dist/{chunk-TG32WC4J.js.map → chunk-W6TPKE5S.js.map} +0 -0
- /package/dist/{chunk-72Y65NWI.js.map → chunk-WY4R4IL5.js.map} +0 -0
- /package/dist/{chunk-ETXIGTS7.js.map → chunk-XKR275VJ.js.map} +0 -0
- /package/dist/{credential-HM4THJOS.js.map → credential-DPUCDGYC.js.map} +0 -0
- /package/dist/{credential-template-JBV3FZBY.js.map → credential-template-67RQWMH2.js.map} +0 -0
- /package/dist/{digest-54VJ7KTF.js.map → digest-4PABSK2F.js.map} +0 -0
- /package/dist/{docs-PPQSNRP6.js.map → docs-ZL5QOHCB.js.map} +0 -0
- /package/dist/{doctor-CXFGSPWH.js.map → doctor-J5X2HSLJ.js.map} +0 -0
- /package/dist/{environment-6MXRQV5L.js.map → environment-7Q6WDKMM.js.map} +0 -0
- /package/dist/{exploration-U2WMYBZ3.js.map → exploration-7PHVC753.js.map} +0 -0
- /package/dist/{exploratory-test-FD7VGUKE.js.map → exploratory-test-NE7ECFWS.js.map} +0 -0
- /package/dist/{feature-flag-D5IZ6OEG.js.map → feature-flag-YFWCPWIR.js.map} +0 -0
- /package/dist/{feedback-6YCQMQQ3.js.map → feedback-HVR7LMFL.js.map} +0 -0
- /package/dist/{flow-OVEA7273.js.map → flow-M6QBA4WR.js.map} +0 -0
- /package/dist/{github-L2AFIEVN.js.map → github-HUBAWWFS.js.map} +0 -0
- /package/dist/{init-ADOE2D6R.js.map → init-5A7VDZU4.js.map} +0 -0
- /package/dist/{install-SB6NLXDQ.js.map → install-HM3USHVU.js.map} +0 -0
- /package/dist/{issues-V2DSZXAN.js.map → issues-W6WIQ4RX.js.map} +0 -0
- /package/dist/{knobs-MR4H55EB.js.map → knobs-NR52HEAL.js.map} +0 -0
- /package/dist/{landing-KTYDL7QJ.js.map → landing-FHE7RWCR.js.map} +0 -0
- /package/dist/{list-DFBHWU77.js.map → list-6J6BCU2L.js.map} +0 -0
- /package/dist/{local-QXSTGDFN.js.map → local-DNRUTJBN.js.map} +0 -0
- /package/dist/{login-KGIZAZCR.js.map → login-K7CNO4QS.js.map} +0 -0
- /package/dist/{mcp-EDYHUOFI.js.map → mcp-G72SEYO5.js.map} +0 -0
- /package/dist/{metrics-JUONV7EL.js.map → metrics-WXQPVDQY.js.map} +0 -0
- /package/dist/{monitor-F7F7EJAL.js.map → monitor-URPOJOER.js.map} +0 -0
- /package/dist/{perf-L2YL4Z2L.js.map → perf-WG6DAZBT.js.map} +0 -0
- /package/dist/{product-UBLNRF5Y.js.map → product-TGOCFPCC.js.map} +0 -0
- /package/dist/{product-map-7K5I5TVU.js.map → product-map-PKDPF2FB.js.map} +0 -0
- /package/dist/{prompts-3JNN4M46.js.map → prompts-63KKMXLZ.js.map} +0 -0
- /package/dist/{proofs-MJ7MGBCW.js.map → proofs-XRQ3BMM2.js.map} +0 -0
- /package/dist/{property-TCDBREZL.js.map → property-O3PMHQLJ.js.map} +0 -0
- /package/dist/{psql-YD54GQMP.js.map → psql-SUE2TORV.js.map} +0 -0
- /package/dist/{record-OWBURAZ4.js.map → record-C245ESQA.js.map} +0 -0
- /package/dist/{redis-3SIKQULP.js.map → redis-CAOX2ODS.js.map} +0 -0
- /package/dist/{release-DMCBRVA5.js.map → release-ALUGJZTN.js.map} +0 -0
- /package/dist/{runbook-ZRKWCLZE.js.map → runbook-63HBD7WH.js.map} +0 -0
- /package/dist/{sandbox-HMZR6SKM.js.map → sandbox-IC5E53CC.js.map} +0 -0
- /package/dist/{scenarios-2QHT5A4F.js.map → scenarios-JR2H7SZC.js.map} +0 -0
- /package/dist/{schedule-4L7LOUDB.js.map → schedule-FHMCSKPL.js.map} +0 -0
- /package/dist/{session-JHLYECKM.js.map → session-BKHVVZS3.js.map} +0 -0
- /package/dist/{skill-ARJSVWCZ.js.map → skill-TZE27TIN.js.map} +0 -0
- /package/dist/{slack-T7CR4SAU.js.map → slack-3BQ2T3ZS.js.map} +0 -0
- /package/dist/{spec-RDNTNUE2.js.map → spec-PCAK2BX5.js.map} +0 -0
- /package/dist/{src-DJETLMXP.js.map → src-BCJZMHSQ.js.map} +0 -0
- /package/dist/{src-H7IBLPDW.js.map → src-BPKBSXKX.js.map} +0 -0
- /package/dist/{src-DPJGVNYG.js.map → src-PNV4HGUY.js.map} +0 -0
- /package/dist/{src-UKPMEXXT.js.map → src-ZJGBNWYB.js.map} +0 -0
- /package/dist/{start-NR7W2LIP.js.map → start-BA5UEI3W.js.map} +0 -0
- /package/dist/{status-UDNXR5GK.js.map → status-TUXK57H4.js.map} +0 -0
- /package/dist/{tag-ADP2MZ3V.js.map → tag-IBDEJZM7.js.map} +0 -0
- /package/dist/{task-KQOUTIJU.js.map → task-WXZQM4BW.js.map} +0 -0
- /package/dist/{teams-D4QXSVDA.js.map → teams-656T2IHZ.js.map} +0 -0
- /package/dist/{test-suite-DYMY4YAG.js.map → test-suite-ETXWE5HB.js.map} +0 -0
- /package/dist/{tickets-BX3LFWUS.js.map → tickets-LWP3XIHG.js.map} +0 -0
- /package/dist/{trace-MBRU6DLE.js.map → trace-RNEY6XCJ.js.map} +0 -0
- /package/dist/{triage-IXAU73VL.js.map → triage-VZIIN7KB.js.map} +0 -0
- /package/dist/{trigger-CHSWCUV3.js.map → trigger-KTTSNSRU.js.map} +0 -0
- /package/dist/{update-check-LLETICM4.js.map → update-check-SLGKNOUC.js.map} +0 -0
- /package/dist/{upgrade-35WVNUEG.js.map → upgrade-2KSYA4GE.js.map} +0 -0
- /package/dist/{utilities-MOHIKBBF.js.map → utilities-O4VVADHM.js.map} +0 -0
- /package/dist/{visual-RNYERKX4.js.map → visual-ZWQTVXTM.js.map} +0 -0
- /package/dist/{workflow-NM5IC7ZQ.js.map → workflow-7HKA2WKO.js.map} +0 -0
- /package/dist/{workflow-cache-JNN7BS2K.js.map → workflow-cache-FDN2N5HH.js.map} +0 -0
- /package/dist/{workflow-cache-convergence-resolve-4SO2MP7T.js.map → workflow-cache-convergence-resolve-BGEUM7WV.js.map} +0 -0
- /package/dist/{workflow-debug-E7BXSSOG.js.map → workflow-debug-KNE7SVXQ.js.map} +0 -0
- /package/dist/{workflow-feedback-EWAK45AB.js.map → workflow-feedback-YY2FZTV4.js.map} +0 -0
- /package/dist/{workflow-fork-NO5IFBD4.js.map → workflow-fork-FH5KBVWP.js.map} +0 -0
- /package/dist/{workflow-promotion-NWIZNAR4.js.map → workflow-promotion-RRI53FB6.js.map} +0 -0
- /package/dist/{workflow-proposals-XMAZJT3X.js.map → workflow-proposals-5XGCOTEU.js.map} +0 -0
- /package/dist/{workflow-revisions-4EQMLZGY.js.map → workflow-revisions-M6WPGXAT.js.map} +0 -0
- /package/dist/{workflow-status-AZMXQZLC.js.map → workflow-status-I5BSSWHY.js.map} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __cr } from "module"; import { fileURLToPath as __fup } from "url"; import { dirname as __dn } from "path"; const require = __cr(import.meta.url); const __filename = __fup(import.meta.url); const __dirname = __dn(__filename);
|
|
2
2
|
import {
|
|
3
3
|
hasFlag
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-BMFD4OPC.js";
|
|
5
|
+
import "./chunk-LRIP5IQD.js";
|
|
6
6
|
import "./chunk-TOWZAG3I.js";
|
|
7
7
|
|
|
8
8
|
// src/local/index.ts
|
|
@@ -70,22 +70,22 @@ async function runLocal(argv) {
|
|
|
70
70
|
}
|
|
71
71
|
switch (subcommand) {
|
|
72
72
|
case "init": {
|
|
73
|
-
const { runLocalInit } = await import("./init-
|
|
73
|
+
const { runLocalInit } = await import("./init-5A7VDZU4.js");
|
|
74
74
|
await runLocalInit(rest);
|
|
75
75
|
break;
|
|
76
76
|
}
|
|
77
77
|
case "start": {
|
|
78
|
-
const { runLocalStart } = await import("./start-
|
|
78
|
+
const { runLocalStart } = await import("./start-BA5UEI3W.js");
|
|
79
79
|
await runLocalStart(rest);
|
|
80
80
|
break;
|
|
81
81
|
}
|
|
82
82
|
case "list": {
|
|
83
|
-
const { runLocalList } = await import("./list-
|
|
83
|
+
const { runLocalList } = await import("./list-6J6BCU2L.js");
|
|
84
84
|
await runLocalList(rest);
|
|
85
85
|
break;
|
|
86
86
|
}
|
|
87
87
|
case "login": {
|
|
88
|
-
const { runLocalLogin } = await import("./login-
|
|
88
|
+
const { runLocalLogin } = await import("./login-K7CNO4QS.js");
|
|
89
89
|
await runLocalLogin(rest);
|
|
90
90
|
break;
|
|
91
91
|
}
|
|
@@ -98,4 +98,4 @@ async function runLocal(argv) {
|
|
|
98
98
|
export {
|
|
99
99
|
runLocal
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=local-
|
|
101
|
+
//# sourceMappingURL=local-DNRUTJBN.js.map
|
|
@@ -10,15 +10,15 @@ import {
|
|
|
10
10
|
promptChoice,
|
|
11
11
|
selectProperty,
|
|
12
12
|
uploadStorageState
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WY4R4IL5.js";
|
|
14
14
|
import "./chunk-W7CFLOEI.js";
|
|
15
15
|
import "./chunk-S3Q7MDCS.js";
|
|
16
16
|
import {
|
|
17
17
|
getArgValue,
|
|
18
18
|
resolveConfig
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-BMFD4OPC.js";
|
|
20
|
+
import "./chunk-LRIP5IQD.js";
|
|
21
|
+
import "./chunk-C6SNLHVE.js";
|
|
22
22
|
import "./chunk-TOWZAG3I.js";
|
|
23
23
|
|
|
24
24
|
// src/local/login.ts
|
|
@@ -313,4 +313,4 @@ Opening browser at ${args.url}...`);
|
|
|
313
313
|
export {
|
|
314
314
|
runLocalLogin
|
|
315
315
|
};
|
|
316
|
-
//# sourceMappingURL=login-
|
|
316
|
+
//# sourceMappingURL=login-K7CNO4QS.js.map
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
COFACTOR_MCP_INSTRUCTIONS,
|
|
4
4
|
buildRegistry,
|
|
5
5
|
sharedGroups
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DFN2NH37.js";
|
|
7
7
|
import {
|
|
8
8
|
LocalBrowserHost,
|
|
9
9
|
USER_PAUSED_ERROR
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XKR275VJ.js";
|
|
11
11
|
import "./chunk-CWICLBLU.js";
|
|
12
12
|
import {
|
|
13
13
|
callTool,
|
|
@@ -19,17 +19,17 @@ import {
|
|
|
19
19
|
import "./chunk-DEK6B6LX.js";
|
|
20
20
|
import {
|
|
21
21
|
getBrowserToolDefinitionsWithLifecycle
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-IVJU3LP6.js";
|
|
23
23
|
import {
|
|
24
24
|
fetchOrgs,
|
|
25
25
|
openUrl,
|
|
26
26
|
switchOrg
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-4KFJQPJF.js";
|
|
28
28
|
import "./chunk-W7CFLOEI.js";
|
|
29
29
|
import "./chunk-S3Q7MDCS.js";
|
|
30
30
|
import {
|
|
31
31
|
clearUpdateCache
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-T7NZHHC5.js";
|
|
33
33
|
import {
|
|
34
34
|
DEFAULT_API_URL,
|
|
35
35
|
ENV_URLS,
|
|
@@ -37,16 +37,16 @@ import {
|
|
|
37
37
|
readStoredToken,
|
|
38
38
|
resolveAppUrl,
|
|
39
39
|
saveAuth
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-BMFD4OPC.js";
|
|
41
41
|
import {
|
|
42
42
|
command,
|
|
43
43
|
packageName,
|
|
44
44
|
readBrandEnv
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-LRIP5IQD.js";
|
|
46
46
|
import "./chunk-AK7WEGGB.js";
|
|
47
47
|
import "./chunk-5QHORHJT.js";
|
|
48
|
-
import "./chunk-
|
|
49
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-56WV7CFM.js";
|
|
49
|
+
import "./chunk-C6SNLHVE.js";
|
|
50
50
|
import "./chunk-TOWZAG3I.js";
|
|
51
51
|
|
|
52
52
|
// src/mcp/index.ts
|
|
@@ -906,4 +906,4 @@ async function runMcp(argv) {
|
|
|
906
906
|
export {
|
|
907
907
|
runMcp
|
|
908
908
|
};
|
|
909
|
-
//# sourceMappingURL=mcp-
|
|
909
|
+
//# sourceMappingURL=mcp-G72SEYO5.js.map
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { createRequire as __cr } from "module"; import { fileURLToPath as __fup } from "url"; import { dirname as __dn } from "path"; const require = __cr(import.meta.url); const __filename = __fup(import.meta.url); const __dirname = __dn(__filename);
|
|
2
|
+
import {
|
|
3
|
+
AGENT_EVAL_MULTIPART_THRESHOLD,
|
|
4
|
+
McpAgentEvalDefinitionSchema,
|
|
5
|
+
loadBundle,
|
|
6
|
+
uploadBundle,
|
|
7
|
+
uploadMultipart
|
|
8
|
+
} from "./chunk-UPP4F2BE.js";
|
|
9
|
+
import {
|
|
10
|
+
extractUuid,
|
|
11
|
+
resolveApplicationId
|
|
12
|
+
} from "./chunk-V6OC2WQL.js";
|
|
13
|
+
import "./chunk-PN5IK7CJ.js";
|
|
14
|
+
import {
|
|
15
|
+
EVALS,
|
|
16
|
+
request
|
|
17
|
+
} from "./chunk-XD3PSGFG.js";
|
|
18
|
+
import {
|
|
19
|
+
apiRequest,
|
|
20
|
+
getPositionalArg,
|
|
21
|
+
getPositionalArgs,
|
|
22
|
+
getScalarArgValue
|
|
23
|
+
} from "./chunk-WY4R4IL5.js";
|
|
24
|
+
import "./chunk-S3Q7MDCS.js";
|
|
25
|
+
import {
|
|
26
|
+
GLOBAL_VALUE_FLAGS,
|
|
27
|
+
hasFlag,
|
|
28
|
+
resolveConfig
|
|
29
|
+
} from "./chunk-BMFD4OPC.js";
|
|
30
|
+
import {
|
|
31
|
+
writeRawOutput
|
|
32
|
+
} from "./chunk-LRIP5IQD.js";
|
|
33
|
+
import "./chunk-C6SNLHVE.js";
|
|
34
|
+
import "./chunk-TOWZAG3I.js";
|
|
35
|
+
|
|
36
|
+
// src/client-env.ts
|
|
37
|
+
import process2 from "process";
|
|
38
|
+
var COLLECTION = "/client-environments";
|
|
39
|
+
var VALUE_FLAGS = [...GLOBAL_VALUE_FLAGS, "--app-url", "--name", "--repo", "--commit", "--setup"];
|
|
40
|
+
function printHelp() {
|
|
41
|
+
console.log(
|
|
42
|
+
[
|
|
43
|
+
"Usage: cofactor mcp-eval client-env <list|get|create|delete|smoke> [options]",
|
|
44
|
+
"",
|
|
45
|
+
" list [--json] List catalog and org client environments",
|
|
46
|
+
" get <id|catalog/key> [--json] Show one environment",
|
|
47
|
+
" create --org <org> --name <name> [--repo <url> --commit <sha>] [--setup <script>]",
|
|
48
|
+
" delete <id> --org <org> [--json] Delete an org-owned environment",
|
|
49
|
+
" smoke --env dev [--json] Clone, snapshot and reclaim catalog/umami",
|
|
50
|
+
"",
|
|
51
|
+
"An empty environment omits --repo and --commit. Catalog environments are read-only.",
|
|
52
|
+
"Common options: --env <prod|dev|local> --api-url <url> --token <key> --json"
|
|
53
|
+
].join("\n")
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
async function waitForSmokeResult(apiUrl, token, jobId) {
|
|
57
|
+
const response = await fetch(`${apiUrl.replace(/\/$/, "")}/jobs/${encodeURIComponent(jobId)}/stream`, {
|
|
58
|
+
headers: { authorization: `Bearer ${token}`, accept: "text/event-stream" },
|
|
59
|
+
signal: AbortSignal.timeout(90 * 6e4)
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok || !response.body) throw new Error(`Smoke job stream failed (${response.status}).`);
|
|
62
|
+
const reader = response.body.getReader();
|
|
63
|
+
const decoder = new TextDecoder();
|
|
64
|
+
let buffer = "";
|
|
65
|
+
try {
|
|
66
|
+
for (; ; ) {
|
|
67
|
+
const chunk = await reader.read();
|
|
68
|
+
if (chunk.done) break;
|
|
69
|
+
buffer += decoder.decode(chunk.value, { stream: true });
|
|
70
|
+
let boundary = buffer.indexOf("\n\n");
|
|
71
|
+
while (boundary >= 0) {
|
|
72
|
+
const frame = buffer.slice(0, boundary);
|
|
73
|
+
buffer = buffer.slice(boundary + 2);
|
|
74
|
+
boundary = buffer.indexOf("\n\n");
|
|
75
|
+
const event = frame.match(/^event:\s*(.+)$/m)?.[1]?.trim();
|
|
76
|
+
const data = frame.match(/^data:\s*(.+)$/m)?.[1];
|
|
77
|
+
if (!data) continue;
|
|
78
|
+
if (event === "client-snapshot-smoke") {
|
|
79
|
+
const result = JSON.parse(data);
|
|
80
|
+
await reader.cancel();
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
if (event === "status") {
|
|
84
|
+
const status = JSON.parse(data);
|
|
85
|
+
if (status.status === "failed" || status.status === "canceled") {
|
|
86
|
+
throw new Error(status.error ?? `Smoke job ${status.status}.`);
|
|
87
|
+
}
|
|
88
|
+
if (status.status === "completed") {
|
|
89
|
+
throw new Error("Smoke job completed without recording timings.");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (event === "error") {
|
|
93
|
+
const failure = JSON.parse(data);
|
|
94
|
+
throw new Error(failure.error ?? failure.message ?? "Smoke job failed.");
|
|
95
|
+
}
|
|
96
|
+
if (event === "complete") {
|
|
97
|
+
throw new Error("Smoke job completed without recording timings.");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
} finally {
|
|
102
|
+
reader.releaseLock();
|
|
103
|
+
}
|
|
104
|
+
throw new Error("Smoke job stream ended before timings were recorded.");
|
|
105
|
+
}
|
|
106
|
+
function describeSmokeResult(result) {
|
|
107
|
+
return [
|
|
108
|
+
"Client template smoke completed for catalog/umami.",
|
|
109
|
+
`Pinned commit verified: ${result.verifiedCommit ?? "not applicable"}`,
|
|
110
|
+
`Cache hit: ${result.cacheHit ? "yes" : "no"}`,
|
|
111
|
+
`Cold claim: ${result.coldClaimMs} ms`,
|
|
112
|
+
`Clone: ${result.cloneMs} ms`,
|
|
113
|
+
`Setup: ${result.setupMs} ms`,
|
|
114
|
+
`Snapshot: ${result.snapshotMs} ms`,
|
|
115
|
+
`Reclaim and restore verification: ${result.reclaimMs} ms`
|
|
116
|
+
].join("\n");
|
|
117
|
+
}
|
|
118
|
+
function required(argv, flag) {
|
|
119
|
+
const value = getScalarArgValue(argv, flag);
|
|
120
|
+
if (!value) throw new Error(`${flag} is required.`);
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
function target(argv, command) {
|
|
124
|
+
const value = getPositionalArgs(argv, VALUE_FLAGS)[0];
|
|
125
|
+
if (!value) throw new Error(`Usage: cofactor mcp-eval client-env ${command} <id>`);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
function environmentPath(id) {
|
|
129
|
+
if (id.startsWith("catalog/")) {
|
|
130
|
+
const key = id.slice("catalog/".length);
|
|
131
|
+
if (!key || key.includes("/")) throw new Error("Catalog environment IDs use catalog/<key>.");
|
|
132
|
+
return `${COLLECTION}/catalog/${encodeURIComponent(key)}`;
|
|
133
|
+
}
|
|
134
|
+
return `${COLLECTION}/${encodeURIComponent(id)}`;
|
|
135
|
+
}
|
|
136
|
+
function emit(argv, data, text) {
|
|
137
|
+
writeRawOutput(hasFlag(argv, "--json") ? JSON.stringify(data, null, 2) : text);
|
|
138
|
+
}
|
|
139
|
+
function describeEnvironment(environment) {
|
|
140
|
+
return [
|
|
141
|
+
`Client environment: ${environment.name}`,
|
|
142
|
+
`ID: ${environment.id}`,
|
|
143
|
+
`Repository: ${environment.repoUrl ?? "empty workspace"}`,
|
|
144
|
+
`Commit: ${environment.commit ?? "\u2014"}`,
|
|
145
|
+
`Setup: ${environment.setup ?? "none"}`,
|
|
146
|
+
`Catalog: ${environment.catalog ? "yes" : "no"}`
|
|
147
|
+
].join("\n");
|
|
148
|
+
}
|
|
149
|
+
async function request2(apiUrl, token, method, path, body) {
|
|
150
|
+
const response = await apiRequest(apiUrl, token, method, path, body);
|
|
151
|
+
if (!response.ok || response.data === void 0)
|
|
152
|
+
throw new Error(response.error ?? `${method} ${path} failed.`);
|
|
153
|
+
return response.data;
|
|
154
|
+
}
|
|
155
|
+
async function listEnvironments(apiUrl, token) {
|
|
156
|
+
const environments = [];
|
|
157
|
+
for (let page = 1; ; page++) {
|
|
158
|
+
const response = await apiRequest(
|
|
159
|
+
apiUrl,
|
|
160
|
+
token,
|
|
161
|
+
"GET",
|
|
162
|
+
`${COLLECTION}?page=${page}&pageSize=100`
|
|
163
|
+
);
|
|
164
|
+
if (!response.ok || response.data === void 0)
|
|
165
|
+
throw new Error(response.error ?? `GET ${COLLECTION} failed.`);
|
|
166
|
+
environments.push(...response.data);
|
|
167
|
+
if (page >= response.pagination.totalPages) return environments;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function runClientEnvCommand(argv) {
|
|
171
|
+
const [command, ...rest] = argv;
|
|
172
|
+
if (!command || command === "help" || hasFlag(argv, "--help", "-h")) {
|
|
173
|
+
printHelp();
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (!["list", "get", "create", "delete", "smoke"].includes(command))
|
|
177
|
+
throw new Error(`Unknown client environment command: ${command}`);
|
|
178
|
+
const cmd = command;
|
|
179
|
+
if (cmd === "smoke") {
|
|
180
|
+
if (getScalarArgValue(rest, "--env") !== "dev") {
|
|
181
|
+
throw new Error("The client template smoke requires --env dev.");
|
|
182
|
+
}
|
|
183
|
+
const { apiUrl, token } = await resolveConfig(rest);
|
|
184
|
+
const queued = await request2(apiUrl, token, "POST", `${COLLECTION}/smoke`);
|
|
185
|
+
const result = await waitForSmokeResult(apiUrl, token, queued.jobId);
|
|
186
|
+
const output = { ...result, jobId: queued.jobId };
|
|
187
|
+
emit(rest, output, describeSmokeResult(output));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (cmd === "create" || cmd === "delete") required(rest, "--org");
|
|
191
|
+
for (const flag of VALUE_FLAGS) {
|
|
192
|
+
if (rest.includes(flag) && getScalarArgValue(rest, flag) === void 0)
|
|
193
|
+
throw new Error(`${flag} requires a value.`);
|
|
194
|
+
}
|
|
195
|
+
if ((cmd === "get" || cmd === "delete") && !getPositionalArgs(rest, VALUE_FLAGS).length)
|
|
196
|
+
throw new Error(`Usage: cofactor mcp-eval client-env ${cmd} <id>`);
|
|
197
|
+
if (cmd === "create" && !getScalarArgValue(rest, "--name"))
|
|
198
|
+
throw new Error("--name is required.");
|
|
199
|
+
const repo = getScalarArgValue(rest, "--repo");
|
|
200
|
+
const commit = getScalarArgValue(rest, "--commit");
|
|
201
|
+
if (Boolean(repo) !== Boolean(commit))
|
|
202
|
+
throw new Error("--repo requires --commit, and --commit requires --repo.");
|
|
203
|
+
if (cmd === "delete" && target(rest, cmd).startsWith("catalog/"))
|
|
204
|
+
throw new Error("Catalog client environments are read-only.");
|
|
205
|
+
try {
|
|
206
|
+
const { apiUrl, token } = await resolveConfig(rest);
|
|
207
|
+
if (cmd === "list") {
|
|
208
|
+
const environments = await listEnvironments(apiUrl, token);
|
|
209
|
+
const text = environments.length ? environments.map(
|
|
210
|
+
(environment) => `${environment.id} ${environment.name}${environment.catalog ? " (catalog)" : ""}`
|
|
211
|
+
).join("\n") : "No client environments.";
|
|
212
|
+
emit(rest, environments, text);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (cmd === "get") {
|
|
216
|
+
const id2 = target(rest, cmd);
|
|
217
|
+
const environment = await request2(
|
|
218
|
+
apiUrl,
|
|
219
|
+
token,
|
|
220
|
+
"GET",
|
|
221
|
+
environmentPath(id2)
|
|
222
|
+
);
|
|
223
|
+
emit(rest, environment, describeEnvironment(environment));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (cmd === "create") {
|
|
227
|
+
const environment = await request2(apiUrl, token, "POST", COLLECTION, {
|
|
228
|
+
name: required(rest, "--name"),
|
|
229
|
+
repoUrl: repo ?? null,
|
|
230
|
+
commit: commit ?? null,
|
|
231
|
+
setup: getScalarArgValue(rest, "--setup") ?? null
|
|
232
|
+
});
|
|
233
|
+
emit(rest, environment, `Created ${environment.name} (${environment.id}).`);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const id = target(rest, cmd);
|
|
237
|
+
await request2(apiUrl, token, "DELETE", environmentPath(id));
|
|
238
|
+
emit(rest, { deleted: true, id }, `Deleted ${id}.`);
|
|
239
|
+
} catch (error) {
|
|
240
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
241
|
+
process2.exit(1);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// src/mcp-eval.ts
|
|
246
|
+
import { mkdir, mkdtemp, readFile, rm, writeFile } from "fs/promises";
|
|
247
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "path";
|
|
248
|
+
import { parse, stringify } from "yaml";
|
|
249
|
+
var USAGE = [
|
|
250
|
+
"client-env <list|get|create|delete|smoke> [options]",
|
|
251
|
+
"guide",
|
|
252
|
+
"init <name> [--application <app>]",
|
|
253
|
+
"push <file> --application <app>",
|
|
254
|
+
"run <name> [options]",
|
|
255
|
+
"add-case <file> --key <k> --title <t> --prompt <text> --check-type <artifact|state> --check-run <command>"
|
|
256
|
+
];
|
|
257
|
+
var MCP_EVAL_GUIDE = [
|
|
258
|
+
"MCP evals measure how off-the-shelf agents use an organization\u2019s MCP server, CLI, skills and docs.",
|
|
259
|
+
"Evals score your own agent; MCP evals score off-the-shelf agents using that tooling.",
|
|
260
|
+
"Client environments provide the agent workspace. Manage them with:",
|
|
261
|
+
" cofactor mcp-eval client-env <list|get|create|delete|smoke>"
|
|
262
|
+
].join("\n");
|
|
263
|
+
function printHelp2() {
|
|
264
|
+
console.log(
|
|
265
|
+
[
|
|
266
|
+
"Usage: cofactor mcp-eval <sub-command> [options]",
|
|
267
|
+
"",
|
|
268
|
+
...USAGE.map((line) => ` cofactor mcp-eval ${line}`),
|
|
269
|
+
"",
|
|
270
|
+
"guide: prints the MCP eval introduction without authentication.",
|
|
271
|
+
"Client environments are managed inside this namespace."
|
|
272
|
+
].join("\n")
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
var MCP_INIT = (name, application) => `version: 1
|
|
276
|
+
kind: mcp
|
|
277
|
+
name: ${name}
|
|
278
|
+
description: Measure how off-the-shelf agents use your MCP tooling.
|
|
279
|
+
application:
|
|
280
|
+
id: ${application || "<application>"}
|
|
281
|
+
commit: head
|
|
282
|
+
client: catalog/empty
|
|
283
|
+
tooling:
|
|
284
|
+
mcp:
|
|
285
|
+
port: mcp
|
|
286
|
+
auth:
|
|
287
|
+
header: Authorization
|
|
288
|
+
secret: MCP_TOKEN
|
|
289
|
+
agents:
|
|
290
|
+
# OpenCode needs an explicit provider: opencode/anthropic/<model> or opencode/azure/<model>.
|
|
291
|
+
- claude-code/claude-sonnet-4-6
|
|
292
|
+
cases:
|
|
293
|
+
- key: artifact-check
|
|
294
|
+
title: Verify a client artifact
|
|
295
|
+
prompt: Create the requested output.
|
|
296
|
+
check:
|
|
297
|
+
type: artifact
|
|
298
|
+
run: printf '%s\\n' '{"pass":false,"score":0,"reason":"Configure the artifact assertion before running"}'
|
|
299
|
+
- key: state-check
|
|
300
|
+
title: Verify application state
|
|
301
|
+
prompt: Create the requested record.
|
|
302
|
+
check:
|
|
303
|
+
type: state
|
|
304
|
+
run: printf '%s\\n' '{"pass":false,"score":0,"reason":"Configure the application state assertion before running"}'
|
|
305
|
+
attemptSeconds: 600
|
|
306
|
+
runbook: ${name}.runbook.md
|
|
307
|
+
`;
|
|
308
|
+
async function initMcp(argv) {
|
|
309
|
+
const name = getPositionalArg(argv, [...GLOBAL_VALUE_FLAGS, "--application"]);
|
|
310
|
+
if (!name || !/^[a-z0-9-]{2,40}$/.test(name)) throw new Error("Usage: cofactor mcp-eval init <name> [--application <app>]");
|
|
311
|
+
const dir = "evals";
|
|
312
|
+
await mkdir(dir, { recursive: true });
|
|
313
|
+
const file = join(dir, `${name}.mcp-eval.yaml`);
|
|
314
|
+
const runbook = join(dir, `${name}.runbook.md`);
|
|
315
|
+
try {
|
|
316
|
+
await writeFile(file, MCP_INIT(name, getScalarArgValue(argv, "--application") ?? ""), { flag: "wx" });
|
|
317
|
+
await writeFile(runbook, `# ${name} runbook
|
|
318
|
+
|
|
319
|
+
Describe the MCP tools and expected task outcomes.
|
|
320
|
+
`, { flag: "wx" });
|
|
321
|
+
} catch (error) {
|
|
322
|
+
throw new Error(`Cannot create MCP eval scaffold: ${error instanceof Error ? error.message : String(error)}`);
|
|
323
|
+
}
|
|
324
|
+
writeRawOutput(`Wrote ${file}
|
|
325
|
+
Wrote ${runbook}
|
|
326
|
+
Edit the application, tooling and checks, then run cofactor mcp-eval push ${file} --application <app> --org <org>`);
|
|
327
|
+
}
|
|
328
|
+
async function pushMcp(argv) {
|
|
329
|
+
const file = getPositionalArg(argv, [...GLOBAL_VALUE_FLAGS, "--application"]);
|
|
330
|
+
if (!file) throw new Error("Usage: cofactor mcp-eval push <file> --application <app> --org <org>");
|
|
331
|
+
if (!getScalarArgValue(argv, "--org")) throw new Error("--org is required for MCP eval push.");
|
|
332
|
+
if (!getScalarArgValue(argv, "--application")) throw new Error("--application is required for MCP eval push.");
|
|
333
|
+
const raw = parse(await readFile(file, "utf8"));
|
|
334
|
+
const parsed = McpAgentEvalDefinitionSchema.safeParse(raw);
|
|
335
|
+
if (!parsed.success) throw new Error(`Invalid MCP eval definition: ${parsed.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join("\n")}`);
|
|
336
|
+
const def = parsed.data;
|
|
337
|
+
const templateDir = resolve(dirname(file));
|
|
338
|
+
const runbookPath = resolve(templateDir, def.runbook);
|
|
339
|
+
const runbookRelative = relative(templateDir, runbookPath);
|
|
340
|
+
if (isAbsolute(def.runbook) || runbookRelative === ".." || runbookRelative.startsWith(`..${sep}`) || isAbsolute(runbookRelative)) {
|
|
341
|
+
throw new Error(`The template runbook (${def.runbook}) must stay inside its directory.`);
|
|
342
|
+
}
|
|
343
|
+
const runbook = await readFile(runbookPath, "utf8");
|
|
344
|
+
if (Buffer.byteLength(runbook, "utf8") > 64 * 1024) throw new Error("Runbook must not exceed 64 KiB.");
|
|
345
|
+
const { apiUrl, token } = await resolveConfig(argv);
|
|
346
|
+
const applicationId = await resolveApplicationId(argv, apiUrl, token);
|
|
347
|
+
if (extractUuid(def.application.id) !== applicationId) {
|
|
348
|
+
throw new Error(`The template application ${def.application.id} does not match --application.`);
|
|
349
|
+
}
|
|
350
|
+
const evaluation = await request(apiUrl, token, "PUT", EVALS, {
|
|
351
|
+
applicationId,
|
|
352
|
+
kind: "mcp",
|
|
353
|
+
definition: def,
|
|
354
|
+
runbook
|
|
355
|
+
});
|
|
356
|
+
const evalPath = `${EVALS}/${encodeURIComponent(evaluation.id)}`;
|
|
357
|
+
const temp = await mkdtemp(join(process.env.TMPDIR ?? "/tmp", "mcp-eval-"));
|
|
358
|
+
try {
|
|
359
|
+
for (const item of def.cases) {
|
|
360
|
+
const promptFile = join(temp, "prompt.txt");
|
|
361
|
+
await writeFile(promptFile, item.prompt);
|
|
362
|
+
const bundle = await loadBundle(temp);
|
|
363
|
+
const upload = bundle.bytes > AGENT_EVAL_MULTIPART_THRESHOLD ? (await uploadMultipart(apiUrl, token, evalPath, bundle), { status: "multipart" }) : await request(apiUrl, token, "POST", `${evalPath}/uploads`, {
|
|
364
|
+
sha256: bundle.sha256,
|
|
365
|
+
gzipSha256: bundle.gzipSha256,
|
|
366
|
+
bytes: bundle.bytes
|
|
367
|
+
});
|
|
368
|
+
if (upload.status === "upload") await uploadBundle(upload.url, upload.headers, bundle.archive);
|
|
369
|
+
await request(apiUrl, token, "POST", `${evalPath}/cases`, {
|
|
370
|
+
key: item.key,
|
|
371
|
+
title: item.title,
|
|
372
|
+
sha256: bundle.sha256,
|
|
373
|
+
expected: { prompt: item.prompt, check: item.check, client: item.client ?? def.client, ...item.judge ? { judge: item.judge } : {} },
|
|
374
|
+
source: "MCP eval template case",
|
|
375
|
+
replace: true
|
|
376
|
+
});
|
|
377
|
+
await writeFile(promptFile, "");
|
|
378
|
+
}
|
|
379
|
+
} finally {
|
|
380
|
+
await rm(temp, { recursive: true, force: true });
|
|
381
|
+
}
|
|
382
|
+
writeRawOutput(`Pushed MCP eval ${evaluation.name} (${evaluation.id}) with ${def.cases.length} cases.`);
|
|
383
|
+
}
|
|
384
|
+
async function addMcpCase(argv) {
|
|
385
|
+
const file = getPositionalArg(argv, [
|
|
386
|
+
...GLOBAL_VALUE_FLAGS,
|
|
387
|
+
"--key",
|
|
388
|
+
"--title",
|
|
389
|
+
"--prompt",
|
|
390
|
+
"--check-type",
|
|
391
|
+
"--check-run",
|
|
392
|
+
"--client"
|
|
393
|
+
]);
|
|
394
|
+
const key = getScalarArgValue(argv, "--key");
|
|
395
|
+
const title = getScalarArgValue(argv, "--title");
|
|
396
|
+
const prompt = getScalarArgValue(argv, "--prompt");
|
|
397
|
+
const type = getScalarArgValue(argv, "--check-type");
|
|
398
|
+
const run = getScalarArgValue(argv, "--check-run");
|
|
399
|
+
if (!file || !key || !title || !prompt || !run || type !== "artifact" && type !== "state") {
|
|
400
|
+
throw new Error("Usage: cofactor mcp-eval add-case <file> --key <k> --title <t> --prompt <text> --check-type <artifact|state> --check-run <command> [--client <client>]");
|
|
401
|
+
}
|
|
402
|
+
const raw = parse(await readFile(file, "utf8"));
|
|
403
|
+
const initial = McpAgentEvalDefinitionSchema.safeParse(raw);
|
|
404
|
+
if (!initial.success) throw new Error(`Invalid MCP eval definition: ${initial.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join("\n")}`);
|
|
405
|
+
const client = getScalarArgValue(argv, "--client");
|
|
406
|
+
const next = McpAgentEvalDefinitionSchema.parse({
|
|
407
|
+
...initial.data,
|
|
408
|
+
cases: [...initial.data.cases, { key, title, prompt, check: { type, run }, ...client ? { client } : {} }]
|
|
409
|
+
});
|
|
410
|
+
await writeFile(file, stringify(next));
|
|
411
|
+
writeRawOutput(`Added ${key} to ${file}. Push the template to update the stored MCP eval.`);
|
|
412
|
+
}
|
|
413
|
+
async function runMcpEvalCommand(argv) {
|
|
414
|
+
const [command, ...rest] = argv;
|
|
415
|
+
if (command === "client-env") {
|
|
416
|
+
await runClientEnvCommand(rest);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
if (command === "init") {
|
|
420
|
+
await initMcp(rest);
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
if (command === "push") {
|
|
424
|
+
await pushMcp(rest);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
if (command === "add-case") {
|
|
428
|
+
await addMcpCase(rest);
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
if (command === "run" || command === "add-case") {
|
|
432
|
+
const { runEvalCommand } = await import("./eval-37P36M53.js");
|
|
433
|
+
await runEvalCommand([command, ...rest]);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (!command || command === "help" || hasFlag(argv, "--help", "-h")) {
|
|
437
|
+
printHelp2();
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (command === "guide") {
|
|
441
|
+
writeRawOutput(MCP_EVAL_GUIDE);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
throw new Error(`Unknown MCP eval command: ${command}`);
|
|
445
|
+
}
|
|
446
|
+
export {
|
|
447
|
+
MCP_INIT,
|
|
448
|
+
runMcpEvalCommand
|
|
449
|
+
};
|
|
450
|
+
//# sourceMappingURL=mcp-eval-X4AGPFWW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client-env.ts","../src/mcp-eval.ts"],"sourcesContent":["/** `cofactor mcp-eval client-env`: list, inspect, create, and delete org-scoped client environments. */\nimport process from 'node:process';\nimport { GLOBAL_VALUE_FLAGS, hasFlag, resolveConfig } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport { apiRequest, getPositionalArgs, getScalarArgValue } from './cli-helpers.js';\n\nconst COLLECTION = '/client-environments';\nconst VALUE_FLAGS = [...GLOBAL_VALUE_FLAGS, '--app-url', '--name', '--repo', '--commit', '--setup'];\ntype Command = 'list' | 'get' | 'create' | 'delete' | 'smoke';\n\ntype ClientEnvironment = {\n id: string;\n name: string;\n repoUrl: string | null;\n commit: string | null;\n setup: string | null;\n catalog: boolean;\n};\ntype ClientEnvironmentListItem = Omit<ClientEnvironment, 'setup'>;\n\ntype ApiResponse<T> = { ok: boolean; error?: string; data?: T };\ntype ClientEnvironmentPage = ApiResponse<ClientEnvironmentListItem[]> & {\n pagination: { page: number; pageSize: number; totalItems: number; totalPages: number };\n};\n\nfunction printHelp(): void {\n console.log(\n [\n 'Usage: cofactor mcp-eval client-env <list|get|create|delete|smoke> [options]',\n '',\n ' list [--json] List catalog and org client environments',\n ' get <id|catalog/key> [--json] Show one environment',\n ' create --org <org> --name <name> [--repo <url> --commit <sha>] [--setup <script>]',\n ' delete <id> --org <org> [--json] Delete an org-owned environment',\n ' smoke --env dev [--json] Clone, snapshot and reclaim catalog/umami',\n '',\n 'An empty environment omits --repo and --commit. Catalog environments are read-only.',\n 'Common options: --env <prod|dev|local> --api-url <url> --token <key> --json',\n ].join('\\n')\n );\n}\n\ntype ClientSnapshotSmokeResult = {\n jobId: string;\n cacheHit: boolean;\n coldClaimMs: number;\n cloneMs: number;\n setupMs: number;\n snapshotMs: number;\n reclaimMs: number;\n verifiedCommit: string | null;\n};\n\nasync function waitForSmokeResult(apiUrl: string, token: string, jobId: string): Promise<ClientSnapshotSmokeResult> {\n const response = await fetch(`${apiUrl.replace(/\\/$/, '')}/jobs/${encodeURIComponent(jobId)}/stream`, {\n headers: { authorization: `Bearer ${token}`, accept: 'text/event-stream' },\n signal: AbortSignal.timeout(90 * 60_000),\n });\n if (!response.ok || !response.body) throw new Error(`Smoke job stream failed (${response.status}).`);\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n try {\n for (;;) {\n const chunk = await reader.read();\n if (chunk.done) break;\n buffer += decoder.decode(chunk.value, { stream: true });\n let boundary = buffer.indexOf('\\n\\n');\n while (boundary >= 0) {\n const frame = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n boundary = buffer.indexOf('\\n\\n');\n const event = frame.match(/^event:\\s*(.+)$/m)?.[1]?.trim();\n const data = frame.match(/^data:\\s*(.+)$/m)?.[1];\n if (!data) continue;\n if (event === 'client-snapshot-smoke') {\n const result = JSON.parse(data) as ClientSnapshotSmokeResult;\n await reader.cancel();\n return result;\n }\n if (event === 'status') {\n const status = JSON.parse(data) as { status?: string; error?: string };\n if (status.status === 'failed' || status.status === 'canceled') {\n throw new Error(status.error ?? `Smoke job ${status.status}.`);\n }\n if (status.status === 'completed') {\n throw new Error('Smoke job completed without recording timings.');\n }\n }\n if (event === 'error') {\n const failure = JSON.parse(data) as { error?: string; message?: string };\n throw new Error(failure.error ?? failure.message ?? 'Smoke job failed.');\n }\n if (event === 'complete') {\n throw new Error('Smoke job completed without recording timings.');\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n throw new Error('Smoke job stream ended before timings were recorded.');\n}\n\nfunction describeSmokeResult(result: ClientSnapshotSmokeResult): string {\n return [\n 'Client template smoke completed for catalog/umami.',\n `Pinned commit verified: ${result.verifiedCommit ?? 'not applicable'}`,\n `Cache hit: ${result.cacheHit ? 'yes' : 'no'}`,\n `Cold claim: ${result.coldClaimMs} ms`,\n `Clone: ${result.cloneMs} ms`,\n `Setup: ${result.setupMs} ms`,\n `Snapshot: ${result.snapshotMs} ms`,\n `Reclaim and restore verification: ${result.reclaimMs} ms`,\n ].join('\\n');\n}\n\nfunction required(argv: string[], flag: string): string {\n const value = getScalarArgValue(argv, flag);\n if (!value) throw new Error(`${flag} is required.`);\n return value;\n}\n\nfunction target(argv: string[], command: Command): string {\n const value = getPositionalArgs(argv, VALUE_FLAGS)[0];\n if (!value) throw new Error(`Usage: cofactor mcp-eval client-env ${command} <id>`);\n return value;\n}\n\nfunction environmentPath(id: string): string {\n if (id.startsWith('catalog/')) {\n const key = id.slice('catalog/'.length);\n if (!key || key.includes('/')) throw new Error('Catalog environment IDs use catalog/<key>.');\n return `${COLLECTION}/catalog/${encodeURIComponent(key)}`;\n }\n return `${COLLECTION}/${encodeURIComponent(id)}`;\n}\n\nfunction emit(argv: string[], data: unknown, text: string): void {\n writeRawOutput(hasFlag(argv, '--json') ? JSON.stringify(data, null, 2) : text);\n}\n\nfunction describeEnvironment(environment: ClientEnvironment): string {\n return [\n `Client environment: ${environment.name}`,\n `ID: ${environment.id}`,\n `Repository: ${environment.repoUrl ?? 'empty workspace'}`,\n `Commit: ${environment.commit ?? '—'}`,\n `Setup: ${environment.setup ?? 'none'}`,\n `Catalog: ${environment.catalog ? 'yes' : 'no'}`,\n ].join('\\n');\n}\n\nasync function request<T>(\n apiUrl: string,\n token: string,\n method: string,\n path: string,\n body?: Record<string, unknown>\n): Promise<T> {\n const response = await apiRequest<ApiResponse<T>>(apiUrl, token, method, path, body);\n if (!response.ok || response.data === undefined)\n throw new Error(response.error ?? `${method} ${path} failed.`);\n return response.data;\n}\n\nasync function listEnvironments(\n apiUrl: string,\n token: string\n): Promise<ClientEnvironmentListItem[]> {\n const environments: ClientEnvironmentListItem[] = [];\n for (let page = 1; ; page++) {\n const response = await apiRequest<ClientEnvironmentPage>(\n apiUrl,\n token,\n 'GET',\n `${COLLECTION}?page=${page}&pageSize=100`\n );\n if (!response.ok || response.data === undefined)\n throw new Error(response.error ?? `GET ${COLLECTION} failed.`);\n environments.push(...response.data);\n if (page >= response.pagination.totalPages) return environments;\n }\n}\n\nexport async function runClientEnvCommand(argv: string[]): Promise<void> {\n const [command, ...rest] = argv;\n if (!command || command === 'help' || hasFlag(argv, '--help', '-h')) {\n printHelp();\n return;\n }\n if (!['list', 'get', 'create', 'delete', 'smoke'].includes(command))\n throw new Error(`Unknown client environment command: ${command}`);\n const cmd = command as Command;\n if (cmd === 'smoke') {\n if (getScalarArgValue(rest, '--env') !== 'dev') {\n throw new Error('The client template smoke requires --env dev.');\n }\n const { apiUrl, token } = await resolveConfig(rest);\n const queued = await request<{ jobId: string }>(apiUrl, token, 'POST', `${COLLECTION}/smoke`);\n const result = await waitForSmokeResult(apiUrl, token, queued.jobId);\n const output = { ...result, jobId: queued.jobId };\n emit(rest, output, describeSmokeResult(output));\n return;\n }\n if (cmd === 'create' || cmd === 'delete') required(rest, '--org');\n for (const flag of VALUE_FLAGS) {\n if (rest.includes(flag) && getScalarArgValue(rest, flag) === undefined)\n throw new Error(`${flag} requires a value.`);\n }\n if ((cmd === 'get' || cmd === 'delete') && !getPositionalArgs(rest, VALUE_FLAGS).length)\n throw new Error(`Usage: cofactor mcp-eval client-env ${cmd} <id>`);\n if (cmd === 'create' && !getScalarArgValue(rest, '--name'))\n throw new Error('--name is required.');\n const repo = getScalarArgValue(rest, '--repo');\n const commit = getScalarArgValue(rest, '--commit');\n if (Boolean(repo) !== Boolean(commit))\n throw new Error('--repo requires --commit, and --commit requires --repo.');\n if (cmd === 'delete' && target(rest, cmd).startsWith('catalog/'))\n throw new Error('Catalog client environments are read-only.');\n\n try {\n const { apiUrl, token } = await resolveConfig(rest);\n if (cmd === 'list') {\n const environments = await listEnvironments(apiUrl, token);\n const text = environments.length\n ? environments\n .map(\n (environment) =>\n `${environment.id} ${environment.name}${environment.catalog ? ' (catalog)' : ''}`\n )\n .join('\\n')\n : 'No client environments.';\n emit(rest, environments, text);\n return;\n }\n if (cmd === 'get') {\n const id = target(rest, cmd);\n const environment = await request<ClientEnvironment>(\n apiUrl,\n token,\n 'GET',\n environmentPath(id)\n );\n emit(rest, environment, describeEnvironment(environment));\n return;\n }\n if (cmd === 'create') {\n const environment = await request<ClientEnvironment>(apiUrl, token, 'POST', COLLECTION, {\n name: required(rest, '--name'),\n repoUrl: repo ?? null,\n commit: commit ?? null,\n setup: getScalarArgValue(rest, '--setup') ?? null,\n });\n emit(rest, environment, `Created ${environment.name} (${environment.id}).`);\n return;\n }\n const id = target(rest, cmd);\n await request<{ deleted: boolean }>(apiUrl, token, 'DELETE', environmentPath(id));\n emit(rest, { deleted: true, id }, `Deleted ${id}.`);\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n","/** `cofactor mcp-eval`: MCP eval guidance and client-environment commands. */\nimport { GLOBAL_VALUE_FLAGS, hasFlag } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport { runClientEnvCommand } from './client-env.js';\nimport { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport { parse, stringify } from 'yaml';\nimport { McpAgentEvalDefinitionSchema } from '@chatsdet/types/agent-eval-template';\nimport { resolveConfig } from './auth.js';\nimport { getPositionalArg, getScalarArgValue } from './cli-helpers.js';\nimport { resolveApplicationId } from './environment.js';\nimport { EVALS, request, type UploadReply } from './eval-api.js';\nimport { loadBundle, uploadBundle } from './eval-bundle.js';\nimport { AGENT_EVAL_MULTIPART_THRESHOLD } from '@chatsdet/types/agent-eval-template';\nimport { uploadMultipart } from './eval-multipart.js';\nimport { extractUuid } from '@chatsdet/ids';\n\nconst USAGE = [\n 'client-env <list|get|create|delete|smoke> [options]',\n 'guide',\n 'init <name> [--application <app>]',\n 'push <file> --application <app>',\n 'run <name> [options]',\n 'add-case <file> --key <k> --title <t> --prompt <text> --check-type <artifact|state> --check-run <command>',\n];\n\nconst MCP_EVAL_GUIDE = [\n 'MCP evals measure how off-the-shelf agents use an organization’s MCP server, CLI, skills and docs.',\n 'Evals score your own agent; MCP evals score off-the-shelf agents using that tooling.',\n 'Client environments provide the agent workspace. Manage them with:',\n ' cofactor mcp-eval client-env <list|get|create|delete|smoke>',\n].join('\\n');\n\nfunction printHelp(): void {\n console.log(\n [\n 'Usage: cofactor mcp-eval <sub-command> [options]',\n '',\n ...USAGE.map((line) => ` cofactor mcp-eval ${line}`),\n '',\n 'guide: prints the MCP eval introduction without authentication.',\n 'Client environments are managed inside this namespace.',\n ].join('\\n')\n );\n}\n\nexport const MCP_INIT = (name: string, application: string) => `version: 1\nkind: mcp\nname: ${name}\ndescription: Measure how off-the-shelf agents use your MCP tooling.\napplication:\n id: ${application || '<application>'}\n commit: head\nclient: catalog/empty\ntooling:\n mcp:\n port: mcp\n auth:\n header: Authorization\n secret: MCP_TOKEN\nagents:\n # OpenCode needs an explicit provider: opencode/anthropic/<model> or opencode/azure/<model>.\n - claude-code/claude-sonnet-4-6\ncases:\n - key: artifact-check\n title: Verify a client artifact\n prompt: Create the requested output.\n check:\n type: artifact\n run: printf '%s\\\\n' '{\"pass\":false,\"score\":0,\"reason\":\"Configure the artifact assertion before running\"}'\n - key: state-check\n title: Verify application state\n prompt: Create the requested record.\n check:\n type: state\n run: printf '%s\\\\n' '{\"pass\":false,\"score\":0,\"reason\":\"Configure the application state assertion before running\"}'\nattemptSeconds: 600\nrunbook: ${name}.runbook.md\n`;\n\nasync function initMcp(argv: string[]): Promise<void> {\n const name = getPositionalArg(argv, [...GLOBAL_VALUE_FLAGS, '--application']);\n if (!name || !/^[a-z0-9-]{2,40}$/.test(name)) throw new Error('Usage: cofactor mcp-eval init <name> [--application <app>]');\n const dir = 'evals';\n await mkdir(dir, { recursive: true });\n const file = join(dir, `${name}.mcp-eval.yaml`);\n const runbook = join(dir, `${name}.runbook.md`);\n try {\n await writeFile(file, MCP_INIT(name, getScalarArgValue(argv, '--application') ?? ''), { flag: 'wx' });\n await writeFile(runbook, `# ${name} runbook\\n\\nDescribe the MCP tools and expected task outcomes.\\n`, { flag: 'wx' });\n } catch (error) {\n throw new Error(`Cannot create MCP eval scaffold: ${error instanceof Error ? error.message : String(error)}`);\n }\n writeRawOutput(`Wrote ${file}\\nWrote ${runbook}\\nEdit the application, tooling and checks, then run cofactor mcp-eval push ${file} --application <app> --org <org>`);\n}\n\nasync function pushMcp(argv: string[]): Promise<void> {\n const file = getPositionalArg(argv, [...GLOBAL_VALUE_FLAGS, '--application']);\n if (!file) throw new Error('Usage: cofactor mcp-eval push <file> --application <app> --org <org>');\n if (!getScalarArgValue(argv, '--org')) throw new Error('--org is required for MCP eval push.');\n if (!getScalarArgValue(argv, '--application')) throw new Error('--application is required for MCP eval push.');\n const raw = parse(await readFile(file, 'utf8'));\n const parsed = McpAgentEvalDefinitionSchema.safeParse(raw);\n if (!parsed.success) throw new Error(`Invalid MCP eval definition: ${parsed.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`).join('\\n')}`);\n const def = parsed.data;\n const templateDir = resolve(dirname(file));\n const runbookPath = resolve(templateDir, def.runbook);\n const runbookRelative = relative(templateDir, runbookPath);\n if (isAbsolute(def.runbook) || runbookRelative === '..' || runbookRelative.startsWith(`..${sep}`) || isAbsolute(runbookRelative)) {\n throw new Error(`The template runbook (${def.runbook}) must stay inside its directory.`);\n }\n const runbook = await readFile(runbookPath, 'utf8');\n if (Buffer.byteLength(runbook, 'utf8') > 64 * 1024) throw new Error('Runbook must not exceed 64 KiB.');\n const { apiUrl, token } = await resolveConfig(argv);\n const applicationId = await resolveApplicationId(argv, apiUrl, token);\n if (extractUuid(def.application.id) !== applicationId) {\n throw new Error(`The template application ${def.application.id} does not match --application.`);\n }\n const evaluation = await request<{ id: string; name: string }>(apiUrl, token, 'PUT', EVALS, {\n applicationId,\n kind: 'mcp',\n definition: def,\n runbook,\n });\n const evalPath = `${EVALS}/${encodeURIComponent(evaluation.id)}`;\n const temp = await mkdtemp(join(process.env.TMPDIR ?? '/tmp', 'mcp-eval-'));\n try {\n for (const item of def.cases) {\n const promptFile = join(temp, 'prompt.txt');\n await writeFile(promptFile, item.prompt);\n const bundle = await loadBundle(temp);\n const upload = bundle.bytes > AGENT_EVAL_MULTIPART_THRESHOLD\n ? (await uploadMultipart(apiUrl, token, evalPath, bundle), { status: 'multipart' as const })\n : await request<UploadReply>(apiUrl, token, 'POST', `${evalPath}/uploads`, {\n sha256: bundle.sha256, gzipSha256: bundle.gzipSha256, bytes: bundle.bytes,\n });\n if (upload.status === 'upload') await uploadBundle(upload.url, upload.headers, bundle.archive);\n await request(apiUrl, token, 'POST', `${evalPath}/cases`, {\n key: item.key, title: item.title, sha256: bundle.sha256,\n expected: { prompt: item.prompt, check: item.check, client: item.client ?? def.client, ...(item.judge ? { judge: item.judge } : {}) },\n source: 'MCP eval template case', replace: true,\n });\n await writeFile(promptFile, '');\n }\n } finally {\n await rm(temp, { recursive: true, force: true });\n }\n writeRawOutput(`Pushed MCP eval ${evaluation.name} (${evaluation.id}) with ${def.cases.length} cases.`);\n}\n\nasync function addMcpCase(argv: string[]): Promise<void> {\n const file = getPositionalArg(argv, [\n ...GLOBAL_VALUE_FLAGS, '--key', '--title', '--prompt', '--check-type', '--check-run', '--client',\n ]);\n const key = getScalarArgValue(argv, '--key');\n const title = getScalarArgValue(argv, '--title');\n const prompt = getScalarArgValue(argv, '--prompt');\n const type = getScalarArgValue(argv, '--check-type');\n const run = getScalarArgValue(argv, '--check-run');\n if (!file || !key || !title || !prompt || !run || (type !== 'artifact' && type !== 'state')) {\n throw new Error('Usage: cofactor mcp-eval add-case <file> --key <k> --title <t> --prompt <text> --check-type <artifact|state> --check-run <command> [--client <client>]');\n }\n const raw = parse(await readFile(file, 'utf8'));\n const initial = McpAgentEvalDefinitionSchema.safeParse(raw);\n if (!initial.success) throw new Error(`Invalid MCP eval definition: ${initial.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`).join('\\n')}`);\n const client = getScalarArgValue(argv, '--client');\n const next = McpAgentEvalDefinitionSchema.parse({\n ...initial.data,\n cases: [...initial.data.cases, { key, title, prompt, check: { type, run }, ...(client ? { client } : {}) }],\n });\n await writeFile(file, stringify(next));\n writeRawOutput(`Added ${key} to ${file}. Push the template to update the stored MCP eval.`);\n}\n\nexport async function runMcpEvalCommand(argv: string[]): Promise<void> {\n const [command, ...rest] = argv;\n if (command === 'client-env') {\n await runClientEnvCommand(rest);\n return;\n }\n if (command === 'init') { await initMcp(rest); return; }\n if (command === 'push') { await pushMcp(rest); return; }\n if (command === 'add-case') { await addMcpCase(rest); return; }\n if (command === 'run' || command === 'add-case') {\n const { runEvalCommand } = await import('./eval.js');\n await runEvalCommand([command, ...rest]);\n return;\n }\n if (!command || command === 'help' || hasFlag(argv, '--help', '-h')) {\n printHelp();\n return;\n }\n if (command === 'guide') {\n writeRawOutput(MCP_EVAL_GUIDE);\n return;\n }\n throw new Error(`Unknown MCP eval command: ${command}`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAOA,cAAa;AAKpB,IAAM,aAAa;AACnB,IAAM,cAAc,CAAC,GAAG,oBAAoB,aAAa,UAAU,UAAU,YAAY,SAAS;AAkBlG,SAAS,YAAkB;AACzB,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAaA,eAAe,mBAAmB,QAAgB,OAAe,OAAmD;AAClH,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,OAAO,EAAE,CAAC,SAAS,mBAAmB,KAAK,CAAC,WAAW;AAAA,IACpG,SAAS,EAAE,eAAe,UAAU,KAAK,IAAI,QAAQ,oBAAoB;AAAA,IACzE,QAAQ,YAAY,QAAQ,KAAK,GAAM;AAAA,EACzC,CAAC;AACD,MAAI,CAAC,SAAS,MAAM,CAAC,SAAS,KAAM,OAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,IAAI;AAEnG,QAAM,SAAS,SAAS,KAAK,UAAU;AACvC,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI;AACF,eAAS;AACP,YAAM,QAAQ,MAAM,OAAO,KAAK;AAChC,UAAI,MAAM,KAAM;AAChB,gBAAU,QAAQ,OAAO,MAAM,OAAO,EAAE,QAAQ,KAAK,CAAC;AACtD,UAAI,WAAW,OAAO,QAAQ,MAAM;AACpC,aAAO,YAAY,GAAG;AACpB,cAAM,QAAQ,OAAO,MAAM,GAAG,QAAQ;AACtC,iBAAS,OAAO,MAAM,WAAW,CAAC;AAClC,mBAAW,OAAO,QAAQ,MAAM;AAChC,cAAM,QAAQ,MAAM,MAAM,kBAAkB,IAAI,CAAC,GAAG,KAAK;AACzD,cAAM,OAAO,MAAM,MAAM,iBAAiB,IAAI,CAAC;AAC/C,YAAI,CAAC,KAAM;AACX,YAAI,UAAU,yBAAyB;AACrC,gBAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,gBAAM,OAAO,OAAO;AACpB,iBAAO;AAAA,QACT;AACA,YAAI,UAAU,UAAU;AACtB,gBAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,cAAI,OAAO,WAAW,YAAY,OAAO,WAAW,YAAY;AAC9D,kBAAM,IAAI,MAAM,OAAO,SAAS,aAAa,OAAO,MAAM,GAAG;AAAA,UAC/D;AACA,cAAI,OAAO,WAAW,aAAa;AACjC,kBAAM,IAAI,MAAM,gDAAgD;AAAA,UAClE;AAAA,QACF;AACA,YAAI,UAAU,SAAS;AACrB,gBAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,gBAAM,IAAI,MAAM,QAAQ,SAAS,QAAQ,WAAW,mBAAmB;AAAA,QACzE;AACA,YAAI,UAAU,YAAY;AACxB,gBAAM,IAAI,MAAM,gDAAgD;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACA,QAAM,IAAI,MAAM,sDAAsD;AACxE;AAEA,SAAS,oBAAoB,QAA2C;AACtE,SAAO;AAAA,IACL;AAAA,IACA,2BAA2B,OAAO,kBAAkB,gBAAgB;AAAA,IACpE,cAAc,OAAO,WAAW,QAAQ,IAAI;AAAA,IAC5C,eAAe,OAAO,WAAW;AAAA,IACjC,UAAU,OAAO,OAAO;AAAA,IACxB,UAAU,OAAO,OAAO;AAAA,IACxB,aAAa,OAAO,UAAU;AAAA,IAC9B,qCAAqC,OAAO,SAAS;AAAA,EACvD,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,SAAS,MAAgB,MAAsB;AACtD,QAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,GAAG,IAAI,eAAe;AAClD,SAAO;AACT;AAEA,SAAS,OAAO,MAAgB,SAA0B;AACxD,QAAM,QAAQ,kBAAkB,MAAM,WAAW,EAAE,CAAC;AACpD,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,uCAAuC,OAAO,OAAO;AACjF,SAAO;AACT;AAEA,SAAS,gBAAgB,IAAoB;AAC3C,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAM,MAAM,GAAG,MAAM,WAAW,MAAM;AACtC,QAAI,CAAC,OAAO,IAAI,SAAS,GAAG,EAAG,OAAM,IAAI,MAAM,4CAA4C;AAC3F,WAAO,GAAG,UAAU,YAAY,mBAAmB,GAAG,CAAC;AAAA,EACzD;AACA,SAAO,GAAG,UAAU,IAAI,mBAAmB,EAAE,CAAC;AAChD;AAEA,SAAS,KAAK,MAAgB,MAAe,MAAoB;AAC/D,iBAAe,QAAQ,MAAM,QAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AAC/E;AAEA,SAAS,oBAAoB,aAAwC;AACnE,SAAO;AAAA,IACL,uBAAuB,YAAY,IAAI;AAAA,IACvC,OAAO,YAAY,EAAE;AAAA,IACrB,eAAe,YAAY,WAAW,iBAAiB;AAAA,IACvD,WAAW,YAAY,UAAU,QAAG;AAAA,IACpC,UAAU,YAAY,SAAS,MAAM;AAAA,IACrC,YAAY,YAAY,UAAU,QAAQ,IAAI;AAAA,EAChD,EAAE,KAAK,IAAI;AACb;AAEA,eAAeC,SACb,QACA,OACA,QACA,MACA,MACY;AACZ,QAAM,WAAW,MAAM,WAA2B,QAAQ,OAAO,QAAQ,MAAM,IAAI;AACnF,MAAI,CAAC,SAAS,MAAM,SAAS,SAAS;AACpC,UAAM,IAAI,MAAM,SAAS,SAAS,GAAG,MAAM,IAAI,IAAI,UAAU;AAC/D,SAAO,SAAS;AAClB;AAEA,eAAe,iBACb,QACA,OACsC;AACtC,QAAM,eAA4C,CAAC;AACnD,WAAS,OAAO,KAAK,QAAQ;AAC3B,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,UAAU,SAAS,IAAI;AAAA,IAC5B;AACA,QAAI,CAAC,SAAS,MAAM,SAAS,SAAS;AACpC,YAAM,IAAI,MAAM,SAAS,SAAS,OAAO,UAAU,UAAU;AAC/D,iBAAa,KAAK,GAAG,SAAS,IAAI;AAClC,QAAI,QAAQ,SAAS,WAAW,WAAY,QAAO;AAAA,EACrD;AACF;AAEA,eAAsB,oBAAoB,MAA+B;AACvE,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,MAAI,CAAC,WAAW,YAAY,UAAU,QAAQ,MAAM,UAAU,IAAI,GAAG;AACnE,cAAU;AACV;AAAA,EACF;AACA,MAAI,CAAC,CAAC,QAAQ,OAAO,UAAU,UAAU,OAAO,EAAE,SAAS,OAAO;AAChE,UAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAClE,QAAM,MAAM;AACZ,MAAI,QAAQ,SAAS;AACnB,QAAI,kBAAkB,MAAM,OAAO,MAAM,OAAO;AAC9C,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AACA,UAAM,EAAE,QAAQ,MAAM,IAAI,MAAM,cAAc,IAAI;AAClD,UAAM,SAAS,MAAMA,SAA2B,QAAQ,OAAO,QAAQ,GAAG,UAAU,QAAQ;AAC5F,UAAM,SAAS,MAAM,mBAAmB,QAAQ,OAAO,OAAO,KAAK;AACnE,UAAM,SAAS,EAAE,GAAG,QAAQ,OAAO,OAAO,MAAM;AAChD,SAAK,MAAM,QAAQ,oBAAoB,MAAM,CAAC;AAC9C;AAAA,EACF;AACA,MAAI,QAAQ,YAAY,QAAQ,SAAU,UAAS,MAAM,OAAO;AAChE,aAAW,QAAQ,aAAa;AAC9B,QAAI,KAAK,SAAS,IAAI,KAAK,kBAAkB,MAAM,IAAI,MAAM;AAC3D,YAAM,IAAI,MAAM,GAAG,IAAI,oBAAoB;AAAA,EAC/C;AACA,OAAK,QAAQ,SAAS,QAAQ,aAAa,CAAC,kBAAkB,MAAM,WAAW,EAAE;AAC/E,UAAM,IAAI,MAAM,uCAAuC,GAAG,OAAO;AACnE,MAAI,QAAQ,YAAY,CAAC,kBAAkB,MAAM,QAAQ;AACvD,UAAM,IAAI,MAAM,qBAAqB;AACvC,QAAM,OAAO,kBAAkB,MAAM,QAAQ;AAC7C,QAAM,SAAS,kBAAkB,MAAM,UAAU;AACjD,MAAI,QAAQ,IAAI,MAAM,QAAQ,MAAM;AAClC,UAAM,IAAI,MAAM,yDAAyD;AAC3E,MAAI,QAAQ,YAAY,OAAO,MAAM,GAAG,EAAE,WAAW,UAAU;AAC7D,UAAM,IAAI,MAAM,4CAA4C;AAE9D,MAAI;AACF,UAAM,EAAE,QAAQ,MAAM,IAAI,MAAM,cAAc,IAAI;AAClD,QAAI,QAAQ,QAAQ;AAClB,YAAM,eAAe,MAAM,iBAAiB,QAAQ,KAAK;AACzD,YAAM,OAAO,aAAa,SACtB,aACG;AAAA,QACC,CAAC,gBACC,GAAG,YAAY,EAAE,KAAK,YAAY,IAAI,GAAG,YAAY,UAAU,gBAAgB,EAAE;AAAA,MACrF,EACC,KAAK,IAAI,IACZ;AACJ,WAAK,MAAM,cAAc,IAAI;AAC7B;AAAA,IACF;AACA,QAAI,QAAQ,OAAO;AACjB,YAAMC,MAAK,OAAO,MAAM,GAAG;AAC3B,YAAM,cAAc,MAAMD;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgBC,GAAE;AAAA,MACpB;AACA,WAAK,MAAM,aAAa,oBAAoB,WAAW,CAAC;AACxD;AAAA,IACF;AACA,QAAI,QAAQ,UAAU;AACpB,YAAM,cAAc,MAAMD,SAA2B,QAAQ,OAAO,QAAQ,YAAY;AAAA,QACtF,MAAM,SAAS,MAAM,QAAQ;AAAA,QAC7B,SAAS,QAAQ;AAAA,QACjB,QAAQ,UAAU;AAAA,QAClB,OAAO,kBAAkB,MAAM,SAAS,KAAK;AAAA,MAC/C,CAAC;AACD,WAAK,MAAM,aAAa,WAAW,YAAY,IAAI,KAAK,YAAY,EAAE,IAAI;AAC1E;AAAA,IACF;AACA,UAAM,KAAK,OAAO,MAAM,GAAG;AAC3B,UAAMA,SAA8B,QAAQ,OAAO,UAAU,gBAAgB,EAAE,CAAC;AAChF,SAAK,MAAM,EAAE,SAAS,MAAM,GAAG,GAAG,WAAW,EAAE,GAAG;AAAA,EACpD,SAAS,OAAO;AACd,YAAQ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAChF,IAAAE,SAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;ACrQA,SAAS,OAAO,SAAS,UAAU,IAAI,iBAAiB;AACxD,SAAS,SAAS,YAAY,MAAM,UAAU,SAAS,WAAW;AAClE,SAAS,OAAO,iBAAiB;AAWjC,IAAM,QAAQ;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAEX,SAASC,aAAkB;AACzB,UAAQ;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA,GAAG,MAAM,IAAI,CAAC,SAAS,uBAAuB,IAAI,EAAE;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEO,IAAM,WAAW,CAAC,MAAc,gBAAwB;AAAA;AAAA,QAEvD,IAAI;AAAA;AAAA;AAAA,QAGJ,eAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WA0B3B,IAAI;AAAA;AAGf,eAAe,QAAQ,MAA+B;AACpD,QAAM,OAAO,iBAAiB,MAAM,CAAC,GAAG,oBAAoB,eAAe,CAAC;AAC5E,MAAI,CAAC,QAAQ,CAAC,oBAAoB,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,4DAA4D;AAC1H,QAAM,MAAM;AACZ,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,QAAM,OAAO,KAAK,KAAK,GAAG,IAAI,gBAAgB;AAC9C,QAAM,UAAU,KAAK,KAAK,GAAG,IAAI,aAAa;AAC9C,MAAI;AACF,UAAM,UAAU,MAAM,SAAS,MAAM,kBAAkB,MAAM,eAAe,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AACpG,UAAM,UAAU,SAAS,KAAK,IAAI;AAAA;AAAA;AAAA,GAAoE,EAAE,MAAM,KAAK,CAAC;AAAA,EACtH,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,oCAAoC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EAC9G;AACA,iBAAe,SAAS,IAAI;AAAA,QAAW,OAAO;AAAA,4EAA+E,IAAI,kCAAkC;AACrK;AAEA,eAAe,QAAQ,MAA+B;AACpD,QAAM,OAAO,iBAAiB,MAAM,CAAC,GAAG,oBAAoB,eAAe,CAAC;AAC5E,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sEAAsE;AACjG,MAAI,CAAC,kBAAkB,MAAM,OAAO,EAAG,OAAM,IAAI,MAAM,sCAAsC;AAC7F,MAAI,CAAC,kBAAkB,MAAM,eAAe,EAAG,OAAM,IAAI,MAAM,8CAA8C;AAC7G,QAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC;AAC9C,QAAM,SAAS,6BAA6B,UAAU,GAAG;AACzD,MAAI,CAAC,OAAO,QAAS,OAAM,IAAI,MAAM,gCAAgC,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AACjK,QAAM,MAAM,OAAO;AACnB,QAAM,cAAc,QAAQ,QAAQ,IAAI,CAAC;AACzC,QAAM,cAAc,QAAQ,aAAa,IAAI,OAAO;AACpD,QAAM,kBAAkB,SAAS,aAAa,WAAW;AACzD,MAAI,WAAW,IAAI,OAAO,KAAK,oBAAoB,QAAQ,gBAAgB,WAAW,KAAK,GAAG,EAAE,KAAK,WAAW,eAAe,GAAG;AAChI,UAAM,IAAI,MAAM,yBAAyB,IAAI,OAAO,mCAAmC;AAAA,EACzF;AACA,QAAM,UAAU,MAAM,SAAS,aAAa,MAAM;AAClD,MAAI,OAAO,WAAW,SAAS,MAAM,IAAI,KAAK,KAAM,OAAM,IAAI,MAAM,iCAAiC;AACrG,QAAM,EAAE,QAAQ,MAAM,IAAI,MAAM,cAAc,IAAI;AAClD,QAAM,gBAAgB,MAAM,qBAAqB,MAAM,QAAQ,KAAK;AACpE,MAAI,YAAY,IAAI,YAAY,EAAE,MAAM,eAAe;AACrD,UAAM,IAAI,MAAM,4BAA4B,IAAI,YAAY,EAAE,gCAAgC;AAAA,EAChG;AACA,QAAM,aAAa,MAAM,QAAsC,QAAQ,OAAO,OAAO,OAAO;AAAA,IAC1F;AAAA,IACA,MAAM;AAAA,IACN,YAAY;AAAA,IACZ;AAAA,EACF,CAAC;AACD,QAAM,WAAW,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC;AAC9D,QAAM,OAAO,MAAM,QAAQ,KAAK,QAAQ,IAAI,UAAU,QAAQ,WAAW,CAAC;AAC1E,MAAI;AACF,eAAW,QAAQ,IAAI,OAAO;AAC5B,YAAM,aAAa,KAAK,MAAM,YAAY;AAC1C,YAAM,UAAU,YAAY,KAAK,MAAM;AACvC,YAAM,SAAS,MAAM,WAAW,IAAI;AACpC,YAAM,SAAS,OAAO,QAAQ,kCACzB,MAAM,gBAAgB,QAAQ,OAAO,UAAU,MAAM,GAAG,EAAE,QAAQ,YAAqB,KACxF,MAAM,QAAqB,QAAQ,OAAO,QAAQ,GAAG,QAAQ,YAAY;AAAA,QACvE,QAAQ,OAAO;AAAA,QAAQ,YAAY,OAAO;AAAA,QAAY,OAAO,OAAO;AAAA,MACtE,CAAC;AACL,UAAI,OAAO,WAAW,SAAU,OAAM,aAAa,OAAO,KAAK,OAAO,SAAS,OAAO,OAAO;AAC7F,YAAM,QAAQ,QAAQ,OAAO,QAAQ,GAAG,QAAQ,UAAU;AAAA,QACxD,KAAK,KAAK;AAAA,QAAK,OAAO,KAAK;AAAA,QAAO,QAAQ,OAAO;AAAA,QACjD,UAAU,EAAE,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC,EAAG;AAAA,QACpI,QAAQ;AAAA,QAA0B,SAAS;AAAA,MAC7C,CAAC;AACD,YAAM,UAAU,YAAY,EAAE;AAAA,IAChC;AAAA,EACF,UAAE;AACA,UAAM,GAAG,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACjD;AACA,iBAAe,mBAAmB,WAAW,IAAI,KAAK,WAAW,EAAE,UAAU,IAAI,MAAM,MAAM,SAAS;AACxG;AAEA,eAAe,WAAW,MAA+B;AACvD,QAAM,OAAO,iBAAiB,MAAM;AAAA,IAClC,GAAG;AAAA,IAAoB;AAAA,IAAS;AAAA,IAAW;AAAA,IAAY;AAAA,IAAgB;AAAA,IAAe;AAAA,EACxF,CAAC;AACD,QAAM,MAAM,kBAAkB,MAAM,OAAO;AAC3C,QAAM,QAAQ,kBAAkB,MAAM,SAAS;AAC/C,QAAM,SAAS,kBAAkB,MAAM,UAAU;AACjD,QAAM,OAAO,kBAAkB,MAAM,cAAc;AACnD,QAAM,MAAM,kBAAkB,MAAM,aAAa;AACjD,MAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAQ,SAAS,cAAc,SAAS,SAAU;AAC3F,UAAM,IAAI,MAAM,wJAAwJ;AAAA,EAC1K;AACA,QAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC;AAC9C,QAAM,UAAU,6BAA6B,UAAU,GAAG;AAC1D,MAAI,CAAC,QAAQ,QAAS,OAAM,IAAI,MAAM,gCAAgC,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAU,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AACnK,QAAM,SAAS,kBAAkB,MAAM,UAAU;AACjD,QAAM,OAAO,6BAA6B,MAAM;AAAA,IAC9C,GAAG,QAAQ;AAAA,IACX,OAAO,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,KAAK,OAAO,QAAQ,OAAO,EAAE,MAAM,IAAI,GAAG,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC,EAAG,CAAC;AAAA,EAC5G,CAAC;AACD,QAAM,UAAU,MAAM,UAAU,IAAI,CAAC;AACrC,iBAAe,SAAS,GAAG,OAAO,IAAI,oDAAoD;AAC5F;AAEA,eAAsB,kBAAkB,MAA+B;AACrE,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,MAAI,YAAY,cAAc;AAC5B,UAAM,oBAAoB,IAAI;AAC9B;AAAA,EACF;AACA,MAAI,YAAY,QAAQ;AAAE,UAAM,QAAQ,IAAI;AAAG;AAAA,EAAQ;AACvD,MAAI,YAAY,QAAQ;AAAE,UAAM,QAAQ,IAAI;AAAG;AAAA,EAAQ;AACvD,MAAI,YAAY,YAAY;AAAE,UAAM,WAAW,IAAI;AAAG;AAAA,EAAQ;AAC9D,MAAI,YAAY,SAAS,YAAY,YAAY;AAC/C,UAAM,EAAE,eAAe,IAAI,MAAM,OAAO,oBAAW;AACnD,UAAM,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC;AACvC;AAAA,EACF;AACA,MAAI,CAAC,WAAW,YAAY,UAAU,QAAQ,MAAM,UAAU,IAAI,GAAG;AACnE,IAAAA,WAAU;AACV;AAAA,EACF;AACA,MAAI,YAAY,SAAS;AACvB,mBAAe,cAAc;AAC7B;AAAA,EACF;AACA,QAAM,IAAI,MAAM,6BAA6B,OAAO,EAAE;AACxD;","names":["process","request","id","process","printHelp"]}
|