@agentsh/secure-sandbox 0.1.6 → 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/README.md +39 -12
- package/dist/adapters/blaxel.d.ts +1 -1
- package/dist/adapters/cloudflare.d.ts +1 -1
- package/dist/adapters/daytona.d.ts +1 -1
- package/dist/adapters/e2b.d.ts +1 -1
- package/dist/adapters/index.d.ts +2 -2
- package/dist/adapters/index.js +6 -1
- package/dist/adapters/vercel.d.ts +1 -1
- package/dist/chunk-4FJHYLAB.js +251 -0
- package/dist/chunk-4FJHYLAB.js.map +1 -0
- package/dist/chunk-5IG6ABIZ.js +268 -0
- package/dist/chunk-5IG6ABIZ.js.map +1 -0
- package/dist/{chunk-GFPHTJLU.js → chunk-LNDICGZU.js} +3 -243
- package/dist/chunk-LNDICGZU.js.map +1 -0
- package/dist/index-TyzWAIUD.d.ts +60 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +115 -43
- package/dist/index.js.map +1 -1
- package/dist/policies/index.d.ts +1 -1
- package/dist/policies/index.js +5 -3
- package/dist/testing/index.d.ts +1 -1
- package/dist/{types-S_fIEFHD.d.ts → types-DFMGk2GV.d.ts} +28 -1
- package/package.json +9 -1
- package/dist/chunk-GFPHTJLU.js.map +0 -1
- package/dist/chunk-KXCR2ZML.js +0 -129
- package/dist/chunk-KXCR2ZML.js.map +0 -1
- package/dist/index-D6DG8Lpi.d.ts +0 -28
- package/dist/{index-Nmlhw9oj.d.ts → index-CedRtlB6.d.ts} +22 -22
package/dist/chunk-KXCR2ZML.js
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
blaxel
|
|
3
|
-
} from "./chunk-UYEAO27E.js";
|
|
4
|
-
import {
|
|
5
|
-
cloudflare
|
|
6
|
-
} from "./chunk-LMN3KM53.js";
|
|
7
|
-
import {
|
|
8
|
-
daytona
|
|
9
|
-
} from "./chunk-45FKFVMC.js";
|
|
10
|
-
import {
|
|
11
|
-
e2b
|
|
12
|
-
} from "./chunk-2P37YGN7.js";
|
|
13
|
-
import {
|
|
14
|
-
envPrefix,
|
|
15
|
-
shellEscape
|
|
16
|
-
} from "./chunk-OANLKSOD.js";
|
|
17
|
-
import {
|
|
18
|
-
vercel
|
|
19
|
-
} from "./chunk-JY5ERJTX.js";
|
|
20
|
-
import {
|
|
21
|
-
__export
|
|
22
|
-
} from "./chunk-PZ5AY32C.js";
|
|
23
|
-
|
|
24
|
-
// src/adapters/index.ts
|
|
25
|
-
var adapters_exports = {};
|
|
26
|
-
__export(adapters_exports, {
|
|
27
|
-
blaxel: () => blaxel,
|
|
28
|
-
cloudflare: () => cloudflare,
|
|
29
|
-
daytona: () => daytona,
|
|
30
|
-
e2b: () => e2b,
|
|
31
|
-
sprites: () => sprites,
|
|
32
|
-
spritesDefaults: () => spritesDefaults,
|
|
33
|
-
vercel: () => vercel
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
// src/adapters/sprites.ts
|
|
37
|
-
function sprites(sprite) {
|
|
38
|
-
function sh(cmd, opts) {
|
|
39
|
-
if (opts) return sprite.execFile("sh", ["-c", cmd], opts);
|
|
40
|
-
return sprite.execFile("sh", ["-c", cmd]);
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
async exec(cmd, args, opts) {
|
|
44
|
-
const command = `${envPrefix(opts?.env)}${shellEscape(cmd, args)}`;
|
|
45
|
-
const fullCmd = opts?.sudo ? `sudo ${command}` : command;
|
|
46
|
-
try {
|
|
47
|
-
if (opts?.detached) {
|
|
48
|
-
sh(`nohup ${fullCmd} > /dev/null 2>&1 &`).catch(() => {
|
|
49
|
-
});
|
|
50
|
-
return { stdout: "", stderr: "", exitCode: 0 };
|
|
51
|
-
}
|
|
52
|
-
const result = await sh(fullCmd, { cwd: opts?.cwd });
|
|
53
|
-
return {
|
|
54
|
-
stdout: result.stdout ?? "",
|
|
55
|
-
stderr: result.stderr ?? "",
|
|
56
|
-
exitCode: 0
|
|
57
|
-
};
|
|
58
|
-
} catch (err) {
|
|
59
|
-
return {
|
|
60
|
-
stdout: err.stdout ?? "",
|
|
61
|
-
stderr: err.stderr ?? err.message ?? "",
|
|
62
|
-
exitCode: err.exitCode ?? err.code ?? 1
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
async writeFile(path, content) {
|
|
67
|
-
const buf = Buffer.isBuffer(content) ? content : Buffer.from(content);
|
|
68
|
-
const b64 = buf.toString("base64");
|
|
69
|
-
try {
|
|
70
|
-
await sh(`printf '%s' '${b64}' | base64 -d > '${path.replace(/'/g, "'\\''")}'`);
|
|
71
|
-
} catch (err) {
|
|
72
|
-
throw new Error(`writeFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ""}`);
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
async readFile(path) {
|
|
76
|
-
try {
|
|
77
|
-
const result = await sh(`cat '${path.replace(/'/g, "'\\''")}'`);
|
|
78
|
-
return result.stdout ?? "";
|
|
79
|
-
} catch (err) {
|
|
80
|
-
throw new Error(`readFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ""}`);
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
async stop() {
|
|
84
|
-
await sprite.delete();
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
function spritesDefaults() {
|
|
89
|
-
const serverConfig = {
|
|
90
|
-
grpc: { addr: "0.0.0.0:50051" },
|
|
91
|
-
logging: { level: "info", format: "json", output: "stdout" },
|
|
92
|
-
sessions: {
|
|
93
|
-
defaultTimeout: "30m",
|
|
94
|
-
idleTimeout: "10m",
|
|
95
|
-
cleanupInterval: "5m"
|
|
96
|
-
},
|
|
97
|
-
audit: { enabled: true, sqlitePath: "/var/lib/agentsh/audit.db" },
|
|
98
|
-
sandboxLimits: { maxMemoryMb: 512, maxCpuPercent: 90, maxProcesses: 100 },
|
|
99
|
-
fuse: { deferred: true },
|
|
100
|
-
networkIntercept: { interceptMode: "tproxy", proxyListenAddr: "127.0.0.1:8888" },
|
|
101
|
-
seccompDetails: {
|
|
102
|
-
execve: true,
|
|
103
|
-
fileMonitor: { enabled: true, enforceWithoutFuse: true }
|
|
104
|
-
},
|
|
105
|
-
cgroups: { enabled: true },
|
|
106
|
-
unixSockets: { enabled: true },
|
|
107
|
-
proxy: { mode: "mitm", port: 8080 },
|
|
108
|
-
dlp: {
|
|
109
|
-
mode: "redact",
|
|
110
|
-
patterns: { credit_card: true, ssn: true, api_key: true }
|
|
111
|
-
},
|
|
112
|
-
approvals: { enabled: false },
|
|
113
|
-
metrics: { enabled: true, path: "/metrics" },
|
|
114
|
-
health: { path: "/healthz", readinessPath: "/readyz" },
|
|
115
|
-
development: { disableAuth: false, verboseErrors: false }
|
|
116
|
-
};
|
|
117
|
-
return {
|
|
118
|
-
installStrategy: "preinstalled",
|
|
119
|
-
realPaths: true,
|
|
120
|
-
serverConfig
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export {
|
|
125
|
-
sprites,
|
|
126
|
-
spritesDefaults,
|
|
127
|
-
adapters_exports
|
|
128
|
-
};
|
|
129
|
-
//# sourceMappingURL=chunk-KXCR2ZML.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/index.ts","../src/adapters/sprites.ts"],"sourcesContent":["export { vercel } from './vercel.js';\nexport { e2b } from './e2b.js';\nexport { daytona } from './daytona.js';\nexport { cloudflare } from './cloudflare.js';\nexport { blaxel } from './blaxel.js';\nexport { sprites, spritesDefaults } from './sprites.js';\n","import type { SandboxAdapter, SecureConfig } from '../core/types.js';\nimport type { ServerConfigOpts } from '../core/config.js';\nimport { shellEscape, envPrefix } from '../core/shell.js';\n\nexport function sprites(sprite: any): SandboxAdapter {\n // sprite.exec() does a naive split(/\\s+/) — no shell parsing.\n // Use sprite.execFile('sh', ['-c', cmd]) for shell features (env, pipes, quotes).\n function sh(cmd: string, opts?: Record<string, unknown>) {\n if (opts) return sprite.execFile('sh', ['-c', cmd], opts);\n return sprite.execFile('sh', ['-c', cmd]);\n }\n\n return {\n async exec(cmd, args, opts) {\n const command = `${envPrefix(opts?.env)}${shellEscape(cmd, args)}`;\n const fullCmd = opts?.sudo ? `sudo ${command}` : command;\n\n try {\n if (opts?.detached) {\n sh(`nohup ${fullCmd} > /dev/null 2>&1 &`).catch(() => {});\n return { stdout: '', stderr: '', exitCode: 0 };\n }\n\n const result = await sh(fullCmd, { cwd: opts?.cwd });\n return {\n stdout: result.stdout ?? '',\n stderr: result.stderr ?? '',\n exitCode: 0,\n };\n } catch (err: any) {\n return {\n stdout: err.stdout ?? '',\n stderr: err.stderr ?? err.message ?? '',\n exitCode: err.exitCode ?? err.code ?? 1,\n };\n }\n },\n async writeFile(path, content) {\n const buf = Buffer.isBuffer(content) ? content : Buffer.from(content);\n const b64 = buf.toString('base64');\n try {\n await sh(`printf '%s' '${b64}' | base64 -d > '${path.replace(/'/g, \"'\\\\''\")}'`);\n } catch (err: any) {\n throw new Error(`writeFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ''}`);\n }\n },\n async readFile(path) {\n try {\n const result = await sh(`cat '${path.replace(/'/g, \"'\\\\''\")}'`);\n return result.stdout ?? '';\n } catch (err: any) {\n throw new Error(`readFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ''}`);\n }\n },\n async stop() {\n await sprite.delete();\n },\n };\n}\n\n/**\n * Returns Sprites-optimized defaults for SecureConfig.\n * Spread into your secureSandbox() call:\n *\n * secureSandbox(sprites(s), { ...spritesDefaults(), ...yourOverrides })\n */\nexport function spritesDefaults(): Partial<SecureConfig> {\n const serverConfig: Omit<ServerConfigOpts, 'watchtower' | 'realPaths' | 'threatFeeds' | 'packageChecks'> = {\n grpc: { addr: '0.0.0.0:50051' },\n logging: { level: 'info', format: 'json', output: 'stdout' },\n sessions: {\n defaultTimeout: '30m',\n idleTimeout: '10m',\n cleanupInterval: '5m',\n },\n audit: { enabled: true, sqlitePath: '/var/lib/agentsh/audit.db' },\n sandboxLimits: { maxMemoryMb: 512, maxCpuPercent: 90, maxProcesses: 100 },\n fuse: { deferred: true },\n networkIntercept: { interceptMode: 'tproxy', proxyListenAddr: '127.0.0.1:8888' },\n seccompDetails: {\n execve: true,\n fileMonitor: { enabled: true, enforceWithoutFuse: true },\n },\n cgroups: { enabled: true },\n unixSockets: { enabled: true },\n proxy: { mode: 'mitm', port: 8080 },\n dlp: {\n mode: 'redact',\n patterns: { credit_card: true, ssn: true, api_key: true },\n },\n approvals: { enabled: false },\n metrics: { enabled: true, path: '/metrics' },\n health: { path: '/healthz', readinessPath: '/readyz' },\n development: { disableAuth: false, verboseErrors: false },\n };\n\n return {\n installStrategy: 'preinstalled',\n realPaths: true,\n serverConfig,\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/index-D6DG8Lpi.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { vercel } from './adapters/vercel.js';
|
|
2
|
-
import { e2b } from './adapters/e2b.js';
|
|
3
|
-
import { daytona } from './adapters/daytona.js';
|
|
4
|
-
import { cloudflare } from './adapters/cloudflare.js';
|
|
5
|
-
import { blaxel } from './adapters/blaxel.js';
|
|
6
|
-
import { S as SandboxAdapter, a as SecureConfig } from './types-S_fIEFHD.js';
|
|
7
|
-
|
|
8
|
-
declare function sprites(sprite: any): SandboxAdapter;
|
|
9
|
-
/**
|
|
10
|
-
* Returns Sprites-optimized defaults for SecureConfig.
|
|
11
|
-
* Spread into your secureSandbox() call:
|
|
12
|
-
*
|
|
13
|
-
* secureSandbox(sprites(s), { ...spritesDefaults(), ...yourOverrides })
|
|
14
|
-
*/
|
|
15
|
-
declare function spritesDefaults(): Partial<SecureConfig>;
|
|
16
|
-
|
|
17
|
-
declare const index_blaxel: typeof blaxel;
|
|
18
|
-
declare const index_cloudflare: typeof cloudflare;
|
|
19
|
-
declare const index_daytona: typeof daytona;
|
|
20
|
-
declare const index_e2b: typeof e2b;
|
|
21
|
-
declare const index_sprites: typeof sprites;
|
|
22
|
-
declare const index_spritesDefaults: typeof spritesDefaults;
|
|
23
|
-
declare const index_vercel: typeof vercel;
|
|
24
|
-
declare namespace index {
|
|
25
|
-
export { index_blaxel as blaxel, index_cloudflare as cloudflare, index_daytona as daytona, index_e2b as e2b, index_sprites as sprites, index_spritesDefaults as spritesDefaults, index_vercel as vercel };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export { spritesDefaults as a, index as i, sprites as s };
|
|
@@ -363,17 +363,6 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
363
363
|
reason?: string | undefined;
|
|
364
364
|
}>, "many">>;
|
|
365
365
|
}, "strict", z.ZodTypeAny, {
|
|
366
|
-
commands?: ({
|
|
367
|
-
allow: string | string[];
|
|
368
|
-
} | {
|
|
369
|
-
deny: string | string[];
|
|
370
|
-
} | {
|
|
371
|
-
redirect: string | string[];
|
|
372
|
-
to: string | {
|
|
373
|
-
cmd: string;
|
|
374
|
-
args: string[];
|
|
375
|
-
};
|
|
376
|
-
})[] | undefined;
|
|
377
366
|
file?: ({
|
|
378
367
|
allow: string | string[];
|
|
379
368
|
ops?: ("read" | "write" | "create" | "delete")[] | undefined;
|
|
@@ -399,6 +388,17 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
399
388
|
redirect: string;
|
|
400
389
|
to: string;
|
|
401
390
|
})[] | undefined;
|
|
391
|
+
commands?: ({
|
|
392
|
+
allow: string | string[];
|
|
393
|
+
} | {
|
|
394
|
+
deny: string | string[];
|
|
395
|
+
} | {
|
|
396
|
+
redirect: string | string[];
|
|
397
|
+
to: string | {
|
|
398
|
+
cmd: string;
|
|
399
|
+
args: string[];
|
|
400
|
+
};
|
|
401
|
+
})[] | undefined;
|
|
402
402
|
env?: {
|
|
403
403
|
commands: string[];
|
|
404
404
|
deny?: string[] | undefined;
|
|
@@ -430,17 +430,6 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
430
430
|
reason?: string | undefined;
|
|
431
431
|
}[] | undefined;
|
|
432
432
|
}, {
|
|
433
|
-
commands?: ({
|
|
434
|
-
allow: string | string[];
|
|
435
|
-
} | {
|
|
436
|
-
deny: string | string[];
|
|
437
|
-
} | {
|
|
438
|
-
redirect: string | string[];
|
|
439
|
-
to: string | {
|
|
440
|
-
cmd: string;
|
|
441
|
-
args: string[];
|
|
442
|
-
};
|
|
443
|
-
})[] | undefined;
|
|
444
433
|
file?: ({
|
|
445
434
|
allow: string | string[];
|
|
446
435
|
ops?: ("read" | "write" | "create" | "delete")[] | undefined;
|
|
@@ -466,6 +455,17 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
466
455
|
redirect: string;
|
|
467
456
|
to: string;
|
|
468
457
|
})[] | undefined;
|
|
458
|
+
commands?: ({
|
|
459
|
+
allow: string | string[];
|
|
460
|
+
} | {
|
|
461
|
+
deny: string | string[];
|
|
462
|
+
} | {
|
|
463
|
+
redirect: string | string[];
|
|
464
|
+
to: string | {
|
|
465
|
+
cmd: string;
|
|
466
|
+
args: string[];
|
|
467
|
+
};
|
|
468
|
+
})[] | undefined;
|
|
469
469
|
env?: {
|
|
470
470
|
commands: string[];
|
|
471
471
|
deny?: string[] | undefined;
|