reeval 0.10.0 → 0.11.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 (211) hide show
  1. package/README.md +62 -39
  2. package/THIRD_PARTY_NOTICES.md +75 -106
  3. package/dist/{adapter-DWlpOtRn.js → adapter-Bwy3QxAK.js} +2 -2
  4. package/dist/{adapter-DWlpOtRn.js.map → adapter-Bwy3QxAK.js.map} +1 -1
  5. package/dist/{agent-CURAwx_q.js → agent-D483ru7D.js} +5 -5
  6. package/dist/{agent-CURAwx_q.js.map → agent-D483ru7D.js.map} +1 -1
  7. package/dist/{agent-CaS_2Sce.js → agent-DpE80WPz.js} +4 -4
  8. package/dist/{agent-CaS_2Sce.js.map → agent-DpE80WPz.js.map} +1 -1
  9. package/dist/assemble-D5KGrwnJ.js +1 -0
  10. package/dist/{assemble-B9Alds-z.js → assemble-D9GWr-HS.js} +8 -8
  11. package/dist/{assemble-B9Alds-z.js.map → assemble-D9GWr-HS.js.map} +1 -1
  12. package/dist/bridge/index.mjs +13 -6
  13. package/dist/{capture-CNb9SuU5.js → capture-BQlGHiMC.js} +5 -5
  14. package/dist/{capture-CNb9SuU5.js.map → capture-BQlGHiMC.js.map} +1 -1
  15. package/dist/capture-CYGLpWxR.js +1 -0
  16. package/dist/{cli-D303Vj5N.js → cli-ClpPT8kn.js} +166 -492
  17. package/dist/cli-ClpPT8kn.js.map +1 -0
  18. package/dist/{cli-spec-BPZbQG2p.js → cli-spec-qmEnQ25_.js} +15 -6
  19. package/dist/cli-spec-qmEnQ25_.js.map +1 -0
  20. package/dist/cli.js +2 -2
  21. package/dist/{command-Bge8F7Ko.js → command-Bj39y-Wm.js} +33 -24
  22. package/dist/command-Bj39y-Wm.js.map +1 -0
  23. package/dist/{command-CMJtHKRa.js → command-BlM0y8jN.js} +6 -6
  24. package/dist/{command-CMJtHKRa.js.map → command-BlM0y8jN.js.map} +1 -1
  25. package/dist/command-C-cVjlny.js +1 -0
  26. package/dist/{command-BLfT7vnQ.js → command-DbAe1Rzb.js} +10 -11
  27. package/dist/command-DbAe1Rzb.js.map +1 -0
  28. package/dist/{command-BT9a37ZR.js → command-TgbzPizb.js} +15 -13
  29. package/dist/command-TgbzPizb.js.map +1 -0
  30. package/dist/{commands-1p-bIWhN.js → commands-CthqwkAn.js} +1 -1
  31. package/dist/{commands-BFx16WB8.js → commands-YUwlyTbr.js} +12 -9
  32. package/dist/commands-YUwlyTbr.js.map +1 -0
  33. package/dist/{config-DEgnUiU-.js → config-DrVSEVN0.js} +29 -11
  34. package/dist/config-DrVSEVN0.js.map +1 -0
  35. package/dist/contrasts-5zsj32gk.js +101 -0
  36. package/dist/contrasts-5zsj32gk.js.map +1 -0
  37. package/dist/db-CKg5NtiW.js +2 -0
  38. package/dist/{db-CdHizc4_.js → db-DfhipHEF.js} +17 -7
  39. package/dist/{db-CdHizc4_.js.map → db-DfhipHEF.js.map} +1 -1
  40. package/dist/{dist-B8hJImYt.js → dist-CuY4ehEk.js} +81 -14
  41. package/dist/dist-CuY4ehEk.js.map +1 -0
  42. package/dist/{docker-7b_2SaH7.js → docker-D1HZDS6q.js} +4 -4
  43. package/dist/{docker-7b_2SaH7.js.map → docker-D1HZDS6q.js.map} +1 -1
  44. package/dist/{docker-yauK-9X8.js → docker-DNmMPOBb.js} +1 -1
  45. package/dist/{docker-sZrNrr82.js → docker-DOvjji9I.js} +2 -2
  46. package/dist/{docker-sZrNrr82.js.map → docker-DOvjji9I.js.map} +1 -1
  47. package/dist/{doctor-BYNok4UO.js → doctor-D2MbNO8L.js} +14 -15
  48. package/dist/doctor-D2MbNO8L.js.map +1 -0
  49. package/dist/{egress-C4PZTSSe.js → egress-2-qzPvGi.js} +12 -13
  50. package/dist/egress-2-qzPvGi.js.map +1 -0
  51. package/dist/{environment-DNjRk0nU.js → environment-Cca6a4wB.js} +2 -3
  52. package/dist/environment-Cca6a4wB.js.map +1 -0
  53. package/dist/{evaluate-D4zeRGBF.js → evaluate-DKIl54Hb.js} +14 -17
  54. package/dist/evaluate-DKIl54Hb.js.map +1 -0
  55. package/dist/{evaluate-C1UVL21l.d.ts → evaluate-DMyaGQEj.d.ts} +2 -2
  56. package/dist/{files-DQmHE7pb.js → files-BXHZFWmx.js} +2 -2
  57. package/dist/{files-DQmHE7pb.js.map → files-BXHZFWmx.js.map} +1 -1
  58. package/dist/{files-BXUdY8tr.js → files-BpUYBwGu.js} +5 -5
  59. package/dist/{files-BXUdY8tr.js.map → files-BpUYBwGu.js.map} +1 -1
  60. package/dist/files-Bw8lWEjg.js +1 -0
  61. package/dist/files-D6J0iSdx.js +1 -0
  62. package/dist/{git-DfG-YJ1u.js → git-Crl3b87o.js} +2 -2
  63. package/dist/{git-DfG-YJ1u.js.map → git-Crl3b87o.js.map} +1 -1
  64. package/dist/{harness-B8QC9u0O.js → harness-CEuntrla.js} +2 -2
  65. package/dist/{harness-B8QC9u0O.js.map → harness-CEuntrla.js.map} +1 -1
  66. package/dist/harness.d.ts +1 -1
  67. package/dist/harness.js +1 -1
  68. package/dist/{header-hK-Z_Po9.js → header-DHQv_ZrF.js} +2 -2
  69. package/dist/{header-hK-Z_Po9.js.map → header-DHQv_ZrF.js.map} +1 -1
  70. package/dist/{images-0On0cztu.js → images-Bi3aGxb9.js} +6 -6
  71. package/dist/{images-0On0cztu.js.map → images-Bi3aGxb9.js.map} +1 -1
  72. package/dist/index.d.ts +2 -2
  73. package/dist/index.js +4 -4
  74. package/dist/{init-B77Rpcqc.js → init-Cl3f3NBT.js} +4 -4
  75. package/dist/{init-B77Rpcqc.js.map → init-Cl3f3NBT.js.map} +1 -1
  76. package/dist/init-fhOXED8F.js +1 -0
  77. package/dist/{invocations-DbGfBAA_.js → invocations-BYDPe3fV.js} +2 -2
  78. package/dist/{invocations-DbGfBAA_.js.map → invocations-BYDPe3fV.js.map} +1 -1
  79. package/dist/judge.d.ts +1 -1
  80. package/dist/{model-NM3ID0uR.js → model-CXhrziBe.js} +1 -1
  81. package/dist/{model-h_cDtcRr.js → model-D0IcOQao.js} +5 -4
  82. package/dist/model-D0IcOQao.js.map +1 -0
  83. package/dist/{model-oqcDplJG.js → model-DaX4bNLZ.js} +17 -8
  84. package/dist/model-DaX4bNLZ.js.map +1 -0
  85. package/dist/model-_bxNrk2h.js +1 -0
  86. package/dist/{options-Bh2W63dK.js → options-C0d0AzeR.js} +6 -7
  87. package/dist/options-C0d0AzeR.js.map +1 -0
  88. package/dist/{patch-Zac5aIRM.js → patch-B1bnfhN-.js} +2 -2
  89. package/dist/{patch-Zac5aIRM.js.map → patch-B1bnfhN-.js.map} +1 -1
  90. package/dist/{plan-C9Cy27Ay.js → plan-DgQxp9yy.js} +13 -7
  91. package/dist/plan-DgQxp9yy.js.map +1 -0
  92. package/dist/{preflight-D7iFPKeK.js → preflight-BRzD30L5.js} +3 -3
  93. package/dist/{preflight-D7iFPKeK.js.map → preflight-BRzD30L5.js.map} +1 -1
  94. package/dist/{preflight-CPWpQeBI.js → preflight-DlQvbySb.js} +1 -1
  95. package/dist/{prepare-doGxaAGR.js → prepare-B_y-AFMv.js} +6 -6
  96. package/dist/{prepare-doGxaAGR.js.map → prepare-B_y-AFMv.js.map} +1 -1
  97. package/dist/{prepare-BGjePFQl.js → prepare-DCKTLHN3.js} +2 -2
  98. package/dist/{provenance-DmE9uPVt.js → provenance-DQ0AXn6c.js} +3 -3
  99. package/dist/{provenance-DmE9uPVt.js.map → provenance-DQ0AXn6c.js.map} +1 -1
  100. package/dist/{providers-gDMko8fl.js → providers-B9yTdIqF.js} +1 -1
  101. package/dist/{providers-tAOD1NQN.js → providers-DoTq1jHW.js} +4 -4
  102. package/dist/{providers-tAOD1NQN.js.map → providers-DoTq1jHW.js.map} +1 -1
  103. package/dist/query-BO-ux7RB.js +139 -0
  104. package/dist/query-BO-ux7RB.js.map +1 -0
  105. package/dist/query-CRQfsw0e.js +1 -0
  106. package/dist/{questions-DjAwMxZ3.js → questions-C2dym2ce.js} +3 -3
  107. package/dist/{questions-DjAwMxZ3.js.map → questions-C2dym2ce.js.map} +1 -1
  108. package/dist/{remote-HDRt16ew.js → remote-CPPW86Q9.js} +3 -3
  109. package/dist/{remote-HDRt16ew.js.map → remote-CPPW86Q9.js.map} +1 -1
  110. package/dist/{results-DuauQI3Z.js → results-BE2f-1XS.js} +6 -5
  111. package/dist/results-BE2f-1XS.js.map +1 -0
  112. package/dist/{resume-BRfa8E_s.js → resume-Ca1c8vix.js} +3 -3
  113. package/dist/{resume-BRfa8E_s.js.map → resume-Ca1c8vix.js.map} +1 -1
  114. package/dist/{sandbox-D3A8oUb7.js → sandbox-DLrsvu7U.js} +2 -2
  115. package/dist/{sandbox-D3A8oUb7.js.map → sandbox-DLrsvu7U.js.map} +1 -1
  116. package/dist/sandbox.d.ts +1 -1
  117. package/dist/sandbox.js +1 -1
  118. package/dist/server-Dp8eOeK5.js +1 -0
  119. package/dist/{server-XDleKaF_.js → server-TUY5xA_A.js} +6 -6
  120. package/dist/{server-XDleKaF_.js.map → server-TUY5xA_A.js.map} +1 -1
  121. package/dist/{shared-DYpIb1BI.js → shared-CA61BuPJ.js} +25 -3
  122. package/dist/shared-CA61BuPJ.js.map +1 -0
  123. package/dist/{source-C8xumIWj.js → source-DJGS0a0u.js} +2 -2
  124. package/dist/{source-C8xumIWj.js.map → source-DJGS0a0u.js.map} +1 -1
  125. package/dist/source-DdbLGR1M.js +1 -0
  126. package/dist/{src-C_lPtowT.js → src-BxfCKA3_.js} +1 -1
  127. package/dist/{src-ofUaYbuY.js → src-CLoOMVWI.js} +1 -1
  128. package/dist/{src-Du8H85Qq.js → src-CcrQbpG8.js} +1 -1
  129. package/dist/{src-Dj9PAroc.js → src-DCFtJRp0.js} +1 -1
  130. package/dist/{src-jzagbuqH.js → src-DSYYPEOj.js} +1 -1
  131. package/dist/src-DYO3DdnQ.js +1 -0
  132. package/dist/{src-DTbrY1hi.js → src-WD-zgQYZ.js} +1 -1
  133. package/dist/{src-DNnG4e4R.js → src-_oI9AePb.js} +1 -1
  134. package/dist/{src-B7treWa8.js → src-ftu5wPSt.js} +127 -15
  135. package/dist/src-ftu5wPSt.js.map +1 -0
  136. package/dist/{src-DdyJEh2v.js → src-qsKCqv7a.js} +1 -1
  137. package/dist/{state-C__9swoG.js → state-DfpHox6b.js} +3 -3
  138. package/dist/{state-C__9swoG.js.map → state-DfpHox6b.js.map} +1 -1
  139. package/dist/state-DpAxYyED.js +1 -0
  140. package/dist/studio-app/assets/index-CBkhNAv8.js +58 -0
  141. package/dist/studio-app/index.html +1 -1
  142. package/dist/suite-Cw_7G2RM.js +429 -0
  143. package/dist/suite-Cw_7G2RM.js.map +1 -0
  144. package/dist/suite-DamAEnNF.js +1 -0
  145. package/dist/summary-BUKfU-9l.js +611 -0
  146. package/dist/summary-BUKfU-9l.js.map +1 -0
  147. package/dist/{summary-DgyjUh_l.js → summary-Baa4rTHS.js} +6 -6
  148. package/dist/{summary-DgyjUh_l.js.map → summary-Baa4rTHS.js.map} +1 -1
  149. package/dist/testing.d.ts +2 -2
  150. package/dist/testing.js +2 -2
  151. package/dist/{tools-GCyNYSc1.js → tools-DLHgetpx.js} +3 -3
  152. package/dist/{tools-GCyNYSc1.js.map → tools-DLHgetpx.js.map} +1 -1
  153. package/dist/{types-g17bRAzt.d.ts → types-BYdlwMwo.d.ts} +12 -7
  154. package/dist/view/index.d.ts +250 -2
  155. package/dist/view/index.js +4 -4
  156. package/dist/{views-BmQF4UCI.js → views-B8w2J-gD.js} +16 -26
  157. package/dist/views-B8w2J-gD.js.map +1 -0
  158. package/dist/views-DblnI3kA.js +2 -0
  159. package/dist/{worker-entry-yOchGYYv.js → worker-entry-DNnveLqx.js} +2 -2
  160. package/dist/{worker-entry-yOchGYYv.js.map → worker-entry-DNnveLqx.js.map} +1 -1
  161. package/dist/{workspace-CgyHEM0l.js → workspace-C4RA3srV.js} +4 -4
  162. package/dist/{workspace-CgyHEM0l.js.map → workspace-C4RA3srV.js.map} +1 -1
  163. package/dist/{workspace-D8sSgpiy.js → workspace-C_X0tdv6.js} +1 -1
  164. package/package.json +8 -8
  165. package/dist/assemble-J5MukZFY.js +0 -1
  166. package/dist/capture-jquXZBKK.js +0 -1
  167. package/dist/cli-D303Vj5N.js.map +0 -1
  168. package/dist/cli-spec-BPZbQG2p.js.map +0 -1
  169. package/dist/command-BLfT7vnQ.js.map +0 -1
  170. package/dist/command-BT9a37ZR.js.map +0 -1
  171. package/dist/command-Bge8F7Ko.js.map +0 -1
  172. package/dist/command-BkFjijN2.js +0 -1
  173. package/dist/commands-BFx16WB8.js.map +0 -1
  174. package/dist/config-DEgnUiU-.js.map +0 -1
  175. package/dist/db-Dm1cRJJP.js +0 -2
  176. package/dist/dist-B8hJImYt.js.map +0 -1
  177. package/dist/doctor-BYNok4UO.js.map +0 -1
  178. package/dist/duration-CEOQww97.js +0 -26
  179. package/dist/duration-CEOQww97.js.map +0 -1
  180. package/dist/egress-C4PZTSSe.js.map +0 -1
  181. package/dist/env-BQqj93gu.js +0 -21
  182. package/dist/env-BQqj93gu.js.map +0 -1
  183. package/dist/environment-DNjRk0nU.js.map +0 -1
  184. package/dist/evaluate-D4zeRGBF.js.map +0 -1
  185. package/dist/family-D2b7WD10.js +0 -67
  186. package/dist/family-D2b7WD10.js.map +0 -1
  187. package/dist/files-BhyltlDB.js +0 -1
  188. package/dist/files-ZZPqfAo6.js +0 -1
  189. package/dist/init-BrOWin3W.js +0 -1
  190. package/dist/model-h_cDtcRr.js.map +0 -1
  191. package/dist/model-nwWJvaUR.js +0 -1
  192. package/dist/model-oqcDplJG.js.map +0 -1
  193. package/dist/options-Bh2W63dK.js.map +0 -1
  194. package/dist/plan-C9Cy27Ay.js.map +0 -1
  195. package/dist/process-CSVO_jsc.js +0 -119
  196. package/dist/process-CSVO_jsc.js.map +0 -1
  197. package/dist/query-Bes9Kh6Y.js +0 -91
  198. package/dist/query-Bes9Kh6Y.js.map +0 -1
  199. package/dist/query-C_G_svLU.js +0 -1
  200. package/dist/results-DuauQI3Z.js.map +0 -1
  201. package/dist/server-C7sg1ndo.js +0 -1
  202. package/dist/shared-DYpIb1BI.js.map +0 -1
  203. package/dist/source-fGd0SaKP.js +0 -1
  204. package/dist/src-B7treWa8.js.map +0 -1
  205. package/dist/src-pJZOrYR9.js +0 -1
  206. package/dist/state-CgjQo29K.js +0 -1
  207. package/dist/studio-app/assets/index-DrQc2Yxd.js +0 -58
  208. package/dist/summary-BLAVLySU.js +0 -385
  209. package/dist/summary-BLAVLySU.js.map +0 -1
  210. package/dist/views-BW6oCDUQ.js +0 -2
  211. package/dist/views-BmQF4UCI.js.map +0 -1
