@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
@@ -0,0 +1,519 @@
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
+ request
4
+ } from "./chunk-XD3PSGFG.js";
5
+ import {
6
+ mcpHarnessNeedsClientEnvironment
7
+ } from "./chunk-C6SNLHVE.js";
8
+
9
+ // ../types/src/agent-eval-template.ts
10
+ import { z } from "zod";
11
+ var ClientRef = z.string().min(1).max(200);
12
+ var ToolingSchema = z.strictObject({
13
+ mcp: z.strictObject({
14
+ port: z.string().min(1),
15
+ path: z.string().min(1).optional(),
16
+ auth: z.strictObject({ header: z.string().min(1), secret: z.string().min(1) }).optional()
17
+ }).optional(),
18
+ cli: z.strictObject({ install: z.string().min(1), env: z.record(z.string(), z.string()).optional() }).optional(),
19
+ skills: z.array(z.string().min(1)).optional(),
20
+ docs: z.array(z.string().min(1)).optional(),
21
+ prompt: z.string().optional()
22
+ });
23
+ var McpCheckSchema = z.discriminatedUnion("type", [
24
+ z.strictObject({ type: z.literal("artifact"), run: z.string().min(1) }),
25
+ z.strictObject({ type: z.literal("state"), run: z.string().min(1) })
26
+ ]);
27
+ var McpJudgeSchema = z.strictObject({
28
+ rubric: z.string().min(20),
29
+ judge: z.strictObject({ provider: z.enum(["anthropic", "azure"]), model: z.string().min(1) })
30
+ });
31
+ var McpCaseExpectedSchema = z.strictObject({
32
+ prompt: z.string().min(1),
33
+ check: McpCheckSchema,
34
+ client: ClientRef,
35
+ judge: McpJudgeSchema.optional()
36
+ });
37
+ var McpCaseSchema = z.strictObject({
38
+ key: z.string().regex(/^[a-z0-9][a-z0-9-]{0,99}$/),
39
+ title: z.string().min(1).max(500),
40
+ prompt: z.string().min(1),
41
+ check: McpCheckSchema,
42
+ client: ClientRef.optional(),
43
+ judge: McpJudgeSchema.optional()
44
+ });
45
+ var McpAgentRef = z.string().regex(/^(claude-code|codex|opencode|openai-agents-sdk|claude-agent-sdk|google-adk)\/.+$/).superRefine((value, ctx) => {
46
+ try {
47
+ parseMcpAgentSelector(value);
48
+ } catch (error) {
49
+ ctx.addIssue({ code: "custom", message: error instanceof Error ? error.message : String(error) });
50
+ }
51
+ });
52
+ var McpAgentEvalDefinitionSchema = z.strictObject({
53
+ version: z.literal(1),
54
+ kind: z.literal("mcp"),
55
+ name: z.string().regex(/^[a-z0-9-]{2,40}$/).refine((name) => name !== "runs" && name !== "compare"),
56
+ description: z.string().min(1).max(500),
57
+ runbook: z.string().min(1),
58
+ application: z.strictObject({ id: z.string().min(1), commit: z.union([z.literal("head"), z.string().regex(/^[0-9a-f]{40}$/)]) }),
59
+ client: ClientRef,
60
+ tooling: ToolingSchema,
61
+ agents: z.array(McpAgentRef).min(1),
62
+ cases: z.array(McpCaseSchema).min(1),
63
+ mode: z.literal("single-turn").default("single-turn"),
64
+ traces: z.strictObject({ capture: z.enum(["full", "metadata"]).default("full") }).default(() => ({ capture: "full" })),
65
+ repeats: z.number().int().min(1).max(7).default(1),
66
+ passAtLeast: z.number().int().min(1).default(1),
67
+ passBar: z.number().min(0.1).max(1).default(0.5),
68
+ attemptSeconds: z.number().int().min(30).max(1700)
69
+ }).superRefine((definition, ctx) => {
70
+ if (definition.agents.some((selector) => !mcpHarnessNeedsClientEnvironment(selector.split("/")[0] ?? "")) && !definition.tooling.mcp)
71
+ ctx.addIssue({ code: "custom", path: ["tooling", "mcp"], message: "MCP-only SDK agents require tooling.mcp" });
72
+ if (definition.passAtLeast > definition.repeats) ctx.addIssue({ code: "custom", path: ["passAtLeast"], message: "passAtLeast must not exceed repeats" });
73
+ const keys = /* @__PURE__ */ new Set();
74
+ definition.cases.forEach((item, index) => {
75
+ if (keys.has(item.key)) ctx.addIssue({ code: "custom", path: ["cases", index, "key"], message: "Case keys must be unique" });
76
+ keys.add(item.key);
77
+ });
78
+ const agents = /* @__PURE__ */ new Set();
79
+ definition.agents.forEach((agent, index) => {
80
+ if (agents.has(agent)) ctx.addIssue({ code: "custom", path: ["agents", index], message: "Agent harness/model pairs must be unique" });
81
+ agents.add(agent);
82
+ });
83
+ });
84
+ function parseMcpAgentSelector(selector) {
85
+ const [harness, ...parts] = selector.split("/");
86
+ if (harness !== "claude-code" && harness !== "codex" && harness !== "opencode" && harness !== "openai-agents-sdk" && harness !== "claude-agent-sdk" && harness !== "google-adk") {
87
+ throw new Error(`Unsupported MCP eval harness: ${harness ?? ""}`);
88
+ }
89
+ let provider;
90
+ if (harness === "claude-code" || harness === "claude-agent-sdk") provider = "anthropic";
91
+ else if (harness === "codex" || harness === "openai-agents-sdk") provider = "azure";
92
+ else if (harness === "google-adk") provider = "google";
93
+ else {
94
+ const [providerPart, ...modelParts] = parts;
95
+ if (providerPart !== "anthropic" && providerPart !== "azure") {
96
+ throw new Error("OpenCode selectors must use opencode/anthropic/<model> or opencode/azure/<model>.");
97
+ }
98
+ provider = providerPart;
99
+ parts.splice(0, parts.length, ...modelParts);
100
+ }
101
+ const model = parts.join("/");
102
+ if (!model) throw new Error(`MCP eval selector ${selector} is missing a model.`);
103
+ return { harness, provider, model };
104
+ }
105
+ var AGENT_EVAL_MAX_BUNDLE_BYTES = 512 * 1024 ** 2;
106
+ var AGENT_EVAL_MAX_TOTAL_BUNDLE_BYTES = 2 * 1024 ** 3;
107
+ var ModelSchema = z.strictObject({
108
+ provider: z.enum(["anthropic", "azure"]),
109
+ model: z.string().min(1)
110
+ });
111
+ 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");
112
+ var ProviderEnvSchema = z.strictObject({
113
+ env: z.strictObject({
114
+ apiKey: EnvName,
115
+ // gets the attempt's scoped proxy token
116
+ baseUrl: EnvName,
117
+ // gets the proxy URL for the provider's wire
118
+ model: EnvName
119
+ // gets the model id
120
+ }).refine((env) => new Set(Object.values(env)).size === 3, "apiKey, baseUrl and model must be different names")
121
+ });
122
+ var ScriptGrader = z.strictObject({
123
+ id: z.string().regex(/^[a-z0-9-]+$/),
124
+ kind: z.literal("script"),
125
+ command: z.string().min(1)
126
+ });
127
+ var JudgeGrader = z.strictObject({
128
+ id: z.string().regex(/^[a-z0-9-]+$/),
129
+ kind: z.literal("ai-judge"),
130
+ rubric: z.string().min(20),
131
+ scale: z.enum(["binary", "1-5"]),
132
+ passAt: z.number().int().min(2).max(5).optional(),
133
+ // required when scale is '1-5'
134
+ judge: ModelSchema
135
+ });
136
+ var AgentEvalTemplateSchema = z.strictObject({
137
+ version: z.literal(1),
138
+ kind: z.literal("agent").default("agent"),
139
+ name: z.string().regex(/^[a-z0-9-]{2,40}$/).refine((n) => n !== "runs" && n !== "compare"),
140
+ // reserved route segments
141
+ description: z.string().min(1).max(500),
142
+ proves: z.strictObject({ capabilities: z.array(z.string().regex(/^CAP-/)).min(1) }),
143
+ // resolved within the application given at push
144
+ runbook: z.string().min(1),
145
+ // path relative to this file
146
+ mode: z.enum(["single-turn", "multi-turn"]).default("single-turn"),
147
+ traces: z.strictObject({ capture: z.enum(["full", "metadata"]).default("full") }).default(() => ({ capture: "full" })),
148
+ run: z.string().min(1),
149
+ // shell command, cwd = repo root of the commit; multi-turn: the agent process, JSONL on stdin/stdout
150
+ simulator: ModelSchema.optional(),
151
+ // required when mode is multi-turn: pins the simulated-user model
152
+ input: z.strictObject({
153
+ description: z.string().min(1),
154
+ require: z.array(z.string()).default([])
155
+ }),
156
+ agent: z.strictObject({
157
+ models: z.record(z.string().regex(/^[a-z0-9-]+$/), ModelSchema).refine((m) => Object.keys(m).length >= 1),
158
+ default: z.string(),
159
+ // must be a key of models
160
+ providers: z.strictObject({ anthropic: ProviderEnvSchema.optional(), azure: ProviderEnvSchema.optional() }).optional()
161
+ // absent, or an absent entry: the standard names; every entry's provider must be used by a model
162
+ }),
163
+ graders: z.array(z.discriminatedUnion("kind", [ScriptGrader, JudgeGrader])).min(1),
164
+ repeats: z.number().int().min(1).max(7).default(1),
165
+ // attempts per case; a stochastic agent raises it together with passAtLeast
166
+ passAtLeast: z.number().int().min(1).default(1),
167
+ // <= repeats
168
+ passBar: z.number().min(0.1).max(1),
169
+ // minimum case pass rate for the eval to pass
170
+ attemptSeconds: z.number().int().min(30).max(1700)
171
+ // grader commands get a fixed 120 s
172
+ }).superRefine((template, ctx) => {
173
+ if (!Object.hasOwn(template.agent.models, template.agent.default)) {
174
+ ctx.addIssue({
175
+ code: "custom",
176
+ path: ["agent", "default"],
177
+ message: "Default must name an agent model alias"
178
+ });
179
+ }
180
+ const used = new Set(Object.values(template.agent.models).map((m) => m.provider));
181
+ for (const [provider, entry] of Object.entries(template.agent.providers ?? {})) {
182
+ if (entry && !used.has(provider)) {
183
+ ctx.addIssue({
184
+ code: "custom",
185
+ path: ["agent", "providers", provider],
186
+ message: `No agent model uses provider ${provider}; remove this entry or add a model that uses it`
187
+ });
188
+ }
189
+ }
190
+ if (template.passAtLeast > template.repeats) {
191
+ ctx.addIssue({
192
+ code: "custom",
193
+ path: ["passAtLeast"],
194
+ message: "passAtLeast must not exceed repeats"
195
+ });
196
+ }
197
+ const ids = /* @__PURE__ */ new Set();
198
+ template.graders.forEach((grader, index) => {
199
+ if (ids.has(grader.id)) {
200
+ ctx.addIssue({
201
+ code: "custom",
202
+ path: ["graders", index, "id"],
203
+ message: "Grader ids must be unique"
204
+ });
205
+ }
206
+ ids.add(grader.id);
207
+ if (grader.kind === "ai-judge" && grader.scale === "1-5" && grader.passAt === void 0) {
208
+ ctx.addIssue({
209
+ code: "custom",
210
+ path: ["graders", index, "passAt"],
211
+ message: "A 1-5 judge requires passAt"
212
+ });
213
+ }
214
+ });
215
+ if (template.mode === "multi-turn" !== (template.simulator !== void 0)) {
216
+ ctx.addIssue({
217
+ code: "custom",
218
+ path: ["simulator"],
219
+ message: "A simulator is required exactly when mode is multi-turn"
220
+ });
221
+ }
222
+ });
223
+ var EvalConversationSchema = z.discriminatedUnion("kind", [
224
+ z.strictObject({ kind: z.literal("scripted"), turns: z.array(z.string().min(1)).min(1) }),
225
+ z.strictObject({
226
+ kind: z.literal("simulated"),
227
+ persona: z.string().min(1),
228
+ goal: z.string().min(1),
229
+ facts: z.array(z.string()),
230
+ stopWhen: z.string().min(1),
231
+ maxTurns: z.number().int().min(2).max(30)
232
+ })
233
+ ]);
234
+ var AGENT_EVAL_MULTIPART_THRESHOLD = 32 * 1024 * 1024;
235
+ var AGENT_EVAL_PART_BYTES = 8 * 1024 * 1024;
236
+
237
+ // src/eval-bundle.ts
238
+ import { createHash } from "crypto";
239
+ import { request as httpRequest } from "http";
240
+ import { request as httpsRequest } from "https";
241
+ import { lstat, readdir, readFile } from "fs/promises";
242
+ import { join } from "path";
243
+ import { gunzipSync, gzipSync } from "zlib";
244
+ var BLOCK = 512;
245
+ var MAX_RAW_BYTES = AGENT_EVAL_MAX_BUNDLE_BYTES;
246
+ var MAX_UNPACKED_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;
247
+ var sha256Hex = (data) => createHash("sha256").update(data).digest("hex");
248
+ function octal(value, width) {
249
+ return `${value.toString(8).padStart(width - 1, "0")}\0`;
250
+ }
251
+ function splitName(path) {
252
+ if (Buffer.byteLength(path) <= 100) return { prefix: "", name: path };
253
+ for (let i = path.indexOf("/"); i !== -1; i = path.indexOf("/", i + 1)) {
254
+ const prefix = path.slice(0, i);
255
+ const name = path.slice(i + 1);
256
+ if (Buffer.byteLength(prefix) <= 155 && Buffer.byteLength(name) <= 100) return { prefix, name };
257
+ }
258
+ throw new Error(`Path is too long for a bundle (limit 255 bytes): ${path}`);
259
+ }
260
+ function header(path, size, type, mode) {
261
+ const { prefix, name } = splitName(path);
262
+ const block = Buffer.alloc(BLOCK);
263
+ block.write(name, 0, "utf8");
264
+ block.write(octal(mode, 8), 100, "ascii");
265
+ block.write(octal(0, 8), 108, "ascii");
266
+ block.write(octal(0, 8), 116, "ascii");
267
+ block.write(octal(size, 12), 124, "ascii");
268
+ block.write(octal(0, 12), 136, "ascii");
269
+ block.fill(32, 148, 156);
270
+ block.write(type, 156, "ascii");
271
+ block.write("ustar\0", 257, "ascii");
272
+ block.write("00", 263, "ascii");
273
+ block.write(prefix, 345, "utf8");
274
+ const checksum = block.reduce((sum, byte) => sum + byte, 0);
275
+ block.write(`${checksum.toString(8).padStart(6, "0")}\0 `, 148, "ascii");
276
+ return block;
277
+ }
278
+ async function walk(root, real = "", archive = "") {
279
+ 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)));
280
+ const entries = [];
281
+ for (const name of names) {
282
+ const realPath = real ? `${real}/${name.real}` : name.real;
283
+ const path = archive ? `${archive}/${name.archive}` : name.archive;
284
+ const absolute = join(root, realPath);
285
+ const stats = await lstat(absolute);
286
+ if (stats.isDirectory()) {
287
+ entries.push({ path, absolute, directory: true, mode: 493, size: 0 });
288
+ entries.push(...await walk(root, realPath, path));
289
+ } else if (stats.isFile()) {
290
+ entries.push({
291
+ path,
292
+ absolute,
293
+ directory: false,
294
+ mode: stats.mode & 73 ? 493 : 420,
295
+ size: stats.size
296
+ });
297
+ } else {
298
+ throw new Error(
299
+ `Cannot bundle ${path}: only regular files and directories are supported (no symlinks or devices).`
300
+ );
301
+ }
302
+ }
303
+ return entries;
304
+ }
305
+ async function tarDirectory(root) {
306
+ const entries = await walk(root);
307
+ const total = entries.reduce((sum, entry) => sum + entry.size, 0);
308
+ if (total > MAX_RAW_BYTES) {
309
+ throw new Error(
310
+ `The input directory holds ${total} bytes; the CLI bundles at most ${MAX_RAW_BYTES}. Prune it.`
311
+ );
312
+ }
313
+ const parts = [];
314
+ for (const entry of entries) {
315
+ if (entry.directory) {
316
+ parts.push(header(`${entry.path}/`, 0, "5", entry.mode));
317
+ continue;
318
+ }
319
+ const content = await readFile(entry.absolute);
320
+ parts.push(header(entry.path, content.length, "0", entry.mode), content);
321
+ const padding = (BLOCK - content.length % BLOCK) % BLOCK;
322
+ if (padding) parts.push(Buffer.alloc(padding));
323
+ }
324
+ parts.push(Buffer.alloc(BLOCK * 2));
325
+ return Buffer.concat(parts);
326
+ }
327
+ function readString(block, start, length) {
328
+ const slice = block.subarray(start, start + length);
329
+ const end = slice.indexOf(0);
330
+ return slice.subarray(0, end === -1 ? length : end).toString("utf8");
331
+ }
332
+ function normalize(path) {
333
+ return path.replace(/^(\.\/)+/, "").replace(/\/+$/, "");
334
+ }
335
+ function listTarEntries(tar) {
336
+ const entries = [];
337
+ let longName = null;
338
+ let offset = 0;
339
+ while (offset + BLOCK <= tar.length) {
340
+ const block = tar.subarray(offset, offset + BLOCK);
341
+ if (block.every((byte) => byte === 0)) break;
342
+ const stored = Number.parseInt(readString(block, 148, 8).trim(), 8);
343
+ const actual = block.reduce((sum, byte, i) => sum + (i >= 148 && i < 156 ? 32 : byte), 0);
344
+ if (stored !== actual) throw new Error("not a valid tar archive (bad header checksum)");
345
+ const size = Number.parseInt(readString(block, 124, 12).trim() || "0", 8);
346
+ const type = String.fromCharCode(block[156] || 48);
347
+ const body = tar.subarray(offset + BLOCK, offset + BLOCK + size);
348
+ offset += BLOCK + Math.ceil(size / BLOCK) * BLOCK;
349
+ if (type === "L") {
350
+ longName = readString(body, 0, body.length);
351
+ continue;
352
+ }
353
+ if (type === "x") {
354
+ const record = body.toString("utf8").match(/\d+ path=([^\n]*)\n/);
355
+ if (record?.[1]) longName = record[1];
356
+ continue;
357
+ }
358
+ if (type === "g") continue;
359
+ const prefix = readString(block, 345, 155);
360
+ if (["1", "2", "3", "4", "6"].includes(type))
361
+ throw new Error(
362
+ `the archive holds a link or device entry (${readString(block, 0, 100)}); only files and directories are supported`
363
+ );
364
+ const name = longName ?? (prefix ? `${prefix}/${readString(block, 0, 100)}` : readString(block, 0, 100));
365
+ longName = null;
366
+ entries.push(normalize(name));
367
+ }
368
+ return entries;
369
+ }
370
+ async function loadBundle(input) {
371
+ let stats;
372
+ try {
373
+ stats = await lstat(input);
374
+ } catch {
375
+ throw new Error(`--input ${input} does not exist.`);
376
+ }
377
+ let tar;
378
+ if (stats.isDirectory()) {
379
+ tar = await tarDirectory(input);
380
+ } else if (stats.isFile() && /\.(tar\.gz|tgz)$/.test(input)) {
381
+ if (stats.size > AGENT_EVAL_MAX_BUNDLE_BYTES)
382
+ throw new Error(
383
+ `${input} is ${stats.size} bytes; a bundle is limited to ${AGENT_EVAL_MAX_BUNDLE_BYTES}. Prune it.`
384
+ );
385
+ const gzip = await readFile(input);
386
+ try {
387
+ tar = gunzipSync(gzip, { maxOutputLength: MAX_UNPACKED_BYTES });
388
+ } catch {
389
+ throw new Error(
390
+ `--input ${input} is not a valid gzip file, or unpacks to more than ${MAX_UNPACKED_BYTES} bytes.`
391
+ );
392
+ }
393
+ } else {
394
+ throw new Error("--input must be a directory or a .tar.gz file.");
395
+ }
396
+ const archive = gzipSync(tar, { level: 9 });
397
+ let entries;
398
+ try {
399
+ entries = listTarEntries(tar);
400
+ } catch (error) {
401
+ throw new Error(`--input ${input}: ${error instanceof Error ? error.message : String(error)}.`);
402
+ }
403
+ return {
404
+ sha256: sha256Hex(tar),
405
+ gzipSha256: sha256Hex(archive),
406
+ bytes: archive.length,
407
+ archive,
408
+ entries
409
+ };
410
+ }
411
+ function missingRequiredPaths(entries, required) {
412
+ return required.filter((path) => {
413
+ const wanted = normalize(path);
414
+ return !entries.some((entry) => entry === wanted || entry.startsWith(`${wanted}/`));
415
+ });
416
+ }
417
+ var uploadBundle = (url, headers, archive) => new Promise((resolve, reject) => {
418
+ const target = new URL(url);
419
+ const request2 = target.protocol === "https:" ? httpsRequest : httpRequest;
420
+ const req = request2(
421
+ target,
422
+ { method: "PUT", headers: { ...headers, "content-length": String(archive.byteLength) } },
423
+ (response) => {
424
+ response.on("error", reject);
425
+ const status = response.statusCode;
426
+ if (status !== void 0 && status >= 200 && status < 300) {
427
+ response.on("end", resolve);
428
+ response.resume();
429
+ } else {
430
+ response.resume();
431
+ req.destroy();
432
+ reject(new Error(`Uploading the bundle failed (${String(status)}).`));
433
+ }
434
+ }
435
+ );
436
+ req.on("error", reject);
437
+ req.end(archive);
438
+ });
439
+
440
+ // src/eval-multipart.ts
441
+ import { createHash as createHash2, randomUUID } from "crypto";
442
+ import { mkdir, readFile as readFile2, writeFile, rm, rename } from "fs/promises";
443
+ import { homedir } from "os";
444
+ import { join as join2 } from "path";
445
+ async function uploadMultipart(apiUrl, token, evalPath, bundle) {
446
+ const identity = createHash2("sha256").update(JSON.stringify([apiUrl, evalPath, bundle.gzipSha256])).digest("hex");
447
+ const dir = join2(homedir(), ".cofactor", "eval-uploads");
448
+ const checkpoint = join2(dir, `${identity}.json`);
449
+ await mkdir(dir, { recursive: true, mode: 448 });
450
+ let uploadId;
451
+ try {
452
+ const saved = JSON.parse(await readFile2(checkpoint, "utf8"));
453
+ if (typeof saved !== "object" || !saved || !("uploadId" in saved) || typeof saved.uploadId !== "string")
454
+ throw new Error("Invalid bundle upload checkpoint");
455
+ uploadId = saved.uploadId;
456
+ } catch (error) {
457
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) throw error;
458
+ }
459
+ const checksums = [];
460
+ for (let offset = 0; offset < bundle.bytes; offset += AGENT_EVAL_PART_BYTES)
461
+ checksums.push(
462
+ createHash2("sha256").update(bundle.archive.subarray(offset, offset + AGENT_EVAL_PART_BYTES)).digest("hex")
463
+ );
464
+ const body = {
465
+ sha256: bundle.sha256,
466
+ gzipSha256: bundle.gzipSha256,
467
+ bytes: bundle.bytes,
468
+ checksums
469
+ };
470
+ const endpoint = `${evalPath}/uploads/multipart`;
471
+ const reply = await request(apiUrl, token, "POST", endpoint, {
472
+ ...body,
473
+ uploadId,
474
+ complete: false
475
+ });
476
+ if (reply.status === "multipart") {
477
+ const temporary = `${checkpoint}.${randomUUID()}.tmp`;
478
+ await writeFile(temporary, JSON.stringify({ uploadId: reply.uploadId }), { mode: 384 });
479
+ await rename(temporary, checkpoint);
480
+ for (const part of reply.parts) {
481
+ const offset = (part.number - 1) * AGENT_EVAL_PART_BYTES;
482
+ for (let attempt = 0; ; attempt++) {
483
+ try {
484
+ await uploadBundle(
485
+ part.url,
486
+ part.headers,
487
+ bundle.archive.subarray(offset, offset + AGENT_EVAL_PART_BYTES)
488
+ );
489
+ break;
490
+ } catch (error) {
491
+ if (!(error instanceof Error && "code" in error) || attempt === 2) throw error;
492
+ console.error(
493
+ `Retrying bundle part ${part.number} after a network failure (${attempt + 1}/2).`
494
+ );
495
+ await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** attempt));
496
+ }
497
+ }
498
+ }
499
+ await request(apiUrl, token, "POST", endpoint, {
500
+ ...body,
501
+ uploadId: reply.uploadId,
502
+ complete: true
503
+ });
504
+ }
505
+ await rm(checkpoint, { force: true });
506
+ }
507
+
508
+ export {
509
+ McpAgentEvalDefinitionSchema,
510
+ AGENT_EVAL_MAX_BUNDLE_BYTES,
511
+ AgentEvalTemplateSchema,
512
+ EvalConversationSchema,
513
+ AGENT_EVAL_MULTIPART_THRESHOLD,
514
+ loadBundle,
515
+ missingRequiredPaths,
516
+ uploadBundle,
517
+ uploadMultipart
518
+ };
519
+ //# sourceMappingURL=chunk-UPP4F2BE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../types/src/agent-eval-template.ts","../src/eval-bundle.ts","../src/eval-multipart.ts"],"sourcesContent":["/**\n * Agent evaluation shared contracts.\n * @module agent-eval-template\n * @see docs/project/conventions.md\n */\nimport { z } from 'zod';\nimport { mcpHarnessNeedsClientEnvironment, type ToolingSpec } from './agent-eval.js';\n\nconst ClientRef = z.string().min(1).max(200);\nconst ToolingSchema = z.strictObject({\n mcp: z.strictObject({\n port: z.string().min(1),\n path: z.string().min(1).optional(),\n auth: z.strictObject({ header: z.string().min(1), secret: z.string().min(1) }).optional(),\n }).optional(),\n cli: z.strictObject({ install: z.string().min(1), env: z.record(z.string(), z.string()).optional() }).optional(),\n skills: z.array(z.string().min(1)).optional(),\n docs: z.array(z.string().min(1)).optional(),\n prompt: z.string().optional(),\n});\nconst McpCheckSchema = z.discriminatedUnion('type', [\n z.strictObject({ type: z.literal('artifact'), run: z.string().min(1) }),\n z.strictObject({ type: z.literal('state'), run: z.string().min(1) }),\n]);\nconst McpJudgeSchema = z.strictObject({\n rubric: z.string().min(20),\n judge: z.strictObject({ provider: z.enum(['anthropic', 'azure']), model: z.string().min(1) }),\n});\nexport const McpCaseExpectedSchema = z.strictObject({\n prompt: z.string().min(1),\n check: McpCheckSchema,\n client: ClientRef,\n judge: McpJudgeSchema.optional(),\n});\n\nconst McpCaseSchema = z.strictObject({\n key: z.string().regex(/^[a-z0-9][a-z0-9-]{0,99}$/),\n title: z.string().min(1).max(500),\n prompt: z.string().min(1),\n check: McpCheckSchema,\n client: ClientRef.optional(),\n judge: McpJudgeSchema.optional(),\n});\n\nconst McpAgentRef = z.string().regex(/^(claude-code|codex|opencode|openai-agents-sdk|claude-agent-sdk|google-adk)\\/.+$/).superRefine((value, ctx) => {\n try { parseMcpAgentSelector(value); }\n catch (error) { ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) }); }\n});\nexport const McpAgentEvalDefinitionSchema = z.strictObject({\n version: z.literal(1),\n kind: z.literal('mcp'),\n name: z.string().regex(/^[a-z0-9-]{2,40}$/).refine((name) => name !== 'runs' && name !== 'compare'),\n description: z.string().min(1).max(500),\n runbook: z.string().min(1),\n application: z.strictObject({ id: z.string().min(1), commit: z.union([z.literal('head'), z.string().regex(/^[0-9a-f]{40}$/)]) }),\n client: ClientRef,\n tooling: ToolingSchema,\n agents: z.array(McpAgentRef).min(1),\n cases: z.array(McpCaseSchema).min(1),\n mode: z.literal('single-turn').default('single-turn'),\n traces: z.strictObject({ capture: z.enum(['full', 'metadata']).default('full') }).default(() => ({ capture: 'full' as const })),\n repeats: z.number().int().min(1).max(7).default(1),\n passAtLeast: z.number().int().min(1).default(1),\n passBar: z.number().min(0.1).max(1).default(0.5),\n attemptSeconds: z.number().int().min(30).max(1700),\n})\n .superRefine((definition, ctx) => {\n if (definition.agents.some((selector) => !mcpHarnessNeedsClientEnvironment(selector.split('/')[0] ?? '')) && !definition.tooling.mcp)\n ctx.addIssue({ code: 'custom', path: ['tooling', 'mcp'], message: 'MCP-only SDK agents require tooling.mcp' });\n if (definition.passAtLeast > definition.repeats) ctx.addIssue({ code: 'custom', path: ['passAtLeast'], message: 'passAtLeast must not exceed repeats' });\n const keys = new Set<string>();\n definition.cases.forEach((item, index) => {\n if (keys.has(item.key)) ctx.addIssue({ code: 'custom', path: ['cases', index, 'key'], message: 'Case keys must be unique' });\n keys.add(item.key);\n });\n const agents = new Set<string>();\n definition.agents.forEach((agent, index) => {\n if (agents.has(agent)) ctx.addIssue({ code: 'custom', path: ['agents', index], message: 'Agent harness/model pairs must be unique' });\n agents.add(agent);\n });\n });\n\nexport type McpAgentEvalDefinition = z.infer<typeof McpAgentEvalDefinitionSchema> & { tooling: ToolingSpec };\nexport type AgentEvalDefinition = AgentEvalTemplate | McpAgentEvalDefinition;\n\nexport function parseMcpAgentSelector(selector: string): {\n harness: 'claude-code' | 'codex' | 'opencode' | 'openai-agents-sdk' | 'claude-agent-sdk' | 'google-adk';\n provider: 'anthropic' | 'azure' | 'google';\n model: string;\n} {\n const [harness, ...parts] = selector.split('/');\n if (\n harness !== 'claude-code' && harness !== 'codex' && harness !== 'opencode' &&\n harness !== 'openai-agents-sdk' && harness !== 'claude-agent-sdk' && harness !== 'google-adk'\n ) {\n throw new Error(`Unsupported MCP eval harness: ${harness ?? ''}`);\n }\n let provider: 'anthropic' | 'azure' | 'google';\n if (harness === 'claude-code' || harness === 'claude-agent-sdk') provider = 'anthropic';\n else if (harness === 'codex' || harness === 'openai-agents-sdk') provider = 'azure';\n else if (harness === 'google-adk') provider = 'google';\n else {\n const [providerPart, ...modelParts] = parts;\n if (providerPart !== 'anthropic' && providerPart !== 'azure') {\n throw new Error('OpenCode selectors must use opencode/anthropic/<model> or opencode/azure/<model>.');\n }\n provider = providerPart;\n parts.splice(0, parts.length, ...modelParts);\n }\n const model = parts.join('/');\n if (!model) throw new Error(`MCP eval selector ${selector} is missing a model.`);\n return { harness, provider, model };\n}\n\nexport const AGENT_EVAL_MAX_BUNDLE_BYTES = 512 * 1024 ** 2;\nexport const AGENT_EVAL_MAX_TOTAL_BUNDLE_BYTES = 2 * 1024 ** 3;\n\nconst ModelSchema = z.strictObject({\n provider: z.enum(['anthropic', 'azure']),\n model: z.string().min(1),\n});\n\n// Upper case like sandbox secret names; EVAL_* is the attempt's own contract and would be overwritten.\nconst EnvName = z\n .string()\n .regex(/^[A-Z_][A-Z0-9_]*$/, 'Must be an upper-case environment variable name')\n .refine((name) => !name.startsWith('EVAL_'), 'EVAL_ names are reserved for the attempt environment');\n/**\n * Where an agent reads its model configuration: the env var names the attempt sets for one provider. An entry\n * replaces all of that provider's standard names (spec D8; azure's two key and two URL names become one each) and is\n * needed only when the agent reads other names.\n */\nconst ProviderEnvSchema = z.strictObject({\n env: z\n .strictObject({\n apiKey: EnvName, // gets the attempt's scoped proxy token\n baseUrl: EnvName, // gets the proxy URL for the provider's wire\n model: EnvName, // gets the model id\n })\n .refine((env) => new Set(Object.values(env)).size === 3, 'apiKey, baseUrl and model must be different names'),\n});\n\nconst ScriptGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('script'),\n command: z.string().min(1),\n});\nconst JudgeGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('ai-judge'),\n rubric: z.string().min(20),\n scale: z.enum(['binary', '1-5']),\n passAt: z.number().int().min(2).max(5).optional(), // required when scale is '1-5'\n judge: ModelSchema,\n});\n\nexport const AgentEvalTemplateSchema = z\n .strictObject({\n version: z.literal(1),\n kind: z.literal('agent').default('agent'),\n name: z\n .string()\n .regex(/^[a-z0-9-]{2,40}$/)\n .refine((n) => n !== 'runs' && n !== 'compare'), // reserved route segments\n description: z.string().min(1).max(500),\n proves: z.strictObject({ capabilities: z.array(z.string().regex(/^CAP-/)).min(1) }), // resolved within the application given at push\n runbook: z.string().min(1), // path relative to this file\n mode: z.enum(['single-turn', 'multi-turn']).default('single-turn'),\n traces: z.strictObject({ capture: z.enum(['full', 'metadata']).default('full') }).default(() => ({ capture: 'full' as const })),\n run: z.string().min(1), // shell command, cwd = repo root of the commit; multi-turn: the agent process, JSONL on stdin/stdout\n simulator: ModelSchema.optional(), // required when mode is multi-turn: pins the simulated-user model\n input: z.strictObject({\n description: z.string().min(1),\n require: z.array(z.string()).default([]),\n }),\n agent: z.strictObject({\n models: z\n .record(z.string().regex(/^[a-z0-9-]+$/), ModelSchema)\n .refine((m) => Object.keys(m).length >= 1),\n default: z.string(), // must be a key of models\n providers: z\n .strictObject({ anthropic: ProviderEnvSchema.optional(), azure: ProviderEnvSchema.optional() })\n .optional(), // absent, or an absent entry: the standard names; every entry's provider must be used by a model\n }),\n graders: z.array(z.discriminatedUnion('kind', [ScriptGrader, JudgeGrader])).min(1),\n repeats: z.number().int().min(1).max(7).default(1), // attempts per case; a stochastic agent raises it together with passAtLeast\n passAtLeast: z.number().int().min(1).default(1), // <= repeats\n passBar: z.number().min(0.1).max(1), // minimum case pass rate for the eval to pass\n attemptSeconds: z.number().int().min(30).max(1700), // grader commands get a fixed 120 s\n })\n .superRefine((template, ctx) => {\n if (!Object.hasOwn(template.agent.models, template.agent.default)) {\n ctx.addIssue({\n code: 'custom',\n path: ['agent', 'default'],\n message: 'Default must name an agent model alias',\n });\n }\n const used = new Set<string>(Object.values(template.agent.models).map((m) => m.provider));\n for (const [provider, entry] of Object.entries(template.agent.providers ?? {})) {\n if (entry && !used.has(provider)) {\n ctx.addIssue({\n code: 'custom',\n path: ['agent', 'providers', provider],\n message: `No agent model uses provider ${provider}; remove this entry or add a model that uses it`,\n });\n }\n }\n if (template.passAtLeast > template.repeats) {\n ctx.addIssue({\n code: 'custom',\n path: ['passAtLeast'],\n message: 'passAtLeast must not exceed repeats',\n });\n }\n const ids = new Set<string>();\n template.graders.forEach((grader, index) => {\n if (ids.has(grader.id)) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'id'],\n message: 'Grader ids must be unique',\n });\n }\n ids.add(grader.id);\n if (grader.kind === 'ai-judge' && grader.scale === '1-5' && grader.passAt === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'passAt'],\n message: 'A 1-5 judge requires passAt',\n });\n }\n });\n if ((template.mode === 'multi-turn') !== (template.simulator !== undefined)) {\n ctx.addIssue({\n code: 'custom',\n path: ['simulator'],\n message: 'A simulator is required exactly when mode is multi-turn',\n });\n }\n });\nexport type AgentEvalTemplate = z.infer<typeof AgentEvalTemplateSchema>;\n\n/** A multi-turn case's conversation; null on a single-turn case. */\nexport const EvalConversationSchema = z.discriminatedUnion('kind', [\n z.strictObject({ kind: z.literal('scripted'), turns: z.array(z.string().min(1)).min(1) }),\n z.strictObject({\n kind: z.literal('simulated'),\n persona: z.string().min(1),\n goal: z.string().min(1),\n facts: z.array(z.string()),\n stopWhen: z.string().min(1),\n maxTurns: z.number().int().min(2).max(30),\n }),\n]);\nexport type EvalConversation = z.infer<typeof EvalConversationSchema>;\n\n/** Large uploads use bounded parts so a dropped connection loses at most one part. */\nexport const AGENT_EVAL_MULTIPART_THRESHOLD = 32 * 1024 * 1024;\nexport const AGENT_EVAL_PART_BYTES = 8 * 1024 * 1024;\n","/**\n * Case bundles for `cofactor eval add-case`: a deterministic tar of a directory (gzipped for\n * upload), a reader for an existing .tar.gz, and the `input.require` check. The content address\n * `sha256` is the hash of the uncompressed tar, which this file fully specifies, so the same files\n * give the same sha256 on any runtime and identical bundles deduplicate across cases and evals\n * (spec D4, D11). Gzip is transport only: its bytes depend on the runtime's zlib, so they are\n * hashed separately as `gzipSha256` for the upload's integrity check.\n */\nimport { createHash } from 'node:crypto';\nimport { request as httpRequest } from 'node:http';\nimport { request as httpsRequest } from 'node:https';\nimport { lstat, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { gunzipSync, gzipSync } from 'node:zlib';\nimport { AGENT_EVAL_MAX_BUNDLE_BYTES } from '@chatsdet/types/agent-eval-template';\n\nconst BLOCK = 512;\n// Memory guards for this process, not the server's limit (which is on the archive's bytes and is\n// enforced by the API): a directory's raw size, and what an archive may unpack to.\nconst MAX_RAW_BYTES = AGENT_EVAL_MAX_BUNDLE_BYTES;\nconst MAX_UNPACKED_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;\n\n/** `sha256` addresses the uncompressed tar; `archive` is the gzip that gets uploaded, with its own hash and size. */\nexport type BundleSource = {\n sha256: string;\n gzipSha256: string;\n bytes: number;\n archive: Buffer;\n entries: string[];\n};\n\nconst sha256Hex = (data: Buffer): string => createHash('sha256').update(data).digest('hex');\n\nfunction octal(value: number, width: number): string {\n return `${value.toString(8).padStart(width - 1, '0')}\\0`;\n}\n\n/** Split a path into the ustar `prefix` and `name` fields, which hold 155 and 100 bytes. */\nfunction splitName(path: string): { prefix: string; name: string } {\n if (Buffer.byteLength(path) <= 100) return { prefix: '', name: path };\n for (let i = path.indexOf('/'); i !== -1; i = path.indexOf('/', i + 1)) {\n const prefix = path.slice(0, i);\n const name = path.slice(i + 1);\n if (Buffer.byteLength(prefix) <= 155 && Buffer.byteLength(name) <= 100) return { prefix, name };\n }\n throw new Error(`Path is too long for a bundle (limit 255 bytes): ${path}`);\n}\n\nfunction header(path: string, size: number, type: '0' | '5', mode: number): Buffer {\n const { prefix, name } = splitName(path);\n const block = Buffer.alloc(BLOCK);\n block.write(name, 0, 'utf8');\n block.write(octal(mode, 8), 100, 'ascii');\n block.write(octal(0, 8), 108, 'ascii'); // uid\n block.write(octal(0, 8), 116, 'ascii'); // gid\n block.write(octal(size, 12), 124, 'ascii');\n block.write(octal(0, 12), 136, 'ascii'); // fixed mtime\n block.fill(0x20, 148, 156); // checksum placeholder is spaces\n block.write(type, 156, 'ascii');\n block.write('ustar\\0', 257, 'ascii');\n block.write('00', 263, 'ascii');\n // uname and gname stay empty: no owner names in the archive.\n block.write(prefix, 345, 'utf8');\n const checksum = block.reduce((sum, byte) => sum + byte, 0);\n block.write(`${checksum.toString(8).padStart(6, '0')}\\0 `, 148, 'ascii');\n return block;\n}\n\ntype Entry = { path: string; absolute: string; directory: boolean; mode: number; size: number };\n\n/** Entries in byte order of their NFC-normalized names, so macOS (NFD) and Linux file systems agree. */\nasync function walk(root: string, real = '', archive = ''): Promise<Entry[]> {\n const names = (await readdir(real ? join(root, real) : root))\n .map((name) => ({ real: name, archive: name.normalize('NFC') }))\n .sort((a, b) => Buffer.compare(Buffer.from(a.archive), Buffer.from(b.archive)));\n const entries: Entry[] = [];\n for (const name of names) {\n const realPath = real ? `${real}/${name.real}` : name.real;\n const path = archive ? `${archive}/${name.archive}` : name.archive;\n const absolute = join(root, realPath);\n const stats = await lstat(absolute);\n if (stats.isDirectory()) {\n entries.push({ path, absolute, directory: true, mode: 0o755, size: 0 });\n entries.push(...(await walk(root, realPath, path)));\n } else if (stats.isFile()) {\n entries.push({\n path,\n absolute,\n directory: false,\n mode: stats.mode & 0o111 ? 0o755 : 0o644,\n size: stats.size,\n });\n } else {\n throw new Error(\n `Cannot bundle ${path}: only regular files and directories are supported (no symlinks or devices).`\n );\n }\n }\n return entries;\n}\n\n/** Tar a directory deterministically: sorted entries, mtime 0, uid and gid 0, no owner names. */\nexport async function tarDirectory(root: string): Promise<Buffer> {\n const entries = await walk(root);\n const total = entries.reduce((sum, entry) => sum + entry.size, 0);\n if (total > MAX_RAW_BYTES) {\n throw new Error(\n `The input directory holds ${total} bytes; the CLI bundles at most ${MAX_RAW_BYTES}. Prune it.`\n );\n }\n const parts: Buffer[] = [];\n for (const entry of entries) {\n if (entry.directory) {\n parts.push(header(`${entry.path}/`, 0, '5', entry.mode));\n continue;\n }\n const content = await readFile(entry.absolute);\n parts.push(header(entry.path, content.length, '0', entry.mode), content);\n const padding = (BLOCK - (content.length % BLOCK)) % BLOCK;\n if (padding) parts.push(Buffer.alloc(padding));\n }\n parts.push(Buffer.alloc(BLOCK * 2));\n return Buffer.concat(parts);\n}\n\nfunction readString(block: Buffer, start: number, length: number): string {\n const slice = block.subarray(start, start + length);\n const end = slice.indexOf(0);\n return slice.subarray(0, end === -1 ? length : end).toString('utf8');\n}\n\nfunction normalize(path: string): string {\n return path.replace(/^(\\.\\/)+/, '').replace(/\\/+$/, '');\n}\n\n/** Entry paths of an uncompressed tar (ustar, GNU long names and pax `path` records). */\nexport function listTarEntries(tar: Buffer): string[] {\n const entries: string[] = [];\n let longName: string | null = null;\n let offset = 0;\n while (offset + BLOCK <= tar.length) {\n const block = tar.subarray(offset, offset + BLOCK);\n if (block.every((byte) => byte === 0)) break;\n const stored = Number.parseInt(readString(block, 148, 8).trim(), 8);\n const actual = block.reduce((sum, byte, i) => sum + (i >= 148 && i < 156 ? 0x20 : byte), 0);\n if (stored !== actual) throw new Error('not a valid tar archive (bad header checksum)');\n const size = Number.parseInt(readString(block, 124, 12).trim() || '0', 8);\n const type = String.fromCharCode(block[156] || 0x30);\n const body = tar.subarray(offset + BLOCK, offset + BLOCK + size);\n offset += BLOCK + Math.ceil(size / BLOCK) * BLOCK;\n if (type === 'L') {\n longName = readString(body, 0, body.length);\n continue;\n }\n if (type === 'x') {\n const record = body.toString('utf8').match(/\\d+ path=([^\\n]*)\\n/);\n if (record?.[1]) longName = record[1];\n continue;\n }\n if (type === 'g') continue;\n const prefix = readString(block, 345, 155);\n if (['1', '2', '3', '4', '6'].includes(type))\n throw new Error(\n `the archive holds a link or device entry (${readString(block, 0, 100)}); only files and directories are supported`\n );\n const name =\n longName ?? (prefix ? `${prefix}/${readString(block, 0, 100)}` : readString(block, 0, 100));\n longName = null;\n entries.push(normalize(name));\n }\n return entries;\n}\n\n/** Load an input (a directory or a .tar.gz) as a bundle, with its entry list, the tar's sha256 and the gzip's size and hash. */\nexport async function loadBundle(input: string): Promise<BundleSource> {\n let stats;\n try {\n stats = await lstat(input);\n } catch {\n throw new Error(`--input ${input} does not exist.`);\n }\n let tar: Buffer;\n if (stats.isDirectory()) {\n tar = await tarDirectory(input);\n } else if (stats.isFile() && /\\.(tar\\.gz|tgz)$/.test(input)) {\n if (stats.size > AGENT_EVAL_MAX_BUNDLE_BYTES)\n throw new Error(\n `${input} is ${stats.size} bytes; a bundle is limited to ${AGENT_EVAL_MAX_BUNDLE_BYTES}. Prune it.`\n );\n const gzip = await readFile(input);\n try {\n tar = gunzipSync(gzip, { maxOutputLength: MAX_UNPACKED_BYTES });\n } catch {\n throw new Error(\n `--input ${input} is not a valid gzip file, or unpacks to more than ${MAX_UNPACKED_BYTES} bytes.`\n );\n }\n } else {\n throw new Error('--input must be a directory or a .tar.gz file.');\n }\n // Always re-gzipped here, even for a .tar.gz input: the upload is then a single-member gzip from\n // this CLI, whatever the input held. Gzip is transport only; the content address is the tar's hash.\n const archive = gzipSync(tar, { level: 9 });\n let entries: string[];\n try {\n entries = listTarEntries(tar);\n } catch (error) {\n throw new Error(`--input ${input}: ${error instanceof Error ? error.message : String(error)}.`);\n }\n return {\n sha256: sha256Hex(tar),\n gzipSha256: sha256Hex(archive),\n bytes: archive.length,\n archive,\n entries,\n };\n}\n\n/** The `input.require` paths the bundle does not contain (a path may name a file or a directory). */\nexport function missingRequiredPaths(entries: string[], required: string[]): string[] {\n return required.filter((path) => {\n const wanted = normalize(path);\n return !entries.some((entry) => entry === wanted || entry.startsWith(`${wanted}/`));\n });\n}\n\n/**\n * Native HTTP keeps sending large bundles without fetch's fixed response-header deadline.\n * Observed: a 244 MB diagnostic capture failed with UND_ERR_HEADERS_TIMEOUT at 301 seconds.\n * S3 still checks the signed content length and checksum; no upload retry is implicit here.\n */\nexport const uploadBundle = (\n url: string,\n headers: Record<string, string>,\n archive: Buffer\n): Promise<void> =>\n new Promise((resolve, reject) => {\n const target = new URL(url);\n const request = target.protocol === 'https:' ? httpsRequest : httpRequest;\n const req = request(\n target,\n { method: 'PUT', headers: { ...headers, 'content-length': String(archive.byteLength) } },\n (response) => {\n response.on('error', reject);\n const status = response.statusCode;\n if (status !== undefined && status >= 200 && status < 300) {\n response.on('end', resolve);\n response.resume();\n } else {\n response.resume();\n req.destroy();\n reject(new Error(`Uploading the bundle failed (${String(status)}).`));\n }\n }\n );\n req.on('error', reject);\n req.end(archive);\n });\n","/** Sequential bundle parts with disk checkpoints across CLI invocations. @module cli/eval-multipart */\nimport { createHash, randomUUID } from 'node:crypto';\nimport { mkdir, readFile, writeFile, rm, rename } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { AGENT_EVAL_PART_BYTES } from '@chatsdet/types/agent-eval-template';\nimport { type BundleSource, uploadBundle } from './eval-bundle.js';\nimport { request } from './eval-api.js';\n\ntype Reply =\n | { status: 'exists' | 'complete' }\n | {\n status: 'multipart';\n uploadId: string;\n parts: { number: number; url: string; headers: Record<string, string> }[];\n };\n\nexport async function uploadMultipart(\n apiUrl: string,\n token: string,\n evalPath: string,\n bundle: BundleSource\n): Promise<void> {\n const identity = createHash('sha256')\n .update(JSON.stringify([apiUrl, evalPath, bundle.gzipSha256]))\n .digest('hex');\n const dir = join(homedir(), '.cofactor', 'eval-uploads');\n const checkpoint = join(dir, `${identity}.json`);\n await mkdir(dir, { recursive: true, mode: 0o700 });\n let uploadId: string | undefined;\n try {\n const saved: unknown = JSON.parse(await readFile(checkpoint, 'utf8'));\n if (\n typeof saved !== 'object' ||\n !saved ||\n !('uploadId' in saved) ||\n typeof saved.uploadId !== 'string'\n )\n throw new Error('Invalid bundle upload checkpoint');\n uploadId = saved.uploadId;\n } catch (error) {\n if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT')) throw error;\n }\n const checksums: string[] = [];\n for (let offset = 0; offset < bundle.bytes; offset += AGENT_EVAL_PART_BYTES)\n checksums.push(\n createHash('sha256')\n .update(bundle.archive.subarray(offset, offset + AGENT_EVAL_PART_BYTES))\n .digest('hex')\n );\n const body = {\n sha256: bundle.sha256,\n gzipSha256: bundle.gzipSha256,\n bytes: bundle.bytes,\n checksums,\n };\n const endpoint = `${evalPath}/uploads/multipart`;\n const reply = await request<Reply>(apiUrl, token, 'POST', endpoint, {\n ...body,\n uploadId,\n complete: false,\n });\n if (reply.status === 'multipart') {\n const temporary = `${checkpoint}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify({ uploadId: reply.uploadId }), { mode: 0o600 });\n await rename(temporary, checkpoint);\n for (const part of reply.parts) {\n const offset = (part.number - 1) * AGENT_EVAL_PART_BYTES;\n // Observed 2026-11-12: a 435 MB bundle failed three times with \"fetch failed\" on a weak link.\n // Retry only transport failures; S3 HTTP/checksum rejections must surface immediately.\n for (let attempt = 0; ; attempt++) {\n try {\n await uploadBundle(\n part.url,\n part.headers,\n bundle.archive.subarray(offset, offset + AGENT_EVAL_PART_BYTES)\n );\n break;\n } catch (error) {\n if (!(error instanceof Error && 'code' in error) || attempt === 2) throw error;\n console.error(\n `Retrying bundle part ${part.number} after a network failure (${attempt + 1}/2).`\n );\n await new Promise((resolve) => setTimeout(resolve, 250 * 2 ** attempt));\n }\n }\n }\n await request(apiUrl, token, 'POST', endpoint, {\n ...body,\n uploadId: reply.uploadId,\n complete: true,\n });\n }\n await rm(checkpoint, { force: true });\n}\n"],"mappings":"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","names":["request","createHash","readFile","join","createHash","join","readFile"]}
@@ -1,27 +1,27 @@
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
  resolveApplicationId
