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:
7
.changeset/bump-pi-0-81-1.md
Normal file
7
.changeset/bump-pi-0-81-1.md
Normal 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.
|
||||||
@@ -64,8 +64,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@agentclientprotocol/sdk": "0.24.0",
|
"@agentclientprotocol/sdk": "0.24.0",
|
||||||
"@earendil-works/pi-ai": "0.80.10",
|
"@earendil-works/pi-ai": "0.81.1",
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10",
|
"@earendil-works/pi-coding-agent": "0.81.1",
|
||||||
"claude-code-cli-acp": "0.1.1",
|
"claude-code-cli-acp": "0.1.1",
|
||||||
"dockerode": "^4.0.12",
|
"dockerode": "^4.0.12",
|
||||||
"electron": "^33.4.11",
|
"electron": "^33.4.11",
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ function assertRuntimeDepsAreNotOptionalPeers(pkg: any, label: string): void {
|
|||||||
for (const dependencyName of ["@earendil-works/pi-coding-agent", "@earendil-works/pi-ai"]) {
|
for (const dependencyName of ["@earendil-works/pi-coding-agent", "@earendil-works/pi-ai"]) {
|
||||||
expect(dependencies, `${label}: ${dependencyName} must remain a required runtime dependency`).toHaveProperty(
|
expect(dependencies, `${label}: ${dependencyName} must remain a required runtime dependency`).toHaveProperty(
|
||||||
dependencyName,
|
dependencyName,
|
||||||
"0.80.10",
|
"0.81.1",
|
||||||
);
|
);
|
||||||
expect(dependencies[dependencyName], `${label}: ${dependencyName} must be a clean exact semver`).toMatch(
|
expect(dependencies[dependencyName], `${label}: ${dependencyName} must be a clean exact semver`).toMatch(
|
||||||
EXACT_SEMVER,
|
EXACT_SEMVER,
|
||||||
|
|||||||
@@ -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"
|
"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": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10",
|
"@earendil-works/pi-coding-agent": "0.81.1",
|
||||||
"@types/dockerode": "^3.3.41",
|
"@types/dockerode": "^3.3.41",
|
||||||
"@types/node": "^25.5.0",
|
"@types/node": "^25.5.0",
|
||||||
"@vitest/coverage-v8": "^4.1.0",
|
"@vitest/coverage-v8": "^4.1.0",
|
||||||
|
|||||||
@@ -106,7 +106,7 @@
|
|||||||
"@codemirror/state": "^6.5.2",
|
"@codemirror/state": "^6.5.2",
|
||||||
"@codemirror/theme-one-dark": "^6.1.2",
|
"@codemirror/theme-one-dark": "^6.1.2",
|
||||||
"@codemirror/view": "^6.36.4",
|
"@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/claude-runtime": "workspace:*",
|
||||||
"@fusion-plugin-examples/cli-printing-press": "workspace:*",
|
"@fusion-plugin-examples/cli-printing-press": "workspace:*",
|
||||||
"@fusion-plugin-examples/compound-engineering": "workspace:*",
|
"@fusion-plugin-examples/compound-engineering": "workspace:*",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { registerModelRoutes } from "../routes/register-model-routes.js";
|
|||||||
/*
|
/*
|
||||||
FNXC:ModelCatalog 2026-07-16-19:05:
|
FNXC:ModelCatalog 2026-07-16-19:05:
|
||||||
FN-8180 requires Kimi K3 to reach both model-catalog consumers. This route-level
|
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
|
SDK catalog regression cannot leave the Dashboard dropdown missing K3 while the engine
|
||||||
registry test remains green.
|
registry test remains green.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -38,8 +38,8 @@
|
|||||||
"test:watch": "vitest src/__tests__/executor-*.test.ts --watch"
|
"test:watch": "vitest src/__tests__/executor-*.test.ts --watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@earendil-works/pi-ai": "0.80.10",
|
"@earendil-works/pi-ai": "0.81.1",
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10",
|
"@earendil-works/pi-coding-agent": "0.81.1",
|
||||||
"@fusion/core": "workspace:*",
|
"@fusion/core": "workspace:*",
|
||||||
"@fusion/pi-claude-cli": "workspace:*",
|
"@fusion/pi-claude-cli": "workspace:*",
|
||||||
"@modelcontextprotocol/sdk": "^1.0.0",
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ describe("seedDashboardProviders", () => {
|
|||||||
|
|
||||||
it("keeps native Kimi K3 available through the installed pi model registry", async () => {
|
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
|
// 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();
|
const modelRegistry = await createInMemoryModelRegistry();
|
||||||
await modelRegistry.refresh();
|
await modelRegistry.refresh();
|
||||||
|
|
||||||
|
|||||||
@@ -224,9 +224,9 @@ plus a per-provider read-modify-merge (FileAuthStorageBackend.persistProviderCha
|
|||||||
refreshOAuthTokenWithLock re-read the file under a lock and spread
|
refreshOAuthTokenWithLock re-read the file under a lock and spread
|
||||||
{...currentData, [provider]: credential} rather than flushing a whole-file in-memory
|
{...currentData, [provider]: credential} rather than flushing a whole-file in-memory
|
||||||
snapshot). packages/engine/package.json already floors this at
|
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
|
"@earendil-works/pi-coding-agent": "0.81.1" (exact pin; locked per-provider merge requires
|
||||||
where this locked per-provider merge landed) — do not downgrade below 0.80.x, and re-verify
|
>=0.80.3) — do not downgrade below 0.80.x, and re-verify this comment against
|
||||||
this comment against dist/core/auth-storage.js if the range is ever widened. See
|
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.
|
packages/engine/src/__tests__/auth-storage-concurrency.test.ts for the regression coverage.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -2534,9 +2534,15 @@ export async function createFnAgent(options: AgentOptions): Promise<AgentResult>
|
|||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
FNXC:ModelCatalog 2026-07-16-18:00:
|
FNXC:ModelCatalog 2026-07-16-18:00:
|
||||||
pi 0.80.10's createAgentSession accepts an optional options parameter, but Fusion
|
createAgentSession accepts an optional options parameter; Fusion constructs and augments
|
||||||
constructs and augments an options object before dispatch. Narrow away undefined so
|
an options object before dispatch. Narrow away undefined so the ModelRuntime-capable SDK
|
||||||
the ModelRuntime-capable SDK contract remains type-safe as tool allowlists are added.
|
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]> = {
|
const createSessionOptions: NonNullable<Parameters<typeof createAgentSession>[0]> = {
|
||||||
cwd: options.cwd,
|
cwd: options.cwd,
|
||||||
|
|||||||
@@ -23,12 +23,12 @@
|
|||||||
"@agentclientprotocol/sdk": "0.24.0"
|
"@agentclientprotocol/sdk": "0.24.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-ai": "0.80.10",
|
"@earendil-works/pi-ai": "0.81.1",
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10"
|
"@earendil-works/pi-coding-agent": "0.81.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-ai": "0.80.10",
|
"@earendil-works/pi-ai": "0.81.1",
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10",
|
"@earendil-works/pi-coding-agent": "0.81.1",
|
||||||
"@types/node": "^22.0.0",
|
"@types/node": "^22.0.0",
|
||||||
"typescript": "^5.7.0",
|
"typescript": "^5.7.0",
|
||||||
"vitest": "^4.1.0"
|
"vitest": "^4.1.0"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* becomes high and high becomes max, leveraging their superior reasoning capability.
|
* becomes high and high becomes max, leveraging their superior reasoning capability.
|
||||||
*
|
*
|
||||||
* FNXC:DroidThinking 2026-07-16-18:20:
|
* 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
|
* Keep both exhaustive mappings explicit: non-Opus must still avoid the CLI's max
|
||||||
* effort, while Opus may use it.
|
* effort, while Opus may use it.
|
||||||
*
|
*
|
||||||
|
|||||||
930
pnpm-lock.yaml
generated
930
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -21,8 +21,10 @@ overrides:
|
|||||||
# FNXC:ModelCatalog 2026-07-16-18:15: Keep floating @fusion/droid-cli and
|
# 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
|
# @fusion/pi-llama-cpp imports on the ModelRuntime-capable pi SDK so the
|
||||||
# workspace cannot resolve conflicting pi type surfaces.
|
# workspace cannot resolve conflicting pi type surfaces.
|
||||||
'@earendil-works/pi-ai': 0.80.10
|
# FNXC:ModelCatalog 2026-07-22-12:00: Bumped workspace override pin 0.80.10 → 0.81.1
|
||||||
'@earendil-works/pi-coding-agent': 0.80.10
|
# 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:
|
# FNXC:DesktopEmbeddedPostgres 2026-07-14-09:30:
|
||||||
# Desktop release jobs cross-build Intel and ARM64 artifacts on one host. Install
|
# 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
|
# optional native payloads for both CPU families on the current OS so each
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
|
|
||||||
const pinnedManifest = {
|
const pinnedManifest = {
|
||||||
dependencies: {
|
dependencies: {
|
||||||
"@earendil-works/pi-ai": "0.80.10",
|
"@earendil-works/pi-ai": "0.81.1",
|
||||||
"@earendil-works/pi-coding-agent": "0.80.10",
|
"@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", () => {
|
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({
|
const violations = validate({
|
||||||
...pinnedManifest,
|
...pinnedManifest,
|
||||||
dependencies: { ...pinnedManifest.dependencies, "@earendil-works/pi-ai": version },
|
dependencies: { ...pinnedManifest.dependencies, "@earendil-works/pi-ai": version },
|
||||||
@@ -34,7 +34,7 @@ describe("check-pi-versions-pinned", () => {
|
|||||||
it("rejects a matched-set version mismatch", () => {
|
it("rejects a matched-set version mismatch", () => {
|
||||||
const violations = validate({
|
const violations = validate({
|
||||||
...pinnedManifest,
|
...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);
|
assert.equal(violations.some((violation) => violation.includes("same exact version")), true);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user