@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.
Files changed (248) hide show
  1. package/README.md +40 -0
  2. package/dist/{account-S7VHLHYX.js → account-CWSADXJD.js} +5 -5
  3. package/dist/{alert-DZUI3JEU.js → alert-VEZZJPIH.js} +8 -8
  4. package/dist/{api-catalog-WP6AQYUG.js → api-catalog-OBE6ITCJ.js} +5 -5
  5. package/dist/{api-key-U57EC2YF.js → api-key-265DBPSR.js} +5 -5
  6. package/dist/{attachment-MICVVXUW.js → attachment-QE65VNDG.js} +5 -5
  7. package/dist/{auth-UDD77PG6.js → auth-DG6RD4UA.js} +3 -3
  8. package/dist/{benchmark-Q5BVGQ3I.js → benchmark-3R75GENH.js} +5 -5
  9. package/dist/billing-AGY6VUCA.js +64 -0
  10. package/dist/billing-AGY6VUCA.js.map +1 -0
  11. package/dist/{blackcat-TZNSDQAC.js → blackcat-EKZS3TBD.js} +3 -3
  12. package/dist/{chunk-AHS2HMEH.js → chunk-4KFJQPJF.js} +3 -3
  13. package/dist/{chunk-LP4X7TWI.js → chunk-56WV7CFM.js} +2 -2
  14. package/dist/{chunk-3EKIGWMN.js → chunk-A6VDLUMH.js} +3 -3
  15. package/dist/{chunk-XQZJWDM4.js → chunk-B7G4TOYC.js} +5 -5
  16. package/dist/{chunk-U3MXJTTD.js → chunk-BDPNJKUZ.js} +10 -10
  17. package/dist/{chunk-IIDQM4MY.js → chunk-BMFD4OPC.js} +2 -2
  18. package/dist/{chunk-EYHJ5FIA.js → chunk-C6SNLHVE.js} +10 -1
  19. package/dist/chunk-C6SNLHVE.js.map +1 -0
  20. package/dist/{chunk-T5MU76RA.js → chunk-C77XIO2W.js} +4 -4
  21. package/dist/{chunk-FBEQNW2P.js → chunk-DFN2NH37.js} +2 -2
  22. package/dist/{chunk-4SQKKD3R.js → chunk-EDX47DXT.js} +2 -2
  23. package/dist/{chunk-BSCEOIYX.js → chunk-FQ6P522C.js} +2 -2
  24. package/dist/{chunk-6IMNRYC3.js → chunk-GQSW6ZY3.js} +5 -5
  25. package/dist/{chunk-4GDEKB5S.js → chunk-GVNSCSIC.js} +4 -4
  26. package/dist/{chunk-W4P6BGJ7.js → chunk-IN3AF6LI.js} +4 -4
  27. package/dist/{chunk-CZOYFKTY.js → chunk-IVJU3LP6.js} +3 -3
  28. package/dist/{chunk-H2K3ABPO.js → chunk-K54XL64A.js} +6 -6
  29. package/dist/{chunk-T6ZNIMI4.js → chunk-LRIP5IQD.js} +3 -3
  30. package/dist/chunk-LRIP5IQD.js.map +1 -0
  31. package/dist/{chunk-T6KTBHWD.js → chunk-LZLSRN5Q.js} +6 -6
  32. package/dist/{chunk-YILSW5ZY.js → chunk-MCJOF3JX.js} +4 -4
  33. package/dist/{chunk-SBQLD7X6.js → chunk-PN5IK7CJ.js} +2 -2
  34. package/dist/{chunk-K3MG2ZMH.js → chunk-RIBSXEAM.js} +2 -2
  35. package/dist/{chunk-DTB5HUD2.js → chunk-SPTLZJOF.js} +5 -4
  36. package/dist/chunk-SPTLZJOF.js.map +1 -0
  37. package/dist/{chunk-K2USFSTX.js → chunk-T7NZHHC5.js} +3 -3
  38. package/dist/{chunk-5MFHNT56.js → chunk-TWPCN4DV.js} +2 -2
  39. package/dist/chunk-UPP4F2BE.js +519 -0
  40. package/dist/chunk-UPP4F2BE.js.map +1 -0
  41. package/dist/{chunk-KD7VGZX7.js → chunk-UZZ5OHXT.js} +7 -7
  42. package/dist/{chunk-N55RKCGR.js → chunk-V22CGGHO.js} +6 -1
  43. package/dist/chunk-V22CGGHO.js.map +1 -0
  44. package/dist/{chunk-YFXTMFYB.js → chunk-V6OC2WQL.js} +5 -5
  45. package/dist/{chunk-YV4RASGX.js → chunk-W43YGZOP.js} +18 -6
  46. package/dist/chunk-W43YGZOP.js.map +1 -0
  47. package/dist/{chunk-TG32WC4J.js → chunk-W6TPKE5S.js} +2 -2
  48. package/dist/{chunk-72Y65NWI.js → chunk-WY4R4IL5.js} +3 -3
  49. package/dist/{chunk-XGGHOHZS.js → chunk-XD3PSGFG.js} +3 -3
  50. package/dist/chunk-XD3PSGFG.js.map +1 -0
  51. package/dist/{chunk-ETXIGTS7.js → chunk-XKR275VJ.js} +3 -3
  52. package/dist/{credential-HM4THJOS.js → credential-DPUCDGYC.js} +5 -5
  53. package/dist/{credential-template-JBV3FZBY.js → credential-template-67RQWMH2.js} +5 -5
  54. package/dist/{dev-D2HS5XXN.js → dev-MU45HWAN.js} +456 -170
  55. package/dist/dev-MU45HWAN.js.map +1 -0
  56. package/dist/{digest-54VJ7KTF.js → digest-4PABSK2F.js} +8 -8
  57. package/dist/{docs-PPQSNRP6.js → docs-ZL5QOHCB.js} +5 -5
  58. package/dist/{doctor-CXFGSPWH.js → doctor-J5X2HSLJ.js} +3 -3
  59. package/dist/{environment-6MXRQV5L.js → environment-7Q6WDKMM.js} +7 -7
  60. package/dist/{eval-HCDXL4QT.js → eval-37P36M53.js} +51 -358
  61. package/dist/eval-37P36M53.js.map +1 -0
  62. package/dist/{exploration-U2WMYBZ3.js → exploration-7PHVC753.js} +5 -5
  63. package/dist/{exploratory-test-FD7VGUKE.js → exploratory-test-NE7ECFWS.js} +6 -6
  64. package/dist/{external-run-THSD26B7.js → external-run-KZGHVSHY.js} +134 -11
  65. package/dist/external-run-KZGHVSHY.js.map +1 -0
  66. package/dist/{feature-flag-D5IZ6OEG.js → feature-flag-YFWCPWIR.js} +5 -5
  67. package/dist/{feedback-6YCQMQQ3.js → feedback-HVR7LMFL.js} +6 -6
  68. package/dist/{flow-OVEA7273.js → flow-M6QBA4WR.js} +5 -5
  69. package/dist/{github-L2AFIEVN.js → github-HUBAWWFS.js} +6 -6
  70. package/dist/index.js +87 -80
  71. package/dist/index.js.map +1 -1
  72. package/dist/{init-ADOE2D6R.js → init-5A7VDZU4.js} +5 -5
  73. package/dist/{install-SB6NLXDQ.js → install-HM3USHVU.js} +5 -5
  74. package/dist/{issues-V2DSZXAN.js → issues-W6WIQ4RX.js} +8 -8
  75. package/dist/{knobs-MR4H55EB.js → knobs-NR52HEAL.js} +5 -5
  76. package/dist/{landing-KTYDL7QJ.js → landing-FHE7RWCR.js} +7 -7
  77. package/dist/{list-DFBHWU77.js → list-6J6BCU2L.js} +5 -5
  78. package/dist/{local-QXSTGDFN.js → local-DNRUTJBN.js} +7 -7
  79. package/dist/{login-KGIZAZCR.js → login-K7CNO4QS.js} +5 -5
  80. package/dist/{mcp-EDYHUOFI.js → mcp-G72SEYO5.js} +10 -10
  81. package/dist/mcp-eval-X4AGPFWW.js +450 -0
  82. package/dist/mcp-eval-X4AGPFWW.js.map +1 -0
  83. package/dist/{metrics-JUONV7EL.js → metrics-WXQPVDQY.js} +5 -5
  84. package/dist/{monitor-F7F7EJAL.js → monitor-URPOJOER.js} +5 -5
  85. package/dist/{perf-L2YL4Z2L.js → perf-WG6DAZBT.js} +11 -11
  86. package/dist/{product-UBLNRF5Y.js → product-TGOCFPCC.js} +5 -5
  87. package/dist/{product-map-7K5I5TVU.js → product-map-PKDPF2FB.js} +7 -7
  88. package/dist/{prompts-3JNN4M46.js → prompts-63KKMXLZ.js} +5 -5
  89. package/dist/{proofs-MJ7MGBCW.js → proofs-XRQ3BMM2.js} +9 -9
  90. package/dist/{property-TCDBREZL.js → property-O3PMHQLJ.js} +6 -6
  91. package/dist/{psql-YD54GQMP.js → psql-SUE2TORV.js} +5 -5
  92. package/dist/{record-OWBURAZ4.js → record-C245ESQA.js} +6 -6
  93. package/dist/{redis-3SIKQULP.js → redis-CAOX2ODS.js} +5 -5
  94. package/dist/{release-DMCBRVA5.js → release-ALUGJZTN.js} +5 -5
  95. package/dist/{runbook-ZRKWCLZE.js → runbook-63HBD7WH.js} +5 -5
  96. package/dist/{sandbox-HMZR6SKM.js → sandbox-IC5E53CC.js} +9 -9
  97. package/dist/{scenarios-2QHT5A4F.js → scenarios-JR2H7SZC.js} +5 -5
  98. package/dist/{schedule-4L7LOUDB.js → schedule-FHMCSKPL.js} +8 -8
  99. package/dist/{session-JHLYECKM.js → session-BKHVVZS3.js} +9 -9
  100. package/dist/{skill-ARJSVWCZ.js → skill-TZE27TIN.js} +3 -3
  101. package/dist/{slack-T7CR4SAU.js → slack-3BQ2T3ZS.js} +6 -6
  102. package/dist/{spec-RDNTNUE2.js → spec-PCAK2BX5.js} +5 -5
  103. package/dist/{src-DJETLMXP.js → src-BCJZMHSQ.js} +3 -3
  104. package/dist/{src-H7IBLPDW.js → src-BPKBSXKX.js} +4 -4
  105. package/dist/{src-DPJGVNYG.js → src-PNV4HGUY.js} +3 -3
  106. package/dist/{src-UKPMEXXT.js → src-ZJGBNWYB.js} +5 -5
  107. package/dist/{start-NR7W2LIP.js → start-BA5UEI3W.js} +5 -5
  108. package/dist/{status-UDNXR5GK.js → status-TUXK57H4.js} +5 -5
  109. package/dist/{tag-ADP2MZ3V.js → tag-IBDEJZM7.js} +6 -6
  110. package/dist/{task-KQOUTIJU.js → task-WXZQM4BW.js} +6 -6
  111. package/dist/{teams-D4QXSVDA.js → teams-656T2IHZ.js} +7 -7
  112. package/dist/{test-suite-DYMY4YAG.js → test-suite-ETXWE5HB.js} +12 -12
  113. package/dist/{tickets-BX3LFWUS.js → tickets-LWP3XIHG.js} +5 -5
  114. package/dist/{trace-MBRU6DLE.js → trace-RNEY6XCJ.js} +8 -8
  115. package/dist/{triage-IXAU73VL.js → triage-VZIIN7KB.js} +6 -6
  116. package/dist/{trigger-CHSWCUV3.js → trigger-KTTSNSRU.js} +10 -10
  117. package/dist/{update-check-LLETICM4.js → update-check-SLGKNOUC.js} +4 -4
  118. package/dist/{upgrade-35WVNUEG.js → upgrade-2KSYA4GE.js} +5 -5
  119. package/dist/{usage-YUYXUNF2.js → usage-SC4NWQ5A.js} +99 -14
  120. package/dist/usage-SC4NWQ5A.js.map +1 -0
  121. package/dist/{utilities-MOHIKBBF.js → utilities-O4VVADHM.js} +6 -6
  122. package/dist/{visual-RNYERKX4.js → visual-ZWQTVXTM.js} +5 -5
  123. package/dist/{workflow-NM5IC7ZQ.js → workflow-7HKA2WKO.js} +30 -30
  124. package/dist/{workflow-cache-JNN7BS2K.js → workflow-cache-FDN2N5HH.js} +18 -18
  125. package/dist/{workflow-cache-convergence-resolve-4SO2MP7T.js → workflow-cache-convergence-resolve-BGEUM7WV.js} +5 -5
  126. package/dist/{workflow-debug-E7BXSSOG.js → workflow-debug-KNE7SVXQ.js} +11 -11
  127. package/dist/{workflow-feedback-EWAK45AB.js → workflow-feedback-YY2FZTV4.js} +5 -5
  128. package/dist/{workflow-fork-NO5IFBD4.js → workflow-fork-FH5KBVWP.js} +5 -5
  129. package/dist/{workflow-promotion-NWIZNAR4.js → workflow-promotion-RRI53FB6.js} +5 -5
  130. package/dist/{workflow-proposals-XMAZJT3X.js → workflow-proposals-5XGCOTEU.js} +5 -5
  131. package/dist/{workflow-revisions-4EQMLZGY.js → workflow-revisions-M6WPGXAT.js} +5 -5
  132. package/dist/{workflow-status-AZMXQZLC.js → workflow-status-I5BSSWHY.js} +5 -5
  133. package/package.json +2 -2
  134. package/dist/chunk-DTB5HUD2.js.map +0 -1
  135. package/dist/chunk-EYHJ5FIA.js.map +0 -1
  136. package/dist/chunk-N55RKCGR.js.map +0 -1
  137. package/dist/chunk-T6ZNIMI4.js.map +0 -1
  138. package/dist/chunk-XGGHOHZS.js.map +0 -1
  139. package/dist/chunk-YV4RASGX.js.map +0 -1
  140. package/dist/dev-D2HS5XXN.js.map +0 -1
  141. package/dist/eval-HCDXL4QT.js.map +0 -1
  142. package/dist/external-run-THSD26B7.js.map +0 -1
  143. package/dist/mcp-eval-YT2RFIC5.js +0 -196
  144. package/dist/mcp-eval-YT2RFIC5.js.map +0 -1
  145. package/dist/usage-YUYXUNF2.js.map +0 -1
  146. /package/dist/{account-S7VHLHYX.js.map → account-CWSADXJD.js.map} +0 -0
  147. /package/dist/{alert-DZUI3JEU.js.map → alert-VEZZJPIH.js.map} +0 -0
  148. /package/dist/{api-catalog-WP6AQYUG.js.map → api-catalog-OBE6ITCJ.js.map} +0 -0
  149. /package/dist/{api-key-U57EC2YF.js.map → api-key-265DBPSR.js.map} +0 -0
  150. /package/dist/{attachment-MICVVXUW.js.map → attachment-QE65VNDG.js.map} +0 -0
  151. /package/dist/{auth-UDD77PG6.js.map → auth-DG6RD4UA.js.map} +0 -0
  152. /package/dist/{benchmark-Q5BVGQ3I.js.map → benchmark-3R75GENH.js.map} +0 -0
  153. /package/dist/{blackcat-TZNSDQAC.js.map → blackcat-EKZS3TBD.js.map} +0 -0
  154. /package/dist/{chunk-AHS2HMEH.js.map → chunk-4KFJQPJF.js.map} +0 -0
  155. /package/dist/{chunk-LP4X7TWI.js.map → chunk-56WV7CFM.js.map} +0 -0
  156. /package/dist/{chunk-3EKIGWMN.js.map → chunk-A6VDLUMH.js.map} +0 -0
  157. /package/dist/{chunk-XQZJWDM4.js.map → chunk-B7G4TOYC.js.map} +0 -0
  158. /package/dist/{chunk-U3MXJTTD.js.map → chunk-BDPNJKUZ.js.map} +0 -0
  159. /package/dist/{chunk-IIDQM4MY.js.map → chunk-BMFD4OPC.js.map} +0 -0
  160. /package/dist/{chunk-T5MU76RA.js.map → chunk-C77XIO2W.js.map} +0 -0
  161. /package/dist/{chunk-FBEQNW2P.js.map → chunk-DFN2NH37.js.map} +0 -0
  162. /package/dist/{chunk-4SQKKD3R.js.map → chunk-EDX47DXT.js.map} +0 -0
  163. /package/dist/{chunk-BSCEOIYX.js.map → chunk-FQ6P522C.js.map} +0 -0
  164. /package/dist/{chunk-6IMNRYC3.js.map → chunk-GQSW6ZY3.js.map} +0 -0
  165. /package/dist/{chunk-4GDEKB5S.js.map → chunk-GVNSCSIC.js.map} +0 -0
  166. /package/dist/{chunk-W4P6BGJ7.js.map → chunk-IN3AF6LI.js.map} +0 -0
  167. /package/dist/{chunk-CZOYFKTY.js.map → chunk-IVJU3LP6.js.map} +0 -0
  168. /package/dist/{chunk-H2K3ABPO.js.map → chunk-K54XL64A.js.map} +0 -0
  169. /package/dist/{chunk-T6KTBHWD.js.map → chunk-LZLSRN5Q.js.map} +0 -0
  170. /package/dist/{chunk-YILSW5ZY.js.map → chunk-MCJOF3JX.js.map} +0 -0
  171. /package/dist/{chunk-SBQLD7X6.js.map → chunk-PN5IK7CJ.js.map} +0 -0
  172. /package/dist/{chunk-K3MG2ZMH.js.map → chunk-RIBSXEAM.js.map} +0 -0
  173. /package/dist/{chunk-K2USFSTX.js.map → chunk-T7NZHHC5.js.map} +0 -0
  174. /package/dist/{chunk-5MFHNT56.js.map → chunk-TWPCN4DV.js.map} +0 -0
  175. /package/dist/{chunk-KD7VGZX7.js.map → chunk-UZZ5OHXT.js.map} +0 -0
  176. /package/dist/{chunk-YFXTMFYB.js.map → chunk-V6OC2WQL.js.map} +0 -0
  177. /package/dist/{chunk-TG32WC4J.js.map → chunk-W6TPKE5S.js.map} +0 -0
  178. /package/dist/{chunk-72Y65NWI.js.map → chunk-WY4R4IL5.js.map} +0 -0
  179. /package/dist/{chunk-ETXIGTS7.js.map → chunk-XKR275VJ.js.map} +0 -0
  180. /package/dist/{credential-HM4THJOS.js.map → credential-DPUCDGYC.js.map} +0 -0
  181. /package/dist/{credential-template-JBV3FZBY.js.map → credential-template-67RQWMH2.js.map} +0 -0
  182. /package/dist/{digest-54VJ7KTF.js.map → digest-4PABSK2F.js.map} +0 -0
  183. /package/dist/{docs-PPQSNRP6.js.map → docs-ZL5QOHCB.js.map} +0 -0
  184. /package/dist/{doctor-CXFGSPWH.js.map → doctor-J5X2HSLJ.js.map} +0 -0
  185. /package/dist/{environment-6MXRQV5L.js.map → environment-7Q6WDKMM.js.map} +0 -0
  186. /package/dist/{exploration-U2WMYBZ3.js.map → exploration-7PHVC753.js.map} +0 -0
  187. /package/dist/{exploratory-test-FD7VGUKE.js.map → exploratory-test-NE7ECFWS.js.map} +0 -0
  188. /package/dist/{feature-flag-D5IZ6OEG.js.map → feature-flag-YFWCPWIR.js.map} +0 -0
  189. /package/dist/{feedback-6YCQMQQ3.js.map → feedback-HVR7LMFL.js.map} +0 -0
  190. /package/dist/{flow-OVEA7273.js.map → flow-M6QBA4WR.js.map} +0 -0
  191. /package/dist/{github-L2AFIEVN.js.map → github-HUBAWWFS.js.map} +0 -0
  192. /package/dist/{init-ADOE2D6R.js.map → init-5A7VDZU4.js.map} +0 -0
  193. /package/dist/{install-SB6NLXDQ.js.map → install-HM3USHVU.js.map} +0 -0
  194. /package/dist/{issues-V2DSZXAN.js.map → issues-W6WIQ4RX.js.map} +0 -0
  195. /package/dist/{knobs-MR4H55EB.js.map → knobs-NR52HEAL.js.map} +0 -0
  196. /package/dist/{landing-KTYDL7QJ.js.map → landing-FHE7RWCR.js.map} +0 -0
  197. /package/dist/{list-DFBHWU77.js.map → list-6J6BCU2L.js.map} +0 -0
  198. /package/dist/{local-QXSTGDFN.js.map → local-DNRUTJBN.js.map} +0 -0
  199. /package/dist/{login-KGIZAZCR.js.map → login-K7CNO4QS.js.map} +0 -0
  200. /package/dist/{mcp-EDYHUOFI.js.map → mcp-G72SEYO5.js.map} +0 -0
  201. /package/dist/{metrics-JUONV7EL.js.map → metrics-WXQPVDQY.js.map} +0 -0
  202. /package/dist/{monitor-F7F7EJAL.js.map → monitor-URPOJOER.js.map} +0 -0
  203. /package/dist/{perf-L2YL4Z2L.js.map → perf-WG6DAZBT.js.map} +0 -0
  204. /package/dist/{product-UBLNRF5Y.js.map → product-TGOCFPCC.js.map} +0 -0
  205. /package/dist/{product-map-7K5I5TVU.js.map → product-map-PKDPF2FB.js.map} +0 -0
  206. /package/dist/{prompts-3JNN4M46.js.map → prompts-63KKMXLZ.js.map} +0 -0
  207. /package/dist/{proofs-MJ7MGBCW.js.map → proofs-XRQ3BMM2.js.map} +0 -0
  208. /package/dist/{property-TCDBREZL.js.map → property-O3PMHQLJ.js.map} +0 -0
  209. /package/dist/{psql-YD54GQMP.js.map → psql-SUE2TORV.js.map} +0 -0
  210. /package/dist/{record-OWBURAZ4.js.map → record-C245ESQA.js.map} +0 -0
  211. /package/dist/{redis-3SIKQULP.js.map → redis-CAOX2ODS.js.map} +0 -0
  212. /package/dist/{release-DMCBRVA5.js.map → release-ALUGJZTN.js.map} +0 -0
  213. /package/dist/{runbook-ZRKWCLZE.js.map → runbook-63HBD7WH.js.map} +0 -0
  214. /package/dist/{sandbox-HMZR6SKM.js.map → sandbox-IC5E53CC.js.map} +0 -0
  215. /package/dist/{scenarios-2QHT5A4F.js.map → scenarios-JR2H7SZC.js.map} +0 -0
  216. /package/dist/{schedule-4L7LOUDB.js.map → schedule-FHMCSKPL.js.map} +0 -0
  217. /package/dist/{session-JHLYECKM.js.map → session-BKHVVZS3.js.map} +0 -0
  218. /package/dist/{skill-ARJSVWCZ.js.map → skill-TZE27TIN.js.map} +0 -0
  219. /package/dist/{slack-T7CR4SAU.js.map → slack-3BQ2T3ZS.js.map} +0 -0
  220. /package/dist/{spec-RDNTNUE2.js.map → spec-PCAK2BX5.js.map} +0 -0
  221. /package/dist/{src-DJETLMXP.js.map → src-BCJZMHSQ.js.map} +0 -0
  222. /package/dist/{src-H7IBLPDW.js.map → src-BPKBSXKX.js.map} +0 -0
  223. /package/dist/{src-DPJGVNYG.js.map → src-PNV4HGUY.js.map} +0 -0
  224. /package/dist/{src-UKPMEXXT.js.map → src-ZJGBNWYB.js.map} +0 -0
  225. /package/dist/{start-NR7W2LIP.js.map → start-BA5UEI3W.js.map} +0 -0
  226. /package/dist/{status-UDNXR5GK.js.map → status-TUXK57H4.js.map} +0 -0
  227. /package/dist/{tag-ADP2MZ3V.js.map → tag-IBDEJZM7.js.map} +0 -0
  228. /package/dist/{task-KQOUTIJU.js.map → task-WXZQM4BW.js.map} +0 -0
  229. /package/dist/{teams-D4QXSVDA.js.map → teams-656T2IHZ.js.map} +0 -0
  230. /package/dist/{test-suite-DYMY4YAG.js.map → test-suite-ETXWE5HB.js.map} +0 -0
  231. /package/dist/{tickets-BX3LFWUS.js.map → tickets-LWP3XIHG.js.map} +0 -0
  232. /package/dist/{trace-MBRU6DLE.js.map → trace-RNEY6XCJ.js.map} +0 -0
  233. /package/dist/{triage-IXAU73VL.js.map → triage-VZIIN7KB.js.map} +0 -0
  234. /package/dist/{trigger-CHSWCUV3.js.map → trigger-KTTSNSRU.js.map} +0 -0
  235. /package/dist/{update-check-LLETICM4.js.map → update-check-SLGKNOUC.js.map} +0 -0
  236. /package/dist/{upgrade-35WVNUEG.js.map → upgrade-2KSYA4GE.js.map} +0 -0
  237. /package/dist/{utilities-MOHIKBBF.js.map → utilities-O4VVADHM.js.map} +0 -0
  238. /package/dist/{visual-RNYERKX4.js.map → visual-ZWQTVXTM.js.map} +0 -0
  239. /package/dist/{workflow-NM5IC7ZQ.js.map → workflow-7HKA2WKO.js.map} +0 -0
  240. /package/dist/{workflow-cache-JNN7BS2K.js.map → workflow-cache-FDN2N5HH.js.map} +0 -0
  241. /package/dist/{workflow-cache-convergence-resolve-4SO2MP7T.js.map → workflow-cache-convergence-resolve-BGEUM7WV.js.map} +0 -0
  242. /package/dist/{workflow-debug-E7BXSSOG.js.map → workflow-debug-KNE7SVXQ.js.map} +0 -0
  243. /package/dist/{workflow-feedback-EWAK45AB.js.map → workflow-feedback-YY2FZTV4.js.map} +0 -0
  244. /package/dist/{workflow-fork-NO5IFBD4.js.map → workflow-fork-FH5KBVWP.js.map} +0 -0
  245. /package/dist/{workflow-promotion-NWIZNAR4.js.map → workflow-promotion-RRI53FB6.js.map} +0 -0
  246. /package/dist/{workflow-proposals-XMAZJT3X.js.map → workflow-proposals-5XGCOTEU.js.map} +0 -0
  247. /package/dist/{workflow-revisions-4EQMLZGY.js.map → workflow-revisions-M6WPGXAT.js.map} +0 -0
  248. /package/dist/{workflow-status-AZMXQZLC.js.map → workflow-status-I5BSSWHY.js.map} +0 -0
