@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.
@@ -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":[]}
@@ -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;