zidane 5.12.8 → 5.12.10

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 (68) hide show
  1. package/dist/{agent-CZswyE11.d.ts → agent-DFxjgQx5.d.ts} +74 -8
  2. package/dist/{agent-CZswyE11.d.ts.map → agent-DFxjgQx5.d.ts.map} +1 -1
  3. package/dist/chat/pure.d.ts +3 -3
  4. package/dist/chat.d.ts +6 -6
  5. package/dist/chat.js +2 -2
  6. package/dist/contexts/daytona.d.ts +123 -0
  7. package/dist/contexts/daytona.d.ts.map +1 -0
  8. package/dist/contexts/daytona.js +282 -0
  9. package/dist/contexts/daytona.js.map +1 -0
  10. package/dist/contexts/e2b.d.ts +1 -1
  11. package/dist/eval.d.ts +1 -1
  12. package/dist/eval.js +1 -1
  13. package/dist/{headless-QcVRUarY.js → headless-Cbknpgjo.js} +3 -3
  14. package/dist/{headless-QcVRUarY.js.map → headless-Cbknpgjo.js.map} +1 -1
  15. package/dist/headless.d.ts +1 -1
  16. package/dist/headless.js +1 -1
  17. package/dist/{index-Dkd2nVBs.d.ts → index-C3wPsOFw.d.ts} +2 -2
  18. package/dist/{index-Dkd2nVBs.d.ts.map → index-C3wPsOFw.d.ts.map} +1 -1
  19. package/dist/{index-Dojm6Hzn.d.ts → index-DoQ0MHlp.d.ts} +6 -4
  20. package/dist/{index-Dojm6Hzn.d.ts.map → index-DoQ0MHlp.d.ts.map} +1 -1
  21. package/dist/index.d.ts +5 -5
  22. package/dist/index.js +5 -5
  23. package/dist/{logger-C61U_1eJ.d.ts → logger-DZcTJ3YX.d.ts} +2 -2
  24. package/dist/{logger-C61U_1eJ.d.ts.map → logger-DZcTJ3YX.d.ts.map} +1 -1
  25. package/dist/{login-zK_YpxeU.js → login-uf01y_Yj.js} +2 -2
  26. package/dist/{login-zK_YpxeU.js.map → login-uf01y_Yj.js.map} +1 -1
  27. package/dist/{mcp-Bnnrt_Ps.js → mcp-Bl0n3bNL.js} +36 -2
  28. package/dist/mcp-Bl0n3bNL.js.map +1 -0
  29. package/dist/mcp.d.ts +2 -2
  30. package/dist/mcp.js +2 -2
  31. package/dist/output/stream-json.d.ts +2 -2
  32. package/dist/output/stream-json.js +1 -1
  33. package/dist/output/terminal.d.ts +2 -2
  34. package/dist/{presets-BRXiUHxp.js → presets-BsMR5nn6.js} +2 -2
  35. package/dist/presets-BsMR5nn6.js.map +1 -0
  36. package/dist/presets.d.ts +2 -2
  37. package/dist/presets.js +1 -1
  38. package/dist/providers.d.ts +1 -1
  39. package/dist/restate.d.ts +80 -32
  40. package/dist/restate.d.ts.map +1 -1
  41. package/dist/restate.js +280 -199
  42. package/dist/restate.js.map +1 -1
  43. package/dist/session/sqlite.d.ts +1 -1
  44. package/dist/session.d.ts +1 -1
  45. package/dist/skills.d.ts +2 -2
  46. package/dist/{tool-formatters-CGCa6rih.d.ts → tool-formatters-CCTIq3A-.d.ts} +2 -2
  47. package/dist/{tool-formatters-CGCa6rih.d.ts.map → tool-formatters-CCTIq3A-.d.ts.map} +1 -1
  48. package/dist/tools/fetch-url.d.ts +1 -1
  49. package/dist/tools/web-search.d.ts +1 -1
  50. package/dist/{tools-BDqIG7Qd.js → tools-fqToqHik.js} +13 -5
  51. package/dist/tools-fqToqHik.js.map +1 -0
  52. package/dist/tools.d.ts +2 -2
  53. package/dist/tools.js +1 -1
  54. package/dist/{transcript-anchors-DHWe5gz0.js → transcript-anchors-Br_NijUC.js} +4 -4
  55. package/dist/{transcript-anchors-DHWe5gz0.js.map → transcript-anchors-Br_NijUC.js.map} +1 -1
  56. package/dist/{transcript-anchors-DDjscta9.d.ts → transcript-anchors-DxAfqo4i.d.ts} +4 -4
  57. package/dist/{transcript-anchors-DDjscta9.d.ts.map → transcript-anchors-DxAfqo4i.d.ts.map} +1 -1
  58. package/dist/tui.d.ts +3 -3
  59. package/dist/tui.js +5 -5
  60. package/dist/{turn-operations-BHTcPYj6.d.ts → turn-operations-BTxf15kt.d.ts} +3 -3
  61. package/dist/{turn-operations-BHTcPYj6.d.ts.map → turn-operations-BTxf15kt.d.ts.map} +1 -1
  62. package/dist/types.d.ts +2 -2
  63. package/docs/ARCHITECTURE.md +1 -1
  64. package/docs/RESTATE.md +24 -1
  65. package/package.json +11 -1
  66. package/dist/mcp-Bnnrt_Ps.js.map +0 -1
  67. package/dist/presets-BRXiUHxp.js.map +0 -1
  68. package/dist/tools-BDqIG7Qd.js.map +0 -1
