@elpapi42/pi-fleet 0.1.0-beta.8 → 0.1.0-beta.9
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 +25 -0
- package/README.md +12 -5
- package/dist/cli-meta.json +4 -4
- package/dist/cli.mjs +2 -2
- package/dist/cli.mjs.map +2 -2
- package/dist/installer-meta.json +5 -5
- package/dist/installer.mjs +1 -24
- package/dist/installer.mjs.map +2 -2
- package/dist/runtime-manifest.json +19 -19
- package/dist/runtime-meta.json +4 -4
- package/dist/runtime.mjs +1 -1
- package/dist/runtime.mjs.map +2 -2
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,31 @@
|
|
|
11
11
|
- Contained asynchronous coordinator event/store failures by stopping the affected Pi process and rejecting waiters instead of producing unhandled promise rejections.
|
|
12
12
|
- Added a nightly reliability workflow and an isolated soak suite covering 500 concurrent ordered sends and 100 name lifecycle cycles.
|
|
13
13
|
- Reject invalid UTF-8 in stdin and Pi RPC stdout instead of silently replacing bytes at either protocol boundary.
|
|
14
|
+
- Keep idle agents `idle + absent` after Fleet-initiated orderly shutdown even when Pi reports a nonzero exit; active work remains `failed/runtime_interrupted`.
|
|
15
|
+
- Align explicit stdin input with the runtime's 512 KiB message limit and document credential-environment and receive-timeout behavior before the quick start.
|
|
16
|
+
- Install native services without forcing the default persistent state directory into `PIFLEET_STATE_ROOT`, preserving the default split between durable SQLite state and the private runtime socket.
|
|
17
|
+
- Validated systemd user lingering, idle reboot restoration, active reboot interruption without replay, single-writer restoration, and session preservation in a disposable privileged systemd container.
|
|
18
|
+
- Added a fail-closed production-audit policy that permits only `GHSA-3jxr-9vmj-r5cp` at the exact `brace-expansion@5.0.6` path pinned by managed Pi `0.80.10`; every changed or additional vulnerability still blocks release.
|
|
19
|
+
|
|
20
|
+
## 0.1.0-beta.9 — 2026-07-20
|
|
21
|
+
|
|
22
|
+
Core product and Linux supervision validation after beta.8.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- An orderly Fleet shutdown now leaves idle agents `idle + absent` even if Pi reports a nonzero exit; active interrupted work still becomes `failed/runtime_interrupted` without replay.
|
|
27
|
+
- A clean native-service install no longer forces the default persistent state directory into `PIFLEET_STATE_ROOT`, so the service and ordinary CLI agree on the private runtime socket while SQLite remains in durable state storage.
|
|
28
|
+
- Explicit stdin now uses the runtime's default 512 KiB message boundary instead of accepting a larger payload that the runtime later rejects.
|
|
29
|
+
- Onboarding now explains persistent credential environments before the first operational command and uses explicit receive timeout units.
|
|
30
|
+
|
|
31
|
+
### Validated
|
|
32
|
+
|
|
33
|
+
- Reused one real named agent across a service restart and related follow-up assignment with the same native Pi session and less re-explanation.
|
|
34
|
+
- Proved user lingering, idle PID-1 restart without eager restoration, single-writer session restoration, active restart interruption without replay, explicit recovery, and session preservation in a disposable systemd container.
|
|
35
|
+
|
|
36
|
+
### Security
|
|
37
|
+
|
|
38
|
+
- The production audit remains fail-closed except for one deliberate exact exception: managed Pi `0.80.10` currently pins `brace-expansion@5.0.6` affected by local glob-input denial-of-service advisory `GHSA-3jxr-9vmj-r5cp`. The policy verifies the advisory, package versions, and installed path and rejects every additional or changed vulnerability. Upstream tracking is `earendil-works/pi#6882`.
|
|
14
39
|
|
|
15
40
|
## 0.1.0-beta.8 — 2026-07-20
|
|
16
41
|
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ create · send · receive · status · list · watch · destroy
|
|
|
8
8
|
|
|
9
9
|
Fleet keeps a Pi process resident when possible, restores it from the same native Pi session when absent, accepts repeated steering input, and returns the latest assistant message after Pi becomes idle. Pi sessions remain under your control: Fleet references them but never copies or deletes them.
|
|
10
10
|
|
|
11
|
-
> **Beta:** `0.1.0-beta.
|
|
11
|
+
> **Beta:** `0.1.0-beta.9` has passed deterministic Linux x64 fault, recovery, package, compatibility, systemd/PID-1 restart, and resource-stability tests with Pi `0.80.10`. Its tag workflow requires a fresh registry-install operational smoke, and direct isolated testing covers lifecycle, timeout, repeated receive, raw watch and pipe disconnection, session mutation and selectors, concurrency, Pi/runtime crash recovery, capacity, interrupted-work responses, provider failures, extension UI cancellation, and failed restoration. Actual logout/reboot recovery, macOS launchd/containment, automatic upgrades, and public service-management UX are not yet release-validated.
|
|
12
12
|
|
|
13
13
|
## Install
|
|
14
14
|
|
|
@@ -23,12 +23,17 @@ Install the beta globally:
|
|
|
23
23
|
```bash
|
|
24
24
|
npm install --global @elpapi42/pi-fleet@beta
|
|
25
25
|
pifleet --version
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Configure normal Pi provider credentials **before the first operational Fleet command**. `list`, `create`, and the other operational commands start or reuse one persistent runtime; a variable supplied only to a later command, such as `ANTHROPIC_API_KEY=… pifleet create …`, does not replace that runtime's environment. Put provider credentials in Pi's credential configuration or the persistent service/runtime environment, then verify startup:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
26
31
|
pifleet list
|
|
27
32
|
```
|
|
28
33
|
|
|
29
34
|
`npx @elpapi42/pi-fleet@beta` is suitable for evaluation, but a global installation is recommended for continued use. Fleet materializes a verified runtime independently of the npm installation/cache, and evaluation can leave that runtime and Fleet state behind intentionally.
|
|
30
35
|
|
|
31
|
-
Pi Fleet includes the tested Pi coding-agent package. It uses your normal Pi configuration, provider credentials, extensions, skills, and project resources. **Do not put API keys or other secrets in CLI arguments:** Fleet persists accepted Pi arguments so it can restore the agent.
|
|
36
|
+
Pi Fleet includes the tested Pi coding-agent package. It uses your normal Pi configuration, provider credentials, extensions, skills, and project resources. **Do not put API keys or other secrets in CLI arguments:** Fleet persists accepted Pi arguments so it can restore the agent.
|
|
32
37
|
|
|
33
38
|
## Quick start
|
|
34
39
|
|
|
@@ -42,7 +47,7 @@ Send work and retrieve the latest assistant message after Pi becomes idle:
|
|
|
42
47
|
|
|
43
48
|
```bash
|
|
44
49
|
pifleet send reviewer "Review the authentication changes"
|
|
45
|
-
pifleet receive reviewer --human
|
|
50
|
+
pifleet receive reviewer --timeout 10m --human
|
|
46
51
|
```
|
|
47
52
|
|
|
48
53
|
Inspect and remove Fleet management:
|
|
@@ -69,7 +74,7 @@ pifleet destroy NAME [--human]
|
|
|
69
74
|
|
|
70
75
|
Finite commands emit JSON by default. Add `--human` for concise human output. `watch` has no human mode: stdout is only raw, complete records appended to the selected Pi session JSONL.
|
|
71
76
|
|
|
72
|
-
Messages can be read explicitly from stdin with
|
|
77
|
+
Messages can be read explicitly from stdin with `-` and are limited to 512 KiB by default:
|
|
73
78
|
|
|
74
79
|
```bash
|
|
75
80
|
git diff | pifleet send reviewer -
|
|
@@ -118,6 +123,7 @@ Positional Pi prompts and `@file` inputs after `--` are rejected; use Fleet's op
|
|
|
118
123
|
- when already idle, it returns immediately;
|
|
119
124
|
- with no assistant message, it returns `no_response`;
|
|
120
125
|
- `--timeout 0` performs an immediate poll;
|
|
126
|
+
- use an explicit duration suffix such as `30s`, `5m`, or `1h`; a unitless value is milliseconds;
|
|
121
127
|
- timing out does not cancel or change Pi.
|
|
122
128
|
|
|
123
129
|
## Sessions and `watch`
|
|
@@ -174,10 +180,11 @@ Do not include API keys, message contents, session contents, or private paths un
|
|
|
174
180
|
## Beta limitations
|
|
175
181
|
|
|
176
182
|
- Current deterministic reliability and documented global-install package validation cover Linux x64 only. Arbitrarily hoisted local-prefix, pnpm, and unusual `npx` dependency layouts are not yet supported.
|
|
177
|
-
-
|
|
183
|
+
- Disposable systemd/PID-1 restart and user-lingering recovery are validated; a full host logout and kernel reboot remain unvalidated.
|
|
178
184
|
- launchd and macOS descendant containment remain unvalidated.
|
|
179
185
|
- Real disk-exhaustion behavior and multi-hour resource growth remain unvalidated; bounded SQLite and in-process resource tests are covered.
|
|
180
186
|
- Native service install/repair/uninstall exists internally but has no supported public UX yet.
|
|
187
|
+
- Managed Pi `0.80.10` pins `brace-expansion@5.0.6`, which has the local glob-input denial-of-service advisory `GHSA-3jxr-9vmj-r5cp`. Beta.9 carries a narrow, visible audit exception for only that exact package, version, path, and advisory; any other production vulnerability still fails the release gate. Upstream tracking: [earendil-works/pi#6882](https://github.com/earendil-works/pi/issues/6882).
|
|
181
188
|
- Runtime upgrades are not automatic; active runtimes are not silently replaced.
|
|
182
189
|
- Session tails cannot promise exactly-once behavior under arbitrary external mutation.
|
|
183
190
|
- A promptless missing session path may remain physically unmaterialized until Pi writes conversation content, following native Pi behavior.
|
package/dist/cli-meta.json
CHANGED
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"format": "esm"
|
|
157
157
|
},
|
|
158
158
|
"src/cli/input.ts": {
|
|
159
|
-
"bytes":
|
|
159
|
+
"bytes": 976,
|
|
160
160
|
"imports": [],
|
|
161
161
|
"format": "esm"
|
|
162
162
|
},
|
|
@@ -593,7 +593,7 @@
|
|
|
593
593
|
"imports": [],
|
|
594
594
|
"exports": [],
|
|
595
595
|
"inputs": {},
|
|
596
|
-
"bytes":
|
|
596
|
+
"bytes": 270234
|
|
597
597
|
},
|
|
598
598
|
"dist/cli.mjs": {
|
|
599
599
|
"imports": [
|
|
@@ -780,7 +780,7 @@
|
|
|
780
780
|
"bytesInOutput": 140
|
|
781
781
|
},
|
|
782
782
|
"src/cli/input.ts": {
|
|
783
|
-
"bytesInOutput":
|
|
783
|
+
"bytesInOutput": 840
|
|
784
784
|
},
|
|
785
785
|
"src/cli/output.ts": {
|
|
786
786
|
"bytesInOutput": 1016
|
|
@@ -837,7 +837,7 @@
|
|
|
837
837
|
"bytesInOutput": 1191
|
|
838
838
|
}
|
|
839
839
|
},
|
|
840
|
-
"bytes":
|
|
840
|
+
"bytes": 150475
|
|
841
841
|
}
|
|
842
842
|
}
|
|
843
843
|
}
|
package/dist/cli.mjs
CHANGED
|
@@ -3385,7 +3385,7 @@ function splitArgv(argv) {
|
|
|
3385
3385
|
|
|
3386
3386
|
// src/shared/product-identity.ts
|
|
3387
3387
|
var PRODUCT_BINARY = "pifleet";
|
|
3388
|
-
var PRODUCT_VERSION = "0.1.0-beta.
|
|
3388
|
+
var PRODUCT_VERSION = "0.1.0-beta.9";
|
|
3389
3389
|
|
|
3390
3390
|
// src/cli/commands/create.ts
|
|
3391
3391
|
import { resolve } from "node:path";
|
|
@@ -3397,7 +3397,7 @@ function isAgentName(value) {
|
|
|
3397
3397
|
}
|
|
3398
3398
|
|
|
3399
3399
|
// src/cli/input.ts
|
|
3400
|
-
var DEFAULT_MAX_INPUT_BYTES =
|
|
3400
|
+
var DEFAULT_MAX_INPUT_BYTES = 512 * 1024;
|
|
3401
3401
|
async function resolveMessageInput(value, stdin, maxBytes = DEFAULT_MAX_INPUT_BYTES) {
|
|
3402
3402
|
if (value !== "-") return requireContent(value);
|
|
3403
3403
|
const chunks = [];
|