Releases: earendil-works/pi
Release list
v0.84.1
New Features
- Qwen Token Plan Individual — Use the built-in provider for models documented for Individual subscriptions. See API Keys.
- Authentication readiness checks — Use
pi auth checkto verify provider or model credentials, optionally emitting the resolved credential. - Improved fullscreen interaction — Select words and paragraphs with multiple clicks and configure half-page transcript scrolling. See TUI Fullscreen Viewport.
- Terminating blocked tool calls — Extension
tool_callhandlers can stop all-terminating batches without another model call. See Tool Events.
Added
- Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international
QWEN_TOKEN_PLAN_API_KEY. See API Keys (#7659 by @arasovic). - Added
pi auth checkprovider/model auth preflight with optional credential output (#7152). - Added
terminatesupport to blocked extensiontool_callevents so all-terminating batches can skip the automatic follow-up model call. See Tool Events (#7715 by @muyiyr). - Added inherited double-click word and whitespace selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode (#7725, #7733 by @volsa).
- Added inherited unbound half-page transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#7735).
Changed
- Softened the bash tool's
PI_*environment guideline in an attempt to reduce unnecessary inspection commands (#7128). - Reduced worst-case automatic terminal theme detection delay from 200 ms to 100 ms by probing color-scheme and background support concurrently.
Fixed
- Fixed Bun standalone binaries crashing on startup when the cwd contains a
bunfig.tomlwithpreloadby compiling with--no-compile-autoload-bunfig(#7685 by @geril07). - Fixed extension TUI method wrappers recursing indefinitely when delegating to the original method (#7731).
- Fixed right-click not pasting clipboard text in fullscreen mode on Windows.
- Fixed inherited
Agent.reset()clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#7717 by @wesleyzhangwq). - Fixed inherited LaTeX relation, multiplication, and named-operator spacing, and matrix composition with stacked fractions, operator limits, and adjacent matrices.
- Reduced inherited fullscreen mouse event volume under tmux, Zellij, and GNU Screen by using button-motion tracking instead of all-motion tracking.
v0.84.0
New Features
- Fullscreen TUI mode — Switch between regular and fullscreen modes at runtime, with a sticky editor and footer, independently scrollable transcript, and draggable scrollbars. See UI & Display.
- Mermaid and LaTeX rendering — Render Mermaid diagrams and terminal-friendly Unicode math in interactive transcripts. See Markdown settings and TUI Markdown.
- Per-directory context overrides — Use
AGENTS.override.mdto replace context files for a specific directory. See Context Files. - Advanced custom model sampling — Configure arbitrary OpenAI-compatible
samplingParamsand opt-in vLLMthinking_token_budgetvalues. See Sampling Parameters. - Baseten provider — Use built-in Baseten authentication and model support. See API Keys.
Breaking Changes
-
Renamed the inherited pi-ai
ModelsStreamTransformsinterface toModelsRequestTransformsbecause its header transformation now applies to all authenticated provider requests. -
Changed JSON and RPC
message_updateevents to emit onlyassistantMessageEventdeltas, removing the cumulativemessageandassistantMessageEvent.partialfields that caused quadratic output growth. Clients that need partial messages must assemble deltas betweenmessage_startandmessage_end; the latter remains authoritative (#7290). -
ModelRegistry.getApiKeyAndHeaders()now returnsProviderHeaderswithstring | nullvalues and preservesnullheader-deletion markers. Extensions that inspect returned headers must handlenull; extensions forwarding them to pi-ai streams should pass them through unchanged. This prevents placeholder OpenAI credentials from being sent through Cloudflare AI Gateway (#7030). -
Changed
ModelRegistry.refresh()to acceptModelsRefreshOptionsand returnModelsRefreshResultinstead of discarding cancellation and provider errors. -
Changed
ModelRuntime.setRuntimeApiKey()to accept auth cancellation options rather than catalog refresh options. Callrefresh({ providers: [providerId], signal })separately when remote freshness is required. -
Required config-form extension OAuth
refreshToken(credentials, signal)callbacks to accept and honor a concrete abort signal. -
Replaced dynamic provider refresh context store access with the read-only
context.storedsnapshot and generation-checkedcontext.publish()transaction.Providers built with
createProvider({ fetchModels }): no catalog-publication migration is required. Before and after, return the fetched models and register the resulting provider;createProvider()owns restoration, persistence, and in-memory publication.// Before const beforeProvider = createProvider({ // ... fetchModels: async ({ signal }) => { const response = await fetch(catalogUrl, { signal }); return parseModels(await response.json()); }, }); pi.registerProvider(beforeProvider); // After: unchanged const afterProvider = createProvider({ // ... fetchModels: async ({ signal }) => { const response = await fetch(catalogUrl, { signal }); return parseModels(await response.json()); }, }); pi.registerProvider(afterProvider);
Handwritten native
Provider.refreshModels(): replace direct store access and pre-publication mutation with generation-guarded publications.// Before refreshModels: async (context) => { const stored = await context.store.read(); if (stored) currentModels = stored.models; if (!context.allowNetwork) return; const refreshed = await fetchModels(context.signal); currentModels = refreshed; await context.store.write({ models: refreshed, checkedAt: Date.now() }); }, // After refreshModels: async (context) => { if (context.stored) { const restored = context.stored.models; if (!(await context.publish({ update: () => { currentModels = restored; }, }))) return; } if (!context.allowNetwork) return; const refreshed = await fetchModels(context.signal); if (context.signal.aborted) return; await context.publish({ persist: { models: refreshed, checkedAt: Date.now() }, update: () => { currentModels = refreshed; }, }); },
For the config-form
pi.registerProvider(name, { refreshModels }), callbacks that only return models remain unchanged; pi publishes the returned list. If such a callback previously usedcontext.storefor custom persistence, readcontext.storedand callcontext.publish({ persist: entry }). Inpublish(), omitpersistto leave storage unchanged, pass aModelsStoreEntryto write it, or passpersist: nullto delete it. -
Replaced the inherited pi-agent-core harness session model with the v4 lane-based
Session,SessionStorage, andSessionRepoAPIs, including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views. -
Promoted the inherited v2 session and
AgentHarnessAPI from pi-agent-core's experimental entrypoint to its default export and removed the experimental subpaths. -
Removed the inherited legacy JSONL and in-memory repository APIs. Use pi-agent-core's v4
JsonlSessionRepoorInMemorySessionRepo, both implementing the newSessionRepocontract. -
Added the inherited required pi-agent-core
FileSystem.renameFile()operation for atomic JSONL publication; custom harness file-system implementations must provide same-filesystem replacement semantics (#7707 by @davidbrai). -
Replaced experimental remote-session list summaries with durable
SessionMetadata;RemoteSession.sessionsno longer exposes runtime phase, model, thinking, attachment, or lock state, which remains available from acquiredSessionSnapshotvalues (#7708).
Added
- Added built-in Baseten provider support with
BASETEN_API_KEYauthentication andzai-org/GLM-5.2as the default model. - Added experimental remote-session client APIs: the transport-neutral
PiClient, CBOR protocol, Unix-socket transport, and@earendil-works/pi-coding-agent/clientRemoteSessioncontroller with transcript reducers. See Pi Client and Remote Protocol (#7344, #7348, #7371, #7409). - Added
CredentialSynchronizationErrorfor credential changes that commit successfully but fail to synchronize local model state. - Added chainable
pi.registerMarkdownTransformer()hooks for display-only transformation of user and assistant Markdown. Seepi.registerMarkdownTransformer()(#7231 by @xl0). - Added an experimental fullscreen TUI mode, selectable through
--tui-mode fullscreenor/settings(#7304). - Added runtime switching between regular and fullscreen TUI modes through
/settings. - Added a sticky editor, status, widget, and footer dock to fullscreen mode while keeping the transcript independently scrollable.
- Added a draggable transcript scrollbar to fullscreen mode with configurable
auto,always, andhiddenmodes through/settings;alwaysreserves the rightmost column. - Added page scrolling and marked-message navigation shortcuts to fullscreen mode.
- Added an optional
scrollbarThumbtheme color for fullscreen scrollbar thumbs, falling back toselectedBg. - Added configurable themed Unicode rendering for supported Mermaid diagrams in interactive messages, including optional rendering while streaming. See Markdown settings (#7624 by @xl0).
- Added opt-in
Ctrl+P/Ctrl+Nprompt history navigation, with explicit history bindings taking precedence over application shortcuts while the editor is focused. - Added per-directory
AGENTS.override.mdcontext files, which replaceAGENTS.mdorCLAUDE.mdin the same directory while preserving context from other directories. See Context Files (#7681 by @Marvae). - Added
AI_AGENT=pito CLI and RPC child-process environments for generic agent attribution. See Environment Variables (#7493 by @renaudhartert-db). - Added inherited terminal-friendly Unicode rendering for LaTeX expressions i...
v0.83.0
New Features
- Credential export for external clients —
pi auth print-api-keyandpi auth print-bearer-tokenexport configured credentials with automatic OAuth refresh and minimum-validity enforcement. - Headless OpenRouter sign-in — Complete
/loginover SSH by pasting the redirect URL or authorization code when the loopback callback is unavailable. See OpenRouter. - Claude Opus 5 on GitHub Copilot — Use Claude Opus 5 through GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot.
Breaking Changes
- Upgraded bundled TypeBox aliases to 1.3.7, removing deprecated APIs including
Type.Base,Type.Awaited,Type.Promise,Type.AsyncIterator,Type.Iterator,Type.Options, andValue.Mutate, while fixing compiled validation of nullable array tool arguments. Extensions using removed APIs must migrate to supported TypeBox APIs. See Package Dependencies (#7243 by @petrroll).
Added
- Added
pi auth print-api-keyandpi auth print-bearer-tokencommands for exporting configured credentials to external clients, including automatic OAuth refresh and configurable minimum token validity (#7168). - Exposed the session's resolved model scope as
ctx.scopedModelsto extensions. See Extension Context (#7191 by @pungggi, #7215). - Added inherited per-request
fetchinjection for supported text and image provider transports. - Added the inherited
"pending"stop reason for partial streaming messages. See Custom Provider Stream Pattern (#7151 by @lucasmeijer). - Added inherited raw provider stop reasons across Google, Anthropic, Amazon Bedrock, Mistral, and OpenAI streams; unmapped terminal reasons now surface as provider errors instead of successful stops (#7272).
- Added manual redirect URL and authorization-code entry to OpenRouter login for remote and headless environments. See OpenRouter (#7114 by @rgarcia).
- Added inherited Claude Opus 5 support for GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot (#7158 by @jay-aye-see-kay).
Changed
- Changed inherited OAuth credential resolution to refresh tokens with less than five minutes of validity remaining instead of waiting until expiration (#7168).
Fixed
- Added a status line when the tool output expansion is toggled (#7180).
- Fixed file-backed
SYSTEM.mdandAPPEND_SYSTEM.mdprompts being omitted from the interactive startup context listing. See System Prompt Files (#7096). - Fixed context files loading twice when a linked Git worktree is nested under its main repository. See Context Files (#7221 by @arajkumar).
- Fixed llama.cpp streamed responses reporting zero token usage and leaving session context accounting empty. See llama.cpp (#7258 by @SteveImmanuel).
- Fixed session replacement and committed tree navigation during an active response to abort and persist the outgoing turn instead of leaving dangling tool calls. See Sessions (#7022 by @tmustier).
- Fixed failed Git package installs leaving partial directories that blocked clean retries. See Install and Manage (#7210 by @haoqixu).
- Fixed the
/modelselector retaining a stale selection while filtering instead of highlighting the top match (#7211 by @christianbasch). - Fixed direct RPC bash commands bypassing extension
user_bashhandlers. See User Bash Events (#7214). - Fixed skills, prompts, and themes losing package source metadata after extensions reload resources. See Resource Events (#6968).
- Fixed cancellation of concurrently running user bash commands so every active command is aborted (#7103 by @yzhg1983).
- Fixed duplicate messages appearing when extensions switch sessions during interactive startup (#7110 by @yzhg1983).
- Fixed inherited Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels (#6951, #6998).
- Fixed inherited Z.AI output limits being sent through an unsupported parameter. See Providers (#7174 by @HyeokjaeLee).
- Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys. See Amazon Bedrock (#7176 by @christianbasch).
- Fixed inherited image fallback paths overflowing narrow terminals, shortened home-directory paths, and made absolute paths clickable when terminal hyperlinks are available (#7262).
- Fixed inherited OpenAI-compatible tool calls losing their function arguments when malformed deltas also contain an empty
customobject (#7288 by @sunnyyoung).
v0.82.1
New Features
- Claude Opus 5 — Available on Anthropic and Amazon Bedrock with adaptive thinking (including
xhigh), inference profiles, and prompt caching. See Providers. - Anthropic gateway bearer auth —
ANTHROPIC_AUTH_TOKENauthenticates against Anthropic-compatible gateways that requireAuthorization: Bearer, including compaction and branch summaries. See Environment Variables or Auth File. - Faster, more resilient model catalogs — pi.dev catalogs revalidate with
If-None-Matchso unchanged providers answer with an empty304, and llama.cpp models stay listed across restarts. See llama.cpp.
Added
- Exposed the
outputPadsetting to custom message renderers. See Extensions (#7045 by @xl0). - Added inherited
ANTHROPIC_AUTH_TOKENbearer authentication for Anthropic-compatible gateways. See Providers (#5871). - Added inherited Claude Opus 5 support for Anthropic and Amazon Bedrock with adaptive thinking, inference profiles, prompt caching, and preserved AWS validation messages (#7081 by @unexge, #7083 by @davidbrai).
Changed
- Changed pi.dev model catalog refreshes to revalidate with
If-None-Match, so unchanged provider catalogs answer with an empty304instead of a full download. - Changed inherited Radius OAuth device authorization, token exchange, and refresh requests to use the configured gateway directly.
- Changed inherited model loading errors to append the underlying cause, so auth failures such as
OAuth refresh failed for openai-codexreport the provider response instead of a bare wrapper message.
Fixed
- Fixed compaction and branch summaries for providers whose authentication resolves entirely to request headers (#5871)
- Fixed unavailable scoped models being hidden from
/models, allowing them to be removed without editing settings manually (#6949, #7032 by @christianklotz). - Fixed startup context file discovery to skip directories that match context file names such as
AGENTS.md, which producedEISDIRwarnings (#7106 by @mrexodia). - Fixed the llama.cpp extension to persist its model catalog, so llama.cpp models stay listed before the first successful refresh. See llama.cpp (#7072 by @davidbrai).
v0.82.0
New Features
- Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. See Constrained Sampling for Tools.
- OpenRouter and Kimi Code sign-in — Use
/loginto authorize OpenRouter or a Kimi Code subscription without manually configuring API keys. See OpenRouter. - Session-aware, streaming bash integrations — Bash tools receive current session/model metadata, while direct RPC bash commands stream correlated output. See Bash Tool Session Environment and RPC bash events.
Added
- Added inherited
Tool.constrainedSamplingwith strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. See Constrained Sampling for Tools. - Added inherited
supportsGrammarToolsandsupportsStrictToolscompatibility flags, expandedsupportsStrictModecoverage, and generated model capability metadata to gate constrained sampling. - Added inherited Kimi Code subscription OAuth login for the Kimi For Coding provider, including device authorization and automatic token refresh (#6935 by @zaycruz).
- Added inherited OpenRouter OAuth PKCE login through
/login, minting a user-controlled API key. See OpenRouter (#6927 by @rsaryev). - Exposed
PI_SESSION_ID,PI_SESSION_FILE,PI_PROVIDER,PI_MODEL, andPI_REASONING_LEVELto commands run by built-in and factory-created bash tools. See Bash Tool Session Environment. - Added streaming
bash_execution_updateevents for direct RPC bash commands, correlated with request IDs. See RPC bash events (#6971 by @ananthakumaran).
Changed
- Changed inherited generated model catalogs to expose only provider-verified reasoning effort levels from models.dev (#6928 by @davidbrai).
Fixed
- Fixed inherited DNS lookup failures such as
getaddrinfo,ENOTFOUND, andEAI_AGAINto trigger automatic assistant retries (#6946 by @christianklotz). - Fixed inherited OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for
~anthropic/*-latestaliases (#6941 by @mteam88). - Fixed inherited OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after
previous_response_not_founderrors (#6955 by @davidbrai). - Fixed TUI debug and crash logs to respect custom agent directories instead of always writing under
~/.pi/agent(#6958 by @davidbrai). - Fixed slow Ctrl+G external-editor startup when the system temporary directory contains many entries (#6903 by @christianklotz).
- Fixed startup resource display to preserve relative paths for sibling npm extensions loaded by a package (#6964 by @davidbrai).
- Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported (#6618 by @tmustier).
- Fixed explicit self-updates when
PI_SKIP_VERSION_CHECKis set (#6977). - Fixed scoped model IDs containing brackets to resolve as literal exact matches before glob matching (#6210).
- Fixed inherited OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits (#6980 by @petrroll).
- Fixed fresh installs from preferring bundled model catalogs over newer remote catalogs because package file mtimes were newer (#7016 by @davidbrai).
- Fixed inherited editor scroll indicators overflowing narrow terminals (#7015 by @christianklotz).
- Fixed llama.cpp models to use the loaded context window as their output token limit instead of capping it at 16K (#7034 by @christianklotz).
- Fixed release source archives to include the generated provider model data used to build standalone binaries.
- Updated the packaged
protobufjsdependency to 7.6.5 to address GHSA-j3f2-48v5-ccww (#7005). - Fixed
/copyon Wayland to fall back to X11 or OSC 52 whenwl-copyfails (#7009 by @rkfshakti). - Fixed
/modelto reload updatedmodels.jsonconfiguration when opening the model picker (#6999).
v0.81.1
New Features
- Verifiable release source archives — GitHub releases now include deterministic, checksummed source archives with instructions for rebuilding standalone binaries. See Building standalone binaries from release source.
- Resilient compaction and branch summaries — Transient provider failures now follow the configured retry policy, with retry lifecycle events available to interactive, JSON, RPC, and SDK consumers. See Compaction & Branch Summarization and RPC retry events.
Added
- Added deterministic, checksummed source archives to GitHub releases with documented standalone binary rebuild instructions (#6913 by @christianklotz).
Fixed
- Fixed compaction and branch summarization to retry transient provider failures using the configured retry policy, with retry lifecycle events exposed to interactive, JSON, RPC, and SDK consumers (#6901 by @davidbrai).
- Fixed interactive startup waiting for background model catalog refresh while computing the footer provider count.
- Restored the default stream fallback for extensions using the pre-0.81 agent-core API (#6915).
- Fixed inherited Kimi K3 models from Moonshot AI and Moonshot AI China to use the OpenAI thinking format and expose reasoning effort support.
v0.81.0
New Features
- Local llama.cpp model management — Connect to a llama.cpp router, search and download Hugging Face models, and explicitly load or unload models with live progress. See llama.cpp.
- Full provider extensions — Extensions can register complete pi-ai providers with authentication, model refresh, filtering, and custom streaming. See Register New Provider.
- Qwen Token Plan providers — Use the built-in international and China subscription providers with regional endpoints and API-key authentication. See API Keys.
- Expanded usage accounting — Tool, compaction, and branch-summary usage is persisted and included in session totals. See Compaction & Branch Summarization.
Added
- Added Qwen Token Plan and Qwen Token Plan China to built-in provider setup, default model resolution, and provider documentation (#6858 by @QuintinShaw).
- Added the
get_available_thinking_levelsRPC command andRpcClient.getAvailableThinkingLevels()method (#6865 by @cristinaponcela). - Exported message and tool execution lifecycle event types from the package root (#6772 by @davidbrai).
- Added built-in llama.cpp router support with
/loginconnection setup and/llamaHugging Face model search and downloads, explicit loading, unloading, and live progress. See llama.cpp. - Added extension registration for complete pi-ai providers, including native authentication, model refresh, filtering, and streaming behavior.
- Added usage accounting for tools, compaction, and branch summaries in persisted sessions, footer totals, and session statistics (#6671 by @davidbrai).
Fixed
- Updated the packaged
brace-expansiondependency to 5.0.7 (#6896 by @davidbrai). - Fixed persisted remote model catalogs from overriding newer bundled catalogs after an upgrade.
- Fixed inherited stored API-key credentials to apply their provider-scoped
envvalues, including Amazon Bedrock profiles (#6864 by @cristinaponcela). - Fixed inherited OpenAI-compatible cross-provider replay to keep tool call IDs unique when multiple calls share a provider call ID (#6854 by @cristinaponcela).
- Fixed inherited Kimi K3 thinking levels to expose low, high, and max, and normalized the
k2p7alias tokimi-for-coding. - Fixed inherited OpenCode Go models routed through the OpenAI Responses API.
- Fixed inherited
pi-aipackage metadata to avoid repeated consumer lockfile changes (#6812 by @jmfederico). - Fixed inherited terminal shutdown to clear the editor's inverted software cursor before restoring the hardware cursor (#6790 by @dam9000).
- Fixed inherited ANSI-aware text wrapping to recognize CRLF and CR line endings while preserving styles (#6764 by @xz-dev).
- Fixed inherited editor paste registry corruption after deleting and undoing paste markers, preventing literal or mismatched paste markers in submitted prompts (#6844).
- Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs (#6834 by @xl0).
- Fixed inherited GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing (#6853 by @aadishv).
- Fixed messages queued during compaction to preserve steering and follow-up delivery behavior (#6730 by @dannote).
- Fixed read tool errors being syntax-highlighted as if they were file contents (#6731 by @dannote).
- Fixed llama.cpp router download progress updates and removed redundant wording from model action confirmations.
- Moved automatic model catalog network refresh out of startup initialization and into the running interactive and RPC modes.
- Fixed persisted sessions being read and parsed twice when opened, reducing startup latency for large sessions (#6793).
- Fixed prompt-template defaults for all arguments (
${@:-default}and${ARGUMENTS:-default}) (#6695). - Fixed obsolete custom UI, custom tool, and custom editor examples in the extension documentation (#6735).
- Fixed Kimi Coding sessions to show API-equivalent implied costs with the subscription indicator.
- Fixed OpenAI Responses early stream endings to trigger automatic retry instead of ending the agent run (#6727).
v0.80.10
New Features
- Kimi Coding thinking compatibility — Kimi Coding models now use adaptive thinking correctly; K3 exposes its supported
maxlevel and supports replaying empty-signature thinking blocks. See Kimi For Coding setup and Model Options.
Fixed
- Fixed inherited Kimi Coding requests to use Anthropic adaptive thinking effort without token budgets, and enabled empty thinking signatures for K3 and
kimi-for-coding. - Fixed inherited Kimi K3 pricing metadata for Moonshot AI and Moonshot AI China.
- Fixed inherited Kimi Coding K3 thinking-level metadata to expose only the supported
maxlevel (#6737). - Fixed inherited catalog generation restoring xAI models removed in 0.80.9 (#6736).
v0.80.9
New Features
- Kimi K3 and deferred tool loading — Use Kimi K3 across built-in providers, including progressive extension tool activation through Kimi’s native protocol. See Dynamic Tool Loading, OpenAI Compatibility, and the
kimi-deferred-tools.tsexample.
Added
- Added inherited Kimi K3 support for Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway.
- Added Kimi deferred tool loading for extension-driven tool activation. See Dynamic Tool Loading, OpenAI Compatibility, and the
kimi-deferred-tools.tsexample.
Changed
- Changed xAI login to use a prefilled device-authorization link labeled “Sign in with SuperGrok or X Premium,” and changed the default xAI model to Grok 4.5 (#6734 by @Jaaneek).
Fixed
- Fixed inherited Kimi K3 output limits for Vercel AI Gateway and OpenRouter models.
- Fixed cloning or forking a session before its first assistant response to explain that the session must be saved first.
Removed
v0.80.8
New Features
- Unified model runtime and provider authentication —
ModelRuntimecentralizes model configuration, provider-owned/login, and dynamic provider catalogs. See Providers. - Live model catalog refresh —
/modelrefreshes configured providers in the background, andpi update --modelsforces an immediate refresh. See Install and Manage. - xAI device-code OAuth and Grok 4.5 Responses support — Sign in to xAI with a device code and use Grok 4.5 with low, medium, or high thinking. See xAI.
Breaking Changes
- Replaced the SDK's
CreateAgentSessionOptions.authStorageandmodelRegistryoptions with the asyncmodelRuntimeoption.AuthStorageand its storage backends are no longer exported; useModelRuntime(or a custom pi-aiCredentialStore), orreadStoredCredential()for one-off reads of auth.json. - Removed redundant
ModelRuntime.getAll(),find(),getSnapshot(), andgetAuthOptions()projections. Use the pi-aiModelsmethodsgetModels(),getModel(),getProviders(), andcheckAuth()directly. - Replaced SDK request-auth assembly through
ModelRegistry.getApiKeyAndHeaders()withModelRuntime.getAuth(). Passing a provider ID returns provider-scoped auth; passing a model also resolves built-in,models.json, and extension model headers. - Changed extension-facing
ModelRegistry.refresh()from synchronousvoidtoPromise<void>becausemodels.jsonloading is asynchronous. Extensions must await it before making synchronous registry reads. - Moved canonical dynamic catalog refresh to async
ModelRuntime.refresh()/pi-aiModels.refresh(). Legacy extension OAuthmodifyModelsremains supported as a synchronous compatibility projection after credential initialization.
Added
- Added
ModelRuntimeas the canonical async SDK and internal model/auth facade while preserving the synchronous extension-facingModelRegistryAPI.ModelRuntime.create()accepts any pi-aiCredentialStorethrough itscredentialsoption. - Added provider-owned
/logindiscovery directly from registered pi-ai providers, including ambient auth status and informational links. - Added file-backed dynamic catalogs in
models-store.json, per-provider pi.dev catalog overlays, and Radius gateway support including offline migration from legacy credential-cached catalogs. - Added extension provider
refreshModels(context)support for dynamic model discovery with optional provider-controlled persistence. - Added
pi update --modelsto force an immediate model catalog refresh without updating pi or extensions. - Added inherited xAI device-code OAuth login and Grok 4.5 OpenAI Responses support, with low, medium, and high thinking levels (#6651 by @Jaaneek).
Changed
- Changed
ModelRuntimeto compose built-in providers, immutablemodels.jsonconfiguration, and extension overlays through ad-hoc pi-ai provider methods. - Changed
ModelRuntimeto own final request assembly:getAuth(model)includes configured model headers, stream methods resolve auth once, andbefore_provider_headersruns as the Models-only header transform before provider dispatch. - Changed
/modelto render the current model snapshot immediately, refresh configured providers in the background, and update the open selector with partial results or timeout errors.
Fixed
- Fixed configured-provider catalog refresh to parse pi.dev's model-ID keyed responses, throttle checks to once per four hours, send the versioned pi user agent, treat unimplemented routes as unavailable overlays, and show concise refresh status in
/model. - Fixed adjacent assistant thinking blocks to render as one thinking section.
- Fixed inherited OpenAI Codex session IDs longer than 64 characters to meet the API limit (#6630).
- Fixed inherited terminal output to normalize tab characters consistently (#6697 by @xz-dev).
- Fixed the Windows terminal title after checking npm packages (#6629).
- Fixed Bun standalone binaries to bundle OAuth adapters for interactive logins.