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.
- package/README.md +12 -12
- package/dist/{agent-Dhd5FJCZ.js → agent-6FefIhX7.js} +6 -6
- package/dist/{agent-Dhd5FJCZ.js.map → agent-6FefIhX7.js.map} +1 -1
- package/dist/{agent-gjBiZis8.js → agent-WSmTaesf.js} +52 -17
- package/dist/agent-WSmTaesf.js.map +1 -0
- package/dist/{analysis-BV3TCznv.js → analysis-DlGBDjTj.js} +4 -4
- package/dist/{analysis-BV3TCznv.js.map → analysis-DlGBDjTj.js.map} +1 -1
- package/dist/{assemble-Dd_mZYnu.js → assemble-BCZzTyR7.js} +259 -18
- package/dist/assemble-BCZzTyR7.js.map +1 -0
- package/dist/assemble-C5qq5yT2.js +2 -0
- package/dist/capture-Bp74Z6Fr.js +1257 -0
- package/dist/capture-Bp74Z6Fr.js.map +1 -0
- package/dist/capture-DS-cPyuE.js +2 -0
- package/dist/{cli-r9CDqoFL.js → cli-CVrMh_qz.js} +210 -112
- package/dist/cli-CVrMh_qz.js.map +1 -0
- package/dist/{cli-spec-DOyxAMc2.js → cli-spec-CKEYa8V2.js} +6 -5
- package/dist/cli-spec-CKEYa8V2.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{client-LsfDiD-X.js → client-Bbo9SPlK.js} +31 -201
- package/dist/client-Bbo9SPlK.js.map +1 -0
- package/dist/{command-l4ZFCeMh.js → command-BFP0hKEb.js} +7 -7
- package/dist/{command-l4ZFCeMh.js.map → command-BFP0hKEb.js.map} +1 -1
- package/dist/command-BrmXUC-W.js +2 -0
- package/dist/{command-DMR69l5G.js → command-C5xFPKHM.js} +21 -20
- package/dist/command-C5xFPKHM.js.map +1 -0
- package/dist/{command-Cej2t3y-.js → command-CzIFp1JQ.js} +10 -10
- package/dist/{command-Cej2t3y-.js.map → command-CzIFp1JQ.js.map} +1 -1
- package/dist/{command-D6r2pwO5.js → command-DUT5l13I.js} +221 -54
- package/dist/command-DUT5l13I.js.map +1 -0
- package/dist/{commands-BA_NCh2h.js → commands-CLmPBrTS.js} +6 -6
- package/dist/{commands-BA_NCh2h.js.map → commands-CLmPBrTS.js.map} +1 -1
- package/dist/{commands-DgOUkcSO.js → commands-fI3G2Wnh.js} +1 -1
- package/dist/{config-DuQDCx0B.js → config-CGvBeewH.js} +18 -8
- package/dist/config-CGvBeewH.js.map +1 -0
- package/dist/{context-CvUv7DUb.js → context-DbSMEVKs.js} +1 -5
- package/dist/{context-CvUv7DUb.js.map → context-DbSMEVKs.js.map} +1 -1
- package/dist/{db-o_osRkqr.js → db-CSSFtGcN.js} +1 -1
- package/dist/{db-CjX7JF4o.js → db-CfQFwJtq.js} +209 -40
- package/dist/db-CfQFwJtq.js.map +1 -0
- package/dist/{docker-DaUaG4XZ.js → docker-CRQGQbIt.js} +17 -5
- package/dist/docker-CRQGQbIt.js.map +1 -0
- package/dist/{docker-ZaYeKE2w.js → docker-DV2GNgle.js} +2 -2
- package/dist/{docker-ZaYeKE2w.js.map → docker-DV2GNgle.js.map} +1 -1
- package/dist/{docker-Dnya8eo9.js → docker-Df_YOxxB.js} +1 -1
- package/dist/{doctor-Bk6aJeec.js → doctor-DlKycx5H.js} +13 -13
- package/dist/{doctor-Bk6aJeec.js.map → doctor-DlKycx5H.js.map} +1 -1
- package/dist/{egress-BKbyriEa.js → egress-BhzNh7Yi.js} +18 -10
- package/dist/egress-BhzNh7Yi.js.map +1 -0
- package/dist/{environment-DiCljXMD.js → environment-1jE-HhO-.js} +2 -2
- package/dist/{environment-DiCljXMD.js.map → environment-1jE-HhO-.js.map} +1 -1
- package/dist/fake-instructions-CUI33I_F.js +32 -0
- package/dist/fake-instructions-CUI33I_F.js.map +1 -0
- package/dist/family-D2b7WD10.js +67 -0
- package/dist/family-D2b7WD10.js.map +1 -0
- package/dist/files-AiEKuEZe.js +2 -0
- package/dist/files-BMCvfB4X.js +2 -0
- package/dist/{files-TNrZJQ3Y.js → files-CSzVADHn.js} +5 -5
- package/dist/{files-TNrZJQ3Y.js.map → files-CSzVADHn.js.map} +1 -1
- package/dist/{files-BSMSnQMa.js → files-DJUFg-4e.js} +3 -3
- package/dist/{files-BSMSnQMa.js.map → files-DJUFg-4e.js.map} +1 -1
- package/dist/{git-DNGtrOg9.js → git-DfG-YJ1u.js} +2 -2
- package/dist/{git-DNGtrOg9.js.map → git-DfG-YJ1u.js.map} +1 -1
- package/dist/{harness-CDRaaGvR.js → harness-CeCp2GSW.js} +52 -12
- package/dist/harness-CeCp2GSW.js.map +1 -0
- package/dist/harness.d.ts +26 -13
- package/dist/harness.js +1 -1
- package/dist/{header-BZF8Xss1.js → header-CALhmafp.js} +10 -3
- package/dist/{header-BZF8Xss1.js.map → header-CALhmafp.js.map} +1 -1
- package/dist/{images-BpwFDT1E.js → images-BMgdpMAX.js} +6 -6
- package/dist/{images-BpwFDT1E.js.map → images-BMgdpMAX.js.map} +1 -1
- package/dist/index.d.ts +17 -5
- package/dist/index.js +165 -67
- package/dist/index.js.map +1 -1
- package/dist/init-B6vegaP_.js +2 -0
- package/dist/{init-CBWt1rZT.js → init-BIdLF0F9.js} +4 -4
- package/dist/{init-CBWt1rZT.js.map → init-BIdLF0F9.js.map} +1 -1
- package/dist/{invocations-DArYWyXN.js → invocations-CLaL8AuW.js} +3 -3
- package/dist/{invocations-DArYWyXN.js.map → invocations-CLaL8AuW.js.map} +1 -1
- package/dist/{judge-7WjNdU9z.js → judge-CeYPN8P_.js} +2 -2
- package/dist/{judge-7WjNdU9z.js.map → judge-CeYPN8P_.js.map} +1 -1
- package/dist/judge.d.ts +5 -4
- package/dist/judge.js +4 -3
- package/dist/judge.js.map +1 -1
- package/dist/{live-DZkCtmNP.js → live-S0qODb6o.js} +2 -2
- package/dist/{live-DZkCtmNP.js.map → live-S0qODb6o.js.map} +1 -1
- package/dist/{model-Cp6NoAT3.js → model-B1BZoZ9b.js} +9 -8
- package/dist/model-B1BZoZ9b.js.map +1 -0
- package/dist/{model-DyQbu7KF.js → model-BOnlAPzs.js} +288 -38
- package/dist/model-BOnlAPzs.js.map +1 -0
- package/dist/{model-Bv8uUZ07.js → model-DEQo3FkZ.js} +6 -6
- package/dist/model-DEQo3FkZ.js.map +1 -0
- package/dist/model-DWeg5J7z.js +2 -0
- package/dist/{model-BeoRxCcJ.js → model-FXko2kl7.js} +1 -1
- package/dist/{options-Ge_x32XE.js → options-CKqyPGxX.js} +161 -34
- package/dist/options-CKqyPGxX.js.map +1 -0
- package/dist/pairs-DDsjgm5F.js +149 -0
- package/dist/pairs-DDsjgm5F.js.map +1 -0
- package/dist/{patch-CGCVipPu.js → patch-bDV8YFW0.js} +2 -2
- package/dist/{patch-CGCVipPu.js.map → patch-bDV8YFW0.js.map} +1 -1
- package/dist/{plan-BqBadHYj.js → plan-DUydFc_1.js} +69 -31
- package/dist/plan-DUydFc_1.js.map +1 -0
- package/dist/{preflight-CyaAZE9r.js → preflight-BkoSxf4C.js} +3 -3
- package/dist/{preflight-CyaAZE9r.js.map → preflight-BkoSxf4C.js.map} +1 -1
- package/dist/{preflight-CFtZNTLt.js → preflight-D5LW7Oqi.js} +1 -1
- package/dist/{prepare-Zr1xOMUX.js → prepare-CUAWHebF.js} +5 -5
- package/dist/{prepare-Zr1xOMUX.js.map → prepare-CUAWHebF.js.map} +1 -1
- package/dist/{prepare-Dl7-t3fO.js → prepare-oji2oO8W.js} +2 -2
- package/dist/process-CSVO_jsc.js +119 -0
- package/dist/process-CSVO_jsc.js.map +1 -0
- package/dist/{provenance-Byl2T6LJ.js → provenance-D7HK3vzt.js} +2 -2
- package/dist/{provenance-Byl2T6LJ.js.map → provenance-D7HK3vzt.js.map} +1 -1
- package/dist/{providers-Cflw7Ks-.js → providers-B1DzMvmH.js} +3 -3
- package/dist/{providers-Cflw7Ks-.js.map → providers-B1DzMvmH.js.map} +1 -1
- package/dist/{providers-SBMExI53.js → providers-CpEfNU1F.js} +1 -1
- package/dist/{query-DUSLlic0.js → query-BjBMLa-C.js} +2 -2
- package/dist/{query-DUSLlic0.js.map → query-BjBMLa-C.js.map} +1 -1
- package/dist/query-oPO_XrTy.js +2 -0
- package/dist/{questions-ZdT3JDyQ.js → questions-B8by4Bbt.js} +28 -119
- package/dist/questions-B8by4Bbt.js.map +1 -0
- package/dist/{record-CbuQH4l1.js → record-BRP9vZrj.js} +21 -1
- package/dist/record-BRP9vZrj.js.map +1 -0
- package/dist/{results-owJR-NFm.js → results-Di7m8dQ3.js} +4 -4
- package/dist/{results-owJR-NFm.js.map → results-Di7m8dQ3.js.map} +1 -1
- package/dist/{resume-BL4Yw7Ld.js → resume-SUz1GskV.js} +4 -4
- package/dist/{resume-BL4Yw7Ld.js.map → resume-SUz1GskV.js.map} +1 -1
- package/dist/runtime-DdsfnRz_.js +344 -0
- package/dist/runtime-DdsfnRz_.js.map +1 -0
- package/dist/{sandbox--ZXuscAZ.js → sandbox-D5v-of6d.js} +10 -5
- package/dist/sandbox-D5v-of6d.js.map +1 -0
- package/dist/sandbox.d.ts +4 -3
- package/dist/sandbox.js +1 -1
- package/dist/{server-yFVUxAm0.js → server-BNnXtmS8.js} +9 -9
- package/dist/{server-yFVUxAm0.js.map → server-BNnXtmS8.js.map} +1 -1
- package/dist/server-BNwoKzlm.js +2 -0
- package/dist/source-Bk_0ZaEY.js +2 -0
- package/dist/{source-M3gS517R.js → source-Dof0NQBm.js} +2 -2
- package/dist/{source-M3gS517R.js.map → source-Dof0NQBm.js.map} +1 -1
- package/dist/{src-79JhW-zG.js → src-8rRXy4u9.js} +71 -124
- package/dist/src-8rRXy4u9.js.map +1 -0
- package/dist/src-BGWuWp6I.js +3 -0
- package/dist/src-BRt0O02i.js +3 -0
- package/dist/src-Bx2x1ekD.js +3 -0
- package/dist/{src-s-VffoYK.js → src-C1E9HDWO.js} +5 -3
- package/dist/{src-s-VffoYK.js.map → src-C1E9HDWO.js.map} +1 -1
- package/dist/{src-IOr1rhEg.js → src-COgE7991.js} +10 -8
- package/dist/{src-IOr1rhEg.js.map → src-COgE7991.js.map} +1 -1
- package/dist/{src-CokPbYCb.js → src-C_4Umgh2.js} +23 -14
- package/dist/{src-CokPbYCb.js.map → src-C_4Umgh2.js.map} +1 -1
- package/dist/{src-DxFJrMUA.js → src-D95O-Smv.js} +12 -7
- package/dist/{src-DxFJrMUA.js.map → src-D95O-Smv.js.map} +1 -1
- package/dist/{src-DTcalvuF.js → src-DDNXsD9H.js} +28 -4
- package/dist/{src-DTcalvuF.js.map → src-DDNXsD9H.js.map} +1 -1
- package/dist/src-DLa-ESW0.js +4 -0
- package/dist/{src-DSE0FWaU.js → src-DVy58-zZ.js} +2 -2
- package/dist/{src-DSE0FWaU.js.map → src-DVy58-zZ.js.map} +1 -1
- package/dist/src-cN0aB-WR.js +3 -0
- package/dist/{src-DH0jhpoi.js → src-cdIVjC5b.js} +1 -1
- package/dist/src-sIsDHWYq.js +3 -0
- package/dist/state-Bo5zg4da.js +2 -0
- package/dist/{state-DEj_utaE.js → state-CiXyLqg0.js} +10 -10
- package/dist/{state-DEj_utaE.js.map → state-CiXyLqg0.js.map} +1 -1
- package/dist/studio-app/assets/index-B9MCTfuu.css +2 -0
- package/dist/studio-app/assets/{index-Bbl0oTxu.js → index-CROH2NB3.js} +12 -12
- package/dist/studio-app/index.html +2 -2
- package/dist/{summary-D012KlUM.js → summary-2OAWF2N7.js} +7 -7
- package/dist/{summary-D012KlUM.js.map → summary-2OAWF2N7.js.map} +1 -1
- package/dist/{summary--FBuB_sr.js → summary-BTksrIxn.js} +63 -5
- package/dist/summary-BTksrIxn.js.map +1 -0
- package/dist/testing.d.ts +14 -0
- package/dist/testing.js +2 -0
- package/dist/{tools-CJHw-zCo.js → tools-B10Uj7OI.js} +4 -4
- package/dist/tools-B10Uj7OI.js.map +1 -0
- package/dist/types-C5vI3g1C.js.map +1 -1
- package/dist/{types-BsRSknLe.d.ts → types-D8RLfkFP.d.ts} +453 -42
- package/dist/{usage-DsYUqIUM.js → usage-DDF_6tkV.js} +4 -2
- package/dist/{usage-DsYUqIUM.js.map → usage-DDF_6tkV.js.map} +1 -1
- package/dist/view/index.d.ts +60 -15
- package/dist/view/index.js +7 -6
- package/dist/views-Cs2Oqayd.js +3 -0
- package/dist/{views-jhL9Jb8A.js → views-Dqa5ojfZ.js} +4 -4
- package/dist/{views-jhL9Jb8A.js.map → views-Dqa5ojfZ.js.map} +1 -1
- package/dist/{worker-entry-OwnsrUdr.js → worker-entry-BAikHl9F.js} +9 -4
- package/dist/worker-entry-BAikHl9F.js.map +1 -0
- package/dist/{workspace-C4_J0pqb.js → workspace-C-TrNIUc.js} +4 -4
- package/dist/{workspace-C4_J0pqb.js.map → workspace-C-TrNIUc.js.map} +1 -1
- package/dist/{workspace-wudSz_W-.js → workspace-Do_SiWBs.js} +1 -1
- package/docker/Dockerfile +7 -5
- package/package.json +9 -4
- package/dist/agent-gjBiZis8.js.map +0 -1
- package/dist/assemble-D8sZ4Jiv.js +0 -2
- package/dist/assemble-Dd_mZYnu.js.map +0 -1
- package/dist/capture-CisAmy-G.js +0 -587
- package/dist/capture-CisAmy-G.js.map +0 -1
- package/dist/capture-DquyqAHC.js +0 -2
- package/dist/cli-r9CDqoFL.js.map +0 -1
- package/dist/cli-spec-DOyxAMc2.js.map +0 -1
- package/dist/client-LsfDiD-X.js.map +0 -1
- package/dist/command-Cxfgghqo.js +0 -2
- package/dist/command-D6r2pwO5.js.map +0 -1
- package/dist/command-DMR69l5G.js.map +0 -1
- package/dist/config-DuQDCx0B.js.map +0 -1
- package/dist/db-CjX7JF4o.js.map +0 -1
- package/dist/docker-DaUaG4XZ.js.map +0 -1
- package/dist/egress-BKbyriEa.js.map +0 -1
- package/dist/files-DmZGPsWK.js +0 -2
- package/dist/files-Tb8wY0Ze.js +0 -2
- package/dist/harness-CDRaaGvR.js.map +0 -1
- package/dist/init-1THeGfut.js +0 -2
- package/dist/model-Bv8uUZ07.js.map +0 -1
- package/dist/model-Cp6NoAT3.js.map +0 -1
- package/dist/model-D_pF3Vcl.js +0 -2
- package/dist/model-DyQbu7KF.js.map +0 -1
- package/dist/options-Ge_x32XE.js.map +0 -1
- package/dist/plan-BqBadHYj.js.map +0 -1
- package/dist/query-CvutWHaL.js +0 -2
- package/dist/questions-ZdT3JDyQ.js.map +0 -1
- package/dist/record-CbuQH4l1.js.map +0 -1
- package/dist/sandbox--ZXuscAZ.js.map +0 -1
- package/dist/server-CNPsB0cT.js +0 -2
- package/dist/source-Cmc5SKFn.js +0 -2
- package/dist/src--L8B4WGa.js +0 -3
- package/dist/src-79JhW-zG.js.map +0 -1
- package/dist/src-BLN459er.js +0 -3
- package/dist/src-Bz66jDtE.js +0 -3
- package/dist/src-CfUwg9UY.js +0 -3
- package/dist/src-DV_3QDHA.js +0 -4
- package/dist/src-Ljh2vKXm.js +0 -3
- package/dist/state-DkqbCVVp.js +0 -2
- package/dist/studio-app/assets/index-CUx6GoL5.css +0 -2
- package/dist/summary--FBuB_sr.js.map +0 -1
- package/dist/tools-CJHw-zCo.js.map +0 -1
- package/dist/views-yPmmoo8f.js +0 -3
- 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-
|
|
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-
|
|
9
|
-
import { d as sandboxId, s as harnessId } from "./options-
|
|
10
|
-
import { c as
|
|
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 {
|
|
15
|
-
import { a as
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { i as
|
|
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-
|
|
21
|
-
import { r as imageHarness } from "./prepare-
|
|
22
|
-
import { n as createProviders } from "./providers-
|
|
23
|
-
import { a as redactArgv, r as commandOf, t as logInvocation } from "./invocations-
|
|
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
|
-
/**
|
|
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 ?? []).
|
|
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
|
-
/**
|
|
477
|
-
function
|
|
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
|
-
|
|
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}`}${
|
|
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(""
|
|
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 ?? [])
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1232
|
-
const { requireDocker } = await import("./providers-
|
|
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.
|
|
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-
|
|
1251
|
-
const {
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
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
|
|
1257
|
-
sandbox:
|
|
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-
|
|
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-
|
|
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-
|
|
1388
|
-
const { writeScratchRun } = await import("./results-
|
|
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-
|
|
1414
|
-
const { resolveAnalysisModel } = await import("./model-
|
|
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-
|
|
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
|
-
|
|
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(
|
|
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-
|
|
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:
|
|
1592
|
+
configFile: configLabel(path),
|
|
1496
1593
|
/** Named in the plan line when the project root isn't the current directory. */
|
|
1497
|
-
configElsewhere:
|
|
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-
|
|
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-
|
|
1510
|
-
const { scratchDir } = await import("./files-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1658
|
-
const { dockerAvailable } = await import("./src-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1980
|
+
const { removePrepared } = await import("./preflight-D5LW7Oqi.js");
|
|
1883
1981
|
removePrepared(config.root, runId);
|
|
1884
|
-
const { removePreparedWorkspaces } = await import("./workspace-
|
|
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-
|
|
2065
|
+
//# sourceMappingURL=cli-CVrMh_qz.js.map
|