atabey-shared 0.0.37 → 0.1.1-beta

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.
Files changed (80) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-identity.d.ts +34 -0
  3. package/dist/agent-identity.js +77 -0
  4. package/dist/agent-identity.js.map +1 -0
  5. package/dist/api-catalog.d.ts +57 -0
  6. package/dist/api-catalog.js +254 -0
  7. package/dist/api-catalog.js.map +1 -0
  8. package/dist/audit-chain.d.ts +32 -3
  9. package/dist/audit-chain.js +187 -10
  10. package/dist/audit-chain.js.map +1 -1
  11. package/dist/audit.d.ts +8 -0
  12. package/dist/audit.js +44 -7
  13. package/dist/audit.js.map +1 -1
  14. package/dist/constants.d.ts +7 -9
  15. package/dist/constants.js +14 -18
  16. package/dist/constants.js.map +1 -1
  17. package/dist/database.d.ts +1 -0
  18. package/dist/database.js +3 -0
  19. package/dist/database.js.map +1 -1
  20. package/dist/errors.d.ts +1 -1
  21. package/dist/errors.js +1 -1
  22. package/dist/file-lock.d.ts +5 -0
  23. package/dist/file-lock.js +20 -31
  24. package/dist/file-lock.js.map +1 -1
  25. package/dist/index.d.ts +9 -0
  26. package/dist/index.js +9 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/job-queue.d.ts +32 -9
  29. package/dist/job-queue.js +81 -8
  30. package/dist/job-queue.js.map +1 -1
  31. package/dist/logger.d.ts +1 -0
  32. package/dist/logger.js +33 -7
  33. package/dist/logger.js.map +1 -1
  34. package/dist/memory-prune.d.ts +18 -0
  35. package/dist/memory-prune.js +48 -0
  36. package/dist/memory-prune.js.map +1 -0
  37. package/dist/migrations.d.ts +69 -0
  38. package/dist/migrations.js +394 -0
  39. package/dist/migrations.js.map +1 -0
  40. package/dist/otel.d.ts +39 -0
  41. package/dist/otel.js +93 -0
  42. package/dist/otel.js.map +1 -0
  43. package/dist/outbound-http.d.ts +32 -0
  44. package/dist/outbound-http.js +88 -0
  45. package/dist/outbound-http.js.map +1 -0
  46. package/dist/pii.d.ts +1 -0
  47. package/dist/pii.js +82 -26
  48. package/dist/pii.js.map +1 -1
  49. package/dist/policy-gate.js +27 -3
  50. package/dist/policy-gate.js.map +1 -1
  51. package/dist/retention.d.ts +6 -1
  52. package/dist/retention.js +56 -9
  53. package/dist/retention.js.map +1 -1
  54. package/dist/sandbox-fs.d.ts +1 -1
  55. package/dist/sandbox-fs.js +31 -38
  56. package/dist/sandbox-fs.js.map +1 -1
  57. package/dist/sandbox-runtime.d.ts +22 -29
  58. package/dist/sandbox-runtime.js +125 -93
  59. package/dist/sandbox-runtime.js.map +1 -1
  60. package/dist/sandbox.d.ts +1 -1
  61. package/dist/sandbox.js +1 -1
  62. package/dist/secrets.d.ts +99 -0
  63. package/dist/secrets.js +371 -0
  64. package/dist/secrets.js.map +1 -0
  65. package/dist/storage.d.ts +67 -0
  66. package/dist/storage.js +291 -11
  67. package/dist/storage.js.map +1 -1
  68. package/dist/time.js +6 -2
  69. package/dist/time.js.map +1 -1
  70. package/dist/tls.d.ts +87 -0
  71. package/dist/tls.js +154 -0
  72. package/dist/tls.js.map +1 -0
  73. package/dist/tokenizer.d.ts +54 -0
  74. package/dist/tokenizer.js +272 -0
  75. package/dist/tokenizer.js.map +1 -0
  76. package/dist/types.d.ts +1 -1
  77. package/dist/types.js +1 -1
  78. package/dist/worker-pool.js +19 -0
  79. package/dist/worker-pool.js.map +1 -1
  80. package/package.json +19 -7
@@ -8,8 +8,9 @@
8
8
  */
9
9
  import fs from "fs";
10
10
  import path from "path";
11
+ import crypto from "crypto";
11
12
  import { AtomicFileLock } from "./file-lock.js";
