reeval 0.7.0 → 0.9.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 (233) hide show
  1. package/README.md +12 -12
  2. package/dist/{agent-Dhd5FJCZ.js → agent-6FefIhX7.js} +6 -6
  3. package/dist/{agent-Dhd5FJCZ.js.map → agent-6FefIhX7.js.map} +1 -1
  4. package/dist/{agent-gjBiZis8.js → agent-WSmTaesf.js} +52 -17
  5. package/dist/agent-WSmTaesf.js.map +1 -0
  6. package/dist/{analysis-BV3TCznv.js → analysis-DlGBDjTj.js} +4 -4
  7. package/dist/{analysis-BV3TCznv.js.map → analysis-DlGBDjTj.js.map} +1 -1
  8. package/dist/{assemble-Dd_mZYnu.js → assemble-BCZzTyR7.js} +259 -18
  9. package/dist/assemble-BCZzTyR7.js.map +1 -0
  10. package/dist/assemble-C5qq5yT2.js +2 -0
  11. package/dist/capture-Bp74Z6Fr.js +1257 -0
  12. package/dist/capture-Bp74Z6Fr.js.map +1 -0
  13. package/dist/capture-DS-cPyuE.js +2 -0
  14. package/dist/{cli-r9CDqoFL.js → cli-CVrMh_qz.js} +210 -112
  15. package/dist/cli-CVrMh_qz.js.map +1 -0
  16. package/dist/{cli-spec-DOyxAMc2.js → cli-spec-CKEYa8V2.js} +6 -5
  17. package/dist/cli-spec-CKEYa8V2.js.map +1 -0
  18. package/dist/cli.js +2 -2
  19. package/dist/{client-LsfDiD-X.js → client-Bbo9SPlK.js} +31 -201
  20. package/dist/client-Bbo9SPlK.js.map +1 -0
  21. package/dist/{command-l4ZFCeMh.js → command-BFP0hKEb.js} +7 -7
  22. package/dist/{command-l4ZFCeMh.js.map → command-BFP0hKEb.js.map} +1 -1
  23. package/dist/command-BrmXUC-W.js +2 -0
  24. package/dist/{command-DMR69l5G.js → command-C5xFPKHM.js} +21 -20
  25. package/dist/command-C5xFPKHM.js.map +1 -0
  26. package/dist/{command-Cej2t3y-.js → command-CzIFp1JQ.js} +10 -10
  27. package/dist/{command-Cej2t3y-.js.map → command-CzIFp1JQ.js.map} +1 -1
  28. package/dist/{command-D6r2pwO5.js → command-DUT5l13I.js} +221 -54
  29. package/dist/command-DUT5l13I.js.map +1 -0
  30. package/dist/{commands-BA_NCh2h.js → commands-CLmPBrTS.js} +6 -6
  31. package/dist/{commands-BA_NCh2h.js.map → commands-CLmPBrTS.js.map} +1 -1
  32. package/dist/{commands-DgOUkcSO.js → commands-fI3G2Wnh.js} +1 -1
  33. package/dist/{config-DuQDCx0B.js → config-CGvBeewH.js} +18 -8
  34. package/dist/config-CGvBeewH.js.map +1 -0
  35. package/dist/{context-CvUv7DUb.js → context-DbSMEVKs.js} +1 -5
  36. package/dist/{context-CvUv7DUb.js.map → context-DbSMEVKs.js.map} +1 -1
  37. package/dist/{db-o_osRkqr.js → db-CSSFtGcN.js} +1 -1
  38. package/dist/{db-CjX7JF4o.js → db-CfQFwJtq.js} +209 -40
  39. package/dist/db-CfQFwJtq.js.map +1 -0
  40. package/dist/{docker-DaUaG4XZ.js → docker-CRQGQbIt.js} +17 -5
  41. package/dist/docker-CRQGQbIt.js.map +1 -0
  42. package/dist/{docker-ZaYeKE2w.js → docker-DV2GNgle.js} +2 -2
  43. package/dist/{docker-ZaYeKE2w.js.map → docker-DV2GNgle.js.map} +1 -1
  44. package/dist/{docker-Dnya8eo9.js → docker-Df_YOxxB.js} +1 -1
  45. package/dist/{doctor-Bk6aJeec.js → doctor-DlKycx5H.js} +13 -13
  46. package/dist/{doctor-Bk6aJeec.js.map → doctor-DlKycx5H.js.map} +1 -1
  47. package/dist/{egress-BKbyriEa.js → egress-BhzNh7Yi.js} +18 -10
  48. package/dist/egress-BhzNh7Yi.js.map +1 -0
  49. package/dist/{environment-DiCljXMD.js → environment-1jE-HhO-.js} +2 -2
  50. package/dist/{environment-DiCljXMD.js.map → environment-1jE-HhO-.js.map} +1 -1
  51. package/dist/fake-instructions-CUI33I_F.js +32 -0
  52. package/dist/fake-instructions-CUI33I_F.js.map +1 -0
  53. package/dist/family-D2b7WD10.js +67 -0
  54. package/dist/family-D2b7WD10.js.map +1 -0
  55. package/dist/files-AiEKuEZe.js +2 -0
  56. package/dist/files-BMCvfB4X.js +2 -0
  57. package/dist/{files-TNrZJQ3Y.js → files-CSzVADHn.js} +5 -5
  58. package/dist/{files-TNrZJQ3Y.js.map → files-CSzVADHn.js.map} +1 -1
  59. package/dist/{files-BSMSnQMa.js → files-DJUFg-4e.js} +3 -3
  60. package/dist/{files-BSMSnQMa.js.map → files-DJUFg-4e.js.map} +1 -1
  61. package/dist/{git-DNGtrOg9.js → git-DfG-YJ1u.js} +2 -2
  62. package/dist/{git-DNGtrOg9.js.map → git-DfG-YJ1u.js.map} +1 -1
  63. package/dist/{harness-CDRaaGvR.js → harness-CeCp2GSW.js} +52 -12
  64. package/dist/harness-CeCp2GSW.js.map +1 -0
  65. package/dist/harness.d.ts +26 -13
  66. package/dist/harness.js +1 -1
  67. package/dist/{header-BZF8Xss1.js → header-CALhmafp.js} +10 -3
  68. package/dist/{header-BZF8Xss1.js.map → header-CALhmafp.js.map} +1 -1
  69. package/dist/{images-BpwFDT1E.js → images-BMgdpMAX.js} +6 -6
  70. package/dist/{images-BpwFDT1E.js.map → images-BMgdpMAX.js.map} +1 -1
  71. package/dist/index.d.ts +17 -5
  72. package/dist/index.js +165 -67
  73. package/dist/index.js.map +1 -1
  74. package/dist/init-B6vegaP_.js +2 -0
  75. package/dist/{init-CBWt1rZT.js → init-BIdLF0F9.js} +4 -4
  76. package/dist/{init-CBWt1rZT.js.map → init-BIdLF0F9.js.map} +1 -1
  77. package/dist/{invocations-DArYWyXN.js → invocations-CLaL8AuW.js} +3 -3
  78. package/dist/{invocations-DArYWyXN.js.map → invocations-CLaL8AuW.js.map} +1 -1
  79. package/dist/{judge-7WjNdU9z.js → judge-CeYPN8P_.js} +2 -2
  80. package/dist/{judge-7WjNdU9z.js.map → judge-CeYPN8P_.js.map} +1 -1
  81. package/dist/judge.d.ts +5 -4
  82. package/dist/judge.js +4 -3
  83. package/dist/judge.js.map +1 -1
  84. package/dist/{live-DZkCtmNP.js → live-S0qODb6o.js} +2 -2
  85. package/dist/{live-DZkCtmNP.js.map → live-S0qODb6o.js.map} +1 -1
  86. package/dist/{model-Cp6NoAT3.js → model-B1BZoZ9b.js} +9 -8
  87. package/dist/model-B1BZoZ9b.js.map +1 -0
  88. package/dist/{model-DyQbu7KF.js → model-BOnlAPzs.js} +288 -38
  89. package/dist/model-BOnlAPzs.js.map +1 -0
  90. package/dist/{model-Bv8uUZ07.js → model-DEQo3FkZ.js} +6 -6
  91. package/dist/model-DEQo3FkZ.js.map +1 -0
  92. package/dist/model-DWeg5J7z.js +2 -0
  93. package/dist/{model-BeoRxCcJ.js → model-FXko2kl7.js} +1 -1
  94. package/dist/{options-Ge_x32XE.js → options-CKqyPGxX.js} +161 -34
  95. package/dist/options-CKqyPGxX.js.map +1 -0
  96. package/dist/pairs-DDsjgm5F.js +149 -0
  97. package/dist/pairs-DDsjgm5F.js.map +1 -0
  98. package/dist/{patch-CGCVipPu.js → patch-bDV8YFW0.js} +2 -2
  99. package/dist/{patch-CGCVipPu.js.map → patch-bDV8YFW0.js.map} +1 -1
  100. package/dist/{plan-BqBadHYj.js → plan-DUydFc_1.js} +69 -31
  101. package/dist/plan-DUydFc_1.js.map +1 -0
  102. package/dist/{preflight-CyaAZE9r.js → preflight-BkoSxf4C.js} +3 -3
  103. package/dist/{preflight-CyaAZE9r.js.map → preflight-BkoSxf4C.js.map} +1 -1
  104. package/dist/{preflight-CFtZNTLt.js → preflight-D5LW7Oqi.js} +1 -1
  105. package/dist/{prepare-Zr1xOMUX.js → prepare-CUAWHebF.js} +5 -5
  106. package/dist/{prepare-Zr1xOMUX.js.map → prepare-CUAWHebF.js.map} +1 -1
  107. package/dist/{prepare-Dl7-t3fO.js → prepare-oji2oO8W.js} +2 -2
  108. package/dist/process-CSVO_jsc.js +119 -0
  109. package/dist/process-CSVO_jsc.js.map +1 -0
  110. package/dist/{provenance-Byl2T6LJ.js → provenance-D7HK3vzt.js} +2 -2
  111. package/dist/{provenance-Byl2T6LJ.js.map → provenance-D7HK3vzt.js.map} +1 -1
  112. package/dist/{providers-Cflw7Ks-.js → providers-B1DzMvmH.js} +3 -3
  113. package/dist/{providers-Cflw7Ks-.js.map → providers-B1DzMvmH.js.map} +1 -1
  114. package/dist/{providers-SBMExI53.js → providers-CpEfNU1F.js} +1 -1
  115. package/dist/{query-DUSLlic0.js → query-BjBMLa-C.js} +2 -2
  116. package/dist/{query-DUSLlic0.js.map → query-BjBMLa-C.js.map} +1 -1
  117. package/dist/query-oPO_XrTy.js +2 -0
  118. package/dist/{questions-ZdT3JDyQ.js → questions-B8by4Bbt.js} +28 -119
  119. package/dist/questions-B8by4Bbt.js.map +1 -0
  120. package/dist/{record-CbuQH4l1.js → record-BRP9vZrj.js} +21 -1
  121. package/dist/record-BRP9vZrj.js.map +1 -0
  122. package/dist/{results-owJR-NFm.js → results-Di7m8dQ3.js} +4 -4
  123. package/dist/{results-owJR-NFm.js.map → results-Di7m8dQ3.js.map} +1 -1
  124. package/dist/{resume-BL4Yw7Ld.js → resume-SUz1GskV.js} +4 -4
  125. package/dist/{resume-BL4Yw7Ld.js.map → resume-SUz1GskV.js.map} +1 -1
  126. package/dist/runtime-DdsfnRz_.js +344 -0
  127. package/dist/runtime-DdsfnRz_.js.map +1 -0
  128. package/dist/{sandbox--ZXuscAZ.js → sandbox-D5v-of6d.js} +10 -5
  129. package/dist/sandbox-D5v-of6d.js.map +1 -0
  130. package/dist/sandbox.d.ts +4 -3
  131. package/dist/sandbox.js +1 -1
  132. package/dist/{server-yFVUxAm0.js → server-BNnXtmS8.js} +9 -9
  133. package/dist/{server-yFVUxAm0.js.map → server-BNnXtmS8.js.map} +1 -1
  134. package/dist/server-BNwoKzlm.js +2 -0
  135. package/dist/source-Bk_0ZaEY.js +2 -0
  136. package/dist/{source-M3gS517R.js → source-Dof0NQBm.js} +2 -2
  137. package/dist/{source-M3gS517R.js.map → source-Dof0NQBm.js.map} +1 -1
  138. package/dist/{src-79JhW-zG.js → src-8rRXy4u9.js} +71 -124
  139. package/dist/src-8rRXy4u9.js.map +1 -0
  140. package/dist/src-BGWuWp6I.js +3 -0
  141. package/dist/src-BRt0O02i.js +3 -0
  142. package/dist/src-Bx2x1ekD.js +3 -0
  143. package/dist/{src-s-VffoYK.js → src-C1E9HDWO.js} +5 -3
  144. package/dist/{src-s-VffoYK.js.map → src-C1E9HDWO.js.map} +1 -1
  145. package/dist/{src-IOr1rhEg.js → src-COgE7991.js} +10 -8
  146. package/dist/{src-IOr1rhEg.js.map → src-COgE7991.js.map} +1 -1
  147. package/dist/{src-CokPbYCb.js → src-C_4Umgh2.js} +23 -14
  148. package/dist/{src-CokPbYCb.js.map → src-C_4Umgh2.js.map} +1 -1
  149. package/dist/{src-DxFJrMUA.js → src-D95O-Smv.js} +12 -7
  150. package/dist/{src-DxFJrMUA.js.map → src-D95O-Smv.js.map} +1 -1
  151. package/dist/{src-DTcalvuF.js → src-DDNXsD9H.js} +28 -4
  152. package/dist/{src-DTcalvuF.js.map → src-DDNXsD9H.js.map} +1 -1
  153. package/dist/src-DLa-ESW0.js +4 -0
  154. package/dist/{src-DSE0FWaU.js → src-DVy58-zZ.js} +2 -2
  155. package/dist/{src-DSE0FWaU.js.map → src-DVy58-zZ.js.map} +1 -1
  156. package/dist/src-cN0aB-WR.js +3 -0
  157. package/dist/{src-DH0jhpoi.js → src-cdIVjC5b.js} +1 -1
  158. package/dist/src-sIsDHWYq.js +3 -0
  159. package/dist/state-Bo5zg4da.js +2 -0
  160. package/dist/{state-DEj_utaE.js → state-CiXyLqg0.js} +10 -10
  161. package/dist/{state-DEj_utaE.js.map → state-CiXyLqg0.js.map} +1 -1
  162. package/dist/studio-app/assets/index-B9MCTfuu.css +2 -0
  163. package/dist/studio-app/assets/{index-Bbl0oTxu.js → index-CROH2NB3.js} +12 -12
  164. package/dist/studio-app/index.html +2 -2
  165. package/dist/{summary-D012KlUM.js → summary-2OAWF2N7.js} +7 -7
  166. package/dist/{summary-D012KlUM.js.map → summary-2OAWF2N7.js.map} +1 -1
  167. package/dist/{summary--FBuB_sr.js → summary-BTksrIxn.js} +63 -5
  168. package/dist/summary-BTksrIxn.js.map +1 -0
  169. package/dist/testing.d.ts +14 -0
  170. package/dist/testing.js +2 -0
  171. package/dist/{tools-CJHw-zCo.js → tools-B10Uj7OI.js} +4 -4
  172. package/dist/tools-B10Uj7OI.js.map +1 -0
  173. package/dist/types-C5vI3g1C.js.map +1 -1
  174. package/dist/{types-BsRSknLe.d.ts → types-D8RLfkFP.d.ts} +453 -42
  175. package/dist/{usage-DsYUqIUM.js → usage-DDF_6tkV.js} +4 -2
  176. package/dist/{usage-DsYUqIUM.js.map → usage-DDF_6tkV.js.map} +1 -1
  177. package/dist/view/index.d.ts +60 -15
  178. package/dist/view/index.js +7 -6
  179. package/dist/views-Cs2Oqayd.js +3 -0
  180. package/dist/{views-jhL9Jb8A.js → views-Dqa5ojfZ.js} +4 -4
  181. package/dist/{views-jhL9Jb8A.js.map → views-Dqa5ojfZ.js.map} +1 -1
  182. package/dist/{worker-entry-OwnsrUdr.js → worker-entry-BAikHl9F.js} +9 -4
  183. package/dist/worker-entry-BAikHl9F.js.map +1 -0
  184. package/dist/{workspace-C4_J0pqb.js → workspace-C-TrNIUc.js} +4 -4
  185. package/dist/{workspace-C4_J0pqb.js.map → workspace-C-TrNIUc.js.map} +1 -1
  186. package/dist/{workspace-wudSz_W-.js → workspace-Do_SiWBs.js} +1 -1
  187. package/docker/Dockerfile +7 -5
  188. package/package.json +9 -4
  189. package/dist/agent-gjBiZis8.js.map +0 -1
  190. package/dist/assemble-D8sZ4Jiv.js +0 -2
  191. package/dist/assemble-Dd_mZYnu.js.map +0 -1
  192. package/dist/capture-CisAmy-G.js +0 -587
  193. package/dist/capture-CisAmy-G.js.map +0 -1
  194. package/dist/capture-DquyqAHC.js +0 -2
  195. package/dist/cli-r9CDqoFL.js.map +0 -1
  196. package/dist/cli-spec-DOyxAMc2.js.map +0 -1
  197. package/dist/client-LsfDiD-X.js.map +0 -1
  198. package/dist/command-Cxfgghqo.js +0 -2
  199. package/dist/command-D6r2pwO5.js.map +0 -1
  200. package/dist/command-DMR69l5G.js.map +0 -1
  201. package/dist/config-DuQDCx0B.js.map +0 -1
  202. package/dist/db-CjX7JF4o.js.map +0 -1
  203. package/dist/docker-DaUaG4XZ.js.map +0 -1
  204. package/dist/egress-BKbyriEa.js.map +0 -1
  205. package/dist/files-DmZGPsWK.js +0 -2
  206. package/dist/files-Tb8wY0Ze.js +0 -2
  207. package/dist/harness-CDRaaGvR.js.map +0 -1
  208. package/dist/init-1THeGfut.js +0 -2
  209. package/dist/model-Bv8uUZ07.js.map +0 -1
  210. package/dist/model-Cp6NoAT3.js.map +0 -1
  211. package/dist/model-D_pF3Vcl.js +0 -2
  212. package/dist/model-DyQbu7KF.js.map +0 -1
  213. package/dist/options-Ge_x32XE.js.map +0 -1
  214. package/dist/plan-BqBadHYj.js.map +0 -1
  215. package/dist/query-CvutWHaL.js +0 -2
  216. package/dist/questions-ZdT3JDyQ.js.map +0 -1
  217. package/dist/record-CbuQH4l1.js.map +0 -1
  218. package/dist/sandbox--ZXuscAZ.js.map +0 -1
  219. package/dist/server-CNPsB0cT.js +0 -2
  220. package/dist/source-Cmc5SKFn.js +0 -2
  221. package/dist/src--L8B4WGa.js +0 -3
  222. package/dist/src-79JhW-zG.js.map +0 -1
  223. package/dist/src-BLN459er.js +0 -3
  224. package/dist/src-Bz66jDtE.js +0 -3
  225. package/dist/src-CfUwg9UY.js +0 -3
  226. package/dist/src-DV_3QDHA.js +0 -4
  227. package/dist/src-Ljh2vKXm.js +0 -3
  228. package/dist/state-DkqbCVVp.js +0 -2
  229. package/dist/studio-app/assets/index-CUx6GoL5.css +0 -2
  230. package/dist/summary--FBuB_sr.js.map +0 -1
  231. package/dist/tools-CJHw-zCo.js.map +0 -1
  232. package/dist/views-yPmmoo8f.js +0 -3
  233. package/dist/worker-entry-OwnsrUdr.js.map +0 -1
