@hasna/sandboxes 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -2225,6 +2225,44 @@ var init_database = __esm(() => {
2225
2225
  );
2226
2226
 
2227
2227
  INSERT OR IGNORE INTO _migrations (id) VALUES (1);
2228
+ `,
2229
+ `
2230
+ ALTER TABLE sandboxes ADD COLUMN on_timeout TEXT NOT NULL DEFAULT 'terminate' CHECK(on_timeout IN ('pause', 'terminate'));
2231
+ ALTER TABLE sandboxes ADD COLUMN auto_resume INTEGER NOT NULL DEFAULT 0;
2232
+
2233
+ CREATE TABLE IF NOT EXISTS templates (
2234
+ id TEXT PRIMARY KEY,
2235
+ name TEXT NOT NULL UNIQUE,
2236
+ description TEXT,
2237
+ image TEXT,
2238
+ env_vars TEXT NOT NULL DEFAULT '{}',
2239
+ setup_script TEXT,
2240
+ tags TEXT NOT NULL DEFAULT '[]',
2241
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
2242
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
2243
+ );
2244
+ CREATE INDEX IF NOT EXISTS idx_templates_name ON templates(name);
2245
+
2246
+ INSERT OR IGNORE INTO _migrations (id) VALUES (2);
2247
+ `,
2248
+ `
2249
+ CREATE TABLE IF NOT EXISTS sandbox_sessions_new (
2250
+ id TEXT PRIMARY KEY,
2251
+ sandbox_id TEXT NOT NULL REFERENCES sandboxes(id) ON DELETE CASCADE,
2252
+ agent_name TEXT,
2253
+ agent_type TEXT,
2254
+ command TEXT,
2255
+ status TEXT NOT NULL DEFAULT 'running' CHECK(status IN ('running', 'completed', 'failed', 'killed')),
2256
+ exit_code INTEGER,
2257
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
2258
+ ended_at TEXT
2259
+ );
2260
+ INSERT INTO sandbox_sessions_new SELECT * FROM sandbox_sessions;
2261
+ DROP TABLE sandbox_sessions;
2262
+ ALTER TABLE sandbox_sessions_new RENAME TO sandbox_sessions;
2263
+ CREATE INDEX IF NOT EXISTS idx_sessions_sandbox ON sandbox_sessions(sandbox_id);
2264
+ CREATE INDEX IF NOT EXISTS idx_sessions_status ON sandbox_sessions(status);
2265
+ INSERT OR IGNORE INTO _migrations (id) VALUES (3);
2228
2266
  `
2229
2267
  ];
2230
2268
  });
@@ -2274,6 +2312,8 @@ function rowToSandbox(row) {
2274
2312
  env_vars: JSON.parse(row.env_vars),
2275
2313
  keep_alive_until: row.keep_alive_until,
2276
2314
  project_id: row.project_id,
2315
+ on_timeout: row.on_timeout ?? "terminate",
2316
+ auto_resume: row.auto_resume === 1,
2277
2317
  created_at: row.created_at,
2278
2318
  updated_at: row.updated_at
2279
2319
  };
@@ -2289,8 +2329,10 @@ function createSandbox(input) {
2289
2329
  const config = JSON.stringify(input.config ?? {});
2290
2330
  const env_vars = JSON.stringify(input.env_vars ?? {});
2291
2331
  const project_id = input.project_id ?? null;
2292
- db2.query(`INSERT INTO sandboxes (id, provider, name, status, image, timeout, config, env_vars, project_id, created_at, updated_at)
2293
- VALUES (?, ?, ?, 'creating', ?, ?, ?, ?, ?, ?, ?)`).run(id, provider, name, image, timeout, config, env_vars, project_id, timestamp, timestamp);
2332
+ const on_timeout = input.on_timeout ?? "terminate";
2333
+ const auto_resume = input.auto_resume ? 1 : 0;
2334
+ db2.query(`INSERT INTO sandboxes (id, provider, name, status, image, timeout, config, env_vars, project_id, on_timeout, auto_resume, created_at, updated_at)
2335
+ VALUES (?, ?, ?, 'creating', ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, provider, name, image, timeout, config, env_vars, project_id, on_timeout, auto_resume, timestamp, timestamp);
2294
2336
  return getSandbox(id);
2295
2337
  }