@@ -1,8 +1,18 @@
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
+ import {
3
+ AGENT_EVAL_MAX_BUNDLE_BYTES,
4
+ AGENT_EVAL_MULTIPART_THRESHOLD,
5
+ AgentEvalTemplateSchema,
6
+ EvalConversationSchema,
7
+ loadBundle,
8
+ missingRequiredPaths,
9
+ uploadBundle,
10
+ uploadMultipart
11
+ } from "./chunk-UPP4F2BE.js";
2
12
  import {
3
13
  resolveApplicationId
4
- } from "./chunk-YFXTMFYB.js";
5
- import "./chunk-SBQLD7X6.js";
14
+ } from "./chunk-V6OC2WQL.js";
15
+ import "./chunk-PN5IK7CJ.js";
6
16
  import {
7
17
  EVALS,
8
18
  getEval,
@@ -10,367 +20,33 @@ import {
10
20
  requestAll,
11
21
  requestText,
12
22
  requestTolerant
13
- } from "./chunk-XGGHOHZS.js";
23
+ } from "./chunk-XD3PSGFG.js";
14
24
  import {
15
25
  printServedGuide
16
- } from "./chunk-YV4RASGX.js";
26
+ } from "./chunk-W43YGZOP.js";
17
27
  import {
18
28
  getArgValues,
19
29
  getPositionalArg,
20
30
  getPositionalArgs,
21
31
  getScalarArgValue,
22
32
  readStdin
23
- } from "./chunk-72Y65NWI.js";
33
+ } from "./chunk-WY4R4IL5.js";
24
34
  import "./chunk-S3Q7MDCS.js";