@@ -3,24 +3,26 @@ import { t as parseDuration } from "./duration-JsJrIWXq.js";
3
3
  import { n as loadEnvFiles, t as inCI } from "./env-BQqj93gu.js";
4
4
  import { o as redactSecrets, s as registerSecret } from "./redact-DJ9JCShu.js";
5
5
  import { o as PACKAGE_VERSION } from "./root-CvdRlRZX.js";
6
- import { T as workspaceLabel, u as environmentSandbox } from "./environment-DiCljXMD.js";
6
+ import { T as workspaceLabel, u as environmentSandbox } from "./environment-1jE-HhO-.js";
7
7
  import { a as fromCwd, i as evalSlug, n as attemptKey, o as newRunId } from "./ids-Bp6ut7ZD.js";
8
- import { I as LABEL, X as imageInfo } from "./src-79JhW-zG.js";
9
- import { d as sandboxId, s as harnessId } from "./options-Ge_x32XE.js";
10
- import { c as hostCapacity, d as missingCredentials, f as resolveConcurrency, i as configPathFor, l as loadConfig, p as selectProfile, r as configLabel, s as findConfig, u as malformedCredentials } from "./config-DuQDCx0B.js";
8
+ import { I as LABEL, X as imageInfo } from "./src-8rRXy4u9.js";
9
+ import { d as sandboxId, s as harnessId } from "./options-CKqyPGxX.js";
10
+ import { a as configPathFor, c as findConfig, d as malformedCredentials, f as missingCredentials, h as selectProfile, i as configLabel, l as hostCapacity, m as resolveConcurrency, p as requireConfig, u as loadConfig } from "./config-CGvBeewH.js";
11
11
  import { s as debugTime } from "./debug-D24NOQH1.js";
