reeval 0.4.0 → 0.6.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 (222) hide show
  1. package/THIRD_PARTY_NOTICES.md +5 -5
  2. package/assets/package.json +1 -1
  3. package/assets/pnpm-lock.yaml +61 -66
  4. package/dist/{agent-C9dLMCM7.js → agent-BrqDHAx6.js} +5 -5
  5. package/dist/{agent-C9dLMCM7.js.map → agent-BrqDHAx6.js.map} +1 -1
  6. package/dist/{agent-M70OWyfG.js → agent-bHgHIPVD.js} +4 -4
  7. package/dist/{agent-M70OWyfG.js.map → agent-bHgHIPVD.js.map} +1 -1
  8. package/dist/{analysis-CxSCt1YY.js → analysis-BV3TCznv.js} +9 -5
  9. package/dist/analysis-BV3TCznv.js.map +1 -0
  10. package/dist/{assemble-BmVT26kf.js → assemble-BB_dcnfh.js} +41 -15
  11. package/dist/assemble-BB_dcnfh.js.map +1 -0
  12. package/dist/assemble-DcLLkwnB.js +2 -0
  13. package/dist/bridge/index.mjs +1 -1
  14. package/dist/capture-EvOaSXj_.js +2 -0
  15. package/dist/capture-tcMRp6ks.js +587 -0
  16. package/dist/capture-tcMRp6ks.js.map +1 -0
  17. package/dist/{cli-BdxFLEIc.js → cli-BM-qbqO_.js} +80 -56
  18. package/dist/cli-BM-qbqO_.js.map +1 -0
  19. package/dist/cli.js +2 -2
  20. package/dist/{command-BtcBitmY.js → command-BT9i1I5S.js} +15 -14
  21. package/dist/command-BT9i1I5S.js.map +1 -0
  22. package/dist/command-Bn_kbh3B.js +2 -0
  23. package/dist/{command-ByqQ-v-j.js → command-BpoZJVeI.js} +14 -14
  24. package/dist/{command-ByqQ-v-j.js.map → command-BpoZJVeI.js.map} +1 -1
  25. package/dist/{command-CIsO5xdR.js → command-DATlIXj1.js} +10 -10
  26. package/dist/{command-CIsO5xdR.js.map → command-DATlIXj1.js.map} +1 -1
  27. package/dist/{command-CQiFfn-C.js → command-DITkSzxp.js} +71 -21
  28. package/dist/command-DITkSzxp.js.map +1 -0
  29. package/dist/{commands-CPrrZ2mI.js → commands-C0SFWd1T.js} +9 -7
  30. package/dist/commands-C0SFWd1T.js.map +1 -0
  31. package/dist/{commands-D3Dxgh60.js → commands-CDty3r_G.js} +1 -1
  32. package/dist/{config-B93Csktg.js → config-Cy_vLUbw.js} +13 -9
  33. package/dist/config-Cy_vLUbw.js.map +1 -0
  34. package/dist/db-4nMvBFNX.js +2 -0
  35. package/dist/{db-SpvY8l1g.js → db-iskAs8Ox.js} +13 -10
  36. package/dist/db-iskAs8Ox.js.map +1 -0
  37. package/dist/{dist-C2k9IvL3.js → dist-Dmm3bnKA.js} +4 -4
  38. package/dist/{dist-C2k9IvL3.js.map → dist-Dmm3bnKA.js.map} +1 -1
  39. package/dist/{docker-uNaAGE2C.js → docker-B9wx9-KX.js} +8 -4
  40. package/dist/{docker-uNaAGE2C.js.map → docker-B9wx9-KX.js.map} +1 -1
  41. package/dist/{docker-C2YwD_dh.js → docker-Ctnty6xd.js} +2 -2
  42. package/dist/{docker-C2YwD_dh.js.map → docker-Ctnty6xd.js.map} +1 -1
  43. package/dist/{docker-Bv1ZC6V7.js → docker-Di4o89kZ.js} +1 -1
  44. package/dist/{doctor-COH-levb.js → doctor-BMUVi-gC.js} +17 -16
  45. package/dist/doctor-BMUVi-gC.js.map +1 -0
  46. package/dist/duration-JsJrIWXq.js +26 -0
  47. package/dist/duration-JsJrIWXq.js.map +1 -0
  48. package/dist/{egress-C7Obb71D.js → egress-3bdvDu1s.js} +86 -24
  49. package/dist/{egress-C7Obb71D.js.map → egress-3bdvDu1s.js.map} +1 -1
  50. package/dist/{environment-lDFQY2BF.js → environment-DiCljXMD.js} +43 -40
  51. package/dist/environment-DiCljXMD.js.map +1 -0
  52. package/dist/errors-yDAEwmZo.js +15 -0
  53. package/dist/errors-yDAEwmZo.js.map +1 -0
  54. package/dist/files-BM78_nnF.js +2 -0
  55. package/dist/{files-CMoTBEul.js → files-CITwkC4O.js} +2 -2
  56. package/dist/{files-CMoTBEul.js.map → files-CITwkC4O.js.map} +1 -1
  57. package/dist/files-C_CsTMtM.js +2 -0
  58. package/dist/{files-BLlrhU4-.js → files-Ca0d6Uq3.js} +2 -2
  59. package/dist/{files-BLlrhU4-.js.map → files-Ca0d6Uq3.js.map} +1 -1
  60. package/dist/{files-BO9P6msM.js → files-DGhQZaXT.js} +92 -8
  61. package/dist/files-DGhQZaXT.js.map +1 -0
  62. package/dist/files-vgLA9tcj.js +2 -0
  63. package/dist/{git-LJp55bkf.js → git-BzyBakoB.js} +2 -2
  64. package/dist/{git-LJp55bkf.js.map → git-BzyBakoB.js.map} +1 -1
  65. package/dist/{harness-BbMShUC-.js → harness-8-dnGNgT.js} +2 -2
  66. package/dist/{harness-BbMShUC-.js.map → harness-8-dnGNgT.js.map} +1 -1
  67. package/dist/harness.d.ts +1 -1
  68. package/dist/harness.js +1 -1
  69. package/dist/{header-sPQ9Lq2S.js → header-IE-uIvX0.js} +2 -2
  70. package/dist/{header-sPQ9Lq2S.js.map → header-IE-uIvX0.js.map} +1 -1
  71. package/dist/{images-Pph_XJ68.js → images-QBtOj-_q.js} +6 -6
  72. package/dist/{images-Pph_XJ68.js.map → images-QBtOj-_q.js.map} +1 -1
  73. package/dist/index.d.ts +8 -4
  74. package/dist/index.js +51 -84
  75. package/dist/index.js.map +1 -1
  76. package/dist/{init-BcYpzHXs.js → init-B47uIoHu.js} +7 -9
  77. package/dist/init-B47uIoHu.js.map +1 -0
  78. package/dist/init-DIAJuCs2.js +2 -0
  79. package/dist/{jiti-DWsGEgxD.js → jiti-BcJHCtrb.js} +2 -2
  80. package/dist/{jiti-DWsGEgxD.js.map → jiti-BcJHCtrb.js.map} +1 -1
  81. package/dist/{judge-D6wqgTDp.js → judge-7WjNdU9z.js} +5 -5
  82. package/dist/judge-7WjNdU9z.js.map +1 -0
  83. package/dist/judge.d.ts +1 -1
  84. package/dist/judge.js +1 -1
  85. package/dist/{matchers-DbFPZQgA.js → matchers-Bp-OH1vj.js} +2 -2
  86. package/dist/{matchers-DbFPZQgA.js.map → matchers-Bp-OH1vj.js.map} +1 -1
  87. package/dist/{model-CJ6USX6C.js → model-BeoRxCcJ.js} +1 -1
  88. package/dist/{model-f0wprGPm.js → model-Bv8uUZ07.js} +2 -2
  89. package/dist/{model-f0wprGPm.js.map → model-Bv8uUZ07.js.map} +1 -1
  90. package/dist/model-C_B5JrhL.js +2 -0
  91. package/dist/{model-DUZtNaYR.js → model-Cp6NoAT3.js} +8 -6
  92. package/dist/{model-DUZtNaYR.js.map → model-Cp6NoAT3.js.map} +1 -1
  93. package/dist/{model-ORtLm2UB.js → model-CtrJdFi6.js} +157 -7
  94. package/dist/model-CtrJdFi6.js.map +1 -0
  95. package/dist/{node-OXPxBD2N.js → node-Co7EXge0.js} +4 -3
  96. package/dist/{node-OXPxBD2N.js.map → node-Co7EXge0.js.map} +1 -1
  97. package/dist/{options-Ftb2gE01.js → options-DVB78W8X.js} +161 -58
  98. package/dist/options-DVB78W8X.js.map +1 -0
  99. package/dist/{patch-BxqggH-T.js → patch-CGCVipPu.js} +2 -2
  100. package/dist/{patch-BxqggH-T.js.map → patch-CGCVipPu.js.map} +1 -1
  101. package/dist/{paths-CBvm6pap.js → paths-BmR-7tx3.js} +7 -3
  102. package/dist/{paths-CBvm6pap.js.map → paths-BmR-7tx3.js.map} +1 -1
  103. package/dist/{plan-BkhLKrsN.js → plan-Bsge1_cc.js} +3 -3
  104. package/dist/{plan-BkhLKrsN.js.map → plan-Bsge1_cc.js.map} +1 -1
  105. package/dist/{preflight-D3cJETui.js → preflight-B5ue4TlX.js} +1 -1
  106. package/dist/{preflight-CuvY0o3B.js → preflight-BOstyJDX.js} +3 -3
  107. package/dist/{preflight-CuvY0o3B.js.map → preflight-BOstyJDX.js.map} +1 -1
  108. package/dist/{prepare-CVuTk5F9.js → prepare-ChIEi8hP.js} +2 -2
  109. package/dist/{prepare-BI9j2-H-.js → prepare-jpXfdH-9.js} +6 -5
  110. package/dist/prepare-jpXfdH-9.js.map +1 -0
  111. package/dist/{provenance-6n49wska.js → provenance-BTJCjEPg.js} +2 -2
  112. package/dist/{provenance-6n49wska.js.map → provenance-BTJCjEPg.js.map} +1 -1
  113. package/dist/{providers-BFapaM2D.js → providers-BJCxWIm4.js} +4 -4
  114. package/dist/{providers-BFapaM2D.js.map → providers-BJCxWIm4.js.map} +1 -1
  115. package/dist/{providers-Cay8pI0y.js → providers-DxVIaae1.js} +1 -1
  116. package/dist/query-BtLxk32J.js +2 -0
  117. package/dist/{query-CnstTDt8.js → query-Cpe659ni.js} +3 -3
  118. package/dist/{query-CnstTDt8.js.map → query-Cpe659ni.js.map} +1 -1
  119. package/dist/{questions-Cm321-Mo.js → questions-ZdT3JDyQ.js} +4 -4
  120. package/dist/{questions-Cm321-Mo.js.map → questions-ZdT3JDyQ.js.map} +1 -1
  121. package/dist/{results-D9GgBYw5.js → results-CiJzkjNI.js} +4 -4
  122. package/dist/{results-D9GgBYw5.js.map → results-CiJzkjNI.js.map} +1 -1
  123. package/dist/{root-Zeokqt3-.js → root-CvdRlRZX.js} +3 -3
  124. package/dist/{root-Zeokqt3-.js.map → root-CvdRlRZX.js.map} +1 -1
  125. package/dist/{sandbox-CO__l-i1.js → sandbox--ZXuscAZ.js} +4 -3
  126. package/dist/sandbox--ZXuscAZ.js.map +1 -0
  127. package/dist/sandbox.d.ts +1 -1
  128. package/dist/sandbox.js +1 -1
  129. package/dist/server-CN3lGbK-.js +2 -0
  130. package/dist/{server-DsmIrBzi.js → server-CSSXF89R.js} +9 -9
  131. package/dist/{server-DsmIrBzi.js.map → server-CSSXF89R.js.map} +1 -1
  132. package/dist/{source-DJ1c8jwe.js → source-BcHShRWU.js} +2 -2
  133. package/dist/{source-DJ1c8jwe.js.map → source-BcHShRWU.js.map} +1 -1
  134. package/dist/source-CxLRUqU2.js +2 -0
  135. package/dist/{src-B1OT_Zhf.js → src-B3J1D0nL.js} +51 -68
  136. package/dist/src-B3J1D0nL.js.map +1 -0
  137. package/dist/{src-V-iU5X9S.js → src-BRdoxjJS.js} +16 -16
  138. package/dist/{src-V-iU5X9S.js.map → src-BRdoxjJS.js.map} +1 -1
  139. package/dist/src-Ba3zMSdv.js +3 -0
  140. package/dist/{src-D0RdqpNb.js → src-BjVw2K4H.js} +4 -4
  141. package/dist/{src-D0RdqpNb.js.map → src-BjVw2K4H.js.map} +1 -1
  142. package/dist/src-BpVFmHqj.js +3 -0
  143. package/dist/src-CJONyPRm.js +3 -0
  144. package/dist/src-CLO4dUg7.js +3 -0
  145. package/dist/{src-BAiYD4eC.js → src-CdwJuMBO.js} +25 -5
  146. package/dist/src-CdwJuMBO.js.map +1 -0
  147. package/dist/{src-DWk0e7ix.js → src-Czhg5ONv.js} +54 -58
  148. package/dist/src-Czhg5ONv.js.map +1 -0
  149. package/dist/src-DQCjANtm.js +3 -0
  150. package/dist/{src-DfEAlC9s.js → src-Dk96a9w7.js} +4 -4
  151. package/dist/{src-DfEAlC9s.js.map → src-Dk96a9w7.js.map} +1 -1
  152. package/dist/{src-BmBFlEIe.js → src-DyQJdvp2.js} +8 -6
  153. package/dist/{src-BmBFlEIe.js.map → src-DyQJdvp2.js.map} +1 -1
  154. package/dist/{src-BC5FFzE8.js → src-a6y9cGkR.js} +1 -1
  155. package/dist/src-yCDQ7kpQ.js +4 -0
  156. package/dist/state-CeYoWFWx.js +2 -0
  157. package/dist/{state-DFbJrVi3.js → state-evRYxV_q.js} +17 -17
  158. package/dist/{state-DFbJrVi3.js.map → state-evRYxV_q.js.map} +1 -1
  159. package/dist/studio-app/assets/{index-B1Pf3LAT.css → index-CUx6GoL5.css} +1 -1
  160. package/dist/studio-app/assets/{index-BhorHbrj.js → index-WQPq5K3E.js} +9 -9
  161. package/dist/studio-app/index.html +2 -2
  162. package/dist/{summary-WR5qLj_z.js → summary-CIw18kb-.js} +6 -6
  163. package/dist/{summary-WR5qLj_z.js.map → summary-CIw18kb-.js.map} +1 -1
  164. package/dist/{summary-CEMYhzXm.js → summary-DTUCNA-v.js} +5 -3
  165. package/dist/summary-DTUCNA-v.js.map +1 -0
  166. package/dist/{tools-DN-cJcfi.js → tools-By2WuNxm.js} +3 -3
  167. package/dist/{tools-DN-cJcfi.js.map → tools-By2WuNxm.js.map} +1 -1
  168. package/dist/{types-B_CqVrOS.d.ts → types-C2Gl05_c.d.ts} +128 -13
  169. package/dist/types-C5vI3g1C.js.map +1 -1
  170. package/dist/view/index.d.ts +56 -5
  171. package/dist/view/index.js +5 -5
  172. package/dist/views-BEurSpHC.js +3 -0
  173. package/dist/{views-DNbUdW9d.js → views-BJ0i1Iuw.js} +4 -4
  174. package/dist/{views-DNbUdW9d.js.map → views-BJ0i1Iuw.js.map} +1 -1
  175. package/dist/{worker-entry-CJmG4hhE.js → worker-entry-mCctDzig.js} +6 -6
  176. package/dist/{worker-entry-CJmG4hhE.js.map → worker-entry-mCctDzig.js.map} +1 -1
  177. package/dist/{workspace-QtlJtRut.js → workspace-Bl1SiRQa.js} +4 -4
  178. package/dist/{workspace-QtlJtRut.js.map → workspace-Bl1SiRQa.js.map} +1 -1
  179. package/dist/{workspace-CmSp2MXO.js → workspace-CvAPfa8b.js} +1 -1
  180. package/package.json +7 -7
  181. package/dist/analysis-CxSCt1YY.js.map +0 -1
  182. package/dist/assemble-BmVT26kf.js.map +0 -1
  183. package/dist/assemble-DZiN1p_E.js +0 -2
  184. package/dist/cli-BdxFLEIc.js.map +0 -1
  185. package/dist/command-BtcBitmY.js.map +0 -1
  186. package/dist/command-CQiFfn-C.js.map +0 -1
  187. package/dist/command-DllipyoK.js +0 -2
  188. package/dist/commands-CPrrZ2mI.js.map +0 -1
  189. package/dist/config-B93Csktg.js.map +0 -1
  190. package/dist/db-DIE0bsNO.js +0 -2
  191. package/dist/db-SpvY8l1g.js.map +0 -1
  192. package/dist/doctor-COH-levb.js.map +0 -1
  193. package/dist/environment-lDFQY2BF.js.map +0 -1
  194. package/dist/errors-CSxfJ4qu.js +0 -11
  195. package/dist/errors-CSxfJ4qu.js.map +0 -1
  196. package/dist/files-BO9P6msM.js.map +0 -1
  197. package/dist/files-BRWmQJ-9.js +0 -2
  198. package/dist/files-BvHCFWgD.js +0 -2
  199. package/dist/files-Bwr8UW4b.js +0 -2
  200. package/dist/init-BcYpzHXs.js.map +0 -1
  201. package/dist/init-YS5qBRwV.js +0 -2
  202. package/dist/judge-D6wqgTDp.js.map +0 -1
  203. package/dist/model-CNoc8t2Y.js +0 -2
  204. package/dist/model-ORtLm2UB.js.map +0 -1
  205. package/dist/options-Ftb2gE01.js.map +0 -1
  206. package/dist/prepare-BI9j2-H-.js.map +0 -1
  207. package/dist/query-Br77sQYj.js +0 -2
  208. package/dist/sandbox-CO__l-i1.js.map +0 -1
  209. package/dist/server-D5Zq3I5N.js +0 -2
  210. package/dist/source-BgqURlel.js +0 -2
  211. package/dist/src-B1OT_Zhf.js.map +0 -1
  212. package/dist/src-BAiYD4eC.js.map +0 -1
  213. package/dist/src-Bi2Y3EkE.js +0 -3
  214. package/dist/src-C8WNyopo.js +0 -3
  215. package/dist/src-CYz-TreZ.js +0 -3
  216. package/dist/src-C_91Ln3Z.js +0 -4
  217. package/dist/src-DWk0e7ix.js.map +0 -1
  218. package/dist/src-gPJFzHcK.js +0 -3
  219. package/dist/src-gVzsO4_f.js +0 -3
  220. package/dist/state-Joc2b4qk.js +0 -2
  221. package/dist/summary-CEMYhzXm.js.map +0 -1
  222. package/dist/views-DnYbVkKg.js +0 -3
