reeval 0.0.1 → 0.3.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 (202) hide show
  1. package/THIRD_PARTY_NOTICES.md +4 -4
  2. package/assets/package.json +1 -1
  3. package/assets/pnpm-lock.yaml +84 -33
  4. package/dist/agent-BYy0Tc6P.js +334 -0
  5. package/dist/agent-BYy0Tc6P.js.map +1 -0
  6. package/dist/{agent-DVHkx8aT.js → agent-DcQAvomp.js} +4 -4
  7. package/dist/{agent-DVHkx8aT.js.map → agent-DcQAvomp.js.map} +1 -1
  8. package/dist/analysis-CxSCt1YY.js.map +1 -1
  9. package/dist/assemble-BFsyMhb-.js +2 -0
  10. package/dist/{assemble-B-nmz8oH.js → assemble-h8s0hzTQ.js} +23 -14
  11. package/dist/assemble-h8s0hzTQ.js.map +1 -0
  12. package/dist/{cli--CQ3Iy9q.js → cli-DemDdg8J.js} +165 -54
  13. package/dist/cli-DemDdg8J.js.map +1 -0
  14. package/dist/{cli-spec-DKAu09Gi.js → cli-spec-BxLPgNN-.js} +8 -2
  15. package/dist/cli-spec-BxLPgNN-.js.map +1 -0
  16. package/dist/cli.js +2 -2
  17. package/dist/{command-D-jnQWVG.js → command-CxwnRrTs.js} +11 -11
  18. package/dist/{command-D-jnQWVG.js.map → command-CxwnRrTs.js.map} +1 -1
  19. package/dist/command-DhgZPhsY.js +2 -0
  20. package/dist/{command-DQAvbG7d.js → command-PEbIzJj3.js} +12 -12
  21. package/dist/{command-DQAvbG7d.js.map → command-PEbIzJj3.js.map} +1 -1
  22. package/dist/{command-BSJzHMtP.js → command-pHfluVCF.js} +11 -9
  23. package/dist/command-pHfluVCF.js.map +1 -0
  24. package/dist/{command-CEm8PZ1N.js → command-y91-aNhu.js} +169 -280
  25. package/dist/command-y91-aNhu.js.map +1 -0
  26. package/dist/{commands-A4udfyKZ.js → commands-De-SxIgY.js} +1 -1
  27. package/dist/{commands-CF8mOfiu.js → commands-DhCuEa6z.js} +6 -6
  28. package/dist/{commands-CF8mOfiu.js.map → commands-DhCuEa6z.js.map} +1 -1
  29. package/dist/{config-Cuj0kVYj.js → config-CqSLZkwx.js} +39 -14
  30. package/dist/{config-Cuj0kVYj.js.map → config-CqSLZkwx.js.map} +1 -1
  31. package/dist/{db-DxDzMhtB.js → db-DA4LBwi_.js} +4 -4
  32. package/dist/{db-DxDzMhtB.js.map → db-DA4LBwi_.js.map} +1 -1
  33. package/dist/db-DDfq7Tx_.js +2 -0
  34. package/dist/{dist-BZXYHN2X.js → dist-BSoys6pg.js} +2 -2
  35. package/dist/{dist-BZXYHN2X.js.map → dist-BSoys6pg.js.map} +1 -1
  36. package/dist/{docker-DQDZWXF9.js → docker-DMRwn7yh.js} +2 -2
  37. package/dist/{docker-DQDZWXF9.js.map → docker-DMRwn7yh.js.map} +1 -1
  38. package/dist/{docker-oSbCExHL.js → docker-DwG9f76x.js} +4 -4
  39. package/dist/{docker-oSbCExHL.js.map → docker-DwG9f76x.js.map} +1 -1
  40. package/dist/{docker-DnWAVdEm.js → docker-jf52ARP7.js} +1 -1
  41. package/dist/{doctor-CxlH1pDM.js → doctor-DhvVbNKv.js} +23 -18
  42. package/dist/doctor-DhvVbNKv.js.map +1 -0
  43. package/dist/{egress-73SQfKdx.js → egress-D9vJCATi.js} +35 -19
  44. package/dist/egress-D9vJCATi.js.map +1 -0
  45. package/dist/{environment-Mz7wvrtD.js → environment-ByCF9s3n.js} +6 -16
  46. package/dist/{environment-Mz7wvrtD.js.map → environment-ByCF9s3n.js.map} +1 -1
  47. package/dist/files-B16cQ6XX.js +2 -0
  48. package/dist/files-BC5Yqir-.js +2 -0
  49. package/dist/{files-bF2fPuT9.js → files-CfsIRN7n.js} +40 -7
  50. package/dist/files-CfsIRN7n.js.map +1 -0
  51. package/dist/{files-D2-qn_Dl.js → files-DHBBIYx_.js} +6 -6
  52. package/dist/{files-D2-qn_Dl.js.map → files-DHBBIYx_.js.map} +1 -1
  53. package/dist/{git-D6hMeieS.js → git-oX92_Jh-.js} +2 -2
  54. package/dist/{git-D6hMeieS.js.map → git-oX92_Jh-.js.map} +1 -1
  55. package/dist/{harness-ls5aX1UO.js → harness-BbMShUC-.js} +4 -4
  56. package/dist/{harness-ls5aX1UO.js.map → harness-BbMShUC-.js.map} +1 -1
  57. package/dist/harness.d.ts +2 -2
  58. package/dist/harness.js +1 -1
  59. package/dist/{header-DzFDoMCI.js → header-sPQ9Lq2S.js} +2 -2
  60. package/dist/{header-DzFDoMCI.js.map → header-sPQ9Lq2S.js.map} +1 -1
  61. package/dist/{images-Cc1-coFc.js → images-C9Y4ijbG.js} +6 -6
  62. package/dist/{images-Cc1-coFc.js.map → images-C9Y4ijbG.js.map} +1 -1
  63. package/dist/index.d.ts +4 -4
  64. package/dist/index.js +23 -23
  65. package/dist/index.js.map +1 -1
  66. package/dist/init-DPJv7OmX.js +2 -0
  67. package/dist/{init-CFljS8BJ.js → init-x55uF8a4.js} +10 -10
  68. package/dist/{init-CFljS8BJ.js.map → init-x55uF8a4.js.map} +1 -1
  69. package/dist/{invocations-rXktgSAn.js → invocations-DSMfs3Dx.js} +3 -3
  70. package/dist/{invocations-rXktgSAn.js.map → invocations-DSMfs3Dx.js.map} +1 -1
  71. package/dist/{jiti-BOLXpKyG.js → jiti-DWsGEgxD.js} +4 -4
  72. package/dist/{jiti-BOLXpKyG.js.map → jiti-DWsGEgxD.js.map} +1 -1
  73. package/dist/judge.d.ts +7 -6
  74. package/dist/judge.js +8 -3
  75. package/dist/judge.js.map +1 -1
  76. package/dist/{live-Bs3LReMV.js → live-DZkCtmNP.js} +2 -2
  77. package/dist/{live-Bs3LReMV.js.map → live-DZkCtmNP.js.map} +1 -1
  78. package/dist/{matchers-DyLvm7EG.js → matchers-D51lM8dO.js} +4 -4
  79. package/dist/{matchers-DyLvm7EG.js.map → matchers-D51lM8dO.js.map} +1 -1
  80. package/dist/model-CNoc8t2Y.js +2 -0
  81. package/dist/model-DQQQ3q_n.js +2 -0
  82. package/dist/model-GFM8iOzM.js +228 -0
  83. package/dist/model-GFM8iOzM.js.map +1 -0
  84. package/dist/{model-CDL98xue.js → model-ORtLm2UB.js} +41 -3
  85. package/dist/{model-CDL98xue.js.map → model-ORtLm2UB.js.map} +1 -1
  86. package/dist/{node-kG64XxdE.js → node-OXPxBD2N.js} +3 -3
  87. package/dist/{node-kG64XxdE.js.map → node-OXPxBD2N.js.map} +1 -1
  88. package/dist/{opencode-providers-DZuD_oYt.js → opencode-providers-DJVocFOU.js} +31 -3
  89. package/dist/opencode-providers-DJVocFOU.js.map +1 -0
  90. package/dist/{options-CAQhu--C.js → options-CIutEeuy.js} +86 -46
  91. package/dist/options-CIutEeuy.js.map +1 -0
  92. package/dist/{plan-gwk6dJ8c.js → plan-DcHTdiJN.js} +21 -5
  93. package/dist/plan-DcHTdiJN.js.map +1 -0
  94. package/dist/{preflight-BtubXKQ8.js → preflight-BQyUr_hW.js} +1 -1
  95. package/dist/{preflight-BypZMNBG.js → preflight-vISQIiF1.js} +3 -3
  96. package/dist/{preflight-BypZMNBG.js.map → preflight-vISQIiF1.js.map} +1 -1
  97. package/dist/{prepare-D6Uzcubb.js → prepare-BTeAiW9Q.js} +5 -5
  98. package/dist/{prepare-D6Uzcubb.js.map → prepare-BTeAiW9Q.js.map} +1 -1
  99. package/dist/{prepare-Cwv0bHs_.js → prepare-Ca0Nxd9b.js} +2 -2
  100. package/dist/{provenance-Dfb8YY5Y.js → provenance-D4vo7RF6.js} +21 -3
  101. package/dist/provenance-D4vo7RF6.js.map +1 -0
  102. package/dist/{providers-2p3ylMHI.js → providers-Bjgky1u8.js} +3 -3
  103. package/dist/{providers-2p3ylMHI.js.map → providers-Bjgky1u8.js.map} +1 -1
  104. package/dist/{providers-BUOxitcT.js → providers-DfVMglqP.js} +1 -1
  105. package/dist/query-CWkZnV62.js +2 -0
  106. package/dist/{query-CFATHZmV.js → query-D2KaStTs.js} +2 -2
  107. package/dist/{query-CFATHZmV.js.map → query-D2KaStTs.js.map} +1 -1
  108. package/dist/questions-CzXdVVsh.js +325 -0
  109. package/dist/questions-CzXdVVsh.js.map +1 -0
  110. package/dist/{record-DQ8wzyco.js → record-CbuQH4l1.js} +7 -3
  111. package/dist/record-CbuQH4l1.js.map +1 -0
  112. package/dist/{results-CeXb8Wde.js → results-BI-zTqQy.js} +4 -4
  113. package/dist/{results-CeXb8Wde.js.map → results-BI-zTqQy.js.map} +1 -1
  114. package/dist/{root-CFDjpWuc.js → root-Zeokqt3-.js} +2 -2
  115. package/dist/{root-CFDjpWuc.js.map → root-Zeokqt3-.js.map} +1 -1
  116. package/dist/{sandbox-By2gkdkC.js → sandbox-Dd-4Bx6B.js} +3 -3
  117. package/dist/{sandbox-By2gkdkC.js.map → sandbox-Dd-4Bx6B.js.map} +1 -1
  118. package/dist/sandbox.d.ts +2 -2
  119. package/dist/sandbox.js +1 -1
  120. package/dist/server-BjbgFX28.js +2 -0
  121. package/dist/{server-Bi61uiY0.js → server-C7t8WYCR.js} +11 -9
  122. package/dist/{server-Bi61uiY0.js.map → server-C7t8WYCR.js.map} +1 -1
  123. package/dist/source-CLE8vMNa.js +2 -0
  124. package/dist/{source-Bsfa3LZH.js → source-fNUCWsCW.js} +2 -2
  125. package/dist/{source-Bsfa3LZH.js.map → source-fNUCWsCW.js.map} +1 -1
  126. package/dist/{src-DXx_29pq.js → src-B1OT_Zhf.js} +46 -46
  127. package/dist/{src-DXx_29pq.js.map → src-B1OT_Zhf.js.map} +1 -1
  128. package/dist/{src-BQyMiWri.js → src-BAiYD4eC.js} +48 -7
  129. package/dist/{src-BQyMiWri.js.map → src-BAiYD4eC.js.map} +1 -1
  130. package/dist/{src-D8KYzxBX.js → src-BmBFlEIe.js} +12 -7
  131. package/dist/{src-D8KYzxBX.js.map → src-BmBFlEIe.js.map} +1 -1
  132. package/dist/{src-N7E_mfcZ.js → src-C91RndLw.js} +1 -1
  133. package/dist/{src-C-LHyTSV.js → src-CEQFcAJH.js} +1 -1
  134. package/dist/src-CNp0srm9.js +3 -0
  135. package/dist/{src-DwwiVLqv.js → src-D3eW1e7Y.js} +19 -15
  136. package/dist/{src-DwwiVLqv.js.map → src-D3eW1e7Y.js.map} +1 -1
  137. package/dist/src-DJsBrqo6.js +4 -0
  138. package/dist/src-DTlmkpJe.js +3 -0
  139. package/dist/{src-Cmp-7YrD.js → src-DWk0e7ix.js} +5 -5
  140. package/dist/{src-Cmp-7YrD.js.map → src-DWk0e7ix.js.map} +1 -1
  141. package/dist/{src-AEwxd1UP.js → src-DfEAlC9s.js} +4 -4
  142. package/dist/{src-AEwxd1UP.js.map → src-DfEAlC9s.js.map} +1 -1
  143. package/dist/src-DgYURuJ6.js +3 -0
  144. package/dist/src-sSPmuaAc.js +3 -0
  145. package/dist/state-Bx-pH2ON.js +2 -0
  146. package/dist/{state-DZ7eqb1F.js → state-g6ij_40j.js} +14 -14
  147. package/dist/{state-DZ7eqb1F.js.map → state-g6ij_40j.js.map} +1 -1
  148. package/dist/studio-app/assets/index-B1Pf3LAT.css +2 -0
  149. package/dist/studio-app/assets/index-DciOL7BI.js +58 -0
  150. package/dist/studio-app/index.html +2 -2
  151. package/dist/summary-DjbxgCDi.js +192 -0
  152. package/dist/summary-DjbxgCDi.js.map +1 -0
  153. package/dist/{summary-D7Ttky0z.js → summary-gawvEpNu.js} +33 -5
  154. package/dist/summary-gawvEpNu.js.map +1 -0
  155. package/dist/tools-B7SoW5kU.js +249 -0
  156. package/dist/tools-B7SoW5kU.js.map +1 -0
  157. package/dist/{types-DLec-6Cx.d.ts → types-C5AEPr29.d.ts} +178 -29
  158. package/dist/view/index.d.ts +63 -1
  159. package/dist/view/index.js +5 -5
  160. package/dist/{views-BrHOv6wg.js → views-CHXQfSWQ.js} +4 -4
  161. package/dist/{views-BrHOv6wg.js.map → views-CHXQfSWQ.js.map} +1 -1
  162. package/dist/views-DDei2LHa.js +3 -0
  163. package/dist/{worker-entry-DnYkANPG.js → worker-entry-B6nuDpBX.js} +3 -3
  164. package/dist/{worker-entry-DnYkANPG.js.map → worker-entry-B6nuDpBX.js.map} +1 -1
  165. package/dist/{workspace-C2S0Z6gl.js → workspace-DUUfne8b.js} +4 -4
  166. package/dist/{workspace-C2S0Z6gl.js.map → workspace-DUUfne8b.js.map} +1 -1
  167. package/dist/{workspace-CyoXG6CY.js → workspace-DXV77ZqW.js} +1 -1
  168. package/docker/Dockerfile +2 -0
  169. package/docker/reeval-path.sh +21 -0
  170. package/package.json +1 -1
  171. package/dist/assemble-B-nmz8oH.js.map +0 -1
  172. package/dist/assemble-CmRVDZ2Q.js +0 -2
  173. package/dist/cli--CQ3Iy9q.js.map +0 -1
  174. package/dist/cli-spec-DKAu09Gi.js.map +0 -1
  175. package/dist/command-BSJzHMtP.js.map +0 -1
  176. package/dist/command-CEm8PZ1N.js.map +0 -1
  177. package/dist/db-Cjj2ZsfQ.js +0 -2
  178. package/dist/doctor-CxlH1pDM.js.map +0 -1
  179. package/dist/egress-73SQfKdx.js.map +0 -1
  180. package/dist/files--6CEUXm7.js +0 -2
  181. package/dist/files-Bd25OAQH.js +0 -2
  182. package/dist/files-bF2fPuT9.js.map +0 -1
  183. package/dist/init-z2ZPn9Tj.js +0 -2
  184. package/dist/model-v-0_Ik7S.js +0 -2
  185. package/dist/opencode-providers-DZuD_oYt.js.map +0 -1
  186. package/dist/options-CAQhu--C.js.map +0 -1
  187. package/dist/plan-gwk6dJ8c.js.map +0 -1
  188. package/dist/provenance-Dfb8YY5Y.js.map +0 -1
  189. package/dist/query-DR4m6CXf.js +0 -2
  190. package/dist/record-DQ8wzyco.js.map +0 -1
  191. package/dist/server-CsSBL8NC.js +0 -2
  192. package/dist/source-BXzrmof5.js +0 -2
  193. package/dist/src-55j1zNHH.js +0 -3
  194. package/dist/src-BDwSuyIo.js +0 -3
  195. package/dist/src-DEgff9Z7.js +0 -4
  196. package/dist/src-W9g-y5X5.js +0 -3
  197. package/dist/src-daS0wKH2.js +0 -3
  198. package/dist/state-Cyw3QTsN.js +0 -2
  199. package/dist/studio-app/assets/index-D6XyfFSH.js +0 -58
  200. package/dist/studio-app/assets/index-xwzWdcE_.css +0 -2
  201. package/dist/summary-D7Ttky0z.js.map +0 -1
  202. 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-D6XyfFSH.js"></script>
10
- <link rel="stylesheet" crossorigin href="./assets/index-xwzWdcE_.css">
9
+ <script type="module" crossorigin src="./assets/index-DciOL7BI.js"></script>
10
+ <link rel="stylesheet" crossorigin href="./assets/index-B1Pf3LAT.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
@@ -0,0 +1,192 @@
1
+ import { l as writeCached } from "./files-CfsIRN7n.js";
2
+ import { a as providerModel } from "./model-GFM8iOzM.js";
3
+ import { r as fromRecorded, t as attemptSummary } from "./tools-B7SoW5kU.js";
4
+ import { n as allRuns } from "./commands-DhCuEa6z.js";
5
+ import { a as failedAnalysis, i as defaultBase, o as prepareAnalysis, s as promptOf, t as analyseDigest } from "./command-y91-aNhu.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-DjbxgCDi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-DjbxgCDi.js","names":[],"sources":["../src/analysis/agent/summary.ts"],"mappings":"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"}
@@ -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-g6ij_40j.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-gawvEpNu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-gawvEpNu.js","names":[],"sources":["../src/history/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-h8s0hzTQ.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-B7SoW5kU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-B7SoW5kU.js","names":[],"sources":["../src/analysis/agent/tools.ts"],"mappings":"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"}