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,213 @@
1
+ import { _ as stepCommand, x as parseDuration } from "./environment-Mz7wvrtD.js";
2
+ import { H as harnessLabel, I as LABEL, U as imageFor, X as imageInfo, a as buildInstallLayer, c as dockerfileTag, d as installLayerTag, h as usesEsBase, i as buildImage, m as resolveFrom, r as buildDockerfile, s as contextHash, u as harnessImageFor } from "./src-DwwiVLqv.js";
3
+ import "./config-Cuj0kVYj.js";
4
+ import { t as PrepareError } from "./provider-CmAYTQQs.js";
5
+ import "./docker-DQDZWXF9.js";
6
+ import { mkdirSync, writeFileSync } from "node:fs";
7
+ import { join, relative, sep } from "node:path";
8
+ //#region src/sandbox/prepare.ts
9
+ /** Whose CLI a harness's image carries. The fake harness runs in its `layout`'s, else Cursor's. */
10
+ const imageHarness = (harness) => harness.kind === "fake" ? harness.layout ?? "cursor" : harness.kind;
11
+ /** The sandbox's `install` commands, with their timeouts in ms. */
12
+ const installSteps = (sandbox) => (sandbox.install ?? []).map((step) => typeof step === "string" ? { run: step } : {
13
+ run: step.run,
14
+ ...step.timeout !== void 0 ? { timeoutMs: parseDuration(step.timeout) } : {}
15
+ });
16
+ const projectPath = (root, path) => relative(root, path).split(sep).join("/") || ".";
17
+ function createBuilds(options = {}) {
18
+ const builds = /* @__PURE__ */ new Map();
19
+ return {
20
+ once: (ref, build) => {
21
+ let done = builds.get(ref);
22
+ if (!done) {
23
+ done = build();
24
+ builds.set(ref, done);
25
+ }
26
+ return done;
27
+ },
28
+ retry: options.retry ?? ((step) => step()),
29
+ log: options.log ?? (() => {}),
30
+ refresh: options.refresh ?? "none"
31
+ };
32
+ }
33
+ const buildLogger = (root, ref) => {
34
+ const dir = join(root, ".reeval", "cache", "images");
35
+ const file = join(dir, `${ref.replace(/[^A-Za-z0-9._-]+/g, "-")}.log`);
36
+ return {
37
+ file,
38
+ path: projectPath(root, file),
39
+ write: (output) => {
40
+ mkdirSync(dir, { recursive: true });
41
+ writeFileSync(file, output);
42
+ }
43
+ };
44
+ };
45
+ const built = async (ref) => {
46
+ const info = await imageInfo(ref);
47
+ if (!info) throw new Error(`The image ${ref} disappeared after building`);
48
+ return info;
49
+ };
50
+ /** reeval's image for the harness: built when it's missing, or when reeval's base context changed. */
51
+ const esImage = (harness, root, signal, b) => {
52
+ const ref = imageFor(harness);
53
+ return b.once(ref, async () => {
54
+ const info = await imageInfo(ref);
55
+ const current = info?.labels[LABEL.context] === contextHash();
56
+ if (info && current && b.refresh !== "force") return info;
57
+ b.log(info && !current ? `Rebuilding ${ref}: reeval's base image changed` : `Building ${ref}`);
58
+ const output = buildLogger(root, ref);
59
+ const pull = b.refresh === "force";
60
+ await b.retry(() => buildImage(b.log, {
61
+ harness,
62
+ signal,
63
+ output,
64
+ pull
65
+ }));
66
+ return built(ref);
67
+ });
68
+ };
69
+ /**
70
+ * The image with the harness in it that the sandbox's `install` layer (if any) goes on: reeval's
71
+ * image for the harness, `image` as is, `from` with Node and the harness baked on, or the built
72
+ * Dockerfile (with them baked on unless it's built on that harness's image).
73
+ */
74
+ async function harnessBase(sandbox, harness, root, signal, b) {
75
+ const bake = (from) => {
76
+ const ref = harnessImageFor(harness, from);
77
+ return b.once(ref, async () => {
78
+ const cached = b.refresh === "force" ? null : await imageInfo(ref);
79
+ if (cached && b.refresh === "check") {
80
+ const now = await resolveFrom(from, signal);
81
+ const was = cached.labels[LABEL.fromDigest];
82
+ if ("digest" in now && was && now.digest !== was) b.log(`Rebuilding ${ref}: ${from} moved upstream`);
83
+ else return cached;
84
+ } else if (cached) return cached;
85
+ const output = buildLogger(root, ref);
86
+ const pull = b.refresh === "force";
87
+ await b.retry(() => buildImage(b.log, {
88
+ harness,
89
+ from,
90
+ signal,
91
+ output,
92
+ pull
93
+ }));
94
+ return built(ref);
95
+ });
96
+ };
97
+ if (sandbox.image) {
98
+ const image = sandbox.image;
99
+ return {
100
+ ref: image,
101
+ info: await b.once(image, async () => {
102
+ const found = await imageInfo(image);
103
+ if (found) return found;
104
+ throw new PrepareError({
105
+ class: "config",
106
+ stage: "image",
107
+ ref: image,
108
+ cause: null,
109
+ log: null,
110
+ usage: true,
111
+ message: `Docker image ${image} not found. docker({ image }) is used as is, so pull or build it first (or use from or dockerfile to have reeval build it).`
112
+ });
113
+ }),
114
+ dockerfile: null
115
+ };
116
+ }
117
+ if (sandbox.from) return {
118
+ ref: harnessImageFor(harness, sandbox.from),
119
+ info: await bake(sandbox.from),
120
+ dockerfile: null
121
+ };
122
+ if (sandbox.dockerfile) {
123
+ const path = sandbox.dockerfile;
124
+ const esBase = usesEsBase(path) ? (await esImage(harness, root, signal, b)).id : null;
125
+ const { tag, sha256 } = dockerfileTag(path, harness, esBase);
126
+ const dockerfile = {
127
+ path: projectPath(root, path),
128
+ sha256
129
+ };
130
+ const info = await b.once(tag, async () => {
131
+ const cached = b.refresh === "force" ? null : await imageInfo(tag);
132
+ if (cached) return cached;
133
+ b.log(`Building ${dockerfile.path} as ${tag}`);
134
+ const output = buildLogger(root, tag);
135
+ await b.retry(() => buildDockerfile(path, {
136
+ harness,
137
+ esBase,
138
+ name: dockerfile.path,
139
+ signal,
140
+ output,
141
+ force: true,
142
+ pull: b.refresh === "force"
143
+ }));
144
+ return built(tag);
145
+ });
146
+ if (info.labels[LABEL.harness] === harnessLabel(harness)) return {
147
+ ref: tag,
148
+ info,
149
+ dockerfile
150
+ };
151
+ return {
152
+ ref: harnessImageFor(harness, tag),
153
+ info: await bake(tag),
154
+ dockerfile
155
+ };
156
+ }
157
+ return {
158
+ ref: imageFor(harness),
159
+ info: await esImage(harness, root, signal, b),
160
+ dockerfile: null
161
+ };
162
+ }
163
+ /**
164
+ * The image an attempt's container starts from: the sandbox's image for the harness, plus a
165
+ * cached layer with its `install` commands, each built if missing. Each build's log goes to
166
+ * `.reeval/cache/images/` under `root`.
167
+ */
168
+ async function prepareImage(sandbox, harness, root, signal, b) {
169
+ const base = await harnessBase(sandbox, harness, root, signal, b);
170
+ const agentCli = base.info.labels[LABEL.agentVersion] ?? null;
171
+ const steps = installSteps(sandbox);
172
+ const install = (sandbox.install ?? []).map(stepCommand);
173
+ const digest = sandbox.from ? base.info.labels[LABEL.fromDigest] ?? null : null;
174
+ const image = {
175
+ agentCli,
176
+ base: base.ref,
177
+ install,
178
+ dockerfile: base.dockerfile,
179
+ ...sandbox.from ? { from: {
180
+ ref: sandbox.from,
181
+ digest
182
+ } } : {}
183
+ };
184
+ if (steps.length === 0) return {
185
+ ref: base.ref,
186
+ id: base.info.id,
187
+ ...image
188
+ };
189
+ const parent = {
190
+ ref: base.ref,
191
+ id: base.info.id
192
+ };
193
+ const ref = installLayerTag(parent, steps);
194
+ return {
195
+ ref,
196
+ id: (await b.once(ref, async () => {
197
+ const cached = await imageInfo(ref);
198
+ if (cached) return cached;
199
+ b.log(`Installing ${steps.length} command(s) onto ${base.ref} as ${ref}`);
200
+ const output = buildLogger(root, ref);
201
+ await buildInstallLayer(parent, steps, {
202
+ signal,
203
+ output
204
+ });
205
+ return built(ref);
206
+ })).id,
207
+ ...image
208
+ };
209
+ }
210
+ //#endregion
211
+ export { prepareImage as a, installSteps as i, esImage as n, projectPath as o, imageHarness as r, createBuilds as t };
212
+
213
+ //# sourceMappingURL=prepare-D6Uzcubb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-D6Uzcubb.js","names":[],"sources":["../src/sandbox/prepare.ts"],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { t as inCI } from "./env-BQqj93gu.js";
2
+ import { o as stripCredentials } from "./redact-C4fL_bZP.js";
3
+ import { l as sha256, u as slugify } from "./ids-Bp6ut7ZD.js";
4
+ import { r as repoTop, t as git } from "./git-D6hMeieS.js";
5
+ import { hostname, userInfo } from "node:os";
6
+ import { relative, sep } from "node:path";
7
+ //#region src/history/provenance.ts
8
+ const text = async (cwd, args) => {
9
+ const r = await git(cwd, args);
10
+ return r.code === 0 ? r.stdout.toString("utf8").trim() : null;
11
+ };
12
+ /**
13
+ * The code under test. Null outside a git repo or before the first commit. reeval's own output
14
+ * (`.reeval/` and the history folder, given in `ignore` as absolute paths) never makes a run dirty.
15
+ */
16
+ async function gitInfo(root, ignore = [], env = process.env) {
17
+ const sha = await text(root, [
18
+ "rev-parse",
19
+ "--verify",
20
+ "-q",
21
+ "HEAD"
22
+ ]);
23
+ if (!sha) return null;
24
+ const top = await repoTop(root) ?? root;
25
+ const ignored = ignore.map((dir) => `${relative(top, dir).split(sep).join("/")}/`);
26
+ const isEsOutput = (path) => path.split("/").includes(".reeval") || ignored.some((dir) => path.startsWith(dir));
27
+ const dirty = (await git(root, [
28
+ "status",
29
+ "--porcelain=v1",
30
+ "-z",
31
+ "--untracked-files=all"
32
+ ])).stdout.toString("utf8").split("\0").filter(Boolean).map((line) => ({
33
+ code: line.slice(0, 2),
34
+ path: line.slice(3)
35
+ })).filter((e) => e.path && !isEsOutput(e.path)).length > 0;
36
+ const branch = env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME || env.CI_COMMIT_REF_NAME || await text(root, [
37
+ "symbolic-ref",
38
+ "--short",
39
+ "-q",
40
+ "HEAD"
41
+ ]) || null;
42
+ const remote = await text(root, [
43
+ "remote",
44
+ "get-url",
45
+ "origin"
46
+ ]);
47
+ return {
48
+ sha,
49
+ branch,
50
+ dirty,
51
+ diffHash: null,
52
+ worktreePatch: null,
53
+ worktreePatchNote: null,
54
+ commitTime: await text(root, [
55
+ "show",
56
+ "-s",
57
+ "--format=%cI",
58
+ "HEAD"
59
+ ]) ?? "",
60
+ shallow: await text(root, ["rev-parse", "--is-shallow-repository"]) === "true",
61
+ remote: remote ? stripCredentials(remote) : null
62
+ };
63
+ }
64
+ function runnerInfo(env = process.env) {
65
+ if (!inCI(env)) return {
66
+ kind: "local",
67
+ hostHash: sha256(`evalsuite:${hostname()}`).slice(0, 12)
68
+ };
69
+ if (env.GITHUB_ACTIONS) {
70
+ const runUrl = env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}` : null;
71
+ const attempt = Number(env.GITHUB_RUN_ATTEMPT);
72
+ const number = Number(/^refs\/pull\/(\d+)\//.exec(env.GITHUB_REF ?? "")?.[1]);
73
+ const pr = number || env.GITHUB_BASE_REF ? {
74
+ number: number || null,
75
+ baseRef: env.GITHUB_BASE_REF || null
76
+ } : null;
77
+ return {
78
+ kind: "ci",
79
+ provider: "github",
80
+ runUrl,
81
+ attempt: attempt || null,
82
+ pr
83
+ };
84
+ }
85
+ if (env.GITLAB_CI) {
86
+ const iid = Number(env.CI_MERGE_REQUEST_IID);
87
+ const pr = iid ? {
88
+ number: iid,
89
+ baseRef: env.CI_MERGE_REQUEST_TARGET_BRANCH_NAME || null
90
+ } : null;
91
+ return {
92
+ kind: "ci",
93
+ provider: "gitlab",
94
+ runUrl: env.CI_JOB_URL ?? null,
95
+ attempt: null,
96
+ pr
97
+ };
98
+ }
99
+ return {
100
+ kind: "ci",
101
+ provider: "unknown",
102
+ runUrl: null,
103
+ attempt: null,
104
+ pr: null
105
+ };
106
+ }
107
+ /** Who a run belongs to, as a file-name segment: `ci` in CI, else the git user. */
108
+ async function author(root, env = process.env) {
109
+ if (inCI(env)) return "ci";
110
+ const name = await text(root, ["config", "user.name"]);
111
+ const email = await text(root, ["config", "user.email"]);
112
+ let user = "";
113
+ try {
114
+ user = userInfo().username;
115
+ } catch {}
116
+ for (const candidate of [
117
+ name,
118
+ email?.split("@")[0],
119
+ user
120
+ ]) {
121
+ const slug = candidate ? slugify(candidate, 24) : "";
122
+ if (slug) return slug;
123
+ }
124
+ return "unknown";
125
+ }
126
+ //#endregion
127
+ export { gitInfo as n, runnerInfo as r, author as t };
128
+
129
+ //# sourceMappingURL=provenance-Dfb8YY5Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-Dfb8YY5Y.js","names":[],"sources":["../src/history/provenance.ts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { t as PrepareError } from "./provider-CmAYTQQs.js";
2
+ export { PrepareError };
@@ -0,0 +1,14 @@
1
+ import { t as InfraError } from "./types-C5vI3g1C.js";
2
+ //#region src/sandbox/provider.ts
3
+ var PrepareError = class extends InfraError {
4
+ name = "PrepareError";
5
+ failure;
6
+ constructor(failure) {
7
+ super(failure.message);
8
+ this.failure = failure;
9
+ }
10
+ };
11
+ //#endregion
12
+ export { PrepareError as t };
13
+
14
+ //# sourceMappingURL=provider-CmAYTQQs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-CmAYTQQs.js","names":[],"sources":["../src/sandbox/provider.ts"],"mappings":";;AAgCA,IAAa,eAAb,cAAkC,WAAW;CAC3C,OAAgB;CAChB;CACA,YAAY,SAAyB;EACnC,MAAM,QAAQ,OAAO;EACrB,KAAK,UAAU;CACjB;AACF"}
@@ -0,0 +1,107 @@
1
+ import { t as UsageError } from "./errors-CSxfJ4qu.js";
2
+ import { Y as dockerState, nt as ImageBuildError, ot as isTransient } from "./src-DwwiVLqv.js";
3
+ import { t as PrepareError } from "./provider-CmAYTQQs.js";
4
+ //#region src/sandbox/providers.ts
5
+ /** The key of a Docker sandbox's image: what's in it, not the limits or user it runs with. */
6
+ const dockerKey = (sandbox, harness) => {
7
+ const kind = harness.kind === "fake" ? harness.layout ?? "cursor" : harness.kind;
8
+ const { image, from, dockerfile, install } = sandbox;
9
+ return JSON.stringify({
10
+ harness: kind,
11
+ image: {
12
+ image,
13
+ from,
14
+ dockerfile,
15
+ install
16
+ }
17
+ });
18
+ };
19
+ /** How Docker's build errors class: a named cause is a resource, a network error transient. */
20
+ function classifyDocker(error) {
21
+ const message = error instanceof Error ? error.message : String(error);
22
+ if (error instanceof ImageBuildError) {
23
+ const { stage, ref, transient, cause, log } = error.failure;
24
+ return {
25
+ class: cause ? "resource" : transient ? "transient" : "config",
26
+ stage,
27
+ ref,
28
+ cause,
29
+ log,
30
+ message
31
+ };
32
+ }
33
+ return {
34
+ class: isTransient(message) ? "transient" : "config",
35
+ stage: "image",
36
+ ref: null,
37
+ cause: null,
38
+ log: null,
39
+ message
40
+ };
41
+ }
42
+ /** Why Docker can't run a sandbox, as the fix a user needs; null when it can. */
43
+ function dockerProblem(state, platform = process.platform) {
44
+ if (state === "running") return null;
45
+ if (state === "windows-containers") return "Docker is running Windows containers, but reeval's sandboxes are Linux containers. Switch Docker Desktop to Linux containers (its tray menu: Switch to Linux containers) and try again.";
46
+ return platform === "win32" ? "Docker is not running. Start Docker Desktop (with the WSL 2 backend and Linux containers) and try again." : "Docker is not running. Start Docker and try again.";
47
+ }
48
+ /** Throws a usage error unless Docker can run a sandbox. */
49
+ async function requireDocker() {
50
+ const problem = dockerProblem(await dockerState());
51
+ if (problem) throw new UsageError(problem);
52
+ }
53
+ /** Docker: one image per key, each sub-image built once per provider (so once per run). */
54
+ function dockerProvider(options = {}) {
55
+ let builds;
56
+ return {
57
+ kind: "docker",
58
+ async check() {
59
+ const problem = dockerProblem(await dockerState());
60
+ if (!problem) return;
61
+ throw new PrepareError({
62
+ class: "config",
63
+ stage: "docker",
64
+ ref: null,
65
+ cause: null,
66
+ log: null,
67
+ usage: true,
68
+ message: problem
69
+ });
70
+ },
71
+ key: dockerKey,
72
+ async prepare(sandbox, harness, ctx) {
73
+ const { createBuilds, imageHarness, prepareImage } = await import("./prepare-Cwv0bHs_.js");
74
+ builds ??= createBuilds({
75
+ retry: ctx.retry,
76
+ log: ctx.log,
77
+ refresh: options.refresh ?? "none"
78
+ });
79
+ return await prepareImage(sandbox, imageHarness(harness), ctx.root, ctx.signal, builds);
80
+ },
81
+ classify: classifyDocker
82
+ };
83
+ }
84
+ /** The fake sandbox is a temp directory on the host: nothing to check or prepare. */
85
+ const fakeProvider = () => ({
86
+ kind: "fake",
87
+ check: async () => {},
88
+ key: () => "fake",
89
+ prepare: async () => null,
90
+ classify: (error) => ({
91
+ class: "config",
92
+ stage: "fake",
93
+ ref: null,
94
+ cause: null,
95
+ log: null,
96
+ message: error instanceof Error ? error.message : String(error)
97
+ })
98
+ });
99
+ /** A fresh set of providers, one per run: each keeps the run's builds. */
100
+ const createProviders = (options = {}) => ({
101
+ docker: dockerProvider(options),
102
+ fake: fakeProvider()
103
+ });
104
+ //#endregion
105
+ export { dockerProvider as a, dockerProblem as i, createProviders as n, fakeProvider as o, dockerKey as r, requireDocker as s, classifyDocker as t };
106
+
107
+ //# sourceMappingURL=providers-2p3ylMHI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers-2p3ylMHI.js","names":[],"sources":["../src/sandbox/providers.ts"],"mappings":";;;;;AASA,MAAa,aAAa,SAAkC,YAA+B;CACzF,MAAM,OAAO,QAAQ,SAAS,SAAU,QAAQ,UAAU,WAAY,QAAQ;CAC9E,MAAM,EAAE,OAAO,MAAM,YAAY,YAAY;CAC7C,OAAO,KAAK,UAAU;EAAE,SAAS;EAAM,OAAO;GAAE;GAAO;GAAM;GAAY;EAAQ;CAAE,CAAC;AACtF;;AAGA,SAAgB,eAAe,OAAgC;CAC7D,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CACrE,IAAI,iBAAiB,iBAAiB;EACpC,MAAM,EAAE,OAAO,KAAK,WAAW,OAAO,QAAQ,MAAM;EACpD,OAAO;GACL,OAAO,QAAQ,aAAa,YAAY,cAAc;GACtD;GACA;GACA;GACA;GACA;EACF;CACF;CACA,OAAO;EACL,OAAO,YAAY,OAAO,IAAI,cAAc;EAC5C,OAAO;EACP,KAAK;EACL,OAAO;EACP,KAAK;EACL;CACF;AACF;;AAGA,SAAgB,cACd,OACA,WAA4B,QAAQ,UACrB;CACf,IAAI,UAAU,WAAW,OAAO;CAChC,IAAI,UAAU,sBACZ,OAAO;CACT,OAAO,aAAa,UAChB,6GACA;AACN;;AAGA,eAAsB,gBAA+B;CACnD,MAAM,UAAU,cAAc,MAAM,YAAY,CAAC;CACjD,IAAI,SAAS,MAAM,IAAI,WAAW,OAAO;AAC3C;;AAGA,SAAgB,eACd,UAAiC,CAAC,GACQ;CAC1C,IAAI;CACJ,OAAO;EACL,MAAM;EACN,MAAM,QAAQ;GACZ,MAAM,UAAU,cAAc,MAAM,YAAY,CAAC;GACjD,IAAI,CAAC,SAAS;GACd,MAAM,IAAI,aAAa;IACrB,OAAO;IACP,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,OAAO;IACP,SAAS;GACX,CAAC;EACH;EACA,KAAK;EACL,MAAM,QAAQ,SAAS,SAAS,KAAK;GACnC,MAAM,EAAE,cAAc,cAAc,iBAAiB,MAAM,OAAO;GAClE,WAAW,aAAa;IACtB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,SAAS,QAAQ,WAAW;GAC9B,CAAC;GACD,OAAO,MAAM,aAAa,SAAS,aAAa,OAAO,GAAG,IAAI,MAAM,IAAI,QAAQ,MAAM;EACxF;EACA,UAAU;CACZ;AACF;;AAGA,MAAa,sBAA8D;CACzE,MAAM;CACN,OAAO,YAAY,CAAC;CACpB,WAAW;CACX,SAAS,YAAY;CACrB,WAAW,WAAW;EACpB,OAAO;EACP,OAAO;EACP,KAAK;EACL,OAAO;EACP,KAAK;EACL,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CAChE;AACF;;AAGA,MAAa,mBAAmB,UAAiC,CAAC,OAC/D;CAAE,QAAQ,eAAe,OAAO;CAAG,MAAM,aAAa;AAAE"}
@@ -0,0 +1,2 @@
1
+ import { a as dockerProvider, s as requireDocker } from "./providers-2p3ylMHI.js";
2
+ export { dockerProvider, requireDocker };
@@ -0,0 +1,91 @@
1
+ import { t as UsageError } from "./errors-CSxfJ4qu.js";
2
+ import { n as clip } from "./text-gEcKjAyp.js";
3
+ //#region src/query.ts
4
+ const EXAMPLES = [
5
+ "reeval query lift",
6
+ `reeval query "SELECT eval_key, variant, points, lo, hi FROM lift WHERE within_noise = 0"`,
7
+ `reeval query "SELECT * FROM failing_attempts WHERE skill = 'house-greeting' AND model LIKE 'composer%'"`,
8
+ `reeval query "SELECT eval_key, cell_key, first_seen, flaky_runs FROM flaky_cells"`,
9
+ `reeval query "SELECT run_id, eval_key, changed FROM drift ORDER BY run_id DESC LIMIT 20"`,
10
+ `reeval query "SELECT branch, outcome, COUNT(*) AS n FROM eval_trend GROUP BY branch, outcome" --json`
11
+ ];
12
+ const cell = (value) => value === null || value === void 0 ? "·" : clip(typeof value === "object" ? JSON.stringify(value) : String(value), 60);
13
+ /** Rows as an aligned table: a header, then one line per row. */
14
+ function formatRows({ columns, rows }) {
15
+ if (rows.length === 0) return "(no rows)";
16
+ const table = [columns, ...rows.map((r) => columns.map((c) => cell(r[c])))];
17
+ const widths = columns.map((_, i) => Math.max(...table.map((r) => (r[i] ?? "").length)));
18
+ return table.map((r) => r.map((v, i) => i === r.length - 1 ? v : v.padEnd(widths[i] ?? 0)).join(" ").trimEnd()).join("\n");
19
+ }
20
+ function formatSchema(schema, withExamples) {
21
+ const block = (type, title) => [title, ...schema.filter((o) => o.type === type).map((o) => ` ${o.name}(${o.columns.join(", ")})`)];
22
+ return [
23
+ ...block("view", "Views (the common questions; filter them with SQL):"),
24
+ "",
25
+ ...block("table", "Tables:"),
26
+ ...withExamples ? [
27
+ "",
28
+ "Examples:",
29
+ ...EXAMPLES.map((e) => ` ${e}`)
30
+ ] : []
31
+ ].join("\n");
32
+ }
33
+ /**
34
+ * Whether `sql` holds more than one statement: SQLite would run the first and ignore the rest.
35
+ * Semicolons inside quotes, identifiers and comments don't count; a trailing one is fine.
36
+ */
37
+ function statementCount(sql) {
38
+ let count = 0;
39
+ let pending = false;
40
+ for (let i = 0; i < sql.length; i++) {
41
+ const c = sql[i];
42
+ if (c === "'" || c === "\"" || c === "`") {
43
+ const end = sql.indexOf(c, i + 1);
44
+ i = end === -1 ? sql.length : end;
45
+ pending = true;
46
+ } else if (c === "-" && sql[i + 1] === "-") {
47
+ const end = sql.indexOf("\n", i);
48
+ i = end === -1 ? sql.length : end;
49
+ } else if (c === "/" && sql[i + 1] === "*") {
50
+ const end = sql.indexOf("*/", i + 2);
51
+ i = end === -1 ? sql.length : end + 1;
52
+ } else if (c === ";") {
53
+ if (pending) count++;
54
+ pending = false;
55
+ } else if (!/\s/.test(c)) pending = true;
56
+ }
57
+ return count + (pending ? 1 : 0);
58
+ }
59
+ /**
60
+ * `reeval query [sql | view] [--json] [--schema] [--rebuild]`. With no statement it lists the views
61
+ * and tables; a bare name selects everything from that view or table.
62
+ */
63
+ async function queryCommand(ctx, args) {
64
+ const { openHistoryDb } = await import("./db-Cjj2ZsfQ.js");
65
+ const db = await openHistoryDb(ctx.config.root, ctx.config.history.dir, { rebuild: !!ctx.flags.rebuild });
66
+ try {
67
+ const { sync } = db;
68
+ ctx.err(`history.db: ${sync.runs} runs${sync.rebuilt ? ", rebuilt" : ""}${sync.added ? `, ${sync.added} read` : ""}${sync.removed ? `, ${sync.removed} removed` : ""}`);
69
+ const text = args.join(" ").trim();
70
+ const schema = db.schema();
71
+ if (!text || ctx.flags.schema) {
72
+ ctx.out(ctx.flags.json ? JSON.stringify(schema, null, 2) : formatSchema(schema, !text));
73
+ return 0;
74
+ }
75
+ let sql = text;
76
+ if (statementCount(text) > 1) throw new UsageError("reeval query runs one statement at a time; drop the extra ones after \";\".");
77
+ if (/^[A-Za-z_]\w*$/.test(text)) {
78
+ if (!schema.some((o) => o.name === text)) throw new UsageError(`reeval query: no view or table named "${text}". Views: ${schema.filter((o) => o.type === "view").map((o) => o.name).join(", ")}. Run reeval query --schema for every column.`);
79
+ sql = `SELECT * FROM "${text}"`;
80
+ }
81
+ const result = db.query(sql);
82
+ ctx.out(ctx.flags.json ? JSON.stringify(result.rows, null, 2) : formatRows(result));
83
+ return 0;
84
+ } finally {
85
+ db.close();
86
+ }
87
+ }
88
+ //#endregion
89
+ export { queryCommand as n, statementCount as r, formatRows as t };
90
+
91
+ //# sourceMappingURL=query-CFATHZmV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-CFATHZmV.js","names":[],"sources":["../src/query.ts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { n as queryCommand } from "./query-CFATHZmV.js";
2
+ export { queryCommand };