4
- } from "./chunk-YFXTMFYB.js";
4
+ } from "./chunk-V6OC2WQL.js";
5
5
  import {
6
6
  printServedGuide
7
- } from "./chunk-YV4RASGX.js";
7
+ } from "./chunk-W43YGZOP.js";
8
8
  import {
9
9
  apiRequest,
10
10
  getArgValues,
11
11
  readStdin,
12
12
  readTextOrFile
13
- } from "./chunk-72Y65NWI.js";
13
+ } from "./chunk-WY4R4IL5.js";
14
14
  import {
15
15
  getArgValue,
16
16
  hasFlag,
17
17
  resolveConfig
18
- } from "./chunk-IIDQM4MY.js";
18
+ } from "./chunk-BMFD4OPC.js";
19
19
  import {
20
20
  writeRawOutput
21
- } from "./chunk-T6ZNIMI4.js";
21
+ } from "./chunk-LRIP5IQD.js";
22
22
  import {
23
23
  formatProofNone
24
- } from "./chunk-EYHJ5FIA.js";
24
+ } from "./chunk-C6SNLHVE.js";
25
25
 
26
26
  // src/proofs.ts
27
27
  import process from "process";
@@ -420,4 +420,4 @@ export {
420
420
  resolveRepo,
421
421
  parseRepository
422
422
  };
423
- //# sourceMappingURL=chunk-KD7VGZX7.js.map
423
+ //# sourceMappingURL=chunk-UZZ5OHXT.js.map