25
35
  import {
26
36
  GLOBAL_VALUE_FLAGS,
27
37
  hasFlag,
28
38
  resolveConfig
29
- } from "./chunk-IIDQM4MY.js";
39
+ } from "./chunk-BMFD4OPC.js";
30
40
  import {
31
41
  writeRawOutput
32
- } from "./chunk-T6ZNIMI4.js";
33
- import "./chunk-EYHJ5FIA.js";
42
+ } from "./chunk-LRIP5IQD.js";
43
+ import "./chunk-C6SNLHVE.js";
34
44
  import "./chunk-TOWZAG3I.js";
35
45
 
36
46
  // src/eval.ts
37
- import { mkdir, readFile as readFile3, readdir as readdir2, writeFile } from "fs/promises";
38
- import { gunzipSync as gunzipSync2 } from "zlib";
39
- import { join as join2 } from "path";
40
-
41
- // ../types/src/agent-eval-template.ts
42
- import { z } from "zod";
43
- var AGENT_EVAL_MAX_BUNDLE_BYTES = 512 * 1024 ** 2;
44
- var AGENT_EVAL_MAX_TOTAL_BUNDLE_BYTES = 2 * 1024 ** 3;
45
- var ModelSchema = z.strictObject({
46
- provider: z.enum(["anthropic", "azure"]),
47
- model: z.string().min(1)
48
- });
49
- var EnvName = z.string().regex(/^[A-Z_][A-Z0-9_]*$/, "Must be an upper-case environment variable name").refine((name) => !name.startsWith("EVAL_"), "EVAL_ names are reserved for the attempt environment");
50
- var ProviderEnvSchema = z.strictObject({
51
- env: z.strictObject({
52
- apiKey: EnvName,
53
- // gets the attempt's scoped proxy token
54
- baseUrl: EnvName,
55
- // gets the proxy URL for the provider's wire
56
- model: EnvName
57
- // gets the model id
58
- }).refine((env) => new Set(Object.values(env)).size === 3, "apiKey, baseUrl and model must be different names")
59
- });
60
- var ScriptGrader = z.strictObject({
61
- id: z.string().regex(/^[a-z0-9-]+$/),
62
- kind: z.literal("script"),
63
- command: z.string().min(1)
64
- });
65
- var JudgeGrader = z.strictObject({
66
- id: z.string().regex(/^[a-z0-9-]+$/),
67
- kind: z.literal("ai-judge"),
68
- rubric: z.string().min(20),
69
- scale: z.enum(["binary", "1-5"]),
70
- passAt: z.number().int().min(2).max(5).optional(),
71
- // required when scale is '1-5'
72
- judge: ModelSchema
73
- });
74
- var AgentEvalTemplateSchema = z.strictObject({
75
- version: z.literal(1),
76
- name: z.string().regex(/^[a-z0-9-]{2,40}$/).refine((n) => n !== "runs" && n !== "compare"),
77
- // reserved route segments
78
- description: z.string().min(1).max(500),
79
- proves: z.strictObject({ capabilities: z.array(z.string().regex(/^CAP-/)).min(1) }),
80
- // resolved within the application given at push
81
- runbook: z.string().min(1),
82
- // path relative to this file
83
- mode: z.enum(["single-turn", "multi-turn"]).default("single-turn"),
84
- traces: z.strictObject({ capture: z.enum(["full", "metadata"]).default("full") }).default(() => ({ capture: "full" })),
85
- run: z.string().min(1),
86
- // shell command, cwd = repo root of the commit; multi-turn: the agent process, JSONL on stdin/stdout
87
- simulator: ModelSchema.optional(),
88
- // required when mode is multi-turn: pins the simulated-user model
89
- input: z.strictObject({
90
- description: z.string().min(1),
91
- require: z.array(z.string()).default([])
92
- }),
93
- agent: z.strictObject({
94
- models: z.record(z.string().regex(/^[a-z0-9-]+$/), ModelSchema).refine((m) => Object.keys(m).length >= 1),
95
- default: z.string(),
96
- // must be a key of models
97
- providers: z.strictObject({ anthropic: ProviderEnvSchema.optional(), azure: ProviderEnvSchema.optional() }).optional()
98
- // absent, or an absent entry: the standard names; every entry's provider must be used by a model
99
- }),
100
- graders: z.array(z.discriminatedUnion("kind", [ScriptGrader, JudgeGrader])).min(1),
101
- repeats: z.number().int().min(1).max(7).default(1),
102
- // attempts per case; a stochastic agent raises it together with passAtLeast
103
- passAtLeast: z.number().int().min(1).default(1),
104
- // <= repeats
105
- passBar: z.number().min(0.1).max(1),
106
- // minimum case pass rate for the eval to pass
107
- attemptSeconds: z.number().int().min(30).max(1700)
108
- // grader commands get a fixed 120 s
109
- }).superRefine((template, ctx) => {
110
- if (!Object.hasOwn(template.agent.models, template.agent.default)) {
111
- ctx.addIssue({
112
- code: "custom",
113
- path: ["agent", "default"],
114
- message: "Default must name an agent model alias"
115
- });
116
- }
117
- const used = new Set(Object.values(template.agent.models).map((m) => m.provider));
118
- for (const [provider, entry] of Object.entries(template.agent.providers ?? {})) {
119
- if (entry && !used.has(provider)) {
120
- ctx.addIssue({
121
- code: "custom",
122
- path: ["agent", "providers", provider],
123
- message: `No agent model uses provider ${provider}; remove this entry or add a model that uses it`
124
- });
125
- }
126
- }
127
- if (template.passAtLeast > template.repeats) {
128
- ctx.addIssue({
129
- code: "custom",
130
- path: ["passAtLeast"],
131
- message: "passAtLeast must not exceed repeats"
132
- });
133
- }
134
- const ids = /* @__PURE__ */ new Set();
135
- template.graders.forEach((grader, index) => {
136
- if (ids.has(grader.id)) {
137
- ctx.addIssue({
138
- code: "custom",
139
- path: ["graders", index, "id"],
140
- message: "Grader ids must be unique"
141
- });
142
- }
143
- ids.add(grader.id);
144
- if (grader.kind === "ai-judge" && grader.scale === "1-5" && grader.passAt === void 0) {
145
- ctx.addIssue({
146
- code: "custom",
147
- path: ["graders", index, "passAt"],
148
- message: "A 1-5 judge requires passAt"
149
- });
150
- }
151
- });
152
- if (template.mode === "multi-turn" !== (template.simulator !== void 0)) {
153
- ctx.addIssue({
154
- code: "custom",
155
- path: ["simulator"],
156
- message: "A simulator is required exactly when mode is multi-turn"
157
- });
158
- }
159
- });
160
- var EvalConversationSchema = z.discriminatedUnion("kind", [
161
- z.strictObject({ kind: z.literal("scripted"), turns: z.array(z.string().min(1)).min(1) }),
162
- z.strictObject({
163
- kind: z.literal("simulated"),
164
- persona: z.string().min(1),
165
- goal: z.string().min(1),
166
- facts: z.array(z.string()),
167
- stopWhen: z.string().min(1),
168
- maxTurns: z.number().int().min(2).max(30)
169
- })
170
- ]);
171
-
172
- // src/eval-bundle.ts
173
- import { createHash } from "crypto";
174
- import { request as httpRequest } from "http";
175
- import { request as httpsRequest } from "https";
176
- import { lstat, readdir, readFile } from "fs/promises";
47
+ import { mkdir, readFile as readFile2, readdir, writeFile } from "fs/promises";
48
+ import { gunzipSync } from "zlib";
177
49
  import { join } from "path";
