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,286 @@
1
+ import { I as LABEL, U as imageFor, X as imageInfo, c as dockerfileTag, d as installLayerTag, h as usesEsBase, m as resolveFrom, n as REEVAL_BASE_ARG, ot as isTransient, s as contextHash, u as harnessImageFor } from "./src-DwwiVLqv.js";
2
+ import { u as sandboxId } from "./options-CAQhu--C.js";
3
+ import { n as prepareAll } from "./preflight-BypZMNBG.js";
4
+ import { i as installSteps, o as projectPath, r as imageHarness } from "./prepare-D6Uzcubb.js";
5
+ import { n as createProviders, r as dockerKey } from "./providers-2p3ylMHI.js";
6
+ //#region src/sandbox/images.ts
7
+ /** The distinct Docker sandbox and harness pairs, in first-use order, with how many evals use each. */
8
+ function imageTargets(uses) {
9
+ const targets = /* @__PURE__ */ new Map();
10
+ for (const { id, sandbox, ...use } of uses) {
11
+ if (sandbox.kind !== "docker") continue;
12
+ const harness = imageHarness(use.harness);
13
+ const { image, from, dockerfile, install } = sandbox;
14
+ const key = JSON.stringify({
15
+ harness,
16
+ image: {
17
+ image,
18
+ from,
19
+ dockerfile,
20
+ install
21
+ }
22
+ });
23
+ const target = targets.get(key) ?? {
24
+ id: harness === "cursor" ? sandboxId(sandbox) : `${sandboxId(sandbox)} · ${harness}`,
25
+ harness,
26
+ sandbox,
27
+ evals: 0,
28
+ seen: /* @__PURE__ */ new Set()
29
+ };
30
+ if (!target.seen.has(id)) {
31
+ target.seen.add(id);
32
+ target.evals++;
33
+ }
34
+ targets.set(key, target);
35
+ }
36
+ const labels = /* @__PURE__ */ new Map();
37
+ return [...targets.values()].map(({ seen: _, ...t }) => {
38
+ const label = `${t.id}${t.sandbox.install?.length ? " + install" : ""}`;
39
+ const n = (labels.get(label) ?? 0) + 1;
40
+ labels.set(label, n);
41
+ return {
42
+ ...t,
43
+ id: n === 1 ? label : `${label} (${n})`
44
+ };
45
+ });
46
+ }
47
+ const short = (digest) => digest.replace(/^sha256:/, "").slice(0, 12);
48
+ /** `from`'s image, checked against what the tag names now (a registry lookup, no pull). */
49
+ async function fromStatus(from, ref) {
50
+ const [cached, now] = await Promise.all([imageInfo(ref), resolveFrom(from)]);
51
+ if (!cached) {
52
+ if (!("error" in now)) return {
53
+ status: "build",
54
+ detail: `on ${from} (${short(now.digest)})`
55
+ };
56
+ return isTransient(now.error) ? {
57
+ status: "build",
58
+ detail: `${from} couldn't be checked: ${now.error}`
59
+ } : {
60
+ status: "missing",
61
+ detail: `doesn't resolve: ${now.error}`
62
+ };
63
+ }
64
+ const was = cached.labels[LABEL.fromDigest];
65
+ if ("error" in now) return {
66
+ status: "ready",
67
+ detail: `built; ${from} couldn't be checked`
68
+ };
69
+ if (was && was !== now.digest) return {
70
+ status: "stale",
71
+ detail: `${from} moved upstream (${short(was)} → ${short(now.digest)}): reeval image build rebuilds it`
72
+ };
73
+ return {
74
+ status: "ready",
75
+ detail: `built on ${short(now.digest)}`
76
+ };
77
+ }
78
+ /** How each target's image is made, in build order, and how each step stands, building nothing. */
79
+ async function imageStages(target, root) {
80
+ const { sandbox, harness } = target;
81
+ const stages = [];
82
+ const exists = async (ref) => {
83
+ const info = await imageInfo(ref);
84
+ return {
85
+ info,
86
+ status: info ? "ready" : "build",
87
+ detail: info ? `built (${short(info.id)})` : "not built yet"
88
+ };
89
+ };
90
+ const esBase = async () => {
91
+ const info = await imageInfo(imageFor(harness));
92
+ if (!info) return {
93
+ info,
94
+ status: "build",
95
+ detail: "not built yet"
96
+ };
97
+ return info.labels[LABEL.context] === contextHash() ? {
98
+ info,
99
+ status: "ready",
100
+ detail: `built (${short(info.id)})`
101
+ } : {
102
+ info,
103
+ status: "stale",
104
+ detail: "reeval's base changed: rebuilt before the run"
105
+ };
106
+ };
107
+ let parent = null;
108
+ if (sandbox.image) {
109
+ const found = await imageInfo(sandbox.image);
110
+ parent = found?.id ?? null;
111
+ stages.push({
112
+ what: "image",
113
+ ref: sandbox.image,
114
+ action: "used as is",
115
+ ...found ? {
116
+ status: "ready",
117
+ detail: `found (${short(found.id)})`
118
+ } : {
119
+ status: "missing",
120
+ detail: "not found: pull or build it yourself"
121
+ }
122
+ });
123
+ } else if (sandbox.from) {
124
+ const ref = harnessImageFor(harness, sandbox.from);
125
+ const status = await fromStatus(sandbox.from, ref);
126
+ parent = status.status === "ready" ? (await imageInfo(ref))?.id ?? null : null;
127
+ stages.push({
128
+ what: `from ${sandbox.from}`,
129
+ ref,
130
+ action: "Node, git and the harness bootstrap on top; reeval image build refreshes a moved tag",
131
+ ...status
132
+ });
133
+ } else if (sandbox.dockerfile) {
134
+ const onEs = usesEsBase(sandbox.dockerfile);
135
+ const es = onEs ? await esBase() : null;
136
+ const real = dockerfileTag(sandbox.dockerfile, harness, es?.info?.id ?? null).tag;
137
+ const tag = onEs ? real.replace(/-[0-9a-f]{16}$/, "-<context + reeval image id>") : real;
138
+ const built = await exists(real);
139
+ stages.push({
140
+ what: `dockerfile ${projectPath(root, sandbox.dockerfile)}`,
141
+ ref: tag,
142
+ action: "docker build (layer cache), tagged by content hash",
143
+ status: built.status,
144
+ detail: built.info || !onEs ? built.detail : `${built.detail} (${real})`
145
+ });
146
+ if (onEs) {
147
+ parent = built.info?.id ?? null;
148
+ stages.push({
149
+ what: "harness",
150
+ ref: tag,
151
+ action: `inherited: FROM \${${REEVAL_BASE_ARG}}, which is ${imageFor(harness)}`,
152
+ status: es?.status ?? "build",
153
+ detail: `${imageFor(harness)} ${es?.detail ?? ""}`.trim()
154
+ });
155
+ } else {
156
+ const baked = await exists(harnessImageFor(harness, real));
157
+ parent = baked.info?.id ?? null;
158
+ stages.push({
159
+ what: "harness",
160
+ ref: harnessImageFor(harness, tag),
161
+ action: "Node, git and the harness bootstrap on top",
162
+ status: baked.status,
163
+ detail: baked.detail
164
+ });
165
+ }
166
+ } else {
167
+ const es = await esBase();
168
+ parent = es.status === "ready" ? es.info?.id ?? null : null;
169
+ stages.push({
170
+ what: "base",
171
+ ref: imageFor(harness),
172
+ action: "reeval's image: built when missing or when its base changed",
173
+ status: es.status,
174
+ detail: es.detail
175
+ });
176
+ }
177
+ const steps = installSteps(sandbox);
178
+ if (steps.length) {
179
+ const layer = parent ? await exists(installLayerTag({ id: parent }, steps)) : null;
180
+ stages.push({
181
+ what: `install ${steps.length} command${steps.length === 1 ? "" : "s"}`,
182
+ ref: "reeval-install:<base id + commands>",
183
+ action: "build unless cached",
184
+ status: layer?.status ?? "build",
185
+ detail: layer?.detail ?? "not built yet"
186
+ });
187
+ }
188
+ return stages;
189
+ }
190
+ /** reeval's harness images the targets need: used directly, or as a Dockerfile's `REEVAL_BASE`. */
191
+ const esImages = (targets) => [...new Set(targets.filter(({ sandbox: s }) => !s.image && !s.from && !s.dockerfile || s.dockerfile && usesEsBase(s.dockerfile)).map((t) => t.harness))];
192
+ const WORST = [
193
+ "missing",
194
+ "stale",
195
+ "build",
196
+ "ready"
197
+ ];
198
+ const MARKS = {
199
+ ready: "✓",
200
+ build: "+",
201
+ stale: "~",
202
+ missing: "✗"
203
+ };
204
+ const WORDS = {
205
+ ready: "ready",
206
+ build: "to build",
207
+ stale: "stale",
208
+ missing: "missing"
209
+ };
210
+ /** A target's standing: its worst step. */
211
+ const targetStatus = (stages) => WORST.find((w) => stages.some((s) => s.status === w)) ?? "ready";
212
+ /** `reeval image build --dry-run`: one block per sandbox, each step with how it stands. */
213
+ async function imagePlanLines(targets, root) {
214
+ const lines = [`images ${targets.length} sandbox image${targets.length === 1 ? "" : "s"} (nothing built: --dry-run)`];
215
+ for (const target of targets) {
216
+ const uses = target.evals ? ` · ${target.evals} eval${target.evals === 1 ? "" : "s"}` : "";
217
+ lines.push(`${target.id}${uses}`);
218
+ const stages = await imageStages(target, root);
219
+ const width = Math.max(...stages.map((s) => s.what.length));
220
+ for (const s of stages) lines.push(` ${MARKS[s.status]} ${s.what.padEnd(width)} ${s.ref} (${WORDS[s.status]}: ${s.detail})`);
221
+ }
222
+ return lines;
223
+ }
224
+ /** `reeval run --dry-run`: one line per sandbox the run would prepare. */
225
+ async function imageStatusLines(targets, root) {
226
+ if (!targets.length) return [];
227
+ const rows = await Promise.all(targets.map(async (t) => {
228
+ const stages = await imageStages(t, root);
229
+ const status = targetStatus(stages);
230
+ const worst = stages.find((s) => s.status === status);
231
+ return {
232
+ t,
233
+ status,
234
+ detail: status === "ready" ? "" : `: ${worst?.what}, ${worst?.detail}`
235
+ };
236
+ }));
237
+ const count = (w) => rows.filter((r) => r.status === w).length;
238
+ const summary = WORST.filter((w) => count(w)).reverse().map((w) => `${count(w)} ${WORDS[w]}`).join(", ");
239
+ const width = Math.max(...rows.map((r) => r.t.id.length));
240
+ return [`images ${targets.length} sandbox image${targets.length === 1 ? "" : "s"}: ${summary}`, ...rows.map((r) => ` ${MARKS[r.status]} ${r.t.id.padEnd(width)} ${WORDS[r.status]}${r.detail}`)];
241
+ }
242
+ /**
243
+ * `reeval image build`: prepares every target, three at a time, and reports each, failures too.
244
+ * `from` images are rebuilt when their tag moved upstream, and everything with `force`.
245
+ */
246
+ async function buildImages(targets, root, options) {
247
+ const providers = createProviders({ refresh: options.force ? "force" : "check" });
248
+ const prepared = targets.map((t) => ({
249
+ kind: "docker",
250
+ key: dockerKey(t.sandbox, harnessFor(t.harness)),
251
+ label: t.id,
252
+ sandbox: t.sandbox,
253
+ harness: harnessFor(t.harness),
254
+ setBy: [],
255
+ runWide: false
256
+ }));
257
+ const outcomes = await prepareAll(prepared, {
258
+ providers,
259
+ root,
260
+ log: options.log,
261
+ ...options.delays ? { delays: options.delays } : {}
262
+ });
263
+ return targets.map((t, i) => {
264
+ const o = outcomes[i];
265
+ return o.ok ? {
266
+ ...t,
267
+ ok: true,
268
+ image: o.handle,
269
+ ms: o.ms
270
+ } : {
271
+ ...t,
272
+ ok: false,
273
+ failure: o.failure,
274
+ ms: o.ms
275
+ };
276
+ });
277
+ }
278
+ /** A harness descriptor for a baked harness: the fake one in its layout. */
279
+ const harnessFor = (harness) => ({
280
+ kind: "fake",
281
+ layout: harness
282
+ });
283
+ //#endregion
284
+ export { buildImages, esImages, imagePlanLines, imageStages, imageStatusLines, imageTargets };
285
+
286
+ //# sourceMappingURL=images-Cc1-coFc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images-Cc1-coFc.js","names":[],"sources":["../src/sandbox/images.ts"],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { B as HostFile, C as EsConfig, D as ExecResult, E as EvalOptions, F as HarnessData, J as PinnableKey, L as HarnessEdit, P as GroupOptions, R as HarnessOption, S as EnvironmentSpec, T as EvalFn, U as JudgeOptions, V as JudgeCallOptions, W as McpServer, X as ProfileDefaults, Y as Profile, Z as ProfileLimit, _ as EgressRecord, a as Cell, at as TranscriptEvent, b as EnvironmentHelpers, dt as AttemptRecord, et as Secret, ft as CellRecord, g as EgressPolicy, h as Duration, i as Budget, l as CompareOptions, lt as Verdict, nt as SetupStep, o as CellRole, ot as Turn, p as Diff, pt as EvalEntry, rt as SkillSource, st as TurnData, tt as SecretTemplate, u as ConfigHelpers, ut as WebEventType, v as EnvVars, vt as RunRecord, w as EvalContext, x as EnvironmentInput, y as Environment, z as HistoryConfig } from "./types-DLec-6Cx.js";
2
+ import { Duplex } from "node:stream";
3
+ import { ExpectStatic, Tester } from "@vitest/expect";
4
+ import "@ai-sdk/harness";
5
+ //#region src/config.d.ts
6
+ type ConfigInput = EsConfig | ((helpers: ConfigHelpers) => EsConfig);
7
+ /**
8
+ * The config: a plain object, or a callback that destructures the helpers it needs, e.g.
9
+ * `defineConfig(({ secret }) => ({ env: { KEY: secret.fromEnv('KEY') } }))`.
10
+ */
11
+ export declare const defineConfig: <T extends ConfigInput>(config: T) => T;
12
+ //#endregion
13
+ //#region src/egress.d.ts
14
+ /**
15
+ * The package registries and GitHub, to spread into an allowlist that still installs:
16
+ * `egress: { allow: [...DEFAULT_EGRESS_ALLOW, 'api.example.com'] }`.
17
+ */
18
+ export declare const DEFAULT_EGRESS_ALLOW: readonly string[];
19
+ //#endregion
20
+ //#region src/engine/expect.d.ts
21
+ declare module '@vitest/expect' {
22
+ interface ExpectPollOptions {
23
+ interval?: number;
24
+ timeout?: number;
25
+ message?: string;
26
+ }
27
+ interface ExpectStatic {
28
+ assert: Chai.AssertStatic;
29
+ unreachable: (message?: string) => never;
30
+ soft: <T>(actual: T, message?: string) => import('@vitest/expect').Assertion<void, T>;
31
+ poll: <T>(actual: (options: {
32
+ signal: AbortSignal;
33
+ }) => T, options?: ExpectPollOptions) => import('@vitest/expect').Assertion<Promise<void>, Awaited<T>>;
34
+ addEqualityTesters: (testers: Array<Tester>) => void;
35
+ assertions: (expected: number) => void;
36
+ hasAssertions: () => void;
37
+ }
38
+ interface Matchers<R extends void | Promise<void> = void | Promise<void>, T = unknown> {
39
+ toHaveFile(path: string, pattern?: RegExp | string): Promise<void>;
40
+ toSucceed(): Promise<void>;
41
+ toHaveSearched(query?: RegExp | string): void;
42
+ toHaveFetched(url?: RegExp | string): void;
43
+ toPass(): void;
44
+ }
45
+ }
46
+ export declare const expect: ExpectStatic;
47
+ //#endregion
48
+ //#region src/environment.d.ts
49
+ /**
50
+ * What a skill directory leaves out of the sandbox unless `exclude` says otherwise: eval material
51
+ * (skill-creator keeps `evals/` in the skill), run history and reeval eval files. `.git` is always left out.
52
+ */
53
+ export declare const DEFAULT_SKILL_EXCLUDE: readonly string[];
54
+ /**
55
+ * What an eval runs in: skills, MCP servers, files, rules, variables, secrets and setup steps.
56
+ * Pass a spec, or a callback that destructures the typed helpers it needs:
57
+ *
58
+ * defineEnvironment('genkit', ({ secret, skill }) => ({
59
+ * env: { GOOGLE_GENAI_API_KEY: secret.fromEnv('GOOGLE_GENERATIVE_AI_API_KEY') },
60
+ * skills: [skill.local('../skills/genkit')],
61
+ * }))
62
+ *
63
+ * The callback runs once, synchronously. Relative paths resolve against the calling file.
64
+ */
65
+ export declare function defineEnvironment(name: string, input: EnvironmentInput): Environment;
66
+ //#endregion
67
+ //#region src/evaluate.d.ts
68
+ type GroupFn = {
69
+ (name: string, fn: () => void, options?: GroupOptions): void;
70
+ (name: string, options: GroupOptions, fn: () => void): void;
71
+ };
72
+ export declare const group: GroupFn & {
73
+ skip: GroupFn;
74
+ only: GroupFn;
75
+ todo: (name: string) => void;
76
+ };
77
+ type EvaluateFn<F = EvalFn> = {
78
+ (name: string, fn: F, options?: EvalOptions): void;
79
+ (name: string, options: EvalOptions, fn: F): void;
80
+ };
81
+ /** One eval per case: `evaluate.for(cases)('adds $a and $b', async (t, c) => …)`. */
82
+ declare const evalFor: <T>(cases: readonly T[]) => EvaluateFn<(t: EvalContext, item: T) => Promise<void>>;
83
+ export declare const evaluate: EvaluateFn & {
84
+ skip: EvaluateFn;
85
+ only: EvaluateFn;
86
+ todo: (name: string) => void;
87
+ for: typeof evalFor;
88
+ };
89
+ //#endregion
90
+ //#region src/matchers.d.ts
91
+ /** A check the turn's harness can't answer either way, e.g. a web fetch it never reports. */
92
+ export declare class HarnessCapabilityError extends Error {
93
+ name: string;
94
+ }
95
+ //#endregion
96
+ export type { AttemptRecord, Budget, Cell, CellRecord, CellRole, CompareOptions, ConfigHelpers, Diff, Duration, EgressPolicy, EgressRecord, EnvVars, Environment, EnvironmentHelpers, EnvironmentInput, EnvironmentSpec, EsConfig, EvalContext, EvalEntry, EvalFn, EvalOptions, ExecResult, GroupOptions, HarnessData, HarnessEdit, HarnessOption, HistoryConfig, HostFile, JudgeCallOptions, JudgeOptions, McpServer, PinnableKey, Profile, ProfileDefaults, ProfileLimit, RunRecord, Secret, SecretTemplate, SetupStep, SkillSource, TranscriptEvent, Turn, TurnData, Verdict, WebEventType };
97
+ //# sourceMappingURL=index.d.ts.map