@ashlr/hub 2.2.0 → 3.0.1

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 (177) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +95 -8
  3. package/dist/api/plugin.d.ts +1 -0
  4. package/dist/cli/backlog.js +2 -0
  5. package/dist/cli/backlog.js.map +1 -1
  6. package/dist/cli/digest.d.ts +6 -0
  7. package/dist/cli/digest.js +127 -2
  8. package/dist/cli/digest.js.map +1 -1
  9. package/dist/cli/eval-fixtures.d.ts +18 -0
  10. package/dist/cli/eval-fixtures.js +38 -0
  11. package/dist/cli/eval-fixtures.js.map +1 -0
  12. package/dist/cli/eval.d.ts +56 -0
  13. package/dist/cli/eval.js +283 -0
  14. package/dist/cli/eval.js.map +1 -0
  15. package/dist/cli/fleet.d.ts +27 -0
  16. package/dist/cli/fleet.js +222 -0
  17. package/dist/cli/fleet.js.map +1 -0
  18. package/dist/cli/goal.d.ts +15 -0
  19. package/dist/cli/goal.js +91 -0
  20. package/dist/cli/goal.js.map +1 -0
  21. package/dist/cli/help.js +10 -3
  22. package/dist/cli/help.js.map +1 -1
  23. package/dist/cli/inbox.d.ts +6 -0
  24. package/dist/cli/inbox.js +183 -8
  25. package/dist/cli/inbox.js.map +1 -1
  26. package/dist/cli/index.js +50 -0
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/cli/loop.d.ts +16 -0
  29. package/dist/cli/loop.js +66 -0
  30. package/dist/cli/loop.js.map +1 -0
  31. package/dist/cli/mcp.d.ts +12 -0
  32. package/dist/cli/mcp.js +148 -0
  33. package/dist/cli/mcp.js.map +1 -1
  34. package/dist/cli/onboard.d.ts +16 -0
  35. package/dist/cli/onboard.js +71 -0
  36. package/dist/cli/onboard.js.map +1 -1
  37. package/dist/cli/plugins.js +9 -8
  38. package/dist/cli/plugins.js.map +1 -1
  39. package/dist/cli/pulse.d.ts +10 -0
  40. package/dist/cli/pulse.js +261 -0
  41. package/dist/cli/pulse.js.map +1 -1
  42. package/dist/cli/run.js +21 -3
  43. package/dist/cli/run.js.map +1 -1
  44. package/dist/cli/stack.d.ts +34 -0
  45. package/dist/cli/stack.js +221 -0
  46. package/dist/cli/stack.js.map +1 -0
  47. package/dist/cli/update.js +12 -5
  48. package/dist/cli/update.js.map +1 -1
  49. package/dist/core/daemon/loop.d.ts +10 -5
  50. package/dist/core/daemon/loop.js +167 -37
  51. package/dist/core/daemon/loop.js.map +1 -1
  52. package/dist/core/env-bridge.js +3 -2
  53. package/dist/core/env-bridge.js.map +1 -1
  54. package/dist/core/fleet/automerge-pass.d.ts +33 -0
  55. package/dist/core/fleet/automerge-pass.js +61 -0
  56. package/dist/core/fleet/automerge-pass.js.map +1 -0
  57. package/dist/core/fleet/quota.d.ts +70 -0
  58. package/dist/core/fleet/quota.js +198 -0
  59. package/dist/core/fleet/quota.js.map +1 -0
  60. package/dist/core/fleet/router.d.ts +46 -0
  61. package/dist/core/fleet/router.js +121 -0
  62. package/dist/core/fleet/router.js.map +1 -0
  63. package/dist/core/fleet/self.d.ts +58 -0
  64. package/dist/core/fleet/self.js +187 -0
  65. package/dist/core/fleet/self.js.map +1 -0
  66. package/dist/core/fleet/status.d.ts +54 -0
  67. package/dist/core/fleet/status.js +157 -0
  68. package/dist/core/fleet/status.js.map +1 -0
  69. package/dist/core/foundry/provenance.d.ts +78 -0
  70. package/dist/core/foundry/provenance.js +172 -0
  71. package/dist/core/foundry/provenance.js.map +1 -0
  72. package/dist/core/git.d.ts +13 -0
  73. package/dist/core/git.js +26 -0
  74. package/dist/core/git.js.map +1 -1
  75. package/dist/core/inbox/merge.d.ts +151 -0
  76. package/dist/core/inbox/merge.js +858 -0
  77. package/dist/core/inbox/merge.js.map +1 -0
  78. package/dist/core/inbox/store.js +10 -1
  79. package/dist/core/inbox/store.js.map +1 -1
  80. package/dist/core/integrations/markdown.d.ts +66 -0
  81. package/dist/core/integrations/markdown.js +132 -0
  82. package/dist/core/integrations/markdown.js.map +1 -0
  83. package/dist/core/integrations/secrets.d.ts +37 -0
  84. package/dist/core/integrations/secrets.js +67 -0
  85. package/dist/core/integrations/secrets.js.map +1 -0
  86. package/dist/core/integrations/stack.d.ts +47 -0
  87. package/dist/core/integrations/stack.js +107 -0
  88. package/dist/core/integrations/stack.js.map +1 -0
  89. package/dist/core/mcp-native-engineer.d.ts +123 -0
  90. package/dist/core/mcp-native-engineer.js +936 -0
  91. package/dist/core/mcp-native-engineer.js.map +1 -0
  92. package/dist/core/mcp-native.js +20 -42
  93. package/dist/core/mcp-native.js.map +1 -1
  94. package/dist/core/mcp-registry.js +2 -0
  95. package/dist/core/mcp-registry.js.map +1 -1
  96. package/dist/core/observability/codex-source.d.ts +53 -0
  97. package/dist/core/observability/codex-source.js +390 -0
  98. package/dist/core/observability/codex-source.js.map +1 -0
  99. package/dist/core/observability/estimate.d.ts +12 -0
  100. package/dist/core/observability/estimate.js +26 -0
  101. package/dist/core/observability/estimate.js.map +1 -1
  102. package/dist/core/observability/limits.d.ts +52 -0
  103. package/dist/core/observability/limits.js +316 -0
  104. package/dist/core/observability/limits.js.map +1 -0
  105. package/dist/core/observability/usage-source.js +3 -1
  106. package/dist/core/observability/usage-source.js.map +1 -1
  107. package/dist/core/portfolio/scanners.d.ts +1 -0
  108. package/dist/core/portfolio/scanners.js +40 -1
  109. package/dist/core/portfolio/scanners.js.map +1 -1
  110. package/dist/core/providers.js +4 -0
  111. package/dist/core/providers.js.map +1 -1
  112. package/dist/core/quality/health.js +1 -0
  113. package/dist/core/quality/health.js.map +1 -1
  114. package/dist/core/run/agent-loop.d.ts +8 -0
  115. package/dist/core/run/agent-loop.js +24 -14
  116. package/dist/core/run/agent-loop.js.map +1 -1
  117. package/dist/core/run/engine-registry.d.ts +48 -0
  118. package/dist/core/run/engine-registry.js +190 -0
  119. package/dist/core/run/engine-registry.js.map +1 -0
  120. package/dist/core/run/engines.d.ts +17 -3
  121. package/dist/core/run/engines.js +63 -44
  122. package/dist/core/run/engines.js.map +1 -1
  123. package/dist/core/run/learned-router.d.ts +121 -0
  124. package/dist/core/run/learned-router.js +374 -0
  125. package/dist/core/run/learned-router.js.map +1 -0
  126. package/dist/core/run/model-manager.js +3 -3
  127. package/dist/core/run/model-manager.js.map +1 -1
  128. package/dist/core/run/model-profile.d.ts +67 -0
  129. package/dist/core/run/model-profile.js +132 -0
  130. package/dist/core/run/model-profile.js.map +1 -0
  131. package/dist/core/run/orchestrator.d.ts +1 -1
  132. package/dist/core/run/orchestrator.js +642 -510
  133. package/dist/core/run/orchestrator.js.map +1 -1
  134. package/dist/core/run/prompts/budget.d.ts +25 -0
  135. package/dist/core/run/prompts/budget.js +51 -0
  136. package/dist/core/run/prompts/budget.js.map +1 -0
  137. package/dist/core/run/prompts/index.d.ts +14 -0
  138. package/dist/core/run/prompts/index.js +59 -0
  139. package/dist/core/run/prompts/index.js.map +1 -0
  140. package/dist/core/run/prompts/layers.d.ts +26 -0
  141. package/dist/core/run/prompts/layers.js +73 -0
  142. package/dist/core/run/prompts/layers.js.map +1 -0
  143. package/dist/core/run/prompts/roles.d.ts +23 -0
  144. package/dist/core/run/prompts/roles.js +48 -0
  145. package/dist/core/run/prompts/roles.js.map +1 -0
  146. package/dist/core/run/prompts/types.d.ts +38 -0
  147. package/dist/core/run/prompts/types.js +5 -0
  148. package/dist/core/run/prompts/types.js.map +1 -0
  149. package/dist/core/run/provider-client.d.ts +6 -24
  150. package/dist/core/run/provider-client.js +125 -61
  151. package/dist/core/run/provider-client.js.map +1 -1
  152. package/dist/core/run/router.js +8 -0
  153. package/dist/core/run/router.js.map +1 -1
  154. package/dist/core/run/sandboxed-engine.d.ts +66 -0
  155. package/dist/core/run/sandboxed-engine.js +262 -0
  156. package/dist/core/run/sandboxed-engine.js.map +1 -0
  157. package/dist/core/run/verify-commands.d.ts +83 -0
  158. package/dist/core/run/verify-commands.js +234 -0
  159. package/dist/core/run/verify-commands.js.map +1 -0
  160. package/dist/core/run/verify.d.ts +31 -1
  161. package/dist/core/run/verify.js +48 -0
  162. package/dist/core/run/verify.js.map +1 -1
  163. package/dist/core/sandbox/audit.d.ts +27 -0
  164. package/dist/core/sandbox/audit.js +34 -0
  165. package/dist/core/sandbox/audit.js.map +1 -1
  166. package/dist/core/sandbox/confine.d.ts +134 -0
  167. package/dist/core/sandbox/confine.js +370 -0
  168. package/dist/core/sandbox/confine.js.map +1 -0
  169. package/dist/core/types.d.ts +227 -5
  170. package/dist/core/web/api.js +77 -28
  171. package/dist/core/web/api.js.map +1 -1
  172. package/dist/core/web/control.d.ts +116 -0
  173. package/dist/core/web/control.js +307 -0
  174. package/dist/core/web/control.js.map +1 -0
  175. package/dist/core/web/public/app.js +512 -6
  176. package/dist/core/web/public/styles.css +468 -0
  177. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-commands.js","sourceRoot":"","sources":["../../../src/core/run/verify-commands.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * - Mutates `usage` in-place (same pattern as agent-loop.ts) to account for