12
12
  import { i as sandboxWarningLine, n as clip, r as formatDuration } from "./text-gEcKjAyp.js";
13
13
  import { t as PrepareError } from "./provider-CmAYTQQs.js";
14
- import { B as cellContrast, G as effortLabel, L as judgeRatesLabel, M as cellJudgeRates, N as cellUsage, P as collapsedJudgeLabel, _ as hasUngatedCells, b as isUngatedMiss, h as formatUsage, w as runOutcome } from "./model-DyQbu7KF.js";
15
- import { a as liftLabel, i as gateLabel, n as answersLabel } from "./summary--FBuB_sr.js";
16
- import { c as writeLiveProgress, i as prepareResume, o as resolveResume, r as loadPrevious, s as writeCurrent, t as completedKeysFor } from "./resume-BL4Yw7Ld.js";
17
- import { n as FLAGS, o as helpText, r as GLOBAL, t as COMMANDS } from "./cli-spec-DOyxAMc2.js";
18
- import { i as runtimeInfo, n as gitInfo, r as runnerInfo, t as author } from "./provenance-Byl2T6LJ.js";
14
+ import { H as cellContrast, L as judgeRatesLabel, M as cellJudgeRates, N as cellUsage, P as collapsedJudgeLabel, _ as hasUngatedCells, b as isUngatedMiss, h as formatUsage, q as effortLabel, w as runOutcome } from "./model-BOnlAPzs.js";
15
+ import { a as familyLiftLabel, i as familyHeadLabel, n as familyCases, o as familyRateLabel, r as familyEffortLabel, t as caseLabel } from "./family-D2b7WD10.js";
16
+ import { a as sampleReasons } from "./pairs-DDsjgm5F.js";
17
+ import { a as gateLabel, d as undiscriminating, f as undiscriminatingLabel, i as checksLabel, n as answersLabel, o as liftLabel } from "./summary-BTksrIxn.js";
18
+ import { c as writeLiveProgress, i as prepareResume, o as resolveResume, r as loadPrevious, s as writeCurrent, t as completedKeysFor } from "./resume-SUz1GskV.js";
19
+ import { n as FLAGS, o as helpText, r as GLOBAL, t as COMMANDS } from "./cli-spec-CKEYa8V2.js";
20
+ import { i as runtimeInfo, n as gitInfo, r as runnerInfo, t as author } from "./provenance-D7HK3vzt.js";
19
21
  import { t as budgetMarker } from "./budget-DBUrH4jX.js";