@@ -0,0 +1,282 @@
1
+ import { n as createLogger, t as consoleSink } from "../logger-Ktm-lj1s.js";
2
+ import { Buffer } from "node:buffer";
3
+ //#region src/contexts/daytona.ts
4
+ /** Per-probe timeout for the readiness `true` command. */
5
+ const READINESS_PROBE_TIMEOUT_SECONDS = 5;
6
+ /** Pause between readiness probes while the sandbox is still warming up. */
7
+ const READINESS_BACKOFF_MS = 250;
8
+ /** Setup scripts commonly install dependencies, so give them a generous cap. */
9
+ const PREGAME_TIMEOUT_SECONDS = 1800;
10
+ function resolveDaytonaEnv(optionEnv, perSpawnEnv) {
11
+ const merged = {
12
+ ...optionEnv,
13
+ ...perSpawnEnv
14
+ };
15
+ return Object.keys(merged).length > 0 ? merged : void 0;
16
+ }
17
+ function normalizeDaytonaExecResult(response) {
18
+ return {
19
+ stdout: response.stdout ?? response.artifacts?.stdout ?? response.result ?? response.output ?? "",
20
+ stderr: response.stderr ?? "",
21
+ exitCode: typeof response.exitCode === "number" ? response.exitCode : 0
22
+ };
23
+ }
24
+ function normalizeDaytonaExecError(error) {
25
+ const err = error;
26
+ if (typeof err.exitCode === "number") return {
27
+ stdout: typeof err.stdout === "string" ? err.stdout : typeof err.result === "string" ? err.result : typeof err.output === "string" ? err.output : "",
28
+ stderr: typeof err.stderr === "string" ? err.stderr : typeof err.message === "string" ? err.message : "",
29
+ exitCode: err.exitCode
30
+ };
31
+ return {
32
+ stdout: "",
33
+ stderr: error instanceof Error ? error.message : String(error),
34
+ exitCode: 124
35
+ };
36
+ }
37
+ function bufferToString(value) {
38
+ if (Buffer.isBuffer(value)) return value.toString("utf8");
39
+ if (value instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(value));
40
+ if (value instanceof Uint8Array) return new TextDecoder().decode(value);
41
+ return value.toString("utf8");
42
+ }
43
+ function toClientConfig(apiKey, apiUrl, target) {
44
+ const config = {};
45
+ if (apiKey !== void 0) config.apiKey = apiKey;
46
+ if (apiUrl !== void 0) config.apiUrl = apiUrl;
47
+ if (target !== void 0) config.target = target;
48
+ return Object.keys(config).length > 0 ? config : void 0;
49
+ }
50
+ function takeString(value) {
51
+ return typeof value === "string" && value.length > 0 ? value : void 0;
52
+ }
53
+ function resolveDaytonaCreateParams(sandboxConfig, options, envVars) {
54
+ const reserved = new Set([
55
+ "provider",
56
+ "apiKey",
57
+ "apiUrl",
58
+ "target",
59
+ "sandboxId"
60
+ ]);
61
+ const params = {};
62
+ for (const [key, value] of Object.entries(sandboxConfig)) if (!reserved.has(key) && value !== void 0) params[key] = value;
63
+ const language = takeString(sandboxConfig.language) ?? options.language;
64
+ const snapshot = takeString(sandboxConfig.snapshot) ?? options.snapshot;
65
+ const image = sandboxConfig.image ?? options.image;
66
+ const resources = sandboxConfig.resources ?? options.resources;
67
+ const configEnvVars = sandboxConfig.envVars;
68
+ const mergedEnvVars = resolveDaytonaEnv(envVars, configEnvVars);
69
+ if (language !== void 0) params.language = language;
70
+ if (snapshot !== void 0) params.snapshot = snapshot;
71
+ if (image !== void 0) params.image = image;
72
+ if (resources !== void 0) params.resources = resources;
73
+ if (mergedEnvVars !== void 0) params.envVars = mergedEnvVars;
74
+ return Object.keys(params).length > 0 ? params : void 0;
75
+ }
76
+ async function waitForDaytonaReady(sandbox, logger, opts) {
77
+ if (opts.timeoutSeconds <= 0) return;
78
+ const now = opts.now ?? Date.now;
79
+ const sleep = opts.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
80
+ const start = now();
81
+ const deadline = start + opts.timeoutSeconds * 1e3;
82
+ logger.info("waiting for Daytona sandbox to initialize", { sandboxId: sandbox.id });
83
+ while (true) try {
84
+ await sandbox.process.executeCommand("true", void 0, void 0, READINESS_PROBE_TIMEOUT_SECONDS);
85
+ logger.info("Daytona sandbox ready", {
86
+ sandboxId: sandbox.id,
87
+ elapsedMs: now() - start
88
+ });
89
+ return;
90
+ } catch {
91
+ if (now() >= deadline) {
92
+ await opts.cleanupOnTimeout?.().catch(() => {});
93
+ throw new Error(`Daytona sandbox ${sandbox.id} did not become ready within ${opts.timeoutSeconds}s`);
94
+ }
95
+ await sleep(READINESS_BACKOFF_MS);
96
+ }
97
+ }
98
+ async function runDaytonaPregame(sandbox, logger, opts) {
99
+ const path = `/tmp/${opts.name}`;
100
+ logger.info("running Daytona pregame script", {
101
+ sandboxId: sandbox.id,
102
+ path
103
+ });
104
+ await sandbox.fs.uploadFile(Buffer.from(opts.content), path);
105
+ const quoted = JSON.stringify(path);
106
+ let result;
107
+ try {
108
+ result = normalizeDaytonaExecResult(await sandbox.process.executeCommand(`chmod +x ${quoted} && ${quoted}`, opts.cwd, opts.envVars, PREGAME_TIMEOUT_SECONDS));
109
+ } catch (err) {
110
+ result = normalizeDaytonaExecError(err);
111
+ }
112
+ if (result.exitCode !== 0) {
113
+ logger.error("Daytona pregame script failed", {
114
+ sandboxId: sandbox.id,
115
+ exitCode: result.exitCode,
116
+ stdout: result.stdout,
117
+ stderr: result.stderr
118
+ });
119
+ throw new Error(`Daytona pregame script ${opts.name} failed with exit code ${result.exitCode}`);
120
+ }
121
+ logger.info("Daytona pregame ready", {
122
+ sandboxId: sandbox.id,
123
+ stdout: result.stdout,
124
+ stderr: result.stderr
125
+ });
126
+ }
127
+ function createDaytonaProvider(options = {}) {
128
+ const live = /* @__PURE__ */ new Map();
129
+ const logger = options.logger ?? createLogger(consoleSink());
130
+ const readinessTimeoutSeconds = options.readinessTimeoutSeconds ?? 60;
131
+ async function loadSdk() {
132
+ try {
133
+ return (await import("@daytona/sdk")).Daytona;
134
+ } catch {
135
+ throw new Error("@daytona/sdk is required for the Daytona sandbox provider. Install it with: bun add @daytona/sdk");
136
+ }
137
+ }
138
+ function get(sandboxId) {
139
+ const entry = live.get(sandboxId);
140
+ if (!entry) throw new Error(`Daytona sandbox ${sandboxId} is not tracked by this provider`);
141
+ return entry;
142
+ }
143
+ async function deleteOwnedSandbox(sandbox) {
144
+ try {
145
+ await sandbox.delete();
146
+ } catch {}
147
+ }
148
+ async function stopOwnedSandbox(sandbox) {
149
+ if (!sandbox.stop) {
150
+ logger.error("cannot stop Daytona sandbox: this @daytona/sdk install exposes no stop() method; leaving it running", { sandboxId: sandbox.id });
151
+ return;
152
+ }
153
+ try {
154
+ await sandbox.stop();
155
+ logger.info("stopped Daytona sandbox; reconnect later via the sandboxId option (CLI: --sandbox)", { sandboxId: sandbox.id });
156
+ } catch (err) {
157
+ logger.error("failed to stop Daytona sandbox; it will run until Daytona lifecycle policy stops it", {
158
+ sandboxId: sandbox.id,
159
+ error: err instanceof Error ? err.message : String(err)
160
+ });
161
+ }
162
+ }
163
+ async function archiveOwnedSandbox(sandbox) {
164
+ if (!sandbox.stop || !sandbox.archive) {
165
+ logger.error("cannot archive Daytona sandbox: this @daytona/sdk install exposes no stop() and archive() pair; leaving it running", { sandboxId: sandbox.id });
166
+ return;
167
+ }
168
+ try {
169
+ await sandbox.stop();
170
+ await sandbox.archive();
171
+ logger.info("archived Daytona sandbox; reconnect later via the sandboxId option (CLI: --sandbox)", { sandboxId: sandbox.id });
172
+ } catch (err) {
173
+ logger.error("failed to archive Daytona sandbox; it will run until Daytona lifecycle policy stops it", {
174
+ sandboxId: sandbox.id,
175
+ error: err instanceof Error ? err.message : String(err)
176
+ });
177
+ }
178
+ }
179
+ async function startAttachedSandboxIfNeeded(sandbox) {
180
+ if (sandbox.state !== "stopped" && sandbox.state !== "archived") return;
181
+ if (!sandbox.start) {
182
+ logger.error("cannot start Daytona sandbox before attach readiness probe: this @daytona/sdk install exposes no start() method", {
183
+ sandboxId: sandbox.id,
184
+ state: sandbox.state
185
+ });
186
+ return;
187
+ }
188
+ logger.info("starting Daytona sandbox before attach readiness probe", {
189
+ sandboxId: sandbox.id,
190
+ state: sandbox.state
191
+ });
192
+ await sandbox.start(readinessTimeoutSeconds > 0 ? readinessTimeoutSeconds : void 0);
193
+ }
194
+ return {
195
+ name: "daytona",
196
+ async spawn(config = {}) {
197
+ const Daytona = await loadSdk();
198
+ const sb = config.sandbox ?? {};
199
+ const apiKey = takeString(sb.apiKey) ?? options.apiKey;
200
+ const apiUrl = takeString(sb.apiUrl) ?? options.apiUrl;
201
+ const target = takeString(sb.target) ?? options.target;
202
+ const connectId = takeString(sb.sandboxId) ?? options.sandboxId;
203
+ const envVars = resolveDaytonaEnv(options.env, config.env);
204
+ const daytona = new Daytona(toClientConfig(apiKey, apiUrl, target));
205
+ const owned = connectId === void 0;
206
+ const sandbox = connectId !== void 0 ? await daytona.get(connectId) : await daytona.create(resolveDaytonaCreateParams(sb, options, envVars));
207
+ if (!owned) await startAttachedSandboxIfNeeded(sandbox);
208
+ live.set(sandbox.id, {
209
+ sandbox,
210
+ env: envVars,
211
+ owned
212
+ });
213
+ try {
214
+ await waitForDaytonaReady(sandbox, logger, {
215
+ timeoutSeconds: readinessTimeoutSeconds,
216
+ ...owned ? { cleanupOnTimeout: () => deleteOwnedSandbox(sandbox) } : {}
217
+ });
218
+ } catch (err) {
219
+ live.delete(sandbox.id);
220
+ throw err;
221
+ }
222
+ const requestedCwd = config.cwd ?? options.cwd;
223
+ let cwd;
224
+ if (requestedCwd) {
225
+ cwd = requestedCwd;
226
+ await sandbox.process.executeCommand(`mkdir -p ${JSON.stringify(cwd)}`).catch(() => {});
227
+ } else if (sandbox.getWorkDir) {
228
+ cwd = await sandbox.getWorkDir().catch(() => "");
229
+ if (!cwd) cwd = await sandbox.process.executeCommand("pwd").then((r) => normalizeDaytonaExecResult(r).stdout.trim()).catch(() => "") || "/home/daytona";
230
+ } else cwd = await sandbox.process.executeCommand("pwd").then((r) => normalizeDaytonaExecResult(r).stdout.trim()).catch(() => "") || "/home/daytona";
231
+ if (options.pregame) try {
232
+ await runDaytonaPregame(sandbox, logger, {
233
+ name: options.pregame.name,
234
+ content: options.pregame.content,
235
+ cwd,
236
+ envVars
237
+ });
238
+ } catch (err) {
239
+ if (owned) await deleteOwnedSandbox(sandbox);
240
+ live.delete(sandbox.id);
241
+ throw err;
242
+ }
243
+ return {
244
+ id: sandbox.id,
245
+ cwd
246
+ };
247
+ },
248
+ async exec(sandboxId, command, opts) {
249
+ const { sandbox, env } = get(sandboxId);
250
+ const timeoutSeconds = opts?.timeout ?? 30;
251
+ try {
252
+ return normalizeDaytonaExecResult(await sandbox.process.executeCommand(command, opts?.cwd, resolveDaytonaEnv(env, opts?.env), timeoutSeconds > 0 ? timeoutSeconds : void 0));
253
+ } catch (err) {
254
+ return normalizeDaytonaExecError(err);
255
+ }
256
+ },
257
+ async readFile(sandboxId, path) {
258
+ return bufferToString(await get(sandboxId).sandbox.fs.downloadFile(path));
259
+ },
260
+ async writeFile(sandboxId, path, content) {
261
+ await get(sandboxId).sandbox.fs.uploadFile(Buffer.from(content), path);
262
+ },
263
+ async listFiles(sandboxId, path) {
264
+ return (await get(sandboxId).sandbox.fs.listFiles(path)).map((e) => e.name);
265
+ },
266
+ async destroy(sandboxId) {
267
+ const entry = live.get(sandboxId);
268
+ if (!entry) return;
269
+ if (entry.owned) {
270
+ const action = options.onDestroy ?? "delete";
271
+ if (action === "stop" || action === "pause") await stopOwnedSandbox(entry.sandbox);
272
+ else if (action === "archive") await archiveOwnedSandbox(entry.sandbox);
273
+ else if (action === "delete" || action === "kill") await deleteOwnedSandbox(entry.sandbox);
274
+ }
275
+ live.delete(sandboxId);
276
+ }
277
+ };
278
+ }
279
+ //#endregion
280
+ export { createDaytonaProvider, normalizeDaytonaExecResult, resolveDaytonaCreateParams, resolveDaytonaEnv, runDaytonaPregame, waitForDaytonaReady };
281
+
282
+ //# sourceMappingURL=daytona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona.js","names":[],"sources":["../../src/contexts/daytona.ts"],"sourcesContent":["/**\n * Daytona sandbox provider.\n *\n * Implements {@link SandboxProvider} on top of Daytona sandboxes. Pair it with\n * {@link createSandboxContext} to run an agent's shell + filesystem tools\n * inside a Daytona sandbox:\n *\n * ```ts\n * import { createSandboxContext } from 'zidane/contexts'\n * import { createDaytonaProvider } from 'zidane/contexts/daytona'\n *\n * const execution = createSandboxContext(createDaytonaProvider())\n * ```\n *\n * Requires `@daytona/sdk` as an optional peer dependency:\n * `bun add @daytona/sdk`.\n */\n\nimport type { Logger } from '../logger'\nimport type { SandboxProvider } from './sandbox'\nimport type { ExecResult, SpawnConfig } from './types'\nimport { Buffer } from 'node:buffer'\nimport { consoleSink, createLogger } from '../logger'\n\n// ---------------------------------------------------------------------------\n// Minimal structural views of the `@daytona/sdk` surface we touch. Declared\n// locally so zidane typechecks without the optional peer dependency installed.\n// ---------------------------------------------------------------------------\n\ninterface DaytonaExecuteResponse {\n exitCode?: number | null\n result?: string | null\n output?: string | null\n stdout?: string | null\n stderr?: string | null\n artifacts?: { stdout?: string | null }\n}\n\ninterface DaytonaFileEntry {\n name: string\n}\n\ninterface DaytonaSandbox {\n id: string\n state?: string\n process: {\n executeCommand: (command: string, cwd?: string, env?: Record<string, string>, timeout?: number) => Promise<DaytonaExecuteResponse>\n }\n fs: {\n downloadFile: (path: string) => Promise<Uint8Array | ArrayBuffer | { toString: (encoding?: BufferEncoding) => string }>\n uploadFile: (content: Uint8Array | Buffer, path: string) => Promise<unknown>\n listFiles: (path: string) => Promise<DaytonaFileEntry[]>\n }\n getWorkDir?: () => Promise<string>\n start?: (timeout?: number) => Promise<unknown>\n delete: (timeout?: number) => Promise<unknown>\n stop?: (timeout?: number) => Promise<unknown>\n archive?: () => Promise<unknown>\n}\n\ninterface DaytonaClientConfig {\n apiKey?: string\n apiUrl?: string\n target?: string\n}\n\ninterface DaytonaResources {\n cpu?: number\n memory?: number\n disk?: number\n gpu?: number\n [key: string]: unknown\n}\n\ninterface DaytonaCreateParams {\n language?: string\n snapshot?: string\n image?: unknown\n resources?: DaytonaResources\n envVars?: Record<string, string>\n [key: string]: unknown\n}\n\ninterface DaytonaClient {\n create: (params?: DaytonaCreateParams) => Promise<DaytonaSandbox>\n get: (sandboxIdOrName: string) => Promise<DaytonaSandbox>\n}\n\ntype DaytonaConstructor = new (config?: DaytonaClientConfig) => DaytonaClient\n\n// ---------------------------------------------------------------------------\n// Provider options\n// ---------------------------------------------------------------------------\n\nexport type DaytonaOnDestroy = 'delete' | 'kill' | 'stop' | 'pause' | 'archive' | 'leave'\n\nexport interface DaytonaProviderOptions {\n /** Daytona API key. Falls back to the `DAYTONA_API_KEY` env var when omitted. */\n apiKey?: string\n /** Daytona API URL. Falls back to `DAYTONA_API_URL`, then Daytona's hosted default. */\n apiUrl?: string\n /** Daytona target / region. Falls back to `DAYTONA_TARGET`, then the org default. */\n target?: string\n /**\n * Attach to a pre-existing sandbox by id or name instead of creating a fresh\n * one. The provider treats attached sandboxes as externally owned and leaves\n * them running on destroy/failure.\n */\n sandboxId?: string\n /** Daytona snapshot used when creating a fresh sandbox. */\n snapshot?: string\n /** Runtime used for Daytona's code tooling. Shell execution works either way. */\n language?: string\n /** Daytona image/declarative builder input used when creating a fresh sandbox. */\n image?: unknown\n /** Daytona sandbox resources. */\n resources?: DaytonaResources\n /** Default working directory, applied when a spawn doesn't set `SpawnConfig.cwd`. */\n cwd?: string\n /** Environment variables baked into the sandbox and re-sent on every command. */\n env?: Record<string, string>\n /** Logger for provider-level lifecycle lines. */\n logger?: Logger\n /** Total deadline, in seconds, for the post-create readiness probe. Defaults to `60`. */\n readinessTimeoutSeconds?: number\n /** Setup script to upload and run once the sandbox is ready. */\n pregame?: { name: string, content: string }\n /**\n * What to do with an owned sandbox on destroy:\n *\n * - `'delete'` / `'kill'` (default) — call `sandbox.delete()`.\n * - `'stop'` / `'pause'` — call `sandbox.stop()` so Daytona preserves state\n * according to the runner's stop semantics.\n * - `'archive'` — stop, then archive for longer-term persistence.\n * - `'leave'` — make no API call.\n */\n onDestroy?: DaytonaOnDestroy\n}\n\n/** Per-probe timeout for the readiness `true` command. */\nconst READINESS_PROBE_TIMEOUT_SECONDS = 5\n/** Pause between readiness probes while the sandbox is still warming up. */\nconst READINESS_BACKOFF_MS = 250\n/** Setup scripts commonly install dependencies, so give them a generous cap. */\nconst PREGAME_TIMEOUT_SECONDS = 30 * 60\n\nexport interface DaytonaReadinessOptions {\n /** Total deadline in seconds. `<= 0` disables the probe entirely. */\n timeoutSeconds: number\n /** Optional cleanup for owned sandboxes that never become ready. */\n cleanupOnTimeout?: () => Promise<void>\n /** Clock source — injectable for deterministic tests. */\n now?: () => number\n /** Sleep between probes — injectable for deterministic tests. */\n sleep?: (ms: number) => Promise<void>\n}\n\nexport function resolveDaytonaEnv(\n optionEnv: Record<string, string> | undefined,\n perSpawnEnv: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n const merged = { ...optionEnv, ...perSpawnEnv }\n return Object.keys(merged).length > 0 ? merged : undefined\n}\n\nexport function normalizeDaytonaExecResult(response: DaytonaExecuteResponse): ExecResult {\n return {\n stdout: response.stdout ?? response.artifacts?.stdout ?? response.result ?? response.output ?? '',\n stderr: response.stderr ?? '',\n exitCode: typeof response.exitCode === 'number' ? response.exitCode : 0,\n }\n}\n\nfunction normalizeDaytonaExecError(error: unknown): ExecResult {\n const err = error as { exitCode?: unknown, stdout?: unknown, stderr?: unknown, result?: unknown, output?: unknown, message?: unknown }\n if (typeof err.exitCode === 'number') {\n return {\n stdout: typeof err.stdout === 'string'\n ? err.stdout\n : typeof err.result === 'string'\n ? err.result\n : typeof err.output === 'string'\n ? err.output\n : '',\n stderr: typeof err.stderr === 'string' ? err.stderr : typeof err.message === 'string' ? err.message : '',\n exitCode: err.exitCode,\n }\n }\n return { stdout: '', stderr: error instanceof Error ? error.message : String(error), exitCode: 124 }\n}\n\nfunction bufferToString(value: Uint8Array | ArrayBuffer | { toString: (encoding?: BufferEncoding) => string }): string {\n if (Buffer.isBuffer(value))\n return value.toString('utf8')\n if (value instanceof ArrayBuffer)\n return new TextDecoder().decode(new Uint8Array(value))\n if (value instanceof Uint8Array)\n return new TextDecoder().decode(value)\n return value.toString('utf8')\n}\n\nfunction toClientConfig(apiKey?: string, apiUrl?: string, target?: string): DaytonaClientConfig | undefined {\n const config: DaytonaClientConfig = {}\n if (apiKey !== undefined)\n config.apiKey = apiKey\n if (apiUrl !== undefined)\n config.apiUrl = apiUrl\n if (target !== undefined)\n config.target = target\n return Object.keys(config).length > 0 ? config : undefined\n}\n\nfunction takeString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nexport function resolveDaytonaCreateParams(\n sandboxConfig: Record<string, unknown>,\n options: DaytonaProviderOptions,\n envVars: Record<string, string> | undefined,\n): DaytonaCreateParams | undefined {\n const reserved = new Set(['provider', 'apiKey', 'apiUrl', 'target', 'sandboxId'])\n const params: DaytonaCreateParams = {}\n\n for (const [key, value] of Object.entries(sandboxConfig)) {\n if (!reserved.has(key) && value !== undefined)\n params[key] = value\n }\n\n const language = takeString(sandboxConfig.language) ?? options.language\n const snapshot = takeString(sandboxConfig.snapshot) ?? options.snapshot\n const image = sandboxConfig.image ?? options.image\n const resources = (sandboxConfig.resources as DaytonaResources | undefined) ?? options.resources\n const configEnvVars = sandboxConfig.envVars as Record<string, string> | undefined\n const mergedEnvVars = resolveDaytonaEnv(envVars, configEnvVars)\n\n if (language !== undefined)\n params.language = language\n if (snapshot !== undefined)\n params.snapshot = snapshot\n if (image !== undefined)\n params.image = image\n if (resources !== undefined)\n params.resources = resources\n if (mergedEnvVars !== undefined)\n params.envVars = mergedEnvVars\n\n return Object.keys(params).length > 0 ? params : undefined\n}\n\nexport async function waitForDaytonaReady(\n sandbox: DaytonaSandbox,\n logger: Logger,\n opts: DaytonaReadinessOptions,\n): Promise<void> {\n if (opts.timeoutSeconds <= 0)\n return\n\n const now = opts.now ?? Date.now\n const sleep = opts.sleep ?? (ms => new Promise<void>(resolve => setTimeout(resolve, ms)))\n const start = now()\n const deadline = start + opts.timeoutSeconds * 1000\n\n logger.info('waiting for Daytona sandbox to initialize', { sandboxId: sandbox.id })\n\n while (true) {\n try {\n await sandbox.process.executeCommand('true', undefined, undefined, READINESS_PROBE_TIMEOUT_SECONDS)\n logger.info('Daytona sandbox ready', { sandboxId: sandbox.id, elapsedMs: now() - start })\n return\n }\n catch {\n if (now() >= deadline) {\n await opts.cleanupOnTimeout?.().catch(() => {})\n throw new Error(`Daytona sandbox ${sandbox.id} did not become ready within ${opts.timeoutSeconds}s`)\n }\n await sleep(READINESS_BACKOFF_MS)\n }\n }\n}\n\nexport async function runDaytonaPregame(\n sandbox: DaytonaSandbox,\n logger: Logger,\n opts: { name: string, content: string, cwd?: string, envVars?: Record<string, string> },\n): Promise<void> {\n const path = `/tmp/${opts.name}`\n logger.info('running Daytona pregame script', { sandboxId: sandbox.id, path })\n await sandbox.fs.uploadFile(Buffer.from(opts.content), path)\n\n const quoted = JSON.stringify(path)\n let result: ExecResult\n try {\n result = normalizeDaytonaExecResult(\n await sandbox.process.executeCommand(`chmod +x ${quoted} && ${quoted}`, opts.cwd, opts.envVars, PREGAME_TIMEOUT_SECONDS),\n )\n }\n catch (err) {\n result = normalizeDaytonaExecError(err)\n }\n\n if (result.exitCode !== 0) {\n logger.error('Daytona pregame script failed', { sandboxId: sandbox.id, exitCode: result.exitCode, stdout: result.stdout, stderr: result.stderr })\n throw new Error(`Daytona pregame script ${opts.name} failed with exit code ${result.exitCode}`)\n }\n\n logger.info('Daytona pregame ready', { sandboxId: sandbox.id, stdout: result.stdout, stderr: result.stderr })\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\nexport function createDaytonaProvider(options: DaytonaProviderOptions = {}): SandboxProvider {\n const live = new Map<string, { sandbox: DaytonaSandbox, env?: Record<string, string>, owned: boolean }>()\n const logger = options.logger ?? createLogger(consoleSink())\n const readinessTimeoutSeconds = options.readinessTimeoutSeconds ?? 60\n\n async function loadSdk(): Promise<DaytonaConstructor> {\n try {\n const mod = await import('@daytona/sdk') as { Daytona: DaytonaConstructor }\n return mod.Daytona\n }\n catch {\n throw new Error('@daytona/sdk is required for the Daytona sandbox provider. Install it with: bun add @daytona/sdk')\n }\n }\n\n function get(sandboxId: string): { sandbox: DaytonaSandbox, env?: Record<string, string>, owned: boolean } {\n const entry = live.get(sandboxId)\n if (!entry)\n throw new Error(`Daytona sandbox ${sandboxId} is not tracked by this provider`)\n return entry\n }\n\n async function deleteOwnedSandbox(sandbox: DaytonaSandbox): Promise<void> {\n try {\n await sandbox.delete()\n }\n catch {\n // Already gone — nothing to clean up.\n }\n }\n\n async function stopOwnedSandbox(sandbox: DaytonaSandbox): Promise<void> {\n if (!sandbox.stop) {\n logger.error('cannot stop Daytona sandbox: this @daytona/sdk install exposes no stop() method; leaving it running', { sandboxId: sandbox.id })\n return\n }\n try {\n await sandbox.stop()\n logger.info('stopped Daytona sandbox; reconnect later via the sandboxId option (CLI: --sandbox)', { sandboxId: sandbox.id })\n }\n catch (err) {\n logger.error('failed to stop Daytona sandbox; it will run until Daytona lifecycle policy stops it', { sandboxId: sandbox.id, error: err instanceof Error ? err.message : String(err) })\n }\n }\n\n async function archiveOwnedSandbox(sandbox: DaytonaSandbox): Promise<void> {\n if (!sandbox.stop || !sandbox.archive) {\n logger.error('cannot archive Daytona sandbox: this @daytona/sdk install exposes no stop() and archive() pair; leaving it running', { sandboxId: sandbox.id })\n return\n }\n try {\n await sandbox.stop()\n await sandbox.archive()\n logger.info('archived Daytona sandbox; reconnect later via the sandboxId option (CLI: --sandbox)', { sandboxId: sandbox.id })\n }\n catch (err) {\n logger.error('failed to archive Daytona sandbox; it will run until Daytona lifecycle policy stops it', { sandboxId: sandbox.id, error: err instanceof Error ? err.message : String(err) })\n }\n }\n\n async function startAttachedSandboxIfNeeded(sandbox: DaytonaSandbox): Promise<void> {\n if (sandbox.state !== 'stopped' && sandbox.state !== 'archived')\n return\n if (!sandbox.start) {\n logger.error('cannot start Daytona sandbox before attach readiness probe: this @daytona/sdk install exposes no start() method', { sandboxId: sandbox.id, state: sandbox.state })\n return\n }\n logger.info('starting Daytona sandbox before attach readiness probe', { sandboxId: sandbox.id, state: sandbox.state })\n await sandbox.start(readinessTimeoutSeconds > 0 ? readinessTimeoutSeconds : undefined)\n }\n\n return {\n name: 'daytona',\n\n async spawn(config: SpawnConfig = {}): Promise<{ id: string, cwd: string }> {\n const Daytona = await loadSdk()\n const sb: Record<string, unknown> = config.sandbox ?? {}\n\n const apiKey = takeString(sb.apiKey) ?? options.apiKey\n const apiUrl = takeString(sb.apiUrl) ?? options.apiUrl\n const target = takeString(sb.target) ?? options.target\n const connectId = takeString(sb.sandboxId) ?? options.sandboxId\n const envVars = resolveDaytonaEnv(options.env, config.env)\n\n const daytona = new Daytona(toClientConfig(apiKey, apiUrl, target))\n const owned = connectId === undefined\n const sandbox = connectId !== undefined\n ? await daytona.get(connectId)\n : await daytona.create(resolveDaytonaCreateParams(sb, options, envVars))\n\n if (!owned)\n await startAttachedSandboxIfNeeded(sandbox)\n\n live.set(sandbox.id, { sandbox, env: envVars, owned })\n\n try {\n await waitForDaytonaReady(sandbox, logger, {\n timeoutSeconds: readinessTimeoutSeconds,\n ...(owned ? { cleanupOnTimeout: () => deleteOwnedSandbox(sandbox) } : {}),\n })\n }\n catch (err) {\n live.delete(sandbox.id)\n throw err\n }\n\n const requestedCwd = config.cwd ?? options.cwd\n let cwd: string\n if (requestedCwd) {\n cwd = requestedCwd\n await sandbox.process.executeCommand(`mkdir -p ${JSON.stringify(cwd)}`).catch(() => {})\n }\n else if (sandbox.getWorkDir) {\n cwd = await sandbox.getWorkDir().catch(() => '')\n if (!cwd)\n cwd = await sandbox.process.executeCommand('pwd').then(r => normalizeDaytonaExecResult(r).stdout.trim()).catch(() => '') || '/home/daytona'\n }\n else {\n cwd = await sandbox.process.executeCommand('pwd').then(r => normalizeDaytonaExecResult(r).stdout.trim()).catch(() => '') || '/home/daytona'\n }\n\n if (options.pregame) {\n try {\n await runDaytonaPregame(sandbox, logger, { name: options.pregame.name, content: options.pregame.content, cwd, envVars })\n }\n catch (err) {\n if (owned)\n await deleteOwnedSandbox(sandbox)\n live.delete(sandbox.id)\n throw err\n }\n }\n\n return { id: sandbox.id, cwd }\n },\n\n async exec(sandboxId, command, opts): Promise<ExecResult> {\n const { sandbox, env } = get(sandboxId)\n const timeoutSeconds = opts?.timeout ?? 30\n try {\n return normalizeDaytonaExecResult(\n await sandbox.process.executeCommand(\n command,\n opts?.cwd,\n resolveDaytonaEnv(env, opts?.env),\n timeoutSeconds > 0 ? timeoutSeconds : undefined,\n ),\n )\n }\n catch (err) {\n return normalizeDaytonaExecError(err)\n }\n },\n\n async readFile(sandboxId, path): Promise<string> {\n return bufferToString(await get(sandboxId).sandbox.fs.downloadFile(path))\n },\n\n async writeFile(sandboxId, path, content): Promise<void> {\n await get(sandboxId).sandbox.fs.uploadFile(Buffer.from(content), path)\n },\n\n async listFiles(sandboxId, path): Promise<string[]> {\n const entries = await get(sandboxId).sandbox.fs.listFiles(path)\n return entries.map(e => e.name)\n },\n\n async destroy(sandboxId): Promise<void> {\n const entry = live.get(sandboxId)\n if (!entry)\n return\n if (entry.owned) {\n const action = options.onDestroy ?? 'delete'\n if (action === 'stop' || action === 'pause')\n await stopOwnedSandbox(entry.sandbox)\n else if (action === 'archive')\n await archiveOwnedSandbox(entry.sandbox)\n else if (action === 'delete' || action === 'kill')\n await deleteOwnedSandbox(entry.sandbox)\n }\n live.delete(sandboxId)\n },\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as SandboxProvider } from "../index-CrMb8jCE.js";
2
- import { a as Logger } from "../logger-C61U_1eJ.js";
2
+ import { a as Logger } from "../logger-DZcTJ3YX.js";
3
3
 
