background-agents 0.1.1

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 (83) hide show
  1. package/README.md +402 -0
  2. package/dist/debug.d.ts +7 -0
  3. package/dist/debug.d.ts.map +1 -0
  4. package/dist/debug.js +19 -0
  5. package/dist/debug.js.map +1 -0
  6. package/dist/factory.d.ts +31 -0
  7. package/dist/factory.d.ts.map +1 -0
  8. package/dist/factory.js +47 -0
  9. package/dist/factory.js.map +1 -0
  10. package/dist/index.d.ts +30 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +35 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/providers/base.d.ts +160 -0
  15. package/dist/providers/base.d.ts.map +1 -0
  16. package/dist/providers/base.js +656 -0
  17. package/dist/providers/base.js.map +1 -0
  18. package/dist/providers/claude.d.ts +14 -0
  19. package/dist/providers/claude.d.ts.map +1 -0
  20. package/dist/providers/claude.js +122 -0
  21. package/dist/providers/claude.js.map +1 -0
  22. package/dist/providers/codex.d.ts +14 -0
  23. package/dist/providers/codex.d.ts.map +1 -0
  24. package/dist/providers/codex.js +160 -0
  25. package/dist/providers/codex.js.map +1 -0
  26. package/dist/providers/gemini.d.ts +16 -0
  27. package/dist/providers/gemini.d.ts.map +1 -0
  28. package/dist/providers/gemini.js +91 -0
  29. package/dist/providers/gemini.js.map +1 -0
  30. package/dist/providers/index.d.ts +6 -0
  31. package/dist/providers/index.d.ts.map +1 -0
  32. package/dist/providers/index.js +6 -0
  33. package/dist/providers/index.js.map +1 -0
  34. package/dist/providers/opencode.d.ts +14 -0
  35. package/dist/providers/opencode.d.ts.map +1 -0
  36. package/dist/providers/opencode.js +100 -0
  37. package/dist/providers/opencode.js.map +1 -0
  38. package/dist/sandbox/daytona-ssh.d.ts +9 -0
  39. package/dist/sandbox/daytona-ssh.d.ts.map +1 -0
  40. package/dist/sandbox/daytona-ssh.js +113 -0
  41. package/dist/sandbox/daytona-ssh.js.map +1 -0
  42. package/dist/sandbox/daytona.d.ts +4 -0
  43. package/dist/sandbox/daytona.d.ts.map +1 -0
  44. package/dist/sandbox/daytona.js +238 -0
  45. package/dist/sandbox/daytona.js.map +1 -0
  46. package/dist/sandbox/index.d.ts +14 -0
  47. package/dist/sandbox/index.d.ts.map +1 -0
  48. package/dist/sandbox/index.js +15 -0
  49. package/dist/sandbox/index.js.map +1 -0
  50. package/dist/session.d.ts +64 -0
  51. package/dist/session.d.ts.map +1 -0
  52. package/dist/session.js +113 -0
  53. package/dist/session.js.map +1 -0
  54. package/dist/types/events.d.ts +114 -0
  55. package/dist/types/events.d.ts.map +1 -0
  56. package/dist/types/events.js +50 -0
  57. package/dist/types/events.js.map +1 -0
  58. package/dist/types/index.d.ts +3 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +3 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/dist/types/provider.d.ts +124 -0
  63. package/dist/types/provider.d.ts.map +1 -0
  64. package/dist/types/provider.js +2 -0
  65. package/dist/types/provider.js.map +1 -0
  66. package/dist/utils/index.d.ts +4 -0
  67. package/dist/utils/index.d.ts.map +1 -0
  68. package/dist/utils/index.js +4 -0
  69. package/dist/utils/index.js.map +1 -0
  70. package/dist/utils/install.d.ts +27 -0
  71. package/dist/utils/install.d.ts.map +1 -0
  72. package/dist/utils/install.js +86 -0
  73. package/dist/utils/install.js.map +1 -0
  74. package/dist/utils/json.d.ts +8 -0
  75. package/dist/utils/json.d.ts.map +1 -0
  76. package/dist/utils/json.js +15 -0
  77. package/dist/utils/json.js.map +1 -0
  78. package/dist/utils/session.d.ts +17 -0
  79. package/dist/utils/session.d.ts.map +1 -0
  80. package/dist/utils/session.js +59 -0
  81. package/dist/utils/session.js.map +1 -0
  82. package/next.config.codeagentsdk.cjs +22 -0
  83. package/package.json +57 -0