11
11
  * the optional model check.
12
12
  */
13
- import type { RunTask, ProviderClient, RunBudget, RunUsage, VerifyVerdict } from '../types.js';
13
+ import type { RunTask, ProviderClient, RunBudget, RunUsage, VerifyVerdict, AshlrConfig } from '../types.js';
14
14
  /**
15
15
  * Judge whether `task.result` plausibly satisfies `task.goal`.
16
16
  *
@@ -28,3 +28,33 @@ import type { RunTask, ProviderClient, RunBudget, RunUsage, VerifyVerdict } from
28
28
  export declare function verifyTask(task: RunTask, client: ProviderClient, budget: RunBudget, usage: RunUsage, opts?: {
29
29
  model?: boolean;
30
30
  }): Promise<VerifyVerdict>;
31
+ /**
32
+ * A VerifyVerdict enriched with the command that produced it. When a structured
33
+ * (command) verification fails, `command` names the failing command and
34
+ * `failure` carries the tail of its output for the repair loop to feed back.
35
+ */
36
+ export interface StructuredVerdict extends VerifyVerdict {
37
+ /** The verify command that produced this verdict (when method === 'command'). */
38
+ command?: string;
39
+ /** Tail of the failing command's output (~2KB), for repair feedback. */
40
+ failure?: string;
41
+ }
42
+ /**
43
+ * Structured verification for a completed task.
44
+ *
45
+ * When a workspace is available AND execution is permitted AND detectable
46
+ * verify commands exist, run them in order (typecheck → test → lint). The FIRST
47
+ * non-ok command short-circuits to a failure verdict carrying the command + a
48
+ * tail of its output. When every command passes, return an ok 'command' verdict.
49
+ *
50
+ * Otherwise (no workspace, exec not allowed, no cfg, or nothing detected) fall
51
+ * back to the heuristic/model verifyTask, wrapped to the StructuredVerdict shape.
52
+ *
53
+ * Never throws (runVerifyCommand and verifyTask are both non-throwing).
54
+ */
55
+ export declare function verifyTaskStructured(task: RunTask, client: ProviderClient, budget: RunBudget, usage: RunUsage, opts: {
56
+ model?: boolean;
57
+ workspaceRoot?: string;
58
+ allowExec?: boolean;
59
+ cfg?: AshlrConfig;
60
+ }): Promise<StructuredVerdict>;
@@ -11,6 +11,7 @@
11
11
  * the optional model check.
