@ekairos/sandbox 1.22.15-beta.development.0 → 1.22.16-beta.development.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.
@@ -0,0 +1,149 @@
1
+ const DEFAULT_EPHEMERAL_TIMEOUT_MS = 5 * 60 * 1000;
2
+ const DEFAULT_CODING_AGENT_TIMEOUT_MS = 20 * 60 * 1000;
3
+ const DEFAULT_SNAPSHOT_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000;
4
+ const MAX_VERCEL_TIMEOUT_MS = 5 * 60 * 60 * 1000;
5
+ const MAX_VERCEL_VCPUS = 8;
6
+ const MAX_VERCEL_PORTS = 15;
7
+ const MAX_VERCEL_TAGS = 5;
8
+ function parseOptionalBoolean(value) {
9
+ const normalized = String(value ?? "").trim().toLowerCase();
10
+ if (!normalized)
11
+ return undefined;
12
+ if (["1", "true", "yes", "y", "on"].includes(normalized))
13
+ return true;
14
+ if (["0", "false", "no", "n", "off"].includes(normalized))
15
+ return false;
16
+ return undefined;
17
+ }
18
+ function parseOptionalNumber(value) {
19
+ if (value === undefined || value === null || value === "")
20
+ return undefined;
21
+ const parsed = Number(value);
22
+ return Number.isFinite(parsed) ? parsed : undefined;
23
+ }
24
+ function clampInteger(value, min, max) {
25
+ return Math.min(max, Math.max(min, Math.floor(value)));
26
+ }
27
+ function inferProfile(config, env) {
28
+ const explicit = String(config.vercel?.profile ?? env.SANDBOX_VERCEL_PROFILE ?? "")
29
+ .trim()
30
+ .toLowerCase();
31
+ if (explicit === "coding-agent" || explicit === "agent" || explicit === "codex")
32
+ return "coding-agent";
33
+ if (explicit === "ephemeral" || explicit === "cost")
34
+ return "ephemeral";
35
+ const purpose = String(config.purpose ?? "").toLowerCase();
36
+ if (purpose.includes("codex") || purpose.includes("coding-agent") || purpose.includes("agent")) {
37
+ return "coding-agent";
38
+ }
39
+ return "ephemeral";
40
+ }
41
+ function normalizePorts(ports) {
42
+ if (!Array.isArray(ports))
43
+ return [];
44
+ const normalized = ports
45
+ .map((port) => Number(port))
46
+ .filter((port) => Number.isFinite(port) && port > 0)
47
+ .map((port) => Math.floor(port));
48
+ return Array.from(new Set(normalized)).slice(0, MAX_VERCEL_PORTS);
49
+ }
50
+ function normalizeTagKey(value) {
51
+ return value
52
+ .trim()
53
+ .replace(/[^a-zA-Z0-9_.:-]/g, "_")
54
+ .slice(0, 64);
55
+ }
56
+ function normalizeTagValue(value) {
57
+ return value.trim().slice(0, 128);
58
+ }
59
+ function setTag(tags, key, value) {
60
+ if (Object.keys(tags).length >= MAX_VERCEL_TAGS)
61
+ return;
62
+ const normalizedKey = normalizeTagKey(String(key ?? ""));
63
+ const normalizedValue = normalizeTagValue(String(value ?? ""));
64
+ if (!normalizedKey || !normalizedValue)
65
+ return;
66
+ tags[normalizedKey] = normalizedValue;
67
+ }
68
+ function resolveTags(config, resolved, sandboxId) {
69
+ const tags = {};
70
+ setTag(tags, "ekairos", "1");
71
+ setTag(tags, "profile", resolved.profile);
72
+ if (config.purpose)
73
+ setTag(tags, "purpose", config.purpose);
74
+ if (sandboxId)
75
+ setTag(tags, "sandboxId", sandboxId);
76
+ for (const [key, value] of Object.entries(config.vercel?.tags ?? {})) {
77
+ setTag(tags, key, value);
78
+ }
79
+ return Object.keys(tags).length > 0 ? tags : undefined;
80
+ }
81
+ export function resolveVercelSandboxConfig(config, opts) {
82
+ const env = opts?.env ?? process.env;
83
+ const profile = inferProfile(config, env);
84
+ const isCodingAgent = profile === "coding-agent";
85
+ const timeoutFromConfig = parseOptionalNumber(config.timeoutMs);
86
+ const timeoutFromEnv = parseOptionalNumber(env.SANDBOX_VERCEL_TIMEOUT_MS);
87
+ const timeoutDefault = isCodingAgent ? DEFAULT_CODING_AGENT_TIMEOUT_MS : DEFAULT_EPHEMERAL_TIMEOUT_MS;
88
+ const timeoutMs = clampInteger(timeoutFromConfig ?? timeoutFromEnv ?? timeoutDefault, 1000, MAX_VERCEL_TIMEOUT_MS);
89
+ const vcpusFromConfig = parseOptionalNumber(config.resources?.vcpus);
90
+ const vcpusFromEnv = parseOptionalNumber(env.SANDBOX_VERCEL_VCPUS);
91
+ const vcpusDefault = isCodingAgent ? 2 : 1;
92
+ const vcpus = clampInteger(vcpusFromConfig ?? vcpusFromEnv ?? vcpusDefault, 1, MAX_VERCEL_VCPUS);
93
+ const name = String(config.vercel?.name ?? env.SANDBOX_VERCEL_NAME ?? "")
94
+ .trim()
95
+ .replace(/\s+/g, "-")
96
+ .slice(0, 80) || undefined;
97
+ const persistent = config.vercel?.persistent ??
98
+ parseOptionalBoolean(env.SANDBOX_VERCEL_PERSISTENT) ??
99
+ isCodingAgent;
100
+ const reuse = config.vercel?.reuse ??
101
+ parseOptionalBoolean(env.SANDBOX_VERCEL_REUSE) ??
102
+ Boolean(persistent && name);
103
+ const deleteOnStop = config.vercel?.deleteOnStop ??
104
+ parseOptionalBoolean(env.SANDBOX_VERCEL_DELETE_ON_STOP) ??
105
+ !persistent;
106
+ const snapshotExpirationFromConfig = parseOptionalNumber(config.vercel?.snapshotExpirationMs);
107
+ const snapshotExpirationFromEnv = parseOptionalNumber(env.SANDBOX_VERCEL_SNAPSHOT_EXPIRATION_MS);
108
+ const snapshotExpirationMs = snapshotExpirationFromConfig ??
109
+ snapshotExpirationFromEnv ??
110
+ (persistent ? DEFAULT_SNAPSHOT_EXPIRATION_MS : undefined);
111
+ const base = {
112
+ profile,
113
+ runtime: String(config.runtime ?? "node22"),
114
+ timeoutMs,
115
+ ports: normalizePorts(config.ports),
116
+ vcpus,
117
+ ...(name ? { name } : {}),
118
+ reuse,
119
+ persistent,
120
+ deleteOnStop,
121
+ ...(snapshotExpirationMs !== undefined
122
+ ? { snapshotExpirationMs: Math.max(0, Math.floor(snapshotExpirationMs)) }
123
+ : {}),
124
+ };
125
+ return {
126
+ ...base,
127
+ tags: resolveTags(config, base, opts?.sandboxId),
128
+ };
129
+ }
130
+ export function safeVercelConfigForRecord(config, resolved) {
131
+ const { token: _token, ...safeConfig } = config.vercel ?? {};
132
+ return {
133
+ ...safeConfig,
134
+ profile: resolved.profile,
135
+ runtime: resolved.runtime,
136
+ timeoutMs: resolved.timeoutMs,
137
+ vcpus: resolved.vcpus,
138
+ ports: resolved.ports,
139
+ persistent: resolved.persistent,
140
+ deleteOnStop: resolved.deleteOnStop,
141
+ reuse: resolved.reuse,
142
+ ...(resolved.name ? { name: resolved.name } : {}),
143
+ ...(resolved.snapshotExpirationMs !== undefined
144
+ ? { snapshotExpirationMs: resolved.snapshotExpirationMs }
145
+ : {}),
146
+ ...(resolved.tags ? { tags: resolved.tags } : {}),
147
+ };
148
+ }
149
+ //# sourceMappingURL=vercel-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-options.js","sourceRoot":"","sources":["../src/vercel-options.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekairos/sandbox",
3
- "version": "1.22.15-beta.development.0",
3
+ "version": "1.22.16-beta.development.0",
4
4
  "description": "Pulzar Sandbox - Provider-agnostic sandbox helpers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@daytonaio/sdk": "^0.134.0",
57
- "@ekairos/domain": "^1.22.15-beta.development.0",
57
+ "@ekairos/domain": "^1.22.16-beta.development.0",
58
58
  "@instantdb/admin": "0.22.158",
59
59
  "@instantdb/core": "0.22.158",
60
60
  "@vercel/sandbox": "2.0.0-beta.13",