reeval 0.2.0 → 0.4.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 (224) hide show
  1. package/THIRD_PARTY_NOTICES.md +9 -9
  2. package/assets/package.json +1 -1
  3. package/assets/pnpm-lock.yaml +84 -33
  4. package/dist/agent-C9dLMCM7.js +334 -0
  5. package/dist/agent-C9dLMCM7.js.map +1 -0
  6. package/dist/{agent-D-6z0Z3F.js → agent-M70OWyfG.js} +5 -5
  7. package/dist/{agent-D-6z0Z3F.js.map → agent-M70OWyfG.js.map} +1 -1
  8. package/dist/analysis-CxSCt1YY.js.map +1 -1
  9. package/dist/{assemble-DtouO0iQ.js → assemble-BmVT26kf.js} +25 -17
  10. package/dist/assemble-BmVT26kf.js.map +1 -0
  11. package/dist/assemble-DZiN1p_E.js +2 -0
  12. package/dist/{attempt-BdRQ9jKX.js → attempt-CGPV3BZY.js} +2 -2
  13. package/dist/{attempt-BdRQ9jKX.js.map → attempt-CGPV3BZY.js.map} +1 -1
  14. package/dist/bridge/index.mjs +1620 -1793
  15. package/dist/bridge/package.json +2 -2
  16. package/dist/bridge/pnpm-lock.yaml +75 -75
  17. package/dist/bridge/pnpm-workspace.yaml +1 -1
  18. package/dist/{cli-CGuUdOPK.js → cli-BdxFLEIc.js} +166 -55
  19. package/dist/cli-BdxFLEIc.js.map +1 -0
  20. package/dist/{cli-spec-DKAu09Gi.js → cli-spec-DUeyuSIQ.js} +11 -4
  21. package/dist/cli-spec-DUeyuSIQ.js.map +1 -0
  22. package/dist/cli.js +2 -2
  23. package/dist/{command-CCuYRGsI.js → command-BtcBitmY.js} +12 -12
  24. package/dist/{command-CCuYRGsI.js.map → command-BtcBitmY.js.map} +1 -1
  25. package/dist/{command-BekzrvZI.js → command-ByqQ-v-j.js} +13 -13
  26. package/dist/{command-BekzrvZI.js.map → command-ByqQ-v-j.js.map} +1 -1
  27. package/dist/{command-CLKuXn6Z.js → command-CIsO5xdR.js} +11 -9
  28. package/dist/command-CIsO5xdR.js.map +1 -0
  29. package/dist/{command-CEm8PZ1N.js → command-CQiFfn-C.js} +169 -280
  30. package/dist/command-CQiFfn-C.js.map +1 -0
  31. package/dist/command-DllipyoK.js +2 -0
  32. package/dist/{commands-CF8mOfiu.js → commands-CPrrZ2mI.js} +29 -13
  33. package/dist/commands-CPrrZ2mI.js.map +1 -0
  34. package/dist/{commands-A4udfyKZ.js → commands-D3Dxgh60.js} +1 -1
  35. package/dist/{config-DqJvSqYo.js → config-B93Csktg.js} +43 -15
  36. package/dist/{config-DqJvSqYo.js.map → config-B93Csktg.js.map} +1 -1
  37. package/dist/db-DIE0bsNO.js +2 -0
  38. package/dist/{db-DxDzMhtB.js → db-SpvY8l1g.js} +4 -4
  39. package/dist/{db-DxDzMhtB.js.map → db-SpvY8l1g.js.map} +1 -1
  40. package/dist/{dist-BZXYHN2X.js → dist-C2k9IvL3.js} +107 -55
  41. package/dist/dist-C2k9IvL3.js.map +1 -0
  42. package/dist/{docker-Buu3a60z.js → docker-Bv1ZC6V7.js} +1 -1
  43. package/dist/{docker-DQDZWXF9.js → docker-C2YwD_dh.js} +3 -3
  44. package/dist/{docker-DQDZWXF9.js.map → docker-C2YwD_dh.js.map} +1 -1
  45. package/dist/{docker-w0CSdQq0.js → docker-uNaAGE2C.js} +5 -5
  46. package/dist/{docker-w0CSdQq0.js.map → docker-uNaAGE2C.js.map} +1 -1
  47. package/dist/{doctor-Bs1_pG9_.js → doctor-COH-levb.js} +88 -20
  48. package/dist/doctor-COH-levb.js.map +1 -0
  49. package/dist/{egress-QJMzVtbw.js → egress-C7Obb71D.js} +35 -19
  50. package/dist/egress-C7Obb71D.js.map +1 -0
  51. package/dist/{environment-9WHSWLxH.js → environment-lDFQY2BF.js} +116 -4
  52. package/dist/environment-lDFQY2BF.js.map +1 -0
  53. package/dist/{files-D2-qn_Dl.js → files-BO9P6msM.js} +114 -14
  54. package/dist/files-BO9P6msM.js.map +1 -0
  55. package/dist/files-BRWmQJ-9.js +2 -0
  56. package/dist/files-Bwr8UW4b.js +2 -0
  57. package/dist/{files-bF2fPuT9.js → files-CMoTBEul.js} +40 -7
  58. package/dist/files-CMoTBEul.js.map +1 -0
  59. package/dist/{git-D6hMeieS.js → git-LJp55bkf.js} +3 -3
  60. package/dist/{git-D6hMeieS.js.map → git-LJp55bkf.js.map} +1 -1
  61. package/dist/{harness-ls5aX1UO.js → harness-BbMShUC-.js} +4 -4
  62. package/dist/{harness-ls5aX1UO.js.map → harness-BbMShUC-.js.map} +1 -1
  63. package/dist/harness.d.ts +2 -2
  64. package/dist/harness.js +1 -1
  65. package/dist/{header-DzFDoMCI.js → header-sPQ9Lq2S.js} +2 -2
  66. package/dist/{header-DzFDoMCI.js.map → header-sPQ9Lq2S.js.map} +1 -1
  67. package/dist/{images-2m2U-UQc.js → images-Pph_XJ68.js} +6 -6
  68. package/dist/{images-2m2U-UQc.js.map → images-Pph_XJ68.js.map} +1 -1
  69. package/dist/index.d.ts +11 -4
  70. package/dist/index.js +173 -65
  71. package/dist/index.js.map +1 -1
  72. package/dist/{init-CH9UY7Bt.js → init-BcYpzHXs.js} +10 -10
  73. package/dist/{init-CH9UY7Bt.js.map → init-BcYpzHXs.js.map} +1 -1
  74. package/dist/init-YS5qBRwV.js +2 -0
  75. package/dist/{invocations-rXktgSAn.js → invocations-DHC946b-.js} +4 -4
  76. package/dist/{invocations-rXktgSAn.js.map → invocations-DHC946b-.js.map} +1 -1
  77. package/dist/{jiti-BOLXpKyG.js → jiti-DWsGEgxD.js} +4 -4
  78. package/dist/{jiti-BOLXpKyG.js.map → jiti-DWsGEgxD.js.map} +1 -1
  79. package/dist/{judge-D8Uf4dA9.js → judge-D6wqgTDp.js} +17 -4
  80. package/dist/judge-D6wqgTDp.js.map +1 -0
  81. package/dist/judge.d.ts +12 -8
  82. package/dist/judge.js +13 -5
  83. package/dist/judge.js.map +1 -1
  84. package/dist/{live-Bs3LReMV.js → live-DZkCtmNP.js} +2 -2
  85. package/dist/{live-Bs3LReMV.js.map → live-DZkCtmNP.js.map} +1 -1
  86. package/dist/{matchers-DyLvm7EG.js → matchers-DbFPZQgA.js} +9 -4
  87. package/dist/{matchers-DyLvm7EG.js.map → matchers-DbFPZQgA.js.map} +1 -1
  88. package/dist/model-CJ6USX6C.js +2 -0
  89. package/dist/model-CNoc8t2Y.js +2 -0
  90. package/dist/model-DUZtNaYR.js +228 -0
  91. package/dist/model-DUZtNaYR.js.map +1 -0
  92. package/dist/{model-CDL98xue.js → model-ORtLm2UB.js} +41 -3
  93. package/dist/{model-CDL98xue.js.map → model-ORtLm2UB.js.map} +1 -1
  94. package/dist/{model-BdO79gWz.js → model-f0wprGPm.js} +3 -3
  95. package/dist/{model-BdO79gWz.js.map → model-f0wprGPm.js.map} +1 -1
  96. package/dist/{node-kG64XxdE.js → node-OXPxBD2N.js} +3 -3
  97. package/dist/{node-kG64XxdE.js.map → node-OXPxBD2N.js.map} +1 -1
  98. package/dist/{opencode-providers-DZuD_oYt.js → opencode-providers-DJVocFOU.js} +31 -3
  99. package/dist/opencode-providers-DJVocFOU.js.map +1 -0
  100. package/dist/{options-k25fjaER.js → options-Ftb2gE01.js} +85 -26
  101. package/dist/options-Ftb2gE01.js.map +1 -0
  102. package/dist/patch-BxqggH-T.js +118 -0
  103. package/dist/patch-BxqggH-T.js.map +1 -0
  104. package/dist/{plan-gwk6dJ8c.js → plan-BkhLKrsN.js} +23 -6
  105. package/dist/plan-BkhLKrsN.js.map +1 -0
  106. package/dist/{preflight-B6hfAXhh.js → preflight-CuvY0o3B.js} +3 -3
  107. package/dist/{preflight-B6hfAXhh.js.map → preflight-CuvY0o3B.js.map} +1 -1
  108. package/dist/{preflight-D2Hce5Jp.js → preflight-D3cJETui.js} +1 -1
  109. package/dist/{prepare-NuWsT11j.js → prepare-BI9j2-H-.js} +5 -5
  110. package/dist/{prepare-NuWsT11j.js.map → prepare-BI9j2-H-.js.map} +1 -1
  111. package/dist/{prepare-C3fefNnV.js → prepare-CVuTk5F9.js} +2 -2
  112. package/dist/{provenance-Dfb8YY5Y.js → provenance-6n49wska.js} +22 -4
  113. package/dist/provenance-6n49wska.js.map +1 -0
  114. package/dist/{providers-Bfx5Mnk9.js → providers-BFapaM2D.js} +3 -3
  115. package/dist/{providers-Bfx5Mnk9.js.map → providers-BFapaM2D.js.map} +1 -1
  116. package/dist/{providers-BMIGzPPG.js → providers-Cay8pI0y.js} +1 -1
  117. package/dist/query-Br77sQYj.js +2 -0
  118. package/dist/{query-CFATHZmV.js → query-CnstTDt8.js} +2 -2
  119. package/dist/{query-CFATHZmV.js.map → query-CnstTDt8.js.map} +1 -1
  120. package/dist/questions-Cm321-Mo.js +325 -0
  121. package/dist/questions-Cm321-Mo.js.map +1 -0
  122. package/dist/{record-DQ8wzyco.js → record-CbuQH4l1.js} +7 -3
  123. package/dist/record-CbuQH4l1.js.map +1 -0
  124. package/dist/{redact-C4fL_bZP.js → redact-DJ9JCShu.js} +99 -28
  125. package/dist/redact-DJ9JCShu.js.map +1 -0
  126. package/dist/{results-BtvBJAp-.js → results-D9GgBYw5.js} +4 -4
  127. package/dist/{results-BtvBJAp-.js.map → results-D9GgBYw5.js.map} +1 -1
  128. package/dist/{root-CFDjpWuc.js → root-Zeokqt3-.js} +2 -2
  129. package/dist/{root-CFDjpWuc.js.map → root-Zeokqt3-.js.map} +1 -1
  130. package/dist/{sandbox-BJPWuQE9.js → sandbox-CO__l-i1.js} +3 -3
  131. package/dist/{sandbox-BJPWuQE9.js.map → sandbox-CO__l-i1.js.map} +1 -1
  132. package/dist/sandbox.d.ts +2 -2
  133. package/dist/sandbox.js +1 -1
  134. package/dist/server-D5Zq3I5N.js +2 -0
  135. package/dist/{server-5DWmKKfV.js → server-DsmIrBzi.js} +12 -10
  136. package/dist/{server-5DWmKKfV.js.map → server-DsmIrBzi.js.map} +1 -1
  137. package/dist/source-BgqURlel.js +2 -0
  138. package/dist/{source-Bsfa3LZH.js → source-DJ1c8jwe.js} +2 -2
  139. package/dist/{source-Bsfa3LZH.js.map → source-DJ1c8jwe.js.map} +1 -1
  140. package/dist/{src-DXx_29pq.js → src-B1OT_Zhf.js} +46 -46
  141. package/dist/{src-DXx_29pq.js.map → src-B1OT_Zhf.js.map} +1 -1
  142. package/dist/{src-BQyMiWri.js → src-BAiYD4eC.js} +48 -7
  143. package/dist/{src-BQyMiWri.js.map → src-BAiYD4eC.js.map} +1 -1
  144. package/dist/{src-N7E_mfcZ.js → src-BC5FFzE8.js} +1 -1
  145. package/dist/src-Bi2Y3EkE.js +3 -0
  146. package/dist/{src-D8KYzxBX.js → src-BmBFlEIe.js} +12 -7
  147. package/dist/{src-D8KYzxBX.js.map → src-BmBFlEIe.js.map} +1 -1
  148. package/dist/src-C8WNyopo.js +3 -0
  149. package/dist/src-CYz-TreZ.js +3 -0
  150. package/dist/src-C_91Ln3Z.js +4 -0
  151. package/dist/{src-Cmp-7YrD.js → src-DWk0e7ix.js} +5 -5
  152. package/dist/{src-Cmp-7YrD.js.map → src-DWk0e7ix.js.map} +1 -1
  153. package/dist/{src-AEwxd1UP.js → src-DfEAlC9s.js} +4 -4
  154. package/dist/{src-AEwxd1UP.js.map → src-DfEAlC9s.js.map} +1 -1
  155. package/dist/{src-DwwiVLqv.js → src-V-iU5X9S.js} +24 -21
  156. package/dist/{src-DwwiVLqv.js.map → src-V-iU5X9S.js.map} +1 -1
  157. package/dist/{src-C-LHyTSV.js → src-gPJFzHcK.js} +1 -1
  158. package/dist/src-gVzsO4_f.js +3 -0
  159. package/dist/{state-DZ7eqb1F.js → state-DFbJrVi3.js} +15 -15
  160. package/dist/{state-DZ7eqb1F.js.map → state-DFbJrVi3.js.map} +1 -1
  161. package/dist/state-Joc2b4qk.js +2 -0
  162. package/dist/studio-app/assets/index-B1Pf3LAT.css +2 -0
  163. package/dist/studio-app/assets/index-BhorHbrj.js +58 -0
  164. package/dist/studio-app/index.html +2 -2
  165. package/dist/{summary-D7Ttky0z.js → summary-CEMYhzXm.js} +33 -5
  166. package/dist/summary-CEMYhzXm.js.map +1 -0
  167. package/dist/summary-WR5qLj_z.js +192 -0
  168. package/dist/summary-WR5qLj_z.js.map +1 -0
  169. package/dist/tools-DN-cJcfi.js +249 -0
  170. package/dist/tools-DN-cJcfi.js.map +1 -0
  171. package/dist/{types-CYJldf5N.d.ts → types-B_CqVrOS.d.ts} +210 -30
  172. package/dist/view/index.d.ts +63 -1
  173. package/dist/view/index.js +5 -5
  174. package/dist/{views-BrHOv6wg.js → views-DNbUdW9d.js} +4 -4
  175. package/dist/{views-BrHOv6wg.js.map → views-DNbUdW9d.js.map} +1 -1
  176. package/dist/views-DnYbVkKg.js +3 -0
  177. package/dist/{worker-entry-DnYkANPG.js → worker-entry-CJmG4hhE.js} +3 -3
  178. package/dist/{worker-entry-DnYkANPG.js.map → worker-entry-CJmG4hhE.js.map} +1 -1
  179. package/dist/{workspace-BVgNhC9h.js → workspace-CmSp2MXO.js} +1 -1
  180. package/dist/{workspace-uPapQj16.js → workspace-QtlJtRut.js} +5 -5
  181. package/dist/{workspace-uPapQj16.js.map → workspace-QtlJtRut.js.map} +1 -1
  182. package/docker/Dockerfile +2 -0
  183. package/docker/reeval-path.sh +21 -0
  184. package/package.json +13 -12
  185. package/dist/assemble-Dm4gD1TU.js +0 -2
  186. package/dist/assemble-DtouO0iQ.js.map +0 -1
  187. package/dist/cli-CGuUdOPK.js.map +0 -1
  188. package/dist/cli-spec-DKAu09Gi.js.map +0 -1
  189. package/dist/command-CEm8PZ1N.js.map +0 -1
  190. package/dist/command-CLKuXn6Z.js.map +0 -1
  191. package/dist/commands-CF8mOfiu.js.map +0 -1
  192. package/dist/db-Cjj2ZsfQ.js +0 -2
  193. package/dist/dist-BZXYHN2X.js.map +0 -1
  194. package/dist/doctor-Bs1_pG9_.js.map +0 -1
  195. package/dist/egress-QJMzVtbw.js.map +0 -1
  196. package/dist/environment-9WHSWLxH.js.map +0 -1
  197. package/dist/files--6CEUXm7.js +0 -2
  198. package/dist/files-Bd25OAQH.js +0 -2
  199. package/dist/files-D2-qn_Dl.js.map +0 -1
  200. package/dist/files-bF2fPuT9.js.map +0 -1
  201. package/dist/init-DJuxvYCW.js +0 -2
  202. package/dist/judge-D8Uf4dA9.js.map +0 -1
  203. package/dist/model-v-0_Ik7S.js +0 -2
  204. package/dist/opencode-providers-DZuD_oYt.js.map +0 -1
  205. package/dist/options-k25fjaER.js.map +0 -1
  206. package/dist/patch-BkKje4cp.js +0 -69
  207. package/dist/patch-BkKje4cp.js.map +0 -1
  208. package/dist/plan-gwk6dJ8c.js.map +0 -1
  209. package/dist/provenance-Dfb8YY5Y.js.map +0 -1
  210. package/dist/query-DR4m6CXf.js +0 -2
  211. package/dist/record-DQ8wzyco.js.map +0 -1
  212. package/dist/redact-C4fL_bZP.js.map +0 -1
  213. package/dist/server-buV3adNS.js +0 -2
  214. package/dist/source-BXzrmof5.js +0 -2
  215. package/dist/src-55j1zNHH.js +0 -3
  216. package/dist/src-BDwSuyIo.js +0 -3
  217. package/dist/src-DEgff9Z7.js +0 -4
  218. package/dist/src-W9g-y5X5.js +0 -3
  219. package/dist/src-daS0wKH2.js +0 -3
  220. package/dist/state-Cyw3QTsN.js +0 -2
  221. package/dist/studio-app/assets/index-Da1XDzx8.js +0 -58
  222. package/dist/studio-app/assets/index-xwzWdcE_.css +0 -2
  223. package/dist/summary-D7Ttky0z.js.map +0 -1
  224. package/dist/views-CwCWLWqo.js +0 -3