12
- import { resolveSandboxRuntimeConfig, runInSandbox, SandboxRequiredError, } from "./sandbox-runtime.js";
13
+ import { resolveSandboxRuntimeConfig, SandboxRequiredError, } from "./sandbox-runtime.js";
13
14
  /**
14
15
  * Normalize user path to a project-relative POSIX path.
15
16
  * Absolute paths are accepted only if they resolve inside projectRoot.
@@ -59,10 +60,6 @@ export function assertSafeRelativePath(userPath, projectRoot) {
59
60
  }
60
61
  return parts.join("/");
61
62
  }
62
- function shellSingleQuote(s) {
63
- // Safe for sh single-quoted strings
64
- return `'${s.replace(/'/g, `'\\''`)}'`;
65
- }
66
63
  function createLock(projectRoot) {
67
64
  return new AtomicFileLock({
68
65
  projectRoot,
@@ -77,7 +74,7 @@ function hostWriteAtomic(absolutePath, content) {
77
74
  fs.mkdirSync(dir, { recursive: true });
78
75
  }
79
76
  // Write exact bytes (callers decide trailing newline — patch/replace need fidelity)
80
- const tempPath = `${absolutePath}.${Math.random().toString(36).slice(2, 9)}.tmp`;
77
+ const tempPath = `${absolutePath}.${crypto.randomBytes(6).toString("hex")}.tmp`;
81
78
  try {
82
79
  fs.writeFileSync(tempPath, content, "utf8");
83
80
  fs.renameSync(tempPath, absolutePath);
@@ -92,57 +89,53 @@ function hostWriteAtomic(absolutePath, content) {
92
89
  }
93
90
  }
94
91
  /**
95
- * Write file content under project root using the active sandbox runtime.
92
+ * Reject writes whose real (symlink-resolved) path escapes the project root.
93
+ * Lexical checks alone are defeated by a symlink inside the project that
94
+ * points at e.g. ~/.ssh/authorized_keys.
95
+ */
96
+ function assertRealPathInsideRoot(absolutePath, root) {
97
+ const realRoot = fs.existsSync(root) ? fs.realpathSync(root) : root;
98
+ let probe = absolutePath;
99
+ while (probe !== path.dirname(probe)) {
100
+ if (fs.existsSync(probe)) {
101
+ const real = fs.realpathSync(probe) + absolutePath.slice(probe.length);
102
+ if (real !== realRoot && !real.startsWith(realRoot + path.sep)) {
103
+ throw new Error(`[SANDBOX_FS] Symlink escape denied: "${absolutePath}"`);
104
+ }
105
+ return;
106
+ }
107
+ probe = path.dirname(probe);
108
+ }
109
+ }
110
+ /**
111
+ * Write file content under project root using the active local sandbox runtime.
96
112
  */
