reeval 0.0.1

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 (213) hide show
  1. package/LICENSE +202 -0
  2. package/THIRD_PARTY_NOTICES.md +2160 -0
  3. package/assets/package.json +9 -0
  4. package/assets/pnpm-lock.yaml +1336 -0
  5. package/dist/agent-DVHkx8aT.js +532 -0
  6. package/dist/agent-DVHkx8aT.js.map +1 -0
  7. package/dist/analysis-CxSCt1YY.js +16 -0
  8. package/dist/analysis-CxSCt1YY.js.map +1 -0
  9. package/dist/assemble-B-nmz8oH.js +695 -0
  10. package/dist/assemble-B-nmz8oH.js.map +1 -0
  11. package/dist/assemble-CmRVDZ2Q.js +2 -0
  12. package/dist/attempt-BdRQ9jKX.js +176 -0
  13. package/dist/attempt-BdRQ9jKX.js.map +1 -0
  14. package/dist/bridge/index.mjs +1911 -0
  15. package/dist/bridge/package.json +13 -0
  16. package/dist/bridge/pnpm-lock.yaml +1041 -0
  17. package/dist/bridge/pnpm-workspace.yaml +2 -0
  18. package/dist/budget-DBUrH4jX.js +8 -0
  19. package/dist/budget-DBUrH4jX.js.map +1 -0
  20. package/dist/cli--CQ3Iy9q.js +1865 -0
  21. package/dist/cli--CQ3Iy9q.js.map +1 -0
  22. package/dist/cli-spec-DKAu09Gi.js +478 -0
  23. package/dist/cli-spec-DKAu09Gi.js.map +1 -0
  24. package/dist/cli.d.ts +1 -0
  25. package/dist/cli.js +8 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/colors-QV9dFVhN.js +34 -0
  28. package/dist/colors-QV9dFVhN.js.map +1 -0
  29. package/dist/command-BSJzHMtP.js +280 -0
  30. package/dist/command-BSJzHMtP.js.map +1 -0
  31. package/dist/command-CEm8PZ1N.js +1043 -0
  32. package/dist/command-CEm8PZ1N.js.map +1 -0
  33. package/dist/command-D-jnQWVG.js +673 -0
  34. package/dist/command-D-jnQWVG.js.map +1 -0
  35. package/dist/command-DQAvbG7d.js +432 -0
  36. package/dist/command-DQAvbG7d.js.map +1 -0
  37. package/dist/commands-A4udfyKZ.js +2 -0
  38. package/dist/commands-CF8mOfiu.js +207 -0
  39. package/dist/commands-CF8mOfiu.js.map +1 -0
  40. package/dist/config-Cuj0kVYj.js +415 -0
  41. package/dist/config-Cuj0kVYj.js.map +1 -0
  42. package/dist/context-loi9OCZv.js +106 -0
  43. package/dist/context-loi9OCZv.js.map +1 -0
  44. package/dist/core-tLN-z1Be.js +96 -0
  45. package/dist/core-tLN-z1Be.js.map +1 -0
  46. package/dist/db-Cjj2ZsfQ.js +2 -0
  47. package/dist/db-DxDzMhtB.js +827 -0
  48. package/dist/db-DxDzMhtB.js.map +1 -0
  49. package/dist/debug-D24NOQH1.js +89 -0
  50. package/dist/debug-D24NOQH1.js.map +1 -0
  51. package/dist/debug-SEmW4w8f.js +2 -0
  52. package/dist/dist-BZXYHN2X.js +1673 -0
  53. package/dist/dist-BZXYHN2X.js.map +1 -0
  54. package/dist/docker-DQDZWXF9.js +20 -0
  55. package/dist/docker-DQDZWXF9.js.map +1 -0
  56. package/dist/docker-DnWAVdEm.js +2 -0
  57. package/dist/docker-oSbCExHL.js +153 -0
  58. package/dist/docker-oSbCExHL.js.map +1 -0
  59. package/dist/doctor-CxlH1pDM.js +525 -0
  60. package/dist/doctor-CxlH1pDM.js.map +1 -0
  61. package/dist/egress-73SQfKdx.js +619 -0
  62. package/dist/egress-73SQfKdx.js.map +1 -0
  63. package/dist/env-BQqj93gu.js +21 -0
  64. package/dist/env-BQqj93gu.js.map +1 -0
  65. package/dist/environment-Mz7wvrtD.js +552 -0
  66. package/dist/environment-Mz7wvrtD.js.map +1 -0
  67. package/dist/errors-C9w_ud7g.js +160 -0
  68. package/dist/errors-C9w_ud7g.js.map +1 -0
  69. package/dist/errors-CSxfJ4qu.js +11 -0
  70. package/dist/errors-CSxfJ4qu.js.map +1 -0
  71. package/dist/files--6CEUXm7.js +2 -0
  72. package/dist/files-BLlrhU4-.js +62 -0
  73. package/dist/files-BLlrhU4-.js.map +1 -0
  74. package/dist/files-Bd25OAQH.js +2 -0
  75. package/dist/files-BvHCFWgD.js +2 -0
  76. package/dist/files-D2-qn_Dl.js +275 -0
  77. package/dist/files-D2-qn_Dl.js.map +1 -0
  78. package/dist/files-bF2fPuT9.js +99 -0
  79. package/dist/files-bF2fPuT9.js.map +1 -0
  80. package/dist/git-D6hMeieS.js +44 -0
  81. package/dist/git-D6hMeieS.js.map +1 -0
  82. package/dist/harness-ls5aX1UO.js +131 -0
  83. package/dist/harness-ls5aX1UO.js.map +1 -0
  84. package/dist/harness.d.ts +74 -0
  85. package/dist/harness.js +2 -0
  86. package/dist/header-DzFDoMCI.js +78 -0
  87. package/dist/header-DzFDoMCI.js.map +1 -0
  88. package/dist/ids-Bp6ut7ZD.js +49 -0
  89. package/dist/ids-Bp6ut7ZD.js.map +1 -0
  90. package/dist/images-Cc1-coFc.js +286 -0
  91. package/dist/images-Cc1-coFc.js.map +1 -0
  92. package/dist/index.d.ts +97 -0
  93. package/dist/index.js +1959 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/init-CFljS8BJ.js +344 -0
  96. package/dist/init-CFljS8BJ.js.map +1 -0
  97. package/dist/init-z2ZPn9Tj.js +2 -0
  98. package/dist/invocations-rXktgSAn.js +157 -0
  99. package/dist/invocations-rXktgSAn.js.map +1 -0
  100. package/dist/jiti-BOLXpKyG.js +46 -0
  101. package/dist/jiti-BOLXpKyG.js.map +1 -0
  102. package/dist/judge-D8Uf4dA9.js +146 -0
  103. package/dist/judge-D8Uf4dA9.js.map +1 -0
  104. package/dist/judge.d.ts +21 -0
  105. package/dist/judge.js +19 -0
  106. package/dist/judge.js.map +1 -0
  107. package/dist/live-Bs3LReMV.js +98 -0
  108. package/dist/live-Bs3LReMV.js.map +1 -0
  109. package/dist/matchers-DyLvm7EG.js +374 -0
  110. package/dist/matchers-DyLvm7EG.js.map +1 -0
  111. package/dist/model-BdO79gWz.js +44 -0
  112. package/dist/model-BdO79gWz.js.map +1 -0
  113. package/dist/model-CDL98xue.js +725 -0
  114. package/dist/model-CDL98xue.js.map +1 -0
  115. package/dist/model-v-0_Ik7S.js +2 -0
  116. package/dist/node-kG64XxdE.js +506 -0
  117. package/dist/node-kG64XxdE.js.map +1 -0
  118. package/dist/opencode-providers-DZuD_oYt.js +3149 -0
  119. package/dist/opencode-providers-DZuD_oYt.js.map +1 -0
  120. package/dist/options-CAQhu--C.js +452 -0
  121. package/dist/options-CAQhu--C.js.map +1 -0
  122. package/dist/patch-BkKje4cp.js +69 -0
  123. package/dist/patch-BkKje4cp.js.map +1 -0
  124. package/dist/paths-CBvm6pap.js +72 -0
  125. package/dist/paths-CBvm6pap.js.map +1 -0
  126. package/dist/plan-gwk6dJ8c.js +237 -0
  127. package/dist/plan-gwk6dJ8c.js.map +1 -0
  128. package/dist/preflight-BtubXKQ8.js +2 -0
  129. package/dist/preflight-BypZMNBG.js +185 -0
  130. package/dist/preflight-BypZMNBG.js.map +1 -0
  131. package/dist/prepare-Cwv0bHs_.js +3 -0
  132. package/dist/prepare-D6Uzcubb.js +213 -0
  133. package/dist/prepare-D6Uzcubb.js.map +1 -0
  134. package/dist/provenance-Dfb8YY5Y.js +129 -0
  135. package/dist/provenance-Dfb8YY5Y.js.map +1 -0
  136. package/dist/provider-BDbNOQhQ.js +2 -0
  137. package/dist/provider-CmAYTQQs.js +14 -0
  138. package/dist/provider-CmAYTQQs.js.map +1 -0
  139. package/dist/providers-2p3ylMHI.js +107 -0
  140. package/dist/providers-2p3ylMHI.js.map +1 -0
  141. package/dist/providers-BUOxitcT.js +2 -0
  142. package/dist/query-CFATHZmV.js +91 -0
  143. package/dist/query-CFATHZmV.js.map +1 -0
  144. package/dist/query-DR4m6CXf.js +2 -0
  145. package/dist/record-DQ8wzyco.js +99 -0
  146. package/dist/record-DQ8wzyco.js.map +1 -0
  147. package/dist/redact-C4fL_bZP.js +167 -0
  148. package/dist/redact-C4fL_bZP.js.map +1 -0
  149. package/dist/results-CeXb8Wde.js +37 -0
  150. package/dist/results-CeXb8Wde.js.map +1 -0
  151. package/dist/root-CFDjpWuc.js +110 -0
  152. package/dist/root-CFDjpWuc.js.map +1 -0
  153. package/dist/sandbox-By2gkdkC.js +133 -0
  154. package/dist/sandbox-By2gkdkC.js.map +1 -0
  155. package/dist/sandbox.d.ts +41 -0
  156. package/dist/sandbox.js +2 -0
  157. package/dist/server-Bi61uiY0.js +350 -0
  158. package/dist/server-Bi61uiY0.js.map +1 -0
  159. package/dist/server-CsSBL8NC.js +2 -0
  160. package/dist/source-BXzrmof5.js +2 -0
  161. package/dist/source-Bsfa3LZH.js +40 -0
  162. package/dist/source-Bsfa3LZH.js.map +1 -0
  163. package/dist/src-55j1zNHH.js +3 -0
  164. package/dist/src-AEwxd1UP.js +602 -0
  165. package/dist/src-AEwxd1UP.js.map +1 -0
  166. package/dist/src-BDwSuyIo.js +3 -0
  167. package/dist/src-BQyMiWri.js +490 -0
  168. package/dist/src-BQyMiWri.js.map +1 -0
  169. package/dist/src-C-LHyTSV.js +3 -0
  170. package/dist/src-Cmp-7YrD.js +1136 -0
  171. package/dist/src-Cmp-7YrD.js.map +1 -0
  172. package/dist/src-D0RdqpNb.js +252 -0
  173. package/dist/src-D0RdqpNb.js.map +1 -0
  174. package/dist/src-D8KYzxBX.js +793 -0
  175. package/dist/src-D8KYzxBX.js.map +1 -0
  176. package/dist/src-DEgff9Z7.js +4 -0
  177. package/dist/src-DXx_29pq.js +567 -0
  178. package/dist/src-DXx_29pq.js.map +1 -0
  179. package/dist/src-DwwiVLqv.js +2937 -0
  180. package/dist/src-DwwiVLqv.js.map +1 -0
  181. package/dist/src-N7E_mfcZ.js +2 -0
  182. package/dist/src-W9g-y5X5.js +3 -0
  183. package/dist/src-daS0wKH2.js +3 -0
  184. package/dist/state-Cyw3QTsN.js +2 -0
  185. package/dist/state-DZ7eqb1F.js +167 -0
  186. package/dist/state-DZ7eqb1F.js.map +1 -0
  187. package/dist/stats-BNAHlNMD.js +114 -0
  188. package/dist/stats-BNAHlNMD.js.map +1 -0
  189. package/dist/studio-app/assets/index-D6XyfFSH.js +58 -0
  190. package/dist/studio-app/assets/index-xwzWdcE_.css +2 -0
  191. package/dist/studio-app/favicon.svg +1 -0
  192. package/dist/studio-app/index.html +15 -0
  193. package/dist/summary-D7Ttky0z.js +166 -0
  194. package/dist/summary-D7Ttky0z.js.map +1 -0
  195. package/dist/text-gEcKjAyp.js +29 -0
  196. package/dist/text-gEcKjAyp.js.map +1 -0
  197. package/dist/types-C5vI3g1C.js +9 -0
  198. package/dist/types-C5vI3g1C.js.map +1 -0
  199. package/dist/types-DLec-6Cx.d.ts +1535 -0
  200. package/dist/usage-DsYUqIUM.js +24 -0
  201. package/dist/usage-DsYUqIUM.js.map +1 -0
  202. package/dist/view/index.d.ts +645 -0
  203. package/dist/view/index.js +8 -0
  204. package/dist/views-BrHOv6wg.js +220 -0
  205. package/dist/views-BrHOv6wg.js.map +1 -0
  206. package/dist/views-CwCWLWqo.js +3 -0
  207. package/dist/worker-entry-DnYkANPG.js +506 -0
  208. package/dist/worker-entry-DnYkANPG.js.map +1 -0
  209. package/dist/workspace-C2S0Z6gl.js +327 -0
  210. package/dist/workspace-C2S0Z6gl.js.map +1 -0
  211. package/dist/workspace-CyoXG6CY.js +2 -0
  212. package/docker/Dockerfile +19 -0
  213. package/package.json +79 -0
