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,619 @@
1
+ import { t as UsageError } from "./errors-CSxfJ4qu.js";
2
+ import { g as plannedSecrets } from "./environment-Mz7wvrtD.js";
3
+ import { a as providerServedModel, i as providerModelResponses, n as providerEndpoints, r as providerHosts, s as resolveOpenCodeProvider } from "./opencode-providers-DZuD_oYt.js";
4
+ import { t as InfraError } from "./types-C5vI3g1C.js";
5
+ import { D as HARNESS_HOSTS, E as DOCKER_EGRESS, O as PACKAGE_HOSTS, et as run, tt as shellQuote } from "./src-DwwiVLqv.js";
6
+ import { existsSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { dirname, join, win32 } from "node:path";
9
+ import { randomUUID } from "node:crypto";
10
+ import { spawn } from "node:child_process";
11
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
12
+ //#region src/harness/agents.ts
13
+ const WEB_EVENTS = {
14
+ webSearch: "web-search",
15
+ webFetch: "web-fetch"
16
+ };
17
+ /** `harnessMetadata.cursorSdk.unreportedTools` as transcript event types. */
18
+ function cursorUnreported(harnessMetadata) {
19
+ const tools = harnessMetadata?.cursorSdk?.unreportedTools;
20
+ return Array.isArray(tools) ? tools.flatMap((t) => WEB_EVENTS[t] ? [WEB_EVENTS[t]] : []) : [];
21
+ }
22
+ /** A Gemini API key's only request: `POST /v1beta/models/<model>:streamGenerateContent`. */
23
+ const GEMINI_ENDPOINTS = [{
24
+ host: "generativelanguage.googleapis.com",
25
+ path: { regex: "^/v1beta/models/[^/]+:streamGenerateContent$" },
26
+ method: ["POST"]
27
+ }];
28
+ /** Goose's: the model call, and the model list it fetches with the key at the start of a turn. */
29
+ const GOOSE_ENDPOINTS = [...GEMINI_ENDPOINTS, {
30
+ host: "generativelanguage.googleapis.com",
31
+ path: { regex: "^/v1beta/models$" },
32
+ method: ["GET"]
33
+ }];
34
+ /** The model a Gemini API request names in its URL. */
35
+ const geminiServedModel = ({ host, path }) => host === "generativelanguage.googleapis.com" ? /^\/v1beta\/models\/([^/:]+):streamGenerateContent$/.exec(path)?.[1] : void 0;
36
+ /** Cursor's key exchange: the only request the Cursor SDK sends the API key on. */
37
+ const CURSOR_EXCHANGE = {
38
+ host: "api2.cursor.sh",
39
+ path: { exact: "/auth/exchange_user_api_key" },
40
+ method: ["POST"]
41
+ };
42
+ /** What Codex sends the key on: the Responses API. */
43
+ const OPENAI_ENDPOINTS = [{
44
+ host: "api.openai.com",
45
+ path: { exact: "/v1/responses" },
46
+ method: ["POST"]
47
+ }];
48
+ /**
49
+ * The model the Responses API says served a request, from its response: the dated snapshot, and
50
+ * the reasoning effort Codex resolved for it, e.g. `gpt-5.4-mini-2026-03-17[effort=medium]`.
51
+ */
52
+ const openaiServedModel = ({ host, path, responseModel, responseEffort }) => host === "api.openai.com" && path === "/v1/responses" && responseModel ? `${responseModel}${responseEffort ? `[effort=${responseEffort}]` : ""}` : void 0;
53
+ /**
54
+ * OpenCode on the model's provider (`anthropic/claude-haiku-4-5` is Anthropic's): its key, the
55
+ * requests OpenCode sends it on, its hosts plus Exa's for web search, and the served model from
56
+ * the URL (Gemini's API, Bedrock's) or the response body. Bedrock's hosts are its `AWS_REGION`'s.
57
+ */
58
+ function opencodeForModel(model, env = process.env) {
59
+ const resolved = resolveOpenCodeProvider(model, env);
60
+ if ("error" in resolved) throw new InfraError(`opencode(): ${resolved.error}`);
61
+ const { provider } = resolved;
62
+ const modelResponses = providerModelResponses(provider);
63
+ return {
64
+ credential: provider.env,
65
+ endpoints: providerEndpoints(provider),
66
+ ...modelResponses.length ? { modelResponses } : {},
67
+ servedModel: (request) => providerServedModel(provider, request),
68
+ hosts: [...providerHosts(provider), "mcp.exa.ai"]
69
+ };
70
+ }
71
+ /**
72
+ * The variables besides its key that OpenCode's provider takes from the host, as they are:
73
+ * Bedrock's `AWS_REGION` (default `us-east-1`); none for most providers.
74
+ */
75
+ function opencodeVars(model, env = process.env) {
76
+ const resolved = resolveOpenCodeProvider(model, env);
77
+ if ("error" in resolved) throw new InfraError(`opencode(): ${resolved.error}`);
78
+ return resolved.vars;
79
+ }
80
+ /** Codex's `config.toml` `[mcp_servers]` shape. */
81
+ function codexMcpServers(servers) {
82
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => {
83
+ if (s.transport === "sse") throw new InfraError(`Codex has no SSE MCP transport, so it can't use the ${name} server (mcp.sse): use mcp.http or mcp.stdio`);
84
+ return s.transport === "stdio" ? [name, {
85
+ command: s.command,
86
+ args: s.args,
87
+ env: s.env ?? {}
88
+ }] : [name, {
89
+ url: s.url,
90
+ http_headers: s.headers ?? {}
91
+ }];
92
+ }));
93
+ }
94
+ /** The `.mcp.json` shape. */
95
+ function claudeMcpServers(servers) {
96
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => s.transport === "stdio" ? [name, {
97
+ type: "stdio",
98
+ command: s.command,
99
+ args: s.args,
100
+ env: s.env
101
+ }] : [name, {
102
+ type: s.transport,
103
+ url: s.url,
104
+ headers: s.headers
105
+ }]));
106
+ }
107
+ /** The Antigravity CLI's `mcp_config.json` shape: remote servers take `serverUrl`, not `url`. */
108
+ function antigravityMcpServers(servers) {
109
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => s.transport === "stdio" ? [name, {
110
+ command: s.command,
111
+ args: s.args,
112
+ env: s.env
113
+ }] : [name, {
114
+ serverUrl: s.url,
115
+ headers: s.headers
116
+ }]));
117
+ }
118
+ /**
119
+ * OpenCode's config shape (its `mcp.servers`), which the adapter sets `codemode: false` on;
120
+ * 2.0.18 has no SSE transport.
121
+ */
122
+ function opencodeMcpServers(servers) {
123
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => {
124
+ if (s.transport === "sse") throw new InfraError(`OpenCode has no SSE MCP transport, so it can't use the ${name} server (mcp.sse): use mcp.http or mcp.stdio`);
125
+ return s.transport === "stdio" ? [name, {
126
+ type: "local",
127
+ command: [s.command, ...s.args],
128
+ environment: s.env ?? {}
129
+ }] : [name, {
130
+ type: "remote",
131
+ url: s.url,
132
+ headers: s.headers ?? {},
133
+ oauth: false
134
+ }];
135
+ }));
136
+ }
137
+ /** Goose's extension shape (its `config.yaml`); it has no SSE transport. */
138
+ function gooseMcpServers(servers) {
139
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => {
140
+ if (s.transport === "sse") throw new InfraError(`Goose has no SSE MCP transport, so it can't use the ${name} server (mcp.sse): use mcp.http or mcp.stdio`);
141
+ return s.transport === "stdio" ? [name, {
142
+ type: "stdio",
143
+ cmd: s.command,
144
+ args: s.args,
145
+ envs: s.env ?? {}
146
+ }] : [name, {
147
+ type: "streamable_http",
148
+ uri: s.url,
149
+ headers: s.headers ?? {}
150
+ }];
151
+ }));
152
+ }
153
+ /** The Cursor SDK's `McpServerConfig` shape. */
154
+ function cursorMcpServers(servers) {
155
+ return Object.fromEntries(Object.entries(servers).map(([name, s]) => s.transport === "stdio" ? [name, {
156
+ type: "stdio",
157
+ command: s.command,
158
+ args: s.args,
159
+ env: s.env
160
+ }] : [name, {
161
+ type: s.transport,
162
+ url: s.url,
163
+ headers: s.headers
164
+ }]));
165
+ }
166
+ /** Where each agent with an image reads rules and skills. */
167
+ const LAYOUTS = {
168
+ cursor: {
169
+ rulesFile: "AGENTS.md",
170
+ workspaceSkillDir: ".cursor/skills",
171
+ harnessSkillDir: ".agents/skills"
172
+ },
173
+ "claude-code": {
174
+ rulesFile: "CLAUDE.md",
175
+ workspaceSkillDir: ".claude/skills",
176
+ harnessSkillDir: ".claude/skills"
177
+ },
178
+ antigravity: {
179
+ rulesFile: "AGENTS.md",
180
+ workspaceSkillDir: ".agents/skills",
181
+ harnessSkillDir: ".gemini/config/skills"
182
+ },
183
+ opencode: {
184
+ rulesFile: "AGENTS.md",
185
+ workspaceSkillDir: ".opencode/skills",
186
+ harnessSkillDir: ".config/opencode/skills"
187
+ },
188
+ goose: {
189
+ rulesFile: "AGENTS.md",
190
+ workspaceSkillDir: ".goose/skills",
191
+ harnessSkillDir: ".ai-sdk-harness/.harness-bootstrap/goose/implementation/home/.config/goose/skills"
192
+ },
193
+ pi: {
194
+ rulesFile: "AGENTS.md",
195
+ workspaceSkillDir: ".pi/skills",
196
+ harnessSkillDir: ".pi/agent/skills"
197
+ },
198
+ codex: {
199
+ rulesFile: "AGENTS.md",
200
+ workspaceSkillDir: ".agents/skills",
201
+ harnessSkillDir: ".agents/skills"
202
+ }
203
+ };
204
+ /** Every real agent reeval can drive, by harness kind. */
205
+ const AGENTS = {
206
+ cursor: {
207
+ ...LAYOUTS.cursor,
208
+ name: "Cursor",
209
+ factory: "cursor",
210
+ credential: "CURSOR_API_KEY",
211
+ endpoints: [CURSOR_EXCHANGE],
212
+ tokens: {
213
+ endpoint: CURSOR_EXCHANGE,
214
+ fields: ["accessToken", "refreshToken"],
215
+ hosts: ["cursor.sh", "*.cursor.sh"]
216
+ },
217
+ unreported: cursorUnreported,
218
+ mcpServers: cursorMcpServers,
219
+ adapter: async ({ auth, mcpServers, descriptor }) => (await import("./src-daS0wKH2.js")).createCursorSdk({
220
+ auth,
221
+ ...mcpServers ? { mcpServers } : {},
222
+ ...descriptor.kind === "cursor" && descriptor.params ? { modelParams: descriptor.params } : {},
223
+ requireCredentialBrokering: true
224
+ })
225
+ },
226
+ "claude-code": {
227
+ ...LAYOUTS["claude-code"],
228
+ name: "Claude Code",
229
+ factory: "claudeCode",
230
+ credential: "ANTHROPIC_API_KEY",
231
+ endpoints: [
232
+ {
233
+ host: "api.anthropic.com",
234
+ path: { exact: "/v1/messages" },
235
+ method: ["POST"]
236
+ },
237
+ {
238
+ host: "api.anthropic.com",
239
+ path: { exact: "/v1/messages/count_tokens" },
240
+ method: ["POST"]
241
+ },
242
+ {
243
+ host: "api.anthropic.com",
244
+ path: { exact: "/api/claude_code/settings" },
245
+ method: ["GET"]
246
+ },
247
+ {
248
+ host: "api.anthropic.com",
249
+ path: { exact: "/api/claude_code/policy_limits" },
250
+ method: ["GET"]
251
+ }
252
+ ],
253
+ mcpServers: claudeMcpServers,
254
+ adapter: async ({ auth, mcpServers }) => (await import("./dist-BZXYHN2X.js")).createClaudeCode({
255
+ auth,
256
+ ...mcpServers ? { mcpServers } : {},
257
+ env: {
258
+ IS_SANDBOX: "1",
259
+ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
260
+ }
261
+ })
262
+ },
263
+ antigravity: {
264
+ ...LAYOUTS.antigravity,
265
+ name: "Antigravity",
266
+ factory: "antigravity",
267
+ credential: "GEMINI_API_KEY",
268
+ endpoints: GEMINI_ENDPOINTS,
269
+ expectedBlocked: {
270
+ hosts: ["play.googleapis.com", "antigravity-unleash.goog"],
271
+ why: "Antigravity's telemetry and feature flags, which its CLI sends even with telemetry off"
272
+ },
273
+ servedModel: geminiServedModel,
274
+ mcpServers: antigravityMcpServers,
275
+ adapter: async ({ auth, mcpServers }) => (await import("./src-W9g-y5X5.js")).createAntigravity({
276
+ auth,
277
+ ...mcpServers ? { mcpServers } : {},
278
+ requireCredentialBrokering: true
279
+ })
280
+ },
281
+ opencode: {
282
+ ...LAYOUTS.opencode,
283
+ name: "OpenCode",
284
+ factory: "opencode",
285
+ credential: "GOOGLE_GENERATIVE_AI_API_KEY",
286
+ endpoints: GEMINI_ENDPOINTS,
287
+ servedModel: geminiServedModel,
288
+ forModel: opencodeForModel,
289
+ mcpServers: opencodeMcpServers,
290
+ adapter: async ({ auth, mcpServers, descriptor }) => (await import("./src-DEgff9Z7.js")).createOpenCode({
291
+ auth,
292
+ model: descriptor.model,
293
+ vars: opencodeVars(descriptor.model),
294
+ ...mcpServers ? { mcpServers } : {},
295
+ requireCredentialBrokering: true
296
+ })
297
+ },
298
+ goose: {
299
+ ...LAYOUTS.goose,
300
+ name: "Goose",
301
+ factory: "goose",
302
+ credential: "GOOGLE_GENERATIVE_AI_API_KEY",
303
+ endpoints: GOOSE_ENDPOINTS,
304
+ servedModel: geminiServedModel,
305
+ mcpServers: gooseMcpServers,
306
+ adapter: async ({ auth, mcpServers, descriptor }) => (await import("./src-C-LHyTSV.js")).createGoose({
307
+ auth: { GOOGLE_API_KEY: auth.GOOGLE_GENERATIVE_AI_API_KEY ?? "" },
308
+ model: descriptor.model,
309
+ ...mcpServers ? { mcpServers } : {},
310
+ requireCredentialBrokering: true
311
+ })
312
+ },
313
+ pi: {
314
+ ...LAYOUTS.pi,
315
+ name: "pi",
316
+ factory: "pi",
317
+ credential: "GOOGLE_GENERATIVE_AI_API_KEY",
318
+ endpoints: GEMINI_ENDPOINTS,
319
+ servedModel: geminiServedModel,
320
+ mcpServers: (servers) => {
321
+ const names = Object.keys(servers);
322
+ throw new InfraError(`pi has no MCP client, so it can't use the ${names.join(", ")} MCP server${names.length === 1 ? "" : "s"}`);
323
+ },
324
+ adapter: async ({ auth }) => (await import("./src-BDwSuyIo.js")).createPi({
325
+ auth: { GEMINI_API_KEY: auth.GOOGLE_GENERATIVE_AI_API_KEY ?? "" },
326
+ requireCredentialBrokering: true
327
+ })
328
+ },
329
+ codex: {
330
+ ...LAYOUTS.codex,
331
+ name: "Codex",
332
+ factory: "codex",
333
+ credential: "OPENAI_API_KEY",
334
+ endpoints: OPENAI_ENDPOINTS,
335
+ modelResponses: OPENAI_ENDPOINTS,
336
+ servedModel: openaiServedModel,
337
+ mcpServers: codexMcpServers,
338
+ adapter: async ({ auth, mcpServers }) => (await import("./src-55j1zNHH.js")).createCodex({
339
+ auth,
340
+ ...mcpServers ? { mcpServers } : {},
341
+ requireCredentialBrokering: true
342
+ })
343
+ }
344
+ };
345
+ /** The harness of a config that names none: Cursor, on Cursor's own model. */
346
+ const DEFAULT_HARNESS = {
347
+ kind: "cursor",
348
+ model: "composer-2.5"
349
+ };
350
+ /** A harness to name in messages that ask for one. */
351
+ const HARNESS_EXAMPLE = "cursor({ model: 'composer-2.5' })";
352
+ const isAgentKind = (kind) => typeof kind === "string" && Object.hasOwn(AGENTS, kind);
353
+ /**
354
+ * Why a harness's agent can't take the environment's MCP servers (pi takes none; Goose, OpenCode
355
+ * and Codex no `mcp.sse`), in the agent's own words, so the plan refuses them before any attempt
356
+ * starts; undefined when it can.
357
+ */
358
+ function refusedMcp(harness, layers) {
359
+ if (!isAgentKind(harness.kind)) return void 0;
360
+ const servers = /* @__PURE__ */ new Map();
361
+ for (const { spec } of layers) for (const [name, server] of Object.entries(spec.mcp ?? {})) servers.set(name, server.transport === "stdio" ? {
362
+ ...server,
363
+ env: {}
364
+ } : {
365
+ ...server,
366
+ headers: {}
367
+ });
368
+ if (servers.size === 0) return void 0;
369
+ try {
370
+ AGENTS[harness.kind].mcpServers(Object.fromEntries(servers));
371
+ return;
372
+ } catch (error) {
373
+ if (error instanceof InfraError) return error.message;
374
+ throw error;
375
+ }
376
+ }
377
+ /** A real agent's catalog entry, with what its model's provider decides. */
378
+ function agentFor(h) {
379
+ const agent = AGENTS[h.kind];
380
+ return agent.forModel ? {
381
+ ...agent,
382
+ ...agent.forModel(h.model)
383
+ } : agent;
384
+ }
385
+ /** The catalog entry for a harness's agent; undefined for the fake harness. */
386
+ const agentOf = (h) => h.kind === "fake" ? void 0 : agentFor(h);
387
+ /** The host variable a harness authenticates with; undefined for the fake harness. */
388
+ const credentialOf = (h) => agentOf(h)?.credential;
389
+ /** The fake agent's own layout. */
390
+ const FAKE_LAYOUT = {
391
+ rulesFile: "AGENTS.md",
392
+ workspaceSkillDir: ".agents/skills",
393
+ harnessSkillDir: ".agents/skills"
394
+ };
395
+ /** Where a harness's agent reads rules and skills; a fake one with `layout` mimics that agent. */
396
+ function layoutOf(descriptor) {
397
+ if (descriptor.kind !== "fake") return LAYOUTS[descriptor.kind];
398
+ return descriptor.layout ? LAYOUTS[descriptor.layout] : FAKE_LAYOUT;
399
+ }
400
+ /** The hosts a harness's agent is known to try; a fake agent with `layout` expects that agent's. */
401
+ function expectedBlockedFor(descriptor) {
402
+ const kind = descriptor.kind === "fake" ? descriptor.layout : descriptor.kind;
403
+ return kind ? AGENTS[kind].expectedBlocked : void 0;
404
+ }
405
+ /**
406
+ * How the APIs behind the harnesses say they refused a key: an HTTP 401, Anthropic's and OpenAI's
407
+ * wording, Google's (which answers 400), and OpenCode's for any provider's 401 or 403. A bare 403 isn't here: the gateway and MCP servers send
408
+ * those for reasons that have nothing to do with the harness's key.
409
+ */
410
+ const REFUSED_KEY = /\bHTTP 401\b|\b401\b.{0,40}\bunauthori[sz]ed\b|\bunauthori[sz]ed\b.{0,40}\b401\b|\b(?:invalid|incorrect) (?:x-)?api[ _-]?key\b|\bapi key not valid\b|\bAPI_KEY_INVALID\b|\bauthentication_error\b|\bprovider authentication required\b/i;
411
+ /** What to do when a harness error says its API refused the key, naming the variable; else undefined. */
412
+ function authHint(agent, message) {
413
+ if (!REFUSED_KEY.test(message)) return void 0;
414
+ return `The API rejected ${agent.credential}: set a valid key in the environment or .env.local`;
415
+ }
416
+ /** The agent's credential from the host, as the adapter's explicit `auth`. Fails closed. */
417
+ function agentAuth(agent, env = process.env) {
418
+ const value = env[agent.credential];
419
+ if (!value) throw new InfraError(`${agent.credential} isn't set, so the ${agent.name} harness can't authenticate. Set it in the environment or .env.local.`);
420
+ return { [agent.credential]: value };
421
+ }
422
+ function brokeringFor(h) {
423
+ const agent = agentOf(h);
424
+ if (!agent) return void 0;
425
+ const { credential, endpoints, tokens, servedModel, modelResponses } = agent;
426
+ return {
427
+ credential,
428
+ endpoints,
429
+ ...tokens ? { tokens: {
430
+ name: credential,
431
+ ...tokens
432
+ } } : {},
433
+ ...servedModel ? { servedModel } : {},
434
+ ...modelResponses ? { modelResponses } : {}
435
+ };
436
+ }
437
+ //#endregion
438
+ //#region src/sandbox/fake.ts
439
+ /** Commands run on the host's own network, so the fake sandbox can neither restrict nor see it. */
440
+ const FAKE_EGRESS = {
441
+ enforce: "none",
442
+ record: false
443
+ };
444
+ /**
445
+ * The POSIX shell commands run in: `sh`, which Windows lacks, so there the `sh.exe` on PATH or
446
+ * Git for Windows'.
447
+ */
448
+ function posixShell(platform = process.platform, env = process.env, exists = existsSync) {
449
+ if (platform !== "win32") return "sh";
450
+ const onPath = (env.PATH ?? env.Path ?? "").split(win32.delimiter).filter(Boolean);
451
+ const git = [
452
+ env.ProgramFiles,
453
+ env["ProgramFiles(x86)"],
454
+ env.LOCALAPPDATA && win32.join(env.LOCALAPPDATA, "Programs")
455
+ ].filter((dir) => !!dir).map((dir) => win32.join(dir, "Git", "bin"));
456
+ const found = [...onPath, ...git].map((dir) => win32.join(dir, "sh.exe")).find(exists);
457
+ if (found) return found;
458
+ throw new UsageError("The fake sandbox runs commands with a POSIX sh, and there's none on this machine. Install Git for Windows (https://git-scm.com/download/win), which brings sh.exe, or run the evals in docker().");
459
+ }
460
+ const EXEC_TAG = "REEVAL_FAKE_EXEC";
461
+ const KILL_TAGGED = `for pass in 1 2 3 4 5; do
462
+ found=
463
+ for f in $(grep -lzx "${EXEC_TAG}=$1" /proc/[0-9]*/environ 2>/dev/null); do
464
+ p=\${f#/proc/}; kill -9 "\${p%/environ}" 2>/dev/null; found=1
465
+ done
466
+ [ -n "$found" ] || break
467
+ done`;
468
+ /**
469
+ * Stops a command's MSYS processes on Windows. `taskkill /t` doesn't reach them: Git's `sh.exe`
470
+ * starts bash, whose fork and exec leave each new process's Windows parent gone, so a timed-out
471
+ * `sleep 30` would run on, holding the command's pipes and working directory.
472
+ */
473
+ function killTagged(sh, tag) {
474
+ spawn(sh, [
475
+ "-c",
476
+ KILL_TAGGED,
477
+ "sh",
478
+ tag
479
+ ], {
480
+ stdio: "ignore",
481
+ windowsHide: true
482
+ }).on("error", () => {});
483
+ }
484
+ /**
485
+ * A temp directory on the host. Commands run unisolated on the host shell, so this is
486
+ * only meant for tests and for the fake harness.
487
+ */
488
+ async function createFakeSandbox(descriptor, env = {}) {
489
+ const sh = posixShell();
490
+ const parent = descriptor.dir ?? tmpdir();
491
+ await mkdir(parent, { recursive: true });
492
+ const base = await mkdtemp(join(parent, "reeval-sandbox-"));
493
+ const workdir = join(base, "work");
494
+ await mkdir(workdir);
495
+ let destroyed;
496
+ const resolve = (path) => path.startsWith("~/") ? join(base, path.slice(2)) : join(workdir, path);
497
+ return {
498
+ workdir,
499
+ exec: (command, { cwd, env: extra, signal } = {}) => {
500
+ const tag = process.platform === "win32" && signal ? randomUUID() : void 0;
501
+ const stop = () => killTagged(sh, tag);
502
+ if (tag) signal?.addEventListener("abort", stop, { once: true });
503
+ return run(sh, ["-c", cwd ? `cd ${shellQuote(cwd)} && ${command}` : command], {
504
+ cwd: workdir,
505
+ env: {
506
+ HOME: base,
507
+ ...env,
508
+ ...extra,
509
+ ...tag ? { [EXEC_TAG]: tag } : {}
510
+ },
511
+ signal
512
+ }).finally(() => signal?.removeEventListener("abort", stop));
513
+ },
514
+ home: base,
515
+ readFile: (path) => readFile(resolve(path), "utf8").catch(() => null),
516
+ async writeFile(path, content) {
517
+ const target = resolve(path);
518
+ await mkdir(dirname(target), { recursive: true });
519
+ await writeFile(target, content);
520
+ },
521
+ destroy: () => {
522
+ destroyed ??= rm(base, {
523
+ recursive: true,
524
+ force: true
525
+ }).catch(() => {}).finally(() => {
526
+ destroyed = void 0;
527
+ });
528
+ return destroyed;
529
+ }
530
+ };
531
+ }
532
+ //#endregion
533
+ //#region src/egress.ts
534
+ /**
535
+ * The package registries and GitHub, to spread into an allowlist that still installs:
536
+ * `egress: { allow: [...DEFAULT_EGRESS_ALLOW, 'api.example.com'] }`.
537
+ */
538
+ const DEFAULT_EGRESS_ALLOW = PACKAGE_HOSTS;
539
+ /** What each sandbox kind can do about egress, as its provider declares it. */
540
+ const SANDBOX_EGRESS = {
541
+ docker: DOCKER_EGRESS,
542
+ fake: FAKE_EGRESS
543
+ };
544
+ const isRestricted = (policy) => policy !== "allow-all";
545
+ /**
546
+ * The hosts the harness needs: a real agent's own API (its model's provider's, for OpenCode), or
547
+ * a fake agent's with `layout` (it behaves like that agent). A plain fake agent talks to nothing.
548
+ */
549
+ function harnessHosts(harness) {
550
+ if (harness.kind !== "fake" && isAgentKind(harness.kind)) return agentFor(harness).hosts ?? HARNESS_HOSTS[harness.kind];
551
+ return harness.kind === "fake" && harness.layout ? HARNESS_HOSTS[harness.layout] : [];
552
+ }
553
+ /** MCP `http`/`sse` servers' hosts: the agent connects to them from the sandbox. */
554
+ function mcpServerHosts(layers) {
555
+ const urls = /* @__PURE__ */ new Map();
556
+ for (const { spec } of layers) for (const [name, server] of Object.entries(spec.mcp ?? {})) if (server.transport === "stdio") urls.delete(name);
557
+ else urls.set(name, server.url);
558
+ return [...urls.values()].flatMap((url) => URL.parse(url)?.hostname ?? []);
559
+ }
560
+ /**
561
+ * The policy an attempt runs under, and the hosts a restricted one allows on its own: the
562
+ * harness's, the brokered secrets' `hosts` and the MCP servers'. The cascade is config and
563
+ * profile defaults (`inherited`), then the environment's layers, then groups and the eval (`own`).
564
+ */
565
+ function plannedEgress(egress, harness, env, layers) {
566
+ const fromLayers = layers.findLast((l) => l.spec.egress !== void 0)?.spec.egress;
567
+ const policy = egress.own ?? fromLayers ?? egress.inherited ?? "allow-all";
568
+ if (!isRestricted(policy)) return {
569
+ policy,
570
+ auto: []
571
+ };
572
+ const own = policy === "deny-all" ? [] : policy.allow;
573
+ const auto = [
574
+ ...harnessHosts(harness),
575
+ ...plannedSecrets(env, layers).flatMap((s) => s.hosts ?? []),
576
+ ...mcpServerHosts(layers)
577
+ ];
578
+ return {
579
+ policy,
580
+ auto: [...new Set(auto)].filter((h) => !own.includes(h))
581
+ };
582
+ }
583
+ /** Every host a restricted policy lets through, or null under `allow-all`. */
584
+ function allowedHosts({ policy, auto }) {
585
+ if (!isRestricted(policy)) return null;
586
+ return [.../* @__PURE__ */ new Set([...policy === "deny-all" ? [] : policy.allow, ...auto])];
587
+ }
588
+ /** What enforcing the policy takes: nothing, turning egress off, or a host allowlist. */
589
+ function egressNeeds(planned) {
590
+ if (!isRestricted(planned.policy)) return "none";
591
+ return allowedHosts(planned)?.length ? "allowlist" : "all-or-nothing";
592
+ }
593
+ const LEVELS = [
594
+ "none",
595
+ "all-or-nothing",
596
+ "allowlist"
597
+ ];
598
+ /** Why the sandbox can't enforce the attempt's policy, or undefined when it can. */
599
+ function unenforceable(planned, sandbox, where) {
600
+ const needs = egressNeeds(planned);
601
+ const can = SANDBOX_EGRESS[sandbox.kind].enforce;
602
+ if (LEVELS.indexOf(can) >= LEVELS.indexOf(needs)) return void 0;
603
+ const hosts = allowedHosts(planned)?.join(", ");
604
+ const what = needs !== "allowlist" ? "turning egress off" : planned.policy === "deny-all" ? `a host allowlist for its automatic hosts (${hosts})` : `a host allowlist (${hosts})`;
605
+ const enforces = can === "none" ? "enforces no egress policy" : `only enforces ${can === "all-or-nothing" ? "'allow-all' or 'deny-all'" : can}`;
606
+ const hint = sandbox.kind === "fake" ? " (its commands run on the host). Run it in docker(), or set egress: 'allow-all'" : "";
607
+ return `${where} runs under egress ${describeEgress(planned.policy)}, which needs ${what}, but the ${sandbox.kind} sandbox ${enforces}${hint}.`;
608
+ }
609
+ const describeEgress = (policy) => typeof policy === "string" ? `'${policy}'` : `{ allow: [${policy.allow.map((h) => `'${h}'`).join(", ")}] }`;
610
+ /** `deny-all + auto: api2.cursor.sh, …` for the plan; '' under `allow-all`. */
611
+ function egressLabel({ policy, auto }) {
612
+ if (!isRestricted(policy)) return "";
613
+ const own = policy === "deny-all" ? "deny-all" : policy.allow.length ? `allow ${policy.allow.join(", ")}` : "allow none";
614
+ return auto.length ? `${own} + auto: ${auto.join(", ")}` : own;
615
+ }
616
+ //#endregion
617
+ export { layoutOf as _, unenforceable as a, DEFAULT_HARNESS as c, agentFor as d, authHint as f, isAgentKind as g, expectedBlockedFor as h, plannedEgress as i, HARNESS_EXAMPLE as l, credentialOf as m, allowedHosts as n, createFakeSandbox as o, brokeringFor as p, egressLabel as r, AGENTS as s, DEFAULT_EGRESS_ALLOW as t, agentAuth as u, refusedMcp as v };
618
+
619
+ //# sourceMappingURL=egress-73SQfKdx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"egress-73SQfKdx.js","names":["meta"],"sources":["../src/harness/agents.ts","../src/sandbox/fake.ts","../src/egress.ts"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ //#region src/env.ts
4
+ /**
5
+ * Loads .env.local, then .env, from the config file's directory (the current one only without a
6
+ * config), so `reeval run` from a subdirectory reads the project's. Neither overrides a variable
7
+ * that's already set, so the environment wins over .env.local, which wins over .env.
8
+ */
9
+ function loadEnvFiles(configPath) {
10
+ const dir = configPath ? dirname(configPath) : resolve(".");
11
+ for (const name of [".env.local", ".env"]) {
12
+ const path = join(dir, name);
13
+ if (existsSync(path)) process.loadEnvFile(path);
14
+ }
15
+ }
16
+ /** `CI` is set to anything but `false`: records by default, forbids `.only`, names CI authors. */
17
+ const inCI = (env = process.env) => !!env.CI && env.CI !== "false";
18
+ //#endregion
19
+ export { loadEnvFiles as n, inCI as t };
20
+
21
+ //# sourceMappingURL=env-BQqj93gu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-BQqj93gu.js","names":[],"sources":["../src/env.ts"],"mappings":";;;;;;;;AAQA,SAAgB,aAAa,YAAsC;CACjE,MAAM,MAAM,aAAa,QAAQ,UAAU,IAAI,QAAQ,GAAG;CAC1D,KAAK,MAAM,QAAQ,CAAC,cAAc,MAAM,GAAG;EACzC,MAAM,OAAO,KAAK,KAAK,IAAI;EAC3B,IAAI,WAAW,IAAI,GAAG,QAAQ,YAAY,IAAI;CAChD;AACF;;AAGA,MAAa,QAAQ,MAAyB,QAAQ,QACpD,CAAC,CAAC,IAAI,MAAM,IAAI,OAAO"}