From e86e5df327491e2a3e1296a8c4f7c36ced6ddd38 Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Thu, 30 Jul 2026 01:10:07 +0200 Subject: [PATCH] =?UTF-8?q?release:=20v1.6.4=20=E2=80=94=20fork=20tool=20a?= =?UTF-8?q?ctually=20loads,=20pi=200.83.0=20audited=20clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Headline is the fork-guard fix (the `fork` tool had never loaded since v1.0.0 because the registration guard grepped the whole settings.json and matched the pi-fork *config block* the template merge itself plants). pi 0.82.1 -> 0.83.0 is a clean hop with no intermediates. 0.83.0 carries an upstream Breaking Change (bundled TypeBox 1.1.38 -> 1.3.7, deprecated APIs removed) that cannot reach us: pi-fork vendors @sinclair/typebox (a different package name), obsmem's use is type-only, studio and atelier don't use TypeBox. Verified from source rather than from the audit narrative: extension-facing dist/core/extensions/*.d.ts declarations diff clean between the two versions, all six CLI flags pi-fork passes to child processes are present, and SESSION_VERSION is 3 in both so transcript tooling is unaffected. No PI_VERSION pin needed. Recorded for the release notes: the Bedrock poison pill is NOT fixed in pi-ai 0.83.0 (unsanitised input: c.arguments moved 634 -> 644), so pi-session-repair stays the recovery path. --- CHANGELOG.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bad02a6..dca7ece 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,11 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). --- -## Unreleased +## v1.6.4 — 2026-07-30 + +Patch release. Headline: **the `fork` tool has never once loaded since v1.0.0** +and now does — plus pi `0.82.1` → `0.83.0`, audited clean against every baked +extension. ### Fixed @@ -54,6 +58,58 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). ### Changed +- **pi `0.82.1` → `0.83.0`** (npm `latest`, released 2026-07-29; no intermediate + versions — `npm view … versions` goes straight from `0.82.1` to `0.83.0`). + Variant-only rebuild: pi is installed in `Dockerfile.variant`, so the + content-addressed `base-` is unaffected. + + **0.83.0 ships a Breaking Change, and it cannot reach this image.** Upstream: + + > Upgraded bundled TypeBox aliases to 1.3.7, removing deprecated APIs + > including `Type.Base`, `Type.Awaited`, `Type.Promise`, `Type.AsyncIterator`, + > `Type.Iterator`, `Type.Options`, and `Value.Mutate`, while fixing compiled + > validation of nullable array tool arguments. Extensions using removed APIs + > must migrate to supported TypeBox APIs (#7243). + + Audited per baked extension: **`pi-fork`** vendors its own + `@sinclair/typebox@0.34.52` — a *differently named* package than the `typebox` + pi bundles (1.1.38 → 1.3.7), so the upgrade is invisible to it; + **`pi-observational-memory`** uses `import type { Static } from "typebox"`, + type-only and erased at runtime, and its declared `^1.1.38` admits 1.3.7; + **`pi-studio`** and **`pi-atelier`** use TypeBox not at all. A grep for + `Type.(Base|Awaited|Promise|AsyncIterator|Iterator|Options)|Value.Mutate` + across all four returns **zero hits**. Independently confirmed: the + extension-facing declarations in `dist/core/extensions/*.d.ts` are + **byte-identical** between 0.82.1 and 0.83.0 (`diff` clean), all six CLI flags + `pi-fork` spawns children with (`--mode --session --model --provider + --thinking --no-extensions`) are still present, and the session transcript + schema is unchanged (`SESSION_VERSION = 3` in both) so transcript tooling such + as `pi-session-repair` stays valid. **No `PI_VERSION` pin was needed.** + + Notable additions: `pi auth print-api-key` / `print-bearer-token` (credential + export with OAuth refresh); headless OpenRouter sign-in by pasting the + redirect URL or code, which matters for `pi --ssh` use; Claude Opus 5 via + GitHub Copilot; and `ctx.scopedModels` exposed to extensions. + + Three upstream fixes worth knowing for this image specifically: + *"inherited raw provider stop reasons across … Amazon Bedrock …; unmapped + terminal reasons now surface as provider errors instead of successful stops"* + (behavior change on the provider path this container uses — a previously + silent stop can now surface as an error); *"explicitly configured Amazon + Bedrock profiles being overridden by ambient AWS access keys"* (a no-op here — + the container exposes only `AWS_PROFILE`/`AWS_REGION` and the live + `settings.json` has no `providers.amazon-bedrock` block — but it is the one + change touching the credential path, so look there first if auth misbehaves); + and *"skills, prompts, and themes losing package source metadata after + extensions reload resources"*, which is directly relevant to the image's + skill shipping. + + **Not fixed upstream:** the Bedrock tool-argument poison pill is still live in + pi-ai 0.83.0 — `toolUse: { toolUseId, name, input: c.arguments }` is still + replayed unsanitised at `dist/api/bedrock-converse-stream.js:644` (it was + line 634 in 0.82.1; the file still has zero empty-member-name sanitisation). + `pi-session-repair` (in `cli_utils`) remains the recovery path. + - **Settings template now defaults to Claude Opus 5** (`pi-toolkit` @ `926f738`). `settings.example.json` — the file `entrypoint-user.sh` bootstraps `~/.pi/agent/settings.json` from — moves `defaultModel` and the `pi-fork`