4
4
  //#region src/contexts/e2b.d.ts
5
5
  interface E2BCommandResult {
package/dist/eval.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $t as buildRegisteredEvals, At as EvalRunSummaryCase, Bt as LlmJudgeOptions, Cn as runEvalCase, Ct as EvalDefinitionContext, Dt as EvalRunReporter, Et as EvalRunMetricAggregate, Ft as EvalTestRunner, Gt as MetricStats, Ht as MetricEmitter, It as EvalVariantSummary, Jt as Trajectory, Kt as RegisterEvalTestsOptions, Lt as EvalWorkspaceFile, Mt as EvalScore, Nt as EvalScorer, Ot as EvalRunReporterOptions, Pt as EvalScorerContext, Qt as buildEvalRunSummary, Rt as EvalWorkspaceOptions, Sn as relativeArtifactPath, St as EvalDefinition, Tt as EvalMetricError, Ut as MetricSpec, Vt as MetricDirection, Wt as MetricSpecMap, Xt as TrajectoryStepKind, Yt as TrajectoryStep, Zt as artifactPath, _n as formatTrajectoryLine, _t as EvalAgentRunStats, an as createReusableExecutionContext, bn as normalizeMetric, bt as EvalCaseOptions, cn as efficiencyMetricValues, dn as fileContentQuality, dt as CreateEvalAgentOptions, en as buildTrajectory, fn as fileExists, ft as EFFICIENCY_METRICS, gn as formatEvalRunSummary, gt as EvalAgentRunResult, hn as formatEvalCaseSummary, ht as EvalAgentRunOptions, in as createEvalRunReporter, jt as EvalRunUsage, kt as EvalRunSummary, ln as emitEfficiencyMetrics, mn as finalizeEvalMetrics, mt as EvalAgentMcpServers, nn as computeEvalTagScores, on as defineEval, pn as fileExistsOneOf, pt as EvalAgent, qt as ReusableExecutionContext, rn as createEvalAgent, sn as defineMetrics, tn as clearRegisteredEvals, un as fileContains, vn as functionalityMetric, vt as EvalAgentStats, wn as statusCompleted, wt as EvalMetric, xn as registerEvalTests, xt as EvalCaseResult, yn as llmJudge, yt as EvalArtifacts, zt as EvalWorkspaceSnapshot } from "./index-Dojm6Hzn.js";
1
+ import { $t as buildRegisteredEvals, At as EvalRunSummaryCase, Bt as LlmJudgeOptions, Cn as runEvalCase, Ct as EvalDefinitionContext, Dt as EvalRunReporter, Et as EvalRunMetricAggregate, Ft as EvalTestRunner, Gt as MetricStats, Ht as MetricEmitter, It as EvalVariantSummary, Jt as Trajectory, Kt as RegisterEvalTestsOptions, Lt as EvalWorkspaceFile, Mt as EvalScore, Nt as EvalScorer, Ot as EvalRunReporterOptions, Pt as EvalScorerContext, Qt as buildEvalRunSummary, Rt as EvalWorkspaceOptions, Sn as relativeArtifactPath, St as EvalDefinition, Tt as EvalMetricError, Ut as MetricSpec, Vt as MetricDirection, Wt as MetricSpecMap, Xt as TrajectoryStepKind, Yt as TrajectoryStep, Zt as artifactPath, _n as formatTrajectoryLine, _t as EvalAgentRunStats, an as createReusableExecutionContext, bn as normalizeMetric, bt as EvalCaseOptions, cn as efficiencyMetricValues, dn as fileContentQuality, dt as CreateEvalAgentOptions, en as buildTrajectory, fn as fileExists, ft as EFFICIENCY_METRICS, gn as formatEvalRunSummary, gt as EvalAgentRunResult, hn as formatEvalCaseSummary, ht as EvalAgentRunOptions, in as createEvalRunReporter, jt as EvalRunUsage, kt as EvalRunSummary, ln as emitEfficiencyMetrics, mn as finalizeEvalMetrics, mt as EvalAgentMcpServers, nn as computeEvalTagScores, on as defineEval, pn as fileExistsOneOf, pt as EvalAgent, qt as ReusableExecutionContext, rn as createEvalAgent, sn as defineMetrics, tn as clearRegisteredEvals, un as fileContains, vn as functionalityMetric, vt as EvalAgentStats, wn as statusCompleted, wt as EvalMetric, xn as registerEvalTests, xt as EvalCaseResult, yn as llmJudge, yt as EvalArtifacts, zt as EvalWorkspaceSnapshot } from "./index-DoQ0MHlp.js";
2
2
  export { CreateEvalAgentOptions, EFFICIENCY_METRICS, EvalAgent, EvalAgentMcpServers, EvalAgentRunOptions, EvalAgentRunResult, EvalAgentRunStats, EvalAgentStats, EvalArtifacts, EvalCaseOptions, EvalCaseResult, EvalDefinition, EvalDefinitionContext, EvalMetric, EvalMetricError, EvalRunMetricAggregate, EvalRunReporter, EvalRunReporterOptions, EvalRunSummary, EvalRunSummaryCase, EvalRunUsage, EvalScore, EvalScorer, EvalScorerContext, EvalTestRunner, EvalVariantSummary, EvalWorkspaceFile, EvalWorkspaceOptions, EvalWorkspaceSnapshot, LlmJudgeOptions, MetricDirection, MetricEmitter, MetricSpec, MetricSpecMap, MetricStats, RegisterEvalTestsOptions, ReusableExecutionContext, Trajectory, TrajectoryStep, TrajectoryStepKind, artifactPath, buildEvalRunSummary, buildRegisteredEvals, buildTrajectory, clearRegisteredEvals, computeEvalTagScores, createEvalAgent, createEvalRunReporter, createReusableExecutionContext, defineEval, defineMetrics, efficiencyMetricValues, emitEfficiencyMetrics, fileContains, fileContentQuality, fileExists, fileExistsOneOf, finalizeEvalMetrics, formatEvalCaseSummary, formatEvalRunSummary, formatTrajectoryLine, functionalityMetric, llmJudge, normalizeMetric, registerEvalTests, relativeArtifactPath, runEvalCase, statusCompleted };
