self-bench 0.3.3 → 0.3.5

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 (149) hide show
  1. package/Dockerfile.sandbox +1 -1
  2. package/README.md +20 -0
  3. package/bun.lock +48 -0
  4. package/compose.yaml +7 -1
  5. package/dist/agent-smoke-main.js +3 -2
  6. package/dist/agent-smoke-main.js.map +1 -1
  7. package/dist/agent-smoke.d.ts +2 -1
  8. package/dist/agent-smoke.d.ts.map +1 -1
  9. package/dist/agent-smoke.js +6 -1
  10. package/dist/agent-smoke.js.map +1 -1
  11. package/dist/api.d.ts +24 -0
  12. package/dist/api.d.ts.map +1 -1
  13. package/dist/api.js +25 -18
  14. package/dist/api.js.map +1 -1
  15. package/dist/build-metadata.js +1 -1
  16. package/dist/cli.js +67 -11
  17. package/dist/cli.js.map +1 -1
  18. package/dist/config.d.ts +36 -10
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +89 -15
  21. package/dist/config.js.map +1 -1
  22. package/dist/contracts.d.ts +22 -2
  23. package/dist/contracts.d.ts.map +1 -1
  24. package/dist/contracts.js +31 -6
  25. package/dist/contracts.js.map +1 -1
  26. package/dist/eval-main.js +3 -2
  27. package/dist/eval-main.js.map +1 -1
  28. package/dist/evaluate.d.ts +2 -1
  29. package/dist/evaluate.d.ts.map +1 -1
  30. package/dist/evaluate.js +2 -1
  31. package/dist/evaluate.js.map +1 -1
  32. package/dist/harbor-environment.d.ts +2 -0
  33. package/dist/harbor-environment.d.ts.map +1 -0
  34. package/dist/harbor-environment.js +15 -0
  35. package/dist/harbor-environment.js.map +1 -0
  36. package/dist/harbor-results.d.ts.map +1 -1
  37. package/dist/harbor-results.js +2 -0
  38. package/dist/harbor-results.js.map +1 -1
  39. package/dist/process.d.ts +2 -1
  40. package/dist/process.d.ts.map +1 -1
  41. package/dist/process.js.map +1 -1
  42. package/dist/providers.d.ts +8 -0
  43. package/dist/providers.d.ts.map +1 -0
  44. package/dist/providers.js +14 -0
  45. package/dist/providers.js.map +1 -0
  46. package/dist/reaudit-main.js +5 -5
  47. package/dist/reaudit-main.js.map +1 -1
  48. package/dist/repair-main.js +5 -5
  49. package/dist/repair-main.js.map +1 -1
  50. package/dist/sandbox-author.bundle.js +40 -6
  51. package/dist/sandbox-timeout.d.ts +11 -0
  52. package/dist/sandbox-timeout.d.ts.map +1 -0
  53. package/dist/sandbox-timeout.js +41 -0
  54. package/dist/sandbox-timeout.js.map +1 -0
  55. package/dist/sandbox-validation-repair.bundle.js +40 -6
  56. package/dist/sandbox.d.ts +2 -2
  57. package/dist/sandbox.d.ts.map +1 -1
  58. package/dist/sandbox.js +10 -3
  59. package/dist/sandbox.js.map +1 -1
  60. package/dist/temporal/activities.d.ts +2 -2
  61. package/dist/temporal/activities.d.ts.map +1 -1
  62. package/dist/temporal/activities.js +7 -1
  63. package/dist/temporal/activities.js.map +1 -1
  64. package/dist/temporal/worker-main.js +2 -2
  65. package/dist/temporal/worker-main.js.map +1 -1
  66. package/dist/terminal-prompts.d.ts +26 -0
  67. package/dist/terminal-prompts.d.ts.map +1 -0
  68. package/dist/terminal-prompts.js +137 -0
  69. package/dist/terminal-prompts.js.map +1 -0
  70. package/dist/terminal-reporter.d.ts +30 -0
  71. package/dist/terminal-reporter.d.ts.map +1 -0
  72. package/dist/terminal-reporter.js +90 -0
  73. package/dist/terminal-reporter.js.map +1 -0
  74. package/dist/validate-main.js +8 -2
  75. package/dist/validate-main.js.map +1 -1
  76. package/dist/vercel-cli.d.ts +64 -0
  77. package/dist/vercel-cli.d.ts.map +1 -0
  78. package/dist/vercel-cli.js +303 -0
  79. package/dist/vercel-cli.js.map +1 -0
  80. package/dist/vercel-command.d.ts +14 -0
  81. package/dist/vercel-command.d.ts.map +1 -0
  82. package/dist/vercel-command.js +93 -0
  83. package/dist/vercel-command.js.map +1 -0
  84. package/dist/vercel-executor.d.ts +14 -0
  85. package/dist/vercel-executor.d.ts.map +1 -0
  86. package/dist/vercel-executor.js +356 -0
  87. package/dist/vercel-executor.js.map +1 -0
  88. package/dist/vercel-fetch.d.ts +6 -0
  89. package/dist/vercel-fetch.d.ts.map +1 -0
  90. package/dist/vercel-fetch.js +39 -0
  91. package/dist/vercel-fetch.js.map +1 -0
  92. package/dist/vercel-profile.d.ts +34 -0
  93. package/dist/vercel-profile.d.ts.map +1 -0
  94. package/dist/vercel-profile.js +244 -0
  95. package/dist/vercel-profile.js.map +1 -0
  96. package/dist/vercel-runtime-image.d.ts +51 -0
  97. package/dist/vercel-runtime-image.d.ts.map +1 -0
  98. package/dist/vercel-runtime-image.js +123 -0
  99. package/dist/vercel-runtime-image.js.map +1 -0
  100. package/dist/vercel-setup-probe.d.ts +49 -0
  101. package/dist/vercel-setup-probe.d.ts.map +1 -0
  102. package/dist/vercel-setup-probe.js +151 -0
  103. package/dist/vercel-setup-probe.js.map +1 -0
  104. package/dist/vercel-setup.d.ts +42 -0
  105. package/dist/vercel-setup.d.ts.map +1 -0
  106. package/dist/vercel-setup.js +280 -0
  107. package/dist/vercel-setup.js.map +1 -0
  108. package/docs/evaluations.md +2 -0
  109. package/docs/operations.md +128 -6
  110. package/package.json +5 -1
  111. package/review/index.html +14 -0
  112. package/review/src/App.tsx +338 -0
  113. package/review/src/export-loader.test.ts +57 -0
  114. package/review/src/export-loader.ts +151 -0
  115. package/review/src/main.tsx +15 -0
  116. package/review/src/styles.css +162 -0
  117. package/review/src/types.ts +47 -0
  118. package/review/tsconfig.json +16 -0
  119. package/review/vite.config.ts +20 -0
  120. package/scripts/verify-package.ts +27 -3
  121. package/src/agent-smoke-main.ts +3 -2
  122. package/src/agent-smoke.ts +8 -2
  123. package/src/api.ts +31 -18
  124. package/src/cli.ts +72 -11
  125. package/src/config.ts +150 -25
  126. package/src/contracts.ts +33 -6
  127. package/src/eval-main.ts +3 -2
  128. package/src/evaluate.ts +5 -3
  129. package/src/harbor-environment.ts +17 -0
  130. package/src/harbor-results.ts +2 -0
  131. package/src/process.ts +3 -1
  132. package/src/providers.ts +22 -0
  133. package/src/reaudit-main.ts +8 -5
  134. package/src/repair-main.ts +8 -5
  135. package/src/sandbox-timeout.ts +56 -0
  136. package/src/sandbox.ts +15 -5
  137. package/src/temporal/activities.ts +9 -3
  138. package/src/temporal/worker-main.ts +2 -2
  139. package/src/terminal-prompts.ts +197 -0
  140. package/src/terminal-reporter.ts +126 -0
  141. package/src/validate-main.ts +9 -3
  142. package/src/vercel-cli.ts +403 -0
  143. package/src/vercel-command.ts +127 -0
  144. package/src/vercel-executor.ts +448 -0
  145. package/src/vercel-fetch.ts +45 -0
  146. package/src/vercel-profile.ts +319 -0
  147. package/src/vercel-runtime-image.ts +204 -0
  148. package/src/vercel-setup-probe.ts +229 -0
  149. package/src/vercel-setup.ts +419 -0
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { type CommandOutputHandler, type CommandResult } from "./process.js";
3
+ declare const teamSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ slug: z.ZodString;
6
+ name: z.ZodString;
7
+ current: z.ZodOptional<z.ZodBoolean>;
8
+ }, z.core.$strip>;
9
+ declare const projectSchema: z.ZodObject<{
10
+ id: z.ZodString;
11
+ name: z.ZodString;
12
+ }, z.core.$strip>;
13
+ declare const vcrTagSchema: z.ZodObject<{
14
+ tag: z.ZodString;
15
+ manifestDigest: z.ZodString;
16
+ kind: z.ZodOptional<z.ZodEnum<{
17
+ index: "index";
18
+ manifest: "manifest";
19
+ }>>;
20
+ status: z.ZodNullable<z.ZodString>;
21
+ }, z.core.$strip>;
22
+ export type VercelTeam = z.infer<typeof teamSchema>;
23
+ export type VercelProject = z.infer<typeof projectSchema>;
24
+ export type VcrTag = z.infer<typeof vcrTagSchema>;
25
+ export interface VercelCommandRunner {
26
+ capture(args: readonly string[], options?: {
27
+ readonly onOutput?: CommandOutputHandler;
28
+ }): Promise<CommandResult>;
29
+ interactive(args: readonly string[]): Promise<void>;
30
+ }
31
+ export declare class VercelCli {
32
+ #private;
33
+ constructor(runner?: VercelCommandRunner);
34
+ ensureAvailable(): Promise<void>;
35
+ ensureLoggedIn(): Promise<void>;
36
+ listTeams(): Promise<readonly VercelTeam[]>;
37
+ listProjects(teamSlug: string): Promise<readonly VercelProject[]>;
38
+ createProject(teamSlug: string, projectName: string): Promise<VercelProject>;
39
+ repositoryExists(input: VcrScope & {
40
+ readonly repository: string;
41
+ }): Promise<boolean>;
42
+ createRepository(input: VcrScope & {
43
+ readonly repository: string;
44
+ }): Promise<void>;
45
+ listTags(input: VcrScope & {
46
+ readonly repository: string;
47
+ }): Promise<readonly VcrTag[]>;
48
+ inspectTag(input: VcrScope & {
49
+ readonly repository: string;
50
+ readonly tag: string;
51
+ }): Promise<VcrTag | undefined>;
52
+ buildImage(input: VcrScope & {
53
+ readonly repository: string;
54
+ readonly tag: string;
55
+ readonly projectRoot: string;
56
+ readonly onOutput?: CommandOutputHandler;
57
+ }): Promise<void>;
58
+ }
59
+ interface VcrScope {
60
+ readonly teamSlug: string;
61
+ readonly projectId: string;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=vercel-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-cli.d.ts","sourceRoot":"","sources":["../src/vercel-cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAc,MAAM,cAAc,CAAC;AAKzF,QAAA,MAAM,UAAU;;;;;iBAKd,CAAC;AAEH,QAAA,MAAM,aAAa;;;iBAGjB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;iBAKhB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CACL,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;KAAE,GACrD,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,qBAAa,SAAS;;gBAGR,MAAM,GAAE,mBAAsD;IAIpE,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBhC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,SAAS,IAAI,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IA2B3C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAoCjE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAuB5E,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBrF,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IA+BvF,UAAU,CACd,KAAK,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiBxB,UAAU,CACd,KAAK,EAAE,QAAQ,GAAG;QAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;KAC1C,GACA,OAAO,CAAC,IAAI,CAAC;CAgEjB;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,303 @@
1
+ import { spawn } from "node:child_process";
2
+ import { resolve } from "node:path";
3
+ import { z } from "zod";
4
+ import { runCommand } from "./process.js";
5
+ const MINIMUM_CLI_VERSION = [59, 1, 3];
6
+ const PAGE_SIZE = "100";
7
+ const teamSchema = z.object({
8
+ id: z.string().min(1),
9
+ slug: z.string().min(1),
10
+ name: z.string().min(1),
11
+ current: z.boolean().optional(),
12
+ });
13
+ const projectSchema = z.object({
14
+ id: z.string().min(1),
15
+ name: z.string().min(1),
16
+ });
17
+ const vcrTagSchema = z.object({
18
+ tag: z.string().min(1),
19
+ manifestDigest: z.string().regex(/^sha256:[0-9a-f]{64}$/i),
20
+ kind: z.enum(["manifest", "index"]).optional(),
21
+ status: z.string().min(1).nullable(),
22
+ });
23
+ export class VercelCli {
24
+ #runner;
25
+ constructor(runner = new ProcessVercelCommandRunner()) {
26
+ this.#runner = runner;
27
+ }
28
+ async ensureAvailable() {
29
+ let result;
30
+ try {
31
+ result = await this.#runner.capture(["--version"]);
32
+ }
33
+ catch (error) {
34
+ throw new Error("Vercel CLI 59.1.3 or newer is required. Install it with: npm install --global vercel@latest", { cause: error });
35
+ }
36
+ const version = parseCliVersion(`${result.stdout}\n${result.stderr}`);
37
+ if (result.exitCode !== 0 || !version || compareVersion(version, MINIMUM_CLI_VERSION) < 0) {
38
+ throw new Error("Vercel CLI 59.1.3 or newer is required. Install or update it with: npm install --global vercel@latest");
39
+ }
40
+ }
41
+ async ensureLoggedIn() {
42
+ const status = await this.#runner.capture(["whoami", "--json", "--non-interactive"]);
43
+ if (status.exitCode === 0 && parseLoggedIn(status.stdout)) {
44
+ return;
45
+ }
46
+ await this.#runner.interactive(["login"]);
47
+ const verified = await this.#runner.capture(["whoami", "--json", "--non-interactive"]);
48
+ if (verified.exitCode !== 0 || !parseLoggedIn(verified.stdout)) {
49
+ throw new Error("Vercel CLI login did not complete; run vercel login and retry setup");
50
+ }
51
+ }
52
+ async listTeams() {
53
+ const teams = [];
54
+ const seenPages = new Set();
55
+ let next;
56
+ do {
57
+ const pageKey = next ?? "first";
58
+ if (seenPages.has(pageKey)) {
59
+ throw new Error("Vercel CLI returned a repeated teams pagination cursor");
60
+ }
61
+ seenPages.add(pageKey);
62
+ const args = ["teams", "list", "--json", "--limit", PAGE_SIZE, "--non-interactive"];
63
+ if (next) {
64
+ args.push("--next", next);
65
+ }
66
+ const result = await this.#runJson(args);
67
+ const parsed = z
68
+ .object({
69
+ teams: z.array(teamSchema),
70
+ pagination: z.object({ next: z.union([z.string(), z.number()]).nullable().optional() }),
71
+ })
72
+ .parse(result);
73
+ teams.push(...parsed.teams);
74
+ next = paginationValue(parsed.pagination.next);
75
+ } while (next);
76
+ return uniqueById(teams);
77
+ }
78
+ async listProjects(teamSlug) {
79
+ const projects = [];
80
+ const seenPages = new Set();
81
+ let next;
82
+ do {
83
+ const pageKey = next ?? "first";
84
+ if (seenPages.has(pageKey)) {
85
+ throw new Error("Vercel CLI returned a repeated projects pagination cursor");
86
+ }
87
+ seenPages.add(pageKey);
88
+ const args = [
89
+ "project",
90
+ "list",
91
+ "--scope",
92
+ teamSlug,
93
+ "--json",
94
+ "--limit",
95
+ PAGE_SIZE,
96
+ "--non-interactive",
97
+ ];
98
+ if (next) {
99
+ args.push("--next", next);
100
+ }
101
+ const result = await this.#runJson(args);
102
+ const parsed = z
103
+ .object({
104
+ projects: z.array(projectSchema),
105
+ pagination: z.object({ next: z.union([z.string(), z.number()]).nullable().optional() }),
106
+ })
107
+ .parse(result);
108
+ projects.push(...parsed.projects);
109
+ next = paginationValue(parsed.pagination.next);
110
+ } while (next);
111
+ return uniqueById(projects);
112
+ }
113
+ async createProject(teamSlug, projectName) {
114
+ const result = await this.#runner.capture([
115
+ "project",
116
+ "add",
117
+ projectName,
118
+ "--scope",
119
+ teamSlug,
120
+ "--non-interactive",
121
+ ]);
122
+ if (result.exitCode !== 0) {
123
+ throw commandFailure("create Vercel project", result);
124
+ }
125
+ const project = (await this.listProjects(teamSlug)).find(({ name }) => name.toLowerCase() === projectName.toLowerCase());
126
+ if (!project) {
127
+ throw new Error(`Vercel created project ${projectName}, but it was not returned by project list`);
128
+ }
129
+ return project;
130
+ }
131
+ async repositoryExists(input) {
132
+ const result = await this.#runner.capture(this.#vcrArgs(["vcr", "inspect", input.repository, "--json"], input.teamSlug, input.projectId));
133
+ if (result.exitCode === 0) {
134
+ return true;
135
+ }
136
+ if (isNotFound(result)) {
137
+ return false;
138
+ }
139
+ throw commandFailure("inspect VCR repository", result);
140
+ }
141
+ async createRepository(input) {
142
+ const result = await this.#runner.capture(this.#vcrArgs(["vcr", "add", input.repository, "--json"], input.teamSlug, input.projectId));
143
+ if (result.exitCode !== 0) {
144
+ throw commandFailure("create VCR repository", result);
145
+ }
146
+ }
147
+ async listTags(input) {
148
+ const tags = [];
149
+ const seenPages = new Set();
150
+ let next;
151
+ do {
152
+ const pageKey = next ?? "first";
153
+ if (seenPages.has(pageKey)) {
154
+ throw new Error("Vercel CLI returned a repeated VCR pagination cursor");
155
+ }
156
+ seenPages.add(pageKey);
157
+ const args = this.#vcrArgs(["vcr", "tag", "list", input.repository, "--json", "--limit", PAGE_SIZE], input.teamSlug, input.projectId);
158
+ if (next) {
159
+ args.push("--next", next);
160
+ }
161
+ const result = await this.#runJson(args);
162
+ const parsed = z
163
+ .object({
164
+ tags: z.array(vcrTagSchema),
165
+ nextCursor: z.string().nullable().optional(),
166
+ })
167
+ .parse(result);
168
+ tags.push(...parsed.tags);
169
+ next = parsed.nextCursor ?? undefined;
170
+ } while (next);
171
+ return tags;
172
+ }
173
+ async inspectTag(input) {
174
+ const result = await this.#runner.capture(this.#vcrArgs(["vcr", "tag", "inspect", input.repository, input.tag, "--json"], input.teamSlug, input.projectId));
175
+ if (result.exitCode === 0) {
176
+ return vcrTagSchema.parse(parseJson(result.stdout, "VCR tag inspect"));
177
+ }
178
+ if (isNotFound(result)) {
179
+ return undefined;
180
+ }
181
+ throw commandFailure("inspect VCR tag", result);
182
+ }
183
+ async buildImage(input) {
184
+ await this.#run([
185
+ "vcr",
186
+ "login",
187
+ "docker",
188
+ "--project",
189
+ input.projectId,
190
+ "--scope",
191
+ input.teamSlug,
192
+ "--non-interactive",
193
+ ], "authenticate Docker with VCR", input.onOutput);
194
+ await this.#run([
195
+ "vcr",
196
+ "build",
197
+ "docker",
198
+ input.projectRoot,
199
+ `${input.repository}:${input.tag}`,
200
+ "--project",
201
+ input.projectId,
202
+ "--platform",
203
+ "linux/amd64",
204
+ "--push",
205
+ "--scope",
206
+ input.teamSlug,
207
+ "--non-interactive",
208
+ "--",
209
+ "--file",
210
+ resolve(input.projectRoot, "Dockerfile.sandbox"),
211
+ // Buildx provenance attestations turn this into an OCI index. Vercel
212
+ // Sandbox accepts the single linux/amd64 manifest produced without them.
213
+ "--provenance=false",
214
+ ], "build and publish the VCR image", input.onOutput);
215
+ }
216
+ async #runJson(args) {
217
+ const result = await this.#runner.capture(args);
218
+ if (result.exitCode !== 0) {
219
+ throw commandFailure(`run vercel ${args.slice(0, 2).join(" ")}`, result);
220
+ }
221
+ return parseJson(result.stdout, `vercel ${args.slice(0, 2).join(" ")}`);
222
+ }
223
+ async #run(args, action, onOutput) {
224
+ const result = await this.#runner.capture(args, onOutput ? { onOutput } : undefined);
225
+ if (result.exitCode !== 0) {
226
+ throw commandFailure(action, result);
227
+ }
228
+ }
229
+ #vcrArgs(args, teamSlug, projectId) {
230
+ return [...args, "--project", projectId, "--scope", teamSlug, "--non-interactive"];
231
+ }
232
+ }
233
+ class ProcessVercelCommandRunner {
234
+ async capture(args, options) {
235
+ return await runCommand("vercel", args, {
236
+ allowFailure: true,
237
+ ...(options?.onOutput ? { onOutput: options.onOutput } : {}),
238
+ });
239
+ }
240
+ async interactive(args) {
241
+ await new Promise((resolve, reject) => {
242
+ const child = spawn("vercel", args, { stdio: "inherit" });
243
+ child.once("error", reject);
244
+ child.once("exit", (code, signal) => {
245
+ if (code === 0) {
246
+ resolve();
247
+ return;
248
+ }
249
+ reject(new Error(`vercel ${args.slice(0, 2).join(" ")} exited ${code ?? `after ${signal ?? "signal"}`}`));
250
+ });
251
+ });
252
+ }
253
+ }
254
+ function parseCliVersion(value) {
255
+ const match = /(\d+)\.(\d+)\.(\d+)/.exec(value);
256
+ if (!match?.[1] || !match[2] || !match[3]) {
257
+ return undefined;
258
+ }
259
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
260
+ }
261
+ function compareVersion(left, right) {
262
+ for (let index = 0; index < left.length; index += 1) {
263
+ const difference = (left[index] ?? 0) - (right[index] ?? 0);
264
+ if (difference !== 0) {
265
+ return difference;
266
+ }
267
+ }
268
+ return 0;
269
+ }
270
+ function parseLoggedIn(value) {
271
+ try {
272
+ const parsed = z
273
+ .object({ loggedIn: z.boolean().optional() })
274
+ .passthrough()
275
+ .parse(JSON.parse(value));
276
+ return parsed.loggedIn ?? true;
277
+ }
278
+ catch {
279
+ return false;
280
+ }
281
+ }
282
+ function parseJson(value, context) {
283
+ try {
284
+ return JSON.parse(value);
285
+ }
286
+ catch (error) {
287
+ throw new Error(`${context} returned invalid JSON`, { cause: error });
288
+ }
289
+ }
290
+ function paginationValue(value) {
291
+ return value === undefined || value === null ? undefined : String(value);
292
+ }
293
+ function uniqueById(values) {
294
+ return [...new Map(values.map((value) => [value.id, value])).values()];
295
+ }
296
+ function isNotFound(result) {
297
+ return /(?:not[_ -]?found|does not exist|\b404\b)/i.test(`${result.stdout}\n${result.stderr}`);
298
+ }
299
+ function commandFailure(action, result) {
300
+ const detail = (result.stderr.trim() || result.stdout.trim()).slice(0, 1_000);
301
+ return new Error(`${action} failed with exit ${result.exitCode}${detail ? `: ${detail}` : ""}`);
302
+ }
303
+ //# sourceMappingURL=vercel-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-cli.js","sourceRoot":"","sources":["../src/vercel-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Session } from "@vercel/sandbox";
2
+ import { type RollingOutput } from "./process.js";
3
+ import type { SandboxRequest, SandboxResult, SandboxRunOptions } from "./sandbox.js";
4
+ export declare const VERCEL_WORK_DIRECTORY = "/work";
5
+ export declare function executeVercelCommand(input: {
6
+ readonly session: Session;
7
+ readonly request: SandboxRequest;
8
+ readonly options: SandboxRunOptions;
9
+ readonly signal: AbortSignal;
10
+ readonly terminate: (error: unknown) => void;
11
+ readonly stdout: RollingOutput;
12
+ readonly stderr: RollingOutput;
13
+ }): Promise<Omit<SandboxResult, "sandboxId">>;
14
+ //# sourceMappingURL=vercel-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-command.d.ts","sourceRoot":"","sources":["../src/vercel-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGrF,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAI7C,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAgE5C"}
@@ -0,0 +1,93 @@
1
+ import { InactivityTimeoutError } from "./process.js";
2
+ import { VercelCommandStartError } from "./vercel-fetch.js";
3
+ export const VERCEL_WORK_DIRECTORY = "/work";
4
+ const COMPLETION_REQUEST_TIMEOUT_MS = 15_000;
5
+ export async function executeVercelCommand(input) {
6
+ const { session, request, options, signal, terminate, stdout, stderr } = input;
7
+ let inactivityTimer;
8
+ const clearInactivityTimer = () => {
9
+ if (inactivityTimer) {
10
+ clearTimeout(inactivityTimer);
11
+ inactivityTimer = undefined;
12
+ }
13
+ };
14
+ const armInactivityTimer = () => {
15
+ clearInactivityTimer();
16
+ if (!request.inactivityTimeoutMs) {
17
+ return;
18
+ }
19
+ inactivityTimer = setTimeout(() => {
20
+ terminate(new InactivityTimeoutError(`Vercel sandbox ${session.sessionId} stage ${request.stage}`, request.inactivityTimeoutMs ?? 0));
21
+ }, request.inactivityTimeoutMs);
22
+ inactivityTimer.unref();
23
+ };
24
+ try {
25
+ const [commandName, ...commandArguments] = request.command;
26
+ if (!commandName) {
27
+ throw new Error("sandbox command must not be empty");
28
+ }
29
+ const command = await startCommand(session, commandName, commandArguments, request, signal);
30
+ armInactivityTimer();
31
+ await consumeLogs(command, stdout, stderr, options, armInactivityTimer, signal);
32
+ // The log stream closes when remote execution ends. From here on, the
33
+ // bounded completion request is provider settlement rather than command
34
+ // output inactivity.
35
+ clearInactivityTimer();
36
+ const completed = await command.wait({
37
+ signal: AbortSignal.any([signal, AbortSignal.timeout(COMPLETION_REQUEST_TIMEOUT_MS)]),
38
+ });
39
+ const outputs = {};
40
+ for (const path of request.outputPaths ?? []) {
41
+ const output = await session.readFileToBuffer({ path }, { signal });
42
+ if (output === null) {
43
+ if (completed.exitCode === 0) {
44
+ throw new Error(`sandbox ${session.sessionId} exited successfully without output ${path}`);
45
+ }
46
+ }
47
+ else {
48
+ outputs[path] = output;
49
+ }
50
+ }
51
+ return {
52
+ exitCode: completed.exitCode,
53
+ stdout: stdout.text(),
54
+ stderr: stderr.text(),
55
+ outputs,
56
+ };
57
+ }
58
+ finally {
59
+ clearInactivityTimer();
60
+ }
61
+ }
62
+ async function startCommand(session, commandName, commandArguments, request, signal) {
63
+ try {
64
+ return await session.runCommand({
65
+ cmd: commandName,
66
+ args: [...commandArguments],
67
+ cwd: VERCEL_WORK_DIRECTORY,
68
+ detached: true,
69
+ env: { ...request.environment, ...request.secrets },
70
+ signal,
71
+ timeoutMs: request.timeoutMs,
72
+ });
73
+ }
74
+ catch (error) {
75
+ if (error instanceof VercelCommandStartError) {
76
+ error.restorePublicName();
77
+ }
78
+ throw error;
79
+ }
80
+ }
81
+ async function consumeLogs(command, stdout, stderr, options, onOutput, signal) {
82
+ for await (const event of command.logs({ signal })) {
83
+ const chunk = Buffer.from(event.data);
84
+ if (chunk.byteLength === 0) {
85
+ continue;
86
+ }
87
+ const output = event.stream === "stdout" ? stdout : stderr;
88
+ output.push(chunk);
89
+ options.onProgress?.({ stream: event.stream, bytes: chunk.byteLength });
90
+ onOutput();
91
+ }
92
+ }
93
+ //# sourceMappingURL=vercel-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-command.js","sourceRoot":"","sources":["../src/vercel-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type SelfBenchWorkerConfig } from "./config.js";
2
+ import type { SandboxExecutor, SandboxRequest, SandboxResult, SandboxRunOptions } from "./sandbox.js";
3
+ type VercelExecutionConfig = Extract<SelfBenchWorkerConfig["execution"], {
4
+ readonly kind: "vercel";
5
+ }>;
6
+ type Sleep = (delayMs: number, signal: AbortSignal) => Promise<void>;
7
+ export declare class VercelSandboxExecutor implements SandboxExecutor {
8
+ #private;
9
+ constructor(config: VercelExecutionConfig, fetch?: typeof globalThis.fetch, sleep?: Sleep);
10
+ run(request: SandboxRequest, options?: SandboxRunOptions): Promise<SandboxResult>;
11
+ close(): void;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=vercel-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-executor.d.ts","sourceRoot":"","sources":["../src/vercel-executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAatB,KAAK,qBAAqB,GAAG,OAAO,CAClC,qBAAqB,CAAC,WAAW,CAAC,EAClC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAC5B,CAAC;AAMF,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAYrE,qBAAa,qBAAsB,YAAW,eAAe;;gBAMzD,MAAM,EAAE,qBAAqB,EAC7B,KAAK,0BAAmB,EACxB,KAAK,GAAE,KAAsB;IAOzB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiI3F,KAAK,IAAI,IAAI;CAwGd"}