@erichll/pi-sandbox 0.15.1 → 0.15.3

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 (3) hide show
  1. package/CHANGELOG.md +17 -286
  2. package/README.md +21 -12
  3. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,288 +1,19 @@
1
1
  # Changelog
2
2
 
3
- ## 0.15.1 - 2026-08-31
4
-
5
- - Align the exact `@erichll/pi-auto-review` dependency with `0.15.1`, inheriting
6
- compatibility with `@gotgenes/pi-permission-system` v28 authorizer
7
- resolutions while keeping machine-authorizer allows out of policy-audit
8
- suggestion evidence.
9
- - Update the dev-only `pi-subagents` compatibility baseline from `0.56.0` to
10
- `0.60.0`. No pi-sandbox runtime, filesystem/network policy, grant, or public
11
- API changes.
12
-
13
- ## 0.15.0 - 2026-08-29
14
-
15
- - Align the package version with `@erichll/pi-auto-review` `0.15.0` and update
16
- the exact dependency to inherit CJK-aware reviewer input budgeting, working
17
- approve and break-glass retries, and accurate waiting-for-user review status.
18
- No pi-sandbox runtime, filesystem/network policy, grant, or public API changes.
19
-
20
- ## 0.14.0 - 2026-08-28
21
-
22
- - Align the package version with `@erichll/pi-auto-review` `0.14.0` and update
23
- the exact dependency to inherit the evidence-driven policy-audit optimizer and
24
- its schema v2 migration. No pi-sandbox runtime, filesystem/network policy,
25
- grant, or public API changes.
26
-
27
- ## 0.13.0 - 2026-08-28
28
-
29
- - Align the package version with `@erichll/pi-auto-review` `0.13.0` and update
30
- the exact dependency to inherit the directional `path_*` /
31
- `external_directory_*` permission-system surface support. No pi-sandbox
32
- runtime, filesystem/network policy, grant, or public API changes.
33
-
34
- ## 0.12.0 - 2026-08-27
35
-
36
- - Align the package version with `@erichll/pi-auto-review` `0.12.0` and update
37
- the exact dependency to inherit the private permission-policy audit and its
38
- shutdown idempotence fix. No pi-sandbox runtime, filesystem/network policy,
39
- grant, or public API changes.
40
-
41
- ## 0.11.1 - 2026-08-25
42
-
43
- - Keep Sandbox Runtime's `CLAUDE_CODE_TMPDIR` aligned with each command's
44
- private `pi-sandbox-tmp-*` directory. This prevents Sandbox Runtime from
45
- overriding `TMPDIR` with its missing `/tmp/claude` fallback, notably fixing
46
- `TMPDIR`-dependent tools on macOS.
47
- - Align the exact `@erichll/pi-auto-review` dependency with `0.11.1`.
48
-
49
- ## 0.11.0 - 2026-08-24
50
-
51
- - **Tag unmatched network domains.** When a domain does not match any static
52
- allow or deny rule, the approval request now explicitly records this as
53
- "network-unmatched" so that audit logs, reviewer context, and grants clearly
54
- distinguish static-policy misses from other review triggers.
55
- - **Structured network destination.** Domain approval requests now include
56
- separate host, port, and protocol fields in addition to the combined
57
- destination string. Grants bind each component independently, preventing a
58
- grant for one host-port-protocol combination from being reused for another.
59
- - Update the dev-only `pi-subagents` compatibility baseline from `0.54.0` to
60
- `0.56.0`. No runtime or public API changes.
61
-
62
- ## 0.10.0 - 2026-08-22
63
-
64
- - Align the package version with `@erichll/pi-auto-review` `0.10.0` and update
65
- the exact dependency. This inherits the new single above-editor review widget,
66
- its stale-concurrency guard, and the removal of tool-call grouping and
67
- transcript auto-append; the sandbox's network, filesystem, grant, and
68
- external-worker security behavior is unchanged.
69
-
70
- ## 0.9.0 - 2026-08-22
71
-
72
- - Align the planned package version with `@erichll/pi-auto-review` `0.9.0` and
73
- update the exact dependency. This inherits permission-system 27-only
74
- session-scoped authorizer registration and local TUI review aggregation; the
75
- sandbox's network, filesystem, grant, and external-worker security behavior
76
- is unchanged.
77
-
78
- ## 0.8.7 - 2026-08-21
79
-
80
- - Update the exact `@erichll/pi-auto-review` dependency to `0.8.2`, inheriting
81
- structured interactive review results: the TUI now renders allow/confirm/
82
- defer/deny/stopper outcomes with the reviewer model name, input/output token
83
- counts, and duration as markdown-style quote rows. No pi-sandbox runtime or
84
- public API changes.
85
-
86
- ## 0.8.6 - 2026-08-21
87
-
88
- - Update the exact `@erichll/pi-auto-review` dependency to `0.8.1`, inheriting
89
- permission-system 26.x compatibility: pi-auto-review now requires
90
- `@gotgenes/pi-permission-system` `^26.0.0` and restores TUI auto-confirm for
91
- capped `path` / `external_directory` allows (binding the live dialog via
92
- `requestId` plus `request.value`). No pi-sandbox runtime or public API
93
- changes.
94
-
95
- ## 0.8.5 - 2026-08-21
96
-
97
- - Update the exact `@erichll/pi-auto-review` dependency to `0.8.0`, inheriting
98
- the break-glass recovery feature: deny results now carry a `denialSource` and
99
- a `recoveryCommand` naming `/auto-review-approve` or
100
- `/auto-review-break-glass`, or stating that a local hard deny cannot be
101
- overridden.
102
-
103
- ## 0.8.4 - 2026-08-20
104
-
105
- - Update the dev-only `pi-subagents` compatibility baseline to `0.53.0`.
106
- - Extend the external-isolation compatibility gate to require and report the
107
- `0.53.0`-or-newer baseline. No pi-sandbox runtime or public API changes.
108
-
109
- ## 0.8.3 - 2026-08-20
110
-
111
- - Update the exact `@erichll/pi-auto-review` dependency to `0.6.0`, inheriting
112
- the reviewer change to drop the host-side user-constraint overlay (allow/
113
- defer/deny judgments stay with the reviewer model).
114
- - Update the dev-only `pi-subagents` baseline to `0.52.0`.
115
- - No pi-sandbox runtime or public API changes.
116
-
117
- ## 0.8.2 - 2026-08-20
118
-
119
- - Update the exact `@erichll/pi-auto-review` dependency to `0.5.0`, inheriting the
120
- reviewer token-usage optimization: request-aware evidence selection, independent
121
- compact reviewer requests, a tighten-only input token budget, typed bounded
122
- retries, and per-attempt usage telemetry.
123
- - No pi-sandbox runtime or public API changes.
124
-
125
- ## 0.8.1 - 2026-08-19
126
-
127
- - Update the exact `@erichll/pi-auto-review` dependency to `0.4.0`, inheriting its
128
- credential-exfiltration hardening and reviewer authentication-refresh safeguards.
129
- - No pi-sandbox runtime or public API changes.
130
-
131
- ## 0.8.0 - 2026-08-18
132
-
133
- - **Trusted network domain policies.** Persistent `network.allowedDomains` and
134
- `network.deniedDomains` arrays in the trusted global configuration
135
- (`~/.pi/agent/extensions/pi-sandbox/config.json`, with legacy fallback) now
136
- authorize matching connections statically, without the one-shot reviewer.
137
- Entries use Sandbox Runtime-compatible patterns: exact domains,
138
- strict-subdomain wildcards such as `*.example.com`, and an optional `:port`;
139
- a bare `*` (optionally with a port) is accepted only in `deniedDomains`.
140
- Values are trimmed and deduplicated, and malformed or unknown configuration
141
- fails closed. Precedence is deterministic — deny, then allow, then the
142
- existing one-shot reviewer — and empty arrays preserve the previous
143
- behavior (no persistent network authorization, with every eligible public
144
- connection reviewed once).
145
- - **Policy parity across execution surfaces.** The same copied network policy
146
- is applied to main-agent Bash, built-in subagents, and outer-isolated
147
- `pi-subagents` workers. External workers receive policy only through their
148
- capability-bound supervisor registration; missing, malformed, or extra-field
149
- transport becomes deny-all without disabling dynamic review for valid
150
- policies.
151
- - **Exfiltration-risk documentation.** The README now warns that domain
152
- allowlists are not a complete data-loss-prevention boundary, that
153
- multi-tenant or user-uploadable destinations (for example `github.com`) can
154
- themselves be exfiltration channels, and that pi-sandbox never infers or
155
- silently adds domains.
156
- - Pin `@anthropic-ai/sandbox-runtime` to `0.0.73` (fixed version; its
157
- network-policy evaluation semantics are reused by the static allow/deny
158
- matching).
159
-
160
- ## 0.7.0 - 2026-08-17
161
-
162
- - **Builtin `subagent` model fail-fast.** An explicit `model` on `start`/
163
- `handoff` is now validated against the host model registry before a child Pi
164
- spawns. Unknown models fail before any session/broker/process is created;
165
- ambiguous bare ids are rejected with a `provider/model` hint; a trailing
166
- `:thinking` suffix is preserved; `status`/`wait`/`stop`/`follow_up` are never
167
- intercepted.
168
-
169
- - **FleetView external-worker display.** Declare `pi-subagents >=0.50.0` as an
170
- **optional** peer dependency (no forced install for builtin/off users) and
171
- mirror pi-sandbox's isolated external workers into pi-subagents' FleetView
172
- (caller-owned `external-runs`) whenever `subagents.provider ===
173
- "pi-subagents"` AND `externalWorkerIsolation === "enforce"`. Loading uses a
174
- dynamic import only; import/registry failures disable the display path
175
- without weakening fail-closed isolation or network approval. v1 records are
176
- `running`-only and cleaned up on worker unregister, session shutdown, and
177
- supervisor replacement.
178
-
179
- - **`pi-subagents` capability baseline raised to `0.50.0`** (test/CI only;
180
- does not affect the published runtime). The dev dependency is pinned exactly
181
- to `0.50.0`, the capability boundary is redocumented, the compatibility-gate
182
- entry resolves through the package `exports["."]` via `import.meta.resolve`,
183
- and the external-isolation probe is generalized. Verified by
184
- `gate:external-isolation` and the model-backed `gate:pi-subagents`
185
- (`PASS`, `piSubagents: 0.50.0`).
186
-
187
- ## 0.6.2 - 2026-08-13
188
-
189
- - Bump `@erichll/pi-auto-review` to `0.3.5` so consumers inherit the raised
190
- default model-review timeout (90s) and retries (2) through the broker.
191
- - Update the documented `pi-subagents` capability boundary to `0.45.2` and relax
192
- the dev dependency to `^0.47.1` (test/CI only; does not affect the published
193
- runtime).
194
-
195
- ## 0.6.1 - 2026-08-09
196
-
197
- - Upgrade `@anthropic-ai/sandbox-runtime` from `0.0.67` to `0.0.71` (path
198
- normalization, proxy abort and query-string redaction hardening, per-command
199
- violation attribution, network domain `:port` suffixes and per-entry deny
200
- reasons, compacted macOS Seatbelt profiles). No breaking contract changes.
201
- - Give every sandboxed command (main-agent Bash and builtin subagents) a
202
- **private, writable temp directory**: each invocation creates an isolated
203
- `pi-sandbox-tmp-*` subdirectory of the host temp tree, adds it to the
204
- sandbox's read/write allowlists, and points the command's `TMPDIR`, `TMP`,
205
- and `TEMP` at it. The shared host temp root stays read-only to the sandbox;
206
- the directory is removed when the command exits. If the host temp directory
207
- is unavailable (e.g. a read-only `/tmp`), the command degrades to the
208
- previous denied-temp behaviour instead of failing. This mirrors the outer
209
- external-worker isolation and unifies the broker temp-dir env under
210
- `PI_SANDBOX_TMPDIR`.
211
- - Add an injectable `createTempDir` test seam plus a broker probe fixture and
212
- runner coverage for the private-temp success and degrade paths.
213
-
214
- - Retarget the development compatibility target from `pi-subagents 0.42.1` to
215
- `pi-subagents 0.44.0` and update the coexistence assertions, capability
216
- boundary, and compatibility gate. The 0.44.0 line lands internal
217
- workflow/mission/schedule fixes that do not change pi-sandbox's contract
218
- (tool-ownership detection, `PI_SUBAGENT_PI_BINARY` worker bootstrap).
219
- - Adapt the compatibility gate's "direct child" probe to the `workflowScript`
220
- single-run form: pi-subagents 0.43.0 removed public top-level `agent`/`task`
221
- direct execution, so the external provider's direct single-child launch is
222
- now `subagent({ workflowScript: "return runs.run('main', { agent, task })" })`.
223
- This unblocks the `subagents.externalWorkerIsolation: "enforce"` gate, which
224
- previously timed out when the isolated worker could not reconcile the removed
225
- direct signature with the newer `workflowScript`-only contract.
226
-
227
- ## 0.5.0 - 2026-08-08
228
-
229
- - Pin the development compatibility target to `pi-subagents 0.42.1` and add
230
- coexistence assertions for its package identity and tool ownership.
231
- - Add `npm run gate:pi-subagents`, an opt-in real-Pi compatibility gate. It
232
- uses an isolated agent directory and reports `SKIP` unless a dedicated gate
233
- model and credentials are supplied. The gate now waits for returned child
234
- results and uses configurable provider-latency timeouts.
235
- - Add the opt-in `subagents.externalWorkerIsolation: "enforce"` bootstrap for
236
- external `pi-subagents` workers. It uses a tarball-shipped launcher and
237
- fails closed if its outer Sandbox Runtime broker cannot start, protects
238
- first-time security configuration creation, and cleans up only unchanged
239
- temporary bind placeholders.
240
-
241
- ## 0.4.3 - 2026-08-06
242
-
243
- - Move the `pi-auto-review` dependency to `0.3.3`, which allows multi-segment
244
- model ids (`provider/group/model`) in the reviewer config.
245
- - Bump `pi-subagents` dev dependency to `0.41.0` (build/test tooling only).
246
-
247
- ## 0.4.2 - 2026-07-30
248
-
249
- - Load trusted configuration from
250
- `~/.pi/agent/extensions/pi-sandbox/config.json`, with a read fallback to the
251
- legacy `~/.pi/agent/pi-sandbox.json` path when the new file is absent.
252
- - Deny writes to common workspace secrets by default (`.env` variants,
253
- `secrets/` / `.secrets/`, and discovered `*.pem` / `*.key` / `*.p12` /
254
- `*.pfx`), while leaving template files such as `.env.example` writable.
255
- - Protect `~/.pi/agent/extensions` (including the extension-local config) from
256
- sandboxed writes.
257
- - On macOS, add git-style secret globs for nested create protection; Linux keeps
258
- literal absolute paths only because Sandbox Runtime drops globs there.
259
-
260
- ## 0.4.1 - 2026-07-29
261
-
262
- - Republish to refresh the npm search index used by the pi.dev package gallery.
263
- - Depend on `@erichll/pi-auto-review@0.3.2`.
264
-
265
- ## 0.4.0 - 2026-07-29
266
-
267
- - Add an optional, approval-gated Host-IPC Bash backend for commands that need
268
- access to host Unix sockets.
269
- - Support trusted preflight command prefixes without treating a prefix as
270
- authorization; every complete command still requires an exact one-shot
271
- approval.
272
- - Support one non-recursive host retry after a narrowly detected Unix-socket
273
- `Operation not permitted` sandbox failure.
274
- - Preserve the first attempt's output, apply only the original timeout's
275
- remaining duration, and never retry successful, timed-out, or aborted
276
- commands.
277
- - Refuse Host-IPC forwarding for built-in subagents.
278
- - Add deterministic execution and approval coverage plus a Linux tmux socket
279
- smoke test.
280
-
281
- ## 0.3.1 - 2026-07-29
282
-
283
- - Add trusted global filesystem read-path extensions while keeping default
284
- write and configuration protections intact.
285
-
286
- ## 0.3.0 - 2026-07-28
287
-
288
- - Initial public release.
3
+ ## 0.15.3 - 2026-09-03
4
+
5
+ - Reviewer decisions on sandbox network boundaries inherit the fenced-JSON
6
+ tolerance fix through the `@erichll/pi-auto-review` 0.15.3 dependency
7
+ (strict decision-schema validation unchanged).
8
+ - Move the tested `pi-subagents` baseline to 0.64.0.
9
+ - Verify watchdog launch blocking occurs before worker spawn and leaves no child
10
+ transcript in the model-backed gate.
11
+ - Exercise `watchdog_diff` against read-only Git worktree metadata through the
12
+ real outer-sandbox launcher.
13
+
14
+ ## 0.15.2 - 2026-09-02
15
+
16
+ - No user-facing changes. Compatibility-verification release only: the
17
+ dev/test baselines move to `pi-subagents 0.63.0` and
18
+ `@anthropic-ai/sandbox-runtime 0.0.75`, with sandbox runtime, policy,
19
+ grants, and the public API unchanged.
package/README.md CHANGED
@@ -9,7 +9,7 @@ also run complete process-backed subagent trees inside independent sandboxes.
9
9
  - [Security model](#security-model)
10
10
  - [Linux requirements](#linux-requirements)
11
11
  - [Subagent provider](#subagent-provider)
12
- - [`pi-subagents` 0.53.0 capability boundary](#pi-subagents-0530-capability-boundary)
12
+ - [`pi-subagents` 0.64.0 capability boundary](#pi-subagents-0640-capability-boundary)
13
13
  - [Network domain policy](#network-domain-policy)
14
14
  - [Optional host IPC fallback](#optional-host-ipc-fallback)
15
15
  - [Additional trusted read paths](#additional-trusted-read-paths)
@@ -96,7 +96,7 @@ Supported modes:
96
96
  itself is not wrapped while `externalWorkerIsolation` is `off`.
97
97
  - `off`: protect Bash only.
98
98
 
99
- ### `pi-subagents` 0.53.0 capability boundary
99
+ ### `pi-subagents` 0.64.0 capability boundary
100
100
 
101
101
  `pi-sandbox` verifies the following combination in its test suite and release
102
102
  gate. This version boundary is pinned exactly (see the package
@@ -107,19 +107,27 @@ gate. This version boundary is pinned exactly (see the package
107
107
  published peer range remains `>=0.50.0`; this documents the current tested
108
108
  development baseline, not a runtime minimum.
109
109
 
110
- | Capability | `builtin` | `pi-subagents` 0.53.0 |
110
+ | Capability | `builtin` | `pi-subagents` 0.64.0 |
111
111
  | --- | --- | --- |
112
112
  | Outer worker sandbox | Yes | Opt-in (`externalWorkerIsolation: "enforce"`) |
113
113
  | Bash sandbox | Yes | Yes |
114
114
  | Persistent follow-up | Yes | Yes |
115
115
  | `workflowScript`, missions, schedules | No | Yes |
116
+ | Named workflow resources | No | Yes |
116
117
  | permission-system parent forwarding | Not required | Verified by compatibility gate |
117
118
 
118
- Upgrading across a capability boundary (for example `0.49.0` → `0.50.0`, or
119
- moving the tested baseline to `0.53.0`) requires re-running
120
- `npm run gate:external-isolation` and, before a release, the model-backed
121
- `npm run gate:pi-subagents`. See `docs/compat-notes.md` for the recorded
122
- compatibility seams and how each is verified on upgrade.
119
+ Moving the tested baseline requires re-running `npm run gate:external-isolation`
120
+ and, before a release, the model-backed `npm run gate:pi-subagents`. See
121
+ `docs/compat-notes.md` for the recorded compatibility seams and how each is
122
+ verified on upgrade.
123
+
124
+ The 0.64.0 baseline also exercises tasks passed as an `@task.md` argument,
125
+ standard Git worktree metadata (`.git` pointer plus `commondir`), and the
126
+ read-only `watchdog_diff` tool through the real outer-sandbox launcher. Its
127
+ watchdog `action: "block"` launch rule is checked before worker spawn planning,
128
+ and the model-backed gate verifies that a blocked child creates no transcript
129
+ before running the normal isolated-worker probes. Worktrunk itself is not a
130
+ dependency; provider selection remains upstream behavior.
123
131
 
124
132
  For the external provider, `off` leaves the worker process outside the outer
125
133
  Sandbox Runtime boundary. Do not treat inherited Bash sandboxing as complete
@@ -127,10 +135,11 @@ worker isolation unless the trusted global configuration explicitly enables
127
135
  `enforce`.
128
136
 
129
137
  Note on the external provider's public execution surface: pi-subagents 0.43.0
130
- removed top-level `agent`/`task` direct execution. Every public `subagent`
131
- launch — including a minimal single child — is expressed as a `workflowScript`
132
- such as `return runs.run('main', { agent, task })`. The compatibility gate's
133
- "direct single child" probe uses that single-run form.
138
+ removed the old static multi-agent controls; `workflowScript` remains the
139
+ public multi-agent orchestration surface. Current releases also accept a direct
140
+ single-child `{ agent, task }` launch. The compatibility gate deliberately uses
141
+ `return runs.run('main', { agent, task })` so the single-child probe continues
142
+ to exercise the workflow executor and its isolation seam.
134
143
 
135
144
  The configuration parser rejects malformed JSON, unknown fields, and unknown
136
145
  providers instead of silently weakening isolation.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erichll/pi-sandbox",
3
- "version": "0.15.1",
3
+ "version": "0.15.3",
4
4
  "description": "Linux (bubblewrap) and macOS (Seatbelt) process sandbox for Pi backed by Anthropic's @anthropic-ai/sandbox-runtime. Fail-closed static filesystem policy plus per-connection network approval from pi-auto-review; sandboxes main-agent Bash and built-in subagent process trees.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -50,8 +50,8 @@
50
50
  "test": "node --experimental-strip-types --test test/*.test.ts"
51
51
  },
52
52
  "dependencies": {
53
- "@anthropic-ai/sandbox-runtime": "0.0.73",
54
- "@erichll/pi-auto-review": "0.15.1"
53
+ "@anthropic-ai/sandbox-runtime": "0.0.75",
54
+ "@erichll/pi-auto-review": "0.15.3"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "@earendil-works/pi-coding-agent": "^0.84.1",
@@ -66,7 +66,7 @@
66
66
  "devDependencies": {
67
67
  "@earendil-works/pi-coding-agent": "^0.84.1",
68
68
  "@types/node": "^26.2.0",
69
- "pi-subagents": "0.60.0",
69
+ "pi-subagents": "0.64.0",
70
70
  "typescript": "^6.0.3"
71
71
  }
72
72
  }