178
- import { gunzipSync, gzipSync } from "zlib";
179
- var BLOCK = 512;
180
- var MAX_RAW_BYTES = AGENT_EVAL_MAX_BUNDLE_BYTES;
181
- var MAX_UNPACKED_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;
182
- var sha256Hex = (data) => createHash("sha256").update(data).digest("hex");
183
- function octal(value, width) {
184
- return `${value.toString(8).padStart(width - 1, "0")}\0`;
185
- }
186
- function splitName(path) {
187
- if (Buffer.byteLength(path) <= 100) return { prefix: "", name: path };
188
- for (let i = path.indexOf("/"); i !== -1; i = path.indexOf("/", i + 1)) {
189
- const prefix = path.slice(0, i);
190
- const name = path.slice(i + 1);
191
- if (Buffer.byteLength(prefix) <= 155 && Buffer.byteLength(name) <= 100) return { prefix, name };
192
- }
193
- throw new Error(`Path is too long for a bundle (limit 255 bytes): ${path}`);
194
- }
195
- function header(path, size, type, mode) {
196
- const { prefix, name } = splitName(path);
197
- const block = Buffer.alloc(BLOCK);
198
- block.write(name, 0, "utf8");
199
- block.write(octal(mode, 8), 100, "ascii");
200
- block.write(octal(0, 8), 108, "ascii");
201
- block.write(octal(0, 8), 116, "ascii");
202
- block.write(octal(size, 12), 124, "ascii");
203
- block.write(octal(0, 12), 136, "ascii");
204
- block.fill(32, 148, 156);
205
- block.write(type, 156, "ascii");
206
- block.write("ustar\0", 257, "ascii");
207
- block.write("00", 263, "ascii");
208
- block.write(prefix, 345, "utf8");
209
- const checksum = block.reduce((sum, byte) => sum + byte, 0);
210
- block.write(`${checksum.toString(8).padStart(6, "0")}\0 `, 148, "ascii");
211
- return block;
212
- }
213
- async function walk(root, real = "", archive = "") {
214
- const names = (await readdir(real ? join(root, real) : root)).map((name) => ({ real: name, archive: name.normalize("NFC") })).sort((a, b) => Buffer.compare(Buffer.from(a.archive), Buffer.from(b.archive)));
215
- const entries = [];
216
- for (const name of names) {
217
- const realPath = real ? `${real}/${name.real}` : name.real;
218
- const path = archive ? `${archive}/${name.archive}` : name.archive;
219
- const absolute = join(root, realPath);
220
- const stats = await lstat(absolute);
221
- if (stats.isDirectory()) {
222
- entries.push({ path, absolute, directory: true, mode: 493, size: 0 });
223
- entries.push(...await walk(root, realPath, path));
224
- } else if (stats.isFile()) {
225
- entries.push({
226
- path,
227
- absolute,
228
- directory: false,
229
- mode: stats.mode & 73 ? 493 : 420,
230
- size: stats.size
231
- });
232
- } else {
233
- throw new Error(
234
- `Cannot bundle ${path}: only regular files and directories are supported (no symlinks or devices).`
235
- );
236
- }
237
- }
238
- return entries;
239
- }
240
- async function tarDirectory(root) {
241
- const entries = await walk(root);
242
- const total = entries.reduce((sum, entry) => sum + entry.size, 0);
243
- if (total > MAX_RAW_BYTES) {
244
- throw new Error(
245
- `The input directory holds ${total} bytes; the CLI bundles at most ${MAX_RAW_BYTES}. Prune it.`
246
- );
247
- }
248
- const parts = [];
249
- for (const entry of entries) {
250
- if (entry.directory) {
251
- parts.push(header(`${entry.path}/`, 0, "5", entry.mode));
252
- continue;
253
- }
254
- const content = await readFile(entry.absolute);
255
- parts.push(header(entry.path, content.length, "0", entry.mode), content);
256
- const padding = (BLOCK - content.length % BLOCK) % BLOCK;
257
- if (padding) parts.push(Buffer.alloc(padding));
258
- }
259
- parts.push(Buffer.alloc(BLOCK * 2));
260
- return Buffer.concat(parts);
261
- }
262
- function readString(block, start, length) {
263
- const slice = block.subarray(start, start + length);
264
- const end = slice.indexOf(0);
265
- return slice.subarray(0, end === -1 ? length : end).toString("utf8");
266
- }
267
- function normalize(path) {
268
- return path.replace(/^(\.\/)+/, "").replace(/\/+$/, "");
269
- }
270
- function listTarEntries(tar) {
271
- const entries = [];
272
- let longName = null;
273
- let offset = 0;
274
- while (offset + BLOCK <= tar.length) {
275
- const block = tar.subarray(offset, offset + BLOCK);
276
- if (block.every((byte) => byte === 0)) break;
277
- const stored = Number.parseInt(readString(block, 148, 8).trim(), 8);
278
- const actual = block.reduce((sum, byte, i) => sum + (i >= 148 && i < 156 ? 32 : byte), 0);
279
- if (stored !== actual) throw new Error("not a valid tar archive (bad header checksum)");
280
- const size = Number.parseInt(readString(block, 124, 12).trim() || "0", 8);
281
- const type = String.fromCharCode(block[156] || 48);
282
- const body = tar.subarray(offset + BLOCK, offset + BLOCK + size);
283
- offset += BLOCK + Math.ceil(size / BLOCK) * BLOCK;
284
- if (type === "L") {
285
- longName = readString(body, 0, body.length);
286
- continue;
287
- }
288
- if (type === "x") {
289
- const record = body.toString("utf8").match(/\d+ path=([^\n]*)\n/);
290
- if (record?.[1]) longName = record[1];
291
- continue;
292
- }
293
- if (type === "g") continue;
294
- const prefix = readString(block, 345, 155);
295
- if (["1", "2", "3", "4", "6"].includes(type))
296
- throw new Error(
297
- `the archive holds a link or device entry (${readString(block, 0, 100)}); only files and directories are supported`
298
- );
299
- const name = longName ?? (prefix ? `${prefix}/${readString(block, 0, 100)}` : readString(block, 0, 100));
300
- longName = null;
301
- entries.push(normalize(name));
302
- }
303
- return entries;
304
- }
305
- async function loadBundle(input) {
306
- let stats;
307
- try {
308
- stats = await lstat(input);
309
- } catch {
310
- throw new Error(`--input ${input} does not exist.`);
311
- }
312
- let tar;
313
- if (stats.isDirectory()) {
314
- tar = await tarDirectory(input);
315
- } else if (stats.isFile() && /\.(tar\.gz|tgz)$/.test(input)) {
316
- if (stats.size > AGENT_EVAL_MAX_BUNDLE_BYTES)
317
- throw new Error(
318
- `${input} is ${stats.size} bytes; a bundle is limited to ${AGENT_EVAL_MAX_BUNDLE_BYTES}. Prune it.`
319
- );
320
- const gzip = await readFile(input);
321
- try {
322
- tar = gunzipSync(gzip, { maxOutputLength: MAX_UNPACKED_BYTES });
323
- } catch {
324
- throw new Error(
325
- `--input ${input} is not a valid gzip file, or unpacks to more than ${MAX_UNPACKED_BYTES} bytes.`
326
- );
327
- }
328
- } else {
329
- throw new Error("--input must be a directory or a .tar.gz file.");
330
- }
331
- const archive = gzipSync(tar, { level: 9 });
332
- let entries;
333
- try {
334
- entries = listTarEntries(tar);
335
- } catch (error) {
336
- throw new Error(`--input ${input}: ${error instanceof Error ? error.message : String(error)}.`);
337
- }
338
- return {
339
- sha256: sha256Hex(tar),
340
- gzipSha256: sha256Hex(archive),
341
- bytes: archive.length,
342
- archive,
343
- entries
344
- };
345
- }
346
- function missingRequiredPaths(entries, required2) {
347
- return required2.filter((path) => {
348
- const wanted = normalize(path);
349
- return !entries.some((entry) => entry === wanted || entry.startsWith(`${wanted}/`));
350
- });
351
- }
352
- var uploadBundle = (url, headers, archive) => new Promise((resolve2, reject) => {
353
- const target2 = new URL(url);
354
- const request2 = target2.protocol === "https:" ? httpsRequest : httpRequest;
355
- const req = request2(
356
- target2,
357
- { method: "PUT", headers: { ...headers, "content-length": String(archive.byteLength) } },
358
- (response) => {
359
- response.on("error", reject);
360
- const status = response.statusCode;
361
- if (status !== void 0 && status >= 200 && status < 300) {
362
- response.on("end", resolve2);
363
- response.resume();
364
- } else {
365
- response.resume();
366
- req.destroy();
367
- reject(new Error(`Uploading the bundle failed (${String(status)}).`));
368
- }
369
- }
370
- );
371
- req.on("error", reject);
372
- req.end(archive);
373
- });
374
50
 
