experimental-agent 0.3.0 → 0.5.0

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 (40) hide show
  1. package/README.md +61 -0
  2. package/dist/{adapter-BigchkkI.d.mts → adapter-Cl735Kp4.d.mts} +37 -39
  3. package/dist/{adapter-BigchkkI.d.ts → adapter-Cl735Kp4.d.ts} +37 -39
  4. package/dist/{chunk-ZUFJJYC4.mjs → chunk-2Y7EZPIP.mjs} +3 -2
  5. package/dist/{chunk-RT72C52I.mjs → chunk-6MS4CGEZ.mjs} +3 -2
  6. package/dist/{chunk-ELWIUJUK.mjs → chunk-AB2JYY6A.mjs} +6 -3
  7. package/dist/chunk-I5DCB7RU.mjs +346 -0
  8. package/dist/chunk-NOW6XL5E.mjs +310 -0
  9. package/dist/{docker-QPCLWLYR.mjs → docker-OBUQX5ZI.mjs} +1 -1
  10. package/dist/entry-Bs17QEiq.d.mts +45 -0
  11. package/dist/entry-QNyd4S1s.d.ts +45 -0
  12. package/dist/index.d.mts +162 -85
  13. package/dist/index.d.ts +162 -85
  14. package/dist/index.js +636 -161
  15. package/dist/index.mjs +469 -153
  16. package/dist/lifecycle-workflow-steps.d.mts +2 -2
  17. package/dist/lifecycle-workflow-steps.d.ts +2 -2
  18. package/dist/lifecycle-workflow.d.mts +2 -2
  19. package/dist/lifecycle-workflow.d.ts +2 -2
  20. package/dist/{local-KJ3BSIFJ.mjs → local-4C3V4EFS.mjs} +1 -1
  21. package/dist/next/loader.js +6 -3
  22. package/dist/next/loader.mjs +1 -1
  23. package/dist/next.js +10 -4
  24. package/dist/next.mjs +6 -3
  25. package/dist/sandbox.d.mts +3 -3
  26. package/dist/sandbox.d.ts +3 -3
  27. package/dist/sandbox.js +15 -5
  28. package/dist/sandbox.mjs +3 -3
  29. package/dist/{steps-BnkRQKlc.d.ts → steps-XA4wG8W3.d.ts} +4 -1
  30. package/dist/{steps-u-mGDbP_.d.mts → steps-eTytqxQb.d.mts} +4 -1
  31. package/dist/storage.d.mts +9 -3
  32. package/dist/storage.d.ts +9 -3
  33. package/dist/storage.js +161 -9
  34. package/dist/storage.mjs +5 -1
  35. package/dist/{vercel-QZ6INPMV.mjs → vercel-6ORAC625.mjs} +1 -1
  36. package/package.json +5 -2
  37. package/dist/chunk-BFFNCESS.mjs +0 -302
  38. package/dist/chunk-DOD4MC5D.mjs +0 -196
  39. package/dist/entry-BmQ8FO-5.d.ts +0 -36
  40. package/dist/entry-CZd9aAwn.d.mts +0 -36