12
12
  */
13
13
  import { overBudget, addUsage } from './budget.js';
14
+ import { detectVerifyCommands, runVerifyCommand } from './verify-commands.js';
14
15
  // ---------------------------------------------------------------------------
15
16
  // Internal helpers
16
17
  // ---------------------------------------------------------------------------
@@ -201,4 +202,51 @@ export async function verifyTask(task, client, budget, usage, opts) {
201
202
  };
202
203
  }
203
204
  }
205
+ // ---------------------------------------------------------------------------
206
+ // M43: Structured verification (typecheck/test/lint) + verdict wrapper
207
+ // ---------------------------------------------------------------------------
208
+ /** Tail of a command's output to surface in a failure verdict (~2KB). */
209
+ const FAILURE_TAIL_CHARS = 2 * 1024;
210
+ /**
211
+ * Structured verification for a completed task.
212
+ *
213
+ * When a workspace is available AND execution is permitted AND detectable
214
+ * verify commands exist, run them in order (typecheck → test → lint). The FIRST
215
+ * non-ok command short-circuits to a failure verdict carrying the command + a
216
+ * tail of its output. When every command passes, return an ok 'command' verdict.
217
+ *
218
+ * Otherwise (no workspace, exec not allowed, no cfg, or nothing detected) fall
219
+ * back to the heuristic/model verifyTask, wrapped to the StructuredVerdict shape.
220
+ *
221
+ * Never throws (runVerifyCommand and verifyTask are both non-throwing).
222
+ */
223
+ export async function verifyTaskStructured(task, client, budget, usage, opts) {
224
+ const { workspaceRoot, allowExec, cfg } = opts;
225
+ if (workspaceRoot && allowExec && cfg) {
226
+ const commands = detectVerifyCommands(workspaceRoot);
227
+ if (commands.length > 0) {
228
+ for (const vc of commands) {
229
+ const res = runVerifyCommand(vc, workspaceRoot, cfg);
230
+ if (!res.ok) {
231
+ return {
232
+ ok: false,
233
+ method: 'command',
234
+ reason: `${vc.kind} failed: ${res.command}`,
235
+ command: res.command,
236
+ failure: res.output.slice(-FAILURE_TAIL_CHARS),
237
+ };
238
+ }
239
+ }
240
+ return {
241
+ ok: true,
242
+ method: 'command',
243
+ reason: `verify commands passed (${commands.length})`,
244
+ };
245
+ }
246
+ }
247
+ // Fall back to the heuristic/model verdict (already StructuredVerdict-shaped:
248
+ // StructuredVerdict only adds optional fields over VerifyVerdict).
249
+ const verdict = await verifyTask(task, client, budget, usage, { model: opts.model });
250
+ return verdict;
251
+ }
204
252
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/core/run/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/core/run/verify.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,33 @@ export declare function auditDir(): string;
22
22
  * Never throws — errors are swallowed silently to keep callers unblocked.