@@ -0,0 +1,100 @@
1
+ import { createToolStartEvent } from "../types/events.js";
2
+ import { safeJsonParse } from "../utils/json.js";
3
+ import { Provider } from "./base.js";
4
+ /**
5
+ * OpenCode provider
6
+ *
7
+ * Interacts with the OpenCode CLI tool which outputs JSON lines
8
+ */
9
+ export class OpenCodeProvider extends Provider {
10
+ name = "opencode";
11
+ constructor(options) {
12
+ super(options);
13
+ }
14
+ getCommand(options) {
15
+ // OpenCode sometimes writes JSON events to stderr; run under bash and redirect 2>&1
16
+ // to ensure the sandbox PTY captures the JSONL stream.
17
+ const quote = (s) => `'${s.replace(/'/g, "'\\''")}'`;
18
+ const model = options?.model;
19
+ const session = this.sessionId || options?.sessionId;
20
+ const prompt = options?.prompt;
21
+ const parts = [
22
+ "opencode",
23
+ "run",
24
+ "--format",
25
+ "json",
26
+ "--variant",
27
+ "medium",
28
+ ];
29
+ if (model) {
30
+ parts.push("-m", quote(model));
31
+ }
32
+ if (session) {
33
+ parts.push("-s", quote(session));
34
+ }
35
+ if (prompt) {
36
+ parts.push(quote(prompt));
37
+ }
38
+ const command = `${parts.join(" ")} 2>&1`;
39
+ return {
40
+ cmd: "bash",
41
+ args: ["-lc", command],
42
+ env: {
43
+ // Allow all tool actions without interactive approval in headless runs
44
+ OPENCODE_PERMISSION: '{"*":"allow"}',
45
+ ...options?.env,
46
+ },
47
+ };
48
+ }
49
+ parse(line) {
50
+ const json = safeJsonParse(line);
51
+ if (!json) {
52
+ return null;
53
+ }
54
+ // Step start - session initialization
55
+ if (json.type === "step_start") {
56
+ // OpenCode can emit multiple step_start lines for the same session; only emit once.
57
+ if (this.sessionId === json.sessionID)
58
+ return null;
59
+ this.sessionId = json.sessionID;
60
+ return { type: "session", id: json.sessionID };
61
+ }
62
+ // Text content - the actual response
63
+ if (json.type === "text") {
64
+ if (json.part?.type === "text" && json.part.text) {
65
+ return { type: "token", text: json.part.text };
66
+ }
67
+ return null;
68
+ }
69
+ // Tool call start
70
+ if (json.type === "tool_call") {
71
+ const toolName = (json.part?.tool || "unknown").toLowerCase();
72
+ const normalized = toolName === "bash" ? "shell" : toolName;
73
+ return createToolStartEvent(normalized, json.part?.args);
74
+ }
75
+ // Tool use (stream-json: emitted when tool completes; emit as tool_start so it appears in stream)
76
+ if (json.type === "tool_use") {
77
+ const toolName = (json.part?.tool || "unknown").toLowerCase();
78
+ const normalized = toolName === "bash" ? "shell" : toolName;
79
+ const raw = json.part;
80
+ return createToolStartEvent(normalized, raw?.state?.input);
81
+ }
82
+ // Tool result - tool completed
83
+ if (json.type === "tool_result") {
84
+ return { type: "tool_end" };
85
+ }
86
+ // Step finish - emit end only when run actually stops (reason "stop"); ignore intermediate steps (e.g. reason "tool-calls").
87
+ if (json.type === "step_finish") {
88
+ if (json.part?.reason === "stop")
89
+ return { type: "end" };
90
+ return null;
91
+ }
92
+ // Error event - emit as end with error
93
+ if (json.type === "error") {
94
+ const errorMsg = json.error?.data?.message || json.error?.name || "Unknown error";
95
+ return { type: "end", error: errorMsg };
96
+ }
97
+ return null;
98
+ }
99
+ }
100
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Sandbox } from "@daytonaio/sdk";
2
+ import type { CodeAgentSandbox, AdaptSandboxOptions } from "../types/index.js";
3
+ /**
4
+ * Wrap a Daytona Sandbox to use SSH for executeCommand and executeBackground.
5
+ * Long-running commands (e.g. starting CLI agents) return immediately via executeBackground.
6
+ * Requires sandbox.createSshAccess() (Daytona SDK support for SSH).
7
+ */
8
+ export declare function adaptDaytonaSandboxWithSsh(sandbox: Sandbox, options?: AdaptSandboxOptions): CodeAgentSandbox;
9
+ //# sourceMappingURL=daytona-ssh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona-ssh.d.ts","sourceRoot":"","sources":["../../src/sandbox/daytona-ssh.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAA4B,MAAM,mBAAmB,CAAA;AA2CxG;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,mBAAwB,GAChC,gBAAgB,CAuElB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Daytona sandbox adapter that uses SSH for executeCommand and executeBackground.
3
+ * Use this for background CLI agent runs so start() returns quickly (non-blocking).
4
+ * Streaming (executeCommandStream) and ensureProvider still use the process API.
5
+ */
6
+ import { Client } from "ssh2";
7
+ import { adaptDaytonaSandbox } from "./daytona.js";
8
+ const SSH_HOST = "ssh.app.daytona.io";
9
+ const SSH_PORT = 22;
10
+ const SSH_TOKEN_EXPIRY_MINUTES = 60;
11
+ function hasSshAccess(s) {
12
+ return typeof s.createSshAccess === "function";
13
+ }
14
+ function execOverSsh(conn, command, timeoutMs = 60_000) {
15
+ return new Promise((resolve, reject) => {
16
+ const timer = timeoutMs > 0 ? setTimeout(() => {
17
+ reject(new Error(`SSH exec timeout after ${timeoutMs}ms`));
18
+ }, timeoutMs) : undefined;
19
+ conn.exec(command, (err, stream) => {
20
+ if (err) {
21
+ clearTimeout(timer);
22
+ reject(err);
23
+ return;
24
+ }
25
+ let stdout = "";
26
+ let stderr = "";
27
+ stream.on("data", (data) => { stdout += data.toString(); });
28
+ stream.stderr.on("data", (data) => { stderr += data.toString(); });
29
+ stream.on("close", (code) => {
30
+ clearTimeout(timer);
31
+ resolve({
32
+ exitCode: code ?? 1,
33
+ output: stdout + (stderr ? "\nSTDERR:\n" + stderr : ""),
34
+ });
35
+ });
36
+ });
37
+ });
38
+ }
39
+ /**
40
+ * Wrap a Daytona Sandbox to use SSH for executeCommand and executeBackground.
41
+ * Long-running commands (e.g. starting CLI agents) return immediately via executeBackground.
42
+ * Requires sandbox.createSshAccess() (Daytona SDK support for SSH).
43
+ */
44
+ export function adaptDaytonaSandboxWithSsh(sandbox, options = {}) {
45
+ const base = adaptDaytonaSandbox(sandbox, options);
46
+ const envVars = { ...options.env };
47
+ let conn = null;
48
+ let connectPromise = null;
49
+ async function ensureSsh() {
50
+ if (conn)
51
+ return conn;
52
+ if (connectPromise)
53
+ return connectPromise;
54
+ if (!hasSshAccess(sandbox)) {
55
+ throw new Error("Sandbox does not support createSshAccess(); use adaptDaytonaSandbox() instead.");
56
+ }
57
+ connectPromise = new Promise((resolve, reject) => {
58
+ sandbox.createSshAccess(SSH_TOKEN_EXPIRY_MINUTES).then((access) => {
59
+ const c = new Client();
60
+ c.on("ready", () => {
61
+ conn = c;
62
+ resolve(c);
63
+ });
64
+ c.on("error", reject);
65
+ c.connect({
66
+ host: SSH_HOST,
67
+ port: SSH_PORT,
68
+ username: access.token,
69
+ });
70
+ }).catch(reject);
71
+ });
72
+ return connectPromise;
73
+ }
74
+ function envPrefix() {
75
+ return Object.entries(envVars)
76
+ .map(([k, v]) => `${k}='${String(v).replace(/'/g, "'\\''")}'`)
77
+ .join(" ");
78
+ }
79
+ async function executeCommand(command, timeout = 60) {
80
+ const c = await ensureSsh();
81
+ const prefix = envPrefix();
82
+ const fullCommand = prefix ? `${prefix} ${command}` : command;
83
+ return execOverSsh(c, fullCommand, timeout * 1000);
84
+ }
85
+ async function executeBackground(opts) {
86
+ const c = await ensureSsh();
87
+ const pidFile = `${opts.outputFile}.${opts.runId}.pid`;
88
+ const doneFile = `${pidFile}.done`;
89
+ const prefix = envPrefix();
90
+ const cmd = prefix ? `${prefix} ${opts.command}` : opts.command;
91
+ const wrapper = `( ( ${cmd} >> ${opts.outputFile} 2>&1 ; echo 1 > ${doneFile} ) & echo $! > ${pidFile} ; cat ${pidFile} )`;
92
+ const result = await execOverSsh(c, wrapper, 15_000);
93
+ const raw = (result.output ?? "").trim().split(/\s+/).pop() ?? "";
94
+ const pid = Number(raw);
95
+ if (!Number.isInteger(pid) || pid < 1) {
96
+ throw new Error(`executeBackground: could not parse pid from output: ${result.output?.slice(0, 200)}`);
97
+ }
98
+ return { pid };
99
+ }
100
+ return {
101
+ setEnvVars(vars) {
102
+ Object.assign(envVars, vars);
103
+ base.setEnvVars(vars);
104
+ },
105
+ executeCommand,
106
+ executeBackground,
107
+ ensureProvider: base.ensureProvider.bind(base),
108
+ async *executeCommandStream(command, timeout) {
109
+ yield* base.executeCommandStream(command, timeout);
110
+ },
111
+ };
112
+ }
113
+ //# sourceMappingURL=daytona-ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona-ssh.js","sourceRoot":"","sources":["../../src/sandbox/daytona-ssh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Sandbox } from "@daytonaio/sdk";
2
+ import type { CodeAgentSandbox, AdaptSandboxOptions } from "../types/index.js";
3
+ export declare function adaptDaytonaSandbox(sandbox: Sandbox, options?: AdaptSandboxOptions): CodeAgentSandbox;
4
+ //# sourceMappingURL=daytona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona.d.ts","sourceRoot":"","sources":["../../src/sandbox/daytona.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAA0C,MAAM,mBAAmB,CAAA;AAgDtH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,mBAAwB,GAChC,gBAAgB,CA0NlB"}
@@ -0,0 +1,238 @@
1
+ import { getPackageName } from "../utils/install.js";
2
+ const SSH_HOST = "ssh.app.daytona.io";
3
+ const SSH_PORT = 22;
4
+ const SSH_TOKEN_EXPIRY_MINUTES = 60;
5
+ function hasSshAccess(s) {
6
+ return typeof s.createSshAccess === "function";
7
+ }
8
+ function execOverSsh(conn, command, timeoutMs) {
9
+ return new Promise((resolve, reject) => {
10
+ const timer = timeoutMs > 0 ? setTimeout(() => reject(new Error(`SSH exec timeout after ${timeoutMs}ms`)), timeoutMs) : undefined;
11
+ conn.exec(command, (err, stream) => {
12
+ if (err) {
13
+ clearTimeout(timer);
14
+ reject(err);
15
+ return;
16
+ }
17
+ let stdout = "";
18
+ let stderr = "";
19
+ stream.on("data", (data) => { stdout += data.toString(); });
20
+ stream.stderr.on("data", (data) => { stderr += data.toString(); });
21
+ stream.on("close", (code) => {
22
+ clearTimeout(timer);
23
+ resolve({ exitCode: code ?? 1, output: stdout + (stderr ? "\nSTDERR:\n" + stderr : "") });
24
+ });
25
+ });
26
+ });
27
+ }
28
+ function stripAnsi(text) {
29
+ // eslint-disable-next-line no-control-regex
30
+ return text.replace(/\x1b\[[0-9;]*[A-Za-z]|\x1b\][^\x07]*\x07|\x1b[()][AB012]|\x1b\[[\?]?[0-9;]*[hlm]|\r/g, "");
31
+ }
32
+ function isJsonLine(line) {
33
+ const trimmed = line.trim();
34
+ return trimmed.startsWith("{") && trimmed.endsWith("}");
35
+ }
36
+ export function adaptDaytonaSandbox(sandbox, options = {}) {
37
+ const envVars = { ...options.env };
38
+ async function isProviderInstalled(name) {
39
+ try {
40
+ const result = await sandbox.process.executeCommand(`which ${name}`);
41
+ return result.exitCode === 0;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ async function installProvider(name) {
48
+ const packageName = getPackageName(name);
49
+ try {
50
+ const result = await sandbox.process.executeCommand(`npm install -g ${packageName}`, undefined, undefined, 120);
51
+ return result.exitCode === 0;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ async function executeCommand(command, timeout = 60) {
58
+ const envPrefix = Object.entries(envVars)
59
+ .map(([k, v]) => `${k}='${v.replace(/'/g, "'\\''")}'`)
60
+ .join(" ");
61
+ const fullCommand = envPrefix ? `${envPrefix} ${command}` : command;
62
+ const result = await sandbox.process.executeCommand(fullCommand, undefined, undefined, timeout);
63
+ return { exitCode: result.exitCode ?? 0, output: result.result ?? "" };
64
+ }
65
+ let sshConnectPromise = null;
66
+ async function executeBackground(opts) {
67
+ const t0 = Date.now();
68
+ if (!hasSshAccess(sandbox))
69
+ throw new Error("Sandbox has no createSshAccess(); cannot run background command over SSH.");
70
+ let t = Date.now();
71
+ if (!sshConnectPromise) {
72
+ sshConnectPromise = (async () => {
73
+ const { Client: SshClient } = await import("ssh2");
74
+ return new Promise((resolve, reject) => {
75
+ sandbox.createSshAccess(SSH_TOKEN_EXPIRY_MINUTES).then((access) => {
76
+ const c = new SshClient();
77
+ c.on("ready", () => resolve(c));
78
+ c.on("error", reject);
79
+ c.connect({ host: SSH_HOST, port: SSH_PORT, username: access.token });
80
+ }).catch(reject);
81
+ });
82
+ })();
83
+ }
84
+ const conn = await sshConnectPromise;
85
+ console.log(`[timing] SSH connect (or reuse) took ${Date.now() - t}ms`);
86
+ if (process.env.CODING_AGENTS_SSH_TIMING_TESTS === "1") {
87
+ const testCases = [
88
+ { name: "echo only", command: "echo 123" },
89
+ { name: "sleep 1 then echo", command: "sleep 1 && echo 123" },
90
+ { name: "sleep 3 then echo", command: "sleep 3 && echo 123" },
91
+ { name: "background sleep 5, echo $! and cat pid", command: "( sleep 5 & echo $! > /tmp/p.pid ; cat /tmp/p.pid )" },
92
+ { name: "wrapper shape ( ( sleep 10 ... ) & echo $! ; cat pid )", command: "( ( sleep 10 >> /tmp/out 2>&1 ; echo 1 > /tmp/out.done ) & echo $! > /tmp/w.pid ; cat /tmp/w.pid )" },
93
+ ];
94
+ console.log("[timing] --- SSH wrapper timing tests ---");
95
+ for (const { name, command } of testCases) {
96
+ const tTest = Date.now();
97
+ const res = await execOverSsh(conn, command, 15_000);
98
+ console.log(`[timing] ${(Date.now() - tTest) / 1000}s ${name} exit=${res.exitCode} out=${(res.output ?? "").trim().slice(0, 40)}`);
99
+ }
100
+ console.log("[timing] --- end timing tests ---");
101
+ }
102
+ const envPrefix = Object.entries(envVars)
103
+ .map(([k, v]) => `${k}='${String(v).replace(/'/g, "'\\''")}'`)
104
+ .join(" ");
105
+ const cmd = envPrefix ? `${envPrefix} ${opts.command}` : opts.command;
106
+ // nohup detaches from SSH session so channel closes and we get PID immediately (like Daytona example)
107
+ // Write outputFile.done when command exits so isRunning can use it (process API may not see SSH-started pid)
108
+ const safeCmd = cmd.replace(/'/g, "'\\''");
109
+ const safeOutput = opts.outputFile.replace(/'/g, "'\\''");
110
+ const doneFile = opts.outputFile + ".done";
111
+ const safeDone = doneFile.replace(/'/g, "'\\''");
112
+ const wrapper = `nohup sh -c '${safeCmd} >> ${safeOutput} 2>&1; echo 1 > ${safeDone}' > /dev/null 2>&1 & echo $!`;
113
+ t = Date.now();
114
+ const result = await execOverSsh(conn, wrapper, 15_000);
115
+ console.log(`[timing] execOverSsh(wrapper) took ${Date.now() - t}ms (executeBackground total ${Date.now() - t0}ms)`);
116
+ const raw = (result.output ?? "").trim().split(/\s+/).pop() ?? "";
117
+ const pid = Number(raw);
118
+ if (!Number.isInteger(pid) || pid < 1)
119
+ throw new Error(`executeBackground: could not parse pid: ${result.output?.slice(0, 200)}`);
120
+ return { pid };
121
+ }
122
+ async function killBackgroundProcess(pid) {
123
+ if (!hasSshAccess(sandbox))
124
+ throw new Error("Sandbox has no createSshAccess(); cannot kill over SSH.");
125
+ if (!sshConnectPromise)
126
+ return;
127
+ const conn = await sshConnectPromise;
128
+ await execOverSsh(conn, `kill ${pid} 2>/dev/null || kill -9 ${pid} 2>/dev/null || true`, 10_000);
129
+ }
130
+ const result = {
131
+ setEnvVars(vars) {
132
+ Object.assign(envVars, vars);
133
+ },
134
+ executeCommand,
135
+ killBackgroundProcess,
136
+ async ensureProvider(name) {
137
+ const installed = await isProviderInstalled(name);
138
+ if (!installed) {
139
+ console.log(`Installing ${name} CLI in sandbox...`);
140
+ const success = await installProvider(name);
141
+ if (!success) {
142
+ throw new Error(`Failed to install ${name} CLI in sandbox`);
143
+ }
144
+ console.log(`Installed ${name} CLI`);
145
+ }
146
+ },
147
+ async *executeCommandStream(command, _timeout = 120) {
148
+ const envExports = Object.entries(envVars)
149
+ .map(([k, v]) => `export ${k}='${v.replace(/'/g, "'\\''")}'`)
150
+ .join("; ");
151
+ const timedCommand = _timeout > 0 ? `timeout ${_timeout}s ${command}` : command;
152
+ const fullCommand = envExports ? `${envExports}; ${timedCommand}` : timedCommand;
153
+ let buffer = "";
154
+ const lineQueue = [];
155
+ let resolveNext = null;
156
+ let ptyDone = false;
157
+ let ptyHandle = null;
158
+ const ptyId = `pty-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
159
+ ptyHandle = await sandbox.process.createPty({
160
+ id: ptyId,
161
+ onData: (data) => {
162
+ const text = new TextDecoder().decode(data);
163
+ buffer += text;
164
+ const lines = buffer.split("\n");
165
+ buffer = lines.pop() ?? "";
166
+ for (const line of lines) {
167
+ const cleaned = stripAnsi(line).trim();
168
+ if (cleaned && isJsonLine(cleaned)) {
169
+ if (resolveNext) {
170
+ resolveNext({ value: cleaned, done: false });
171
+ resolveNext = null;
172
+ }
173
+ else {
174
+ lineQueue.push(cleaned);
175
+ }
176
+ }
177
+ }
178
+ },
179
+ });
180
+ try {
181
+ await ptyHandle.waitForConnection();
182
+ await ptyHandle.sendInput(`${fullCommand}\n`);
183
+ await ptyHandle.sendInput("exit\n");
184
+ const waitPromise = ptyHandle.wait().then(() => {
185
+ ptyDone = true;
186
+ const cleaned = stripAnsi(buffer).trim();
187
+ if (cleaned && isJsonLine(cleaned)) {
188
+ if (resolveNext) {
189
+ resolveNext({ value: cleaned, done: false });
190
+ resolveNext = null;
191
+ }
192
+ else {
193
+ lineQueue.push(cleaned);
194
+ }
195
+ }
196
+ if (resolveNext) {
197
+ resolveNext({ value: undefined, done: true });
198
+ resolveNext = null;
199
+ }
200
+ });
201
+ while (true) {
202
+ if (lineQueue.length > 0) {
203
+ yield lineQueue.shift();
204
+ }
205
+ else if (ptyDone) {
206
+ break;
207
+ }
208
+ else {
209
+ const result = await new Promise((resolve) => {
210
+ resolveNext = resolve;
211
+ if (lineQueue.length > 0) {
212
+ resolve({ value: lineQueue.shift(), done: false });
213
+ resolveNext = null;
214
+ }
215
+ else if (ptyDone) {
216
+ resolve({ value: undefined, done: true });
217
+ resolveNext = null;
218
+ }
219
+ });
220
+ if (result.done)
221
+ break;
222
+ yield result.value;
223
+ }
224
+ }
225
+ await waitPromise;
226
+ }
227
+ finally {
228
+ if (ptyHandle) {
229
+ await ptyHandle.disconnect();
230
+ }
231
+ }
232
+ },
233
+ };
234
+ // Background commands always use SSH so start() returns quickly.
235
+ result.executeBackground = executeBackground;
236
+ return result;
237
+ }
238
+ //# sourceMappingURL=daytona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/sandbox/daytona.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sandbox module: public API and adapter dispatch.
3
+ * Implementations live in sandbox/daytona.ts and daytona-ssh.ts.
4
+ */
5
+ import type { CodeAgentSandbox, AdaptSandboxOptions } from "../types/index.js";
6
+ export type { CodeAgentSandbox, AdaptSandboxOptions } from "../types/index.js";
7
+ export { adaptDaytonaSandbox } from "./daytona.js";
8
+ /**
9
+ * Adapt a sandbox for use with createProvider/createSession.
10
+ * If the value is a Daytona Sandbox (from @daytonaio/sdk), it is wrapped via the Daytona adapter.
11
+ * Otherwise it must already implement CodeAgentSandbox and is returned as-is.
12
+ */
13
+ export declare function adaptSandbox(sandbox: CodeAgentSandbox | import("@daytonaio/sdk").Sandbox, options?: AdaptSandboxOptions): CodeAgentSandbox;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE9E,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,GAAG,OAAO,gBAAgB,EAAE,OAAO,EAC5D,OAAO,GAAE,mBAAwB,GAChC,gBAAgB,CAMlB"}
@@ -0,0 +1,15 @@
1
+ import { adaptDaytonaSandbox } from "./daytona.js";
2
+ export { adaptDaytonaSandbox } from "./daytona.js";
3
+ /**
4
+ * Adapt a sandbox for use with createProvider/createSession.
5
+ * If the value is a Daytona Sandbox (from @daytonaio/sdk), it is wrapped via the Daytona adapter.
6
+ * Otherwise it must already implement CodeAgentSandbox and is returned as-is.
7
+ */
8
+ export function adaptSandbox(sandbox, options = {}) {
9
+ const s = sandbox;
10
+ if ("process" in s && typeof s.delete === "function") {
11
+ return adaptDaytonaSandbox(sandbox, options);
12
+ }
13
+ return sandbox;
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA4D,EAC5D,UAA+B,EAAE;IAEjC,MAAM,CAAC,GAAG,OAAqE,CAAA;IAC/E,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACrD,OAAO,mBAAmB,CAAC,OAA2C,EAAE,OAAO,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,OAA2B,CAAA;AACpC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { ProviderName, ProviderOptions, RunOptions, Event } from "./types/index.js";
2
+ import type { Provider } from "./providers/base.js";
3
+ /** Options for createSession (provider options + run defaults like model, timeout). */
4
+ export interface SessionOptions extends ProviderOptions {
5
+ model?: string;
6
+ sessionId?: string;
7
+ timeout?: number;
8
+ /** Optional system prompt applied once per session. */
9
+ systemPrompt?: string;
10
+ skipInstall?: boolean;
11
+ env?: Record<string, string>;
12
+ }
13
+ /** Options for createBackgroundSession (session options; paths derived from session id). */
14
+ export interface BackgroundSessionOptions extends SessionOptions {
15
+ /** When provided, reattach to an existing background session (e.g. after restart). */
16
+ backgroundSessionId?: string;
17
+ }
18
+ /** Background session handle: start turns and get events; state lives in sandbox under session id. */
19
+ export interface BackgroundSession {
20
+ /** Unique session id; paths and cursor in sandbox are derived from this. */
21
+ readonly id: string;
22
+ /** Underlying provider instance (advanced use only). */
23
+ readonly provider: Provider;
24
+ /**
25
+ * Start a new turn with the given prompt. One log file per turn in the sandbox.
26
+ */
27
+ start(prompt: string, options?: Omit<RunOptions, "prompt">): Promise<{
28
+ executionId: string;
29
+ pid: number;
30
+ outputFile: string;
31
+ }>;
32
+ /**
33
+ * Get new events for the current turn. Cursor is read/updated in sandbox meta; no arguments.
34
+ * Use isRunning() to check if the agent is still running (or crashed).
35
+ */
36
+ getEvents(): Promise<{
37
+ sessionId: string | null;
38
+ events: Event[];
39
+ cursor: string;
40
+ }>;
41
+ /** True if the current turn's process is still running in the sandbox (e.g. detect crash). */
42
+ isRunning(): Promise<boolean>;
43
+ /** Current turn's process id from sandbox meta, or null if no run in progress. */
44
+ getPid(): Promise<number | null>;
45
+ /** Cancel the current turn's process in the sandbox (no-op if not running). */
46
+ cancel(): Promise<void>;
47
+ }
48
+ /**
49
+ * Create a session: a provider with run defaults (model, timeout, env) set at creation.
50
+ * Returns the provider; call session.run(prompt) with just the prompt string.
51
+ */
52
+ export declare function createSession(name: ProviderName, options: SessionOptions): Promise<Provider>;
53
+ /**
54
+ * Create a background session: a provider configured for sandboxed background
55
+ * execution with one log file per turn and meta/cursor in the sandbox.
56
+ * Use start() to begin a turn and getEvents() to consume events (no cursor argument).
57
+ */
58
+ export declare function createBackgroundSession(name: ProviderName, options: BackgroundSessionOptions): Promise<BackgroundSession>;
59
+ /** Reattach to an existing background session by id (e.g. after restart). Provider is read from sandbox meta (written at session creation). Cached per id so repeated polls don't recreate the provider. */
60
+ export declare function getBackgroundSession(options: BackgroundSessionOptions & {
61
+ backgroundSessionId: string;
62
+ sandbox: NonNullable<BackgroundSessionOptions["sandbox"]>;
63
+ }): Promise<BackgroundSession>;
64
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAe,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGrG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AA+BnD,uFAAuF;AACvF,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B;AAED,4FAA4F;AAC5F,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,sGAAsG;AACtG,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAE3B;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC;QACnE,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,UAAU,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;IAEF;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,MAAM,EAAE,KAAK,EAAE,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;IAEF,8FAA8F;IAC9F,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAE7B,kFAAkF;IAClF,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAEhC,+EAA+E;IAC/E,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQlG;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED,4MAA4M;AAC5M,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,wBAAwB,GAAG;IAClC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAA;CAC1D,GACA,OAAO,CAAC,iBAAiB,CAAC,CA2B5B"}