@@ -0,0 +1,611 @@
1
+ import { n as clip, r as formatDuration } from "./text-gEcKjAyp.js";
2
+ import { n as formatTokens } from "./usage-CleNKkly.js";
3
+ import { D as runtimeLabel, F as checkLabels, R as commandLine, S as languageLabel, V as labelledJudgements, _ as harnessLabel, l as evalMarkOutcome, lt as formatSeconds, st as formatCount, x as isUngatedMiss } from "./model-DaX4bNLZ.js";
4
+ import { s as suiteResult } from "./suite-Cw_7G2RM.js";
5
+ import { o as warnings } from "./state-DfpHox6b.js";
6
+ import { t as colors } from "./colors-QV9dFVhN.js";
7
+ //#region src/ui/layout.ts
8
+ /** The block for an eval: a pure function of its job and its shape. */
9
+ function layout(_job, across, isFamily, isCompare) {
10
+ if (isCompare) return {
11
+ kind: "regressions",
12
+ family: false
13
+ };
14
+ return {
15
+ kind: across === "change" ? "measure" : across === "harness" ? "harnesses" : across === "both" ? "both" : "results",
16
+ family: isFamily
17
+ };
18
+ }
19
+ /** The last line of a run's output while no analysis model writes its answers. */
20
+ const NO_MODEL_HINT = "Set analysis.model in reeval.config.ts for answers to what each eval asks.";
21
+ /** Where a block's name starts, after its verdict word. */
22
+ const HEAD = 17;
23
+ /** The narrowest a row's label column is, so short labels line up under the name. */
24
+ const LABEL = 17;
25
+ const ASSERTION_MAX = 160;
26
+ const CHECK_LABEL_MAX = 48;
27
+ /** A check's label on one line: an expected value can carry line breaks. */
28
+ const checkLabel = (label) => clip(label.replace(/\s*\n\s*/g, " "), CHECK_LABEL_MAX);
29
+ const VERDICT = {
30
+ pass: "pass",
31
+ fail: "fail",
32
+ infra_error: "infra error",
33
+ skipped: "skipped"
34
+ };
35
+ const EFFECT = {
36
+ better: "helped",
37
+ worse: "made it worse",
38
+ unclear: "can't tell yet",
39
+ same: ""
40
+ };
41
+ const t = (text, paint) => ({
42
+ text,
43
+ paint
44
+ });
45
+ const textOf = (cell) => typeof cell === "string" ? cell : cell.text;
46
+ const show = (cell) => typeof cell === "string" ? cell : cell.paint ? cell.paint(cell.text) : cell.text;
47
+ /**
48
+ * Aligned rows: the first column is as wide as the widest label with its indent (at least
49
+ * `LABEL`), the others as their widest cell, two spaces apart. Free lines print as they are.
50
+ */
51
+ function table(items, width = LABEL) {
52
+ const rows = items.filter((i) => "cells" in i);
53
+ const first = Math.max(width, ...rows.filter((r) => r.cells.length > 1).map((r) => r.indent + textOf(r.cells[0] ?? "").length));
54
+ const widths = [];
55
+ for (const r of rows) r.cells.forEach((cell, i) => {
56
+ if (i > 0) widths[i] = Math.max(widths[i] ?? 0, textOf(cell).length);
57
+ });
58
+ return items.map((item) => {
59
+ const pad = " ".repeat(item.indent);
60
+ if ("free" in item) return `${pad}${show(item.free)}`;
61
+ return `${pad}${item.cells.map((cell, i) => {
62
+ const width = i === 0 ? first - item.indent : widths[i] ?? 0;
63
+ const fill = " ".repeat(Math.max(0, width - textOf(cell).length));
64
+ return i === item.cells.length - 1 ? show(cell) : `${show(cell)}${fill}`;
65
+ }).join(" ")}`.trimEnd();
66
+ });
67
+ }
68
+ const paintOutcome = (c, o) => o === "pass" ? c.green : o === "fail" ? c.red : o === "infra_error" ? c.yellow : c.dim;
69
+ /** A study (every cell `gate: 'none'`) passes whatever it saw, so it never reads `pass`. */
70
+ function verdict(c, e) {
71
+ if (e.todo) return t("todo", c.dim);
72
+ const cells = e.cells ?? [];
73
+ if (e.outcome === "pass" && cells.length && cells.every((x) => !x.gated)) return t("not gated", c.dim);
74
+ return t(VERDICT[e.outcome], paintOutcome(c, e.outcome));
75
+ }
76
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
77
+ /**
78
+ * `3 of 4`, with the attempts that didn't count named: `2 of 3 · 1 infra error · 1 skipped`. A
79
+ * cancelled attempt is recorded as a fail, but the agent didn't fail it, so it's named apart.
80
+ */
81
+ function cellCount(cell) {
82
+ const cancelled = cell.errors.filter((err) => err.kind === "aborted").reduce((n, err) => n + err.attempts, 0);
83
+ const counted = Math.max(0, cell.passed + cell.failed - cancelled);
84
+ const parts = [
85
+ counted > 0 ? `${cell.passed} of ${counted}` : "",
86
+ cell.infraError ? plural(cell.infraError, "infra error") : "",
87
+ cancelled ? `${cancelled} cancelled` : "",
88
+ cell.skipped ? `${cell.skipped} skipped` : ""
89
+ ].filter(Boolean);
90
+ if (!parts.length) return "not run";
91
+ return parts.join(" · ");
92
+ }
93
+ const failing = (k) => k.outcome.status === "not run" || k.outcome.failed + k.outcome.errored > 0;
94
+ /** A check's result in a cell: `not run`, `failed` for one try, else `1 of 4 · 2 not run`. */
95
+ function checkCount(k, single) {
96
+ const o = k.outcome;
97
+ if (o.status === "not run") return "not run";
98
+ const answered = o.passed + o.failed + o.errored;
99
+ return [single && answered === 1 ? o.failed ? "failed" : o.errored ? "couldn't check" : "passed" : `${o.passed} of ${answered}`, ...[!single && o.errored ? `${o.errored} couldn't check` : "", o.notRun ? `${o.notRun} not run` : ""].filter(Boolean)].join(" · ");
100
+ }
101
+ /** The check's first failure, less the `label: ` its row already shows. */
102
+ function assertionOf(k) {
103
+ if (k.outcome.status !== "ran" || !k.outcome.assertion) return "";
104
+ const line = k.outcome.assertion.trim().split("\n")[0]?.trim() ?? "";
105
+ return clip(line.startsWith(`${k.label}: `) ? line.slice(k.label.length + 2) : line, ASSERTION_MAX);
106
+ }
107
+ /** A cell passed outright: every counted attempt, every check, nothing errored. */
108
+ const clean = (cell) => cell.outcome === "pass" && cell.failed === 0 && cell.infraError === 0 && cell.errors.length === 0 && !cell.checks.some(failing);
109
+ /** An error no check explains, by kind: a throw in the eval's body reads `error`. */
110
+ const ERROR_KIND = {
111
+ assertion: "error",
112
+ judge: "judge",
113
+ timeout: "timeout",
114
+ aborted: "cancelled",
115
+ infra: "infra error",
116
+ turn: "turn error"
117
+ };
118
+ const errorKind = (err) => ERROR_KIND[err.kind];
119
+ const errorText = (err) => `${clip(err.message, ASSERTION_MAX)}${err.attempts > 1 ? ` (${plural(err.attempts, "try", "tries")})` : ""}`;
120
+ /** The evidence under a failing cell: its failed and not-run checks, its errors, `+N more passed`. */
121
+ function evidence(c, cell, indent) {
122
+ const single = cell.passed + cell.failed + cell.infraError <= 1;
123
+ const items = [];
124
+ for (const k of cell.checks.filter(failing)) {
125
+ const count = checkCount(k, single);
126
+ items.push({
127
+ indent,
128
+ cells: [checkLabel(k.label), count === "not run" ? t(count, c.dim) : t(count, c.red)]
129
+ });
130
+ const assertion = assertionOf(k);
131
+ if (assertion) items.push({
132
+ indent: indent + 2,
133
+ free: t(assertion, c.dim)
134
+ });
135
+ }
136
+ for (const err of cell.errors) items.push({
137
+ indent,
138
+ cells: [errorKind(err), t(errorText(err), c.dim)]
139
+ });
140
+ const passed = cell.checks.filter((k) => !failing(k)).length;
141
+ if (passed && items.length) items.push({
142
+ indent,
143
+ free: t(`+${passed} more passed`, c.dim)
144
+ });
145
+ return items;
146
+ }
147
+ /** A control with no environment of its own is the baseline the variants change. */
148
+ const armOf = (cell) => cell.variant ?? (cell.environment === "-" ? "baseline" : cell.environment);
149
+ /** Each cell's label: the parts that vary between them (harness, arm, sandbox). */
150
+ function labeller(cells, parts) {
151
+ const vary = parts.filter((p) => {
152
+ const of = (cell) => p === "harness" ? cell.harness : p === "arm" ? armOf(cell) : cell.sandbox;
153
+ return new Set(cells.map(of)).size > 1;
154
+ });
155
+ const used = vary.length ? vary : parts.slice(0, 1);
156
+ return (cell) => used.map((p) => p === "harness" ? cell.harness : p === "arm" ? armOf(cell) : cell.sandbox).join(" · ");
157
+ }
158
+ const effectText = (c, effect) => {
159
+ if (!effect) return t("");
160
+ const paint = effect === "better" ? c.green : effect === "worse" ? c.red : c.yellow;
161
+ return t(EFFECT[effect], paint);
162
+ };
163
+ const signedPoints = (x) => `${x >= 0 ? "+" : "−"}${Math.round(Math.abs(x) * 100)}`;
164
+ /** `-v`: a variant's difference from its baseline and the interval its effect comes from. */
165
+ function statsLine(cell, cells) {
166
+ const base = cells.find((x) => x.key === cell.vs);
167
+ if (!base || !cell.interval) return null;
168
+ const rate = (x) => x.passed + x.failed ? x.passed / (x.passed + x.failed) : 0;
169
+ return `difference ${signedPoints(rate(cell) - rate(base))} points, 95% interval ${signedPoints(cell.interval.low)}…${signedPoints(cell.interval.high)}`;
170
+ }
171
+ /** The checks that failed or didn't run in some cell, a column per cell; the rest pass everywhere. */
172
+ function checkMatrix(c, cells, label, indent, width) {
173
+ const labels = [...new Set(cells.flatMap((x) => x.checks.map((k) => k.label)))];
174
+ const shown = labels.filter((l) => cells.some((x) => x.checks.some((k) => k.label === l && failing(k))));
175
+ if (!shown.length) return [];
176
+ const items = [{
177
+ indent,
178
+ cells: ["check", ...cells.map((x) => t(label(x), c.dim))]
179
+ }];
180
+ for (const l of shown) {
181
+ const row = cells.map((x) => {
182
+ const k = x.checks.find((y) => y.label === l);
183
+ if (!k) return t("–", c.dim);
184
+ const count = checkCount(k, false);
185
+ if (!failing(k)) return t(count);
186
+ return t(count, k.outcome.status === "not run" || !x.gated ? c.dim : c.red);
187
+ });
188
+ items.push({
189
+ indent,
190
+ cells: [checkLabel(l), ...row]
191
+ });
192
+ const assertion = cells.map((x) => x.checks.find((y) => y.label === l)).map((k) => k ? assertionOf(k) : "").find(Boolean);
193
+ if (assertion) items.push({
194
+ indent: indent + 2,
195
+ free: t(assertion, c.dim)
196
+ });
197
+ }
198
+ const passed = labels.length - shown.length;
199
+ if (passed) items.push({
200
+ indent,
201
+ free: t(`+${passed} more passed`, c.dim)
202
+ });
203
+ return table(items, width);
204
+ }
205
+ /** Tools, agent time and tokens per cell, when each has enough tries and it matters. */
206
+ function effortTable(c, cells, label, indent, failed, width) {
207
+ if (cells.length < 2 || cells.some((x) => !x.effort)) return [];
208
+ if (!failed && !cells.some((x) => x.effortDiffers)) return [];
209
+ const tokens = cells.some((x) => x.effort?.tokens !== null);
210
+ const n = (v, f) => v == null ? "–" : f(v);
211
+ return table([{
212
+ indent,
213
+ cells: [
214
+ "effort",
215
+ t("tools", c.dim),
216
+ t("time", c.dim),
217
+ ...tokens ? [t("tokens", c.dim)] : []
218
+ ]
219
+ }, ...cells.map((x) => ({
220
+ indent,
221
+ cells: [
222
+ label(x),
223
+ n(x.effort?.tools, formatCount),
224
+ n(x.effort?.agentMs, formatSeconds),
225
+ ...tokens ? [n(x.effort?.tokens, formatTokens)] : []
226
+ ]
227
+ }))], width);
228
+ }
229
+ /** Measure a change: a row per arm with its effect, the check matrix and the effort table. */
230
+ function measureBody(c, cells, indent, o) {
231
+ const label = labeller(cells, ["arm", "sandbox"]);
232
+ const arms = [{
233
+ indent,
234
+ cells: ["arm", t("pass", c.dim)]
235
+ }];
236
+ for (const cell of cells) {
237
+ const effect = o.effects ? gatedEffect(c, cell) : t("");
238
+ arms.push({
239
+ indent,
240
+ cells: [
241
+ label(cell),
242
+ cellCount(cell),
243
+ ...effect.text ? [effect] : []
244
+ ]
245
+ });
246
+ const stats = o.verbose && o.effects ? statsLine(cell, cells) : null;
247
+ if (stats) arms.push({
248
+ indent: indent + 2,
249
+ free: t(stats, c.dim)
250
+ });
251
+ for (const err of cell.errors) arms.push({
252
+ indent: indent + 2,
253
+ free: t(`${errorKind(err)} ${errorText(err)}`, c.dim)
254
+ });
255
+ }
256
+ const matrix = o.failed || o.effects;
257
+ const labels = [...cells.map(label), ...matrix ? cells.flatMap((x) => x.checks.filter(failing).map((k) => checkLabel(k.label))) : []];
258
+ const width = Math.max(LABEL, ...labels.map((l) => indent + l.length));
259
+ return [
260
+ ...table(arms, width),
261
+ ...matrix ? checkMatrix(c, cells, label, indent, width) : [],
262
+ ...effortTable(c, cells, label, indent, o.failed, width)
263
+ ];
264
+ }
265
+ /** A row per cell (harness, or sandbox), the ones that didn't pass outright with their evidence. */
266
+ function cellRows(c, cells, heading, indent) {
267
+ const label = labeller(cells, heading === "harness" ? ["harness", "sandbox"] : ["sandbox"]);
268
+ const items = [{
269
+ indent,
270
+ cells: [heading, t("pass", c.dim)]
271
+ }];
272
+ for (const cell of cells) {
273
+ items.push({
274
+ indent,
275
+ cells: [label(cell), cellCount(cell)]
276
+ });
277
+ if (!clean(cell)) items.push(...evidence(c, cell, indent + 2));
278
+ }
279
+ return table(items);
280
+ }
281
+ /** Compare harnesses with arms: a heading per harness, its arms as Measure a change under it. */
282
+ function bothBody(c, cells, indent, o) {
283
+ const harnessOf = labeller(cells, ["harness", "sandbox"]);
284
+ const groups = /* @__PURE__ */ new Map();
285
+ for (const cell of cells) groups.set(harnessOf(cell), [...groups.get(harnessOf(cell)) ?? [], cell]);
286
+ return [...groups].flatMap(([harness, group]) => [`${" ".repeat(indent)}${harness}`, ...measureBody(c, group, indent + 2, o)]);
287
+ }
288
+ /** The rows under an eval's head (or a family case's), by what its cells compare. */
289
+ function cellsBody(c, kind, cells, indent, o) {
290
+ if (kind === "measure") return measureBody(c, cells, indent, o);
291
+ if (kind === "harnesses") return cellRows(c, cells, "harness", indent);
292
+ if (kind === "both") return bothBody(c, cells, indent, o);
293
+ if (cells.length > 1) return cellRows(c, cells, "sandbox", indent);
294
+ return resultsBody(c, cells[0], indent);
295
+ }
296
+ /** A single eval with one cell: its tries, and on anything but a clean pass, the evidence. */
297
+ function resultsBody(c, cell, indent) {
298
+ if (clean(cell)) return [];
299
+ const items = [];
300
+ if (cell.attempts > 1) items.push({
301
+ indent,
302
+ cells: [plural(cell.attempts, "try", "tries"), cellCount(cell)]
303
+ });
304
+ return table([...items, ...evidence(c, cell, indent)]);
305
+ }
306
+ function questionLines(c, questions, indent) {
307
+ return questions.flatMap((q) => {
308
+ const pad = " ".repeat(indent);
309
+ const head = `${pad}${c.dim("question")} ${clip(q.question, 100)}`;
310
+ if (q.votes === 0 && q.error === null) return [head, `${pad} ${c.dim("no pairs to judge: tries that failed their checks are left out")}`];
311
+ if (q.rates.length === 0 && q.error === null) return [head, `${pad} ${c.dim(`${q.votes} ${q.votes === 1 ? "vote" : "votes"}, every one a tie`)}`];
312
+ const cuts = new Set(q.rates.map((r) => r.cut)).size > 1;
313
+ const rows = table(q.rates.map((r) => ({
314
+ indent: indent + 2,
315
+ cells: [cuts ? `${r.name} (${r.cut})` : r.name, `won ${r.wins} of ${r.n}`]
316
+ })));
317
+ const failed = q.error === null ? [] : [`${pad} ${c.yellow(`the model call failed: ${clip(q.error, 200)}`)}`];
318
+ return [
319
+ head,
320
+ ...rows,
321
+ ...failed
322
+ ];
323
+ });
324
+ }
325
+ /** A cell's counts summed over a family's cases. */
326
+ function pooledCount(cases, key) {
327
+ let passed = 0;
328
+ let counted = 0;
329
+ for (const k of cases) {
330
+ const cell = k.cells.find((x) => x.key === key);
331
+ if (!cell) continue;
332
+ passed += cell.passed;
333
+ counted += cell.passed + cell.failed;
334
+ }
335
+ return counted ? `${passed} of ${counted}` : "not run";
336
+ }
337
+ /** A variant's effect, with the `minLift` its interval's low end fell short of, which fails it. */
338
+ function gatedEffect(c, arm) {
339
+ const effect = effectText(c, arm.effect);
340
+ if (arm.minLift === null || !arm.interval || arm.interval.low >= arm.minLift) return effect;
341
+ const short = `not by minLift ${Math.round(arm.minLift * 100)}`;
342
+ return t(effect.text ? `${effect.text}, ${short}` : short, c.red);
343
+ }
344
+ function pooledStats(p, label) {
345
+ return `${label}: ${p.pairs} paired cases, 95% interval ${signedPoints(p.interval.low)}…${signedPoints(p.interval.high)}`;
346
+ }
347
+ /**
348
+ * A family: its template, then a row per case. With one cell a case is a row with its count;
349
+ * with more, the case is outer and its cells inner, laid out as a single eval's are, and a
350
+ * pooled `all cases` row sums each cell's counts with its variant's pooled effect.
351
+ */
352
+ function familyBlock(c, e, kind, verbose) {
353
+ const cases = e.cases ?? [];
354
+ const columns = cases[0]?.cells ?? [];
355
+ const pooled = e.pooled ?? [];
356
+ const pooledOutcome = pooled.some((p) => p.outcome === "fail") ? "fail" : "pass";
357
+ const caseWord = (k) => verdict(c, {
358
+ outcome: k.outcome,
359
+ todo: false,
360
+ cells: k.cells
361
+ });
362
+ const pooledWord = t(VERDICT[pooledOutcome], paintOutcome(c, pooledOutcome));
363
+ const words = [...cases.map(caseWord), ...pooled.length ? [pooledWord] : []];
364
+ const wordWidth = Math.max(...words.map((w) => w.text.length));
365
+ const lead = (word, name) => ({
366
+ text: `${word.text.padEnd(wordWidth)} ${name}`,
367
+ paint: (s) => `${show(word)}${s.slice(word.text.length)}`
368
+ });
369
+ const head = `${" ".repeat(HEAD)}${e.template ?? e.name}`;
370
+ const questions = questionLines(c, e.questions, 2);
371
+ if (columns.length <= 1) {
372
+ const items = [];
373
+ for (const k of cases) {
374
+ const cell = k.cells[0];
375
+ items.push({
376
+ indent: 2,
377
+ cells: [lead(caseWord(k), k.label), cell ? cellCount(cell) : ""]
378
+ });
379
+ if (cell && !clean(cell)) items.push(...evidence(c, cell, 4));
380
+ }
381
+ return [
382
+ head,
383
+ ...table(items),
384
+ ...questions
385
+ ];
386
+ }
387
+ const out = [head];
388
+ for (const k of cases) {
389
+ out.push(` ${show(lead(caseWord(k), k.label))}`);
390
+ const failed = k.outcome !== "pass";
391
+ out.push(...cellsBody(c, kind, k.cells, 4, {
392
+ failed,
393
+ verbose,
394
+ effects: false
395
+ }));
396
+ }
397
+ if (pooled.length) {
398
+ const label = labeller(columns, [
399
+ "harness",
400
+ "arm",
401
+ "sandbox"
402
+ ]);
403
+ const byKey = new Map(pooled.map((p) => [p.key, p]));
404
+ const items = [{
405
+ indent: 4,
406
+ cells: [kind === "harnesses" ? "harness" : "arm", t("pass", c.dim)]
407
+ }];
408
+ for (const col of columns) {
409
+ const p = byKey.get(col.key);
410
+ const effect = p ? gatedEffect(c, p) : t("");
411
+ items.push({
412
+ indent: 4,
413
+ cells: [
414
+ label(col),
415
+ pooledCount(cases, col.key),
416
+ ...effect.text ? [effect] : []
417
+ ]
418
+ });
419
+ if (p && verbose) items.push({
420
+ indent: 6,
421
+ free: t(pooledStats(p, label(col)), c.dim)
422
+ });
423
+ }
424
+ out.push(` ${show(lead(pooledWord, "all cases"))}`, ...table(items));
425
+ }
426
+ return [...out, ...questions];
427
+ }
428
+ /** One eval's block, laid out as `layout()` says. */
429
+ function evalBlock(c, e, verbose = false) {
430
+ const shape = layout("other", e.across, e.family, false);
431
+ if (shape.family) return familyBlock(c, e, shape.kind, verbose);
432
+ const v = verdict(c, e);
433
+ const name = `${e.group.length ? `${e.group.join(" › ")} › ` : ""}${e.name}`;
434
+ const head = `${show(v)}${" ".repeat(Math.max(2, HEAD - v.text.length))}${name}`;
435
+ const cells = e.cells ?? [];
436
+ if (e.todo || e.outcome === "skipped" || !cells.length) return [head];
437
+ const failed = e.outcome !== "pass";
438
+ return [
439
+ head,
440
+ ...cellsBody(c, shape.kind, cells, 2, {
441
+ failed,
442
+ verbose,
443
+ effects: true
444
+ }),
445
+ ...questionLines(c, e.questions, 2)
446
+ ];
447
+ }
448
+ /** `5 fail · 2 pass`: fail first, every case counting one, zeros left out. */
449
+ function tallyLine(c, tally) {
450
+ const parts = [
451
+ tally.fail ? c.red(`${tally.fail} fail`) : "",
452
+ tally.pass ? c.green(`${tally.pass} pass`) : "",
453
+ tally.infraError ? c.yellow(plural(tally.infraError, "infra error")) : "",
454
+ tally.skipped ? c.dim(`${tally.skipped} skipped`) : ""
455
+ ].filter(Boolean);
456
+ return parts.length ? parts.join(c.dim(" · ")) : "no evals ran";
457
+ }
458
+ /** Every eval's block in file-path order, then source order; a blank line around each longer one. */
459
+ function renderBlocks(suite, opts) {
460
+ const c = colors(opts.color);
461
+ const blocks = suite.files.flatMap((f) => [...f.evals].sort((a, b) => a.order - b.order).map((e) => evalBlock(c, e, opts.verbose)));
462
+ const out = [];
463
+ blocks.forEach((block, i) => {
464
+ const prev = blocks[i - 1];
465
+ if (prev && (prev.length > 1 || block.length > 1)) out.push("");
466
+ out.push(...block);
467
+ });
468
+ return out;
469
+ }
470
+ /** A run's result: its blocks, then the tally and, with no analysis model, the hint. `insights` arrives with a model. */
471
+ function render(suite, _insights, opts) {
472
+ const blocks = renderBlocks(suite, opts);
473
+ return [
474
+ ...blocks,
475
+ ...blocks.length ? [""] : [],
476
+ ...opts.notes ?? [],
477
+ tallyLine(colors(opts.color), suite.tally),
478
+ ...opts.hint ? [NO_MODEL_HINT] : []
479
+ ];
480
+ }
481
+ //#endregion
482
+ //#region src/history/summary.ts
483
+ const OUTCOME_MARK = {
484
+ pass: "✓",
485
+ fail: "✗",
486
+ infra_error: "!",
487
+ skipped: "↓"
488
+ };
489
+ /** Enough to read the agent's conclusion; the record and transcript have it whole. */
490
+ const LAST_MESSAGE_LIMIT = 4e3;
491
+ const cell = (s) => s.replace(/\|/g, "\\|").replace(/\n/g, " ");
492
+ /** `5 fail · 2 pass`, with the run's status when it didn't complete. */
493
+ const runTally = (run) => `${tallyLine(colors(false), suiteResult(run).tally)}${run.status === "complete" ? "" : ` · ${run.status === "budget" ? "budget reached" : run.status}`}`;
494
+ const short = (hash) => hash.replace(/^sha256:/, "").slice(0, 12);
495
+ /**
496
+ * The state a run executed in, as label/value pairs, shared by summary.md and `reeval show`. The
497
+ * commit is where the run executed; the commit that adds its history file comes later.
498
+ */
499
+ function stateRows(run) {
500
+ const { git, stack: env } = run;
501
+ const rows = [];
502
+ rows.push(["Executed at", git ? `${git.sha.slice(0, 12)}${git.branch ? ` on ${git.branch}` : ""}${git.dirty ? ", dirty" : ", clean"} (the commit that adds this record is later)` : "not a git repository"]);
503
+ if (git?.dirty) rows.push(["Uncommitted", git.worktreePatch ? `worktree.patch, ${git.worktreePatch.bytes} bytes, sha256 ${short(git.worktreePatch.sha256)}` : `not saved: ${git.worktreePatchNote ?? "unknown"}${git.diffHash ? `; sha256 ${short(git.diffHash)}` : ""}`]);
504
+ rows.push(["Lockfiles", run.dependencies.lockfiles.map((l) => `${l.path} ${short(l.sha256)}`).join(", ") || "none found"]);
505
+ rows.push(["Images", env.images.length ? env.images.map((i) => `${i.ref} · id ${short(i.id)} · ${i.repoDigests[0] ?? "no registry digest (built locally)"} · CLI ${i.agentCli ?? "n/a"}${i.dockerfile ? ` · dockerfile ${i.dockerfile.path} ${short(i.dockerfile.sha256)}` : ""}${i.install?.length ? ` · install ${i.install.length} on ${i.base}` : ""}`).join("; ") : "none (fake sandbox)"]);
506
+ rows.push(["Harnesses", env.harnesses.map(harnessLabel).join(", ") || "none"]);
507
+ rows.push(["Environments", run.environments.map((e) => `${e.name} ${short(e.digest)}${e.skills.length ? ` · skills ${e.skills.map((s) => `${s.name}${s.commit ? `@${s.commit.slice(0, 7)}` : ""}`).join(", ")}` : ""}${e.mcp.length ? ` · mcp ${e.mcp.join(", ")}` : ""}${e.secrets.length ? ` · secrets ${e.secrets.join(", ")}` : ""}`).join("; ") || "none"]);
508
+ rows.push(["Judge", `${env.judge.model ?? "none by default"}${env.judge.resolvedModels.length ? ` (served ${env.judge.resolvedModels.join(", ")})` : ""} · threshold ${env.judge.threshold} · version ${env.judge.version}`]);
509
+ rows.push(["Context", env.context.length ? `${env.context.length} file${env.context.length === 1 ? "" : "s"}: ${env.context.map((c) => `${c.path} ${short(c.sha256)}`).join(", ")}` : "no skills, rules or MCP config found in the sandbox"]);
510
+ rows.push(["Packages", Object.entries(env.packages).map(([name, v]) => `${name} ${v}`).join(" · ")]);
511
+ const language = languageLabel(env);
512
+ rows.push(["reeval", `${env.reeval} · ${runtimeLabel(env)}${language ? ` · ${language}` : ""} · ${env.os}/${env.arch}`]);
513
+ rows.push(["Runner", run.runner.kind === "ci" ? `CI (${run.runner.provider})${run.runner.runUrl ? ` ${run.runner.runUrl}` : ""}` : `local · ${run.author}`]);
514
+ return rows;
515
+ }
516
+ /** Markdown for people and agents landing on a run cold. Links are relative to the artifact dir. */
517
+ function renderSummary(run, opts) {
518
+ const lines = [
519
+ `# reeval run ${run.runId}`,
520
+ "",
521
+ `${runTally(run)} · started ${run.startedAt} (${formatDuration(run.durationMs)})`,
522
+ "",
523
+ `Plan: ${run.profile ? `profile ${run.profile.name} (${run.profile.reason}) · ` : ""}${run.plan.evals} evals · ${run.plan.cells} cells · ${run.plan.attempts} attempts${run.budget ? ` · budget ${[run.budget.attempts !== void 0 ? `${run.budget.attempts} attempts` : "", run.budget.duration ?? ""].filter(Boolean).join(", ")}` : ""}`,
524
+ "",
525
+ ...run.plan.sandboxWarnings.map((w) => `> **Warning:** ${w.message}\n`),
526
+ "## Results",
527
+ "",
528
+ "```text",
529
+ ...render(suiteResult(run), null, {
530
+ color: false,
531
+ verbose: false,
532
+ hint: opts.hint
533
+ }),
534
+ "```",
535
+ "",
536
+ "## State",
537
+ "",
538
+ "| | |",
539
+ "|---|---|",
540
+ ...stateRows(run).map(([k, v]) => `| ${k} | ${cell(v)} |`),
541
+ "",
542
+ ...warnings(run).map((w) => `> **Warning:** ${w}\n`),
543
+ `Record: [${run.runId}.json](../${run.runId}.json) · artifacts: ${run.artifacts}`,
544
+ "",
545
+ "## Attempts"
546
+ ];
547
+ const rank = (o) => o === "fail" || o === "infra_error" ? 0 : o === "pass" ? 1 : 2;
548
+ for (const e of [...run.evals].sort((x, y) => rank(x.outcome) - rank(y.outcome))) {
549
+ if (e.outcome === "skipped") continue;
550
+ lines.push("", `### ${OUTCOME_MARK[evalMarkOutcome(e)]} ${e.id}`, "");
551
+ const multi = e.attempts.length > 1;
552
+ const inputs = (e.answers ?? []).filter((a) => a.input);
553
+ for (const a of inputs) lines.push(`- Question: ${cell(`"${clip(a.question, 80)}"`)} · [what the model saw](${a.input?.path})`);
554
+ if (inputs.length) lines.push("");
555
+ const attemptRank = (a) => isUngatedMiss(e, a) ? 3 : rank(a.outcome);
556
+ for (const a of [...e.attempts].sort((x, y) => attemptRank(x) - attemptRank(y))) {
557
+ if (a.outcome === "skipped") continue;
558
+ if (isUngatedMiss(e, a)) {
559
+ if (multi) lines.push(`#### ○ ${a.id} · missed, not gated`, "");
560
+ lines.push("<details><summary>Why it missed</summary>", "");
561
+ attemptDetail(lines, a);
562
+ lines.push("", "</details>");
563
+ continue;
564
+ }
565
+ if (multi) lines.push(`#### ${OUTCOME_MARK[a.outcome]} ${a.id}`, "");
566
+ attemptDetail(lines, a);
567
+ }
568
+ }
569
+ lines.push("");
570
+ return lines.join("\n");
571
+ }
572
+ /** A failed verdict already says why a judge error failed the attempt; its message repeats it. */
573
+ const repeatsVerdict = (a) => a.error?.kind === "judge" && a.judgements.some((j) => j.verdict === "fail");
574
+ function attemptDetail(lines, a) {
575
+ if (a.error && !repeatsVerdict(a)) lines.push(`**${a.error.kind}**`, "", "```", a.error.message.split("\n").slice(0, 20).join("\n"), "```", "");
576
+ for (const turn of a.turns) {
577
+ lines.push(`- Prompt (${turn.status}, ${formatDuration(turn.durationMs)}): ${clip(cell(turn.prompt), 200)}`);
578
+ if (turn.error) lines.push(` - Error: ${clip(cell(turn.error), 500)}`);
579
+ }
580
+ const t = a.timings;
581
+ lines.push(`- Time: setup ${formatDuration(t.setupMs)} · agent ${formatDuration(t.agentMs)} · checks ${formatDuration(t.checksMs)} · judge ${formatDuration(t.judgeMs)}`);
582
+ const act = a.activity;
583
+ const web = (n, what) => n === null ? `${what} not reported` : `${n} ${what}`;
584
+ lines.push(`- Agent: ${act.fileEdits} file edits · ${act.tools} other tool calls · ${web(act.webSearches, "web searches")} · ${web(act.webFetches, "fetches")} · ${formatDuration(act.reasoningMs)} reasoning${act.stalledTools ? ` · ${act.stalledTools} stalled tool${act.stalledTools === 1 ? "" : "s"} (≥2m)${act.maxToolMs ? `, longest ${formatDuration(act.maxToolMs)}` : ""}` : ""}`);
585
+ for (const { judgement: j, label, labelled } of labelledJudgements(a)) {
586
+ const retried = j.retries?.length ? `, after ${j.retries.length} ${j.retries.length === 1 ? "retry" : "retries"}` : "";
587
+ lines.push(`- Judge${labelled ? ` ${cell(label)}` : ""} **${j.verdict}** ${j.score.toFixed(2)} (threshold ${j.threshold}, ${j.model}${retried}): ${j.question}`);
588
+ }
589
+ const labels = checkLabels(a);
590
+ a.checks.forEach((c, i) => {
591
+ const label = labels[i];
592
+ lines.push(`- Check${label ? ` ${cell(label)}` : ""} exit ${c.exitCode}: \`${cell(commandLine(c.command))}\`${c.log ? ` ([log](${c.log.path}))` : ""}`);
593
+ });
594
+ if (a.changedFiles.length) lines.push(`- Changed: ${a.changedFiles.map((f) => f.count ? `\`${f.path}\` (${f.count} files)` : `${f.status} \`${f.path}\``).join(", ")}`);
595
+ const last = a.turns.at(-1)?.text;
596
+ if (last) {
597
+ const shown = last.length > LAST_MESSAGE_LIMIT ? `${last.slice(0, LAST_MESSAGE_LIMIT)}…` : last;
598
+ lines.push("", "Last message:", "", ...shown.trimEnd().split("\n").map((l) => `> ${l}`), "");
599
+ }
600
+ const links = [
601
+ a.files.setupLog && `[setup log](${a.files.setupLog.path})`,
602
+ a.files.transcript && `[transcript](${a.files.transcript.path})`,
603
+ a.files.diff && `[diff](${a.files.diff.path})`,
604
+ a.files.judgeInput && `[judge input](${a.files.judgeInput.path})`
605
+ ].filter(Boolean);
606
+ if (links.length) lines.push(`- Files: ${links.join(" · ")}`);
607
+ }
608
+ //#endregion
609
+ export { render as a, stateRows as i, renderSummary as n, runTally as r, OUTCOME_MARK as t };
610
+
611
+ //# sourceMappingURL=summary-BUKfU-9l.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-BUKfU-9l.js","names":[],"sources":["../src/ui/layout.ts","../src/history/summary.ts"],"mappings":"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"}