@@ -0,0 +1,587 @@
1
+ import { t as parseDuration } from "./duration-JsJrIWXq.js";
2
+ import { s as cacheDir } from "./root-CvdRlRZX.js";
3
+ import { l as sha256 } from "./ids-Bp6ut7ZD.js";
4
+ import { i as debugTrace, r as debugLog } from "./attempt-CGPV3BZY.js";
5
+ import { n as clip, r as formatDuration } from "./text-gEcKjAyp.js";
6
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
7
+ import { homedir, tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { createServer } from "node:net";
10
+ import { createHash } from "node:crypto";
11
+ import { spawn } from "node:child_process";
12
+ import { mkdir, writeFile } from "node:fs/promises";
13
+ import { crc32, deflateSync, inflateRawSync } from "node:zlib";
14
+ //#region src/capture/zip.ts
15
+ const LOCAL = 67324752;
16
+ /** Extracts a zip (store or deflate) into `files` keyed by posix path. */
17
+ function unzip(bytes) {
18
+ const buf = Buffer.from(bytes);
19
+ const files = /* @__PURE__ */ new Map();
20
+ let i = 0;
21
+ while (i + 30 <= buf.length) {
22
+ if (buf.readUInt32LE(i) !== LOCAL) break;
23
+ const method = buf.readUInt16LE(i + 8);
24
+ const comp = buf.readUInt32LE(i + 18);
25
+ const nameLen = buf.readUInt16LE(i + 26);
26
+ const extra = buf.readUInt16LE(i + 28);
27
+ const name = buf.toString("utf8", i + 30, i + 30 + nameLen);
28
+ const start = i + 30 + nameLen + extra;
29
+ const raw = buf.subarray(start, start + comp);
30
+ if (name.endsWith("/")) {
31
+ i = start + comp;
32
+ continue;
33
+ }
34
+ if (method === 0) files.set(name, Buffer.from(raw));
35
+ else if (method === 8) files.set(name, Buffer.from(inflateRawSync(raw)));
36
+ else throw new Error(`zip method ${method} is not supported (${name})`);
37
+ i = start + comp;
38
+ }
39
+ return files;
40
+ }
41
+ //#endregion
42
+ //#region src/capture/browser.ts
43
+ /** Pinned Chrome for Testing `chrome-headless-shell` build. */
44
+ const CHROME_VERSION = "140.0.7339.185";
45
+ const CHROME_NAME = "chrome-headless-shell";
46
+ function chromePlatform() {
47
+ if (process.platform === "darwin") return process.arch === "arm64" ? "mac-arm64" : "mac-x64";
48
+ if (process.platform === "win32") return "win64";
49
+ return "linux64";
50
+ }
51
+ function chromeUrl(platform) {
52
+ return `https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION}/${platform}/${CHROME_NAME}-${platform}.zip`;
53
+ }
54
+ function binaryName() {
55
+ return process.platform === "win32" ? `${CHROME_NAME}.exe` : CHROME_NAME;
56
+ }
57
+ async function downloadZip(url, onProgress, cacheLabel, signal) {
58
+ const res = await fetch(url, { signal });
59
+ if (!res.ok) throw new Error(`download failed: HTTP ${res.status}`);
60
+ const total = Number(res.headers.get("content-length")) || null;
61
+ const report = (received) => onProgress?.({
62
+ name: CHROME_NAME,
63
+ version: CHROME_VERSION,
64
+ bytes: total,
65
+ received,
66
+ cache: cacheLabel
67
+ });
68
+ report(0);
69
+ if (!res.body) return Buffer.from(await res.arrayBuffer());
70
+ const reader = res.body.getReader();
71
+ const chunks = [];
72
+ let received = 0;
73
+ let last = 0;
74
+ for (;;) {
75
+ const { done, value } = await reader.read();
76
+ if (done) break;
77
+ chunks.push(value);
78
+ received += value.length;
79
+ if (received - last >= 262144 || total && received === total) {
80
+ report(received);
81
+ last = received;
82
+ }
83
+ }
84
+ if (received !== last) report(received);
85
+ return Buffer.concat(chunks);
86
+ }
87
+ function extractBinary(zip, dest, platform) {
88
+ const files = unzip(zip);
89
+ const needle = `/${binaryName()}`;
90
+ const entry = [...files.entries()].find(([name]) => name.endsWith(needle) || name === binaryName() || name.endsWith(`\\${binaryName()}`));
91
+ if (!entry) {
92
+ const names = [...files.keys()].slice(0, 8).join(", ");
93
+ throw new Error(`zip has no ${binaryName()} (saw ${names || "nothing"})`);
94
+ }
95
+ const prefix = entry[0].slice(0, -binaryName().length);
96
+ mkdirSync(dest, { recursive: true });
97
+ for (const [name, data] of files) {
98
+ const rel = prefix && name.startsWith(prefix) ? name.slice(prefix.length) : name;
99
+ if (!rel || rel.endsWith("/")) continue;
100
+ const target = join(dest, ...rel.split("/"));
101
+ mkdirSync(join(target, ".."), { recursive: true });
102
+ writeFileSync(target, data);
103
+ }
104
+ const bin = join(dest, binaryName());
105
+ if (!existsSync(bin)) writeFileSync(bin, entry[1]);
106
+ if (process.platform !== "win32") chmodSync(bin, 493);
107
+ }
108
+ /**
109
+ * Returns the cached binary, downloading on a miss. `onProgress` runs only for a download.
110
+ */
111
+ async function ensureChrome(cacheRoot, options = { cacheLabel: cacheRoot }) {
112
+ const platform = chromePlatform();
113
+ const dest = join(cacheRoot, CHROME_NAME, CHROME_VERSION, platform);
114
+ const bin = join(dest, binaryName());
115
+ if (existsSync(bin)) return bin;
116
+ mkdirSync(join(cacheRoot, CHROME_NAME, CHROME_VERSION), { recursive: true });
117
+ const partial = `${dest}.${process.pid}.partial`;
118
+ rmSync(partial, {
119
+ recursive: true,
120
+ force: true
121
+ });
122
+ try {
123
+ extractBinary(await downloadZip(chromeUrl(platform), options.onProgress, options.cacheLabel, options.signal), partial, platform);
124
+ try {
125
+ renameSync(partial, dest);
126
+ } catch (error) {
127
+ rmSync(partial, {
128
+ recursive: true,
129
+ force: true
130
+ });
131
+ if (!existsSync(bin)) throw error;
132
+ }
133
+ } catch (error) {
134
+ rmSync(partial, {
135
+ recursive: true,
136
+ force: true
137
+ });
138
+ if (existsSync(bin)) return bin;
139
+ throw error;
140
+ }
141
+ return bin;
142
+ }
143
+ var Cdp = class {
144
+ #ws;
145
+ #next = 0;
146
+ #pending = /* @__PURE__ */ new Map();
147
+ #events = /* @__PURE__ */ new Map();
148
+ constructor(ws) {
149
+ this.#ws = ws;
150
+ ws.addEventListener("message", (ev) => {
151
+ const msg = JSON.parse(String(ev.data));
152
+ if (msg.id !== void 0) {
153
+ const p = this.#pending.get(msg.id);
154
+ if (!p) return;
155
+ this.#pending.delete(msg.id);
156
+ if (msg.error) p.reject(new Error(msg.error.message));
157
+ else p.resolve(msg.result);
158
+ return;
159
+ }
160
+ if (msg.method) for (const fn of this.#events.get(msg.method) ?? []) fn(msg);
161
+ });
162
+ }
163
+ on(method, fn) {
164
+ const list = this.#events.get(method) ?? [];
165
+ list.push(fn);
166
+ this.#events.set(method, list);
167
+ }
168
+ send(method, params) {
169
+ const id = ++this.#next;
170
+ this.#ws.send(JSON.stringify({
171
+ id,
172
+ method,
173
+ params
174
+ }));
175
+ return new Promise((resolve, reject) => this.#pending.set(id, {
176
+ resolve,
177
+ reject
178
+ }));
179
+ }
180
+ close() {
181
+ this.#ws.close();
182
+ }
183
+ };
184
+ function waitForPortFile(file, timeoutMs) {
185
+ const deadline = Date.now() + timeoutMs;
186
+ return new Promise((resolve, reject) => {
187
+ const tick = () => {
188
+ if (existsSync(file)) {
189
+ const line = readFileSync(file, "utf8").split(/\r?\n/)[0];
190
+ const port = Number(line);
191
+ if (port > 0) {
192
+ resolve(port);
193
+ return;
194
+ }
195
+ }
196
+ if (Date.now() > deadline) {
197
+ reject(/* @__PURE__ */ new Error("chrome-headless-shell did not open a DevTools port"));
198
+ return;
199
+ }
200
+ setTimeout(tick, 50);
201
+ };
202
+ tick();
203
+ });
204
+ }
205
+ function pickPageDebuggerUrl(targets) {
206
+ return targets.find((t) => t.webSocketDebuggerUrl && t.type !== "browser")?.webSocketDebuggerUrl;
207
+ }
208
+ async function pageDebuggerUrl(port, timeoutMs) {
209
+ const deadline = Date.now() + timeoutMs;
210
+ const listPages = async () => {
211
+ const res = await fetch(`http://127.0.0.1:${port}/json/list`);
212
+ if (!res.ok) return void 0;
213
+ return pickPageDebuggerUrl(await res.json());
214
+ };
215
+ for (;;) {
216
+ const url = await listPages();
217
+ if (url) return url;
218
+ if (Date.now() > deadline) break;
219
+ await new Promise((r) => setTimeout(r, 50));
220
+ }
221
+ const version = await (await fetch(`http://127.0.0.1:${port}/json/version`)).json();
222
+ if (!version.webSocketDebuggerUrl) throw new Error("chrome-headless-shell reported no DevTools URL");
223
+ const browser = await cdpConnect(version.webSocketDebuggerUrl, timeoutMs);
224
+ try {
225
+ await browser.send("Target.createTarget", { url: "about:blank" });
226
+ } finally {
227
+ browser.close();
228
+ }
229
+ const created = await listPages();
230
+ if (!created) throw new Error("chrome-headless-shell reported no page target");
231
+ return created;
232
+ }
233
+ async function cdpConnect(url, timeoutMs) {
234
+ const ws = new WebSocket(url);
235
+ await new Promise((resolve, reject) => {
236
+ const t = setTimeout(() => reject(/* @__PURE__ */ new Error("CDP websocket timed out")), timeoutMs);
237
+ ws.addEventListener("open", () => {
238
+ clearTimeout(t);
239
+ resolve();
240
+ });
241
+ ws.addEventListener("error", () => {
242
+ clearTimeout(t);
243
+ reject(/* @__PURE__ */ new Error("CDP websocket failed"));
244
+ });
245
+ });
246
+ return new Cdp(ws);
247
+ }
248
+ /** Navigate `url` and return a PNG from `Page.captureScreenshot`. */
249
+ async function screenshotWithChrome(bin, url, viewport, timeoutMs) {
250
+ const userData = join(tmpdir(), `reeval-chrome-${process.pid}-${Date.now()}`);
251
+ mkdirSync(userData, { recursive: true });
252
+ const child = spawn(bin, [
253
+ "--headless",
254
+ "--disable-gpu",
255
+ "--no-sandbox",
256
+ "--disable-dev-shm-usage",
257
+ "--hide-scrollbars",
258
+ "--remote-allow-origins=*",
259
+ `--window-size=${viewport.width},${viewport.height}`,
260
+ `--user-data-dir=${userData}`,
261
+ "--remote-debugging-port=0",
262
+ "about:blank"
263
+ ], { stdio: [
264
+ "ignore",
265
+ "ignore",
266
+ "pipe"
267
+ ] });
268
+ try {
269
+ const cdp = await cdpConnect(await pageDebuggerUrl(await waitForPortFile(join(userData, "DevToolsActivePort"), timeoutMs), timeoutMs), timeoutMs);
270
+ try {
271
+ await cdp.send("Page.enable");
272
+ await cdp.send("Emulation.setDeviceMetricsOverride", {
273
+ width: viewport.width,
274
+ height: viewport.height,
275
+ deviceScaleFactor: 1,
276
+ mobile: false
277
+ });
278
+ const loaded = new Promise((resolve) => {
279
+ cdp.on("Page.loadEventFired", () => resolve());
280
+ });
281
+ await cdp.send("Page.navigate", { url });
282
+ await Promise.race([loaded, new Promise((_, reject) => setTimeout(() => reject(/* @__PURE__ */ new Error("page load timed out")), timeoutMs))]);
283
+ const shot = await cdp.send("Page.captureScreenshot", { format: "png" });
284
+ if (!shot.data) throw new Error("Page.captureScreenshot returned no data");
285
+ return Buffer.from(shot.data, "base64");
286
+ } finally {
287
+ cdp.close();
288
+ }
289
+ } finally {
290
+ child.kill("SIGKILL");
291
+ rmSync(userData, {
292
+ recursive: true,
293
+ force: true
294
+ });
295
+ }
296
+ }
297
+ //#endregion
298
+ //#region src/capture/poll.ts
299
+ /** Any HTTP response, including 404, means something accepted the connection. */
300
+ async function pollHttp(url, timeoutMs, signal) {
301
+ const deadline = Date.now() + timeoutMs;
302
+ let last;
303
+ while (Date.now() < deadline) {
304
+ signal?.throwIfAborted();
305
+ const left = Math.max(1, deadline - Date.now());
306
+ try {
307
+ await fetch(url, { signal: AbortSignal.any([AbortSignal.timeout(Math.min(1e3, left)), ...signal ? [signal] : []]) });
308
+ return;
309
+ } catch (error) {
310
+ last = error;
311
+ if (signal?.aborted) throw error;
312
+ await new Promise((r) => setTimeout(r, 100));
313
+ }
314
+ }
315
+ throw last instanceof Error ? last : /* @__PURE__ */ new Error("poll timed out");
316
+ }
317
+ //#endregion
318
+ //#region src/capture/stub.ts
319
+ const PNG_SIG = Buffer.from([
320
+ 137,
321
+ 80,
322
+ 78,
323
+ 71,
324
+ 13,
325
+ 10,
326
+ 26,
327
+ 10
328
+ ]);
329
+ function chunk(type, data) {
330
+ const body = Buffer.concat([Buffer.from(type, "ascii"), data]);
331
+ const out = Buffer.alloc(12 + data.length);
332
+ out.writeUInt32BE(data.length, 0);
333
+ body.copy(out, 4);
334
+ out.writeUInt32BE(crc32(body), 8 + data.length);
335
+ return out;
336
+ }
337
+ /** A valid 1×1 PNG whose bytes are unique for `(name, port, path, viewport)`. */
338
+ function stubPng(name, port, path, viewport) {
339
+ const digest = createHash("sha256").update(`${name}\0${port}\0${path}\0${viewport.width}x${viewport.height}`).digest();
340
+ const ihdr = Buffer.alloc(13);
341
+ ihdr.writeUInt32BE(1, 0);
342
+ ihdr.writeUInt32BE(1, 4);
343
+ ihdr[8] = 8;
344
+ ihdr[9] = 2;
345
+ const scanline = Buffer.from([
346
+ 0,
347
+ digest[0] ?? 0,
348
+ digest[1] ?? 0,
349
+ digest[2] ?? 0
350
+ ]);
351
+ const idat = deflateSync(scanline);
352
+ const text = Buffer.concat([Buffer.from("Comment\0", "ascii"), Buffer.from(digest.toString("hex"), "ascii")]);
353
+ return Buffer.concat([
354
+ PNG_SIG,
355
+ chunk("IHDR", ihdr),
356
+ chunk("tEXt", text),
357
+ chunk("IDAT", idat),
358
+ chunk("IEND", Buffer.alloc(0))
359
+ ]);
360
+ }
361
+ //#endregion
362
+ //#region src/capture/index.ts
363
+ /** Default CSS pixels when the call and cascade omit `viewport`. */
364
+ const DEFAULT_VIEWPORT = {
365
+ width: 1280,
366
+ height: 720
367
+ };
368
+ const CAPTURE_NAME = /^[a-z0-9_-]+$/;
369
+ /** `~/.cache/reeval` when that's the resolved dir; otherwise the absolute path. */
370
+ function cacheLabel(dir = cacheDir()) {
371
+ const home = homedir();
372
+ if (dir.replaceAll("\\", "/") === join(home, ".cache", "reeval").replaceAll("\\", "/")) return "~/.cache/reeval";
373
+ return dir;
374
+ }
375
+ /**
376
+ * Env is named first when both refuse. `undefined` means the host binary is allowed
377
+ * (the fake tier still never downloads).
378
+ */
379
+ function refusedBrowser(capture) {
380
+ if (process.env.REEVAL_CAPTURE_BROWSER === "0") return "c.capture() is refused: REEVAL_CAPTURE_BROWSER=0";
381
+ if (capture.browser === false) return "c.capture() is refused: capture.browser is false";
382
+ }
383
+ function resolveCaptureTarget(target) {
384
+ if (typeof target === "number") {
385
+ if (!(Number.isInteger(target) && target >= 1 && target <= 65535)) throw new Error(`c.capture() port is a container port from 1 to 65535 (got ${String(target)})`);
386
+ return target;
387
+ }
388
+ if (target !== null && typeof target === "object" && typeof target.port === "number" && typeof target.kill === "function") return resolveCaptureTarget(target.port);
389
+ throw new Error("c.capture() needs a port or a ServeHandle as the first argument");
390
+ }
391
+ /** Artifact name from a path: `/login` → `login`, `/foo/bar` → `foo-bar`, `/` → `root`. */
392
+ function nameFromPath(path) {
393
+ return (path.split(/[?#]/, 1)[0] ?? "").replaceAll("\\", "/").split("/").filter(Boolean).join("-").toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "root";
394
+ }
395
+ function resolveCaptureCall(target, call, cascade) {
396
+ if (call && Object.hasOwn(call, "port")) throw new Error("c.capture() takes the port as the first argument, not in the options");
397
+ const port = resolveCaptureTarget(target);
398
+ const path = call?.path || "/";
399
+ const name = call?.name ?? nameFromPath(path);
400
+ checkCaptureName(name);
401
+ return {
402
+ port,
403
+ name,
404
+ path,
405
+ viewport: call?.viewport ?? cascade.viewport ?? DEFAULT_VIEWPORT,
406
+ timeoutMs: parseDuration(call?.timeout ?? cascade.timeout ?? "60s")
407
+ };
408
+ }
409
+ function checkCaptureName(name) {
410
+ if (!CAPTURE_NAME.test(name)) throw new Error(`c.capture() name must match [a-z0-9_-]+ (got ${JSON.stringify(name)})`);
411
+ }
412
+ /** A free host port. Closed before the promise resolves, so the caller can bind it. */
413
+ function allocatePort() {
414
+ return new Promise((resolve, reject) => {
415
+ const server = createServer();
416
+ server.once("error", reject);
417
+ server.listen(0, "127.0.0.1", () => {
418
+ const addr = server.address();
419
+ const port = typeof addr === "object" && addr ? addr.port : 0;
420
+ server.close((error) => error ? reject(error) : resolve(port));
421
+ });
422
+ });
423
+ }
424
+ /** Origin plus a path (`/login`), without a doubled slash. */
425
+ function pageUrl(origin, path) {
426
+ const base = origin.endsWith("/") ? origin : `${origin}/`;
427
+ const rel = path.startsWith("/") ? path.slice(1) : path;
428
+ return new URL(rel, base).href;
429
+ }
430
+ //#endregion
431
+ //#region src/attempt/checks.ts
432
+ /** Runs a check or setup step with the checks' brokered secrets swapped in (see brokerPhases). */
433
+ const asCheck = (a, fn) => a.phases ? a.phases.checks(fn) : fn();
434
+ function requireSandbox(a, who = "c.exec() or c.readFile()") {
435
+ if (!a.sandbox) throw new Error(`No sandbox yet: call c.send() or await c.sandbox() before ${who}`);
436
+ return a.sandbox;
437
+ }
438
+ /**
439
+ * Phase 4, checks: `c.exec` runs with the checks' variables and secrets, each run recorded and
440
+ * timed; `c.readFile` reads the sandbox as is.
441
+ */
442
+ function createChecks(a) {
443
+ const checkEnv = () => a.env?.checkVars ?? {};
444
+ const execForeground = async (command) => {
445
+ const box = requireSandbox(a);
446
+ const start = performance.now();
447
+ a.report({
448
+ kind: "check-start",
449
+ command
450
+ });
451
+ const r = await a.timed("checksMs", () => asCheck(a, () => box.exec(command, {
452
+ signal: a.signal,
453
+ env: checkEnv()
454
+ })));
455
+ const durationMs = Math.round(performance.now() - start);
456
+ a.record.checks.push({
457
+ command,
458
+ ...r,
459
+ durationMs
460
+ });
461
+ debugLog("check", `$ ${clip(command, 160)} → exit ${r.exitCode} · ${formatDuration(durationMs)}`);
462
+ debugTrace("check", "output", {
463
+ command,
464
+ ...r,
465
+ durationMs
466
+ }, `check output: ${clip(command, 80)}`);
467
+ a.report({
468
+ kind: "check-end",
469
+ command,
470
+ exitCode: r.exitCode,
471
+ ms: durationMs
472
+ });
473
+ return r;
474
+ };
475
+ async function exec(command, options) {
476
+ if (options?.background) {
477
+ const { startBackground } = await import("./capture-EvOaSXj_.js");
478
+ return startBackground(a, command);
479
+ }
480
+ return execForeground(command);
481
+ }
482
+ const readFile = (path) => requireSandbox(a).readFile(path);
483
+ return {
484
+ exec,
485
+ readFile
486
+ };
487
+ }
488
+ //#endregion
489
+ //#region src/attempt/capture.ts
490
+ const BG_LOG = "/tmp/reeval-bg.log";
491
+ /** Starts `command` without waiting for exit. Teardown kills it if the eval didn't. */
492
+ async function startBackground(a, command, extraEnv = {}) {
493
+ const box = requireSandbox(a);
494
+ const wrapped = `${command} >${BG_LOG} 2>&1 & echo $!`;
495
+ const r = await asCheck(a, () => box.exec(wrapped, {
496
+ signal: a.signal,
497
+ env: {
498
+ ...a.env?.checkVars ?? {},
499
+ ...extraEnv
500
+ }
501
+ }));
502
+ const pid = r.stdout.trim().split(/\s+/).at(-1) ?? "";
503
+ if (!/^\d+$/.test(pid)) throw new Error(`c.exec({ background: true }) did not start (no pid):\n${(r.stderr || r.stdout).trim()}`);
504
+ let killed = false;
505
+ const handle = { async kill() {
506
+ if (killed) return;
507
+ killed = true;
508
+ const win = a.spec.sandbox.kind === "fake" && process.platform === "win32" ? `; wp=$(tr -d '\\r\\n' < /proc/${pid}/winpid 2>/dev/null) && taskkill /F /PID "$wp" >/dev/null 2>&1 || true` : "";
509
+ await box.exec(`kill -9 ${pid} 2>/dev/null || true${win}`).catch(() => {});
510
+ } };
511
+ a.backgrounds.push(handle);
512
+ return handle;
513
+ }
514
+ async function serveCommand(a, command, port) {
515
+ const bound = port ?? await allocatePort();
516
+ return {
517
+ ...await startBackground(a, command, { PORT: String(bound) }),
518
+ port: bound
519
+ };
520
+ }
521
+ async function capturePage(a, target, call) {
522
+ const refused = refusedBrowser(a.spec.capture);
523
+ if (refused) throw new Error(refused);
524
+ const resolved = resolveCaptureCall(target, call, a.spec.capture);
525
+ if (a.captureNames.has(resolved.name)) throw new Error(`c.capture() reused the name "${resolved.name}"`);
526
+ const box = requireSandbox(a, "c.capture()");
527
+ if (!box.getPortEndpoint) throw new Error("c.capture() needs a sandbox that can tunnel a port");
528
+ const { url: origin } = await box.getPortEndpoint({
529
+ port: resolved.port,
530
+ protocol: "http"
531
+ });
532
+ try {
533
+ await pollHttp(pageUrl(origin, "/"), resolved.timeoutMs, a.signal);
534
+ } catch {
535
+ throw new Error(`nothing listening on port ${resolved.port}`);
536
+ }
537
+ a.captureNames.add(resolved.name);
538
+ const png = a.spec.sandbox.kind === "fake" ? stubPng(resolved.name, resolved.port, resolved.path, resolved.viewport) : await shot(a, pageUrl(origin, resolved.path), resolved.viewport, resolved.timeoutMs);
539
+ const digest = sha256(png);
540
+ const file = {
541
+ path: `artifacts/${resolved.name}.png`,
542
+ sha256: digest,
543
+ bytes: png.length
544
+ };
545
+ a.record.artifacts = a.record.artifacts ?? [];
546
+ a.record.artifacts.push({
547
+ name: resolved.name,
548
+ mediaType: "image/png",
549
+ sha256: digest,
550
+ bytes: png.length,
551
+ capture: {
552
+ port: resolved.port,
553
+ path: resolved.path,
554
+ viewport: resolved.viewport
555
+ }
556
+ });
557
+ a.artifactBlobs.set(resolved.name, png);
558
+ return {
559
+ name: resolved.name,
560
+ port: resolved.port,
561
+ path: resolved.path,
562
+ viewport: resolved.viewport,
563
+ file
564
+ };
565
+ }
566
+ async function shot(a, url, viewport, timeoutMs) {
567
+ const cache = cacheDir();
568
+ return screenshotWithChrome(await ensureChrome(cache, {
569
+ cacheLabel: cacheLabel(cache),
570
+ signal: a.signal,
571
+ onProgress: (p) => a.report({
572
+ kind: "browser-download",
573
+ ...p
574
+ })
575
+ }), url, viewport, timeoutMs);
576
+ }
577
+ /** Writes PNG sidecars next to the staging eval JSON so redact never sees the bytes. */
578
+ async function writeCaptureSidecars(stagingDir, recordFile, blobs) {
579
+ if (blobs.size === 0) return;
580
+ const dir = join(stagingDir, "evals", recordFile.replace(/\.json$/, ".artifacts"));
581
+ await mkdir(dir, { recursive: true });
582
+ for (const [name, png] of blobs) await writeFile(join(dir, `${name}.png`), png);
583
+ }
584
+ //#endregion
585
+ export { asCheck as a, writeCaptureSidecars as i, serveCommand as n, createChecks as o, startBackground as r, capturePage as t };
586
+
587
+ //# sourceMappingURL=capture-tcMRp6ks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-tcMRp6ks.js","names":[],"sources":["../src/capture/zip.ts","../src/capture/browser.ts","../src/capture/poll.ts","../src/capture/stub.ts","../src/capture/index.ts","../src/attempt/checks.ts","../src/attempt/capture.ts"],"mappings":"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"}