20
- import { n as prepareAll, o as writePrepared, r as prepareTargets, t as RunStopError } from "./preflight-CyaAZE9r.js";
21
- import { r as imageHarness } from "./prepare-Zr1xOMUX.js";
22
- import { n as createProviders } from "./providers-Cflw7Ks-.js";
23
- import { a as redactArgv, r as commandOf, t as logInvocation } from "./invocations-DArYWyXN.js";
22
+ import { n as prepareAll, o as writePrepared, r as prepareTargets, t as RunStopError } from "./preflight-BkoSxf4C.js";
23
+ import { r as imageHarness } from "./prepare-CUAWHebF.js";
24
+ import { n as createProviders } from "./providers-B1DzMvmH.js";
25
+ import { a as redactArgv, r as commandOf, t as logInvocation } from "./invocations-CLaL8AuW.js";
24
26
  import { n as stripAnsi, t as colors } from "./colors-QV9dFVhN.js";
25
27
  import { existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
26
28
  import { dirname, join } from "node:path";
@@ -425,7 +427,7 @@ function evalColumns(c, e) {
425
427
  if (more.length) {
426
428
  const pass = e.attempts.filter((a) => a.outcome === "pass").length;
427
429
  const counted = e.attempts.filter((a) => a.outcome === "pass" || a.outcome === "fail").length;
428
- const rate = hasUngatedCells(e.cells) ? ` · ${pct(e.passRate).trim()} gated` : ` ${pct(e.passRate)}`;
430
+ const rate = hasUngatedCells(e.cells) ? ` · pass@1 ${pct(e.passRate).trim()} gated` : ` pass@1 ${pct(e.passRate)}`;
429
431
  return c.dim(`${`${pass}/${counted}`.padStart(7)}${rate} ${e.attempts.length} attempts`);
430
432
  }
431
433
  if (attemptOutcome(attempt) === "cancelled") return c.yellow("cancelled");
@@ -438,7 +440,7 @@ function evalColumns(c, e) {
438
440
  if (tokens) cols.push(tokens);
439
441
  return c.dim(cols.join(" "));
440
442
  }
441
- /** Pass rate per cell for evals with several attempts; with compare, each cell's role and lift. */
443
+ /** pass@1 per cell for evals with several attempts; with compare, each cell's role and lift. */
442
444
  function cellRows(c, e, indent) {
443
445
  if (e.attempts.length < 2) return [];
444
446
  const compare = e.cells.some((cell) => cell.role === "variant");
@@ -457,27 +459,82 @@ function cellRows(c, e, indent) {
457
459
  if (cell.gate !== "all" && cell.gate !== "none") note += ` ${c.dim(`gate ${gateLabel(cell.gate)}`)}`;
458
460
  const tokens = formatUsage(cellUsage(e, cell.key));
459
461
  const usage = tokens ? ` ${c.dim(tokens)}` : "";
460
- const rows = [`${indent}${c.dim(cell.key.padEnd(width))}${role} ${counts} ${pct(cell.passRate)}${note}${infra}${usage}`];
462
+ const rows = [`${indent}${c.dim(cell.key.padEnd(width))}${role} ${counts} pass@1 ${pct(cell.passRate)}${note}${infra}${usage}`];
461
463
  const rates = judgeRatesLabel(cellJudgeRates(e, cell.key));
462
464
  if (rates) rows.push(`${indent} ${c.dim(rates)}`);
463
465
  const effort = cellContrast(e, cell.key);
464
466
  if (effort) rows.push(`${indent} ${c.dim(`effort: ${effortLabel(effort)}`)}`);
467
+ const checks = checksLabel(cell);
468
+ if (checks) rows.push(`${indent} ${c.dim(`checks: ${checks}`)}`);
465
469
  if (cell.overrides.length) rows.push(`${indent} ${c.dim(`overrides: ${cell.overrides.join(", ")}`)}`);
466
470
  return rows;
467
471
  });
468
472
  }
469
473
  /** One row per compare question: its win rates, or why it has none. They never gate. */
470
474
  function questionRows(c, e, indent) {
471
- return (e.answers ?? []).map((a) => {
475
+ return (e.answers ?? []).flatMap((a) => {
472
476
  const label = answersLabel(a);
473
- return `${indent}${c.dim("question")} ${a.error !== void 0 ? c.yellow(label) : label}`;
477
+ return [`${indent}${c.dim("question")} ${a.error !== void 0 ? c.yellow(label) : label}`, ...sampleReasons(a.votes).map((reason) => `${indent} ${c.dim(reason)}`)];
474
478
  });
475
479
  }
476
- /** The run's evals as a file › group tree, one row per eval and per cell of a matrix. */
477
- function tree(c, evals) {
480
+ /** A family's mark: its pooled gate's and its cases' worst. */
481
+ function familyOutcome(family, cases) {
482
+ const outcomes = [family.outcome, ...cases.map(entryOutcome)];
483
+ for (const o of [
484
+ "fail",
485
+ "infra_error",
486
+ "cancelled"
487
+ ]) if (outcomes.includes(o)) return o;
488
+ return outcomes.every((o) => o === "skipped") ? "skipped" : "pass";
489
+ }
490
+ /** The width case marks wrap at. */
491
+ const CASE_WIDTH = 96;
492
+ /** A pooled family's rows under its header: its cases' marks, then each pooled rate or lift. */
493
+ function familyRows(c, family, cases, indent) {
494
+ const marks = cases.map((e) => `${mark(c, entryOutcome(e))} ${caseLabel(family.name, e.name)}`);
495
+ const plain = cases.map((e) => `x ${caseLabel(family.name, e.name)}`);
478
496
  const rows = [];
497
+ let line = [];
498
+ let width = 0;
499
+ marks.forEach((m, i) => {
500
+ const w = plain[i].length + 2;
501
+ if (line.length && width + w > CASE_WIDTH) {
502
+ rows.push(`${indent}${line.join(" ")}`);
503
+ line = [];
504
+ width = 0;
505
+ }
506
+ line.push(m);
507
+ width += w;
508
+ });
509
+ if (line.length) rows.push(`${indent}${line.join(" ")}`);
510
+ if (family.lifts.length) {
511
+ const keyWidth = Math.max(...family.lifts.map((l) => l.variant.length));
512
+ for (const lift of family.lifts) {
513
+ const below = lift.outcome === "fail";
514
+ const gate = lift.minLift !== void 0 ? ` (minLift ${Math.round(lift.minLift * 100)}${below ? " ✗" : ""})` : "";
515
+ const text = `${familyLiftLabel(lift)}${gate}`;
516
+ rows.push(`${indent}${c.dim(lift.variant.padEnd(keyWidth))} ${below ? c.red(text) : text}`);
517
+ const effort = familyEffortLabel(lift);
518
+ if (effort) rows.push(`${indent} ${c.dim(`effort: ${effort}`)}`);
519
+ }
520
+ } else if (family.rates.length === 1) rows.push(`${indent}${familyRateLabel(family.rates[0])}`);
521
+ else {
522
+ const keyWidth = Math.max(...family.rates.map((r) => r.cell.length));
523
+ for (const rate of family.rates) rows.push(`${indent}${c.dim(rate.cell.padEnd(keyWidth))} ${familyRateLabel(rate)}`);
524
+ }
525
+ return rows;
526
+ }
527
+ /**
528
+ * The run's evals as a file › group tree, one row per eval and per cell of a matrix. A pooled
529
+ * family is one row, its template, with its cases' marks and the pooled results under it.
530
+ */
531
+ function tree(c, evals, families = []) {
532
+ const rows = [];
533
+ const shown = /* @__PURE__ */ new Set();
479
534
  let path = [];
480
535
  for (const e of evals) {
536
+ const family = e.family && families.find((f) => f.id === e.family?.id);
537
+ if (family && shown.has(family.id)) continue;
481
538
  const next = [e.file, ...e.group];
482
539
  let same = 0;
483
540
  while (same < path.length && same < next.length && path[same] === next[same]) same++;
@@ -486,18 +543,30 @@ function tree(c, evals) {
486
543
  text: i === 0 ? c.bold(next[i] ?? "") : next[i] ?? ""
487
544
  });
488
545
  path = next;
489
- rows.push({
546
+ if (family) {
547
+ shown.add(family.id);
548
+ rows.push({
549
+ indent: next.length,
550
+ text: family.name,
551
+ family
552
+ });
553
+ } else rows.push({
490
554
  indent: next.length,
491
555
  text: e.name,
492
556
  entry: e
493
557
  });
494
558
  }
495
- const width = Math.max(...rows.filter((r) => r.entry).map((r) => r.indent * 2 + 2 + r.text.length));
496
- return rows.flatMap(({ indent, text, entry }) => {
559
+ const width = Math.max(...rows.filter((r) => r.entry || r.family).map((r) => r.indent * 2 + 2 + r.text.length));
560
+ return rows.flatMap(({ indent, text, entry, family }) => {
497
561
  const pad = " ".repeat(indent);
562
+ const fill = " ".repeat(Math.max(0, width - indent * 2 - 2 - text.length));
563
+ if (family) {
564
+ const cases = familyCases(family, evals);
565
+ return [` ${pad}${mark(c, familyOutcome(family, cases))} ${text}${fill} ${c.dim(familyHeadLabel(family))}`, ...familyRows(c, family, cases, ` ${pad} `)];
566
+ }
498
567
  if (!entry) return [` ${pad}${text}`];
499
568
  return [
500
- ` ${pad}${`${mark(c, entryOutcome(entry))} ${text}`}${" ".repeat(Math.max(0, width - indent * 2 - 2 - text.length))} ${evalColumns(c, entry)}`,
569
+ ` ${pad}${`${mark(c, entryOutcome(entry))} ${text}`}${fill} ${evalColumns(c, entry)}`,
501
570
  ...cellRows(c, entry, ` ${pad} `),
502
571
  ...questionRows(c, entry, ` ${pad} `)
503
572
  ];
@@ -516,6 +585,12 @@ function totals(c, s, cancelled = 0) {
516
585
  const scope = s.attempts === s.evals ? `${s.evals}` : `${s.attempts} attempts, ${s.evals} evals`;
517
586
  return parts.length ? `${parts.join(c.dim(" · "))} ${c.dim(`(${scope})`)}` : "no evals ran";
518
587
  }
588
+ /** `1 passed · 1 failed (2)`: the families' pooled gates. */
589
+ function familyTotals(c, families) {
590
+ const fail = families.filter((f) => f.outcome === "fail").length;
591
+ const pass = families.length - fail;
592
+ return `${[pass && c.green(`${pass} passed`), fail && c.red(`${fail} failed`)].filter(Boolean).join(c.dim(" · "))} ${c.dim(`(${families.length})`)}`;
593
+ }
519
594
  /** Failing attempts, in run order, including expected misses. */
520
595
  function failingAttempts(evals) {
521
596
  return evals.flatMap((entry) => entry.attempts.map((attempt) => ({
@@ -527,7 +602,7 @@ function failingAttempts(evals) {
527
602
  function renderSummary(c, e, attemptDir) {
528
603
  const { record } = e;
529
604
  const lines = [];
530
- if (record.evals.length) lines.push(c.bold("Summary"), ...tree(c, record.evals));
605
+ if (record.evals.length) lines.push(c.bold("Summary"), ...tree(c, record.evals, record.families));
531
606
  const all = failingAttempts(record.evals);
532
607
  const missed = all.filter(({ entry, attempt }) => isUngatedMiss(entry, attempt));
533
608
  const failing = all.filter((f) => !missed.includes(f));
@@ -549,7 +624,18 @@ function renderSummary(c, e, attemptDir) {
549
624
  }
550
625
  if (missed.length) {
551
626
  lines.push("", c.bold(`Expected misses, not gated (${missed.length})`));
627
+ const pooled = /* @__PURE__ */ new Map();
552
628
  for (const { entry, attempt } of missed) {
629
+ if (!entry.family) continue;
630
+ const key = `${entry.family.id}\0${attempt.cell}`;
631
+ pooled.set(key, (pooled.get(key) ?? 0) + 1);
632
+ }
633
+ for (const [key, n] of pooled) {
634
+ const [id, cell] = key.split("\0");
635
+ lines.push(` ${MISS_MARK(c)} ${id} ${c.dim(`${n} ${n === 1 ? "attempt" : "attempts"} on ${cell}`)}`);
636
+ }
637
+ for (const { entry, attempt } of missed) {
638
+ if (entry.family) continue;
553
639
  const which = entry.attempts.length > 1 ? ` ${c.dim(attempt.id)}` : "";
554
640
  const [reason] = failureLines(colors(false), resultFor(entry, attempt, e.results), { max: 1 }).filter((l) => l.trim());
555
641
  lines.push(` ${MISS_MARK(c)} ${entry.id}${which}`);
@@ -561,12 +647,23 @@ function renderSummary(c, e, attemptDir) {
561
647
  const cancelled = failing.filter((f) => f.outcome === "cancelled").length;
562
648
  const label = record.summary.attempts === record.summary.evals ? " Evals" : "Attempts";
563
649
  const lifted = record.evals.flatMap((entry) => entry.cells.flatMap((cell) => cell.lift?.minLift !== void 0 && cell.lift.interval.lo < cell.lift.minLift ? [`${entry.id} ${cell.key} ${liftLabel(cell.lift)}: its lower bound is below minLift ${Math.round(cell.lift.minLift * 100)}`] : []));
650
+ for (const family of record.families ?? []) for (const lift of family.lifts) {
651
+ if (lift.outcome !== "fail" || lift.minLift === void 0) continue;
652
+ lifted.push(`${family.id} ${lift.variant} pooled ${familyLiftLabel(lift)}: its lower bound is below minLift ${Math.round(lift.minLift * 100)}`);
653
+ }
654
+ const idle = undiscriminating(record.evals);
655
+ if (idle.length) {
656
+ lines.push("", c.bold(`Checks that don't discriminate (${idle.length})`));
657
+ for (const x of idle) lines.push(` ${c.dim("·")} ${undiscriminatingLabel(x)}`);
658
+ }
564
659
  if (lifted.length) {
565
660
  lines.push("", c.bold(c.red(`Lift below minLift (${lifted.length})`)));
566
661
  for (const line of lifted) lines.push(` ${c.red("✗")} ${line}`);
567
662
  }
568
663
  if (record.status === "budget") lines.push("", c.yellow("Budget reached: attempts that hadn’t started were skipped"));
569
- lines.push("", `${c.dim(label)} ${totals(c, record.summary, cancelled)}`, `${c.dim("Duration")} ${formatDuration(record.durationMs)}`);
664
+ lines.push("");
665
+ if (record.families?.length) lines.push(`${c.dim("Families")} ${familyTotals(c, record.families)}`);
666
+ lines.push(`${c.dim(label)} ${totals(c, record.summary, cancelled)}`, `${c.dim("Duration")} ${formatDuration(record.durationMs)}`);
570
667
  const tokens = formatUsage(record.cost.usage);
571
668
  if (tokens) lines.push(` ${c.dim("Tokens")} ${tokens}`);
572
669
  lines.push(` ${c.dim("Results")} ${e.summaryPath}`);
@@ -729,7 +826,18 @@ var AgentRenderer = class {
729
826
  if (outcome === "cancelled" && !this.#printed.has(result.key)) this.#failure(result, attempt.cell, attempt.n);
730
827
  }
731
828
  for (const error of e.unhandledErrors) this.#write(`ERROR ${error}`);
732
- for (const entry of e.record.evals) for (const a of entry.answers ?? []) this.#write(`question ${entry.id}: ${answersLabel(a)}`);
829
+ for (const entry of e.record.evals) for (const a of entry.answers ?? []) {
830
+ this.#write(`question ${entry.id}: ${answersLabel(a)}`);
831
+ for (const reason of sampleReasons(a.votes)) this.#write(` ${reason}`);
832
+ }
833
+ for (const x of undiscriminating(e.record.evals)) this.#write(`check doesn't discriminate: ${undiscriminatingLabel(x)}`);
834
+ for (const family of e.record.families ?? []) {
835
+ const pooled = family.lifts.length ? family.lifts.map((l) => {
836
+ const gate = l.minLift === void 0 ? "" : ` (minLift ${Math.round(l.minLift * 100)}${l.outcome === "fail" ? ", FAIL" : ""})`;
837
+ return `${l.variant} ${familyLiftLabel(l)}${gate}`;
838
+ }) : family.rates.map((r) => `${r.cell} ${familyRateLabel(r)}`);
839
+ this.#write(`family ${family.id}: ${familyHeadLabel(family)} · ${pooled.join(" · ")}`);
840
+ }
733
841
  const s = e.record.summary;
734
842
  const cancelled = failing.filter((f) => f.outcome === "cancelled").length;
735
843
  const parts = [
@@ -1116,7 +1224,7 @@ async function run(argv) {
1116
1224
  return values.help ? EXIT.ok : EXIT.usage;
1117
1225
  }
1118
1226
  if (command === "init") {
1119
- const { initCommand } = await import("./init-1THeGfut.js");
1227
+ const { initCommand } = await import("./init-B6vegaP_.js");
1120
1228
  return initCommand(values, filters, {
1121
1229
  out: (s) => console.log(s),
1122
1230
  input: process.stdin,
@@ -1125,7 +1233,7 @@ async function run(argv) {
1125
1233
  });
1126
1234
  }
1127
1235
  if (command === "doctor") {
1128
- const { doctorCommand } = await import("./doctor-Bk6aJeec.js");
1236
+ const { doctorCommand } = await import("./doctor-DlKycx5H.js");
1129
1237
  return doctorCommand(values, {
1130
1238
  out: (s) => console.log(s),
1131
1239
  color: !!process.stdout.isTTY && !process.env.NO_COLOR,
@@ -1133,7 +1241,7 @@ async function run(argv) {
1133
1241
  });
1134
1242
  }
1135
1243
  if (command === "report") {
1136
- const { reportCommand } = await import("./command-Cej2t3y-.js");
1244
+ const { reportCommand } = await import("./command-CzIFp1JQ.js");
1137
1245
  return reportCommand(values, filters, {
1138
1246
  out: (s) => console.log(s),
1139
1247
  err: (s) => console.error(dim(s)),
@@ -1148,7 +1256,7 @@ async function run(argv) {
1148
1256
  }
1149
1257
  if (command === "studio") {
1150
1258
  const config = await loadConfig(configPath, "studio");
1151
- const { studioCommand } = await import("./command-l4ZFCeMh.js");
1259
+ const { studioCommand } = await import("./command-BFP0hKEb.js");
1152
1260
  return studioCommand({
1153
1261
  config,
1154
1262
  flags: values,
@@ -1159,7 +1267,7 @@ async function run(argv) {
1159
1267
  if (command === "mcp") {
1160
1268
  if (!values.http) console.log = console.info = console.debug = console.error;
1161
1269
  const config = await loadConfig(configPath, "mcp");
1162
- const { mcpCommand } = await import("./command-DMR69l5G.js");
1270
+ const { mcpCommand } = await import("./command-C5xFPKHM.js");
1163
1271
  return mcpCommand({
1164
1272
  config,
1165
1273
  flags: values,
@@ -1168,7 +1276,7 @@ async function run(argv) {
1168
1276
  }
1169
1277
  if (command in HISTORY_COMMANDS) {
1170
1278
  const config = await loadConfig(configPath, command);
1171
- const commands = await import("./commands-DgOUkcSO.js");
1279
+ const commands = await import("./commands-fI3G2Wnh.js");
1172
1280
  const ctx = {
1173
1281
  config,
1174
1282
  flags: values,
@@ -1181,7 +1289,7 @@ async function run(argv) {
1181
1289
  case "compare": return commands.compareCommand(ctx, filters);
1182
1290
  case "checkout": return commands.checkoutCommand(ctx, filters);
1183
1291
  case "query": {
1184
- const { queryCommand } = await import("./query-CvutWHaL.js");
1292
+ const { queryCommand } = await import("./query-oPO_XrTy.js");
1185
1293
  return queryCommand({
1186
1294
  ...ctx,
1187
1295
  err: (s) => console.error(dim(s))
@@ -1189,7 +1297,7 @@ async function run(argv) {
1189
1297
  }
1190
1298
  case "analyze": {
1191
1299
  loadEnvFiles(configPath);
1192
- const { analyzeCommand } = await import("./command-Cxfgghqo.js");
1300
+ const { analyzeCommand } = await import("./command-BrmXUC-W.js");
1193
1301
  return analyzeCommand({
1194
1302
  ...ctx,
1195
1303
  err: (s) => console.error(dim(s))
@@ -1228,8 +1336,8 @@ async function cleanCommand(flags, configPath) {
1228
1336
  const where = fromCwd(debugRoot(config.root)) || ".";
1229
1337
  console.log(runs.length ? `Removed debug data for ${runs.length} run${runs.length === 1 ? "" : "s"} (${formatBytes(bytes)}) from ${where}` : `No debug data to remove in ${where}`);
1230
1338
  if (flags.images) {
1231
- const { pruneImages } = await import("./src-DH0jhpoi.js");
1232
- const { requireDocker } = await import("./providers-SBMExI53.js");
1339
+ const { pruneImages } = await import("./src-cdIVjC5b.js");
1340
+ const { requireDocker } = await import("./providers-CpEfNU1F.js");
1233
1341
  await requireDocker();
1234
1342
  const removed = await pruneImages();
1235
1343
  console.log(removed ? `Removed ${removed} image${removed === 1 ? "" : "s"} reeval built that nothing uses` : "No leftover images to remove");
@@ -1244,55 +1352,43 @@ function verbosityOf(flags) {
1244
1352
  /**
1245
1353
  * `reeval image build`: collects the evals (as `--dry-run` does) and builds every image their Docker
1246
1354
  * sandboxes need; with `--dry-run`, lists them instead. `--profile` plans as `reeval run --profile`
1247
- * does. Without a config, just reeval's image.
1355
+ * does. Needs a config, as `reeval run` does: there is no default image.
1248
1356
  */
1249
1357
  async function imageBuildCommand(flags, configPath, filters) {
1250
- const { buildImages, imagePlanLines, imageTargets } = await import("./images-BpwFDT1E.js");
1251
- const { docker } = await import("./sandbox.js");
1252
- let root = process.cwd();
1253
- const { fakeHarness } = await import("./harness.js");
1254
- let uses = [{
1358
+ const { buildImages, imagePlanLines, imageTargets } = await import("./images-BMgdpMAX.js");
1359
+ const { runId, stagingDir, config, runs, tags, concurrency, profile } = await startRun(await prepareRun({
1360
+ ...flags,
1361
+ "dry-run": true
1362
+ }, configPath));
1363
+ const root = config.root;
1364
+ const { runEngine } = await import("./node-Co7EXge0.js");
1365
+ let planned = [];
1366
+ await runEngine({
1367
+ run: JSON.parse(JSON.stringify({
1368
+ runId,
1369
+ stagingDir,
1370
+ config,
1371
+ runs,
1372
+ tags,
1373
+ concurrency,
1374
+ profile
1375
+ })),
1376
+ filters,
1377
+ onPlan: async (collected) => {
1378
+ if (collected.unmatched.length) throw unmatchedFilter(config, collected.unmatched);
1379
+ planned = collected.planned.filter((p) => !p.attempt.plan.skip);
1380
+ return false;
1381
+ }
1382
+ });
1383
+ const targets = imageTargets(planned.length ? planned.map((p) => ({
1384
+ id: p.id,
1385
+ harness: p.attempt.harness,
1386
+ sandbox: p.attempt.sandbox
1387
+ })) : config.harness.map((harness) => ({
1255
1388
  id: "",
1256
- harness: fakeHarness(),
1257
- sandbox: docker()
1258
- }];
1259
- if (!configPath && flags.profile) selectProfile(await loadConfig(void 0), flags.profile);
1260
- if (configPath) {
1261
- const { runId, stagingDir, config, runs, tags, concurrency, profile } = await startRun(await prepareRun({
1262
- ...flags,
1263
- "dry-run": true
1264
- }, configPath));
1265
- root = config.root;
1266
- const { runEngine } = await import("./node-Co7EXge0.js");
1267
- let planned = [];
1268
- await runEngine({
1269
- run: JSON.parse(JSON.stringify({
1270
- runId,
1271
- stagingDir,
1272
- config,
1273
- runs,
1274
- tags,
1275
- concurrency,
1276
- profile
1277
- })),
1278
- filters,
1279
- onPlan: async (collected) => {
1280
- if (collected.unmatched.length) throw unmatchedFilter(config, collected.unmatched);
1281
- planned = collected.planned.filter((p) => !p.attempt.plan.skip);
1282
- return false;
1283
- }
1284
- });
1285
- uses = planned.length ? planned.map((p) => ({
1286
- id: p.id,
1287
- harness: p.attempt.harness,
1288
- sandbox: p.attempt.sandbox
1289
- })) : config.harness.map((harness) => ({
1290
- id: "",
1291
- harness,
1292
- sandbox: config.sandbox
1293
- }));
1294
- }
1295
- const targets = imageTargets(uses);
1389
+ harness,
1390
+ sandbox: config.sandbox
1391
+ })));
1296
1392
  if (targets.length === 0) {
1297
1393
  console.log("No eval runs in a Docker sandbox, so there are no images to build.");
1298
1394
  return EXIT.ok;
@@ -1360,14 +1456,14 @@ async function runCommand(flags, configPath, filters) {
1360
1456
  const { engineRun, plan, sandboxVersions, budgetReached, live, notes, questions } = executed;
1361
1457
  invocation.unhandledErrors = engineRun.unhandledErrors;
1362
1458
  if ((interrupted || engineRun.cancelled) && plan?.sandboxes.some((s) => s.kind === "docker")) {
1363
- const { removeRunContainers } = await import("./docker-Dnya8eo9.js");
1459
+ const { removeRunContainers } = await import("./docker-Df_YOxxB.js");
1364
1460
  await removeRunContainers(ctx.runId);
1365
1461
  }
1366
1462
  if (notes) {
1367
1463
  const cancelled = interrupted || engineRun.cancelled;
1368
1464
  const written = await notes.finish(cancelled);
1369
1465
  if (!cancelled && written.length) {
1370
- const { notesLine } = await import("./agent-Dhd5FJCZ.js");
1466
+ const { notesLine } = await import("./agent-6FefIhX7.js");
1371
1467
  const text = notesLine(ctx.config.root, ctx.runId, written);
1372
1468
  renderer.onEvent({
1373
1469
  type: "notice",
@@ -1384,8 +1480,8 @@ async function runCommand(flags, configPath, filters) {
1384
1480
  }
1385
1481
  const stopped = interrupted || engineRun.cancelled;
1386
1482
  const answers = questions && !stopped ? await questions.settle() : void 0;
1387
- const { lockfiles } = await import("./state-DkqbCVVp.js");
1388
- const { writeScratchRun } = await import("./results-owJR-NFm.js");
1483
+ const { lockfiles } = await import("./state-Bo5zg4da.js");
1484
+ const { writeScratchRun } = await import("./results-Di7m8dQ3.js");
1389
1485
  const run = await writeScratchRun({
1390
1486
  ctx,
1391
1487
  author: ctx.author,
@@ -1410,8 +1506,8 @@ async function runCommand(flags, configPath, filters) {
1410
1506
  }, () => live?.stop());
1411
1507
  const { record } = run;
1412
1508
  if (notes && !stopped) {
1413
- const { summarizeRun } = await import("./agent-Dhd5FJCZ.js");
1414
- const { resolveAnalysisModel } = await import("./model-BeoRxCcJ.js");
1509
+ const { summarizeRun } = await import("./agent-6FefIhX7.js");
1510
+ const { resolveAnalysisModel } = await import("./model-FXko2kl7.js");
1415
1511
  const model = resolveAnalysisModel(ctx.config, "agent");
1416
1512
  const { level, text } = await summarizeRun(ctx.config, record.runId, model);
1417
1513
  renderer.onEvent({
@@ -1438,7 +1534,7 @@ async function runCommand(flags, configPath, filters) {
1438
1534
  const { config } = ctx;
1439
1535
  const mode = setup.record;
1440
1536
  if ((flags.record || mode === "always" || mode === "ci" && inCI()) && record.status !== "interrupted") {
1441
- const { record: recordCmd } = await import("./commands-DgOUkcSO.js");
1537
+ const { record: recordCmd } = await import("./commands-fI3G2Wnh.js");
1442
1538
  const allow = record.status === "budget" ? { "allow-incomplete": true } : {};
1443
1539
  console.log(await recordCmd(config, record.runId, {
1444
1540
  ...flags,
@@ -1464,9 +1560,10 @@ async function prepareRun(flags, configPath) {
1464
1560
  agent: detectAgent().name
1465
1561
  });
1466
1562
  if (flags.json && !flags["dry-run"]) throw new UsageError("reeval run --json only prints the plan: add --dry-run. A run writes its record to .reeval/runs; read it with reeval show --json.");
1467
- loadEnvFiles(configPath);
1563
+ const path = requireConfig(configPath);
1564
+ loadEnvFiles(path);
1468
1565
  const named = flags.profile ?? (process.env.REEVAL_PROFILE || void 0);
1469
- const config = await loadConfig(configPath, "run", named);
1566
+ const config = await loadConfig(path, "run", named);
1470
1567
  const profile = selectProfile(config, flags.profile);
1471
1568
  let runs;
1472
1569
  if (flags.runs !== void 0) {
@@ -1476,7 +1573,7 @@ async function prepareRun(flags, configPath) {
1476
1573
  const sandboxes = [environmentSandbox(config.environment, config.sandbox), ...profile?.defaults.environment ? [environmentSandbox(profile.defaults.environment, config.sandbox)] : []];
1477
1574
  const concurrency = await resolveConcurrency(config, flags.concurrency, async () => {
1478
1575
  if (!sandboxes.some((s) => s.kind === "docker")) return hostCapacity();
1479
- const { dockerCapacity } = await import("./src-DH0jhpoi.js");
1576
+ const { dockerCapacity } = await import("./src-cdIVjC5b.js");
1480
1577
  return await dockerCapacity() ?? hostCapacity();
1481
1578
  });
1482
1579
  return {
@@ -1492,9 +1589,9 @@ async function prepareRun(flags, configPath) {
1492
1589
  json: !!flags.json,
1493
1590
  force: !!flags.force,
1494
1591
  verbosity: verbosityOf(flags),
1495
- configFile: configPath && configLabel(configPath),
1592
+ configFile: configLabel(path),
1496
1593
  /** Named in the plan line when the project root isn't the current directory. */
1497
- configElsewhere: !!configPath && dirname(configPath) !== process.cwd(),
1594
+ configElsewhere: dirname(path) !== process.cwd(),
1498
1595
  /** `undefined` is a new run; `''` is newest resumable; a string is a run id or prefix. */
1499
1596
  resume: flags.resume
1500
1597
  };
@@ -1503,11 +1600,11 @@ async function prepareRun(flags, configPath) {
1503
1600
  async function startRun({ config, profile, runs, tags, concurrency, verbosity, configFile, resume, dryRun }) {
1504
1601
  const startedAt = /* @__PURE__ */ new Date();
1505
1602
  const git = await gitInfo(config.root, [config.history.dir]);
1506
- const { worktreePatch } = await import("./state-DkqbCVVp.js");
1603
+ const { worktreePatch } = await import("./state-Bo5zg4da.js");
1507
1604
  const patch = git?.dirty ? await worktreePatch(config.root, [config.history.dir]) : null;
1508
1605
  const who = await author(config.root);
1509
- const { stagingDir, sweepStaging } = await import("./results-owJR-NFm.js");
1510
- const { scratchDir } = await import("./files-DmZGPsWK.js");
1606
+ const { stagingDir, sweepStaging } = await import("./results-Di7m8dQ3.js");
1607
+ const { scratchDir } = await import("./files-BMCvfB4X.js");
1511
1608
  const scratch = scratchDir(config.root);
1512
1609
  if (resume !== void 0) {
1513
1610
  const target = await resolveResume(config.root, resume || void 0);
@@ -1518,7 +1615,7 @@ async function startRun({ config, profile, runs, tags, concurrency, verbosity, c
1518
1615
  artifacts: target.previousArtifacts
1519
1616
  } : await loadPrevious(stagingDir(config.root, target.runId));
1520
1617
  if (!dryRun) try {
1521
- const { removeRunContainers } = await import("./docker-Dnya8eo9.js");
1618
+ const { removeRunContainers } = await import("./docker-Df_YOxxB.js");
1522
1619
  await removeRunContainers(target.runId);
1523
1620
  } catch {}
1524
1621
  return {
@@ -1590,7 +1687,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1590
1687
  completed: []
1591
1688
  }));
1592
1689
  const { runEngine } = await import("./node-Co7EXge0.js");
1593
- const { buildPlan, checkAttemptBudget, planDocument, planLine, planTable } = await import("./plan-BqBadHYj.js");
1690
+ const { buildPlan, checkAttemptBudget, planDocument, planLine, planTable } = await import("./plan-DUydFc_1.js");
1594
1691
  let plan;
1595
1692
  let sandboxVersions = { images: [] };
1596
1693
  let preflightStop;
@@ -1617,7 +1714,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1617
1714
  } : p);
1618
1715
  toRun = skipped;
1619
1716
  for (const p of skipped) for (const name of p.attempt.secretVars) registerSecret(process.env[name]);
1620
- const models = skipped.some((p) => !p.attempt.plan.skip && p.attempt.plan.questions?.length) ? await import("./model-BeoRxCcJ.js") : void 0;
1717
+ const models = skipped.some((p) => !p.attempt.plan.skip && p.attempt.plan.questions?.length) ? await import("./model-FXko2kl7.js") : void 0;
1621
1718
  plan = await buildPlan({
1622
1719
  planned: skipped,
1623
1720
  profile,
@@ -1633,7 +1730,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1633
1730
  completed: completed.size
1634
1731
  };
1635
1732
  run.completed = [...completed];
1636
- const { imageStages, imageTargets } = await import("./images-BpwFDT1E.js");
1733
+ const { imageStages, imageTargets } = await import("./images-BMgdpMAX.js");
1637
1734
  const targets = imageTargets(skipped.filter((p) => !p.attempt.plan.skip).map((p) => ({
1638
1735
  id: p.id,
1639
1736
  harness: p.attempt.harness,
@@ -1654,8 +1751,8 @@ async function executeRun(ctx, setup, filters, renderer) {
1654
1751
  if (setup.dryRun) {
1655
1752
  const todos = excluded.filter((e) => e.mode === "todo").map((e) => e.id);
1656
1753
  lines.push(...planTable(plan, todos));
1657
- const { imageStatusLines } = await import("./images-BpwFDT1E.js");
1658
- const { dockerAvailable } = await import("./src-DH0jhpoi.js");
1754
+ const { imageStatusLines } = await import("./images-BMgdpMAX.js");
1755
+ const { dockerAvailable } = await import("./src-cdIVjC5b.js");
1659
1756
  if (targets.length && await dockerAvailable()) lines.push(...await imageStatusLines(targets, config.root));
1660
1757
  else if (targets.length) lines.push("images not checked: Docker is not running");
1661
1758
  }
@@ -1669,7 +1766,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1669
1766
  });
1670
1767
  if (setup.dryRun) return false;
1671
1768
  checkAttemptBudget(plan, setup.force, config.file);
1672
- const analysis = config.analysis.agent ? await import("./model-BeoRxCcJ.js") : null;
1769
+ const analysis = config.analysis.agent ? await import("./model-FXko2kl7.js") : null;
1673
1770
  analysis?.analysisModelName(config, "agent");
1674
1771
  const questionModels = /* @__PURE__ */ new Set();
1675
1772
  const asked = [];
@@ -1677,7 +1774,8 @@ async function executeRun(ctx, setup, filters, renderer) {
1677
1774
  if (row.plan.skip || !models) continue;
1678
1775
  const questions = (row.plan.questions ?? []).map((q) => ({
1679
1776
  question: q.question,
1680
- model: models.questionModel(config, q, row.id)
1777
+ model: models.questionModel(config, q, row.id),
1778
+ ...q.across ? { across: q.across } : {}
1681
1779
  }));
1682
1780
  for (const q of questions) if (typeof q.model === "string") questionModels.add(q.model);
1683
1781
  if (questions.length) asked.push({
@@ -1698,7 +1796,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1698
1796
  });
1699
1797
  if (malformed.length) throw new UsageError(`Credentials with whitespace or a line break in them: ${malformed.join(", ")}. A key copied from a wrapped terminal line picks these up; set it again as one line.`);
1700
1798
  if (analysis) {
1701
- const { startNotes } = await import("./agent-Dhd5FJCZ.js");
1799
+ const { startNotes } = await import("./agent-6FefIhX7.js");
1702
1800
  notes = startNotes({
1703
1801
  config,
1704
1802
  model: analysis.resolveAnalysisModel(config, "agent"),
@@ -1714,7 +1812,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1714
1812
  });
1715
1813
  }
1716
1814
  if (asked.length) {
1717
- const { questionRunner } = await import("./questions-ZdT3JDyQ.js");
1815
+ const { questionRunner } = await import("./questions-B8by4Bbt.js");
1718
1816
  questions = questionRunner({
1719
1817
  evals: asked,
1720
1818
  stagingDir,
@@ -1731,7 +1829,7 @@ async function executeRun(ctx, setup, filters, renderer) {
1731
1829
  }
1732
1830
  });
1733
1831
  }
1734
- const { prepareWorkspaces, workspaceKey } = await import("./workspace-wudSz_W-.js");
1832
+ const { prepareWorkspaces, workspaceKey } = await import("./workspace-Do_SiWBs.js");
1735
1833
  const live = skipped.filter((p) => !p.attempt.plan.skip);
1736
1834
  const outcomes = await prepareWorkspaces(live.flatMap(({ attempt: a }) => a.workspace ? [{
1737
1835
  workspace: a.workspace,
@@ -1879,9 +1977,9 @@ async function executeRun(ctx, setup, filters, renderer) {
1879
1977
  throw error;
1880
1978
  } finally {
1881
1979
  clearTimeout(budgetTimer);
1882
- const { removePrepared } = await import("./preflight-CFtZNTLt.js");
1980
+ const { removePrepared } = await import("./preflight-D5LW7Oqi.js");
1883
1981
  removePrepared(config.root, runId);
1884
- const { removePreparedWorkspaces } = await import("./workspace-wudSz_W-.js");
1982
+ const { removePreparedWorkspaces } = await import("./workspace-Do_SiWBs.js");
1885
1983
  removePreparedWorkspaces(config.root, runId);
1886
1984
  }
1887
1985
  if (preflightStop) throw preflightStop;
@@ -1964,4 +2062,4 @@ run(process.argv.slice(2)).finally(() => {
1964
2062
  //#endregion
1965
2063
  export {};
1966
2064
 
1967
- //# sourceMappingURL=cli-r9CDqoFL.js.map
2065
+ //# sourceMappingURL=cli-CVrMh_qz.js.map