23
23
  */
24
24
  export declare function audit(entry: Omit<AuditEntry, 'ts'>): void;
25
+ /**
26
+ * Append a `confinement` audit event for a contained engine run.
27
+ *
28
+ * Fields:
29
+ * engine — the EngineId being contained.
30
+ * mode — 'off' | 'os' (the resolved profile mode).
31
+ * networkEgress — whether outbound network was permitted.
32
+ * readAllowed — extra read-allowed paths (if any).
33
+ * platform — process.platform at the time of the run.
34
+ * launched — true when an OS jail launcher was actually built (false = env-only fallback).
35
+ * fallback — true when launched:false but mode was 'os' (i.e. unsupported platform, fallback).
36
+ *
37
+ * Delegates to audit() — append-only, never throws.
38
+ */
39
+ export declare function auditConfinement(event: {
40
+ engine: string;
41
+ mode: string;
42
+ networkEgress: boolean;
43
+ readAllowed?: string[];
44
+ platform: string;
45
+ launched: boolean;
46
+ fallback?: boolean;
47
+ /** Worktree path (used as `repo`). */
48
+ worktree: string;
49
+ /** Sandbox id (or null). */
50
+ sandboxId: string | null;
51
+ }): void;
25
52
  /**
26
53
  * Read audit entries across all date files, newest-first.
27
54
  * `limit` caps the number returned (undefined or 0 => return all).
@@ -94,6 +94,40 @@ export function audit(entry) {
94
94
  }
95
95
  }
96
96
  // ---------------------------------------------------------------------------
97
+ // M52: auditConfinement() — typed confinement audit event
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * Append a `confinement` audit event for a contained engine run.
101
+ *
102
+ * Fields:
103
+ * engine — the EngineId being contained.
104
+ * mode — 'off' | 'os' (the resolved profile mode).
105
+ * networkEgress — whether outbound network was permitted.
106
+ * readAllowed — extra read-allowed paths (if any).
107
+ * platform — process.platform at the time of the run.
108
+ * launched — true when an OS jail launcher was actually built (false = env-only fallback).
109
+ * fallback — true when launched:false but mode was 'os' (i.e. unsupported platform, fallback).
110
+ *
111
+ * Delegates to audit() — append-only, never throws.
112
+ */
113
+ export function auditConfinement(event) {
114
+ audit({
115
+ action: 'confinement.run',
116
+ repo: event.worktree,
117
+ sandboxId: event.sandboxId,
118
+ summary: [
119
+ `engine=${event.engine}`,
120
+ `mode=${event.mode}`,
121
+ `platform=${event.platform}`,
122
+ `launched=${event.launched}`,
123
+ `networkEgress=${event.networkEgress}`,
124
+ event.fallback ? 'fallback=true' : '',
125
+ event.readAllowed?.length ? `readAllowed=${event.readAllowed.length}` : '',
126
+ ].filter(Boolean).join(' '),
127
+ result: 'ok',
128
+ });
129
+ }
130
+ // ---------------------------------------------------------------------------
97
131
  // Public: readAudit()