@@ -1,302 +0,0 @@
1
- // src/sandbox/bindings/docker.ts
2
- import { ulid } from "ulid";
3
- async function execDocker(args, opts) {
4
- const { spawn } = await import("child_process");
5
- return new Promise((resolve, reject) => {
6
- const child = spawn("docker", ["sandbox", ...args], {
7
- signal: opts?.signal
8
- });
9
- let stdout = "";
10
- let stderr = "";
11
- child.stdout.on("data", (data) => {
12
- stdout += data.toString();
13
- });
14
- child.stderr.on("data", (data) => {
15
- stderr += data.toString();
16
- });
17
- const timeoutId = opts?.timeoutMs ? setTimeout(() => {
18
- child.kill("SIGTERM");
19
- reject(new Error(`docker sandbox ${args[0]} timed out`));
20
- }, opts.timeoutMs) : void 0;
21
- child.on("error", (err) => {
22
- if (timeoutId) {
23
- clearTimeout(timeoutId);
24
- }
25
- reject(err);
26
- });
27
- child.on("close", (code) => {
28
- if (timeoutId) {
29
- clearTimeout(timeoutId);
30
- }
31
- resolve({ stdout, stderr, exitCode: code ?? 0 });
32
- });
33
- });
34
- }
35
- var ensurePromises = /* @__PURE__ */ new Map();
36
- var activeSandboxes = /* @__PURE__ */ new Set();
37
- var cleanupRegistered = false;
38
- var _execSync = null;
39
- async function registerCleanup() {
40
- if (cleanupRegistered) {
41
- return;
42
- }
43
- cleanupRegistered = true;
44
- const cp = await import("child_process");
45
- _execSync = cp.execSync;
46
- const cleanup = () => {
47
- if (!_execSync) {
48
- return;
49
- }
50
- for (const name of Array.from(activeSandboxes)) {
51
- try {
52
- _execSync(`docker sandbox stop ${name}`, {
53
- timeout: 1e4,
54
- stdio: "pipe"
55
- });
56
- } catch {
57
- }
58
- }
59
- };
60
- process.on("exit", cleanup);
61
- process.on("SIGINT", () => {
62
- cleanup();
63
- process.exit(130);
64
- });
65
- process.on("SIGTERM", () => {
66
- cleanup();
67
- process.exit(143);
68
- });
69
- }
70
- async function ensureSandbox(sandboxName) {
71
- const existing = ensurePromises.get(sandboxName);
72
- if (existing) {
73
- return existing;
74
- }
75
- const promise = (async () => {
76
- const ls = await execDocker(["ls", "-q"], { timeoutMs: 1e4 });
77
- const existingNames = ls.exitCode === 0 ? ls.stdout.split("\n").map((s) => s.trim()).filter(Boolean) : [];
78
- if (existingNames.includes(sandboxName)) {
79
- activeSandboxes.add(sandboxName);
80
- registerCleanup();
81
- return;
82
- }
83
- const path = await import("path");
84
- const os = await import("os");
85
- const fs = await import("fs/promises");
86
- const workspaceDir = path.join(
87
- os.tmpdir(),
88
- "agent-docker-sandbox",
89
- sandboxName
90
- );
91
- await fs.mkdir(workspaceDir, { recursive: true });
92
- const create = await execDocker(
93
- ["create", "--name", sandboxName, "shell", workspaceDir],
94
- { timeoutMs: 6e4 }
95
- );
96
- if (create.exitCode !== 0) {
97
- if (create.stderr.includes("already exists")) {
98
- activeSandboxes.add(sandboxName);
99
- registerCleanup();
100
- return;
101
- }
102
- throw new Error(
103
- `Failed to create docker sandbox "${sandboxName}": ${create.stderr}`
104
- );
105
- }
106
- activeSandboxes.add(sandboxName);
107
- registerCleanup();
108
- })();
109
- ensurePromises.set(sandboxName, promise);
110
- try {
111
- await promise;
112
- } catch (e) {
113
- ensurePromises.delete(sandboxName);
114
- throw e;
115
- }
116
- }
117
- var DEFAULT_DOCKER_CWD = "/home/agent/workspace";
118
- var DockerSandboxInstance = class {
119
- cwd;
120
- sandboxName;
121
- processes = /* @__PURE__ */ new Map();
122
- constructor(sandboxName, cwd) {
123
- this.sandboxName = sandboxName;
124
- this.cwd = cwd ?? DEFAULT_DOCKER_CWD;
125
- }
126
- async exec(opts) {
127
- await ensureSandbox(this.sandboxName);
128
- const { spawn } = await import("child_process");
129
- const commandId = `command_${ulid()}`;
130
- const envFlags = opts.env ? Object.entries(opts.env).flatMap(([k, v]) => ["-e", `${k}=${v}`]) : [];
131
- const cwdFlags = opts.cwd ? ["-w", opts.cwd] : [];
132
- const baseCmd = opts.sudo ? ["sudo", opts.command, ...opts.args ?? []] : opts.args ? [opts.command, ...opts.args] : [opts.command];
133
- const fullCmd = baseCmd;
134
- const child = spawn(
135
- "docker",
136
- [
137
- "sandbox",
138
- "exec",
139
- ...envFlags,
140
- ...cwdFlags,
141
- this.sandboxName,
142
- ...fullCmd
143
- ],
144
- { signal: opts.signal }
145
- );
146
- this.processes.set(commandId, child);
147
- let stdout = "";
148
- let stderr = "";
149
- const logQueue = [];
150
- let logResolve = null;
151
- let closed = false;
152
- child.stdout.on("data", (data) => {
153
- const str = String(data);
154
- stdout += str;
155
- logQueue.push({ stream: "stdout", data: str });
156
- logResolve?.();
157
- });
158
- child.stderr.on("data", (data) => {
159
- const str = String(data);
160
- stderr += str;
161
- logQueue.push({ stream: "stderr", data: str });
162
- logResolve?.();
163
- });
164
- const result = new Promise((resolve, reject) => {
165
- child.on("error", (err) => {
166
- this.processes.delete(commandId);
167
- closed = true;
168
- logResolve?.();
169
- reject(err);
170
- });
171
- child.on("close", (code) => {
172
- this.processes.delete(commandId);
173
- closed = true;
174
- logResolve?.();
175
- resolve({ stdout, stderr, exitCode: code ?? 0 });
176
- });
177
- });
178
- async function* logs() {
179
- while (!closed || logQueue.length > 0) {
180
- const entry = logQueue.shift();
181
- if (entry) {
182
- yield entry;
183
- } else if (!closed) {
184
- await new Promise((r) => {
185
- logResolve = r;
186
- });
187
- logResolve = null;
188
- }
189
- }
190
- }
191
- return { commandId, logs, result };
192
- }
193
- async readFile(opts) {
194
- await ensureSandbox(this.sandboxName);
195
- const result = await execDocker(
196
- [
197
- "exec",
198
- this.sandboxName,
199
- "bash",
200
- "-c",
201
- `base64 '${opts.path.replace(/'/g, "'\\''")}'`
202
- ],
203
- { timeoutMs: 3e4, signal: opts.signal }
204
- );
205
- if (result.exitCode !== 0) {
206
- if (result.stderr.includes("No such file") || result.stderr.includes("ENOENT")) {
207
- return null;
208
- }
209
- throw new Error(`readFile failed: ${result.stderr}`);
210
- }
211
- return Buffer.from(result.stdout.trim(), "base64");
212
- }
213
- async writeFiles(opts) {
214
- await ensureSandbox(this.sandboxName);
215
- for (const file of opts.files) {
216
- const fullPath = opts.destPath ? `${opts.destPath}/${file.path}` : file.path;
217
- const parentDir = fullPath.substring(0, fullPath.lastIndexOf("/"));
218
- if (parentDir) {
219
- await execDocker(["exec", this.sandboxName, "mkdir", "-p", parentDir], {
220
- signal: opts.signal
221
- });
222
- }
223
- const b64 = typeof file.content === "string" ? Buffer.from(file.content).toString("base64") : file.content.toString("base64");
224
- await execDocker(
225
- [
226
- "exec",
227
- this.sandboxName,
228
- "bash",
229
- "-c",
230
- `echo '${b64}' | base64 -d > '${fullPath.replace(/'/g, "'\\''")}'`
231
- ],
232
- { signal: opts.signal }
233
- );
234
- if (file.path.endsWith(".sh")) {
235
- await execDocker(["exec", this.sandboxName, "chmod", "+x", fullPath], {
236
- signal: opts.signal
237
- });
238
- }
239
- }
240
- }
241
- // biome-ignore lint/suspicious/useAwait: .
242
- async getDomain(opts) {
243
- return `http://localhost:${opts.port}`;
244
- }
245
- // biome-ignore lint/suspicious/useAwait: .
246
- async kill(opts) {
247
- const child = this.processes.get(opts.commandId);
248
- if (child) {
249
- child.kill("SIGTERM");
250
- this.processes.delete(opts.commandId);
251
- }
252
- }
253
- // biome-ignore lint/suspicious/useAwait: .
254
- async getStatus() {
255
- return "running";
256
- }
257
- async start() {
258
- await ensureSandbox(this.sandboxName);
259
- }
260
- async stop() {
261
- await execDocker(["stop", this.sandboxName], { timeoutMs: 3e4 });
262
- activeSandboxes.delete(this.sandboxName);
263
- ensurePromises.delete(this.sandboxName);
264
- }
265
- // biome-ignore lint/suspicious/useAwait: .
266
- async snapshot() {
267
- throw new Error("snapshot is not supported for docker sandboxes");
268
- }
269
- // biome-ignore lint/suspicious/useAwait: .
270
- async updateNetworkPolicy() {
271
- throw new Error(
272
- "updateNetworkPolicy is not supported for docker sandboxes"
273
- );
274
- }
275
- };
276
- function dockerSandbox() {
277
- return {
278
- type: "docker",
279
- async create(opts) {
280
- const sandboxName = `agent-${ulid()}`;
281
- const cwd = opts.setup?.config?.cwd;
282
- await ensureSandbox(sandboxName);
283
- const instance = new DockerSandboxInstance(sandboxName, cwd);
284
- if (opts.setup?.run) {
285
- await opts.setup.run(instance);
286
- }
287
- return {
288
- instance,
289
- metadata: { sandboxName }
290
- };
291
- },
292
- // biome-ignore lint/suspicious/useAwait: .
293
- async connect(opts) {
294
- return new DockerSandboxInstance(opts.metadata.sandboxName);
295
- }
296
- };
297
- }
298
-
299
- export {
300
- dockerSandbox
301
- };
302
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvZG9ja2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgc2FuZGJveE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUnVuIGEgYGRvY2tlciBzYW5kYm94YCBDTEkgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNEb2NrZXIoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH1cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImRvY2tlclwiLCBbXCJzYW5kYm94XCIsIC4uLmFyZ3NdLCB7XG4gICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IG9wdHM/LnRpbWVvdXRNc1xuICAgICAgPyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBkb2NrZXIgc2FuZGJveCAke2FyZ3NbMF19IHRpbWVkIG91dGApKTtcbiAgICAgICAgfSwgb3B0cy50aW1lb3V0TXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhY2sgd2hpY2ggc2FuZGJveGVzIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGlzIHByb2Nlc3MuXG4gKiBNYXBzIHNhbmRib3ggbmFtZSAtPiBQcm9taXNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyB3YWl0IG9uIHRoZSBzYW1lIGNoZWNrLlxuICovXG5jb25zdCBlbnN1cmVQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKipcbiAqIFNhbmRib3hlcyB0aGF0IHRoaXMgcHJvY2VzcyBoYXMgdXNlZC4gU3RvcHBlZCBvbiBwcm9jZXNzIGV4aXQuXG4gKi9cbmNvbnN0IGFjdGl2ZVNhbmRib3hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgY2xlYW51cFJlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBfZXhlY1N5bmM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJDbGVhbnVwKCkge1xuICBpZiAoY2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFByZS1sb2FkIGV4ZWNTeW5jIHNvIHRoZSBzeW5jaHJvbm91cyBleGl0IGhhbmRsZXIgY2FuIHVzZSBpdC5cbiAgY29uc3QgY3AgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIF9leGVjU3luYyA9IGNwLmV4ZWNTeW5jO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKCFfZXhlY1N5bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEFycmF5LmZyb20oYWN0aXZlU2FuZGJveGVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2V4ZWNTeW5jKGBkb2NrZXIgc2FuZGJveCBzdG9wICR7bmFtZX1gLCB7XG4gICAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgXHUyMDE0IHNhbmRib3ggbWF5IGFscmVhZHkgYmUgc3RvcHBlZFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiZXhpdFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICB9KTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgRG9ja2VyIHNhbmRib3ggZXhpc3RzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAqIElmIGl0IGFscmVhZHkgZXhpc3RzIChmcm9tIGEgcHJldmlvdXMgcHJvY2VzcyksIHJldXNlcyBpdC5cbiAqIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZyA9IGVuc3VyZVByb21pc2VzLmdldChzYW5kYm94TmFtZSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxzID0gYXdhaXQgZXhlY0RvY2tlcihbXCJsc1wiLCBcIi1xXCJdLCB7IHRpbWVvdXRNczogMTBfMDAwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPVxuICAgICAgbHMuZXhpdENvZGUgPT09IDBcbiAgICAgICAgPyBscy5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG5cbiAgICBpZiAoZXhpc3RpbmdOYW1lcy5pbmNsdWRlcyhzYW5kYm94TmFtZSkpIHtcbiAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6b3NcIik7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlRGlyID0gcGF0aC5qb2luKFxuICAgICAgb3MudG1wZGlyKCksXG4gICAgICBcImFnZW50LWRvY2tlci1zYW5kYm94XCIsXG4gICAgICBzYW5kYm94TmFtZVxuICAgICk7XG4gICAgYXdhaXQgZnMubWtkaXIod29ya3NwYWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXCJjcmVhdGVcIiwgXCItLW5hbWVcIiwgc2FuZGJveE5hbWUsIFwic2hlbGxcIiwgd29ya3NwYWNlRGlyXSxcbiAgICAgIHsgdGltZW91dE1zOiA2MF8wMDAgfVxuICAgICk7XG5cbiAgICBpZiAoY3JlYXRlLmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoY3JlYXRlLnN0ZGVyci5pbmNsdWRlcyhcImFscmVhZHkgZXhpc3RzXCIpKSB7XG4gICAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBkb2NrZXIgc2FuZGJveCBcIiR7c2FuZGJveE5hbWV9XCI6ICR7Y3JlYXRlLnN0ZGVycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICB9KSgpO1xuXG4gIGVuc3VyZVByb21pc2VzLnNldChzYW5kYm94TmFtZSwgcHJvbWlzZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHNhbmRib3hOYW1lKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfRE9DS0VSX0NXRCA9IFwiL2hvbWUvYWdlbnQvd29ya3NwYWNlXCI7XG5cbmNsYXNzIERvY2tlclNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2FuZGJveE5hbWU6IHN0cmluZywgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zYW5kYm94TmFtZSA9IHNhbmRib3hOYW1lO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IERFRkFVTFRfRE9DS0VSX0NXRDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgZW52RmxhZ3MgPSBvcHRzLmVudlxuICAgICAgPyBPYmplY3QuZW50cmllcyhvcHRzLmVudikuZmxhdE1hcCgoW2ssIHZdKSA9PiBbXCItZVwiLCBgJHtrfT0ke3Z9YF0pXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGN3ZEZsYWdzID0gb3B0cy5jd2QgPyBbXCItd1wiLCBvcHRzLmN3ZF0gOiBbXTtcbiAgICBjb25zdCBiYXNlQ21kID0gb3B0cy5zdWRvXG4gICAgICA/IFtcInN1ZG9cIiwgb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV1cbiAgICAgIDogb3B0cy5hcmdzXG4gICAgICAgID8gW29wdHMuY29tbWFuZCwgLi4ub3B0cy5hcmdzXVxuICAgICAgICA6IFtvcHRzLmNvbW1hbmRdO1xuICAgIGNvbnN0IGZ1bGxDbWQgPSBiYXNlQ21kO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAgIFwiZG9ja2VyXCIsXG4gICAgICBbXG4gICAgICAgIFwic2FuZGJveFwiLFxuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgLi4uZW52RmxhZ3MsXG4gICAgICAgIC4uLmN3ZEZsYWdzLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAuLi5mdWxsQ21kLFxuICAgICAgXSxcbiAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICBcImJhc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgYmFzZTY0ICcke29wdHMucGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgIF0sXG4gICAgICB7IHRpbWVvdXRNczogMzBfMDAwLCBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiTm8gc3VjaCBmaWxlXCIpIHx8XG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJFTk9FTlRcIilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZEZpbGUgZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnJ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQudHJpbSgpLCBcImJhc2U2NFwiKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuZGVzdFBhdGhcbiAgICAgICAgPyBgJHtvcHRzLmRlc3RQYXRofS8ke2ZpbGUucGF0aH1gXG4gICAgICAgIDogZmlsZS5wYXRoO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IGZ1bGxQYXRoLnN1YnN0cmluZygwLCBmdWxsUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgaWYgKHBhcmVudERpcikge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJta2RpclwiLCBcIi1wXCIsIHBhcmVudERpcl0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgdmlhIGJhc2U2NCB0byBoYW5kbGUgYm90aCB0ZXh0IGFuZCBiaW5hcnkgY29udGVudFxuICAgICAgY29uc3QgYjY0ID1cbiAgICAgICAgdHlwZW9mIGZpbGUuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICAgIDogZmlsZS5jb250ZW50LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgICBbXG4gICAgICAgICAgXCJleGVjXCIsXG4gICAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgICBcImJhc2hcIixcbiAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgYGVjaG8gJyR7YjY0fScgfCBiYXNlNjQgLWQgPiAnJHtmdWxsUGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgICAgXSxcbiAgICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwiY2htb2RcIiwgXCIreFwiLCBmdWxsUGF0aF0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XG4gICAgXCJwZW5kaW5nXCIgfCBcInJ1bm5pbmdcIiB8IFwic3RvcHBpbmdcIiB8IFwic3RvcHBlZFwiIHwgXCJmYWlsZWRcIlxuICA+IHtcbiAgICAvLyBkb2NrZXIgc2FuZGJveCBDTEkgZG9lc24ndCBleHBvc2Ugc3RhdHVzIFx1MjAxNCBhc3N1bWUgcnVubmluZyBpZiBlbnN1cmVkXG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZXhlY0RvY2tlcihbXCJzdG9wXCIsIHRoaXMuc2FuZGJveE5hbWVdLCB7IHRpbWVvdXRNczogMzBfMDAwIH0pO1xuICAgIGFjdGl2ZVNhbmRib3hlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9ja2VyU2FuZGJveCgpOiBTYW5kYm94QmluZGluZzxcbiAgXCJkb2NrZXJcIixcbiAgRG9ja2VyQmluZGluZ0NvbmZpZyxcbiAgRG9ja2VyQmluZGluZ01ldGFkYXRhXG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImRvY2tlclwiLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBzYW5kYm94TmFtZSA9IGBhZ2VudC0ke3VsaWQoKX1gO1xuICAgICAgY29uc3QgY3dkID0gb3B0cy5zZXR1cD8uY29uZmlnPy5jd2Q7XG5cbiAgICAgIGF3YWl0IGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWUpO1xuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uoc2FuZGJveE5hbWUsIGN3ZCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveE5hbWUgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKG9wdHMubWV0YWRhdGEuc2FuZGJveE5hbWUpO1xuICAgIH0sXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxZQUFZO0FBY3JCLGVBQWUsV0FDYixNQUNBLE1BQytEO0FBQy9ELFFBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxPQUFPLGVBQW9CO0FBQ25ELFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFVBQU0sUUFBUSxNQUFNLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHO0FBQUEsTUFDbEQsUUFBUSxNQUFNO0FBQUEsSUFDaEIsQ0FBQztBQUVELFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUViLFVBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFpQjtBQUN4QyxnQkFBVSxLQUFLLFNBQVM7QUFBQSxJQUMxQixDQUFDO0FBQ0QsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3hDLGdCQUFVLEtBQUssU0FBUztBQUFBLElBQzFCLENBQUM7QUFFRCxVQUFNLFlBQVksTUFBTSxZQUNwQixXQUFXLE1BQU07QUFDZixZQUFNLEtBQUssU0FBUztBQUNwQixhQUFPLElBQUksTUFBTSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQUEsSUFDekQsR0FBRyxLQUFLLFNBQVMsSUFDakI7QUFFSixVQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVE7QUFDekIsVUFBSSxXQUFXO0FBQ2IscUJBQWEsU0FBUztBQUFBLE1BQ3hCO0FBQ0EsYUFBTyxHQUFHO0FBQUEsSUFDWixDQUFDO0FBRUQsVUFBTSxHQUFHLFNBQVMsQ0FBQyxT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
@@ -1,196 +0,0 @@
1
- // src/storage/adapter.ts
2
- import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@workflow/serde";
3
- var StorageStep = class _StorageStep {
4
- event;
5
- constructor(event) {
6
- this.event = event;
7
- }
8
- static [WORKFLOW_SERIALIZE](instance) {
9
- return { event: instance.event };
10
- }
11
- static [WORKFLOW_DESERIALIZE](data) {
12
- return new _StorageStep(data.event);
13
- }
14
- // biome-ignore lint/suspicious/noExplicitAny: safe dispatch — event.method selects the matching handler
15
- on(handlers) {
16
- return handlers[this.event.method](this.event);
17
- }
18
- };
19
- function isStepFunction(h) {
20
- return typeof h === "function";
21
- }
22
- function fromStepFunction(fn) {
23
- return {
24
- session: {
25
- get: (id) => fn(new StorageStep({ method: "session.get", id })),
26
- set: (id, value) => fn(new StorageStep({ method: "session.set", id, value })),
27
- update: (id, updates) => fn(new StorageStep({ method: "session.update", id, updates }))
28
- },
29
- message: {
30
- get: (id) => fn(new StorageStep({ method: "message.get", id })),
31
- set: (id, value) => fn(new StorageStep({ method: "message.set", id, value })),
32
- update: (id, updates) => fn(new StorageStep({ method: "message.update", id, updates })),
33
- listBySession: (sessionId) => fn(new StorageStep({ method: "message.listBySession", sessionId }))
34
- },
35
- part: {
36
- get: (id) => fn(new StorageStep({ method: "part.get", id })),
37
- set: (id, value) => fn(new StorageStep({ method: "part.set", id, value })),
38
- listBySession: (sessionId) => fn(new StorageStep({ method: "part.listBySession", sessionId }))
39
- },
40
- sandbox: {
41
- get: (id) => fn(new StorageStep({ method: "sandbox.get", id })),
42
- set: (id, value) => fn(new StorageStep({ method: "sandbox.set", id, value })),
43
- update: (id, updates) => fn(new StorageStep({ method: "sandbox.update", id, updates }))
44
- },
45
- setup: {
46
- get: (id) => fn(new StorageStep({ method: "setup.get", id })),
47
- set: (id, value) => fn(new StorageStep({ method: "setup.set", id, value }))
48
- }
49
- };
50
- }
51
- function fromHandlers(h) {
52
- return {
53
- session: {
54
- get: (id) => h["session.get"]({ id }),
55
- set: (id, value) => h["session.set"]({ id, value }),
56
- update: (id, updates) => h["session.update"]({ id, updates })
57
- },
58
- message: {
59
- get: (id) => h["message.get"]({ id }),
60
- set: (id, value) => h["message.set"]({ id, value }),
61
- update: (id, updates) => h["message.update"]({ id, updates }),
62
- listBySession: (sessionId) => h["message.listBySession"]({ sessionId })
63
- },
64
- part: {
65
- get: (id) => h["part.get"]({ id }),
66
- set: (id, value) => h["part.set"]({ id, value }),
67
- listBySession: (sessionId) => h["part.listBySession"]({ sessionId })
68
- },
69
- sandbox: {
70
- get: (id) => h["sandbox.get"]({ id }),
71
- set: (id, value) => h["sandbox.set"]({ id, value }),
72
- update: (id, updates) => h["sandbox.update"]({ id, updates })
73
- },
74
- setup: {
75
- get: (id) => h["setup.get"]({ id }),
76
- set: (id, value) => h["setup.set"]({ id, value })
77
- }
78
- };
79
- }
80
- function toStorage(h) {
81
- return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
82
- }
83
-
84
- // src/storage/bindings/local.ts
85
- var _fs;
86
- var _path;
87
- async function fs() {
88
- if (!_fs) {
89
- _fs = await import("fs/promises");
90
- }
91
- return _fs;
92
- }
93
- async function path() {
94
- if (!_path) {
95
- _path = await import("path");
96
- }
97
- return _path;
98
- }
99
- function createStore(dir) {
100
- const filePath = async (key) => (await path()).join(dir, `${key}.json`);
101
- return {
102
- async get(key) {
103
- try {
104
- const data = await (await fs()).readFile(await filePath(key), "utf-8");
105
- return JSON.parse(data);
106
- } catch {
107
- return null;
108
- }
109
- },
110
- async set(key, value) {
111
- const p = await filePath(key);
112
- const { mkdir, writeFile } = await fs();
113
- const { dirname } = await path();
114
- await mkdir(dirname(p), { recursive: true });
115
- await writeFile(p, JSON.stringify(value, null, 2));
116
- },
117
- async update(key, updates) {
118
- const p = await filePath(key);
119
- const { readFile, mkdir, writeFile } = await fs();
120
- const { dirname } = await path();
121
- let existing;
122
- try {
123
- const data = await readFile(p, "utf-8");
124
- existing = JSON.parse(data);
125
- } catch {
126
- throw new Error(`Not found: ${key}`);
127
- }
128
- const updated = { ...existing, ...updates };
129
- await mkdir(dirname(p), { recursive: true });
130
- await writeFile(p, JSON.stringify(updated, null, 2));
131
- return updated;
132
- }
133
- };
134
- }
135
- async function readAllFromDir(dir) {
136
- const { readdir, readFile } = await fs();
137
- const { join } = await path();
138
- let files;
139
- try {
140
- files = await readdir(dir);
141
- } catch {
142
- return [];
143
- }
144
- const result = [];
145
- for (const file of files) {
146
- if (!file.endsWith(".json")) {
147
- continue;
148
- }
149
- try {
150
- const data = await readFile(join(dir, file), "utf-8");
151
- result.push(JSON.parse(data));
152
- } catch {
153
- }
154
- }
155
- return result;
156
- }
157
- function localStorage(opts) {
158
- const dir = opts?.dir ?? ".agent";
159
- const sessionStore = createStore(`${dir}/session`);
160
- const messageStore = createStore(`${dir}/message`);
161
- const partStore = createStore(`${dir}/part`);
162
- const sandboxStore = createStore(`${dir}/sandbox`);
163
- const setupStore = createStore(`${dir}/setup`);
164
- const messageDir = `${dir}/message`;
165
- const partDir = `${dir}/part`;
166
- return {
167
- "session.get": ({ id }) => sessionStore.get(id),
168
- "session.set": ({ id, value }) => sessionStore.set(id, value),
169
- "session.update": ({ id, updates }) => sessionStore.update(id, updates),
170
- "message.get": ({ id }) => messageStore.get(id),
171
- "message.set": ({ id, value }) => messageStore.set(id, value),
172
- "message.update": ({ id, updates }) => messageStore.update(id, updates),
173
- "message.listBySession": async ({ sessionId }) => {
174
- const all = await readAllFromDir(messageDir);
175
- return all.filter((m) => m.sessionId === sessionId);
176
- },
177
- "part.get": ({ id }) => partStore.get(id),
178
- "part.set": ({ id, value }) => partStore.set(id, value),
179
- "part.listBySession": async ({ sessionId }) => {
180
- const all = await readAllFromDir(partDir);
181
- return all.filter((p) => p.sessionId === sessionId);
182
- },
183
- "sandbox.get": ({ id }) => sandboxStore.get(id),
184
- "sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
185
- "sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
186
- "setup.get": ({ id }) => setupStore.get(id),
187
- "setup.set": ({ id, value }) => setupStore.set(id, value)
188
- };
189
- }
190
-
191
- export {
192
- StorageStep,
193
- toStorage,
194
- localStorage
195
- };
196
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUhhbmRsZXJzIChwdWJsaWMsIGZsYXQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSGFuZGxlcnMgPSB7XG4gIFwic2Vzc2lvbi5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICBcInNlc3Npb24uc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2Vzc2lvbiB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzZXNzaW9uLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj47XG4gIH0pOiBQcm9taXNlPFNlc3Npb24+O1xuXG4gIFwibWVzc2FnZS5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICBcIm1lc3NhZ2Uuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogTWVzc2FnZSB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJtZXNzYWdlLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT47XG4gIH0pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZVtdPjtcblxuICBcInBhcnQuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgXCJwYXJ0LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFBhcnQgfSk6IFByb21pc2U8dm9pZD47XG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0W10+O1xuXG4gIFwic2FuZGJveC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICBcInNhbmRib3guc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2FuZGJveCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzYW5kYm94LnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD47XG4gIH0pOiBQcm9taXNlPFNhbmRib3g+O1xuXG4gIFwic2V0dXAuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gIFwic2V0dXAuc2V0XCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdmFsdWU6IFNldHVwO1xuICB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIE1lc3NhZ2UsXG4gIFBhcnQsXG4gIFNhbmRib3gsXG4gIFNlc3Npb24sXG4gIFNldHVwLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxubGV0IF9mczogdHlwZW9mIGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIikgfCB1bmRlZmluZWQ7XG5sZXQgX3BhdGg6IHR5cGVvZiBpbXBvcnQoXCJub2RlOnBhdGhcIikgfCB1bmRlZmluZWQ7XG5cbmFzeW5jIGZ1bmN0aW9uIGZzKCkge1xuICBpZiAoIV9mcykge1xuICAgIF9mcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIH1cbiAgcmV0dXJuIF9mcztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIGlmICghX3BhdGgpIHtcbiAgICBfcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgfVxuICByZXR1cm4gX3BhdGg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQ+KGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICAgIChhd2FpdCBwYXRoKCkpLmpvaW4oZGlyLCBgJHtrZXl9Lmpzb25gKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZnMoKSkucmVhZEZpbGUoYXdhaXQgZmlsZVBhdGgoa2V5KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikpO1xuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgIGNvbnN0IHsgcmVhZEZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGxldCBleGlzdGluZzogVDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwLCBcInV0Zi04XCIpO1xuICAgICAgICBleGlzdGluZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUocCwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCwgbnVsbCwgMikpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEZyb21EaXI8VD4oZGlyOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgbGV0IGZpbGVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShqb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XG4gICAgICByZXN1bHQucHVzaChKU09OLnBhcnNlKGRhdGEpIGFzIFQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2tpcCBjb3JydXB0IGZpbGVzXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFN0b3JhZ2Uob3B0cz86IHsgZGlyPzogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBjb25zdCBkaXIgPSBvcHRzPy5kaXIgPz8gXCIuYWdlbnRcIjtcblxuICBjb25zdCBzZXNzaW9uU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXNzaW9uPihgJHtkaXJ9L3Nlc3Npb25gKTtcbiAgY29uc3QgbWVzc2FnZVN0b3JlID0gY3JlYXRlU3RvcmU8TWVzc2FnZT4oYCR7ZGlyfS9tZXNzYWdlYCk7XG4gIGNvbnN0IHBhcnRTdG9yZSA9IGNyZWF0ZVN0b3JlPFBhcnQ+KGAke2Rpcn0vcGFydGApO1xuICBjb25zdCBzYW5kYm94U3RvcmUgPSBjcmVhdGVTdG9yZTxTYW5kYm94PihgJHtkaXJ9L3NhbmRib3hgKTtcbiAgY29uc3Qgc2V0dXBTdG9yZSA9IGNyZWF0ZVN0b3JlPFNldHVwPihgJHtkaXJ9L3NldHVwYCk7XG4gIGNvbnN0IG1lc3NhZ2VEaXIgPSBgJHtkaXJ9L21lc3NhZ2VgO1xuICBjb25zdCBwYXJ0RGlyID0gYCR7ZGlyfS9wYXJ0YDtcblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogKHsgaWQgfSkgPT4gc2Vzc2lvblN0b3JlLmdldChpZCksXG4gICAgXCJzZXNzaW9uLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2Vzc2lvblN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2Vzc2lvblN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6ICh7IGlkIH0pID0+IG1lc3NhZ2VTdG9yZS5nZXQoaWQpLFxuICAgIFwibWVzc2FnZS5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG1lc3NhZ2VTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+IG1lc3NhZ2VTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpLFxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxNZXNzYWdlPihtZXNzYWdlRGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChtKSA9PiBtLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiAoeyBpZCB9KSA9PiBwYXJ0U3RvcmUuZ2V0KGlkKSxcbiAgICBcInBhcnQuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBwYXJ0U3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKHApID0+IHAuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6ICh7IGlkIH0pID0+IHNhbmRib3hTdG9yZS5nZXQoaWQpLFxuICAgIFwic2FuZGJveC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNhbmRib3hTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInNhbmRib3gudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+IHNhbmRib3hTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpLFxuXG4gICAgXCJzZXR1cC5nZXRcIjogKHsgaWQgfSkgPT4gc2V0dXBTdG9yZS5nZXQoaWQpLFxuICAgIFwic2V0dXAuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXR1cFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMs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
@@ -1,36 +0,0 @@
1
- import { S as SandboxBinding, e as LifecycleConfig } from './steps-BnkRQKlc.js';
2
- import * as _vercel_sandbox from '@vercel/sandbox';
3
-
4
- type DockerBindingConfig = {
5
- cwd?: string;
6
- };
7
- type DockerBindingMetadata = {
8
- sandboxName: string;
9
- };
10
- declare function dockerSandbox(): SandboxBinding<"docker", DockerBindingConfig, DockerBindingMetadata>;
11
-
12
- type LocalBindingConfig = {
13
- cwd?: string;
14
- };
15
- type LocalBindingMetadata = {
16
- basePath: string;
17
- pid: number;
18
- };
19
- declare function localSandbox(): SandboxBinding<"local", LocalBindingConfig, LocalBindingMetadata>;
20
-
21
- type VercelBindingConfig = {
22
- cwd?: string;
23
- resources?: {
24
- vcpus: number;
25
- };
26
- ports?: number[];
27
- networkPolicy?: _vercel_sandbox.NetworkPolicy;
28
- snapshotId?: string;
29
- lifecycle?: LifecycleConfig;
30
- };
31
- type VercelBindingMetadata = {
32
- sandboxId: string;
33
- };
34
- declare function vercelSandbox(): SandboxBinding<"vercel", VercelBindingConfig, VercelBindingMetadata>;
35
-
36
- export { type DockerBindingConfig as D, type LocalBindingConfig as L, type VercelBindingConfig as V, type LocalBindingMetadata as a, type VercelBindingMetadata as b, type DockerBindingMetadata as c, dockerSandbox as d, localSandbox as l, vercelSandbox as v };
@@ -1,36 +0,0 @@
1
- import { S as SandboxBinding, e as LifecycleConfig } from './steps-u-mGDbP_.mjs';
2
- import * as _vercel_sandbox from '@vercel/sandbox';
3
-
4
- type DockerBindingConfig = {
5
- cwd?: string;
6
- };
7
- type DockerBindingMetadata = {
8
- sandboxName: string;
9
- };
10
- declare function dockerSandbox(): SandboxBinding<"docker", DockerBindingConfig, DockerBindingMetadata>;
11
-
12
- type LocalBindingConfig = {
13
- cwd?: string;
14
- };
15
- type LocalBindingMetadata = {
16
- basePath: string;
17
- pid: number;
18
- };
19
- declare function localSandbox(): SandboxBinding<"local", LocalBindingConfig, LocalBindingMetadata>;
20
-
21
- type VercelBindingConfig = {
22
- cwd?: string;
23
- resources?: {
24
- vcpus: number;
25
- };
26
- ports?: number[];
27
- networkPolicy?: _vercel_sandbox.NetworkPolicy;
28
- snapshotId?: string;
29
- lifecycle?: LifecycleConfig;
30
- };
31
- type VercelBindingMetadata = {
32
- sandboxId: string;
33
- };
34
- declare function vercelSandbox(): SandboxBinding<"vercel", VercelBindingConfig, VercelBindingMetadata>;
35
-
36
- export { type DockerBindingConfig as D, type LocalBindingConfig as L, type VercelBindingConfig as V, type LocalBindingMetadata as a, type VercelBindingMetadata as b, type DockerBindingMetadata as c, dockerSandbox as d, localSandbox as l, vercelSandbox as v };