@@ -0,0 +1,532 @@
1
+ import { t as InfraError } from "./types-C5vI3g1C.js";
2
+ import { d as agentFor, f as authHint, u as agentAuth } from "./egress-73SQfKdx.js";
3
+ import { B as WORKSPACE_DIR, R as SANDBOX_ROOT } from "./src-DwwiVLqv.js";
4
+ import { i as debugTrace, r as debugLog } from "./attempt-BdRQ9jKX.js";
5
+ import { t as addUsage } from "./usage-DsYUqIUM.js";
6
+ import { n as isDockerSandbox } from "./docker-oSbCExHL.js";
7
+ import { HarnessAgent } from "@ai-sdk/harness/agent";
8
+ //#region src/harness/transcript.ts
9
+ const str = (value) => typeof value === "string" ? value : "";
10
+ const record = (value) => typeof value === "object" && value !== null ? value : {};
11
+ /** The harness's synthetic "fileChange" twin of every edit, which always says "modify". */
12
+ const isFileChangeEcho = (part) => part.toolName === "fileChange" || str(part.toolCallId).startsWith("harness-file-change-");
13
+ function lines(text) {
14
+ if (!text) return [];
15
+ const all = text.split("\n");
16
+ if (all.at(-1) === "") all.pop();
17
+ return all;
18
+ }
19
+ /** Lines only in `before` (removed) and only in `after` (added), as multisets. */
20
+ function lineDelta(before, after) {
21
+ const counts = /* @__PURE__ */ new Map();
22
+ for (const line of lines(before)) counts.set(line, (counts.get(line) ?? 0) + 1);
23
+ let added = 0;
24
+ for (const line of lines(after)) {
25
+ const n = counts.get(line) ?? 0;
26
+ if (n > 0) counts.set(line, n - 1);
27
+ else added++;
28
+ }
29
+ const removed = [...counts.values()].reduce((a, b) => a + b, 0);
30
+ return {
31
+ added,
32
+ removed
33
+ };
34
+ }
35
+ const WORKSPACE = `${SANDBOX_ROOT}/${WORKSPACE_DIR}/`;
36
+ /** A path under the workspace, relative to it, as Cursor reports them. */
37
+ const inWorkspace = (path) => path.startsWith(WORKSPACE) ? path.slice(WORKSPACE.length) : path;
38
+ /** Cursor's and OpenCode's edit tools take `path`, Claude Code's `file_path`. */
39
+ const editPath = (input) => str(input.path) || str(input.file_path);
40
+ /**
41
+ * Cursor reports `referenceCount`; Claude Code lists `results`, where each search is
42
+ * `{ content: [{ title, url }] }` and plain strings are commentary.
43
+ */
44
+ function searchReferences(output) {
45
+ const { referenceCount, references, results } = record(output);
46
+ if (typeof referenceCount === "number") return referenceCount;
47
+ if (Array.isArray(references)) return references.length;
48
+ if (!Array.isArray(results)) return null;
49
+ return results.reduce((n, r) => {
50
+ const links = record(r).content;
51
+ return n + (Array.isArray(links) ? links.length : 0);
52
+ }, 0);
53
+ }
54
+ /**
55
+ * Claude Code's bridge sends errors as `{ message }` objects; Cursor's as strings or Errors; ACP
56
+ * harnesses (OpenCode) the tool's `rawOutput`, `{ metadata, error }`. Any other object is kept as JSON.
57
+ */
58
+ const errorText = (error) => str(error) || str(record(error).message) || str(record(error).error) || jsonText(error);
59
+ function jsonText(value) {
60
+ if (typeof value !== "object" || value === null) return String(value);
61
+ try {
62
+ return JSON.stringify(value);
63
+ } catch {
64
+ return String(value);
65
+ }
66
+ }
67
+ /** Lines added and removed across unified-diff hunks, each `{ lines: ['+x', '-y', ' z'] }`. */
68
+ function hunkDelta(hunks) {
69
+ let added = 0;
70
+ let removed = 0;
71
+ for (const hunk of hunks) {
72
+ const lines = record(hunk).lines;
73
+ for (const line of Array.isArray(lines) ? lines : []) if (str(line).startsWith("+")) added++;
74
+ else if (str(line).startsWith("-")) removed++;
75
+ }
76
+ return {
77
+ added,
78
+ removed
79
+ };
80
+ }
81
+ /** Claude Code's Write (`type`, `content`) or Edit (`oldString`, `newString`) result. */
82
+ function claudeEdit(toolCallId, output) {
83
+ const { originalFile, structuredPatch, content, oldString, newString } = output;
84
+ const created = output.type === "create" || output.type === void 0 && originalFile === null;
85
+ const counts = Array.isArray(structuredPatch) && structuredPatch.length > 0 ? hunkDelta(structuredPatch) : created ? {
86
+ added: lines(str(content ?? newString)).length,
87
+ removed: 0
88
+ } : typeof originalFile === "string" && typeof content === "string" ? lineDelta(originalFile, content) : typeof oldString === "string" && typeof newString === "string" ? lineDelta(oldString, newString) : {
89
+ added: null,
90
+ removed: null
91
+ };
92
+ return {
93
+ type: "file-edit",
94
+ toolCallId,
95
+ path: str(output.filePath),
96
+ kind: created ? "create" : "modify",
97
+ ...counts
98
+ };
99
+ }
100
+ function fileEdits(toolCallId, output, deleted, input) {
101
+ if (deleted) return [{
102
+ type: "file-edit",
103
+ toolCallId,
104
+ path: editPath(input),
105
+ kind: "delete",
106
+ added: 0,
107
+ removed: null
108
+ }];
109
+ const result = record(output);
110
+ if (typeof result.filePath === "string") return [claudeEdit(toolCallId, result)];
111
+ const patch = str(record(result.details).patch);
112
+ if (patch) {
113
+ const body = lines(patch).filter((l) => !l.startsWith("+++") && !l.startsWith("---"));
114
+ return [{
115
+ type: "file-edit",
116
+ toolCallId,
117
+ path: editPath(input),
118
+ kind: "modify",
119
+ added: body.filter((l) => l.startsWith("+")).length,
120
+ removed: body.filter((l) => l.startsWith("-")).length
121
+ }];
122
+ }
123
+ const files = record(result.metadata).files;
124
+ if (Array.isArray(files) && files.length > 0) return files.map((f) => {
125
+ const file = record(f);
126
+ return {
127
+ type: "file-edit",
128
+ toolCallId,
129
+ path: inWorkspace(str(file.file) || editPath(input)),
130
+ kind: file.status === "added" ? "create" : file.status === "deleted" ? "delete" : "modify",
131
+ added: typeof file.additions === "number" ? file.additions : null,
132
+ removed: typeof file.deletions === "number" ? file.deletions : null
133
+ };
134
+ });
135
+ const said = str(result.output);
136
+ if (/^(Created|Wrote) file successfully/.test(said)) {
137
+ const created = said.startsWith("Created");
138
+ return [{
139
+ type: "file-edit",
140
+ toolCallId,
141
+ path: inWorkspace(editPath(input)),
142
+ kind: created ? "create" : "modify",
143
+ added: created ? lines(str(input.content)).length : null,
144
+ removed: created ? 0 : null
145
+ }];
146
+ }
147
+ if (result.kind === "add" || result.kind === "update") return [{
148
+ type: "file-edit",
149
+ toolCallId,
150
+ path: editPath(input),
151
+ kind: result.kind === "add" ? "create" : "modify",
152
+ added: null,
153
+ removed: null
154
+ }];
155
+ if (typeof result.linesAdded === "number") return [{
156
+ type: "file-edit",
157
+ toolCallId,
158
+ path: editPath(input),
159
+ kind: str(result.diffString).startsWith("--- /dev/null") ? "create" : "modify",
160
+ added: result.linesAdded,
161
+ removed: typeof result.linesRemoved === "number" ? result.linesRemoved : null
162
+ }];
163
+ return [{
164
+ type: "file-edit",
165
+ toolCallId,
166
+ path: editPath(input),
167
+ kind: "modify",
168
+ added: null,
169
+ removed: null
170
+ }];
171
+ }
172
+ /**
173
+ * The tool's name. Cursor reports an MCP call as `mcp`, with the server and tool in its input;
174
+ * those are named `mcp__<server>__<tool>`, as Claude Code names its own.
175
+ */
176
+ function toolName(part) {
177
+ const input = record(part.input);
178
+ if (typeof input.providerIdentifier === "string" && typeof input.toolName === "string") return `mcp__${input.providerIdentifier}__${input.toolName}`;
179
+ return str(part.toolName);
180
+ }
181
+ /**
182
+ * Turns an AI SDK harness stream into reeval transcript events: text and reasoning blocks joined,
183
+ * each tool call merged with its result, edits normalised to `file-edit`, web tools given their
184
+ * query or URL, and the harness's duplicate `fileChange` events dropped. Cursor's tool durations
185
+ * come from its runner's own `tool_call` events, because tool results are only flushed at the
186
+ * end of a step.
187
+ */
188
+ function normaliseStream(parts, startedAt) {
189
+ const timing = /* @__PURE__ */ new Map();
190
+ for (const { ms, part } of parts) {
191
+ if (part.type !== "raw") continue;
192
+ const raw = record(part.rawValue);
193
+ const event = raw.type === "event" ? record(raw.event) : {};
194
+ const id = event.type === "tool_call" ? str(event.call_id) : "";
195
+ if (!id) continue;
196
+ const t = timing.get(id) ?? {};
197
+ const started = typeof event.started_at_ms === "number" ? event.started_at_ms - startedAt : void 0;
198
+ const ended = typeof event.completed_at_ms === "number" ? event.completed_at_ms - startedAt : void 0;
199
+ if (started !== void 0) t.at = t.start = started;
200
+ else if (event.status === "running" && t.start === void 0) t.start = ms;
201
+ if (ended !== void 0) t.end = ended;
202
+ else if (event.status === "completed" || event.status === "error") t.end = ms;
203
+ timing.set(id, t);
204
+ }
205
+ const out = [];
206
+ const stamp = (at) => ({
207
+ ts: new Date(startedAt + at).toISOString(),
208
+ atMs: at
209
+ });
210
+ const blocks = /* @__PURE__ */ new Map();
211
+ const pending = /* @__PURE__ */ new Map();
212
+ const toolDone = (id, reported, end, failed) => {
213
+ let call = reported;
214
+ const t = timing.get(id);
215
+ const start = t?.start ?? call.ms;
216
+ const durationMs = t?.end !== void 0 ? t.end - start : end.ms - call.ms;
217
+ call = t?.at === void 0 ? call : {
218
+ ...call,
219
+ ms: t.at
220
+ };
221
+ const input = record(call.part.input);
222
+ const name = toolName(call.part);
223
+ const raw = failed ? errorText(end.part.error) : end.part.output;
224
+ const output = name === "bash" && typeof raw === "string" ? raw.replace(/\r\n/g, "\n") : raw;
225
+ const base = {
226
+ ...stamp(call.ms),
227
+ durationMs
228
+ };
229
+ if ((name === "edit" || name === "write" || name === "delete") && !failed) {
230
+ for (const edit of fileEdits(id, output, name === "delete", input)) out.push({
231
+ at: call.ms,
232
+ event: {
233
+ ...base,
234
+ ...edit
235
+ }
236
+ });
237
+ return;
238
+ }
239
+ if (name === "webSearch" && !failed) {
240
+ out.push({
241
+ at: call.ms,
242
+ event: {
243
+ ...base,
244
+ type: "web-search",
245
+ toolCallId: id,
246
+ query: str(input.searchTerm) || str(input.query),
247
+ references: searchReferences(output)
248
+ }
249
+ });
250
+ return;
251
+ }
252
+ if (name === "webFetch" || name === "WebFetch") {
253
+ const result = record(output);
254
+ const status = typeof result.code === "number" ? result.code : void 0;
255
+ out.push({
256
+ at: call.ms,
257
+ event: {
258
+ ...base,
259
+ type: "web-fetch",
260
+ toolCallId: id,
261
+ url: str(input.url),
262
+ ok: !failed && result.success !== false && (status === void 0 || status >= 200 && status < 400)
263
+ }
264
+ });
265
+ return;
266
+ }
267
+ out.push({
268
+ at: call.ms,
269
+ event: {
270
+ ...base,
271
+ type: "tool",
272
+ toolCallId: id,
273
+ tool: name,
274
+ input: call.part.input,
275
+ output,
276
+ ok: !failed
277
+ }
278
+ });
279
+ };
280
+ for (const stamped of parts) {
281
+ const { ms, part } = stamped;
282
+ switch (part.type) {
283
+ case "text-start":
284
+ case "reasoning-start":
285
+ blocks.set(str(part.id), {
286
+ type: part.type === "text-start" ? "text" : "reasoning",
287
+ ms,
288
+ text: ""
289
+ });
290
+ break;
291
+ case "text-delta":
292
+ case "reasoning-delta": {
293
+ const block = blocks.get(str(part.id));
294
+ if (block) block.text += str(part.text ?? part.delta);
295
+ break;
296
+ }
297
+ case "text-end":
298
+ case "reasoning-end": {
299
+ const block = blocks.get(str(part.id));
300
+ blocks.delete(str(part.id));
301
+ if (block?.text.trim()) out.push({
302
+ at: block.ms,
303
+ event: {
304
+ ...stamp(block.ms),
305
+ type: block.type,
306
+ text: block.text,
307
+ durationMs: ms - block.ms
308
+ }
309
+ });
310
+ break;
311
+ }
312
+ case "tool-call":
313
+ if (!isFileChangeEcho(part)) pending.set(str(part.toolCallId), {
314
+ ms,
315
+ part
316
+ });
317
+ break;
318
+ case "tool-result":
319
+ case "tool-error": {
320
+ if (isFileChangeEcho(part)) break;
321
+ const id = str(part.toolCallId);
322
+ const call = pending.get(id);
323
+ if (!call) break;
324
+ pending.delete(id);
325
+ toolDone(id, call, stamped, part.type === "tool-error");
326
+ break;
327
+ }
328
+ case "error":
329
+ out.push({
330
+ at: ms,
331
+ event: {
332
+ ...stamp(ms),
333
+ type: "error",
334
+ message: errorText(part.error)
335
+ }
336
+ });
337
+ break;
338
+ case "finish-step": if (part.finishReason === "error") {
339
+ const message = `A model call failed (${str(part.rawFinishReason) || "error"}), and the agent retried it`;
340
+ out.push({
341
+ at: ms,
342
+ event: {
343
+ ...stamp(ms),
344
+ type: "retry",
345
+ message
346
+ }
347
+ });
348
+ }
349
+ }
350
+ }
351
+ for (const [id, call] of pending) out.push({
352
+ at: call.ms,
353
+ event: {
354
+ ...stamp(call.ms),
355
+ type: "tool",
356
+ toolCallId: id,
357
+ tool: toolName(call.part),
358
+ input: call.part.input,
359
+ output: null,
360
+ ok: false,
361
+ durationMs: null
362
+ }
363
+ });
364
+ for (const [, block] of blocks) if (block.text.trim()) out.push({
365
+ at: block.ms,
366
+ event: {
367
+ ...stamp(block.ms),
368
+ type: block.type,
369
+ text: block.text,
370
+ durationMs: null
371
+ }
372
+ });
373
+ return out.sort((a, b) => a.at - b.at).map((e) => e.event);
374
+ }
375
+ //#endregion
376
+ //#region src/harness/agent.ts
377
+ /** A stream part into the attempt's trace, and each tool call as a `-v` line as it happens. */
378
+ function traceStreamPart(part, ms, tools) {
379
+ const p = part;
380
+ debugTrace("harness", "stream", {
381
+ ms,
382
+ part
383
+ }, p.type.endsWith("-delta") ? false : `stream ${p.type}`);
384
+ if (p.type === "tool-call" && p.toolCallId) {
385
+ const name = p.toolName ?? "tool";
386
+ tools.set(p.toolCallId, {
387
+ name,
388
+ at: ms
389
+ });
390
+ debugLog("harness", `tool ${name} called (${p.toolCallId})`);
391
+ } else if ((p.type === "tool-result" || p.type === "tool-error") && p.toolCallId) {
392
+ const call = tools.get(p.toolCallId);
393
+ const took = call ? ` in ${ms - call.at}ms` : "";
394
+ const how = p.type === "tool-error" ? `failed: ${errorText(p.error)}` : "returned";
395
+ debugLog("harness", `tool ${call?.name ?? p.toolName ?? "tool"} ${how}${took} (${p.toolCallId})`);
396
+ } else if (p.type === "error") debugLog("harness", `stream error: ${errorText(p.error)}`);
397
+ }
398
+ /** The AI SDK's usage as reeval's, or null when the harness reported none (every field undefined). */
399
+ function tokenUsage(usage) {
400
+ if (usage.inputTokens === void 0 && usage.outputTokens === void 0) return null;
401
+ const cacheRead = usage.inputTokenDetails?.cacheReadTokens ?? 0;
402
+ const cacheWrite = usage.inputTokenDetails?.cacheWriteTokens ?? 0;
403
+ return {
404
+ input: usage.inputTokenDetails?.noCacheTokens ?? Math.max((usage.inputTokens ?? 0) - cacheRead - cacheWrite, 0),
405
+ output: usage.outputTokens ?? 0,
406
+ cacheRead,
407
+ cacheWrite,
408
+ reasoning: usage.outputTokenDetails?.reasoningTokens ?? null
409
+ };
410
+ }
411
+ /**
412
+ * The adapter, with every part its sessions emit also passed to `onPart`. `HarnessAgent` keeps
413
+ * the `stream-start` part's `modelId` (the model the runtime resolved) to itself.
414
+ */
415
+ function observed(adapter, onPart) {
416
+ const session = (s) => new Proxy(s, { get(target, key, receiver) {
417
+ const value = Reflect.get(target, key, receiver);
418
+ if (key !== "doPromptTurn" && key !== "doContinueTurn") return value;
419
+ return (turn) => value.call(target, {
420
+ ...turn,
421
+ emit: (part) => {
422
+ onPart(part);
423
+ turn.emit(part);
424
+ }
425
+ });
426
+ } });
427
+ return new Proxy(adapter, { get(target, key, receiver) {
428
+ const value = Reflect.get(target, key, receiver);
429
+ if (key !== "doStart") return value;
430
+ return async (...args) => session(await value.apply(target, args));
431
+ } });
432
+ }
433
+ /** A real agent through its AI SDK harness adapter, in the Docker sandbox's container. */
434
+ function createAgentHarness(descriptor) {
435
+ const catalog = agentFor(descriptor);
436
+ return { async start(sandbox, signal, { skills, mcp }) {
437
+ const auth = agentAuth(catalog);
438
+ let servedModel = null;
439
+ let finishMetadata;
440
+ const adapter = await catalog.adapter({
441
+ auth,
442
+ descriptor,
443
+ ...Object.keys(mcp).length ? { mcpServers: catalog.mcpServers(mcp) } : {}
444
+ });
445
+ const agent = new HarnessAgent({
446
+ harness: observed(adapter, (part) => {
447
+ if (part.type === "stream-start" && part.modelId) servedModel = part.modelId;
448
+ if (part.type === "finish") finishMetadata = part.harnessMetadata;
449
+ }),
450
+ model: descriptor.model,
451
+ permissionMode: "allow-all",
452
+ sandboxConfig: { workDir: WORKSPACE_DIR },
453
+ ...skills.length ? { skills } : {}
454
+ });
455
+ if (!isDockerSandbox(sandbox)) throw new InfraError(`The ${catalog.name} harness needs the Docker sandbox`);
456
+ let session;
457
+ try {
458
+ session = await agent.createSession({
459
+ sandboxSession: sandbox.network,
460
+ abortSignal: signal
461
+ });
462
+ } catch (error) {
463
+ if (signal.aborted) throw error;
464
+ const message = error.message;
465
+ const hint = authHint(catalog, message);
466
+ throw new InfraError(`${hint ? `${hint}. ` : ""}${catalog.name} harness failed to start: ${message}`);
467
+ }
468
+ return {
469
+ async send(prompt, turnSignal) {
470
+ const startedAt = Date.now();
471
+ const parts = [];
472
+ const servedBefore = sandbox.servedRequests?.().length ?? 0;
473
+ servedModel = null;
474
+ finishMetadata = void 0;
475
+ let stepUsage = null;
476
+ const finish = (text, status, extra = [], usage = stepUsage) => ({
477
+ text,
478
+ status,
479
+ usage,
480
+ model: servedModel ?? sandbox.servedRequests?.().slice(servedBefore).at(-1) ?? null,
481
+ unreported: catalog.unreported?.(finishMetadata) ?? [],
482
+ startedAt: new Date(startedAt).toISOString(),
483
+ durationMs: Date.now() - startedAt,
484
+ transcript: [...normaliseStream(parts, startedAt), ...extra].map((e) => {
485
+ if (e.type !== "error") return e;
486
+ const hint = authHint(catalog, e.message);
487
+ return hint ? {
488
+ ...e,
489
+ message: `${hint}. ${e.message}`
490
+ } : e;
491
+ }),
492
+ ...process.env.REEVAL_RAW_TRANSCRIPT ? { raw: parts } : {}
493
+ });
494
+ try {
495
+ const result = await agent.stream({
496
+ session,
497
+ prompt,
498
+ abortSignal: turnSignal
499
+ });
500
+ const tools = /* @__PURE__ */ new Map();
501
+ for await (const part of result.fullStream) {
502
+ const ms = Date.now() - startedAt;
503
+ parts.push({
504
+ ms,
505
+ part
506
+ });
507
+ traceStreamPart(part, ms, tools);
508
+ if (part.type === "finish-step") stepUsage = addUsage(stepUsage, tokenUsage(part.usage));
509
+ }
510
+ const total = tokenUsage(await result.totalUsage);
511
+ const status = turnSignal.aborted ? "aborted" : "completed";
512
+ return finish(await result.text, status, [], total ?? stepUsage);
513
+ } catch (error) {
514
+ const message = errorText(error);
515
+ const at = Date.now() - startedAt;
516
+ const reported = parts.some(({ part }) => part.type === "error" && errorText(part.error) === message);
517
+ return finish("", turnSignal.aborted ? "aborted" : "error", reported ? [] : [{
518
+ type: "error",
519
+ message,
520
+ ts: new Date(startedAt + at).toISOString(),
521
+ atMs: at
522
+ }]);
523
+ }
524
+ },
525
+ close: () => session.destroy().catch(() => {})
526
+ };
527
+ } };
528
+ }
529
+ //#endregion
530
+ export { createAgentHarness };
531
+
532
+ //# sourceMappingURL=agent-DVHkx8aT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-DVHkx8aT.js","names":[],"sources":["../src/harness/transcript.ts","../src/harness/agent.ts"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ //#region src/view/analysis.ts
2
+ /** Bumped when the system prompt or output schema changes: an older analysis is superseded. */
3
+ const ANALYSIS_PROMPT_VERSION = "analysis-v2";
4
+ /** Bumped when the digest's shape or selection rules change. */
5
+ const DIGEST_VERSION = 1;
6
+ const analysisDataPath = (runId) => `data/analysis/${runId}.json`;
7
+ /** Newest first, saved before cached at the same time. */
8
+ function sortAnalyses(entries) {
9
+ return [...entries].sort((a, b) => a.doc.createdAt === b.doc.createdAt ? a.source === b.source ? 0 : a.source === "saved" ? -1 : 1 : a.doc.createdAt < b.doc.createdAt ? 1 : -1);
10
+ }
11
+ /** Superseded by a newer prompt or digest version: the studio says so. */
12
+ const isSuperseded = (doc) => doc.promptVersion !== "analysis-v2" || doc.inputs.digestVersion !== 1;
13
+ //#endregion
14
+ export { sortAnalyses as a, isSuperseded as i, DIGEST_VERSION as n, analysisDataPath as r, ANALYSIS_PROMPT_VERSION as t };
15
+
16
+ //# sourceMappingURL=analysis-CxSCt1YY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-CxSCt1YY.js","names":[],"sources":["../src/view/analysis.ts"],"mappings":";;AAIA,MAAa,0BAA0B;;AAEvC,MAAa,iBAAiB;AAiG9B,MAAa,oBAAoB,UAAkB,iBAAiB,MAAM;;AAG1E,SAAgB,aAAa,SAA2C;CACtE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,MAC3B,EAAE,IAAI,cAAc,EAAE,IAAI,YACtB,EAAE,WAAW,EAAE,SACb,IACA,EAAE,WAAW,UACX,KACA,IACJ,EAAE,IAAI,YAAY,EAAE,IAAI,YACtB,IACA,EACR;AACF;;AAGA,MAAa,gBAAgB,QAC3B,IAAI,kBAAA,iBAA6C,IAAI,OAAO,kBAAA"}