97
113
  export async function writeFileInSandbox(projectRoot, userPath, content, options) {
98
114
  const root = path.resolve(projectRoot);
99
115
  const relativePath = assertSafeRelativePath(userPath, root);
100
116
  const absolutePath = path.resolve(root, relativePath);
101
- // Belt-and-suspenders: stay inside root
102
117
  if (!absolutePath.startsWith(root + path.sep) && absolutePath !== root) {
103
118
  throw new Error(`[SANDBOX_FS] Resolved path escapes project root: "${userPath}"`);
104
119
  }
120
+ assertRealPathInsideRoot(absolutePath, root);
105
121
  const cfg = resolveSandboxRuntimeConfig(root, options?.timeoutMs);
106
122
  if (cfg.required && cfg.effectiveMode === "none") {
107
- throw new SandboxRequiredError("[SANDBOX_REQUIRED] File write blocked: no sandbox isolation available. " +
108
- "Set ATABEY_SANDBOX_RUNTIME=container (Podman/Docker) or uid, or disable ATABEY_SANDBOX_REQUIRED.");
123
+ throw new SandboxRequiredError("[SANDBOX_REQUIRED] File write blocked: no OS sandbox isolation available. " +
124
+ "Set ATABEY_SANDBOX_RUNTIME=seatbelt or uid, or disable ATABEY_SANDBOX_REQUIRED.");
109
125
  }
110
126
  const owner = options?.ownerId || process.env.ATABEY_ACTIVE_AGENT || "mcp-writer";
111
127
  const lock = createLock(root);
112
- const posixRel = relativePath.split(path.sep).join("/");
113
128
  return lock.withLock(relativePath, owner, async () => {
114
- if (cfg.effectiveMode === "container" && cfg.engine !== "none") {
115
- const dir = path.posix.dirname(posixRel);
116
- const script = dir === "."
117
- ? `cat > ${shellSingleQuote(posixRel)}`
118
- : `mkdir -p ${shellSingleQuote(dir)} && cat > ${shellSingleQuote(posixRel)}`;
119
- const result = await runInSandbox({
120
- command: "sh",
121
- args: ["-c", script],
122
- projectRoot: root,
123
- timeoutMs: options?.timeoutMs ?? cfg.timeoutMs,
124
- stdin: content,
125
- });
126
- if (result.code !== 0) {
127
- throw new Error(`[SANDBOX_FS] Container write failed (code ${result.code}): ${result.stderr || result.stdout}`.trim());
128
- }
129
- return {
130
- absolutePath,
131
- relativePath,
132
- runtime: "container",
133
- isolationLabel: result.isolationLabel,
134
- bytes: Buffer.byteLength(content, "utf8"),
135
- };
136
- }
137
- // uid | none — host write confined to project root
138
129
  hostWriteAtomic(absolutePath, content);
139
130
  return {
140
131
  absolutePath,
141
132
  relativePath,
142
133
  runtime: cfg.effectiveMode,
143
- isolationLabel: cfg.effectiveMode === "uid"
144
- ? "uid host write (project-bound)"
145
- : "host write (project-bound)",
134
+ isolationLabel: cfg.effectiveMode === "seatbelt"
135
+ ? "seatbelt host write (project-bound)"
136
+ : cfg.effectiveMode === "uid"
137
+ ? "uid host write (project-bound)"
138
+ : "host write (project-bound)",
146
139
  bytes: Buffer.byteLength(content, "utf8"),
147
140
  };
148
141
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../src/sandbox-fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../src/sandbox-fs.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,25 @@
1
1
  /**
2
- * Sandbox Runtime — Phase 1.1 execution isolation for agent shell commands.
2
+ * Sandbox Runtime — Pure local OS process isolation for agent commands (Zero Docker/Container).
3
3
  *
4
4
  * Modes (ATABEY_SANDBOX_RUNTIME):
5
- * none — host spawn (legacy; allow-list only)
6
- * uid — host spawn with uid/gid drop (see sandbox.ts)
7
- * container — Docker/Podman run with network=none, resource limits, project mount
8
- * auto — container if engine available, else uid if configured, else none
5
+ * none — host spawn (allow-list + env scrubbing)
6
+ * uid — host spawn with POSIX uid/gid drop (see sandbox.ts)
7
+ * seatbelt — macOS kernel sandbox (/usr/bin/sandbox-exec) confining writes to projectRoot
8
+ * and denying network access by default
9
+ * auto — seatbelt if available on macOS, else uid if configured, else none
9
10
  *
10
- * Enterprise hardening:
11
+ * Hardening:
11
12
  * ATABEY_SANDBOX_REQUIRED=true → deny execution when isolation is effectively "none"
12
- *
13
- * Container defaults:
14
- * ATABEY_SANDBOX_ENGINE=podman|docker|auto (prefer podman, then docker)
15
- * ATABEY_SANDBOX_IMAGE=node:20-bookworm-slim
16
- * ATABEY_SANDBOX_MEMORY=512m
17
- * ATABEY_SANDBOX_CPUS=1
18
- * ATABEY_SANDBOX_PIDS=256
19
- * ATABEY_SANDBOX_NETWORK=none
13
+ * ATABEY_SANDBOX_NETWORK=none → deny outbound/inbound network inside seatbelt (default: none)
20
14
  */
21
15
  import { resolveSandboxIdentity } from "./sandbox.js";
22
- export type SandboxRuntimeMode = "none" | "uid" | "container" | "auto";
23
- export type SandboxEngine = "podman" | "docker" | "none";
16
+ export type SandboxRuntimeMode = "none" | "uid" | "seatbelt" | "auto";
17
+ export type SandboxEngine = "seatbelt" | "none";
24
18
  export interface SandboxRuntimeConfig {
25
19
  mode: SandboxRuntimeMode;
26
20
  /** Resolved effective mode after auto detection. */
27
- effectiveMode: "none" | "uid" | "container";
21
+ effectiveMode: "none" | "uid" | "seatbelt";
28
22
  engine: SandboxEngine;
29
- image: string;
30
- memory: string;
31
- cpus: string;
32
- pidsLimit: number;
33
23
  network: string;
34
24
  required: boolean;
35
25
  projectRoot: string;
@@ -41,7 +31,7 @@ export interface RunInSandboxRequest {
41
31
  projectRoot: string;
42
32
  timeoutMs?: number;
43
33
  env?: NodeJS.ProcessEnv;
44
- /** Optional stdin payload (e.g. file content for container-mediated writes). */
34
+ /** Optional stdin payload. */
45
35
  stdin?: string | Buffer;
46
36
  }
47
37
  export interface RunInSandboxResult {
@@ -56,10 +46,12 @@ export interface RunInSandboxResult {
56
46
  export declare class SandboxRequiredError extends Error {
57
47
  constructor(message: string);
58
48
  }
49
+ export declare const SEATBELT_BINARY = "/usr/bin/sandbox-exec";
50
+ export declare function resolveDefaultSandboxRequired(_mode?: SandboxRuntimeMode): boolean;
59
51
  /**
60
- * Detect available container engine (cached).
52
+ * Detect available native OS sandbox engine (cached).
61
53
  */
62
- export declare function detectContainerEngine(): SandboxEngine;
54
+ export declare function detectOsSandboxEngine(): SandboxEngine;
63
55
  /** Test helper */
64
56
  export declare function clearSandboxRuntimeCache(): void;
65
57
  /**
@@ -67,16 +59,17 @@ export declare function clearSandboxRuntimeCache(): void;
67
59
  */
68
60
  export declare function resolveSandboxRuntimeConfig(projectRoot: string, timeoutMs?: number): SandboxRuntimeConfig;
69
61
  /**
70
- * Build docker/podman argv for an isolated run.
71
- * Project is mounted at /workspace; command runs with -w /workspace.
62
+ * Build macOS Seatbelt (`/usr/bin/sandbox-exec`) SBPL profile and argv.
63
+ * Confines file writes strictly to `projectRoot` and OS temp directories,
64
+ * and denies network access when `cfg.network === "none"`.
72
65
  */
73
- export declare function buildContainerArgs(cfg: SandboxRuntimeConfig, command: string, args: string[]): string[];
66
+ export declare function buildSeatbeltArgs(cfg: SandboxRuntimeConfig, command: string, args: string[]): string[];
74
67
  /**
75
- * Run a command under the configured sandbox runtime.
68
+ * Run a command under the configured local OS sandbox runtime.
76
69
  */
77
70
  export declare function runInSandbox(req: RunInSandboxRequest): Promise<RunInSandboxResult>;
78
71
  /**
79
- * Diagnostic snapshot for dashboard / CLI.
72
+ * Diagnostic snapshot for CLI.
80
73
  */
81
74
  export declare function getSandboxRuntimeStatus(projectRoot?: string): {
82
75
  config: SandboxRuntimeConfig;
@@ -1,33 +1,29 @@
1
1
  /**
2
- * Sandbox Runtime — Phase 1.1 execution isolation for agent shell commands.
2
+ * Sandbox Runtime — Pure local OS process isolation for agent commands (Zero Docker/Container).
3
3
  *
4
4
  * Modes (ATABEY_SANDBOX_RUNTIME):
5
- * none — host spawn (legacy; allow-list only)
6
- * uid — host spawn with uid/gid drop (see sandbox.ts)
7
- * container — Docker/Podman run with network=none, resource limits, project mount
8
- * auto — container if engine available, else uid if configured, else none
5
+ * none — host spawn (allow-list + env scrubbing)
6
+ * uid — host spawn with POSIX uid/gid drop (see sandbox.ts)
7
+ * seatbelt — macOS kernel sandbox (/usr/bin/sandbox-exec) confining writes to projectRoot
8
+ * and denying network access by default
9
+ * auto — seatbelt if available on macOS, else uid if configured, else none
9
10
  *
10
- * Enterprise hardening:
11
+ * Hardening:
11
12
  * ATABEY_SANDBOX_REQUIRED=true → deny execution when isolation is effectively "none"
12
- *
13
- * Container defaults:
14
- * ATABEY_SANDBOX_ENGINE=podman|docker|auto (prefer podman, then docker)
15
- * ATABEY_SANDBOX_IMAGE=node:20-bookworm-slim
16
- * ATABEY_SANDBOX_MEMORY=512m
17
- * ATABEY_SANDBOX_CPUS=1
18
- * ATABEY_SANDBOX_PIDS=256
19
- * ATABEY_SANDBOX_NETWORK=none
13
+ * ATABEY_SANDBOX_NETWORK=none → deny outbound/inbound network inside seatbelt (default: none)
20
14
  */
21
15
  import { spawn, execFileSync } from "child_process";
22
16
  import fs from "fs";
23
17
  import path from "path";
24
18
  import { applySandboxToSpawnOptions, resolveSandboxIdentity, sandboxSpawn, } from "./sandbox.js";
19
+ import { scrubEnvForSubprocess } from "./secrets.js";
25
20
  export class SandboxRequiredError extends Error {
26
21
  constructor(message) {
27
22
  super(message);
28
23
  this.name = "SandboxRequiredError";
29
24
  }
30
25
  }
26
+ export const SEATBELT_BINARY = "/usr/bin/sandbox-exec";
31
27
  let cachedEngine = null;
32
28
  function envStr(key, fallback) {
33
29
  const v = process.env[key];
@@ -39,40 +35,53 @@ function envBool(key, fallback = false) {
39
35
  return fallback;
40
36
  return v === "true" || v === "1" || v === "yes";
41
37
  }
38
+ let warnedDevUnsandboxed = false;
39
+ export function resolveDefaultSandboxRequired(_mode = "auto") {
40
+ if (process.env.ATABEY_SANDBOX_REQUIRED !== undefined) {
41
+ return envBool("ATABEY_SANDBOX_REQUIRED", true);
42
+ }
43
+ if (envBool("ATABEY_ALLOW_UNSANDBOXED", false)) {
44
+ return false;
45
+ }
46
+ const profile = (process.env.ATABEY_PROFILE || "").toLowerCase();
47
+ if (process.env.NODE_ENV === "production" || profile === "enterprise") {
48
+ return true;
49
+ }
50
+ const isTestEnv = Boolean(process.env.VITEST) || process.env.NODE_ENV === "test";
51
+ if (isTestEnv) {
52
+ return false;
53
+ }
54
+ if (!warnedDevUnsandboxed) {
55
+ warnedDevUnsandboxed = true;
56
+ process.stderr.write("[SANDBOX] No isolation enforced (local dev). Set ATABEY_SANDBOX_REQUIRED=true " +
57
+ "to enforce OS process isolation (seatbelt/uid).\n");
58
+ }
59
+ return false;
60
+ }
42
61
  /**
43
- * Detect available container engine (cached).
62
+ * Detect available native OS sandbox engine (cached).
44
63
  */
45
- export function detectContainerEngine() {
64
+ export function detectOsSandboxEngine() {
46
65
  if (cachedEngine)
47
66
  return cachedEngine;
48
67
  const prefer = envStr("ATABEY_SANDBOX_ENGINE", "auto").toLowerCase();
49
- const tryEngine = (name) => {
50
- try {
51
- execFileSync(name, ["--version"], {
52
- encoding: "utf8",
53
- timeout: 3000,
54
- stdio: ["ignore", "pipe", "ignore"],
55
- });
56
- return true;
57
- }
58
- catch {
59
- return false;
60
- }
61
- };
62
- if (prefer === "podman" || prefer === "docker") {
63
- cachedEngine = tryEngine(prefer) ? prefer : "none";
68
+ if (prefer === "none") {
69
+ cachedEngine = "none";
64
70
  return cachedEngine;
65
71
  }
66
- if (tryEngine("podman")) {
67
- cachedEngine = "podman";
72
+ try {
73
+ execFileSync(SEATBELT_BINARY, ["-p", "(version 1)(allow default)", "/usr/bin/true"], {
74
+ encoding: "utf8",
75
+ timeout: 3000,
76
+ stdio: ["ignore", "pipe", "ignore"],
77
+ });
78
+ cachedEngine = "seatbelt";
68
79
  return cachedEngine;
69
80
  }
70
- if (tryEngine("docker")) {
71
- cachedEngine = "docker";
81
+ catch {
82
+ cachedEngine = "none";
72
83
  return cachedEngine;
73
84
  }
74
- cachedEngine = "none";
75
- return cachedEngine;
76
85
  }
77
86
  /** Test helper */
78
87
  export function clearSandboxRuntimeCache() {
@@ -82,10 +91,13 @@ export function clearSandboxRuntimeCache() {
82
91
  * Resolve full runtime configuration for a project.
83
92
  */
84
93
  export function resolveSandboxRuntimeConfig(projectRoot, timeoutMs) {
85
- const mode = (envStr("ATABEY_SANDBOX_RUNTIME", "auto").toLowerCase() || "auto");
86
- const engine = detectContainerEngine();
94
+ const rawMode = envStr("ATABEY_SANDBOX_RUNTIME", "auto").toLowerCase() || "auto";
95
+ const mode = ["none", "uid", "seatbelt", "auto"].includes(rawMode)
96
+ ? rawMode
97
+ : "auto";
98
+ const engine = detectOsSandboxEngine();
87
99
  const identity = resolveSandboxIdentity();
88
- const required = envBool("ATABEY_SANDBOX_REQUIRED", false);
100
+ const required = resolveDefaultSandboxRequired(mode);
89
101
  let effectiveMode;
90
102
  if (mode === "none") {
91
103
  effectiveMode = "none";
@@ -93,26 +105,22 @@ export function resolveSandboxRuntimeConfig(projectRoot, timeoutMs) {
93
105
  else if (mode === "uid") {
94
106
  effectiveMode = identity.enabled ? "uid" : "none";
95
107
  }
96
- else if (mode === "container") {
97
- effectiveMode = engine !== "none" ? "container" : "none";
108
+ else if (mode === "seatbelt") {
109
+ effectiveMode = engine === "seatbelt" ? "seatbelt" : "none";
98
110
  }
99
111
  else {
100
- // auto
101
- if (engine !== "none")
102
- effectiveMode = "container";
112
+ // auto: prefer native OS seatbelt, then uid drop, else none
113
+ if (engine === "seatbelt")
114
+ effectiveMode = "seatbelt";
103
115
  else if (identity.enabled)
104
116
  effectiveMode = "uid";
105
117
  else
106
118
  effectiveMode = "none";
107
119
  }
108
120
  return {
109
- mode: ["none", "uid", "container", "auto"].includes(mode) ? mode : "auto",
121
+ mode,
110
122
  effectiveMode,
111
- engine,
112
- image: envStr("ATABEY_SANDBOX_IMAGE", "node:20-bookworm-slim"),
113
- memory: envStr("ATABEY_SANDBOX_MEMORY", "512m"),
114
- cpus: envStr("ATABEY_SANDBOX_CPUS", "1"),
115
- pidsLimit: parseInt(envStr("ATABEY_SANDBOX_PIDS", "256"), 10) || 256,
123
+ engine: effectiveMode === "seatbelt" ? "seatbelt" : "none",
116
124
  network: envStr("ATABEY_SANDBOX_NETWORK", "none"),
117
125
  required,
118
126
  projectRoot: path.resolve(projectRoot),
@@ -120,8 +128,8 @@ export function resolveSandboxRuntimeConfig(projectRoot, timeoutMs) {
120
128
  };
121
129
  }
122
130
  function isolationLabel(cfg) {
123
- if (cfg.effectiveMode === "container") {
124
- return `container/${cfg.engine} image=${cfg.image} network=${cfg.network} mem=${cfg.memory}`;
131
+ if (cfg.effectiveMode === "seatbelt") {
132
+ return `os/seatbelt network=${cfg.network} root=${cfg.projectRoot}`;
125
133
  }
126
134
  if (cfg.effectiveMode === "uid") {
127
135
  const id = resolveSandboxIdentity();
@@ -129,36 +137,41 @@ function isolationLabel(cfg) {
129
137
  }
130
138
  return "none (host process)";
131
139
  }
140
+ function escapeSbplString(value) {
141
+ return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
142
+ }
132
143
  /**
133
- * Build docker/podman argv for an isolated run.
134
- * Project is mounted at /workspace; command runs with -w /workspace.
144
+ * Build macOS Seatbelt (`/usr/bin/sandbox-exec`) SBPL profile and argv.
145
+ * Confines file writes strictly to `projectRoot` and OS temp directories,
146
+ * and denies network access when `cfg.network === "none"`.
135
147
  */
136
- export function buildContainerArgs(cfg, command, args) {
137
- const root = cfg.projectRoot;
138
- // Prefer :rw so installs/builds work; network still none by default
139
- const mount = `${root}:/workspace:rw`;
140
- const argv = [
141
- "run",
142
- "--rm",
143
- "--network", cfg.network,
144
- "--memory", cfg.memory,
145
- "--cpus", cfg.cpus,
146
- "--pids-limit", String(cfg.pidsLimit),
147
- "-v", mount,
148
- "-w", "/workspace",
149
- // Drop ambient capabilities when supported (docker/podman)
150
- "--security-opt", "no-new-privileges",
151
- ];
152
- // Optional: read-only root FS with writable tmp (stronger isolation)
153
- if (envBool("ATABEY_SANDBOX_READ_ONLY_ROOT", false)) {
154
- argv.push("--read-only", "--tmpfs", "/tmp:rw,noexec,nosuid,size=64m");
155
- }
156
- // Do not pass host secrets by default — empty env except PATH-ish via image
157
- if (!envBool("ATABEY_SANDBOX_PASS_ENV", false)) {
158
- argv.push("--env", "HOME=/tmp", "--env", "NPM_CONFIG_UPDATE_NOTIFIER=false");
159
- }
160
- argv.push(cfg.image, command, ...args);
161
- return argv;
148
+ export function buildSeatbeltArgs(cfg, command, args) {
149
+ const resolvedRoot = fs.existsSync(cfg.projectRoot)
150
+ ? fs.realpathSync(cfg.projectRoot)
151
+ : path.resolve(cfg.projectRoot);
152
+ const lexicalRoot = path.resolve(cfg.projectRoot);
153
+ const allowPaths = new Set([
154
+ resolvedRoot,
155
+ lexicalRoot,
156
+ "/tmp",
157
+ "/private/tmp",
158
+ "/var/folders",
159
+ "/private/var/folders",
160
+ ]);
161
+ const subpathRules = [...allowPaths]
162
+ .map((p) => `(subpath "${escapeSbplString(p)}")`)
163
+ .join(" ");
164
+ const netRule = cfg.network === "none" ? "(deny network*)" : "";
165
+ const profile = [
166
+ "(version 1)",
167
+ "(allow default)",
168
+ netRule,
169
+ '(deny file-write* (subpath "/"))',
170
+ `(allow file-write* ${subpathRules} (literal "/dev/null") (literal "/dev/zero") (literal "/dev/tty"))`,
171
+ ]
172
+ .filter(Boolean)
173
+ .join("");
174
+ return ["-p", profile, command, ...args];
162
175
  }
163
176
  function collectOutput(child, stdin) {
164
177
  return new Promise((resolve) => {
@@ -182,14 +195,14 @@ function collectOutput(child, stdin) {
182
195
  });
183
196
  }
184
197
  /**
185
- * Run a command under the configured sandbox runtime.
198
+ * Run a command under the configured local OS sandbox runtime.
186
199
  */
187
200
  export async function runInSandbox(req) {
188
201
  const cfg = resolveSandboxRuntimeConfig(req.projectRoot, req.timeoutMs);
189
202
  const label = isolationLabel(cfg);
190
203
  if (cfg.required && cfg.effectiveMode === "none") {
191
- throw new SandboxRequiredError("[SANDBOX_REQUIRED] ATABEY_SANDBOX_REQUIRED=true but no isolation is available. " +
192
- "Install Podman/Docker (ATABEY_SANDBOX_RUNTIME=container) or configure ATABEY_SANDBOX_UID/USER " +
204
+ throw new SandboxRequiredError("[SANDBOX_REQUIRED] ATABEY_SANDBOX_REQUIRED=true but no OS isolation is available. " +
205
+ "Use macOS seatbelt (ATABEY_SANDBOX_RUNTIME=seatbelt) or configure ATABEY_SANDBOX_UID/USER " +
193
206
  "(ATABEY_SANDBOX_RUNTIME=uid), or set ATABEY_SANDBOX_REQUIRED=false for local dev.");
194
207
  }
195
208
  if (!fs.existsSync(cfg.projectRoot)) {
@@ -200,30 +213,49 @@ export async function runInSandbox(req) {
200
213
  "pipe",
201
214
  "pipe",
202
215
  ];
203
- if (cfg.effectiveMode === "container" && cfg.engine !== "none") {
204
- const containerArgs = buildContainerArgs(cfg, req.command, req.args);
205
- const child = spawn(cfg.engine, containerArgs, {
216
+ const baseEnv = req.env ?? process.env;
217
+ const childEnv = envBool("ATABEY_SANDBOX_PASS_ENV", false)
218
+ ? baseEnv
219
+ : scrubEnvForSubprocess(baseEnv);
220
+ if (!envBool("ATABEY_ALLOW_INTERACTIVE", false)) {
221
+ const nonInteractive = {
222
+ CI: "true",
223
+ DEBIAN_FRONTEND: "noninteractive",
224
+ GIT_TERMINAL_PROMPT: "0",
225
+ GIT_ASKPASS: "echo",
226
+ PAGER: "cat",
227
+ TERM: "dumb",
228
+ npm_config_yes: "true",
229
+ PIP_NO_INPUT: "1",
230
+ };
231
+ for (const [k, v] of Object.entries(nonInteractive)) {
232
+ if (childEnv[k] === undefined)
233
+ childEnv[k] = v;
234
+ }
235
+ }
236
+ if (cfg.effectiveMode === "seatbelt" && cfg.engine === "seatbelt") {
237
+ const seatbeltArgs = buildSeatbeltArgs(cfg, req.command, req.args);
238
+ const child = spawn(SEATBELT_BINARY, seatbeltArgs, {
206
239
  cwd: cfg.projectRoot,
207
240
  timeout: cfg.timeoutMs,
208
241
  shell: false,
209
242
  stdio,
210
- env: req.env ?? process.env,
243
+ env: childEnv,
211
244
  });
212
245
  const result = await collectOutput(child, req.stdin);
213
246
  return {
214
247
  ...result,
215
- runtime: "container",
216
- engine: cfg.engine,
248
+ runtime: "seatbelt",
249
+ engine: "seatbelt",
217
250
  isolationLabel: label,
218
251
  };
219
252
  }
220
- // uid or none — host spawn (uid options applied when available)
221
253
  const spawnOpts = {
222
254
  cwd: cfg.projectRoot,
223
255
  timeout: cfg.timeoutMs,
224
256
  shell: false,
225
257
  stdio,
226
- env: req.env ?? process.env,
258
+ env: childEnv,
227
259
  };
228
260
  const child = cfg.effectiveMode === "uid"
229
261
  ? sandboxSpawn(req.command, req.args, spawnOpts)
@@ -237,7 +269,7 @@ export async function runInSandbox(req) {
237
269
  };
238
270
  }
239
271
  /**
240
- * Diagnostic snapshot for dashboard / CLI.
272
+ * Diagnostic snapshot for CLI.
241
273
  */
242
274
  export function getSandboxRuntimeStatus(projectRoot = process.cwd()) {
243
275
  const config = resolveSandboxRuntimeConfig(projectRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-runtime.js","sourceRoot":"","sources":["../src/sandbox-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAwC,YAAY,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACH,0BAA0B,EAC1B,sBAAsB,EACtB,YAAY,GACf,MAAM,cAAc,CAAC;AAwCtB,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACvC,CAAC;CACJ;AAED,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C,SAAS,MAAM,CAAC,GAAW,EAAE,QAAgB;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/C,CAAC;AAED,SAAS,OAAO,CAAC,GAAW,EAAE,QAAQ,GAAG,KAAK;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACrC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACjC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAErE,MAAM,SAAS,GAAG,CAAC,IAAyB,EAAW,EAAE;QACrD,IAAI,CAAC;YACD,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE;gBAC9B,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACtC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7C,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,YAAY,GAAG,QAAQ,CAAC;QACxB,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,YAAY,GAAG,QAAQ,CAAC;QACxB,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,YAAY,GAAG,MAAM,CAAC;IACtB,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,wBAAwB;IACpC,YAAY,GAAG,IAAI,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAmB,EAAE,SAAkB;IAC/E,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAuB,CAAC;IACtG,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAE3D,IAAI,aAAoD,CAAC;IACzD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,aAAa,GAAG,MAAM,CAAC;IAC3B,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACtD,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,aAAa,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,CAAC;SAAM,CAAC;QACJ,OAAO;QACP,IAAI,MAAM,KAAK,MAAM;YAAE,aAAa,GAAG,WAAW,CAAC;aAC9C,IAAI,QAAQ,CAAC,OAAO;YAAE,aAAa,GAAG,KAAK,CAAC;;YAC5C,aAAa,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,OAAO;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACzE,aAAa;QACb,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;QAC9D,MAAM,EAAE,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC;QAC/C,IAAI,EAAE,MAAM,CAAC,qBAAqB,EAAE,GAAG,CAAC;QACxC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG;QACpE,OAAO,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC;QACjD,QAAQ;QACR,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,EAAE,EAAE,CAAC;KACtF,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,GAAyB;IAC7C,IAAI,GAAG,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,aAAa,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IACjG,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAAC;QACpC,OAAO,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,qBAAqB,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAC9B,GAAyB,EACzB,OAAe,EACf,IAAc;IAEd,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7B,oEAAoE;IACpE,MAAM,KAAK,GAAG,GAAG,IAAI,gBAAgB,CAAC;IAEtC,MAAM,IAAI,GAAa;QACnB,KAAK;QACL,MAAM;QACN,WAAW,EAAE,GAAG,CAAC,OAAO;QACxB,UAAU,EAAE,GAAG,CAAC,MAAM;QACtB,QAAQ,EAAE,GAAG,CAAC,IAAI;QAClB,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,YAAY;QAClB,2DAA2D;QAC3D,gBAAgB,EAAE,mBAAmB;KACxC,CAAC;IAEF,qEAAqE;IACrE,IAAI,OAAO,CAAC,+BAA+B,EAAE,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,gCAAgC,CAAC,CAAC;IAC1E,CAAC;IAED,4EAA4E;IAC5E,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,kCAAkC,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAClB,KAAmB,EACnB,KAAuB;IAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC;YACtB,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAwB;IACvD,MAAM,GAAG,GAAG,2BAA2B,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,oBAAoB,CAC1B,iFAAiF;YACjF,gGAAgG;YAChG,mFAAmF,CACtF,CAAC;IACN,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAA0B;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QAC3C,MAAM;QACN,MAAM;KACT,CAAC;IAEF,IAAI,GAAG,CAAC,aAAa,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7D,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE;YAC3C,GAAG,EAAE,GAAG,CAAC,WAAW;YACpB,OAAO,EAAE,GAAG,CAAC,SAAS;YACtB,KAAK,EAAE,KAAK;YACZ,KAAK;YACL,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;SAC9B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO;YACH,GAAG,MAAM;YACT,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,cAAc,EAAE,KAAK;SACxB,CAAC;IACN,CAAC;IAED,gEAAgE;IAChE,MAAM,SAAS,GAAiB;QAC5B,GAAG,EAAE,GAAG,CAAC,WAAW;QACpB,OAAO,EAAE,GAAG,CAAC,SAAS;QACtB,KAAK,EAAE,KAAK;QACZ,KAAK;QACL,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;KAC9B,CAAC;IAEF,MAAM,KAAK,GACP,GAAG,CAAC,aAAa,KAAK,KAAK;QACvB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;QAChD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,0BAA0B,CAAC,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3G,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO;QACH,GAAG,MAAM;QACT,OAAO,EAAE,GAAG,CAAC,aAAa;QAC1B,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,KAAK;KACxB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;IAK/D,MAAM,MAAM,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACxD,OAAO;QACH,MAAM;QACN,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE,sBAAsB,EAAE;KACrC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"sandbox-runtime.js","sourceRoot":"","sources":["../src/sandbox-runtime.ts"],"names":[],"mappings":"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"}
package/dist/sandbox.d.ts CHANGED
@@ -42,7 +42,7 @@ export declare function applySandboxToSpawnOptions(options?: SandboxSpawnOptions
42
42
  */
43
43
  export declare function sandboxSpawn(command: string, args: readonly string[], options?: SandboxSpawnOptions): ChildProcess;
44
44
  /**
45
- * Human-readable status for dashboard / CLI diagnostics.
45
+ * Human-readable status for CLI diagnostics.
46
46
  */
47
47
  export declare function getSandboxStatus(): {
48
48
  platform: string;