@elpapi42/pi-fleet 0.1.0-beta.6 → 0.1.0-beta.8

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
@@ -12,6 +12,29 @@
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
14
 
15
+ ## 0.1.0-beta.8 — 2026-07-20
16
+
17
+ Publishes the beta.7 manual-testing fixes after its immutable tag failed before npm publication.
18
+
19
+ ### Changed
20
+
21
+ - The process-tree fixture now waits for both parent and child SIGTERM handlers through an IPC readiness handshake before exposing their PIDs, removing a CI scheduling race while preserving the real escalation assertion.
22
+ - Includes the beta.7 `watch` EPIPE and pre-dispatch restoration-failure fixes; beta.7 itself was never published to npm.
23
+
24
+ ## 0.1.0-beta.7 — 2026-07-20
25
+
26
+ Continued direct CLI edge-case testing. No intentional command-surface change.
27
+
28
+ ### Fixed
29
+
30
+ - `watch` now treats downstream `EPIPE` as normal client disconnection, exiting successfully without misreporting a closed output pipe as `invalid_arguments`.
31
+ - A restoration failure proven to occur before prompt dispatch now returns `pi_start_failed`, marks the send definitively failed, leaves the agent `failed + absent`, and releases process capacity instead of claiming `delivery_uncertain` and leaving `restoring + starting` state.
32
+ - Restoration cleanup uncertainty remains fail-closed as `incarnation_cleanup_uncertain` with its process slot retained when Fleet cannot prove the spawned process is gone.
33
+
34
+ ### Manual validation
35
+
36
+ - Exercised active runtime death with held clients, hanging/HTTP-error/malformed providers, 19 MB watch backpressure, stdin limits, Unicode paths, extension UI cancellation, oversized session records, watch pipe closure, and missing-cwd restoration in isolated environments.
37
+
15
38
  ## 0.1.0-beta.6 — 2026-07-20
16
39
 
17
40
  Manual interruption-semantics correction. No intentional command-surface change.
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.6` has passed deterministic Linux x64 fault, recovery, package, compatibility, and resource-stability tests with Pi `0.80.10`. Its tag workflow requires a fresh registry-install operational smoke, and direct isolated registry testing covers lifecycle, timeout, repeated receive, raw watch, session mutation and selectors, concurrency, Pi/runtime crash recovery, capacity, and interrupted-work response handling. Actual logout/reboot recovery, macOS launchd/containment, automatic upgrades, and public service-management UX are not yet release-validated.
11
+ > **Beta:** `0.1.0-beta.8` has passed deterministic Linux x64 fault, recovery, package, compatibility, 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
 
@@ -304,7 +304,7 @@
304
304
  "format": "esm"
305
305
  },
306
306
  "src/cli/commands/watch.ts": {
307
- "bytes": 650,
307
+ "bytes": 793,
308
308
  "imports": [
309
309
  {
310
310
  "path": "node:events",
@@ -593,7 +593,7 @@
593
593
  "imports": [],
594
594
  "exports": [],
595
595
  "inputs": {},
596
- "bytes": 270001
596
+ "bytes": 270235
597
597
  },
598
598
  "dist/cli.mjs": {
599
599
  "imports": [
@@ -810,7 +810,7 @@
810
810
  "bytesInOutput": 265
811
811
  },
812
812
  "src/cli/commands/watch.ts": {
813
- "bytesInOutput": 445
813
+ "bytesInOutput": 552
814
814
  },
815
815
  "src/cli/program.ts": {
816
816
  "bytesInOutput": 2440
@@ -837,7 +837,7 @@
837
837
  "bytesInOutput": 1191
838
838
  }
839
839
  },
840
- "bytes": 150369
840
+ "bytes": 150476
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.6";
3388
+ var PRODUCT_VERSION = "0.1.0-beta.8";
3389
3389
 
3390
3390
  // src/cli/commands/create.ts
3391
3391
  import { resolve } from "node:path";
@@ -3555,14 +3555,19 @@ async function runStatus(input, context) {
3555
3555
  import { once } from "node:events";
3556
3556
  async function runWatch(name, context) {
3557
3557
  if (!isAgentName(name)) throw new Error("invalid agent name");
3558
- for await (const result of context.client.watchSession({ name }, { signal: context.signal })) {
3559
- if (!result.ok) {
3560
- writeError(context.stderr, result.error, false);
3561
- return 1;
3558
+ try {
3559
+ for await (const result of context.client.watchSession({ name }, { signal: context.signal })) {
3560
+ if (!result.ok) {
3561
+ writeError(context.stderr, result.error, false);
3562
+ return 1;
3563
+ }
3564
+ if (!context.stdout.write(result.value.bytes)) await once(context.stdout, "drain");
3562
3565
  }
3563
- if (!context.stdout.write(result.value.bytes)) await once(context.stdout, "drain");
3566
+ return 0;
3567
+ } catch (error) {
3568
+ if (error.code === "EPIPE") return 0;
3569
+ throw error;
3564
3570
  }
3565
- return 0;
3566
3571
  }
3567
3572
 
3568
3573
  // src/cli/program.ts