experimental-agent 0.1.1 → 0.1.2
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/dist/agent-workflow.d.mts +3 -2
- package/dist/agent-workflow.d.ts +3 -2
- package/dist/agent-workflow.js +29 -29
- package/dist/agent-workflow.mjs +1 -2
- package/dist/{chunk-GJETDXOU.mjs → chunk-2SPAJ777.mjs} +5 -1
- package/dist/chunk-6J462JGP.mjs +1267 -0
- package/dist/{chunk-T2UUL6VC.mjs → chunk-E7TOPGHY.mjs} +3 -3
- package/dist/chunk-ILPVXRI5.mjs +2026 -0
- package/dist/chunk-ORE6LK2L.mjs +344 -0
- package/dist/chunk-W4SSZPDX.mjs +106 -0
- package/dist/{types-DuTc4UQW.d.mts → client-CKLwB-ES.d.mts} +730 -3
- package/dist/{types-DuTc4UQW.d.ts → client-CKLwB-ES.d.ts} +730 -3
- package/dist/{client-66JIQLSA.mjs → client-YUU54ZZH.mjs} +1 -1
- package/dist/{handler-BQY5SOI2.mjs → handler-LDFBSCRA.mjs} +1 -1
- package/dist/index.d.mts +4 -18
- package/dist/index.d.ts +4 -18
- package/dist/index.js +67 -40
- package/dist/index.mjs +21 -16
- package/dist/lifecycle-workflow.d.mts +2 -3
- package/dist/lifecycle-workflow.d.ts +2 -3
- package/dist/lifecycle-workflow.js +19 -15
- package/dist/lifecycle-workflow.mjs +1 -2
- package/dist/local-fs-handlers-SY2RDXZE.mjs +314 -0
- package/dist/next/loader.js +3 -3
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +3 -5
- package/dist/next.mjs +2 -4
- package/dist/{sandbox-27X2DSE3.mjs → sandbox-GPCA35PJ.mjs} +2 -3
- package/dist/{storage-KQYV42J4.mjs → storage-LL6IA24R.mjs} +2 -2
- package/package.json +2 -2
- package/dist/chunk-2IIWVPZB.mjs +0 -334
- package/dist/chunk-A63YU65A.mjs +0 -20
- package/dist/chunk-RDKDLHXM.mjs +0 -2031
- package/dist/chunk-VGJISV6O.mjs +0 -108
- package/dist/chunk-VS7U6SXN.mjs +0 -1261
- package/dist/client-DjcE0ATp.d.mts +0 -710
- package/dist/client-DwrDzn4_.d.ts +0 -710
- package/dist/local-fs-handlers-Q5W52DKV.mjs +0 -290
package/dist/chunk-VGJISV6O.mjs
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
resolveRpc
|
|
3
|
-
} from "./chunk-A63YU65A.mjs";
|
|
4
|
-
|
|
5
|
-
// src/sandbox/bindings/lifecycle-workflow.ts
|
|
6
|
-
import { sleep } from "workflow";
|
|
7
|
-
|
|
8
|
-
// src/sandbox/bindings/lifecycle-workflow-steps.ts
|
|
9
|
-
var DEFAULT_POLL_INTERVAL_MS = 2 * 60 * 1e3;
|
|
10
|
-
var DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
11
|
-
var SNAPSHOT_BEFORE_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
12
|
-
var getTestCredentials = () => process.env.NODE_ENV === "test" ? {
|
|
13
|
-
token: process.env.TEST_VERCEL_TOKEN,
|
|
14
|
-
teamId: process.env.TEST_VERCEL_TEAM_ID,
|
|
15
|
-
projectId: process.env.TEST_VERCEL_PROJECT_ID
|
|
16
|
-
} : {};
|
|
17
|
-
async function checkAndSnapshotStep(input) {
|
|
18
|
-
"use step";
|
|
19
|
-
const { Sandbox: VercelSandboxSDK } = await import("./vercel-sdk-I6A4MVAN.mjs");
|
|
20
|
-
const { getStorage } = await import("./storage-KQYV42J4.mjs");
|
|
21
|
-
const rpc = resolveRpc(input.storageConfig.name ?? "default");
|
|
22
|
-
const storage = getStorage({
|
|
23
|
-
config: input.storageConfig,
|
|
24
|
-
rpc
|
|
25
|
-
});
|
|
26
|
-
const record = await storage.sandbox.get(input.id);
|
|
27
|
-
if (record instanceof Error) {
|
|
28
|
-
return { action: "exit", reason: "not_found" };
|
|
29
|
-
}
|
|
30
|
-
const currentSandboxId = record.providerMetadata?.provider === "vercel" ? record.providerMetadata.sandboxId : null;
|
|
31
|
-
if (currentSandboxId !== input.vercelSandboxId) {
|
|
32
|
-
return { action: "exit", reason: "sandboxId_changed" };
|
|
33
|
-
}
|
|
34
|
-
if (!currentSandboxId) {
|
|
35
|
-
return { action: "exit", reason: "not_found" };
|
|
36
|
-
}
|
|
37
|
-
const config = record.config;
|
|
38
|
-
if (config.type !== "vercel") {
|
|
39
|
-
return { action: "exit", reason: "not_found" };
|
|
40
|
-
}
|
|
41
|
-
const pollIntervalMs = config.lifecycle?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
42
|
-
const idleTimeoutMs = config.lifecycle?.stopAfterInactiveMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
43
|
-
const snapshotBeforeTimeoutMs = config.lifecycle?.snapshotBeforeTimeoutMs ?? SNAPSHOT_BEFORE_TIMEOUT_MS;
|
|
44
|
-
const now = Date.now();
|
|
45
|
-
const lastActivity = record.lastActivityAt ?? record.createdAt ?? now;
|
|
46
|
-
const idleDuration = now - lastActivity;
|
|
47
|
-
const shouldSnapshotDueToIdle = idleDuration > idleTimeoutMs;
|
|
48
|
-
let shouldSnapshotDueToTimeout = false;
|
|
49
|
-
try {
|
|
50
|
-
const sandbox = await VercelSandboxSDK.get({
|
|
51
|
-
sandboxId: currentSandboxId,
|
|
52
|
-
...getTestCredentials()
|
|
53
|
-
});
|
|
54
|
-
if (sandbox.timeout < snapshotBeforeTimeoutMs) {
|
|
55
|
-
shouldSnapshotDueToTimeout = true;
|
|
56
|
-
}
|
|
57
|
-
} catch {
|
|
58
|
-
return { action: "exit", reason: "not_found" };
|
|
59
|
-
}
|
|
60
|
-
if (shouldSnapshotDueToIdle || shouldSnapshotDueToTimeout) {
|
|
61
|
-
try {
|
|
62
|
-
const sandbox = await VercelSandboxSDK.get({
|
|
63
|
-
sandboxId: currentSandboxId,
|
|
64
|
-
...getTestCredentials()
|
|
65
|
-
});
|
|
66
|
-
const snapshot = await sandbox.snapshot();
|
|
67
|
-
await storage.sandbox.set({
|
|
68
|
-
...record,
|
|
69
|
-
acquiringLockId: null,
|
|
70
|
-
acquiringLockAt: null,
|
|
71
|
-
providerMetadata: {
|
|
72
|
-
provider: "vercel",
|
|
73
|
-
sandboxId: null,
|
|
74
|
-
snapshotId: snapshot.snapshotId
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
} catch (e) {
|
|
78
|
-
return e instanceof Error ? e : new Error(String(e));
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
action: "exit",
|
|
82
|
-
reason: shouldSnapshotDueToIdle ? "idle" : "timeout"
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return { action: "continue", nextPollMs: pollIntervalMs };
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// src/sandbox/bindings/lifecycle-workflow.ts
|
|
89
|
-
var DEFAULT_POLL_MS = 2 * 60 * 1e3;
|
|
90
|
-
async function sandboxLifecycleWorkflow({
|
|
91
|
-
input
|
|
92
|
-
}) {
|
|
93
|
-
"use workflow";
|
|
94
|
-
let nextPollMs = DEFAULT_POLL_MS;
|
|
95
|
-
while (true) {
|
|
96
|
-
await sleep(nextPollMs);
|
|
97
|
-
const result = await checkAndSnapshotStep(input);
|
|
98
|
-
if (result instanceof Error || result.action === "exit") {
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
nextPollMs = result.nextPollMs;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export {
|
|
106
|
-
sandboxLifecycleWorkflow
|
|
107
|
-
};
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvbGlmZWN5Y2xlLXdvcmtmbG93LnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBjaGVja0FuZFNuYXBzaG90U3RlcCB9IGZyb20gXCIuL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwc1wiO1xuXG5leHBvcnQgdHlwZSB7IFNhbmRib3hMaWZlY3ljbGVJbnB1dCB9O1xuXG5jb25zdCBERUZBVUxUX1BPTExfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpZmVjeWNsZVdvcmtmbG93KHtcbiAgaW5wdXQsXG59OiB7XG4gIGlucHV0OiBTYW5kYm94TGlmZWN5Y2xlSW5wdXQ7XG59KSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG5cbiAgbGV0IG5leHRQb2xsTXMgPSBERUZBVUxUX1BPTExfTVM7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhd2FpdCBzbGVlcChuZXh0UG9sbE1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrQW5kU25hcHNob3RTdGVwKGlucHV0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvciB8fCByZXN1bHQuYWN0aW9uID09PSBcImV4aXRcIikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dFBvbGxNcyA9IHJlc3VsdC5uZXh0UG9sbE1zO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcmVzb2x2ZVJwYyB9IGZyb20gXCIuLi8uLi9ycGMtcmVnaXN0cnlcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmNvbnN0IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUyA9IDIgKiA2MCAqIDEwMDA7XG5jb25zdCBERUZBVUxUX0lETEVfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBTTkFQU0hPVF9CRUZPUkVfVElNRU9VVF9NUyA9IDEwICogNjAgKiAxMDAwO1xuXG5jb25zdCBnZXRUZXN0Q3JlZGVudGlhbHMgPSAoKSA9PlxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCJcbiAgICA/IHtcbiAgICAgICAgdG9rZW46IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1RPS0VOLFxuICAgICAgICB0ZWFtSWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1RFQU1fSUQsXG4gICAgICAgIHByb2plY3RJZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfUFJPSkVDVF9JRCxcbiAgICAgIH1cbiAgICA6IHt9O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVTdGVwUmVzdWx0ID1cbiAgfCB7IGFjdGlvbjogXCJjb250aW51ZVwiOyBuZXh0UG9sbE1zOiBudW1iZXIgfVxuICB8IHtcbiAgICAgIGFjdGlvbjogXCJleGl0XCI7XG4gICAgICByZWFzb246IFwic2FuZGJveElkX2NoYW5nZWRcIiB8IFwiaWRsZVwiIHwgXCJ0aW1lb3V0XCIgfCBcIm5vdF9mb3VuZFwiO1xuICAgIH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0FuZFNuYXBzaG90U3RlcChcbiAgaW5wdXQ6IFNhbmRib3hMaWZlY3ljbGVJbnB1dFxuKTogUHJvbWlzZTxFcnJvciB8IExpZmVjeWNsZVN0ZXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IHsgU2FuZGJveDogVmVyY2VsU2FuZGJveFNESyB9ID0gYXdhaXQgaW1wb3J0KFwiLi92ZXJjZWwtc2RrXCIpO1xuICBjb25zdCB7IGdldFN0b3JhZ2UgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uL3N0b3JhZ2VcIik7XG4gIGNvbnN0IHJwYyA9IHJlc29sdmVScGMoaW5wdXQuc3RvcmFnZUNvbmZpZy5uYW1lID8/IFwiZGVmYXVsdFwiKTtcbiAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2Uoe1xuICAgIGNvbmZpZzogaW5wdXQuc3RvcmFnZUNvbmZpZyxcbiAgICBycGMsXG4gIH0pO1xuICBjb25zdCByZWNvcmQgPSBhd2FpdCBzdG9yYWdlLnNhbmRib3guZ2V0KGlucHV0LmlkKTtcbiAgaWYgKHJlY29yZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBjdXJyZW50U2FuZGJveElkID1cbiAgICByZWNvcmQucHJvdmlkZXJNZXRhZGF0YT8ucHJvdmlkZXIgPT09IFwidmVyY2VsXCJcbiAgICAgID8gcmVjb3JkLnByb3ZpZGVyTWV0YWRhdGEuc2FuZGJveElkXG4gICAgICA6IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRTYW5kYm94SWQgIT09IGlucHV0LnZlcmNlbFNhbmRib3hJZCkge1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIH07XG4gIH1cblxuICBpZiAoIWN1cnJlbnRTYW5kYm94SWQpIHtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IHJlY29yZC5jb25maWc7XG4gIGlmIChjb25maWcudHlwZSAhPT0gXCJ2ZXJjZWxcIikge1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgcG9sbEludGVydmFsTXMgPVxuICAgIGNvbmZpZy5saWZlY3ljbGU/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUztcbiAgY29uc3QgaWRsZVRpbWVvdXRNcyA9XG4gICAgY29uZmlnLmxpZmVjeWNsZT8uc3RvcEFmdGVySW5hY3RpdmVNcyA/PyBERUZBVUxUX0lETEVfVElNRU9VVF9NUztcbiAgY29uc3Qgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPVxuICAgIGNvbmZpZy5saWZlY3ljbGU/LnNuYXBzaG90QmVmb3JlVGltZW91dE1zID8/IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TO1xuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGxhc3RBY3Rpdml0eSA9IHJlY29yZC5sYXN0QWN0aXZpdHlBdCA/PyByZWNvcmQuY3JlYXRlZEF0ID8/IG5vdztcbiAgY29uc3QgaWRsZUR1cmF0aW9uID0gbm93IC0gbGFzdEFjdGl2aXR5O1xuICBjb25zdCBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA9IGlkbGVEdXJhdGlvbiA+IGlkbGVUaW1lb3V0TXM7XG5cbiAgbGV0IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFZlcmNlbFNhbmRib3hTREsuZ2V0KHtcbiAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICAgIGlmIChzYW5kYm94LnRpbWVvdXQgPCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcykge1xuICAgICAgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBpZiAoc2hvdWxkU25hcHNob3REdWVUb0lkbGUgfHwgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFZlcmNlbFNhbmRib3hTREsuZ2V0KHtcbiAgICAgICAgc2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBzYW5kYm94LnNuYXBzaG90KCk7XG4gICAgICBhd2FpdCBzdG9yYWdlLnNhbmRib3guc2V0KHtcbiAgICAgICAgLi4ucmVjb3JkLFxuICAgICAgICBhY3F1aXJpbmdMb2NrSWQ6IG51bGwsXG4gICAgICAgIGFjcXVpcmluZ0xvY2tBdDogbnVsbCxcbiAgICAgICAgcHJvdmlkZXJNZXRhZGF0YToge1xuICAgICAgICAgIHByb3ZpZGVyOiBcInZlcmNlbFwiLFxuICAgICAgICAgIHNhbmRib3hJZDogbnVsbCxcbiAgICAgICAgICBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbjogXCJleGl0XCIsXG4gICAgICByZWFzb246IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID8gXCJpZGxlXCIgOiBcInRpbWVvdXRcIixcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgYWN0aW9uOiBcImNvbnRpbnVlXCIsIG5leHRQb2xsTXM6IHBvbGxJbnRlcnZhbE1zIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUFBLFNBQVMsYUFBYTs7O0FDR3RCLElBQU0sMkJBQTJCLElBQUksS0FBSztBQUMxQyxJQUFNLDBCQUEwQixJQUFJLEtBQUs7QUFDekMsSUFBTSw2QkFBNkIsS0FBSyxLQUFLO0FBRTdDLElBQU0scUJBQXFCLE1BQ3pCLFFBQVEsSUFBSSxhQUFhLFNBQ3JCO0FBQUEsRUFDRSxPQUFPLFFBQVEsSUFBSTtBQUFBLEVB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
|