@cogitator-ai/sandbox 0.2.29 → 0.3.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.
@@ -2,8 +2,7 @@
2
2
  * WASM sandbox executor - isolated execution via Extism
3
3
  *
4
4
  * Provides fast, memory-safe execution of WASM modules.
5
- * Cold start: 1-10ms (vs Docker 1-5s)
6
- * Memory: 1-10MB per plugin (vs Docker 50-200MB)
5
+ * Every plugin runs in its own worker thread so timeouts can terminate runaway modules.
7
6
  */
8
7
  import { BaseSandboxExecutor } from './base.js';
9
8
  import { readFile } from 'node:fs/promises';
@@ -13,12 +12,15 @@ const DEFAULT_TIMEOUT = 30_000;
13
12
  const DEFAULT_FUNCTION = 'run';
14
13
  const MAX_OUTPUT_SIZE = 50_000;
15
14
  const DEFAULT_CACHE_SIZE = 10;
15
+ const DEFAULT_MEMORY_PAGES = 256;
16
16
  export class WasmSandboxExecutor extends BaseSandboxExecutor {
17
17
  type = 'wasm';
18
18
  createPlugin;
19
- pluginCache = new Map();
19
+ idlePlugins = new Map();
20
+ activePlugins = new Set();
21
+ idleCount = 0;
22
+ generation = 0;
20
23
  options;
21
- cacheOrder = [];
22
24
  constructor(options = {}) {
23
25
  super();
24
26
  this.options = options;
@@ -34,16 +36,12 @@ export class WasmSandboxExecutor extends BaseSandboxExecutor {
34
36
  }
35
37
  }
36
38
  async disconnect() {
37
- for (const [key, plugin] of this.pluginCache.entries()) {
38
- try {
39
- await plugin.close();
40
- }
41
- catch (error) {
42
- console.warn(`[wasm] Failed to close plugin ${key}:`, error instanceof Error ? error.message : String(error));
43
- }
44
- }
45
- this.pluginCache.clear();
46
- this.cacheOrder = [];
39
+ this.generation++;
40
+ const plugins = [...this.activePlugins, ...[...this.idlePlugins.values()].flat()];
41
+ this.idlePlugins.clear();
42
+ this.activePlugins.clear();
43
+ this.idleCount = 0;
44
+ await Promise.all(plugins.map((plugin) => this.closePlugin(plugin)));
47
45
  return this.success(undefined);
48
46
  }
49
47
  async isAvailable() {
@@ -59,69 +57,110 @@ export class WasmSandboxExecutor extends BaseSandboxExecutor {
59
57
  }
60
58
  const startTime = Date.now();
61
59
  const timeout = request.timeout ?? config.timeout ?? DEFAULT_TIMEOUT;
62
- const wasmModule = config.wasmModule;
63
- const functionName = config.wasmFunction ?? DEFAULT_FUNCTION;
60
+ const wasmModule = config.wasmModule ?? this.options.wasm?.wasmModule;
61
+ const functionName = config.wasmFunction ?? this.options.wasm?.functionName ?? DEFAULT_FUNCTION;
64
62
  if (!wasmModule) {
65
63
  return this.failure('No WASM module specified in config');
66
64
  }
65
+ const allowedHosts = config.network?.mode === 'none' ? [] : [...(config.network?.allowedHosts ?? [])].sort();
66
+ const useWasi = config.wasi ?? this.options.wasm?.wasi ?? false;
67
+ const spec = {
68
+ key: JSON.stringify([wasmModule, useWasi, allowedHosts]),
69
+ module: wasmModule,
70
+ useWasi,
71
+ allowedHosts,
72
+ };
73
+ let plugin;
67
74
  try {
68
- const plugin = await this.getOrCreatePlugin(wasmModule, config.wasi ?? false);
69
- const input = this.buildInput(request);
70
- const result = await this.executeWithTimeout(plugin, functionName, input, timeout);
71
- return this.success({
72
- stdout: result.stdout.slice(0, MAX_OUTPUT_SIZE),
73
- stderr: result.stderr.slice(0, MAX_OUTPUT_SIZE),
74
- exitCode: result.exitCode,
75
- timedOut: result.timedOut,
76
- duration: Date.now() - startTime,
77
- });
75
+ plugin = await this.acquire(spec);
78
76
  }
79
77
  catch (error) {
80
- return this.failure(`WASM execution failed: ${error instanceof Error ? error.message : String(error)}`);
78
+ return this.failure(`WASM execution failed: ${describeError(error)}`);
79
+ }
80
+ const generation = this.generation;
81
+ const outcome = await this.callWithTimeout(plugin, functionName, this.buildInput(request), timeout);
82
+ if (outcome.timedOut || generation !== this.generation) {
83
+ this.activePlugins.delete(plugin);
84
+ await this.closePlugin(plugin);
85
+ }
86
+ else {
87
+ await this.release(spec.key, plugin);
88
+ }
89
+ return this.success({
90
+ stdout: outcome.stdout.slice(0, MAX_OUTPUT_SIZE),
91
+ stderr: outcome.stderr.slice(0, MAX_OUTPUT_SIZE),
92
+ exitCode: outcome.exitCode,
93
+ timedOut: outcome.timedOut,
94
+ duration: Date.now() - startTime,
95
+ });
96
+ }
97
+ async acquire(spec) {
98
+ const idle = this.idlePlugins.get(spec.key);
99
+ const reused = idle?.pop();
100
+ if (reused) {
101
+ this.idleCount--;
102
+ if (idle?.length === 0)
103
+ this.idlePlugins.delete(spec.key);
104
+ this.activePlugins.add(reused);
105
+ return reused;
106
+ }
107
+ const manifest = {
108
+ ...(await this.loadManifest(spec.module)),
109
+ memory: { maxPages: this.options.wasm?.memoryPages ?? DEFAULT_MEMORY_PAGES },
110
+ };
111
+ const plugin = await this.createPlugin(manifest, {
112
+ useWasi: spec.useWasi,
113
+ runInWorker: true,
114
+ allowedHosts: spec.allowedHosts,
115
+ });
116
+ this.activePlugins.add(plugin);
117
+ return plugin;
118
+ }
119
+ async release(key, plugin) {
120
+ this.activePlugins.delete(plugin);
121
+ const idle = this.idlePlugins.get(key) ?? [];
122
+ this.idlePlugins.delete(key);
123
+ idle.push(plugin);
124
+ this.idlePlugins.set(key, idle);
125
+ this.idleCount++;
126
+ const maxSize = Math.max(0, this.options.wasm?.cacheSize ?? DEFAULT_CACHE_SIZE);
127
+ while (this.idleCount > maxSize) {
128
+ const oldest = this.idlePlugins.keys().next();
129
+ if (oldest.done)
130
+ break;
131
+ const plugins = this.idlePlugins.get(oldest.value) ?? [];
132
+ const evicted = plugins.shift();
133
+ if (plugins.length === 0)
134
+ this.idlePlugins.delete(oldest.value);
135
+ if (!evicted)
136
+ continue;
137
+ this.idleCount--;
138
+ await this.closePlugin(evicted);
81
139
  }
82
140
  }
83
- async getOrCreatePlugin(wasmModule, useWasi) {
84
- const cacheKey = `${wasmModule}:${useWasi}`;
85
- if (this.pluginCache.has(cacheKey)) {
86
- return this.pluginCache.get(cacheKey);
87
- }
88
- const source = await this.loadWasmSource(wasmModule);
89
- const plugin = await this.createPlugin(source, { useWasi });
90
- this.pluginCache.set(cacheKey, plugin);
91
- this.cacheOrder.push(cacheKey);
92
- const maxSize = this.options.wasm?.cacheSize ?? DEFAULT_CACHE_SIZE;
93
- while (this.cacheOrder.length > maxSize) {
94
- const oldKey = this.cacheOrder.shift();
95
- const oldPlugin = this.pluginCache.get(oldKey);
96
- if (oldPlugin) {
97
- try {
98
- await oldPlugin.close();
99
- }
100
- catch (error) {
101
- console.warn(`[wasm] Failed to close cached plugin ${oldKey}:`, error instanceof Error ? error.message : String(error));
102
- }
103
- finally {
104
- this.pluginCache.delete(oldKey);
105
- }
106
- }
141
+ async closePlugin(plugin) {
142
+ try {
143
+ await plugin.close();
144
+ }
145
+ catch (error) {
146
+ console.warn('[wasm] Failed to close plugin:', error instanceof Error ? error.message : String(error));
107
147
  }
108
- return plugin;
109
148
  }
110
- async loadWasmSource(wasmModule) {
149
+ async loadManifest(wasmModule) {
111
150
  if (wasmModule.startsWith('http://') || wasmModule.startsWith('https://')) {
112
151
  return { wasm: [{ url: wasmModule }] };
113
152
  }
114
153
  if (existsSync(wasmModule)) {
115
- return await readFile(wasmModule);
154
+ return { wasm: [{ data: new Uint8Array(await readFile(wasmModule)) }] };
116
155
  }
156
+ let resolved;
117
157
  try {
118
- const req = createRequire(import.meta.url);
119
- const resolved = req.resolve(wasmModule);
120
- return await readFile(resolved);
158
+ resolved = createRequire(import.meta.url).resolve(wasmModule);
121
159
  }
122
160
  catch {
123
161
  throw new Error(`WASM module not found: ${wasmModule}`);
124
162
  }
163
+ return { wasm: [{ data: new Uint8Array(await readFile(resolved)) }] };
125
164
  }
126
165
  buildInput(request) {
127
166
  if (request.stdin) {
@@ -133,56 +172,67 @@ export class WasmSandboxExecutor extends BaseSandboxExecutor {
133
172
  env: request.env ?? {},
134
173
  });
135
174
  }
136
- async executeWithTimeout(plugin, functionName, input, timeoutMs) {
137
- const executePromise = (async () => {
175
+ async callWithTimeout(plugin, functionName, input, timeoutMs) {
176
+ const call = (async () => {
138
177
  try {
139
178
  const result = await plugin.call(functionName, input);
140
- const output = new TextDecoder().decode(result);
141
- try {
142
- const parsed = JSON.parse(output);
143
- return {
144
- stdout: typeof parsed.stdout === 'string' ? parsed.stdout : output,
145
- stderr: typeof parsed.stderr === 'string' ? parsed.stderr : '',
146
- exitCode: typeof parsed.exitCode === 'number' ? parsed.exitCode : 0,
147
- timedOut: false,
148
- };
149
- }
150
- catch {
151
- return {
152
- stdout: output,
153
- stderr: '',
154
- exitCode: 0,
155
- timedOut: false,
156
- };
157
- }
179
+ return parseOutput(result ? new TextDecoder().decode(result) : '');
158
180
  }
159
181
  catch (error) {
160
182
  return {
161
183
  stdout: '',
162
- stderr: error instanceof Error ? error.message : String(error),
184
+ stderr: describeError(error),
163
185
  exitCode: 1,
164
186
  timedOut: false,
165
187
  };
166
188
  }
167
189
  })();
168
- let timer = null;
169
- const timeoutPromise = new Promise((resolve) => {
190
+ let timer;
191
+ const timeout = new Promise((resolve) => {
170
192
  timer = setTimeout(() => {
171
- resolve({
172
- stdout: '',
173
- stderr: 'Execution timed out',
174
- exitCode: 124,
175
- timedOut: true,
176
- });
193
+ resolve({ stdout: '', stderr: 'Execution timed out', exitCode: 124, timedOut: true });
177
194
  }, timeoutMs);
178
195
  });
179
196
  try {
180
- return await Promise.race([executePromise, timeoutPromise]);
197
+ return await Promise.race([call, timeout]);
181
198
  }
182
199
  finally {
183
- if (timer)
184
- clearTimeout(timer);
200
+ clearTimeout(timer);
201
+ }
202
+ }
203
+ }
204
+ function describeError(error) {
205
+ if (error instanceof Error)
206
+ return error.message;
207
+ if (error && typeof error === 'object') {
208
+ const message = error.message;
209
+ if (typeof message === 'string')
210
+ return message;
211
+ try {
212
+ return JSON.stringify(error);
185
213
  }
214
+ catch {
215
+ return String(error);
216
+ }
217
+ }
218
+ return String(error);
219
+ }
220
+ function parseOutput(output) {
221
+ try {
222
+ const parsed = JSON.parse(output);
223
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
224
+ const record = parsed;
225
+ return {
226
+ stdout: typeof record.stdout === 'string' ? record.stdout : output,
227
+ stderr: typeof record.stderr === 'string' ? record.stderr : '',
228
+ exitCode: typeof record.exitCode === 'number' ? record.exitCode : 0,
229
+ timedOut: false,
230
+ };
231
+ }
232
+ }
233
+ catch {
234
+ return { stdout: output, stderr: '', exitCode: 0, timedOut: false };
186
235
  }
236
+ return { stdout: output, stderr: '', exitCode: 0, timedOut: false };
187
237
  }
188
238
  //# sourceMappingURL=wasm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/executors/wasm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/executors/wasm.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @cogitator-ai/sandbox
3
3
  *
4
- * Docker-based sandbox execution for Cogitator agents
4
+ * Docker, WASM and native sandbox execution for Cogitator agents
5
5
  */
6
6
  export { SandboxManager } from './sandbox-manager.js';
7
7
  export { BaseSandboxExecutor, NativeSandboxExecutor, DockerSandboxExecutor, type DockerExecutorOptions, WasmSandboxExecutor, type WasmExecutorOptions, } from './executors/index.js';
8
- export { ContainerPool, type ContainerPoolOptions, type ContainerCreateOptions, } from './pool/index.js';
8
+ export { ContainerPool, SANDBOX_CONTAINER_LABEL, type ContainerPoolOptions, type ContainerCreateOptions, } from './pool/index.js';
9
9
  export { parseMemory, cpusToNanoCpus } from './utils/index.js';
10
- export type { SandboxType, SandboxConfig, SandboxResourceLimits, SandboxNetworkConfig, SandboxMount, SandboxExecutionRequest, SandboxExecutionResult, SandboxManagerConfig, SandboxPoolConfig, SandboxDockerConfig, SandboxResult, } from '@cogitator-ai/types';
10
+ export type { SandboxType, SandboxConfig, SandboxResourceLimits, SandboxNetworkConfig, SandboxMount, SandboxExecutionRequest, SandboxExecutionResult, SandboxManagerConfig, SandboxPoolConfig, SandboxDockerConfig, SandboxWasmConfig, SandboxResult, } from '@cogitator-ai/types';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5D,YAAY,EACV,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5D,YAAY,EACV,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * @cogitator-ai/sandbox
3
3
  *
4
- * Docker-based sandbox execution for Cogitator agents
4
+ * Docker, WASM and native sandbox execution for Cogitator agents
5
5
  */
6
6
  export { SandboxManager } from './sandbox-manager.js';
7
7
  export { BaseSandboxExecutor, NativeSandboxExecutor, DockerSandboxExecutor, WasmSandboxExecutor, } from './executors/index.js';
8
- export { ContainerPool, } from './pool/index.js';
8
+ export { ContainerPool, SANDBOX_CONTAINER_LABEL, } from './pool/index.js';
9
9
  export { parseMemory, cpusToNanoCpus } from './utils/index.js';
10
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,GAGd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -9,6 +9,7 @@ export interface ContainerCreateOptions {
9
9
  cpuShares?: number;
10
10
  pidsLimit?: number;
11
11
  networkMode?: string;
12
+ dns?: string[];
12
13
  mounts?: SandboxMount[];
13
14
  user?: string;
14
15
  }
@@ -16,6 +17,7 @@ export interface ContainerPoolOptions {
16
17
  maxSize?: number;
17
18
  idleTimeoutMs?: number;
18
19
  }
20
+ export declare const SANDBOX_CONTAINER_LABEL = "ai.cogitator.sandbox";
19
21
  export declare class ContainerPool {
20
22
  private docker;
21
23
  private containers;
@@ -1 +1 @@
1
- {"version":3,"file":"container-pool.d.ts","sourceRoot":"","sources":["../../src/pool/container-pool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAS/D,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAiC;gBAE7C,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAQxD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuBjF,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB7E,eAAe;YA0Cf,gBAAgB;YAmBhB,OAAO;IAgBf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAQlC"}
1
+ {"version":3,"file":"container-pool.d.ts","sourceRoot":"","sources":["../../src/pool/container-pool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAU/D,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAgB9D,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAiC;gBAE7C,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IASxD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBjF,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB7E,eAAe;YAiDf,gBAAgB;YAmBhB,OAAO;IAgBf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAQlC"}
@@ -1,6 +1,21 @@
1
1
  /**
2
2
  * Container pool for reusing Docker containers
3
3
  */
4
+ import { cpusToNanoCpus } from '../utils/parse-resources.js';
5
+ export const SANDBOX_CONTAINER_LABEL = 'ai.cogitator.sandbox';
6
+ function poolKey(image, options) {
7
+ return JSON.stringify([
8
+ image,
9
+ options.memory ?? null,
10
+ options.cpus ?? null,
11
+ options.cpuShares ?? null,
12
+ options.pidsLimit ?? null,
13
+ options.networkMode ?? 'none',
14
+ options.dns ?? [],
15
+ (options.mounts ?? []).map((m) => [m.source, m.target, m.readOnly ?? false]),
16
+ options.user ?? null,
17
+ ]);
18
+ }
4
19
  export class ContainerPool {
5
20
  docker;
6
21
  containers = [];
@@ -12,9 +27,11 @@ export class ContainerPool {
12
27
  this.maxSize = options.maxSize ?? 5;
13
28
  this.idleTimeoutMs = options.idleTimeoutMs ?? 60_000;
14
29
  this.cleanupInterval = setInterval(() => void this.cleanup(), this.idleTimeoutMs / 2);
30
+ this.cleanupInterval.unref?.();
15
31
  }
16
32
  async acquire(image, options) {
17
- const available = this.containers.find((c) => !c.inUse && c.image === image);
33
+ const key = poolKey(image, options);
34
+ const available = this.containers.find((c) => !c.inUse && c.key === key);
18
35
  if (available) {
19
36
  available.inUse = true;
20
37
  available.lastUsed = Date.now();
@@ -24,7 +41,7 @@ export class ContainerPool {
24
41
  if (this.containers.length < this.maxSize) {
25
42
  this.containers.push({
26
43
  container,
27
- image,
44
+ key,
28
45
  inUse: true,
29
46
  lastUsed: Date.now(),
30
47
  });
@@ -71,12 +88,14 @@ export class ContainerPool {
71
88
  Image: image,
72
89
  Cmd: ['sleep', 'infinity'],
73
90
  User: options.user,
91
+ Labels: { [SANDBOX_CONTAINER_LABEL]: 'true' },
74
92
  HostConfig: {
75
93
  Memory: options.memory,
76
- NanoCpus: options.cpus ? Math.floor(options.cpus * 1e9) : undefined,
94
+ NanoCpus: options.cpus ? cpusToNanoCpus(options.cpus) : undefined,
77
95
  CpuShares: options.cpuShares,
78
96
  PidsLimit: options.pidsLimit ?? 100,
79
97
  NetworkMode: options.networkMode ?? 'none',
98
+ Dns: options.dns?.length ? options.dns : undefined,
80
99
  Binds: binds,
81
100
  SecurityOpt: ['no-new-privileges'],
82
101
  CapDrop: ['ALL'],
@@ -84,7 +103,13 @@ export class ContainerPool {
84
103
  },
85
104
  WorkingDir: '/workspace',
86
105
  });
87
- await container.start();
106
+ try {
107
+ await container.start();
108
+ }
109
+ catch (error) {
110
+ await this.destroyContainer(container);
111
+ throw error;
112
+ }
88
113
  return container;
89
114
  }
90
115
  async destroyContainer(container) {
@@ -1 +1 @@
1
- {"version":3,"file":"container-pool.js","sourceRoot":"","sources":["../../src/pool/container-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container-pool.js","sourceRoot":"","sources":["../../src/pool/container-pool.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@ import type { SandboxConfig, SandboxExecutionRequest, SandboxExecutionResult, Sa
5
5
  export declare class SandboxManager {
6
6
  private executors;
7
7
  private config;
8
- private initialized;
8
+ private initPromise?;
9
9
  constructor(config?: SandboxManagerConfig);
10
10
  initialize(): Promise<void>;
11
+ private initializeExecutors;
11
12
  execute(request: SandboxExecutionRequest, config: SandboxConfig): Promise<SandboxResult<SandboxExecutionResult>>;
12
13
  isDockerAvailable(): Promise<boolean>;
13
14
  isWasmAvailable(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-manager.d.ts","sourceRoot":"","sources":["../src/sandbox-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAM7B,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,GAAE,oBAAyB;IAIvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3B,OAAO,CACX,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAwC3C,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAMnC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
1
+ {"version":3,"file":"sandbox-manager.d.ts","sourceRoot":"","sources":["../src/sandbox-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAM7B,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAgB;gBAExB,MAAM,GAAE,oBAAyB;IAI7C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKb,mBAAmB;IAqC3B,OAAO,CACX,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IA+B3C,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAMnC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAUhC"}
@@ -7,13 +7,15 @@ import { WasmSandboxExecutor } from './executors/wasm.js';
7
7
  export class SandboxManager {
8
8
  executors = new Map();
9
9
  config;
10
- initialized = false;
10
+ initPromise;
11
11
  constructor(config = {}) {
12
12
  this.config = config;
13
13
  }
14
- async initialize() {
15
- if (this.initialized)
16
- return;
14
+ initialize() {
15
+ this.initPromise ??= this.initializeExecutors();
16
+ return this.initPromise;
17
+ }
18
+ async initializeExecutors() {
17
19
  const native = new NativeSandboxExecutor();
18
20
  await native.connect();
19
21
  this.executors.set('native', native);
@@ -42,34 +44,9 @@ export class SandboxManager {
42
44
  catch (error) {
43
45
  console.warn('[sandbox] WASM initialization failed:', error instanceof Error ? error.message : String(error));
44
46
  }
45
- this.initialized = true;
46
47
  }
47
48
  async execute(request, config) {
48
49
  await this.initialize();
49
- const type = config.type;
50
- const executor = this.executors.get(type);
51
- if (!executor) {
52
- if (type === 'wasm') {
53
- console.warn('[sandbox] WASM unavailable, falling back to Docker');
54
- const dockerExecutor = this.executors.get('docker');
55
- if (dockerExecutor) {
56
- return dockerExecutor.execute(request, { ...config, type: 'docker' });
57
- }
58
- console.warn('[sandbox] Docker also unavailable, falling back to native execution');
59
- const nativeExecutor = this.executors.get('native');
60
- if (nativeExecutor) {
61
- return nativeExecutor.execute(request, { ...config, type: 'native' });
62
- }
63
- }
64
- if (type === 'docker') {
65
- console.warn('[sandbox] Docker unavailable, falling back to native execution');
66
- const nativeExecutor = this.executors.get('native');
67
- if (nativeExecutor) {
68
- return nativeExecutor.execute(request, { ...config, type: 'native' });
69
- }
70
- }
71
- return { success: false, error: `Sandbox type '${type}' not available` };
72
- }
73
50
  const mergedConfig = {
74
51
  ...this.config.defaults,
75
52
  ...config,
@@ -77,7 +54,20 @@ export class SandboxManager {
77
54
  network: { ...this.config.defaults?.network, ...config.network },
78
55
  env: { ...this.config.defaults?.env, ...config.env },
79
56
  };
80
- return executor.execute(request, mergedConfig);
57
+ const type = mergedConfig.type;
58
+ const executor = this.executors.get(type);
59
+ if (executor) {
60
+ return executor.execute(request, mergedConfig);
61
+ }
62
+ const fallbackChain = type === 'wasm' ? ['docker', 'native'] : type === 'docker' ? ['native'] : [];
63
+ for (const fallback of fallbackChain) {
64
+ const fallbackExecutor = this.executors.get(fallback);
65
+ if (fallbackExecutor) {
66
+ console.warn(`[sandbox] ${type} unavailable, falling back to ${fallback} execution`);
67
+ return fallbackExecutor.execute(request, { ...mergedConfig, type: fallback });
68
+ }
69
+ }
70
+ return { success: false, error: `Sandbox type '${type}' not available` };
81
71
  }
82
72
  async isDockerAvailable() {
83
73
  await this.initialize();
@@ -90,11 +80,14 @@ export class SandboxManager {
90
80
  return wasm ? wasm.isAvailable() : false;
91
81
  }
92
82
  async shutdown() {
83
+ const pending = this.initPromise;
84
+ this.initPromise = undefined;
85
+ if (pending)
86
+ await pending.catch(() => undefined);
93
87
  for (const executor of this.executors.values()) {
94
88
  await executor.disconnect();
95
89
  }
96
90
  this.executors.clear();
97
- this.initialized = false;
98
91
  }
99
92
  }
100
93
  //# sourceMappingURL=sandbox-manager.js.map