@@ -6,8 +6,8 @@
6
6
  <meta name="referrer" content="no-referrer" />
7
7
  <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
8
8
  <title>reeval Studio</title>
9
- <script type="module" crossorigin src="./assets/index-Da1XDzx8.js"></script>
10
- <link rel="stylesheet" crossorigin href="./assets/index-xwzWdcE_.css">
9
+ <script type="module" crossorigin src="./assets/index-BhorHbrj.js"></script>
10
+ <link rel="stylesheet" crossorigin href="./assets/index-B1Pf3LAT.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
@@ -1,6 +1,6 @@
1
1
  import { n as clip, r as formatDuration } from "./text-gEcKjAyp.js";
2
- import { N as effortLabel, O as cellContrast, m as harnessLabel, v as isUngatedMiss } from "./model-CDL98xue.js";
3
- import { o as warnings } from "./state-DZ7eqb1F.js";
2
+ import { I as effortLabel, b as languageLabel, h as harnessLabel, j as cellContrast, w as runtimeLabel, y as isUngatedMiss } from "./model-ORtLm2UB.js";
3
+ import { o as warnings } from "./state-DFbJrVi3.js";
4
4
  //#region src/history/summary.ts
5
5
  const OUTCOME_MARK = {
6
6
  pass: "✓",
@@ -36,6 +36,29 @@ function liftLabel(lift) {
36
36
  const counts = `${variant.pass}/${variant.counted} vs ${control.pass}/${control.counted}`;
37
37
  return `lift ${signedPoints(lift.points)} pts (${range}, ${counts})${lift.withinNoise ? ", within noise" : ""}`;
38
38
  }
39
+ const rateText = (r) => `${r.name} ${r.wins}/${r.n} (${Math.round(r.wins / r.n * 100)}%)`;
40
+ /**
41
+ * One compare question's answer: `"Which is cleaner?" within: with-skill 2/2 (100%), plain 0/2
42
+ * (0%) · 2 votes, 0 ties · google/gemini-3.8-flash`, or why it has no votes.
43
+ */
44
+ function answersLabel(answer) {
45
+ const q = `"${clip(answer.question, 80)}"`;
46
+ const ties = answer.votes.filter((v) => v.winner === "tie").length;
47
+ const cuts = ["within", "across"].flatMap((cut) => {
48
+ const rates = answer.rates.filter((r) => r.cut === cut);
49
+ return rates.length ? [`${cut}: ${rates.map(rateText).join(", ")}`] : [];
50
+ });
51
+ const votes = answer.votes.length;
52
+ const tally = `${votes} vote${votes === 1 ? "" : "s"}, ${ties} tie${ties === 1 ? "" : "s"}`;
53
+ const by = answer.resolvedModel ?? answer.model;
54
+ const failed = answer.error !== void 0 ? ` · failed: ${clip(answer.error, 200)}` : "";
55
+ if (votes === 0 && answer.error === void 0) return `${q} no pairs to judge: attempts that failed their checks are left out`;
56
+ return `${q} ${[
57
+ ...cuts,
58
+ tally,
59
+ by
60
+ ].join(" · ")}${failed}`;
61
+ }
39
62
  /** `fake/-/fake 0/2 (control, not gated) · fake/with-skill/fake 2/2 (lift +100 pts …)`. */
40
63
  function cellCounts(e) {
41
64
  return e.cells.map((c) => {
@@ -73,7 +96,8 @@ function stateRows(run) {
73
96
  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}`]);
74
97
  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"]);
75
98
  rows.push(["Packages", Object.entries(env.packages).map(([name, v]) => `${name} ${v}`).join(" · ")]);
76
- rows.push(["reeval", `${env.es} · node ${env.node} · ${env.os}/${env.arch}`]);
99
+ const language = languageLabel(env);
100
+ rows.push(["reeval", `${env.es} · ${runtimeLabel(env)}${language ? ` · ${language}` : ""} · ${env.os}/${env.arch}`]);
77
101
  rows.push(["Runner", run.runner.kind === "ci" ? `CI (${run.runner.provider})${run.runner.runUrl ? ` ${run.runner.runUrl}` : ""}` : `local · ${run.author}`]);
78
102
  return rows;
79
103
  }
@@ -111,6 +135,10 @@ function renderSummary(run) {
111
135
  lines.push("", `### ${OUTCOME_MARK[e.outcome]} ${e.id}`, "");
112
136
  const multi = e.attempts.length > 1;
113
137
  if (multi) lines.push(`Cells: ${cellCounts(e)}`, "");
138
+ if (e.answers?.length) {
139
+ for (const a of e.answers) lines.push(`- Question: ${cell(answersLabel(a))}`);
140
+ lines.push("");
141
+ }
114
142
  const attemptRank = (a) => isUngatedMiss(e, a) ? 3 : rank(a.outcome);
115
143
  for (const a of [...e.attempts].sort((x, y) => attemptRank(x) - attemptRank(y))) {
116
144
  if (a.outcome === "skipped") continue;
@@ -161,6 +189,6 @@ function attemptDetail(lines, a) {
161
189
  if (links.length) lines.push(`- Files: ${links.join(" · ")}`);
162
190
  }
163
191
  //#endregion
164
- export { renderSummary as a, summaryCounts as c, liftLabel as i, cellCounts as n, repeatsVerdict as o, gateLabel as r, stateRows as s, OUTCOME_MARK as t };
192
+ export { liftLabel as a, stateRows as c, gateLabel as i, summaryCounts as l, answersLabel as n, renderSummary as o, cellCounts as r, repeatsVerdict as s, OUTCOME_MARK as t };
165
193
 
166
- //# sourceMappingURL=summary-D7Ttky0z.js.map
194
+ //# sourceMappingURL=summary-CEMYhzXm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-CEMYhzXm.js","names":[],"sources":["../src/history/summary.ts"],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ import { l as writeCached } from "./files-CMoTBEul.js";
2
+ import { a as providerModel } from "./model-DUZtNaYR.js";
3
+ import { r as fromRecorded, t as attemptSummary } from "./tools-DN-cJcfi.js";
4
+ import { n as allRuns } from "./commands-CPrrZ2mI.js";
5
+ import { a as failedAnalysis, i as defaultBase, o as prepareAnalysis, s as promptOf, t as analyseDigest } from "./command-CQiFfn-C.js";
6
+ import { join } from "node:path";
7
+ import { z } from "zod";
8
+ import { generateText, stepCountIs, tool } from "ai";
9
+ /** Items the fake reads of each kind, as a careful model would: a few, not all of them. */
10
+ const FAKE_READS = 3;
11
+ const SUMMARY_TOOLS_PROMPT = `You are about to analyse a reeval run from the DIGEST in the prompt. First, read what the digest leaves out, with the tools:
12
+ - read_evidence: an evidence item dropped from the digest to fit its size cap (the ids in "dropped").
13
+ - open_attempt: one attempt's turns, steps, checks, verdicts and diff, by its id in the attempts table (e.g. r1/skill/control#1).
14
+
15
+ Open failing attempts, and attempts whose facts look odd; at most six items in all, never every attempt. Then reply with one line saying what you read, and stop: you write the analysis itself in the next step.`;
16
+ /** The tools over a prepared digest, with every result counted against `maxChars`. */
17
+ function summaryTools(p, maxChars) {
18
+ let left = maxChars;
19
+ const spend = (value) => {
20
+ const size = JSON.stringify(value).length;
21
+ if (size > left) return { error: "The input budget (analysis.maxInputTokens) is spent: write the analysis from what you have." };
22
+ left -= size;
23
+ return value;
24
+ };
25
+ const runs = [p.headRun, p.baseRun].flatMap((r) => r ? [r] : []);
26
+ return {
27
+ read_evidence: tool({
28
+ description: "An evidence item dropped from the digest to fit its cap: its lines (transcript lines keep their L<n>), what it is and why it was chosen.",
29
+ inputSchema: z.object({ id: z.string().describe("An evidence id from the digest’s dropped") }),
30
+ execute: async ({ id }) => {
31
+ const item = p.dropped.find((e) => e.id === id);
32
+ if (item) {
33
+ const { priority: _priority, ...rest } = item;
34
+ return spend(rest);
35
+ }
36
+ return { error: p.digest.evidence.some((e) => e.id === id) ? `${id} is in the digest already.` : `No dropped evidence ${id}. Dropped: ${p.digest.dropped.join(", ") || "none"}.` };
37
+ }
38
+ }),
39
+ open_attempt: tool({
40
+ description: "One attempt: each turn's prompt, steps (tool calls, edits, errors) and final message, its checks, verdicts and diff.",
41
+ inputSchema: z.object({ id: z.string().describe("An attempt id from the digest’s attempts table") }),
42
+ execute: async ({ id }) => {
43
+ const a = p.digest.attempts[id];
44
+ const run = a && runs.find((r) => r.record.runId === a.runId);
45
+ const record = run?.record.evals.flatMap((e) => e.attempts).find((x) => x.key === a?.key);
46
+ if (!a || !run || !record) return { error: `No attempt ${id}. The attempts are ${Object.keys(p.digest.attempts).join(", ")}.` };
47
+ const view = await fromRecorded(join(run.dir, run.record.runId), record);
48
+ return spend({
49
+ ...attemptSummary(view),
50
+ id
51
+ });
52
+ }
53
+ })
54
+ };
55
+ }
56
+ const isError = (v) => typeof v === "object" && v !== null && "error" in v;
57
+ /** What the tools returned, as evidence to cite and as the text the structured call is shown. */
58
+ function toolReads(reads) {
59
+ const ok = reads.filter((r) => !isError(r.output));
60
+ const evidence = ok.filter((r) => r.tool === "read_evidence").map((r) => ({
61
+ ...r.output,
62
+ priority: 1
63
+ }));
64
+ if (!ok.length) return {
65
+ evidence,
66
+ text: ""
67
+ };
68
+ return {
69
+ evidence,
70
+ text: `\n\nREAD WITH TOOLS (cite a dropped evidence item read here by its id, as you would the digest's):\n${ok.map((r) => `${r.tool} ${JSON.stringify(r.input)}: ${JSON.stringify(r.output)}`).join("\n")}`
71
+ };
72
+ }
73
+ /** Lets the model read with the tools; what it read, for the structured call. */
74
+ async function investigate(p, model, config) {
75
+ const result = await generateText({
76
+ model: model.fake ? fakeSummaryModel(p) : await providerModel(model),
77
+ system: SUMMARY_TOOLS_PROMPT,
78
+ prompt: promptOf(p.digest),
79
+ tools: summaryTools(p, config.analysis.maxInputTokens * 4),
80
+ stopWhen: stepCountIs(4),
81
+ prepareStep: ({ stepNumber }) => stepNumber === 3 ? { toolChoice: "none" } : void 0,
82
+ temperature: .2,
83
+ maxOutputTokens: config.analysis.maxOutputTokens,
84
+ maxRetries: 3
85
+ });
86
+ return {
87
+ reads: result.steps.flatMap((s) => s.toolResults.map((r) => ({
88
+ tool: r.toolName,
89
+ input: r.input,
90
+ output: r.output
91
+ }))),
92
+ usage: {
93
+ inputTokens: result.totalUsage?.inputTokens ?? 0,
94
+ outputTokens: result.totalUsage?.outputTokens ?? 0
95
+ }
96
+ };
97
+ }
98
+ /**
99
+ * Writes the run's summary into the cache. A failed call is cached as a document with `error`, never
100
+ * a throw; only reading the run (before any call) can throw.
101
+ */
102
+ async function writeRunSummary(options) {
103
+ const { config, runId, model } = options;
104
+ const entries = await allRuns(config);
105
+ const head = entries.find((e) => e.runId === runId);
106
+ if (!head) throw new Error(`${runId} isn't in .reeval/runs`);
107
+ const prepared = await prepareAnalysis(config, head, await defaultBase(config, entries, head), null);
108
+ const started = Date.now();
109
+ let doc;
110
+ try {
111
+ const { reads, usage } = await investigate(prepared, model, config);
112
+ doc = await analyseDigest(config, prepared, model, toolReads(reads));
113
+ const plus = (a, b) => a === null ? null : a + b;
114
+ doc.usage = {
115
+ inputTokens: plus(doc.usage.inputTokens, usage.inputTokens),
116
+ outputTokens: plus(doc.usage.outputTokens, usage.outputTokens)
117
+ };
118
+ doc.latencyMs = Date.now() - started;
119
+ } catch (error) {
120
+ const message = error instanceof Error ? error.message : String(error);
121
+ doc = await failedAnalysis(config, prepared, model, message, Date.now() - started);
122
+ }
123
+ const path = await writeCached(config.root, prepared.key, doc);
124
+ return {
125
+ doc,
126
+ key: prepared.key,
127
+ path
128
+ };
129
+ }
130
+ /**
131
+ * A language model that reads as the prompt asks a real one to: the dropped evidence and the
132
+ * failing attempts, a few of each, in one round, then says it's done, through the AI SDK's own tool
133
+ * loop, so the tools and the budget run as they would.
134
+ */
135
+ function fakeSummaryModel(p) {
136
+ const usage = {
137
+ inputTokens: {
138
+ total: 0,
139
+ noCache: 0,
140
+ cacheRead: 0,
141
+ cacheWrite: 0
142
+ },
143
+ outputTokens: {
144
+ total: 0,
145
+ text: 0,
146
+ reasoning: 0
147
+ }
148
+ };
149
+ const answer = (content, finish) => ({
150
+ content,
151
+ finishReason: {
152
+ unified: finish,
153
+ raw: finish === "stop" ? "stop" : "tool_calls"
154
+ },
155
+ usage,
156
+ warnings: [],
157
+ response: { modelId: "fake-analysis" }
158
+ });
159
+ return {
160
+ specificationVersion: "v4",
161
+ provider: "fake",
162
+ modelId: "fake-analysis",
163
+ supportedUrls: {},
164
+ doGenerate: async (options) => {
165
+ const readSome = options.prompt.some((m) => m.role === "tool" && Array.isArray(m.content) && m.content.some((c) => c.type === "tool-result"));
166
+ const calls = [...p.digest.dropped.slice(0, FAKE_READS).map((id) => ({
167
+ name: "read_evidence",
168
+ input: { id }
169
+ })), ...Object.entries(p.digest.attempts).filter(([, a]) => a.outcome === "fail").slice(0, FAKE_READS).map(([id]) => ({
170
+ name: "open_attempt",
171
+ input: { id }
172
+ }))];
173
+ if (readSome || !calls.length) return answer([{
174
+ type: "text",
175
+ text: `Read ${readSome ? "what I needed" : "nothing"}.`
176
+ }], "stop");
177
+ return answer(calls.map((c, i) => ({
178
+ type: "tool-call",
179
+ toolCallId: `fake_${c.name}_${i}`,
180
+ toolName: c.name,
181
+ input: JSON.stringify(c.input)
182
+ })), "tool-calls");
183
+ },
184
+ doStream: async () => {
185
+ throw new Error("the fake analysis model does not stream");
186
+ }
187
+ };
188
+ }
189
+ //#endregion
190
+ export { writeRunSummary };
191
+
192
+ //# sourceMappingURL=summary-WR5qLj_z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-WR5qLj_z.js","names":[],"sources":["../src/analysis/agent/summary.ts"],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ import { s as recordFileName } from "./ids-Bp6ut7ZD.js";
2
+ import { n as clip } from "./text-gEcKjAyp.js";
3
+ import { x as parseTranscript } from "./model-ORtLm2UB.js";
4
+ import { s as mergeOutcome } from "./assemble-BmVT26kf.js";
5
+ import { join } from "node:path";
6
+ import { readFile } from "node:fs/promises";
7
+ //#region src/analysis/agent/tools.ts
8
+ const INPUT_KEYS = [
9
+ "command",
10
+ "cmd",
11
+ "path",
12
+ "file_path",
13
+ "filePath",
14
+ "target_file",
15
+ "pattern",
16
+ "query",
17
+ "url"
18
+ ];
19
+ /** A tool call's input in a few words: its command or path when it has one. */
20
+ function inputSummary(input) {
21
+ if (typeof input === "string") return clip(input.replace(/\s+/g, " "), 120);
22
+ if (typeof input !== "object" || input === null) return "";
23
+ const fields = input;
24
+ for (const key of INPUT_KEYS) {
25
+ const value = fields[key];
26
+ if (typeof value === "string" && value) return clip(value.replace(/\s+/g, " "), 120);
27
+ if (Array.isArray(value) && value.every((v) => typeof v === "string")) return clip(value.join(" "), 120);
28
+ }
29
+ return clip(JSON.stringify(input), 120);
30
+ }
31
+ /** One transcript event as a step, or null for text and reasoning (a turn's text is kept whole). */
32
+ function stepOf(event) {
33
+ switch (event.type) {
34
+ case "tool": {
35
+ const input = inputSummary(event.input);
36
+ return `${event.tool}${input ? `: ${input}` : ""}${event.ok ? "" : " (failed)"}`;
37
+ }
38
+ case "file-edit": return `edit (${event.kind}): ${event.path}`;
39
+ case "web-search": return `web-search: ${clip(event.query, 120)}`;
40
+ case "web-fetch": return `web-fetch: ${event.url}${event.ok ? "" : " (failed)"}`;
41
+ case "error": return `error: ${clip(event.message, 200)}`;
42
+ case "retry": return `retry: ${clip(event.message, 200)}`;
43
+ default: return null;
44
+ }
45
+ }
46
+ const steps = (events) => events.flatMap((e) => stepOf(e) ?? []);
47
+ const tail = (text, max) => text.length <= max ? text : `…${text.slice(-max)}`;
48
+ const head = (text, max) => text.length <= max ? text : `${text.slice(0, max)}\n… ${text.length - max} more characters`;
49
+ /** A worker's staged record, read the way the run will assemble it. */
50
+ function fromStaged(result, record) {
51
+ const attempt = result.attempt;
52
+ if (!attempt) return null;
53
+ const { outcome, error } = mergeOutcome(result, record);
54
+ return {
55
+ id: `${attempt.cell.key}#${attempt.n}`,
56
+ cell: attempt.cell.key,
57
+ n: attempt.n,
58
+ outcome,
59
+ error: error ? {
60
+ kind: error.kind,
61
+ message: error.message
62
+ } : null,
63
+ checks: (record?.checks ?? []).map((c) => ({
64
+ command: c.command,
65
+ exitCode: c.exitCode,
66
+ output: tail(`${c.stdout}\n${c.stderr}`.trim(), 600)
67
+ })),
68
+ judgements: (record?.judgements ?? []).map((j) => ({
69
+ question: j.question,
70
+ verdict: j.verdict,
71
+ score: j.score
72
+ })),
73
+ turns: (record?.turns ?? []).map((t) => ({
74
+ prompt: t.prompt,
75
+ text: t.text,
76
+ status: t.status,
77
+ steps: steps(t.transcript)
78
+ })),
79
+ files: (record?.diff?.files ?? []).map((f) => f.path),
80
+ patch: record?.diff?.patch ?? ""
81
+ };
82
+ }
83
+ /** The staged attempts of one eval on one harness, from `.reeval/staging/<run>/evals`. */
84
+ async function stagedAttempts(stagingDir, results) {
85
+ const views = [];
86
+ for (const result of results) {
87
+ const path = join(stagingDir, "evals", recordFileName(result.key));
88
+ let record = null;
89
+ try {
90
+ record = JSON.parse(await readFile(path, "utf8"));
91
+ } catch {}
92
+ const view = fromStaged(result, record);
93
+ if (view) views.push(view);
94
+ }
95
+ return views;
96
+ }
97
+ /** A recorded attempt, read from its run's artifact directory (`<history>/<run>/`, or `.reeval/runs/<run>/`). */
98
+ async function fromRecorded(runDir, attempt) {
99
+ const read = (path) => path ? readFile(join(runDir, path), "utf8").catch(() => "") : Promise.resolve("");
100
+ const lines = parseTranscript(await read(attempt.files.transcript?.path));
101
+ return {
102
+ id: attempt.id,
103
+ cell: attempt.cell,
104
+ n: attempt.n,
105
+ outcome: attempt.outcome,
106
+ error: attempt.error ? {
107
+ kind: attempt.error.kind,
108
+ message: attempt.error.message
109
+ } : null,
110
+ checks: await Promise.all(attempt.checks.map(async (c) => ({
111
+ command: c.command,
112
+ exitCode: c.exitCode,
113
+ output: tail((await read(c.log?.path)).trim(), 600)
114
+ }))),
115
+ judgements: attempt.judgements.map((j) => ({
116
+ question: j.question,
117
+ verdict: j.verdict,
118
+ score: j.score
119
+ })),
120
+ turns: attempt.turns.map((t, i) => ({
121
+ prompt: t.prompt,
122
+ text: t.text,
123
+ status: t.status,
124
+ steps: steps(lines.filter((l) => l.turn === i && l.type !== "prompt" && l.type !== "turn-end"))
125
+ })),
126
+ files: attempt.changedFiles.map((f) => f.path),
127
+ patch: await read(attempt.files.diff?.path)
128
+ };
129
+ }
130
+ /** Each failed attempt beside the nearest passing run of its cell, else of another cell. */
131
+ function failedVsPassed(attempts) {
132
+ const passed = attempts.filter((a) => a.outcome === "pass");
133
+ const near = (a) => (b, c) => Math.abs(b.n - a.n) - Math.abs(c.n - a.n);
134
+ return attempts.filter((a) => a.outcome === "fail").flatMap((a) => {
135
+ const sameCell = passed.filter((p) => p.cell === a.cell).sort(near(a))[0];
136
+ const other = passed.filter((p) => p.cell !== a.cell).sort(near(a))[0];
137
+ const match = sameCell ?? other;
138
+ return match ? [{
139
+ failed: a.id,
140
+ passed: match.id,
141
+ match: sameCell ? "cell" : "harness"
142
+ }] : [];
143
+ });
144
+ }
145
+ const stepCount = (a) => a.turns.reduce((n, t) => n + t.steps.length, 0);
146
+ /** `list_attempts`: every attempt's outcome in a line, and the failed-vs-passed pairs to open. */
147
+ function listOutcomes(attempts) {
148
+ return {
149
+ attempts: attempts.map((a) => ({
150
+ id: a.id,
151
+ outcome: a.outcome,
152
+ error: a.error ? `${a.error.kind}: ${clip(a.error.message, 300)}` : null,
153
+ failedChecks: a.checks.filter((c) => c.exitCode !== 0).map((c) => c.command),
154
+ judgements: a.judgements.map((j) => `${j.verdict} ${j.score.toFixed(2)}: ${clip(j.question, 120)}`),
155
+ turns: a.turns.length,
156
+ steps: stepCount(a),
157
+ files: a.files.length
158
+ })),
159
+ pairs: failedVsPassed(attempts)
160
+ };
161
+ }
162
+ /** `open_attempt`: one attempt's turns, steps (the first 40 and last 20), checks, verdicts and diff. */
163
+ function attemptSummary(a) {
164
+ return {
165
+ id: a.id,
166
+ outcome: a.outcome,
167
+ error: a.error ? {
168
+ kind: a.error.kind,
169
+ message: clip(a.error.message, 1e3)
170
+ } : null,
171
+ turns: a.turns.map((t, i) => ({
172
+ turn: i + 1,
173
+ prompt: clip(t.prompt, 400),
174
+ status: t.status,
175
+ steps: t.steps.length > 60 ? [
176
+ ...t.steps.slice(0, 40),
177
+ `… ${t.steps.length - 60} steps …`,
178
+ ...t.steps.slice(-20)
179
+ ] : t.steps,
180
+ text: clip(t.text, 800)
181
+ })),
182
+ checks: a.checks.map((c) => ({
183
+ command: c.command,
184
+ exitCode: c.exitCode,
185
+ ...c.exitCode !== 0 ? { output: c.output } : {}
186
+ })),
187
+ judgements: a.judgements,
188
+ files: a.files.slice(0, 50),
189
+ diff: head(a.patch, 3e3)
190
+ };
191
+ }
192
+ /**
193
+ * `compare_attempts`: where a failed attempt's steps first differ from a passing one's, a few
194
+ * steps either side, the checks, verdicts and files that differ, and the start of each diff.
195
+ */
196
+ function divergence(failed, passed, window = 6) {
197
+ const a = failed.turns.flatMap((t) => t.steps);
198
+ const b = passed.turns.flatMap((t) => t.steps);
199
+ let same = 0;
200
+ while (same < a.length && same < b.length && a[same] === b[same]) same++;
201
+ const diverged = same < a.length || same < b.length;
202
+ const from = Math.max(0, same - 2);
203
+ const commands = [...new Set([...failed.checks, ...passed.checks].map((c) => c.command))];
204
+ const exit = (v, command) => v.checks.find((c) => c.command === command)?.exitCode ?? null;
205
+ const verdict = (v, question) => v.judgements.find((j) => j.question === question)?.verdict ?? null;
206
+ const questions = [...new Set([...failed.judgements, ...passed.judgements].map((j) => j.question))];
207
+ const last = (v) => clip(v.turns.at(-1)?.text ?? "", 600);
208
+ return {
209
+ failed: failed.id,
210
+ passed: passed.id,
211
+ error: failed.error ? `${failed.error.kind}: ${clip(failed.error.message, 600)}` : null,
212
+ stepsInCommon: same,
213
+ /** The first step (from 1) where they differ; null when the steps are the same. */
214
+ divergedAt: diverged ? same + 1 : null,
215
+ steps: {
216
+ failed: a.length,
217
+ passed: b.length
218
+ },
219
+ failedSteps: a.slice(from, same + window),
220
+ passedSteps: b.slice(from, same + window),
221
+ checks: commands.filter((c) => exit(failed, c) !== exit(passed, c)).map((c) => ({
222
+ command: c,
223
+ failed: exit(failed, c),
224
+ passed: exit(passed, c),
225
+ failedOutput: failed.checks.find((x) => x.command === c)?.output ?? null
226
+ })),
227
+ judgements: questions.filter((q) => verdict(failed, q) !== verdict(passed, q)).map((q) => ({
228
+ question: clip(q, 200),
229
+ failed: verdict(failed, q),
230
+ passed: verdict(passed, q)
231
+ })),
232
+ files: {
233
+ onlyFailed: failed.files.filter((f) => !passed.files.includes(f)).slice(0, 30),
234
+ onlyPassed: passed.files.filter((f) => !failed.files.includes(f)).slice(0, 30)
235
+ },
236
+ finalText: {
237
+ failed: last(failed),
238
+ passed: last(passed)
239
+ },
240
+ diff: {
241
+ failed: head(failed.patch, 1500),
242
+ passed: head(passed.patch, 1500)
243
+ }
244
+ };
245
+ }
246
+ //#endregion
247
+ export { stagedAttempts as a, listOutcomes as i, divergence as n, fromRecorded as r, attemptSummary as t };
248
+
249
+ //# sourceMappingURL=tools-DN-cJcfi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-DN-cJcfi.js","names":[],"sources":["../src/analysis/agent/tools.ts"],"mappings":"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"}