2296
2338
  function getSandbox(id) {
@@ -2581,7 +2623,10 @@ class E2BProvider {
2581
2623
  try {
2582
2624
  const sandbox = await E2BSandbox.create({
2583
2625
  apiKey: this.apiKey,
2584
- timeoutMs: (opts?.timeout || 3600) * 1000
2626
+ timeoutMs: (opts?.timeout || 3600) * 1000,
2627
+ ...opts?.onTimeout === "pause" ? {
2628
+ lifecycle: { onTimeout: "pause", autoResume: opts?.autoResume ?? true }
2629
+ } : {}
2585
2630
  });
2586
2631
  instanceCache.set(sandbox.sandboxId, sandbox);
2587
2632
  return {
@@ -2690,6 +2735,23 @@ class E2BProvider {
2690
2735
  async delete(sandboxId) {
2691
2736
  await this.stop(sandboxId);
2692
2737
  }
2738
+ async pause(sandboxId) {
2739
+ const sandbox = await this.getInstance(sandboxId);
2740
+ try {
2741
+ await sandbox.pause();
2742
+ instanceCache.delete(sandboxId);
2743
+ } catch (err) {
2744
+ throw new ProviderError("e2b", `Failed to pause sandbox: ${err.message}`);
2745
+ }
2746
+ }
2747
+ async resume(sandboxId) {
2748
+ try {
2749
+ const sandbox = await E2BSandbox.connect(sandboxId, { apiKey: this.apiKey });
2750
+ instanceCache.set(sandboxId, sandbox);
2751
+ } catch (err) {
2752
+ throw new ProviderError("e2b", `Failed to resume sandbox: ${err.message}`);
2753
+ }
2754
+ }
2693
2755
  async keepAlive(sandboxId, durationMs) {
2694
2756
  const sandbox = await this.getInstance(sandboxId);
2695
2757
  try {
@@ -2850,6 +2912,12 @@ class DaytonaProvider {
2850
2912
  throw new ProviderError("daytona", `Failed to delete sandbox: ${err.message}`);
2851
2913
  }
2852
2914
  }
2915
+ async pause(_sandboxId) {
2916
+ throw new ProviderError("daytona", "Pause/resume not supported by Daytona provider");
2917
+ }
2918
+ async resume(_sandboxId) {
2919
+ throw new ProviderError("daytona", "Pause/resume not supported by Daytona provider");
2920
+ }
2853
2921
  async keepAlive(sandboxId, durationMs) {
2854
2922
  const sandbox = await this.getInstance(sandboxId);
2855
2923
  try {
@@ -3072,6 +3140,12 @@ class ModalProvider {
3072
3140
  async delete(sandboxId) {
3073
3141
  await this.stop(sandboxId);
3074
3142
  }
3143
+ async pause(_sandboxId) {
3144
+ throw new ProviderError("modal", "Pause/resume not supported by Modal provider");
3145
+ }
3146
+ async resume(_sandboxId) {
3147
+ throw new ProviderError("modal", "Pause/resume not supported by Modal provider");
3148
+ }
3075
3149
  async keepAlive(_sandboxId, _durationMs) {}
3076
3150
  parseCommand(command) {
3077
3151
  const args = [];
@@ -3217,6 +3291,118 @@ var init_stream = __esm(() => {
3217
3291
  listeners = new Map;
3218
3292
  });
3219
3293
 
3294
+ // src/lib/agents/claude.ts
3295
+ class ClaudeDriver {
3296
+ name = "claude";
3297
+ requiredEnvVars = ["ANTHROPIC_API_KEY"];
3298
+ async install(provider, providerSandboxId) {
3299
+ const check = await provider.exec(providerSandboxId, "which claude 2>/dev/null || echo MISSING");
3300
+ if (check.stdout.trim() !== "MISSING")
3301
+ return;
3302
+ await provider.exec(providerSandboxId, "npm install -g @anthropic-ai/claude-code 2>&1 || sudo npm install -g @anthropic-ai/claude-code 2>&1");
3303
+ }
3304
+ async configure(provider, providerSandboxId, _envVars) {
3305
+ const config = JSON.stringify({
3306
+ hasCompletedOnboarding: true,
3307
+ hasTrustDialogAccepted: true,
3308
+ hasAcknowledgedCostThreshold: true
3309
+ });
3310
+ await provider.exec(providerSandboxId, `mkdir -p ~/.claude && echo '${config}' > ~/.claude.json`);
3311
+ }
3312
+ buildCommand(prompt) {
3313
+ return `claude --dangerously-skip-permissions -p ${JSON.stringify(prompt)}`;
3314
+ }
3315
+ }
3316
+
3317
+ // src/lib/agents/codex.ts
3318
+ class CodexDriver {
3319
+ name = "codex";
3320
+ requiredEnvVars = ["OPENAI_API_KEY"];
3321
+ async install(provider, providerSandboxId) {
3322
+ const check = await provider.exec(providerSandboxId, "which codex 2>/dev/null || echo MISSING");
3323
+ if (check.stdout.trim() !== "MISSING")
3324
+ return;
3325
+ await provider.exec(providerSandboxId, "npm install -g @openai/codex 2>&1 || sudo npm install -g @openai/codex 2>&1");
3326
+ }
3327
+ async configure(provider, providerSandboxId, _envVars) {
3328
+ const config = `[core]
3329
+ approvalMode = "full-auto"
3330
+ quiet = true
3331
+ `;
3332
+ await provider.exec(providerSandboxId, `mkdir -p ~/.codex && printf '${config.replace(/'/g, "'\\''")}' > ~/.codex/config.toml`);
3333
+ }
3334
+ buildCommand(prompt) {
3335
+ return `codex --approval-mode full-auto -q ${JSON.stringify(prompt)}`;
3336
+ }
3337
+ }
3338
+
3339
+ // src/lib/agents/gemini.ts
3340
+ class GeminiDriver {
3341
+ name = "gemini";
3342
+ requiredEnvVars = ["GEMINI_API_KEY"];
3343
+ async install(provider, providerSandboxId) {
3344
+ const check = await provider.exec(providerSandboxId, "which gemini 2>/dev/null || echo MISSING");
3345
+ if (check.stdout.trim() !== "MISSING")
3346
+ return;
3347
+ await provider.exec(providerSandboxId, "npm install -g @google/gemini-cli 2>&1 || sudo npm install -g @google/gemini-cli 2>&1");
3348
+ }
3349
+ async configure(provider, providerSandboxId, _envVars) {
3350
+ const settings = JSON.stringify({ theme: "Default", selectedAuthType: "gemini-api-key" });
3351
+ await provider.exec(providerSandboxId, `mkdir -p ~/.gemini && echo '${settings}' > ~/.gemini/settings.json`);
3352
+ }
3353
+ buildCommand(prompt) {
3354
+ return `gemini -p ${JSON.stringify(prompt)}`;
3355
+ }
3356
+ }
3357
+
3358
+ // src/lib/agents/opencode.ts
3359
+ class OpenCodeDriver {
3360
+ name = "opencode";
3361
+ requiredEnvVars = [];
3362
+ async install(provider, providerSandboxId) {
3363
+ const check = await provider.exec(providerSandboxId, "which opencode 2>/dev/null || echo MISSING");
3364
+ if (check.stdout.trim() !== "MISSING")
3365
+ return;
3366
+ await provider.exec(providerSandboxId, "npm install -g opencode-ai 2>&1 || sudo npm install -g opencode-ai 2>&1");
3367
+ }
3368
+ async configure(_provider, _providerSandboxId, _envVars) {}
3369
+ buildCommand(prompt) {
3370
+ return `opencode run ${JSON.stringify(prompt)}`;
3371
+ }
3372
+ }
3373
+
3374
+ // src/lib/agents/pi.ts
3375
+ class PiDriver {
3376
+ name = "pi";
3377
+ requiredEnvVars = ["PI_API_KEY"];
3378
+ async install(provider, providerSandboxId) {
3379
+ const check = await provider.exec(providerSandboxId, "which pi 2>/dev/null || echo MISSING");
3380
+ if (check.stdout.trim() !== "MISSING")
3381
+ return;
3382
+ await provider.exec(providerSandboxId, "npm install -g @pi-ai/cli 2>&1 || sudo npm install -g @pi-ai/cli 2>&1");
3383
+ }
3384
+ async configure(_provider, _providerSandboxId, _envVars) {}
3385
+ buildCommand(prompt) {
3386
+ return `pi ask ${JSON.stringify(prompt)}`;
3387
+ }
3388
+ }
3389
+
3390
+ // src/lib/agents/index.ts
3391
+ function getAgentDriver(name) {
3392
+ return DRIVER_MAP.get(name);
3393
+ }
3394
+ var DRIVERS, DRIVER_MAP;
3395
+ var init_agents = __esm(() => {
3396
+ DRIVERS = [
3397
+ new ClaudeDriver,
3398
+ new CodexDriver,
3399
+ new GeminiDriver,
3400
+ new OpenCodeDriver,
3401
+ new PiDriver
3402
+ ];
3403
+ DRIVER_MAP = new Map(DRIVERS.map((d) => [d.name, d]));
3404
+ });
3405
+
3220
3406
  // src/lib/agent-runner.ts
3221
3407
  var exports_agent_runner = {};
3222
3408
  __export(exports_agent_runner, {
@@ -3228,7 +3414,19 @@ async function runAgent(sandboxId, opts) {
3228
3414
  if (!sandbox.provider_sandbox_id) {
3229
3415
  throw new Error("Sandbox has no provider instance");
3230
3416
  }
3231
- const cmd = opts.command || AGENT_COMMANDS[opts.agentType]?.(opts.prompt) || opts.prompt;
3417
+ const provider = await getProvider(sandbox.provider);
3418
+ const env = Object.keys(sandbox.env_vars ?? {}).length > 0 ? sandbox.env_vars : undefined;
3419
+ let cmd;
3420
+ const driver = opts.agentType !== "custom" ? getAgentDriver(opts.agentType) : undefined;
3421
+ if (opts.command) {
3422
+ cmd = opts.command;
3423
+ } else if (driver) {
3424
+ await driver.install(provider, sandbox.provider_sandbox_id);
3425
+ await driver.configure(provider, sandbox.provider_sandbox_id, sandbox.env_vars ?? {});
3426
+ cmd = driver.buildCommand(opts.prompt);
3427
+ } else {
3428
+ cmd = opts.prompt;
3429
+ }
3232
3430
  const session = createSession({
3233
3431
  sandbox_id: sandbox.id,
3234
3432
  agent_name: opts.agentName,
@@ -3237,8 +3435,6 @@ async function runAgent(sandboxId, opts) {
3237
3435
  });
3238
3436
  emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} started: ${opts.prompt.slice(0, 100)}`);
3239
3437
  const collector = createStreamCollector(sandbox.id, session.id);
3240
- const provider = await getProvider(sandbox.provider);
3241
- const env = Object.keys(sandbox.env_vars ?? {}).length > 0 ? sandbox.env_vars : undefined;
3242
3438
  provider.exec(sandbox.provider_sandbox_id, cmd, {
3243
3439
  onStdout: (data) => {
3244
3440
  collector.onStdout(data);
@@ -3266,22 +3462,16 @@ async function stopAgent(sandboxId) {
3266
3462
  return;
3267
3463
  const provider = await getProvider(sandbox.provider);
3268
3464
  try {
3269
- await provider.exec(sandbox.provider_sandbox_id, "pkill -f 'claude\\|codex\\|gemini' || true");
3465
+ await provider.exec(sandbox.provider_sandbox_id, "pkill -f 'claude\\|codex\\|gemini\\|opencode\\|pi' || true");
3270
3466
  } catch {}
3271
3467
  emitLifecycleEvent(sandbox.id, "Agent stopped by user");
3272
3468
  }
3273
- var CLAUDE_ONBOARDING_SETUP, AGENT_COMMANDS;
3274
3469
  var init_agent_runner = __esm(() => {
3275
3470
  init_sandboxes();
3276
3471
  init_sessions();
3277
3472
  init_providers();
3278
3473
  init_stream();
3279
- CLAUDE_ONBOARDING_SETUP = `mkdir -p ~/.claude && ` + `echo '{"hasCompletedOnboarding":true,"hasTrustDialogAccepted":true,"hasAcknowledgedCostThreshold":true}' > ~/.claude.json`;
3280
- AGENT_COMMANDS = {
3281
- claude: (prompt) => `${CLAUDE_ONBOARDING_SETUP} && claude --dangerously-skip-permissions -p ${JSON.stringify(prompt)}`,
3282
- codex: (prompt) => `codex -q ${JSON.stringify(prompt)}`,
3283
- gemini: (prompt) => `gemini -p ${JSON.stringify(prompt)}`
3284
- };
3474
+ init_agents();
3285
3475
  });
3286
3476
 
3287
3477
  // node_modules/commander/esm.mjs
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmJtC,wBAAgB,WAAW,IAAI,QAAQ,CAYtC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAcf"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6LtC,wBAAgB,WAAW,IAAI,QAAQ,CAYtC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAcf"}
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxes.d.ts","sourceRoot":"","sources":["../../src/db/sandboxes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAKxB,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAgBrD;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CA8BhE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAY9C;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,EAAE,CAwBZ;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CACd,IAAI,CACF,OAAO,EACL,QAAQ,GACR,qBAAqB,GACrB,MAAM,GACN,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,GACV,kBAAkB,CACrB,CACF,GACA,OAAO,CAuDT;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAO9C"}
1
+ {"version":3,"file":"sandboxes.d.ts","sourceRoot":"","sources":["../../src/db/sandboxes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAKxB,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAkBrD;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAkChE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAY9C;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,EAAE,CAwBZ;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CACd,IAAI,CACF,OAAO,EACL,QAAQ,GACR,qBAAqB,GACrB,MAAM,GACN,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,GACV,kBAAkB,CACrB,CACF,GACA,OAAO,CAuDT;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAO9C"}
@@ -0,0 +1,7 @@
1
+ import type { Template, CreateTemplateInput } from "../types/index.js";
2
+ export declare function createTemplate(input: CreateTemplateInput): Template;
3
+ export declare function getTemplate(id: string): Template;
4
+ export declare function getTemplateByName(name: string): Template | null;
5
+ export declare function listTemplates(): Template[];
6
+ export declare function deleteTemplate(id: string): void;
7
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/db/templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAe,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAiBpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,QAAQ,CAanE;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAOhD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAI/D;AAED,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAI1C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK/C"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,11 @@ export { addEvent, listEvents } from "./db/events.js";
6
6
  export { registerAgent, getAgent, getAgentByName, listAgents, deleteAgent } from "./db/agents.js";
7
7
  export { createProject, getProject, getProjectByPath, listProjects, ensureProject, deleteProject } from "./db/projects.js";
8
8
  export { createWebhook, getWebhook, listWebhooks, deleteWebhook } from "./db/webhooks.js";
9
+ export { createTemplate, getTemplate, getTemplateByName, listTemplates, deleteTemplate } from "./db/templates.js";
9
10
  export { loadConfig, saveConfig, getDefaultProvider, getDefaultTimeout, getDefaultImage, getProviderApiKey, setConfigValue, getConfigValue } from "./lib/config.js";
10
11
  export { getProvider } from "./providers/index.js";
11
12
  export type { SandboxProvider, ProviderSandbox, CreateSandboxOpts, ExecOptions } from "./providers/types.js";
12
13
  export { createStreamCollector, addStreamListener, emitLifecycleEvent } from "./lib/stream.js";
14
+ export { getAgentDriver, listAgentDrivers } from "./lib/agents/index.js";
15
+ export type { AgentDriver } from "./lib/agents/types.js";
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG1F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpK,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG7G,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGlH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpK,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG7G,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}