package/dist/eval.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { r as createProcessContext } from "./contexts-DglWSzmR.js";
2
2
  import { t as alwaysQuote } from "./shell-quote-BmnhZmdM.js";
3
- import { a as headlessEventToJsonl, c as runHeadless } from "./headless-QcVRUarY.js";
3
+ import { a as headlessEventToJsonl, c as runHeadless } from "./headless-Cbknpgjo.js";
4
4
  import { a as createMemoryStore, t as createSession } from "./session-nRmW_P8d.js";
5
5
  import { join, relative, resolve } from "node:path";
6
6
  import { tmpdir } from "node:os";
@@ -1,10 +1,10 @@
1
1
  import { p as toAnthropic, s as ensureToolResultPairing } from "./messages-CV_K9I6j.js";
2
- import { d as createAgent } from "./tools-BDqIG7Qd.js";
2
+ import { d as createAgent } from "./tools-fqToqHik.js";
3
3
  import { t as audioFormatFromMediaType } from "./media-sniff-Bn76JxAu.js";
4
4
  import { n as assertResolvedMediaBlock, o as toolResultToText, r as documentBlockMarker } from "./types-DxHDaqN7.js";
5
5
  import { r as createProcessContext } from "./contexts-DglWSzmR.js";
6
6
  import { i as statsByModel } from "./stats-DAKBEKjc.js";
7
- import { i as basic_default } from "./presets-BRXiUHxp.js";
7
+ import { i as basic_default } from "./presets-BsMR5nn6.js";
8
8
  import { a as createMemoryStore, t as createSession } from "./session-nRmW_P8d.js";
9
9
  //#region src/run-summary.ts
10
10
  /**
@@ -653,4 +653,4 @@ function installHeadlessEventAdapter(hooks, onEvent) {
653
653
  //#endregion
654
654
  export { headlessEventToJsonl as a, runHeadless as c, createRunSummaryCollector as d, formattedHeadlessTurnEventToJsonl as i, transcriptToOpenAIMessages as l, formatHeadlessResult as n, installHeadlessEventAdapter as o, formatHeadlessTurnEvent as r, providerTranscriptFormatForProvider as s, exitCodeForHeadlessResult as t, transcriptToProviderMessages as u };
655
655
 
656
- //# sourceMappingURL=headless-QcVRUarY.js.map
656
+ //# sourceMappingURL=headless-Cbknpgjo.js.map