@erichll/pi-sandbox 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.5 - 2026-08-21
4
+
5
+ - Update the exact `@erichll/pi-auto-review` dependency to `0.8.0`, inheriting
6
+ the break-glass recovery feature: deny results now carry a `denialSource` and
7
+ a `recoveryCommand` naming `/auto-review-approve` or
8
+ `/auto-review-break-glass`, or stating that a local hard deny cannot be
9
+ overridden.
10
+
11
+ ## 0.8.4 - 2026-08-20
12
+
13
+ - Update the dev-only `pi-subagents` compatibility baseline to `0.53.0`.
14
+ - Extend the external-isolation compatibility gate to require and report the
15
+ `0.53.0`-or-newer baseline. No pi-sandbox runtime or public API changes.
16
+
3
17
  ## 0.8.3 - 2026-08-20
4
18
 
5
19
  - Update the exact `@erichll/pi-auto-review` dependency to `0.6.0`, inheriting
package/README.md CHANGED
@@ -83,16 +83,18 @@ Supported modes:
83
83
  itself is not wrapped while `externalWorkerIsolation` is `off`.
84
84
  - `off`: protect Bash only.
85
85
 
86
- ### `pi-subagents` 0.50.0 capability boundary
86
+ ### `pi-subagents` 0.53.0 capability boundary
87
87
 
88
88
  `pi-sandbox` verifies the following combination in its test suite and release
89
89
  gate. This version boundary is pinned exactly (see the package
90
90
  `devDependencies`) and additionally exercised against the latest published
91
91
  `pi-subagents` on a nightly CI schedule. The `PI_SUBAGENT_PI_BINARY` seam
92
92
  (`externalWorkerIsolation: "enforce"`) is re-checked deterministically by the
93
- `gate:external-isolation` probe on the pinned and latest dependency.
93
+ `gate:external-isolation` probe on the pinned and latest dependency. The
94
+ published peer range remains `>=0.50.0`; this documents the current tested
95
+ development baseline, not a runtime minimum.
94
96
 
95
- | Capability | `builtin` | `pi-subagents` 0.50.0 |
97
+ | Capability | `builtin` | `pi-subagents` 0.53.0 |
96
98
  | --- | --- | --- |
97
99
  | Outer worker sandbox | Yes | Opt-in (`externalWorkerIsolation: "enforce"`) |
98
100
  | Bash sandbox | Yes | Yes |
@@ -100,10 +102,11 @@ gate. This version boundary is pinned exactly (see the package
100
102
  | `workflowScript`, missions, schedules | No | Yes |
101
103
  | permission-system parent forwarding | Not required | Verified by compatibility gate |
102
104
 
103
- Upgrading across a capability boundary (for example `0.49.0` → `0.50.0`)
104
- requires re-running `npm run gate:external-isolation` and, before a release,
105
- the model-backed `npm run gate:pi-subagents`. See `docs/compat-notes.md` for
106
- the recorded compatibility seams and how each is verified on upgrade.
105
+ Upgrading across a capability boundary (for example `0.49.0` → `0.50.0`, or
106
+ moving the tested baseline to `0.53.0`) requires re-running
107
+ `npm run gate:external-isolation` and, before a release, the model-backed
108
+ `npm run gate:pi-subagents`. See `docs/compat-notes.md` for the recorded
109
+ compatibility seams and how each is verified on upgrade.
107
110
 
108
111
  For the external provider, `off` leaves the worker process outside the outer
109
112
  Sandbox Runtime boundary. Do not treat inherited Bash sandboxing as complete
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erichll/pi-sandbox",
3
- "version": "0.8.3",
3
+ "version": "0.8.5",
4
4
  "description": "Sandbox Runtime-backed Linux and macOS sandbox with pi-auto-review approval",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@anthropic-ai/sandbox-runtime": "0.0.73",
54
- "@erichll/pi-auto-review": "0.6.0"
54
+ "@erichll/pi-auto-review": "0.8.0"
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.52.0",
69
+ "pi-subagents": "0.53.0",
70
70
  "typescript": "^6.0.3"
71
71
  }
72
72
  }
package/src/approval.ts CHANGED
@@ -124,10 +124,17 @@ async function approveBoundaryRequest(
124
124
  }
125
125
 
126
126
  if (decision.kind === "deny") {
127
+ const recoveryCommand =
128
+ decision.recoveryCommand ?? "/auto-review-approve";
129
+ const recovery =
130
+ recoveryCommand === false
131
+ ? " This local safety denial cannot be overridden."
132
+ : ` Use ${recoveryCommand} for one exact retry.`;
127
133
  return {
128
134
  action: "deny",
129
- source: "reviewer",
130
- reason: decision.review.rationale,
135
+ source:
136
+ decision.denialSource === "hard-deny" ? "hard-deny" : "reviewer",
137
+ reason: `${decision.review.rationale}${recovery}`,
131
138
  };
132
139
  }
133
140
  if (decision.kind === "defer") {