@agentworkforce/daytona-runner 0.1.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.
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @agentworkforce/daytona-runner
2
+
3
+ Daytona-backed `WorkflowRuntime` adapter for AgentWorkforce deploy workflows. This package owns the Daytona runtime implementation, auth helpers, and runtime contract types.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install @agentworkforce/daytona-runner @daytonaio/sdk
9
+ ```
10
+
11
+ `@daytonaio/sdk` is a peer dependency — consumers bring their own version (^0.148.0).
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import { Daytona } from '@daytonaio/sdk';
17
+ import {
18
+ DaytonaRuntime,
19
+ resolveDaytonaAuthCredentials,
20
+ } from '@agentworkforce/daytona-runner';
21
+
22
+ const auth = resolveDaytonaAuthCredentials({
23
+ apiKey: process.env.DAYTONA_API_KEY,
24
+ jwtToken: process.env.DAYTONA_JWT_TOKEN,
25
+ organizationId: process.env.DAYTONA_ORGANIZATION_ID,
26
+ });
27
+
28
+ const daytona = new Daytona(auth);
29
+ const runtime = new DaytonaRuntime({ daytona });
30
+
31
+ const handle = await runtime.launch({ label: 'my-workflow' });
32
+ const result = await runtime.exec(handle, 'node -e "console.log(\\"ok\\")"');
33
+ await runtime.destroy(handle);
34
+ ```
35
+
36
+ ## Exports
37
+
38
+ - `DaytonaRuntime` — the `WorkflowRuntime` implementation.
39
+ - `resolveDaytonaAuthCredentials` / `applyDaytonaAuthEnv` — Daytona auth helpers (apiKey vs JWT+org).
40
+ - `WorkflowRuntime`, `RuntimeHandle`, `LaunchOptions`, `ExecOptions`, `ExecResult`, `RuntimeCapabilities` — runtime contract types.
package/dist/auth.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface DaytonaAuthCredentials {
2
+ apiKey?: string;
3
+ jwtToken?: string;
4
+ organizationId?: string;
5
+ }
6
+ export type ResolvedDaytonaAuthCredentials = {
7
+ apiKey: string;
8
+ } | {
9
+ jwtToken: string;
10
+ organizationId: string;
11
+ };
12
+ export declare function resolveDaytonaAuthCredentials(credentials: DaytonaAuthCredentials): ResolvedDaytonaAuthCredentials;
13
+ export declare function applyDaytonaAuthEnv(env: Record<string, string>, credentials: DaytonaAuthCredentials): void;
14
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,8BAA8B,GACtC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,sBAAsB,GAClC,8BAA8B,CAiBhC;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,WAAW,EAAE,sBAAsB,GAClC,IAAI,CAkBN"}
package/dist/auth.js ADDED
@@ -0,0 +1,34 @@
1
+ export function resolveDaytonaAuthCredentials(credentials) {
2
+ const apiKey = credentials.apiKey?.trim();
3
+ if (apiKey) {
4
+ return { apiKey };
5
+ }
6
+ const jwtToken = credentials.jwtToken?.trim();
7
+ if (!jwtToken) {
8
+ throw new Error('Daytona auth is required in credential bundle');
9
+ }
10
+ const organizationId = credentials.organizationId?.trim();
11
+ if (!organizationId) {
12
+ throw new Error('DAYTONA_ORGANIZATION_ID is required when using Daytona JWT auth');
13
+ }
14
+ return { jwtToken, organizationId };
15
+ }
16
+ export function applyDaytonaAuthEnv(env, credentials) {
17
+ const resolved = resolveDaytonaAuthCredentials(credentials);
18
+ if ('apiKey' in resolved) {
19
+ env.DAYTONA_API_KEY = resolved.apiKey;
20
+ // Clear the JWT-mode env keys so a caller flipping from JWT to apiKey
21
+ // auth doesn't leave stale credentials in the bag that downstream
22
+ // consumers might read and prefer over the apiKey path.
23
+ delete env.DAYTONA_JWT_TOKEN;
24
+ delete env.DAYTONA_ORGANIZATION_ID;
25
+ return;
26
+ }
27
+ env.DAYTONA_JWT_TOKEN = resolved.jwtToken;
28
+ env.DAYTONA_ORGANIZATION_ID = resolved.organizationId;
29
+ // Same logic in reverse: a JWT-auth caller should not see a lingering
30
+ // DAYTONA_API_KEY from an earlier mode that would silently take
31
+ // priority over the freshly-applied JWT.
32
+ delete env.DAYTONA_API_KEY;
33
+ }
34
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,6BAA6B,CAC3C,WAAmC;IAEnC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAA2B,EAC3B,WAAmC;IAEnC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACzB,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,sEAAsE;QACtE,kEAAkE;QAClE,wDAAwD;QACxD,OAAO,GAAG,CAAC,iBAAiB,CAAC;QAC7B,OAAO,GAAG,CAAC,uBAAuB,CAAC;QACnC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC1C,GAAG,CAAC,uBAAuB,GAAG,QAAQ,CAAC,cAAc,CAAC;IACtD,sEAAsE;IACtE,gEAAgE;IAChE,yCAAyC;IACzC,OAAO,GAAG,CAAC,eAAe,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { DaytonaRuntime, type DaytonaAttachedSandboxOptions, type DaytonaRuntimeOptions, } from './runtime.js';
2
+ export { applyDaytonaAuthEnv, resolveDaytonaAuthCredentials, type DaytonaAuthCredentials, type ResolvedDaytonaAuthCredentials, } from './auth.js';
3
+ export type { ExecOptions, ExecResult, LaunchOptions, RuntimeCapabilities, RuntimeHandle, WorkflowRuntime, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,GACpC,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { DaytonaRuntime, } from './runtime.js';
2
+ export { applyDaytonaAuthEnv, resolveDaytonaAuthCredentials, } from './auth.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAG9B,MAAM,WAAW,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Daytona, Sandbox } from '@daytonaio/sdk';
2
+ import type { ExecOptions, ExecResult, LaunchOptions, RuntimeCapabilities, RuntimeHandle, WorkflowRuntime } from './types.js';
3
+ export interface DaytonaRuntimeOptions {
4
+ daytona: Daytona;
5
+ snapshot?: string;
6
+ defaultHomeDir?: string;
7
+ }
8
+ export interface DaytonaAttachedSandboxOptions {
9
+ homeDir?: string;
10
+ workdir?: string;
11
+ owned?: boolean;
12
+ }
13
+ export declare class DaytonaRuntime implements WorkflowRuntime {
14
+ readonly id = "daytona";
15
+ readonly capabilities: RuntimeCapabilities;
16
+ private readonly sandboxes;
17
+ private readonly daytona;
18
+ private readonly snapshot?;
19
+ private readonly defaultHomeDir;
20
+ constructor(options: DaytonaRuntimeOptions);
21
+ launch(options?: LaunchOptions): Promise<RuntimeHandle>;
22
+ attachSandbox(sandbox: Sandbox, options?: DaytonaAttachedSandboxOptions): RuntimeHandle;
23
+ exec(handle: RuntimeHandle, command: string, options?: ExecOptions): Promise<ExecResult>;
24
+ uploadFile(handle: RuntimeHandle, source: string | Buffer, destination: string): Promise<void>;
25
+ downloadFile(handle: RuntimeHandle, source: string, destination?: string): Promise<Buffer | void>;
26
+ getHomeDir(handle: RuntimeHandle): Promise<string>;
27
+ destroy(handle: RuntimeHandle): Promise<void>;
28
+ private createSandbox;
29
+ private buildCreateParams;
30
+ private registerSandbox;
31
+ private requireSandbox;
32
+ private resolveHomeDir;
33
+ private msToSeconds;
34
+ }
35
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAOD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,OAAO,EAAE,qBAAqB;IAMpC,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAUjE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,6BAAkC,GAAG,aAAa;IAQrF,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAe5F,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9F,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASjG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAWlD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BrC,aAAa;IA0B3B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,cAAc;YAQR,cAAc;IAa5B,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,183 @@
1
+ export class DaytonaRuntime {
2
+ id = 'daytona';
3
+ capabilities = {
4
+ pty: false,
5
+ snapshots: true,
6
+ isolation: 'strong',
7
+ persistentHandle: true,
8
+ streamingLogs: true,
9
+ };
10
+ sandboxes = new Map();
11
+ daytona;
12
+ snapshot;
13
+ defaultHomeDir;
14
+ constructor(options) {
15
+ this.daytona = options.daytona;
16
+ this.snapshot = options.snapshot;
17
+ this.defaultHomeDir = options.defaultHomeDir ?? '/home/daytona';
18
+ }
19
+ async launch(options = {}) {
20
+ const sandbox = await this.createSandbox(options);
21
+ const homeDir = await this.resolveHomeDir(sandbox);
22
+ return this.registerSandbox(sandbox, {
23
+ owned: true,
24
+ homeDir,
25
+ workdir: options.workdir,
26
+ });
27
+ }
28
+ attachSandbox(sandbox, options = {}) {
29
+ return this.registerSandbox(sandbox, {
30
+ owned: options.owned ?? false,
31
+ homeDir: options.homeDir,
32
+ workdir: options.workdir,
33
+ });
34
+ }
35
+ async exec(handle, command, options = {}) {
36
+ const sandbox = this.requireSandbox(handle);
37
+ const result = await sandbox.process.executeCommand(command, options.cwd, options.env, this.msToSeconds(options.timeoutMs));
38
+ return {
39
+ output: result.result ?? '',
40
+ exitCode: result.exitCode ?? 0,
41
+ };
42
+ }
43
+ async uploadFile(handle, source, destination) {
44
+ const sandbox = this.requireSandbox(handle);
45
+ if (typeof source === 'string') {
46
+ await sandbox.fs.uploadFile(source, destination);
47
+ return;
48
+ }
49
+ await sandbox.fs.uploadFile(source, destination);
50
+ }
51
+ async downloadFile(handle, source, destination) {
52
+ const sandbox = this.requireSandbox(handle);
53
+ if (destination) {
54
+ await sandbox.fs.downloadFile(source, destination);
55
+ return;
56
+ }
57
+ return sandbox.fs.downloadFile(source);
58
+ }
59
+ async getHomeDir(handle) {
60
+ if (handle.homeDir) {
61
+ return handle.homeDir;
62
+ }
63
+ const sandbox = this.requireSandbox(handle);
64
+ const homeDir = await this.resolveHomeDir(sandbox);
65
+ handle.homeDir = homeDir;
66
+ return homeDir;
67
+ }
68
+ async destroy(handle) {
69
+ const entry = this.sandboxes.get(handle.id);
70
+ if (!entry) {
71
+ return;
72
+ }
73
+ if (!entry.owned) {
74
+ // For attached (non-owned) sandboxes we never call the remote
75
+ // delete; just drop the local registration so the caller-managed
76
+ // resource isn't tracked here any more.
77
+ this.sandboxes.delete(handle.id);
78
+ return;
79
+ }
80
+ const client = this.daytona;
81
+ const remove = client.remove ?? client.delete;
82
+ // Order matters: do the remote delete *first*, and only drop the
83
+ // local map entry after it succeeds. If we dropped the entry first
84
+ // and the remote delete then failed, the handle id would be lost
85
+ // and the caller could not retry cleanup safely.
86
+ await remove.call(client, entry.sandbox);
87
+ this.sandboxes.delete(handle.id);
88
+ }
89
+ async createSandbox(options) {
90
+ const params = this.buildCreateParams(options);
91
+ if (this.snapshot) {
92
+ try {
93
+ return await this.daytona.create({
94
+ snapshot: this.snapshot,
95
+ ...params,
96
+ });
97
+ }
98
+ catch (err) {
99
+ // Only fall back to a fresh sandbox when the snapshot itself is
100
+ // missing. Auth/network/quota errors should bubble — otherwise
101
+ // we silently mask real failures (a 401 ends up creating an
102
+ // unsnapshotted sandbox under whichever credentials worked).
103
+ if (!isSnapshotNotFoundError(err)) {
104
+ throw err;
105
+ }
106
+ }
107
+ }
108
+ return this.daytona.create({
109
+ language: 'typescript',
110
+ ...params,
111
+ });
112
+ }
113
+ buildCreateParams(options) {
114
+ const envVars = options.env && Object.keys(options.env).length > 0 ? options.env : undefined;
115
+ const name = options.label?.trim() ? options.label.trim() : undefined;
116
+ return {
117
+ ...(envVars ? { envVars } : {}),
118
+ ...(name ? { name } : {}),
119
+ };
120
+ }
121
+ registerSandbox(sandbox, options) {
122
+ const handle = {
123
+ id: sandbox.id,
124
+ ...(options.homeDir ? { homeDir: options.homeDir } : {}),
125
+ ...(options.workdir ? { workdir: options.workdir } : {}),
126
+ };
127
+ this.sandboxes.set(handle.id, {
128
+ sandbox,
129
+ owned: options.owned,
130
+ });
131
+ return handle;
132
+ }
133
+ requireSandbox(handle) {
134
+ const entry = this.sandboxes.get(handle.id);
135
+ if (!entry) {
136
+ throw new Error(`Runtime handle "${handle.id}" is no longer active`);
137
+ }
138
+ return entry.sandbox;
139
+ }
140
+ async resolveHomeDir(sandbox) {
141
+ try {
142
+ const home = await sandbox.getUserHomeDir();
143
+ if (home) {
144
+ return home;
145
+ }
146
+ }
147
+ catch {
148
+ // fall through to default
149
+ }
150
+ return this.defaultHomeDir;
151
+ }
152
+ msToSeconds(timeoutMs) {
153
+ if (!timeoutMs || timeoutMs <= 0) {
154
+ return undefined;
155
+ }
156
+ return Math.max(1, Math.ceil(timeoutMs / 1000));
157
+ }
158
+ }
159
+ /**
160
+ * Heuristic: identify Daytona errors that indicate the snapshot we asked
161
+ * for doesn't exist (so falling back to a fresh sandbox is safe). We look
162
+ * at the HTTP status when the SDK surfaces one, plus a few well-known
163
+ * error-message shapes Daytona emits. Anything else propagates so the
164
+ * caller sees the original error (auth/network/quota/etc.).
165
+ */
166
+ function isSnapshotNotFoundError(err) {
167
+ if (!err || typeof err !== 'object')
168
+ return false;
169
+ const candidate = err;
170
+ const status = typeof candidate.status === 'number'
171
+ ? candidate.status
172
+ : typeof candidate.statusCode === 'number'
173
+ ? candidate.statusCode
174
+ : undefined;
175
+ if (status === 404)
176
+ return true;
177
+ const message = typeof candidate.message === 'string' ? candidate.message.toLowerCase() : '';
178
+ if (!message)
179
+ return false;
180
+ return (message.includes('snapshot') &&
181
+ (message.includes('not found') || message.includes('does not exist') || message.includes('no such')));
182
+ }
183
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.test.d.ts","sourceRoot":"","sources":["../src/runtime.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import { after, before, describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { Daytona } from '@daytonaio/sdk';
4
+ import * as pkg from './index.js';
5
+ import { DaytonaRuntime, applyDaytonaAuthEnv, resolveDaytonaAuthCredentials } from './index.js';
6
+ describe('public barrel', () => {
7
+ it('exports DaytonaRuntime as a class', () => {
8
+ assert.equal(typeof pkg.DaytonaRuntime, 'function');
9
+ assert.equal(typeof DaytonaRuntime, 'function');
10
+ });
11
+ it('exports resolveDaytonaAuthCredentials and applyDaytonaAuthEnv', () => {
12
+ assert.equal(typeof pkg.resolveDaytonaAuthCredentials, 'function');
13
+ assert.equal(typeof resolveDaytonaAuthCredentials, 'function');
14
+ assert.equal(typeof pkg.applyDaytonaAuthEnv, 'function');
15
+ assert.equal(typeof applyDaytonaAuthEnv, 'function');
16
+ });
17
+ it('resolveDaytonaAuthCredentials normalises an apiKey-only input', () => {
18
+ const resolved = resolveDaytonaAuthCredentials({ apiKey: 'sk-test' });
19
+ assert.ok('apiKey' in resolved, 'expected apiKey-mode result');
20
+ assert.equal(resolved.apiKey, 'sk-test');
21
+ });
22
+ it('resolveDaytonaAuthCredentials rejects empty input', () => {
23
+ assert.throws(() => resolveDaytonaAuthCredentials({}));
24
+ });
25
+ it('applyDaytonaAuthEnv writes DAYTONA_API_KEY into the supplied env bag', () => {
26
+ const env = {};
27
+ applyDaytonaAuthEnv(env, { apiKey: 'sk-test' });
28
+ assert.equal(env.DAYTONA_API_KEY, 'sk-test');
29
+ });
30
+ });
31
+ const daytonaApiKey = process.env.DAYTONA_API_KEY?.trim();
32
+ const HAS_DAYTONA = Boolean(daytonaApiKey);
33
+ const SMOKE_LABEL = 'daytona-runner-smoke';
34
+ describe('DaytonaRuntime smoke', { concurrency: false }, () => {
35
+ let runtime;
36
+ let handle;
37
+ before(() => {
38
+ if (!HAS_DAYTONA)
39
+ return;
40
+ const auth = resolveDaytonaAuthCredentials({
41
+ apiKey: daytonaApiKey,
42
+ jwtToken: process.env.DAYTONA_JWT_TOKEN,
43
+ organizationId: process.env.DAYTONA_ORGANIZATION_ID,
44
+ });
45
+ const daytona = new Daytona(auth);
46
+ runtime = new DaytonaRuntime({ daytona });
47
+ });
48
+ after(async () => {
49
+ if (runtime && handle) {
50
+ try {
51
+ await runtime.destroy(handle);
52
+ }
53
+ catch {
54
+ // best-effort cleanup; sandbox leaks surface via Daytona dashboard
55
+ }
56
+ }
57
+ });
58
+ it('launches a sandbox, runs node -e, and destroys it', { skip: HAS_DAYTONA ? false : 'DAYTONA_API_KEY is not set', timeout: 120_000 }, async () => {
59
+ assert.ok(runtime, 'runtime should be initialised when DAYTONA_API_KEY is set');
60
+ handle = await runtime.launch({ label: SMOKE_LABEL });
61
+ const result = await runtime.exec(handle, "node -e 'console.log(\"ok\")'");
62
+ assert.equal(result.exitCode, 0, `expected exitCode 0, got ${result.exitCode}: ${result.output}`);
63
+ assert.match(result.output, /\bok\b/, `expected output to contain "ok", got: ${result.output}`);
64
+ });
65
+ });
66
+ //# sourceMappingURL=runtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../src/runtime.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type IsolationLevel = 'none' | 'process' | 'strong';
2
+ export interface RuntimeCapabilities {
3
+ pty: boolean;
4
+ snapshots: boolean;
5
+ isolation: IsolationLevel;
6
+ persistentHandle: boolean;
7
+ streamingLogs: boolean;
8
+ }
9
+ export interface LaunchOptions {
10
+ env?: Record<string, string>;
11
+ label?: string;
12
+ workdir?: string;
13
+ }
14
+ export interface RuntimeHandle {
15
+ id: string;
16
+ homeDir?: string;
17
+ workdir?: string;
18
+ }
19
+ export interface ExecOptions {
20
+ cwd?: string;
21
+ env?: Record<string, string>;
22
+ timeoutMs?: number;
23
+ }
24
+ export interface ExecResult {
25
+ output: string;
26
+ exitCode: number;
27
+ }
28
+ export interface WorkflowRuntime {
29
+ readonly id: string;
30
+ readonly capabilities: RuntimeCapabilities;
31
+ launch(options?: LaunchOptions): Promise<RuntimeHandle>;
32
+ exec(handle: RuntimeHandle, command: string, options?: ExecOptions): Promise<ExecResult>;
33
+ uploadFile(handle: RuntimeHandle, source: string | Buffer, destination: string): Promise<void>;
34
+ downloadFile(handle: RuntimeHandle, source: string, destination?: string): Promise<Buffer | void>;
35
+ getHomeDir(handle: RuntimeHandle): Promise<string>;
36
+ destroy(handle: RuntimeHandle): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzF,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@agentworkforce/daytona-runner",
3
+ "version": "0.1.0",
4
+ "description": "Daytona-backed WorkflowRuntime adapter for AgentWorkforce deploy workflows.",
5
+ "private": false,
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "package.json"
19
+ ],
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/AgentWorkforce/workforce",
23
+ "directory": "packages/daytona-runner"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json",
30
+ "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit",
32
+ "test": "tsc -p tsconfig.json && node --test dist/*.test.js",
33
+ "lint": "tsc -p tsconfig.json --noEmit"
34
+ },
35
+ "dependencies": {},
36
+ "peerDependencies": {
37
+ "@daytonaio/sdk": "^0.148.0"
38
+ },
39
+ "devDependencies": {
40
+ "@daytonaio/sdk": "^0.148.0"
41
+ }
42
+ }