chore: bump @earendil-works/pi to 0.81.1 (#2399)

## Summary
- Bump `@earendil-works/pi-ai` and `@earendil-works/pi-coding-agent`
from **0.80.10 → 0.81.1** (exact matched pins).
- Update `pnpm-workspace.yaml` overrides so floating `*` consumers
(`droid-cli`, `pi-llama-cpp`, runtime plugins) stay on the same
ModelRuntime surface.
- Refresh pin-guard tests, package-config assertions, and FNXC notes for
the new pin.

## What's new in pi 0.81.x
- Qwen Token Plan providers
- Expanded usage accounting (tools/compaction/branch summaries)
- Resilient compaction retries + retry lifecycle events
- Full provider-extension registration API
- Built-in llama.cpp router management
- Provider/catalog fixes (Bedrock env credentials, OpenAI Responses
early-stream retry, Codex 272K defaults, extension stream-fallback
restore)

## Test plan
- [x] `scripts/check-pi-versions-pinned` (4/4)
- [x] Typecheck: core, engine, dashboard, cli, pi-claude-cli
- [x] `package-config.test.ts` (35)
- [x] `provider-registration.test.ts` (14)
- [x] `auth-storage-concurrency` + `model-registry-refresh` (15)
- [x] `register-model-routes-kimi-k3-supplemental` (1)
- [ ] CI gate green
- [ ] Spot-check Anthropic OAuth + API key session
- [ ] Spot-check openai-codex model picker / supplemental models

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Updates**
  * Updated the bundled Pi runtime to version 0.81.1.
* Added support for newer models and providers, including Qwen Token
Plan.
  * Improved usage accounting and session reliability.
* Strengthened compaction retry handling and provider catalog accuracy.
  * Added support for the expanded maximum thinking level.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
gsxdsm
2026-07-22 01:32:14 -07:00
committed by GitHub
parent ddb5c5eca4
commit 241a5c94ea
15 changed files with 528 additions and 469 deletions

View File

@@ -0,0 +1,7 @@
---
"@runfusion/fusion": patch
---
summary: Bump the bundled pi runtime to 0.81.1 for newer models, providers, and session reliability.
category: internal
dev: Pins @earendil-works/pi-ai and @earendil-works/pi-coding-agent from 0.80.10 to 0.81.1 (exact matched set + pnpm-workspace overrides). Brings Qwen Token Plan, expanded usage accounting, resilient compaction retries, and provider/catalog fixes.

View File

@@ -64,8 +64,8 @@
},
"dependencies": {
"@agentclientprotocol/sdk": "0.24.0",
"@earendil-works/pi-ai": "0.80.10",
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-ai": "0.81.1",
"@earendil-works/pi-coding-agent": "0.81.1",
"claude-code-cli-acp": "0.1.1",
"dockerode": "^4.0.12",
"electron": "^33.4.11",

View File

@@ -56,7 +56,7 @@ function assertRuntimeDepsAreNotOptionalPeers(pkg: any, label: string): void {
for (const dependencyName of ["@earendil-works/pi-coding-agent", "@earendil-works/pi-ai"]) {
expect(dependencies, `${label}: ${dependencyName} must remain a required runtime dependency`).toHaveProperty(
dependencyName,
"0.80.10",
"0.81.1",
);
expect(dependencies[dependencyName], `${label}: ${dependencyName} must be a clean exact semver`).toMatch(
EXACT_SEMVER,

View File

@@ -46,7 +46,7 @@
"test:pg-gate": "vitest run --config vitest.pg.config.ts src/__tests__/postgres/handoff-to-review-atomicity.pg.test.ts src/__tests__/postgres/store-list.pg.test.ts src/__tests__/postgres/task-lifecycle-e2e.pg.test.ts src/__tests__/postgres/soft-delete-resurrection-FN-5233.pg.test.ts src/__tests__/postgres/agent-logs-and-monitor.pg.test.ts src/__tests__/postgres/todo-store.pg.test.ts src/__tests__/postgres/workflow-definitions.pg.test.ts src/__tests__/postgres/message-store.pg.test.ts src/__tests__/postgres/insight-store.pg.test.ts src/__tests__/postgres/insight-run-execution.pg.test.ts src/__tests__/postgres/research-store.pg.test.ts src/__tests__/postgres/mission-store.pg.test.ts src/__tests__/postgres/goal-store.pg.test.ts src/__tests__/postgres/artifacts-documents-evals.pg.test.ts src/__tests__/postgres/command-center-analytics.pg.test.ts src/__tests__/postgres/command-center-remaining-analytics.pg.test.ts src/__tests__/postgres/research-execution.pg.test.ts src/__tests__/postgres/async-store-events.pg.test.ts src/__tests__/postgres/signal-ingestion.pg.test.ts src/__tests__/postgres/mission-autopilot.pg.test.ts src/__tests__/postgres/workflow-create.pg.test.ts src/__tests__/postgres/monitor-trait-storm-guard.pg.test.ts src/__tests__/postgres/agent-wake-getagent.pg.test.ts --silent=passed-only --reporter=dot"
},
"devDependencies": {
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-coding-agent": "0.81.1",
"@types/dockerode": "^3.3.41",
"@types/node": "^25.5.0",
"@vitest/coverage-v8": "^4.1.0",

View File

@@ -106,7 +106,7 @@
"@codemirror/state": "^6.5.2",
"@codemirror/theme-one-dark": "^6.1.2",
"@codemirror/view": "^6.36.4",
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-coding-agent": "0.81.1",
"@fusion-plugin-examples/claude-runtime": "workspace:*",
"@fusion-plugin-examples/cli-printing-press": "workspace:*",
"@fusion-plugin-examples/compound-engineering": "workspace:*",

View File

@@ -6,7 +6,7 @@ import { registerModelRoutes } from "../routes/register-model-routes.js";
/*
FNXC:ModelCatalog 2026-07-16-19:05:
FN-8180 requires Kimi K3 to reach both model-catalog consumers. This route-level
coverage uses pi 0.80.10's actual built-in ModelRuntime catalog after refresh, so an
coverage uses pi 0.81.1's actual built-in ModelRuntime catalog after refresh, so an
SDK catalog regression cannot leave the Dashboard dropdown missing K3 while the engine
registry test remains green.
*/

View File

@@ -38,8 +38,8 @@
"test:watch": "vitest src/__tests__/executor-*.test.ts --watch"
},
"dependencies": {
"@earendil-works/pi-ai": "0.80.10",
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-ai": "0.81.1",
"@earendil-works/pi-coding-agent": "0.81.1",
"@fusion/core": "workspace:*",
"@fusion/pi-claude-cli": "workspace:*",
"@modelcontextprotocol/sdk": "^1.0.0",

View File

@@ -129,7 +129,7 @@ describe("seedDashboardProviders", () => {
it("keeps native Kimi K3 available through the installed pi model registry", async () => {
// FNXC:ModelCatalog 2026-07-16-19:05: FN-8180 requires catalog coverage to
// exercise pi's real 0.80.10 built-in registry, not a hand-written Kimi fixture.
// exercise pi's real 0.81.1 built-in registry, not a hand-written Kimi fixture.
const modelRegistry = await createInMemoryModelRegistry();
await modelRegistry.refresh();

View File

@@ -224,9 +224,9 @@ plus a per-provider read-modify-merge (FileAuthStorageBackend.persistProviderCha
refreshOAuthTokenWithLock re-read the file under a lock and spread
{...currentData, [provider]: credential} rather than flushing a whole-file in-memory
snapshot). packages/engine/package.json already floors this at
"@earendil-works/pi-coding-agent": "^0.80.3" (caret bounds it to >=0.80.3 <0.81.0, which is
where this locked per-provider merge landed) — do not downgrade below 0.80.x, and re-verify
this comment against dist/core/auth-storage.js if the range is ever widened. See
"@earendil-works/pi-coding-agent": "0.81.1" (exact pin; locked per-provider merge requires
>=0.80.3) — do not downgrade below 0.80.x, and re-verify this comment against
dist/core/auth-storage.js if the pin is ever lowered. See
packages/engine/src/__tests__/auth-storage-concurrency.test.ts for the regression coverage.
*/

View File

@@ -2534,9 +2534,15 @@ export async function createFnAgent(options: AgentOptions): Promise<AgentResult>
}
/*
FNXC:ModelCatalog 2026-07-16-18:00:
pi 0.80.10's createAgentSession accepts an optional options parameter, but Fusion
constructs and augments an options object before dispatch. Narrow away undefined so
the ModelRuntime-capable SDK contract remains type-safe as tool allowlists are added.
createAgentSession accepts an optional options parameter; Fusion constructs and augments
an options object before dispatch. Narrow away undefined so the ModelRuntime-capable SDK
contract remains type-safe as tool allowlists are added.
FNXC:ModelCatalog 2026-07-22-12:00:
Bumped @earendil-works/pi-ai and pi-coding-agent from 0.80.10 to 0.81.1 (exact matched pin).
0.81 adds full provider extensions, expanded usage accounting, Qwen Token Plan, llama.cpp
router management, and resilient compaction retries; Fusion session creation stays on the
ModelRuntime path already adopted in 0.80.8.
*/
const createSessionOptions: NonNullable<Parameters<typeof createAgentSession>[0]> = {
cwd: options.cwd,

View File

@@ -23,12 +23,12 @@
"@agentclientprotocol/sdk": "0.24.0"
},
"peerDependencies": {
"@earendil-works/pi-ai": "0.80.10",
"@earendil-works/pi-coding-agent": "0.80.10"
"@earendil-works/pi-ai": "0.81.1",
"@earendil-works/pi-coding-agent": "0.81.1"
},
"devDependencies": {
"@earendil-works/pi-ai": "0.80.10",
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-ai": "0.81.1",
"@earendil-works/pi-coding-agent": "0.81.1",
"@types/node": "^22.0.0",
"typescript": "^5.7.0",
"vitest": "^4.1.0"

View File

@@ -6,7 +6,7 @@
* becomes high and high becomes max, leveraging their superior reasoning capability.
*
* FNXC:DroidThinking 2026-07-16-18:20:
* Fusion now resolves pi 0.80.10 workspace-wide, whose ThinkingLevel adds `max`.
* Fusion now resolves pi 0.81.1 workspace-wide, whose ThinkingLevel includes `max`.
* Keep both exhaustive mappings explicit: non-Opus must still avoid the CLI's max
* effort, while Opus may use it.
*

930
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -21,8 +21,10 @@ overrides:
# FNXC:ModelCatalog 2026-07-16-18:15: Keep floating @fusion/droid-cli and
# @fusion/pi-llama-cpp imports on the ModelRuntime-capable pi SDK so the
# workspace cannot resolve conflicting pi type surfaces.
'@earendil-works/pi-ai': 0.80.10
'@earendil-works/pi-coding-agent': 0.80.10
# FNXC:ModelCatalog 2026-07-22-12:00: Bumped workspace override pin 0.80.10 → 0.81.1
# to match guarded package manifests (cli/core/engine/dashboard/pi-claude-cli).
'@earendil-works/pi-ai': 0.81.1
'@earendil-works/pi-coding-agent': 0.81.1
# FNXC:DesktopEmbeddedPostgres 2026-07-14-09:30:
# Desktop release jobs cross-build Intel and ARM64 artifacts on one host. Install
# optional native payloads for both CPU families on the current OS so each

View File

@@ -7,8 +7,8 @@ import {
const pinnedManifest = {
dependencies: {
"@earendil-works/pi-ai": "0.80.10",
"@earendil-works/pi-coding-agent": "0.80.10",
"@earendil-works/pi-ai": "0.81.1",
"@earendil-works/pi-coding-agent": "0.81.1",
},
};
@@ -22,7 +22,7 @@ describe("check-pi-versions-pinned", () => {
});
it("rejects caret, tilde, wildcard, x, and comparator ranges", () => {
for (const version of ["^0.80.10", "~0.80.10", "*", "0.80.x", ">=0.80.10"]) {
for (const version of ["^0.81.1", "~0.81.1", "*", "0.81.x", ">=0.81.1"]) {
const violations = validate({
...pinnedManifest,
dependencies: { ...pinnedManifest.dependencies, "@earendil-works/pi-ai": version },
@@ -34,7 +34,7 @@ describe("check-pi-versions-pinned", () => {
it("rejects a matched-set version mismatch", () => {
const violations = validate({
...pinnedManifest,
dependencies: { ...pinnedManifest.dependencies, "@earendil-works/pi-coding-agent": "0.80.11" },
dependencies: { ...pinnedManifest.dependencies, "@earendil-works/pi-coding-agent": "0.81.2" },
});
assert.equal(violations.some((violation) => violation.includes("same exact version")), true);
});