98
132
  // ---------------------------------------------------------------------------
99
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/core/sandbox/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/core/sandbox/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * confine.ts — M52: OS-level confinement (closes v4 read-residual).
3
+ *
4
+ * Wraps the contained engine spawn with a platform-native read-jail +
5
+ * network-egress gate. ENTIRELY OPT-IN — absent cfg.foundry.confinement the
6
+ * launcher is null and spawnEngine behaves byte-identically to v4.
7
+ *
8
+ * SUPPORTED PLATFORMS:
9
+ * macOS (darwin) — sandbox-exec(1) with a custom SBPL profile.
10
+ * Linux — bwrap (bubblewrap) when on PATH; else null.
11
+ * Other — null (env-only v4 behavior).
12
+ *
13
+ * THREAT MODEL (macOS sandbox-exec):
14
+ * Goal: prevent the contained CLI from reading arbitrary paths outside its
15
+ * worktree — specifically other source trees (e.g. sibling repos) and
16
+ * secrets dirs (e.g. ~/.ssh, ~/.gnupg, ~/.aws).
17
+ *
18
+ * Strategy: (allow default) keeps the process functional (dynamic linker,
19
+ * frameworks, sockets for IPC, etc.). We then layer targeted denials:
20
+ *
21
+ * 1. (deny file-read*) — blocks all file reads by default.
22
+ * 2. (allow file-read* (subpath "<worktree>")) — re-allow the worktree.
23
+ * 3. (allow file-read* (subpath "<$HOME/.claude>")) etc. — re-allow each
24
+ * vendor config home the agent needs for its own auth (read-only).
25
+ * 4. (allow file-read* (subpath "<readAllowed[i]>")) — caller extras.
26
+ * 5. (allow file-read* (subpath "/usr") (subpath "/lib") ...)
27
+ * — allow system paths needed for the OS and CLIs to function.
28
+ * 6. (deny network-outbound*) unless networkEgress:true.
29
+ * 7. (allow file-write* (subpath "<worktree>") (subpath "<TMPDIR>")
30
+ * (subpath "<home>/.claude") ...)
31
+ * — write inside worktree + tmp + vendor config dirs (HOME_CONFIG_SUBDIRS
32
+ * + VENDOR_HOME_ENVS values) so confined agents can write session state.
33
+ *
34
+ * What this DOES NOT protect:
35
+ * - Reads of /proc, /dev, and similar pseudo-filesystems that have no
36
+ * file-read* equivalent in SBPL. These are generally safe (no user data).
37
+ * - Writes to paths outside worktree/TMPDIR that are NOT covered by the
38
+ * allow-file-write* list. Those writes ARE blocked (allow default does
39
+ * not include file-write*).
40
+ * - Against a process that can exploit the macOS sandbox itself. This is
41
+ * an OS-level trust boundary, not a VM boundary.
42
+ *
43
+ * IMPORTANT LIMITATION: sandbox-exec's SBPL `(deny file-read*)` interacts
44
+ * with macOS's TCC/SIP stack. On some system paths (Frameworks, dylibs) the
45
+ * deny fires before dyld can load, causing the wrapped binary to crash. The
46
+ * system subpath allow-list below is empirically derived to keep `cat`,
47
+ * `sh`, and major CLIs (claude, codex) functional. For production hardening,
48
+ * run the profile under `sandbox-exec -D/tmp/sbpl.profile.tmp` and check
49
+ * sandbox-violation lines in the system log.
50
+ *
51
+ * INJECTION SAFETY:
52
+ * All caller-supplied paths are escaped via escapeSbplPath() before
53
+ * embedding in the SBPL profile string. The escaper replaces `"` and `\`
54
+ * with their escaped forms so a malicious path cannot break out of the
55
+ * (subpath "...") SBPL string literal.
56
+ */
57
+ import type { AshlrConfig, EngineId } from '../types.js';
58
+ export interface SandboxLauncher {
59
+ /** The executable to invoke (e.g. 'sandbox-exec', 'bwrap'). */
60
+ bin: string;
61
+ /**
62
+ * Arguments that PREFIX the engine command. The final argv given to
63
+ * spawnEngine will be [...prefixArgs, engineBin, ...engineArgs].
64
+ */
65
+ prefixArgs: string[];
66
+ }
67
+ export interface ConfinementProfile {
68
+ mode: 'off' | 'os';
69
+ readAllowed?: string[];
70
+ networkEgress?: boolean;
71
+ onUnsupported?: 'fallback' | 'fail';
72
+ }
73
+ export interface ConfinementCtx {
74
+ /** Absolute path to the sandbox worktree. */
75
+ worktree: string;
76
+ /** The real HOME directory (for vendor config-homes). */
77
+ home?: string;
78
+ /** Extra env vars in scope (used to find CODEX_HOME, CLAUDE_CONFIG_DIR, etc.). */
79
+ env?: NodeJS.ProcessEnv;
80
+ }
81
+ /**
82
+ * Escape a path for safe embedding in a SBPL (sandbox profile language) string
83
+ * literal. SBPL string literals are delimited by `"`. Only `"` and `\` need
84
+ * escaping — forward slashes and parens in paths are literal and valid.
85
+ *
86
+ * A path containing `)` is safe because it appears inside `"..."` — the
87
+ * parser reads the closing `"` to end the literal before looking for `)`.
88
+ *
89
+ * PROOF: sandbox-exec's parser (Scheme-like) reads `(subpath "<escaped>")`.
90
+ * The literal ends at the first unescaped `"`. After escaping, `"` → `\"` and
91
+ * `\` → `\\`, so no injected character can terminate the string early.
92
+ */
93
+ export declare function escapeSbplPath(p: string): string;
94
+ /**
95
+ * Build a macOS SBPL profile string for sandbox-exec.
96
+ *
97
+ * The profile:
98
+ * (version 1)
99
+ * (allow default) — keep process functional
100
+ * (deny file-read*) — block all file reads by default
101
+ * (allow file-read* ...) — re-allow: worktree, vendor homes, system
102
+ * (deny network-outbound*) — block egress (omitted when networkEgress)
103
+ * (allow file-write* ...) — write only under worktree + TMPDIR
104
+ */
105
+ export declare function buildMacosSbplProfile(profile: ConfinementProfile, ctx: ConfinementCtx): string;
106
+ /**
107
+ * Build the OS sandbox launcher for the given confinement profile and context.
108
+ *
109
+ * Returns `{ bin, prefixArgs }` that callers prepend to the engine spawn, or
110
+ * `null` when confinement is off or not supported on this platform.
111
+ *
112
+ * This function is PURE on the happy path (macOS profile string is built from
113
+ * inputs only). The only side-effect is the bwrap PATH probe on Linux and the
114
+ * audit call on fallback/unsupported.
115
+ *
116
+ * Invariant: when `profile.mode === 'off'` (or undefined), always returns null
117
+ * with no side effects — byte-identical v4 behavior.
118
+ */
119
+ export declare function buildSandboxLauncher(profile: ConfinementProfile, ctx: ConfinementCtx): SandboxLauncher | null;
120
+ /**
121
+ * Resolve the effective ConfinementProfile for a specific engine from
122
+ * `cfg.foundry.confinement`. Per-engine key overrides the `*` (fleet-wide)
123
+ * default; absent → mode:'off' (v4 env-only, no side effects).
124
+ *
125
+ * A `*` key in cfg.foundry.confinement sets the fleet-wide default.
126
+ */
127
+ export declare function confinementProfileFor(engine: EngineId, cfg: AshlrConfig): ConfinementProfile;
128
+ /**
129
+ * Terminal error thrown when OS confinement is required (mode:'os',
130
+ * onUnsupported:'fail') but the platform has no supported jail binary.
131
+ */
132
+ export declare class ConfinementUnsupportedError extends Error {
133
+ constructor(message: string);
134
+ }