375
51
  // src/eval-run.ts
376
52
  import { setTimeout as sleep } from "timers/promises";
@@ -718,6 +394,9 @@ async function runEval(argv, name, apiUrl, token) {
718
394
  const repeats = intFlag(argv, "--repeats");
719
395
  const parallel = intFlag(argv, "--parallel");
720
396
  const evaluation = await getEval(apiUrl, token, name);
397
+ if (evaluation.definition.kind === "mcp" && models.length) {
398
+ throw new Error("MCP eval agents are declared in the template; remove --model.");
399
+ }
721
400
  const started = await request(
722
401
  apiUrl,
723
402
  token,
@@ -931,7 +610,7 @@ async function compareRuns(argv, ids, apiUrl, token) {
931
610
  }
932
611
 
933
612
  // src/eval-template.ts
934
- import { readFile as readFile2 } from "fs/promises";
613
+ import { readFile } from "fs/promises";
935
614
  import { dirname, isAbsolute, relative, resolve, sep } from "path";
936
615
  import { parse } from "yaml";
937
616
  var RUNBOOK_TODO_MARKER = "<!-- cofactor:todo -->";
@@ -1132,7 +811,7 @@ function checkRunbook(runbook) {
1132
811
  async function readPushPayload(file) {
1133
812
  let source;
1134
813
  try {
1135
- source = await readFile2(file, "utf8");
814
+ source = await readFile(file, "utf8");
1136
815
  } catch {
1137
816
  throw new Error(`Cannot read ${file}.`);
1138
817
  }
@@ -1155,7 +834,7 @@ async function readPushPayload(file) {
1155
834
  );
1156
835
  let runbook;
1157
836
  try {
1158
- runbook = await readFile2(runbookPath, "utf8");
837
+ runbook = await readFile(runbookPath, "utf8");
1159
838
  } catch {
1160
839
  throw new Error(
1161
840
  `Cannot read the runbook ${runbookPath} (the template's runbook: ${parsed.data.runbook}).`
@@ -1295,7 +974,7 @@ function expectedArg(argv) {
1295
974
  async function readJson(path, label) {
1296
975
  let text;
1297
976
  try {
1298
- text = path === "-" ? await readStdin() : await readFile3(path, "utf8");
977
+ text = path === "-" ? await readStdin() : await readFile2(path, "utf8");
1299
978
  } catch (error) {
1300
979
  throw new Error(
1301
980
  `Cannot read ${label}: ${error instanceof Error ? error.message : String(error)}`
@@ -1326,17 +1005,17 @@ async function init(argv) {
1326
1005
  throw new Error("--capability must be a product-map code such as CAP-CMM-001.");
1327
1006
  const files = [
1328
1007
  {
1329
- path: join2(DEFAULT_TEMPLATE_DIR, `${name}.eval.yaml`),
1008
+ path: join(DEFAULT_TEMPLATE_DIR, `${name}.eval.yaml`),
1330
1009
  text: initTemplate({
1331
1010
  name,
1332
1011
  application: getScalarArgValue(argv, "--application"),
1333
1012
  capability
1334
1013
  })
1335
1014
  },
1336
- { path: join2(DEFAULT_TEMPLATE_DIR, `${name}.runbook.md`), text: initRunbook(name) }
1015
+ { path: join(DEFAULT_TEMPLATE_DIR, `${name}.runbook.md`), text: initRunbook(name) }
1337
1016
  ];
1338
- const gitignore = join2(DEFAULT_TEMPLATE_DIR, ".gitignore");
1339
- const exists = async (path) => readFile3(path).then(
1017
+ const gitignore = join(DEFAULT_TEMPLATE_DIR, ".gitignore");
1018
+ const exists = async (path) => readFile2(path).then(
1340
1019
  () => true,
1341
1020
  () => false
1342
1021
  );
@@ -1357,14 +1036,14 @@ Edit the run command and graders, write each runbook section and delete its <!--
1357
1036
  );
1358
1037
  }
1359
1038
  async function defaultTemplateFile() {
1360
- const found = (await readdir2(DEFAULT_TEMPLATE_DIR).catch(() => [])).filter(
1039
+ const found = (await readdir(DEFAULT_TEMPLATE_DIR).catch(() => [])).filter(
1361
1040
  (f) => f.endsWith(".eval.yaml")
1362
1041
  );
1363
1042
  if (found.length !== 1)
1364
1043
  throw new Error(
1365
1044
  found.length === 0 ? `No ${DEFAULT_TEMPLATE_DIR}/*.eval.yaml found; pass the template file.` : `Several templates in ${DEFAULT_TEMPLATE_DIR}/ (${found.join(", ")}); pass the one to push.`
1366
1045
  );
1367
- return join2(DEFAULT_TEMPLATE_DIR, found[0]);
1046
+ return join(DEFAULT_TEMPLATE_DIR, found[0]);
1368
1047
  }
1369
1048
  async function push({ argv, apiUrl, token, json }) {
1370
1049
  const file = getPositionalArg(argv, VALUE_FLAGS) ?? await defaultTemplateFile();
@@ -1398,6 +1077,17 @@ async function push({ argv, apiUrl, token, json }) {
1398
1077
  }
1399
1078
  function describeEval(detail) {
1400
1079
  const d = detail.definition;
1080
+ if (d.kind === "mcp") {
1081
+ return [
1082
+ `${detail.name} ${detail.id}`,
1083
+ d.description,
1084
+ `Application: ${d.application.id} @ ${d.application.commit}`,
1085
+ `Client: ${d.client}`,
1086
+ `Agents: ${d.agents.join(", ")}`,
1087
+ `Cases: ${detail.cases.length}`,
1088
+ `Attempt budget: ${d.attemptSeconds}s`
1089
+ ].join("\n");
1090
+ }
1401
1091
  return [
1402
1092
  `${detail.name} ${detail.id}`,
1403
1093
  d.description,
@@ -1442,8 +1132,8 @@ async function downloadBundles(ctx, evaluation, dir) {
1442
1132
  if (!response.ok)
1443
1133
  throw new Error(`Downloading the bundle of case ${key} failed (${response.status}).`);
1444
1134
  await writeFile(
1445
- join2(dir, `${key}.tar`),
1446
- gunzipSync2(Buffer.from(await response.arrayBuffer()), {
1135
+ join(dir, `${key}.tar`),
1136
+ gunzipSync(Buffer.from(await response.arrayBuffer()), {
1447
1137
  maxOutputLength: DOWNLOAD_MAX_TAR_BYTES
1448
1138
  })
1449
1139
  );
@@ -1546,6 +1236,9 @@ async function addCase(ctx) {
1546
1236
  conversation = parsed.data;
1547
1237
  }
1548
1238
  const evaluation = await getEval(apiUrl, token, name);
1239
+ if (evaluation.definition.kind === "mcp") {
1240
+ throw new Error("Use cofactor mcp-eval add-case for MCP eval cases.");
1241
+ }
1549
1242
  const multiTurn = evaluation.definition.mode === "multi-turn";
1550
1243
  if (multiTurn && !conversation)
1551
1244
  throw new Error(`${name} is multi-turn: pass --conversation <file.json>.`);
@@ -1558,7 +1251,7 @@ async function addCase(ctx) {
1558
1251
  `The bundle is missing required input path(s): ${missing.join(", ")} (the template's input.require).`
1559
1252
  );
1560
1253
  const evalPath = `${EVALS}/${encodeURIComponent(evaluation.id)}`;
1561
- const upload = await request(apiUrl, token, "POST", `${evalPath}/uploads`, {
1254
+ const upload = bundle.bytes > AGENT_EVAL_MULTIPART_THRESHOLD ? (await uploadMultipart(apiUrl, token, evalPath, bundle), { status: "multipart" }) : await request(apiUrl, token, "POST", `${evalPath}/uploads`, {
1562
1255
  sha256: bundle.sha256,
1563
1256
  gzipSha256: bundle.gzipSha256,
1564
1257
  bytes: bundle.bytes
@@ -1648,4 +1341,4 @@ async function runEvalCommand(argv) {
1648
1341
  export {
1649
1342
  runEvalCommand
1650
1343
  };
1651
- //# sourceMappingURL=eval-HCDXL4QT.js.map
1344
+ //# sourceMappingURL=eval-37P36M53.js.map