experimental-agent 0.0.2 → 0.0.3
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.
- package/README.md +13 -2
- package/dist/agent-workflow.d.mts +11 -3
- package/dist/agent-workflow.d.ts +11 -3
- package/dist/agent-workflow.js +1921 -1144
- package/dist/agent-workflow.mjs +7 -3
- package/dist/chunk-3ODWQVIA.mjs +12 -0
- package/dist/chunk-64THY7Y7.mjs +155 -0
- package/dist/chunk-GSRJYPWF.mjs +284 -0
- package/dist/chunk-HJGPUEFC.mjs +42 -0
- package/dist/chunk-JEE2FQ4O.mjs +844 -0
- package/dist/chunk-TQRCSTCF.mjs +103 -0
- package/dist/chunk-UFVWOC5L.mjs +79 -0
- package/dist/chunk-VBLZWXVE.mjs +318 -0
- package/dist/chunk-ZASQBPOI.mjs +2057 -0
- package/dist/{types-DPXFq_r6.d.ts → client-BlSrVoPI.d.mts} +868 -31
- package/dist/{types-DPXFq_r6.d.mts → client-BlSrVoPI.d.ts} +868 -31
- package/dist/client-SREKHM6I.mjs +15 -0
- package/dist/client.d.mts +37 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.js +58 -0
- package/dist/client.mjs +30 -0
- package/dist/{client-HUG4HT5L.mjs → handler-36FM5H35.mjs} +4 -5
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +3102 -1438
- package/dist/index.mjs +720 -147
- package/dist/lifecycle-workflow.d.mts +3 -10
- package/dist/lifecycle-workflow.d.ts +3 -10
- package/dist/lifecycle-workflow.js +170 -1246
- package/dist/lifecycle-workflow.mjs +5 -41
- package/dist/local-fs-handlers-P4WGW3QY.mjs +235 -0
- package/dist/next/loader.d.mts +14 -0
- package/dist/next/loader.d.ts +14 -0
- package/dist/next/loader.js +206 -0
- package/dist/next/loader.mjs +103 -0
- package/dist/next.d.mts +34 -0
- package/dist/next.d.ts +34 -0
- package/dist/next.js +329 -0
- package/dist/next.mjs +224 -0
- package/dist/process-manager-JAKAXROL.mjs +10 -0
- package/dist/{client-4Y3UPWFR.mjs → sandbox-QAPGBVYM.mjs} +4 -3
- package/dist/storage-Q376OZH3.mjs +20 -0
- package/dist/{vercel-2CFDMEHB.mjs → vercel-LLXAHKVJ.mjs} +3 -1
- package/dist/vercel-sdk-VHKEX2GQ.mjs +8 -0
- package/package.json +32 -19
- package/dist/chunk-24DJSI7C.mjs +0 -374
- package/dist/chunk-4RGMKC2M.mjs +0 -755
- package/dist/chunk-6ICYKNCC.mjs +0 -284
- package/dist/chunk-PGYYQ3WZ.mjs +0 -1088
- package/dist/client-BBpD9kKL.d.ts +0 -193
- package/dist/client-BGJViybU.d.mts +0 -193
- package/dist/lifecycle-workflow-steps-HHN46ZAD.mjs +0 -20
- package/dist/local-BYPFRMLZ.mjs +0 -282
- package/dist/process-manager-H2HF6G4G.mjs +0 -153
- package/dist/sandbox-BFA4ECEQ.mjs +0 -10
- package/dist/storage-2U2QFNWI.mjs +0 -27
- /package/dist/{chunk-36X6L7SK.mjs → chunk-TAXLUVIC.mjs} +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// src/sandbox/bindings/lifecycle-workflow.ts
|
|
2
|
+
import { sleep } from "workflow";
|
|
3
|
+
|
|
4
|
+
// src/sandbox/bindings/lifecycle-workflow-steps.ts
|
|
5
|
+
var DEFAULT_POLL_INTERVAL_MS = 2 * 60 * 1e3;
|
|
6
|
+
var DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
7
|
+
var SNAPSHOT_BEFORE_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
8
|
+
var getTestCredentials = () => process.env.NODE_ENV === "test" ? {
|
|
9
|
+
token: process.env.TEST_VERCEL_TOKEN,
|
|
10
|
+
teamId: process.env.TEST_VERCEL_TEAM_ID,
|
|
11
|
+
projectId: process.env.TEST_VERCEL_PROJECT_ID
|
|
12
|
+
} : {};
|
|
13
|
+
async function checkAndSnapshotStep(input) {
|
|
14
|
+
"use step";
|
|
15
|
+
const { Sandbox: VercelSandboxSDK } = await import("./vercel-sdk-VHKEX2GQ.mjs");
|
|
16
|
+
const { getStorage } = await import("./storage-Q376OZH3.mjs");
|
|
17
|
+
const storage = getStorage({
|
|
18
|
+
config: input.storageConfig,
|
|
19
|
+
rpc: input.rpc
|
|
20
|
+
});
|
|
21
|
+
const record = await storage.sandbox.get(input.id);
|
|
22
|
+
if (record instanceof Error) {
|
|
23
|
+
return { action: "exit", reason: "not_found" };
|
|
24
|
+
}
|
|
25
|
+
const currentSandboxId = record.providerMetadata?.provider === "vercel" ? record.providerMetadata.sandboxId : null;
|
|
26
|
+
if (currentSandboxId !== input.vercelSandboxId) {
|
|
27
|
+
return { action: "exit", reason: "sandboxId_changed" };
|
|
28
|
+
}
|
|
29
|
+
if (!currentSandboxId) {
|
|
30
|
+
return { action: "exit", reason: "not_found" };
|
|
31
|
+
}
|
|
32
|
+
const config = record.config;
|
|
33
|
+
if (config.type !== "vercel") {
|
|
34
|
+
return { action: "exit", reason: "not_found" };
|
|
35
|
+
}
|
|
36
|
+
const pollIntervalMs = config.lifecycle?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
37
|
+
const idleTimeoutMs = config.lifecycle?.stopAfterInactiveMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
38
|
+
const snapshotBeforeTimeoutMs = config.lifecycle?.snapshotBeforeTimeoutMs ?? SNAPSHOT_BEFORE_TIMEOUT_MS;
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const lastActivity = record.lastActivityAt ?? record.createdAt ?? now;
|
|
41
|
+
const idleDuration = now - lastActivity;
|
|
42
|
+
const shouldSnapshotDueToIdle = idleDuration > idleTimeoutMs;
|
|
43
|
+
let shouldSnapshotDueToTimeout = false;
|
|
44
|
+
try {
|
|
45
|
+
const sandbox = await VercelSandboxSDK.get({
|
|
46
|
+
sandboxId: currentSandboxId,
|
|
47
|
+
...getTestCredentials()
|
|
48
|
+
});
|
|
49
|
+
if (sandbox.timeout < snapshotBeforeTimeoutMs) {
|
|
50
|
+
shouldSnapshotDueToTimeout = true;
|
|
51
|
+
}
|
|
52
|
+
} catch {
|
|
53
|
+
return { action: "exit", reason: "not_found" };
|
|
54
|
+
}
|
|
55
|
+
if (shouldSnapshotDueToIdle || shouldSnapshotDueToTimeout) {
|
|
56
|
+
try {
|
|
57
|
+
const sandbox = await VercelSandboxSDK.get({
|
|
58
|
+
sandboxId: currentSandboxId,
|
|
59
|
+
...getTestCredentials()
|
|
60
|
+
});
|
|
61
|
+
const snapshot = await sandbox.snapshot();
|
|
62
|
+
await storage.sandbox.set({
|
|
63
|
+
...record,
|
|
64
|
+
acquiringLockId: null,
|
|
65
|
+
acquiringLockAt: null,
|
|
66
|
+
providerMetadata: {
|
|
67
|
+
provider: "vercel",
|
|
68
|
+
sandboxId: null,
|
|
69
|
+
snapshotId: snapshot.snapshotId
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} catch (e) {
|
|
73
|
+
return e instanceof Error ? e : new Error(String(e));
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
action: "exit",
|
|
77
|
+
reason: shouldSnapshotDueToIdle ? "idle" : "timeout"
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return { action: "continue", nextPollMs: pollIntervalMs };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/sandbox/bindings/lifecycle-workflow.ts
|
|
84
|
+
var DEFAULT_POLL_MS = 2 * 60 * 1e3;
|
|
85
|
+
async function sandboxLifecycleWorkflow({
|
|
86
|
+
input
|
|
87
|
+
}) {
|
|
88
|
+
"use workflow";
|
|
89
|
+
let nextPollMs = DEFAULT_POLL_MS;
|
|
90
|
+
while (true) {
|
|
91
|
+
await sleep(nextPollMs);
|
|
92
|
+
const result = await checkAndSnapshotStep(input);
|
|
93
|
+
if (result instanceof Error || result.action === "exit") {
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
nextPollMs = result.nextPollMs;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
sandboxLifecycleWorkflow
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvbGlmZWN5Y2xlLXdvcmtmbG93LnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBjaGVja0FuZFNuYXBzaG90U3RlcCB9IGZyb20gXCIuL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwc1wiO1xuXG5leHBvcnQgdHlwZSB7IFNhbmRib3hMaWZlY3ljbGVJbnB1dCB9O1xuXG5jb25zdCBERUZBVUxUX1BPTExfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpZmVjeWNsZVdvcmtmbG93KHtcbiAgaW5wdXQsXG59OiB7XG4gIGlucHV0OiBTYW5kYm94TGlmZWN5Y2xlSW5wdXQ7XG59KSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG5cbiAgbGV0IG5leHRQb2xsTXMgPSBERUZBVUxUX1BPTExfTVM7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhd2FpdCBzbGVlcChuZXh0UG9sbE1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrQW5kU25hcHNob3RTdGVwKGlucHV0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvciB8fCByZXN1bHQuYWN0aW9uID09PSBcImV4aXRcIikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dFBvbGxNcyA9IHJlc3VsdC5uZXh0UG9sbE1zO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94TGlmZWN5Y2xlSW5wdXQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TID0gMiAqIDYwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVN0ZXBSZXN1bHQgPVxuICB8IHsgYWN0aW9uOiBcImNvbnRpbnVlXCI7IG5leHRQb2xsTXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIjtcbiAgICAgIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIHwgXCJpZGxlXCIgfCBcInRpbWVvdXRcIiB8IFwibm90X2ZvdW5kXCI7XG4gICAgfTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrQW5kU25hcHNob3RTdGVwKFxuICBpbnB1dDogU2FuZGJveExpZmVjeWNsZUlucHV0XG4pOiBQcm9taXNlPEVycm9yIHwgTGlmZWN5Y2xlU3RlcFJlc3VsdD4ge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgY29uc3QgeyBTYW5kYm94OiBWZXJjZWxTYW5kYm94U0RLIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3ZlcmNlbC1zZGtcIik7XG4gIGNvbnN0IHsgZ2V0U3RvcmFnZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vc3RvcmFnZVwiKTtcbiAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2Uoe1xuICAgIGNvbmZpZzogaW5wdXQuc3RvcmFnZUNvbmZpZyxcbiAgICBycGM6IGlucHV0LnJwYyxcbiAgfSk7XG4gIGNvbnN0IHJlY29yZCA9IGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC5nZXQoaW5wdXQuaWQpO1xuICBpZiAocmVjb3JkIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRTYW5kYm94SWQgPVxuICAgIHJlY29yZC5wcm92aWRlck1ldGFkYXRhPy5wcm92aWRlciA9PT0gXCJ2ZXJjZWxcIlxuICAgICAgPyByZWNvcmQucHJvdmlkZXJNZXRhZGF0YS5zYW5kYm94SWRcbiAgICAgIDogbnVsbDtcblxuICBpZiAoY3VycmVudFNhbmRib3hJZCAhPT0gaW5wdXQudmVyY2VsU2FuZGJveElkKSB7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcInNhbmRib3hJZF9jaGFuZ2VkXCIgfTtcbiAgfVxuXG4gIGlmICghY3VycmVudFNhbmRib3hJZCkge1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gcmVjb3JkLmNvbmZpZztcbiAgaWYgKGNvbmZpZy50eXBlICE9PSBcInZlcmNlbFwiKSB7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9XG4gICAgY29uZmlnLmxpZmVjeWNsZT8ucG9sbEludGVydmFsTXMgPz8gREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TO1xuICBjb25zdCBpZGxlVGltZW91dE1zID1cbiAgICBjb25maWcubGlmZWN5Y2xlPy5zdG9wQWZ0ZXJJbmFjdGl2ZU1zID8/IERFRkFVTFRfSURMRV9USU1FT1VUX01TO1xuICBjb25zdCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcyA9XG4gICAgY29uZmlnLmxpZmVjeWNsZT8uc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPz8gU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVM7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbGFzdEFjdGl2aXR5ID0gcmVjb3JkLmxhc3RBY3Rpdml0eUF0ID8/IHJlY29yZC5jcmVhdGVkQXQgPz8gbm93O1xuICBjb25zdCBpZGxlRHVyYXRpb24gPSBub3cgLSBsYXN0QWN0aXZpdHk7XG4gIGNvbnN0IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID0gaWRsZUR1cmF0aW9uID4gaWRsZVRpbWVvdXRNcztcblxuICBsZXQgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgVmVyY2VsU2FuZGJveFNESy5nZXQoe1xuICAgICAgc2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgfSk7XG4gICAgaWYgKHNhbmRib3gudGltZW91dCA8IHNuYXBzaG90QmVmb3JlVGltZW91dE1zKSB7XG4gICAgICBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGlmIChzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSB8fCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgVmVyY2VsU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHNhbmRib3guc25hcHNob3QoKTtcbiAgICAgIGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC5zZXQoe1xuICAgICAgICAuLi5yZWNvcmQsXG4gICAgICAgIGFjcXVpcmluZ0xvY2tJZDogbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0F0OiBudWxsLFxuICAgICAgICBwcm92aWRlck1ldGFkYXRhOiB7XG4gICAgICAgICAgcHJvdmlkZXI6IFwidmVyY2VsXCIsXG4gICAgICAgICAgc2FuZGJveElkOiBudWxsLFxuICAgICAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIixcbiAgICAgIHJlYXNvbjogc2hvdWxkU25hcHNob3REdWVUb0lkbGUgPyBcImlkbGVcIiA6IFwidGltZW91dFwiLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBhY3Rpb246IFwiY29udGludWVcIiwgbmV4dFBvbGxNczogcG9sbEludGVydmFsTXMgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLGFBQWE7OztBQ0V0QixJQUFNLDJCQUEyQixJQUFJLEtBQUs7QUFDMUMsSUFBTSwwQkFBMEIsSUFBSSxLQUFLO0FBQ3pDLElBQU0sNkJBQTZCLEtBQUssS0FBSztBQUU3QyxJQUFNLHFCQUFxQixNQUN6QixRQUFRLElBQUksYUFBYSxTQUNyQjtBQUFBLEVBQ0UsT0FBTyxRQUFRLElBQUk7QUFBQSxFQUNuQixRQUFRLFFBQVEsSUFBSTtBQUFBLEVBQ3BCLFdBQVcsUUFBUSxJQUFJO0FBQ3pCLElBQ0EsQ0FBQztBQVNQLGVBQXNCLHFCQUNwQixPQUNzQztBQUN0QztBQUVBLFFBQU0sRUFBRSxTQUFTLGlC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
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// package.json
|
|
2
|
+
var package_default = {
|
|
3
|
+
name: "experimental-agent",
|
|
4
|
+
version: "0.0.3",
|
|
5
|
+
main: "./dist/index.js",
|
|
6
|
+
module: "./dist/index.mjs",
|
|
7
|
+
types: "./dist/index.d.ts",
|
|
8
|
+
sideEffects: true,
|
|
9
|
+
license: "MIT",
|
|
10
|
+
files: [
|
|
11
|
+
"dist/**"
|
|
12
|
+
],
|
|
13
|
+
exports: {
|
|
14
|
+
".": {
|
|
15
|
+
types: "./dist/index.d.ts",
|
|
16
|
+
import: "./dist/index.mjs",
|
|
17
|
+
require: "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./next": {
|
|
20
|
+
types: "./dist/next.d.ts",
|
|
21
|
+
import: "./dist/next.mjs",
|
|
22
|
+
require: "./dist/next.js"
|
|
23
|
+
},
|
|
24
|
+
"./next/loader": {
|
|
25
|
+
types: "./dist/next/loader.d.ts",
|
|
26
|
+
import: "./dist/next/loader.mjs",
|
|
27
|
+
require: "./dist/next/loader.js"
|
|
28
|
+
},
|
|
29
|
+
"./client": {
|
|
30
|
+
types: "./dist/client.d.ts",
|
|
31
|
+
import: "./dist/client.mjs",
|
|
32
|
+
require: "./dist/client.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
scripts: {
|
|
36
|
+
build: "tsup",
|
|
37
|
+
dev: "tsup --watch",
|
|
38
|
+
clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
39
|
+
release: "pnpm build && npm publish",
|
|
40
|
+
typecheck: "tsc --noEmit",
|
|
41
|
+
test: "vitest run",
|
|
42
|
+
"test:watch": "vitest"
|
|
43
|
+
},
|
|
44
|
+
dependencies: {
|
|
45
|
+
"@hono/node-server": "^1.19.9",
|
|
46
|
+
"@swc/core": "^1.10.0",
|
|
47
|
+
"@vercel/oidc": "^3.1.0",
|
|
48
|
+
"better-all": "^0.0.5",
|
|
49
|
+
errore: "^0.8.2",
|
|
50
|
+
"fast-deep-equal": "^3.1.3",
|
|
51
|
+
glob: "^11.0.0",
|
|
52
|
+
hono: "^4.11.6",
|
|
53
|
+
sandbox: "^1.0.18",
|
|
54
|
+
ulid: "^3.0.2",
|
|
55
|
+
zod: "^4.3.6"
|
|
56
|
+
},
|
|
57
|
+
devDependencies: {
|
|
58
|
+
"@agent/tsconfig": "workspace:*",
|
|
59
|
+
"@types/node": "^20.11.24",
|
|
60
|
+
dotenv: "^17.2.3",
|
|
61
|
+
next: "^16.0.0",
|
|
62
|
+
tsup: "^8.0.2",
|
|
63
|
+
"type-fest": "^5.4.2",
|
|
64
|
+
typescript: "5.5.4",
|
|
65
|
+
vitest: "^3.0.0"
|
|
66
|
+
},
|
|
67
|
+
peerDependencies: {
|
|
68
|
+
ai: "^6.0.0",
|
|
69
|
+
workflow: "https://workflow-docs-7evupb64d.vercel.sh/workflow.tgz"
|
|
70
|
+
},
|
|
71
|
+
publishConfig: {
|
|
72
|
+
access: "public"
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
package_default
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuM1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcInNhbmRib3hcIjogXCJeMS4wLjE4XCIsXG4gICAgXCJ1bGlkXCI6IFwiXjMuMC4yXCIsXG4gICAgXCJ6b2RcIjogXCJeNC4zLjZcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWdlbnQvdHNjb25maWdcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcImRvdGVudlwiOiBcIl4xNy4yLjNcIixcbiAgICBcIm5leHRcIjogXCJeMTYuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlLWZlc3RcIjogXCJeNS40LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcImh0dHBzOi8vd29ya2Zsb3ctZG9jcy03ZXZ1cGI2NGQudmVyY2VsLnNoL3dvcmtmbG93LnRnelwiXG4gIH0sXG4gIFwicHVibGlzaENvbmZpZ1wiOiB7XG4gICAgXCJhY2Nlc3NcIjogXCJwdWJsaWNcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUE7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLE1BQVE7QUFBQSxFQUNSLFFBQVU7QUFBQSxFQUNWLE9BQVM7QUFBQSxFQUNULGFBQWU7QUFBQSxFQUNmLFNBQVc7QUFBQSxFQUNYLE9BQVM7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsS0FBSztBQUFBLE1BQ0gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDVixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxJQUNQLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLFdBQWE7QUFBQSxJQUNiLE1BQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLHFCQUFxQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFFBQVU7QUFBQSxJQUNWLG1CQUFtQjtBQUFBLElBQ25CLE1BQVE7QUFBQSxJQUNSLE1BQVE7QUFBQSxJQUNSLFNBQVc7QUFBQSxJQUNYLE1BQVE7QUFBQSxJQUNSLEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxpQkFBbUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQixlQUFlO0FBQUEsSUFDZixRQUFVO0FBQUEsSUFDVixNQUFRO0FBQUEsSUFDUixNQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixZQUFjO0FBQUEsSUFDZCxRQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0Esa0JBQW9CO0FBQUEsSUFDbEIsSUFBTTtBQUFBLElBQ04sVUFBWTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLGVBQWlCO0FBQUEsSUFDZixRQUFVO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// src/storage/rpc.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var VercelLifecycleConfigSchema = z.object({
|
|
4
|
+
pollIntervalMs: z.number().optional(),
|
|
5
|
+
stopAfterInactiveMs: z.number().optional(),
|
|
6
|
+
snapshotBeforeTimeoutMs: z.number().optional(),
|
|
7
|
+
snapshotId: z.string().optional(),
|
|
8
|
+
autoStart: z.boolean().optional()
|
|
9
|
+
});
|
|
10
|
+
var SandboxConfigSchema = z.discriminatedUnion("type", [
|
|
11
|
+
z.object({
|
|
12
|
+
type: z.literal("vercel"),
|
|
13
|
+
resources: z.object({ vcpus: z.number() }).optional(),
|
|
14
|
+
ports: z.array(z.number()).optional(),
|
|
15
|
+
lifecycle: VercelLifecycleConfigSchema.optional()
|
|
16
|
+
}),
|
|
17
|
+
z.object({
|
|
18
|
+
type: z.literal("local"),
|
|
19
|
+
path: z.string().optional()
|
|
20
|
+
}),
|
|
21
|
+
z.object({
|
|
22
|
+
type: z.literal("custom"),
|
|
23
|
+
url: z.string(),
|
|
24
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
25
|
+
})
|
|
26
|
+
]);
|
|
27
|
+
var GenerationSchema = z.object({
|
|
28
|
+
maxSteps: z.number().optional(),
|
|
29
|
+
temperature: z.number().optional(),
|
|
30
|
+
topK: z.number().optional(),
|
|
31
|
+
topP: z.number().optional(),
|
|
32
|
+
frequencyPenalty: z.number().optional(),
|
|
33
|
+
presencePenalty: z.number().optional(),
|
|
34
|
+
maxOutputTokens: z.number().optional(),
|
|
35
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
36
|
+
});
|
|
37
|
+
var SessionSchema = z.object({
|
|
38
|
+
id: z.string(),
|
|
39
|
+
createdAt: z.number(),
|
|
40
|
+
updatedAt: z.number(),
|
|
41
|
+
runId: z.string().nullable(),
|
|
42
|
+
lastMessageId: z.string().nullable(),
|
|
43
|
+
tags: z.record(z.string(), z.unknown()).nullable(),
|
|
44
|
+
system: z.string().nullable(),
|
|
45
|
+
model: z.string().nullable(),
|
|
46
|
+
sandboxId: z.string().nullable(),
|
|
47
|
+
skillsDir: z.array(z.string()).nullable(),
|
|
48
|
+
hookToken: z.string().nullable(),
|
|
49
|
+
activeTools: z.array(z.string()).nullable(),
|
|
50
|
+
generation: GenerationSchema.nullable().default(null)
|
|
51
|
+
});
|
|
52
|
+
var StepUsageSchema = z.object({
|
|
53
|
+
stepIndex: z.number(),
|
|
54
|
+
model: z.string(),
|
|
55
|
+
inputTokens: z.number(),
|
|
56
|
+
outputTokens: z.number(),
|
|
57
|
+
totalTokens: z.number(),
|
|
58
|
+
cacheReadTokens: z.number(),
|
|
59
|
+
cacheWriteTokens: z.number(),
|
|
60
|
+
reasoningTokens: z.number()
|
|
61
|
+
});
|
|
62
|
+
var UsageSummarySchema = z.object({
|
|
63
|
+
model: z.string(),
|
|
64
|
+
inputTokens: z.number(),
|
|
65
|
+
outputTokens: z.number(),
|
|
66
|
+
totalTokens: z.number(),
|
|
67
|
+
cacheReadTokens: z.number(),
|
|
68
|
+
cacheWriteTokens: z.number(),
|
|
69
|
+
reasoningTokens: z.number(),
|
|
70
|
+
stepCount: z.number()
|
|
71
|
+
});
|
|
72
|
+
var MessageUsageSchema = z.object({
|
|
73
|
+
steps: z.array(StepUsageSchema),
|
|
74
|
+
summary: UsageSummarySchema
|
|
75
|
+
});
|
|
76
|
+
var MessageSchema = z.object({
|
|
77
|
+
id: z.string(),
|
|
78
|
+
sessionId: z.string(),
|
|
79
|
+
role: z.enum(["user", "assistant", "system"]),
|
|
80
|
+
createdAt: z.number(),
|
|
81
|
+
startedAt: z.number().nullable(),
|
|
82
|
+
completedAt: z.number().nullable(),
|
|
83
|
+
interruptedAt: z.number().nullable(),
|
|
84
|
+
usage: MessageUsageSchema.nullable()
|
|
85
|
+
});
|
|
86
|
+
var PartSchema = z.object({
|
|
87
|
+
id: z.string(),
|
|
88
|
+
messageId: z.string(),
|
|
89
|
+
sessionId: z.string(),
|
|
90
|
+
index: z.number(),
|
|
91
|
+
part: z.unknown()
|
|
92
|
+
});
|
|
93
|
+
var CommandResultSchema = z.object({
|
|
94
|
+
stdout: z.string(),
|
|
95
|
+
stderr: z.string(),
|
|
96
|
+
exitCode: z.number(),
|
|
97
|
+
completedAt: z.number()
|
|
98
|
+
});
|
|
99
|
+
var SandboxRecordSchema = z.object({
|
|
100
|
+
id: z.string(),
|
|
101
|
+
config: SandboxConfigSchema,
|
|
102
|
+
tags: z.record(z.string(), z.unknown()).nullable(),
|
|
103
|
+
createdAt: z.number().nullable(),
|
|
104
|
+
lastActivityAt: z.number().nullable(),
|
|
105
|
+
acquiringLockId: z.string().nullable(),
|
|
106
|
+
acquiringLockAt: z.number().nullable(),
|
|
107
|
+
providerMetadata: z.discriminatedUnion("provider", [
|
|
108
|
+
z.object({
|
|
109
|
+
provider: z.literal("vercel"),
|
|
110
|
+
sandboxId: z.string().nullable(),
|
|
111
|
+
snapshotId: z.string().nullable()
|
|
112
|
+
})
|
|
113
|
+
]).optional()
|
|
114
|
+
});
|
|
115
|
+
var CommandBaseSchema = z.object({
|
|
116
|
+
id: z.string(),
|
|
117
|
+
sessionId: z.string(),
|
|
118
|
+
command: z.string(),
|
|
119
|
+
args: z.array(z.string()).optional(),
|
|
120
|
+
startedAt: z.number()
|
|
121
|
+
});
|
|
122
|
+
var CommandSchema = z.discriminatedUnion("status", [
|
|
123
|
+
CommandBaseSchema.extend({ status: z.literal("running") }),
|
|
124
|
+
CommandBaseSchema.extend({
|
|
125
|
+
status: z.literal("completed"),
|
|
126
|
+
result: CommandResultSchema
|
|
127
|
+
}),
|
|
128
|
+
CommandBaseSchema.extend({
|
|
129
|
+
status: z.literal("killed"),
|
|
130
|
+
result: CommandResultSchema.optional()
|
|
131
|
+
}),
|
|
132
|
+
CommandBaseSchema.extend({
|
|
133
|
+
status: z.literal("failed"),
|
|
134
|
+
result: CommandResultSchema
|
|
135
|
+
})
|
|
136
|
+
]);
|
|
137
|
+
function ListResultSchema(itemSchema) {
|
|
138
|
+
return z.object({
|
|
139
|
+
items: z.array(itemSchema),
|
|
140
|
+
nextCursor: z.string().nullable()
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
var methods = {
|
|
144
|
+
"session.get": {
|
|
145
|
+
params: z.object({ id: z.string() }),
|
|
146
|
+
result: SessionSchema.nullable()
|
|
147
|
+
},
|
|
148
|
+
"session.set": {
|
|
149
|
+
params: SessionSchema,
|
|
150
|
+
result: SessionSchema
|
|
151
|
+
},
|
|
152
|
+
"session.list": {
|
|
153
|
+
params: z.object({
|
|
154
|
+
tags: z.record(z.string(), z.unknown()).optional(),
|
|
155
|
+
order: z.enum([
|
|
156
|
+
"createdAt_asc",
|
|
157
|
+
"createdAt_desc",
|
|
158
|
+
"updatedAt_asc",
|
|
159
|
+
"updatedAt_desc"
|
|
160
|
+
]).optional(),
|
|
161
|
+
cursor: z.string().optional(),
|
|
162
|
+
limit: z.number().optional()
|
|
163
|
+
}),
|
|
164
|
+
result: ListResultSchema(SessionSchema)
|
|
165
|
+
},
|
|
166
|
+
"session.listBySandbox": {
|
|
167
|
+
params: z.object({
|
|
168
|
+
sandboxId: z.string(),
|
|
169
|
+
tags: z.record(z.string(), z.unknown()).optional(),
|
|
170
|
+
order: z.enum([
|
|
171
|
+
"createdAt_asc",
|
|
172
|
+
"createdAt_desc",
|
|
173
|
+
"updatedAt_asc",
|
|
174
|
+
"updatedAt_desc"
|
|
175
|
+
]).optional(),
|
|
176
|
+
cursor: z.string().optional(),
|
|
177
|
+
limit: z.number().optional()
|
|
178
|
+
}),
|
|
179
|
+
result: ListResultSchema(SessionSchema)
|
|
180
|
+
},
|
|
181
|
+
"session.tag.set": {
|
|
182
|
+
params: z.object({
|
|
183
|
+
sessionId: z.string(),
|
|
184
|
+
tags: z.record(z.string(), z.unknown())
|
|
185
|
+
}),
|
|
186
|
+
result: SessionSchema
|
|
187
|
+
},
|
|
188
|
+
"message.get": {
|
|
189
|
+
params: z.object({ id: z.string() }),
|
|
190
|
+
result: MessageSchema.nullable()
|
|
191
|
+
},
|
|
192
|
+
"message.set": {
|
|
193
|
+
params: MessageSchema,
|
|
194
|
+
result: MessageSchema
|
|
195
|
+
},
|
|
196
|
+
"message.list": {
|
|
197
|
+
params: z.object({
|
|
198
|
+
sessionId: z.string(),
|
|
199
|
+
cursor: z.string().optional(),
|
|
200
|
+
limit: z.number().optional()
|
|
201
|
+
}),
|
|
202
|
+
result: ListResultSchema(MessageSchema)
|
|
203
|
+
},
|
|
204
|
+
"part.listByMessage": {
|
|
205
|
+
params: z.object({
|
|
206
|
+
messageId: z.string(),
|
|
207
|
+
cursor: z.string().optional(),
|
|
208
|
+
limit: z.number().optional()
|
|
209
|
+
}),
|
|
210
|
+
result: ListResultSchema(PartSchema)
|
|
211
|
+
},
|
|
212
|
+
"part.listBySession": {
|
|
213
|
+
params: z.object({
|
|
214
|
+
sessionId: z.string(),
|
|
215
|
+
cursor: z.string().optional(),
|
|
216
|
+
limit: z.number().optional()
|
|
217
|
+
}),
|
|
218
|
+
result: ListResultSchema(PartSchema)
|
|
219
|
+
},
|
|
220
|
+
"part.set": {
|
|
221
|
+
params: PartSchema,
|
|
222
|
+
result: PartSchema
|
|
223
|
+
},
|
|
224
|
+
"part.delete": {
|
|
225
|
+
params: z.object({ id: z.string() }),
|
|
226
|
+
result: z.void()
|
|
227
|
+
},
|
|
228
|
+
"sandbox.get": {
|
|
229
|
+
params: z.object({ key: z.string() }),
|
|
230
|
+
result: SandboxRecordSchema.nullable()
|
|
231
|
+
},
|
|
232
|
+
"sandbox.getBySession": {
|
|
233
|
+
params: z.object({ sessionId: z.string() }),
|
|
234
|
+
result: SandboxRecordSchema.nullable()
|
|
235
|
+
},
|
|
236
|
+
"sandbox.set": {
|
|
237
|
+
params: SandboxRecordSchema,
|
|
238
|
+
result: z.void()
|
|
239
|
+
},
|
|
240
|
+
"sandbox.list": {
|
|
241
|
+
params: z.object({
|
|
242
|
+
tags: z.record(z.string(), z.unknown()).optional(),
|
|
243
|
+
order: z.enum([
|
|
244
|
+
"createdAt_asc",
|
|
245
|
+
"createdAt_desc",
|
|
246
|
+
"lastActivityAt_asc",
|
|
247
|
+
"lastActivityAt_desc"
|
|
248
|
+
]).optional(),
|
|
249
|
+
cursor: z.string().optional(),
|
|
250
|
+
limit: z.number().optional()
|
|
251
|
+
}),
|
|
252
|
+
result: ListResultSchema(SandboxRecordSchema)
|
|
253
|
+
},
|
|
254
|
+
"sandbox.tag.set": {
|
|
255
|
+
params: z.object({
|
|
256
|
+
sandboxId: z.string(),
|
|
257
|
+
tags: z.record(z.string(), z.unknown())
|
|
258
|
+
}),
|
|
259
|
+
result: SandboxRecordSchema
|
|
260
|
+
},
|
|
261
|
+
"command.get": {
|
|
262
|
+
params: z.object({ id: z.string() }),
|
|
263
|
+
result: CommandSchema.nullable()
|
|
264
|
+
},
|
|
265
|
+
"command.set": {
|
|
266
|
+
params: CommandSchema,
|
|
267
|
+
result: CommandSchema
|
|
268
|
+
},
|
|
269
|
+
"command.list": {
|
|
270
|
+
params: z.object({
|
|
271
|
+
sessionId: z.string(),
|
|
272
|
+
includeFinished: z.boolean().optional(),
|
|
273
|
+
cursor: z.string().optional(),
|
|
274
|
+
limit: z.number().optional()
|
|
275
|
+
}),
|
|
276
|
+
result: ListResultSchema(CommandSchema)
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
var STORAGE_RPC_METHODS = Object.keys(methods);
|
|
280
|
+
|
|
281
|
+
// src/storage/handler.ts
|
|
282
|
+
async function handleStorageRpc(body, handlers) {
|
|
283
|
+
const { method, params } = body;
|
|
284
|
+
if (!(method in methods)) {
|
|
285
|
+
return {
|
|
286
|
+
error: { code: "METHOD_NOT_FOUND", message: `Unknown method: ${method}` }
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const methodName = method;
|
|
290
|
+
const schema = methods[methodName].params;
|
|
291
|
+
const parsed = schema.safeParse(params);
|
|
292
|
+
if (!parsed.success) {
|
|
293
|
+
return {
|
|
294
|
+
error: {
|
|
295
|
+
code: "INVALID_PARAMS",
|
|
296
|
+
message: parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join(", ")
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
const handler = handlers[methodName];
|
|
302
|
+
const result = await handler(parsed.data);
|
|
303
|
+
return { result };
|
|
304
|
+
} catch (e) {
|
|
305
|
+
return {
|
|
306
|
+
error: {
|
|
307
|
+
code: "INTERNAL_ERROR",
|
|
308
|
+
message: e instanceof Error ? e.message : String(e)
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export {
|
|
315
|
+
STORAGE_RPC_METHODS,
|
|
316
|
+
handleStorageRpc
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvcnBjLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2hhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IFZlcmNlbExpZmVjeWNsZUNvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgcG9sbEludGVydmFsTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc3RvcEFmdGVySW5hY3RpdmVNczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzbmFwc2hvdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF1dG9TdGFydDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU2FuZGJveENvbmZpZ1NjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZXJjZWxcIiksXG4gICAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7IHZjcHVzOiB6Lm51bWJlcigpIH0pLm9wdGlvbmFsKCksXG4gICAgcG9ydHM6IHouYXJyYXkoei5udW1iZXIoKSkub3B0aW9uYWwoKSxcbiAgICBsaWZlY3ljbGU6IFZlcmNlbExpZmVjeWNsZUNvbmZpZ1NjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImxvY2FsXCIpLFxuICAgIHBhdGg6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJjdXN0b21cIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICAgIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG5cbmV4cG9ydCB0eXBlIFNhbmRib3hDb25maWcgPSB6LmluZmVyPHR5cGVvZiBTYW5kYm94Q29uZmlnU2NoZW1hPjtcblxuY29uc3QgR2VuZXJhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbWF4U3RlcHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGVtcGVyYXR1cmU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9wSzogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3BQOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGZyZXF1ZW5jeVBlbmFsdHk6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcHJlc2VuY2VQZW5hbHR5OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIG1heE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBTZXNzaW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgY3JlYXRlZEF0OiB6Lm51bWJlcigpLFxuICB1cGRhdGVkQXQ6IHoubnVtYmVyKCksXG4gIHJ1bklkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGxhc3RNZXNzYWdlSWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm51bGxhYmxlKCksXG4gIHN5c3RlbTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzYW5kYm94SWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc2tpbGxzRGlyOiB6LmFycmF5KHouc3RyaW5nKCkpLm51bGxhYmxlKCksXG4gIGhvb2tUb2tlbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBhY3RpdmVUb29sczogei5hcnJheSh6LnN0cmluZygpKS5udWxsYWJsZSgpLFxuICBnZW5lcmF0aW9uOiBHZW5lcmF0aW9uU2NoZW1hLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU3RlcFVzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGVwSW5kZXg6IHoubnVtYmVyKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLFxuICBpbnB1dFRva2Vuczogei5udW1iZXIoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLFxuICB0b3RhbFRva2Vuczogei5udW1iZXIoKSxcbiAgY2FjaGVSZWFkVG9rZW5zOiB6Lm51bWJlcigpLFxuICBjYWNoZVdyaXRlVG9rZW5zOiB6Lm51bWJlcigpLFxuICByZWFzb25pbmdUb2tlbnM6IHoubnVtYmVyKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlU3VtbWFyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IHouc3RyaW5nKCksXG4gIGlucHV0VG9rZW5zOiB6Lm51bWJlcigpLFxuICBvdXRwdXRUb2tlbnM6IHoubnVtYmVyKCksXG4gIHRvdGFsVG9rZW5zOiB6Lm51bWJlcigpLFxuICBjYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCksXG4gIGNhY2hlV3JpdGVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHJlYXNvbmluZ1Rva2Vuczogei5udW1iZXIoKSxcbiAgc3RlcENvdW50OiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBNZXNzYWdlVXNhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN0ZXBzOiB6LmFycmF5KFN0ZXBVc2FnZVNjaGVtYSksXG4gIHN1bW1hcnk6IFVzYWdlU3VtbWFyeVNjaGVtYSxcbn0pO1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlVXNhZ2UgPSB6LmluZmVyPHR5cGVvZiBNZXNzYWdlVXNhZ2VTY2hlbWE+O1xuZXhwb3J0IHR5cGUgVXNhZ2VTdW1tYXJ5ID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VTdW1tYXJ5U2NoZW1hPjtcbmV4cG9ydCB0eXBlIFN0ZXBVc2FnZSA9IHouaW5mZXI8dHlwZW9mIFN0ZXBVc2FnZVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgc2Vzc2lvbklkOiB6LnN0cmluZygpLFxuICByb2xlOiB6LmVudW0oW1widXNlclwiLCBcImFzc2lzdGFudFwiLCBcInN5c3RlbVwiXSksXG4gIGNyZWF0ZWRBdDogei5udW1iZXIoKSxcbiAgc3RhcnRlZEF0OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIGNvbXBsZXRlZEF0OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIGludGVycnVwdGVkQXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgdXNhZ2U6IE1lc3NhZ2VVc2FnZVNjaGVtYS5udWxsYWJsZSgpLFxufSk7XG5cbi8qKlxuICogVGhlIGBwYXJ0YCBmaWVsZCBjb3JyZXNwb25kcyB0byBgVUlNZXNzYWdlW1wicGFydHNcIl1bbnVtYmVyXWAgZnJvbSB0aGUgYGFpYCBwYWNrYWdlLlxuICogV2UgdXNlIGB6LnVua25vd24oKWAgYmVjYXVzZSB0aGUgZXhhY3Qgc2hhcGUgdmFyaWVzIGJ5IHBhcnQgdHlwZSAodGV4dCwgdG9vbC1jYWxsLFxuICogdG9vbC1yZXN1bHQsIGV0Yy4pIGFuZCBtYXkgZXZvbHZlIHdpdGggdGhlIEFJIFNESy4gVGhlIFJQQyBsYXllciBqdXN0IHBhc3NlcyBpdCB0aHJvdWdoLlxuICovXG5leHBvcnQgY29uc3QgUGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKSxcbiAgc2Vzc2lvbklkOiB6LnN0cmluZygpLFxuICBpbmRleDogei5udW1iZXIoKSxcbiAgcGFydDogei51bmtub3duKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IENvbW1hbmRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN0ZG91dDogei5zdHJpbmcoKSxcbiAgc3RkZXJyOiB6LnN0cmluZygpLFxuICBleGl0Q29kZTogei5udW1iZXIoKSxcbiAgY29tcGxldGVkQXQ6IHoubnVtYmVyKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IFNhbmRib3hSZWNvcmRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBjb25maWc6IFNhbmRib3hDb25maWdTY2hlbWEsXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkQXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgbGFzdEFjdGl2aXR5QXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgYWNxdWlyaW5nTG9ja0lkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGFjcXVpcmluZ0xvY2tBdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICBwcm92aWRlck1ldGFkYXRhOiB6XG4gICAgLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByb3ZpZGVyXCIsIFtcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInZlcmNlbFwiKSxcbiAgICAgICAgc2FuZGJveElkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICAgIHNuYXBzaG90SWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgIH0pLFxuICAgIF0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgQ29tbWFuZEJhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gIGFyZ3M6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgc3RhcnRlZEF0OiB6Lm51bWJlcigpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBDb21tYW5kU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdGF0dXNcIiwgW1xuICBDb21tYW5kQmFzZVNjaGVtYS5leHRlbmQoeyBzdGF0dXM6IHoubGl0ZXJhbChcInJ1bm5pbmdcIikgfSksXG4gIENvbW1hbmRCYXNlU2NoZW1hLmV4dGVuZCh7XG4gICAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZWRcIiksXG4gICAgcmVzdWx0OiBDb21tYW5kUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgQ29tbWFuZEJhc2VTY2hlbWEuZXh0ZW5kKHtcbiAgICBzdGF0dXM6IHoubGl0ZXJhbChcImtpbGxlZFwiKSxcbiAgICByZXN1bHQ6IENvbW1hbmRSZXN1bHRTY2hlbWEub3B0aW9uYWwoKSxcbiAgfSksXG4gIENvbW1hbmRCYXNlU2NoZW1hLmV4dGVuZCh7XG4gICAgc3RhdHVzOiB6LmxpdGVyYWwoXCJmYWlsZWRcIiksXG4gICAgcmVzdWx0OiBDb21tYW5kUmVzdWx0U2NoZW1hLFxuICB9KSxcbl0pO1xuXG5mdW5jdGlvbiBMaXN0UmVzdWx0U2NoZW1hPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KGl0ZW1TY2hlbWE6IFQpIHtcbiAgcmV0dXJuIHoub2JqZWN0KHtcbiAgICBpdGVtczogei5hcnJheShpdGVtU2NoZW1hKSxcbiAgICBuZXh0Q3Vyc29yOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIH0pO1xufVxuXG5jb25zdCBtZXRob2RzID0ge1xuICBcInNlc3Npb24uZ2V0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsgaWQ6IHouc3RyaW5nKCkgfSksXG4gICAgcmVzdWx0OiBTZXNzaW9uU2NoZW1hLm51bGxhYmxlKCksXG4gIH0sXG4gIFwic2Vzc2lvbi5zZXRcIjoge1xuICAgIHBhcmFtczogU2Vzc2lvblNjaGVtYSxcbiAgICByZXN1bHQ6IFNlc3Npb25TY2hlbWEsXG4gIH0sXG4gIFwic2Vzc2lvbi5saXN0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAgICAgb3JkZXI6IHpcbiAgICAgICAgLmVudW0oW1xuICAgICAgICAgIFwiY3JlYXRlZEF0X2FzY1wiLFxuICAgICAgICAgIFwiY3JlYXRlZEF0X2Rlc2NcIixcbiAgICAgICAgICBcInVwZGF0ZWRBdF9hc2NcIixcbiAgICAgICAgICBcInVwZGF0ZWRBdF9kZXNjXCIsXG4gICAgICAgIF0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgY3Vyc29yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBsaW1pdDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogTGlzdFJlc3VsdFNjaGVtYShTZXNzaW9uU2NoZW1hKSxcbiAgfSxcbiAgXCJzZXNzaW9uLmxpc3RCeVNhbmRib3hcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgc2FuZGJveElkOiB6LnN0cmluZygpLFxuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gICAgICBvcmRlcjogelxuICAgICAgICAuZW51bShbXG4gICAgICAgICAgXCJjcmVhdGVkQXRfYXNjXCIsXG4gICAgICAgICAgXCJjcmVhdGVkQXRfZGVzY1wiLFxuICAgICAgICAgIFwidXBkYXRlZEF0X2FzY1wiLFxuICAgICAgICAgIFwidXBkYXRlZEF0X2Rlc2NcIixcbiAgICAgICAgXSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBjdXJzb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGxpbWl0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgfSksXG4gICAgcmVzdWx0OiBMaXN0UmVzdWx0U2NoZW1hKFNlc3Npb25TY2hlbWEpLFxuICB9LFxuICBcInNlc3Npb24udGFnLnNldFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICB0YWdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSksXG4gICAgfSksXG4gICAgcmVzdWx0OiBTZXNzaW9uU2NoZW1hLFxuICB9LFxuICBcIm1lc3NhZ2UuZ2V0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsgaWQ6IHouc3RyaW5nKCkgfSksXG4gICAgcmVzdWx0OiBNZXNzYWdlU2NoZW1hLm51bGxhYmxlKCksXG4gIH0sXG4gIFwibWVzc2FnZS5zZXRcIjoge1xuICAgIHBhcmFtczogTWVzc2FnZVNjaGVtYSxcbiAgICByZXN1bHQ6IE1lc3NhZ2VTY2hlbWEsXG4gIH0sXG4gIFwibWVzc2FnZS5saXN0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoTWVzc2FnZVNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5saXN0QnlNZXNzYWdlXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2VJZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoUGFydFNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIGN1cnNvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICByZXN1bHQ6IExpc3RSZXN1bHRTY2hlbWEoUGFydFNjaGVtYSksXG4gIH0sXG4gIFwicGFydC5zZXRcIjoge1xuICAgIHBhcmFtczogUGFydFNjaGVtYSxcbiAgICByZXN1bHQ6IFBhcnRTY2hlbWEsXG4gIH0sXG4gIFwicGFydC5kZWxldGVcIjoge1xuICAgIHBhcmFtczogei5vYmplY3QoeyBpZDogei5zdHJpbmcoKSB9KSxcbiAgICByZXN1bHQ6IHoudm9pZCgpLFxuICB9LFxuICBcInNhbmRib3guZ2V0XCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsga2V5OiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcInNhbmRib3guZ2V0QnlTZXNzaW9uXCI6IHtcbiAgICBwYXJhbXM6IHoub2JqZWN0KHsgc2Vzc2lvbklkOiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcInNhbmRib3guc2V0XCI6IHtcbiAgICBwYXJhbXM6IFNhbmRib3hSZWNvcmRTY2hlbWEsXG4gICAgcmVzdWx0OiB6LnZvaWQoKSxcbiAgfSxcbiAgXCJzYW5kYm94Lmxpc3RcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gICAgICBvcmRlcjogelxuICAgICAgICAuZW51bShbXG4gICAgICAgICAgXCJjcmVhdGVkQXRfYXNjXCIsXG4gICAgICAgICAgXCJjcmVhdGVkQXRfZGVzY1wiLFxuICAgICAgICAgIFwibGFzdEFjdGl2aXR5QXRfYXNjXCIsXG4gICAgICAgICAgXCJsYXN0QWN0aXZpdHlBdF9kZXNjXCIsXG4gICAgICAgIF0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgY3Vyc29yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBsaW1pdDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogTGlzdFJlc3VsdFNjaGVtYShTYW5kYm94UmVjb3JkU2NoZW1hKSxcbiAgfSxcbiAgXCJzYW5kYm94LnRhZy5zZXRcIjoge1xuICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgc2FuZGJveElkOiB6LnN0cmluZygpLFxuICAgICAgdGFnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLFxuICAgIH0pLFxuICAgIHJlc3VsdDogU2FuZGJveFJlY29yZFNjaGVtYSxcbiAgfSxcbiAgXCJjb21tYW5kLmdldFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7IGlkOiB6LnN0cmluZygpIH0pLFxuICAgIHJlc3VsdDogQ29tbWFuZFNjaGVtYS5udWxsYWJsZSgpLFxuICB9LFxuICBcImNvbW1hbmQuc2V0XCI6IHtcbiAgICBwYXJhbXM6IENvbW1hbmRTY2hlbWEsXG4gICAgcmVzdWx0OiBDb21tYW5kU2NoZW1hLFxuICB9LFxuICBcImNvbW1hbmQubGlzdFwiOiB7XG4gICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICBpbmNsdWRlRmluaXNoZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBjdXJzb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGxpbWl0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgfSksXG4gICAgcmVzdWx0OiBMaXN0UmVzdWx0U2NoZW1hKENvbW1hbmRTY2hlbWEpLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHsgbWV0aG9kcyB9O1xuZXhwb3J0IHR5cGUgU3RvcmFnZU1ldGhvZHMgPSB0eXBlb2YgbWV0aG9kcztcbmV4cG9ydCB0eXBlIE1ldGhvZE5hbWUgPSBrZXlvZiBTdG9yYWdlTWV0aG9kcztcbmV4cG9ydCBjb25zdCBTVE9SQUdFX1JQQ19NRVRIT0RTID0gT2JqZWN0LmtleXMobWV0aG9kcykgYXMgTWV0aG9kTmFtZVtdO1xuIiwgImltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHR5cGUgTWV0aG9kTmFtZSwgbWV0aG9kcywgdHlwZSBTdG9yYWdlTWV0aG9kcyB9IGZyb20gXCIuL3JwY1wiO1xuXG5leHBvcnQgdHlwZSBIYW5kbGVycyA9IHtcbiAgW0sgaW4gTWV0aG9kTmFtZV06IChcbiAgICBwYXJhbXM6IHouaW5mZXI8U3RvcmFnZU1ldGhvZHNbS11bXCJwYXJhbXNcIl0+XG4gICkgPT4gUHJvbWlzZTx6LmluZmVyPFN0b3JhZ2VNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5leHBvcnQgdHlwZSBScGNSZXF1ZXN0ID0ge1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGFyYW1zOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgUnBjU3VjY2Vzc1Jlc3BvbnNlPFQgPSB1bmtub3duPiA9IHtcbiAgcmVzdWx0OiBUO1xufTtcblxuZXhwb3J0IHR5cGUgUnBjRXJyb3JSZXNwb25zZSA9IHtcbiAgZXJyb3I6IHsgY29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJwY1Jlc3BvbnNlPFQgPSB1bmtub3duPiA9IFJwY1N1Y2Nlc3NSZXNwb25zZTxUPiB8IFJwY0Vycm9yUmVzcG9uc2U7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVTdG9yYWdlUnBjKFxuICBib2R5OiBScGNSZXF1ZXN0LFxuICBoYW5kbGVyczogSGFuZGxlcnNcbik6IFByb21pc2U8UnBjUmVzcG9uc2U+IHtcbiAgY29uc3QgeyBtZXRob2QsIHBhcmFtcyB9ID0gYm9keTtcblxuICBpZiAoIShtZXRob2QgaW4gbWV0aG9kcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHsgY29kZTogXCJNRVRIT0RfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBVbmtub3duIG1ldGhvZDogJHttZXRob2R9YCB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtZXRob2ROYW1lID0gbWV0aG9kIGFzIE1ldGhvZE5hbWU7XG4gIGNvbnN0IHNjaGVtYSA9IG1ldGhvZHNbbWV0aG9kTmFtZV0ucGFyYW1zO1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEuc2FmZVBhcnNlKHBhcmFtcyk7XG5cbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBcIklOVkFMSURfUEFSQU1TXCIsXG4gICAgICAgIG1lc3NhZ2U6IHBhcnNlZC5lcnJvci5pc3N1ZXNcbiAgICAgICAgICAubWFwKChpKSA9PiBgJHtpLnBhdGguam9pbihcIi5cIil9OiAke2kubWVzc2FnZX1gKVxuICAgICAgICAgIC5qb2luKFwiLCBcIiksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1ttZXRob2ROYW1lXSBhcyAoXG4gICAgICBwYXJhbXM6IHVua25vd25cbiAgICApID0+IFByb21pc2U8dW5rbm93bj47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihwYXJzZWQuZGF0YSk7XG4gICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogXCJJTlRFUk5BTF9FUlJPUlwiLFxuICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLFNBQVM7QUFFbEIsSUFBTSw4QkFBOEIsRUFBRSxPQUFPO0FBQUEsRUFDM0MsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUNwQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQ3pDLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxTQUFTO0FB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
|