Update Pi to ^0.83.0 #11

Open
tophattedbot wants to merge 1 commit from renovate/pi into main
Owner

This PR contains the following updates:

Package Change Age Confidence
@earendil-works/pi-agent-core (source) ^0.80.6^0.83.0 age confidence
@earendil-works/pi-ai (source) ^0.80.6^0.83.0 age confidence
@earendil-works/pi-coding-agent (source) ^0.80.6^0.83.0 age confidence
@earendil-works/pi-tui (source) ^0.80.6^0.83.0 age confidence

Release Notes

earendil-works/pi (@​earendil-works/pi-agent-core)

v0.83.0

Compare Source

v0.82.1

Compare Source

v0.82.0

Compare Source

Breaking Changes
  • Replaced AgentHarness's ExecutionEnv dependency and context-free AgentTool inputs with application-defined toolContext values and context-aware AgentHarnessTool definitions.
Added
  • Added context-aware read, write, edit, and bash harness tools backed by ExecutionEnv, including async bash execution preparation.
Changed
  • Aligned harness tool path handling, edit serialization, shell output capture, explicit non-inherited environments, and cross-platform process cleanup with coding-agent behavior.
Fixed
  • Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported (#​6618 by @​tmustier).

v0.81.1

Compare Source

Added
  • Added retry policy support and lifecycle events for compaction and branch-summary operations in AgentHarness (#​6901 by @​davidbrai).
Fixed
  • Restored the Agent streamFn option and host-configurable fallback for omitted agent-loop stream functions without reintroducing a pi-ai/compat dependency (#​6915).

v0.81.0

Compare Source

Breaking Changes
  • Changed SessionStorage to use getPathToRootOrCompaction(), require session name and statistics methods, support cursor-based entry reads, and store retained compaction tails as self-contained checkpoints (#​6594 by @​cristinaponcela).
  • Moved the uuidv7 export to @earendil-works/pi-ai (#​6834 by @​xl0).
  • Replaced the optional Agent streamFn fallback with a required streamFunction and made low-level loop stream functions required, preventing @earendil-works/pi-ai/compat and all built-in providers from entering selective-provider bundles (#​6851).
Added
  • Added usage metadata to tool results, compaction entries, and branch summaries in the agent harness (#​6671 by @​davidbrai).

v0.80.10

Compare Source

v0.80.9

Compare Source

v0.80.8

Compare Source

v0.80.7

Compare Source

Added
  • Added AgentToolResult.addedToolNames propagation to ToolResultMessage so tools introduced by a result can be loaded from that transcript point onward (#​6474).
earendil-works/pi (@​earendil-works/pi-ai)

v0.83.0

Compare Source

Breaking Changes
  • Upgraded the exported TypeBox dependency 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. Consumers using removed APIs must migrate to supported TypeBox APIs (#​7243 by @​petrroll).
Added
  • Added per-request fetch injection for supported text and image provider transports; Google adapters reject non-global implementations rather than silently bypassing them.
  • Added Claude Opus 5 support for the GitHub Copilot provider, routing through the Anthropic Messages API with adaptive thinking, 1M context, and the Copilot minimal thinking-level override (#​7158 by @​jay-aye-see-kay).
  • Added the "pending" stop reason for partial streaming messages. See Stop Reasons (#​7151 by @​lucasmeijer).
  • Added AssistantMessage.rawStopReason and populated it 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 OAuth login for remote and headless environments (#​7114 by @​rgarcia).
  • Added AuthResolutionOverrides.minOAuthValidityMs so callers can require and refresh OAuth credentials with a minimum remaining validity (#​7168).
Changed
  • Changed stored OAuth credentials to refresh when less than five minutes of validity remain instead of waiting until expiration (#​7168).
Fixed
  • Fixed Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels (#​6951, #​6998).
  • Fixed Z.AI providers and compatible custom endpoints to send output limits through max_tokens, which those endpoints honor (#​7174 by @​HyeokjaeLee).
  • Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys (#​7176 by @​christianbasch).
  • Fixed malformed OpenAI-compatible tool-call deltas with both a valid function payload and an empty custom object discarding the function arguments (#​7288 by @​sunnyyoung).

v0.82.1

Compare Source

Added
  • Added ModelsStoreEntry.etag so persisted provider catalogs can carry the remote ETag validator for conditional refreshes.
  • Added ANTHROPIC_AUTH_TOKEN bearer authentication for Anthropic-compatible gateways (#​5871)
  • Added 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 Radius OAuth device authorization, token exchange, and refresh requests to use the configured gateway directly.
  • Changed ModelsError messages to append the underlying cause, so auth failures such as OAuth refresh failed for openai-codex report the provider response instead of a bare wrapper message.

v0.82.0

Compare Source

Breaking Changes
  • Replaced getBuiltinModelDataUrl(provider) with getBuiltinModelDataGeneratedAt() so built-in catalog freshness uses its recorded generation time instead of installation-dependent file metadata (#​7016 by @​davidbrai).
Added
  • Added Kimi Code subscription OAuth login for the kimi-coding provider, with device authorization, token refresh, and OAuth host overrides (#​6935 by @​zaycruz).
  • Added OpenRouter OAuth PKCE login that mints a user-controlled API key for chat and image providers (#​6927 by @​rsaryev).
  • Added Tool.constrainedSampling with strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants, enforcing provider-side constrained tool sampling across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. See Constrained Sampling for Tools.
  • Added supportsGrammarTools and supportsStrictTools compatibility flags, expanded supportsStrictMode to Responses and Bedrock models, and generated model capability metadata to gate constrained sampling.
Changed
  • Changed generated model catalogs to expose only provider-verified reasoning effort levels from models.dev (#​6928 by @​davidbrai).
Fixed
  • Fixed OpenAI Codex cached WebSocket continuations after grammar tool calls to send only the real tool-result delta.
  • Fixed constrained tool sampling across Google, Amazon Bedrock, Mistral, and Azure OpenAI Responses adapters, including model-aware strict-tool capabilities, grammar configuration validation, and malformed grammar-call replay errors.
  • Fixed cacheRetention: "none" to disable implicit prompt-cache writes for supported OpenAI models and session-based caching for OpenAI Codex (#​6618 by @​tmustier).
  • Fixed DNS lookup failures such as getaddrinfo, ENOTFOUND, and EAI_AGAIN to trigger automatic assistant retries (#​6946 by @​christianklotz).
  • Fixed OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after previous_response_not_found errors (#​6955 by @​davidbrai).
  • Fixed OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits (#​6980 by @​petrroll).
  • Fixed OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for ~anthropic/*-latest aliases (#​6941 by @​mteam88).

v0.81.1

Compare Source

Added
  • Added retryAssistantCall() for bounded retries of transient assistant failures with lifecycle callbacks and abort handling (#​6901 by @​davidbrai).
Fixed
  • Fixed Kimi K3 models from Moonshot AI and Moonshot AI China to use the OpenAI thinking format and expose reasoning effort support.

v0.81.0

Compare Source

Added
  • Added Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints, API-key authentication, and generated model catalogs (#​6858 by @​QuintinShaw).
  • Added contentText for extracting joined text from message content (#​6840 by @​xl0).
  • Added a shared uuidv7 utility for time-ordered identifiers (#​6834 by @​xl0).
  • Added optional usage metadata to tool result messages (#​6671 by @​davidbrai).
Changed
  • Changed generated model catalogs to keep TypeScript model shapes separate from ignored JSON model values, reducing generated source churn (#​6765 by @​mitsuhiko).
  • Changed model generation to validate ignored provider data before compilation; npm run build refreshes model data as before, while npm run build:offline reuses existing data without network access.
Fixed
  • Fixed stored API-key credentials to apply their provider-scoped env values during auth resolution, including Amazon Bedrock profiles (#​6864 by @​cristinaponcela).
  • Fixed OpenAI-compatible cross-provider replay to preserve unique tool call IDs when multiple calls share a provider call ID (#​6854 by @​cristinaponcela).
  • Fixed Kimi K3 to expose its supported low, high, and max thinking levels, and normalized the k2p7 alias to the canonical kimi-for-coding model.
  • Fixed the OpenCode Go provider to support models routed through the OpenAI Responses API.
  • Fixed the pi-ai executable path to match npm registry metadata, avoiding repeated consumer lockfile changes (#​6812 by @​jmfederico).
  • Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs, enabling models that reject UUIDv4 IDs (#​6834 by @​xl0).
  • Fixed GitHub Copilot long-context pricing tiers in generated model metadata (#​6668).
  • Fixed Kimi Coding subscription models to report API-equivalent implied costs when models.dev reports zero pricing.
  • Fixed OpenAI Responses early stream endings to be classified as retryable provider errors (#​6727).
  • Fixed GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing (#​6853 by @​aadishv).

v0.80.10

Compare Source

Fixed
  • Fixed Kimi Coding requests to use Anthropic adaptive thinking effort without token budgets, and enabled empty thinking signatures for K3 and kimi-for-coding.
  • Fixed Kimi K3 pricing metadata for Moonshot AI and Moonshot AI China.
  • Fixed Kimi Coding K3 thinking-level metadata to expose only the supported max level (#​6737).
  • Fixed catalog generation restoring xAI models removed in 0.80.9 (#​6736).

v0.80.9

Compare Source

Added
  • Added Kimi K3 support for Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway.
  • Added Kimi deferred tool loading to OpenAI-compatible Chat Completions through compat.deferredToolsMode.
Changed
  • Changed xAI device OAuth to open a prefilled authorization link and added provider-specific OAuth login labels (#​6734 by @​Jaaneek).
Fixed
  • Fixed Kimi K3 output limits for Vercel AI Gateway and OpenRouter models.
Removed
  • Removed Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 from the built-in xAI model catalog (#​6734 by @​Jaaneek).

v0.80.8

Compare Source

Breaking Changes
  • Changed runtime authentication to provider-scoped Models.checkAuth(), getAuth(), login(), and logout() APIs. checkAuth() now returns AuthCheck | undefined, and API-key auth resolvers no longer receive a model.
  • Removed the legacy built-in OAuth provider objects, global OAuth registry APIs, and public low-level built-in login/refresh functions. Use canonical Provider.auth.oauth methods instead; the oauth subpath now retains only extension compatibility types.
  • Renamed the canonical login interaction interface from AuthLoginCallbacks to AuthInteraction; it exposes the provider-neutral prompt()/notify() protocol used by API-key and OAuth flows.
  • Changed the Models request contract: getAuth(model) now includes model headers, while getAuth(providerId) remains provider-scoped, and Models stream options may include transformHeaders. Custom Models implementations must execute the transform after merging auth/model and explicit headers, then remove it before provider dispatch.
  • Changed dynamic model refresh to Models.refresh(options), which refreshes every configured dynamic provider and returns per-provider errors/cancellation state. Provider.refreshModels(context) now receives the effective credential, scoped model storage, network policy, and abort signal.
Added
  • Added provider-owned authentication and availability resolution to Models, including stored OAuth refresh and interactive login support through CredentialStore.
  • Added async non-secret credential enumeration through CredentialStore.list() and credential-aware Provider.filterModels() availability policy.
  • Added neutral auth-flow information/link events and provider-owned Amazon Bedrock and Google Vertex AI credential selection flows.
  • Added ModelsStore with an in-memory default for restoring and persisting dynamic provider catalogs.
  • Added the dynamic Radius pi-messages gateway provider with OAuth and credential-specific catalog refresh.
  • Added Models.refresh({ force: true }) to let providers bypass freshness checks for explicit refreshes.
  • Added xAI device-code OAuth login and routed Grok 4.5 through OpenAI Responses, with low, medium, and high thinking support (#​6651 by @​Jaaneek).
Changed
  • Changed Models.getAuth(model) to include model headers and added a Models-only transformHeaders stream option that runs after auth and explicit header assembly but is not forwarded to providers.
Fixed
  • Fixed Cloudflare Workers AI and AI Gateway streams to materialize account and gateway endpoint placeholders after auth resolution, including compat streaming with custom model objects.
  • Fixed lazy provider streams to preserve their final assistant message when forwarding an inner stream.
  • Fixed OpenAI Codex session IDs longer than 64 characters to meet the API limit (#​6630).

v0.80.7

Compare Source

Breaking Changes
  • Removed the OpenAIResponsesCompat.sendSessionIdHeader flag. Session-affinity behavior is now controlled by compat.sessionAffinityFormat ("openai", "openai-nosession", or "openrouter"). Replace sendSessionIdHeader: false with sessionAffinityFormat: "openai-nosession" (#​6496 by @​petrroll).
Added
  • Added cache-friendly dynamic tool loading. ToolResultMessage.addedToolNames marks where tools from Context.tools became available; Anthropic and OpenAI Responses use native deferred loading so late tools stay out of the cached prefix, while other providers continue using Context.tools normally (#​6474).
  • Added native xhigh and max thinking levels for Claude Fable 5 across all generated provider catalogs (#​6490 by @​davidbrai).
  • Added toolChoice support to OpenAI and Codex Responses, including required and named tool selection (#​6588 by @​xl0).
Fixed
  • Fixed OpenRouter model context windows to use the top provider's actual context length (#​6481 by @​davidbrai).
  • Fixed the GitHub Copilot mai-code-1-flash-picker model to route through the /responses endpoint (#​6544 by @​petrroll).
  • Fixed Amazon Bedrock requests to use the generic apiKey stream option as a Bedrock bearer token.
  • Fixed OpenRouter OpenAI-compatible session IDs to use the x-session-id header instead of OpenAI-specific session-affinity fields (#​6496 by @​petrroll).
  • Fixed Amazon Bedrock ambient AWS credentials to keep using SigV4 authentication, including for custom model IDs (#​6532 by @​ribelo).
  • Fixed Cloudflare Workers AI and AI Gateway authentication to use ambient account and gateway IDs when stored credentials contain only an API key (#​6292 by @​markphelps).
  • Fixed Amazon Bedrock errors to report unhandled provider stop reasons instead of only An unknown error occurred (#​6598 by @​davidbrai).
  • Fixed Azure OpenAI Responses reasoning replay when encrypted_content appears only in the terminal response event (#​6608 by @​davidbrai).
  • Fixed Anthropic-compatible proxies that omit usage from message_delta events (#​6611 by @​davidbrai).
  • Fixed OpenCode OpenAI Responses models to omit the unsupported session-id header while preserving other cache-affinity data (#​6645 by @​davidbrai).
earendil-works/pi (@​earendil-works/pi-coding-agent)

v0.83.0

Compare Source

New Features
  • Credential export for external clientspi auth print-api-key and pi auth print-bearer-token export configured credentials with automatic OAuth refresh and minimum-validity enforcement.
  • Headless OpenRouter sign-in — Complete /login over 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, and Value.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-key and pi auth print-bearer-token commands 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.scopedModels to extensions. See Extension Context (#​7191 by @​pungggi, #​7215).
  • Added inherited per-request fetch injection 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.md and APPEND_SYSTEM.md prompts 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 /model selector retaining a stale selection while filtering instead of highlighting the top match (#​7211 by @​christianbasch).
  • Fixed direct RPC bash commands bypassing extension user_bash handlers. 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 custom object (#​7288 by @​sunnyyoung).

v0.82.1

Compare Source

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 authANTHROPIC_AUTH_TOKEN authenticates against Anthropic-compatible gateways that require Authorization: Bearer, including compaction and branch summaries. See Environment Variables or Auth File.
  • Faster, more resilient model catalogs — pi.dev catalogs revalidate with If-None-Match so unchanged providers answer with an empty 304, and llama.cpp models stay listed across restarts. See llama.cpp.
Added
  • Exposed the outputPad setting to custom message renderers. See Extensions (#​7045 by @​xl0).
  • Added inherited ANTHROPIC_AUTH_TOKEN bearer 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 empty 304 instead 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-codex report 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 produced EISDIR warnings (#​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

Compare Source

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 /login to 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.constrainedSampling with 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 supportsGrammarTools and supportsStrictTools compatibility flags, expanded supportsStrictMode coverage, 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, and PI_REASONING_LEVEL to commands run by built-in and factory-created bash tools. See Bash Tool Session Environment.
  • Added streaming bash_execution_update events 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, and EAI_AGAIN to trigger automatic assistant retries (#​6946 by @​christianklotz).
  • Fixed inherited OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for ~anthropic/*-latest aliases (#​6941 by @​mteam88).
  • Fixed inherited OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after previous_response_not_found errors (#​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_CHECK is 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 protobufjs dependency to 7.6.5 to address GHSA-j3f2-48v5-ccww (#​7005).
  • Fixed /copy on Wayland to fall back to X11 or OSC 52 when wl-copy fails (#​7009 by @​rkfshakti).
  • Fixed /model to reload updated models.json configuration when opening the model picker (#​6999).

v0.81.1

Compare Source

New Features
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

Compare Source

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_levels RPC command and RpcClient.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 /login connection setup and /llama Hugging 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-expansion dependency 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 env values, 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 k2p7 alias to kimi-for-coding.
  • Fixed inherited OpenCode Go models routed through the OpenAI Responses API.
  • Fixed inherited pi-ai package 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

Compare Source

New Features
  • Kimi Coding thinking compatibility — Kimi Coding models now use adaptive thinking correctly; K3 exposes its supported max level 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 max level (#​6737).
  • Fixed inherited catalog generation restoring xAI models removed in 0.80.9 (#​6736).

v0.80.9

Compare Source

New Features
Added
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
  • Removed Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 from the built-in xAI model catalog (#​6734 by @​Jaaneek).

v0.80.8

Compare Source

New Features
  • Unified model runtime and provider authenticationModelRuntime centralizes model configuration, provider-owned /login, and dynamic provider catalogs. See Providers.
  • Live model catalog refresh/model refreshes configured providers in the background, and pi update --models forces 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.authStorage and modelRegistry options with the async modelRuntime option. AuthStorage and its storage backends are no longer exported; use ModelRuntime (or a custom pi-ai CredentialStore), or readStoredCredential() for one-off reads of auth.json.
  • Removed redundant ModelRuntime.getAll(), find(), getSnapshot(), and getAuthOptions() projections. Use the pi-ai Models methods getModels(), getModel(), getProviders(), and checkAuth() directly.
  • Replaced SDK request-auth assembly through ModelRegistry.getApiKeyAndHeaders() with ModelRuntime.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 synchronous void to Promise<void> because models.json loading is asynchronous. Extensions must await it before making synchronous registry reads.
  • Moved canonical dynamic catalog refresh to async ModelRuntime.refresh()/pi-ai Models.refresh(). Legacy extension OAuth modifyModels remains supported as a synchronous compatibility projection after credential initialization.
Added
  • Added ModelRuntime as the canonical async SDK and internal model/auth facade while preserving the synchronous extension-facing ModelRegistry API. ModelRuntime.create() accepts any pi-ai CredentialStore through its credentials option.
  • Added provider-owned /login discovery 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 --models to 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 ModelRuntime to compose built-in providers, immutable models.json configuration, and extension overlays through ad-hoc pi-ai provider methods.
  • Changed ModelRuntime to own final request assembly: getAuth(model) includes configured model headers, stream methods resolve auth once, and before_provider_headers runs as the Models-only header transform before provider dispatch.
  • Changed /model to 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.

v0.80.7

Compare Source

Breaking Changes
  • Removed the openai-responses compat.sendSessionIdHeader flag from models.json. Session-affinity behavior is now controlled by compat.sessionAffinityFormat ("openai", "openai-nosession", or "openrouter"). Replace sendSessionIdHeader: false with sessionAffinityFormat: "openai-nosession" (#​6496 by @​petrroll).
New Features
  • Cache-friendly dynamic tool loading - Extensions can add tools during execution while supported Anthropic and OpenAI Responses models preserve prompt-cache prefixes. See Dynamic Tool Loading.
  • Message copy shortcut - Ctrl+X copies the last assistant message in the transcript or the selected message in /tree, making older and branched messages directly copyable. See Display and Message Queue.
  • Fable 5 xhigh and max thinking - Native xhigh and max thinking levels are available across generated provider catalogs. See Model Options.
Added
  • Added cache-friendly dynamic tool loading for extension tools activated by tool results. Supported Anthropic and OpenAI Responses models load definitions where they become available, preserving the cached prompt prefix. See Dynamic Tool Loading (#​6474).
  • Added inherited native xhigh and max thinking levels for Claude Fable 5 across all generated provider catalogs (#​6490 by @​davidbrai).
  • Added Ctrl+X to copy the last assistant message, or the selected message in /tree.
  • Added inherited toolChoice support for OpenAI and Codex Responses, including required and named tool selection (#​6588 by @​xl0).
Fixed
  • Fixed inherited OpenRouter model context windows to use the top provider's actual context length (#​6481 by @​davidbrai).
  • Fixed inherited OpenRouter OpenAI-compatible session IDs to use the x-session-id header instead of OpenAI-specific session-affinity fields (#​6496 by @​petrroll).
  • Fixed Ctrl+V to paste clipboard text when the pasteboard does not contain an image.
  • Fixed /login amazon-bedrock to prompt for and save a Bedrock API key instead of only displaying ambient AWS credential setup instructions.
  • Fixed inherited Amazon Bedrock ambient AWS credentials to keep using SigV4 authentication, including for custom model IDs (#​6532 by @​ribelo).
  • Fixed inherited Cloudflare Workers AI and AI Gateway authentication to use ambient account and gateway IDs when stored credentials contain only an API key (#​6292 by @​markphelps).
  • Fixed inherited legacy terminal decoding for Alt+symbol key combinations such as Alt+, and Alt+. (#​6523 by @​ribelo).
  • Fixed the GitHub Copilot mai-code-1-flash-picker model to route through the /responses endpoint (#​6544 by @​petrroll).
  • Fixed branch summaries to work with providers that use ambient authentication instead of API keys (#​6595 by @​davidbrai).
  • Fixed inherited Amazon Bedrock errors to report unhandled provider stop reasons instead of only An unknown error occurred (#​6598 by @​davidbrai).
  • Fixed npm package removal when installed packages have conflicting peer dependencies (#​6604 by @​davidbrai).
  • Fixed inherited Azure OpenAI Responses reasoning replay when encrypted_content appears only in the terminal response event (#​6608 by @​davidbrai).
  • Fixed inherited Anthropic-compatible proxies that omit usage from message_delta events (#​6611 by @​davidbrai).
  • Fixed inherited OpenCode OpenAI Responses models to omit the unsupported session-id header while preserving other cache-affinity data (#​6645 by @​davidbrai).
  • Fixed system prompt cache invalidation across dates by removing the current date from the default prompt (#​6621).
earendil-works/pi (@​earendil-works/pi-tui)

v0.83.0

Compare Source

Fixed
  • Fixed long image fallback paths overflowing narrow terminals, shortened home-directory paths, and made absolute paths clickable when terminal hyperlinks are available (#​7262).

v0.82.1

Compare Source

v0.82.0

Compare Source

Fixed
  • Fixed debug and crash logs to use the configured TUI log directory, including PI_CODING_AGENT_DIR, instead of always writing under ~/.pi/agent (#​6958 by @​davidbrai).
  • Fixed narrow terminals crashing when the editor's bottom scroll indicator exceeded the terminal width (#​7015 by @​christianklotz).

v0.81.1

Compare Source

v0.81.0

Compare Source

Fixed
  • Fixed terminal shutdown to clear the editor's inverted software cursor before restoring the hardware cursor, avoiding a duplicate cursor artifact (#​6790 by @​dam9000).
  • Fixed ANSI-aware text wrapping to recognize CRLF and CR line endings while preserving styles across lines (#​6764 by @​xz-dev).
  • Fixed editor paste registry corruption when deleting paste markers: undo now restores the paste registry together with the text, and marker renumbering shifts registry entries in ascending id order, so submitted prompts no longer contain literal [paste #N ...] markers or the wrong paste's content (#​6844).

v0.80.10

Compare Source

v0.80.9

Compare Source

v0.80.8

Compare Source

Fixed
  • Fixed terminal output to normalize tab characters consistently (#​6697 by @​xz-dev).

v0.80.7

Compare Source

Fixed
  • Fixed legacy terminal decoding for Alt+symbol key combinations such as Alt+, and Alt+. (#​6523 by @​ribelo).

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@earendil-works/pi-agent-core](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/agent)) | [`^0.80.6` → `^0.83.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-agent-core/0.80.6/0.83.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-agent-core/0.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-agent-core/0.80.6/0.83.0?slim=true) | | [@earendil-works/pi-ai](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/ai)) | [`^0.80.6` → `^0.83.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-ai/0.80.6/0.83.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-ai/0.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-ai/0.80.6/0.83.0?slim=true) | | [@earendil-works/pi-coding-agent](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/coding-agent)) | [`^0.80.6` → `^0.83.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-coding-agent/0.80.6/0.83.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-coding-agent/0.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-coding-agent/0.80.6/0.83.0?slim=true) | | [@earendil-works/pi-tui](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/tui)) | [`^0.80.6` → `^0.83.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-tui/0.80.6/0.83.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-tui/0.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-tui/0.80.6/0.83.0?slim=true) | --- ### Release Notes <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-agent-core)</summary> ### [`v0.83.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0830---2026-07-29) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.1...v0.83.0) ### [`v0.82.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0821---2026-07-25) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.0...v0.82.1) ### [`v0.82.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0820---2026-07-24) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.1...v0.82.0) ##### Breaking Changes - Replaced `AgentHarness`'s `ExecutionEnv` dependency and context-free `AgentTool` inputs with application-defined `toolContext` values and context-aware `AgentHarnessTool` definitions. ##### Added - Added context-aware `read`, `write`, `edit`, and `bash` harness tools backed by `ExecutionEnv`, including async bash execution preparation. ##### Changed - Aligned harness tool path handling, edit serialization, shell output capture, explicit non-inherited environments, and cross-platform process cleanup with coding-agent behavior. ##### Fixed - Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported ([#&#8203;6618](https://github.com/earendil-works/pi/pull/6618) by [@&#8203;tmustier](https://github.com/tmustier)). ### [`v0.81.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0811---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.0...v0.81.1) ##### Added - Added retry policy support and lifecycle events for compaction and branch-summary operations in `AgentHarness` ([#&#8203;6901](https://github.com/earendil-works/pi/pull/6901) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Fixed - Restored the `Agent` `streamFn` option and host-configurable fallback for omitted agent-loop stream functions without reintroducing a `pi-ai/compat` dependency ([#&#8203;6915](https://github.com/earendil-works/pi/issues/6915)). ### [`v0.81.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0810---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.10...v0.81.0) ##### Breaking Changes - Changed `SessionStorage` to use `getPathToRootOrCompaction()`, require session name and statistics methods, support cursor-based entry reads, and store retained compaction tails as self-contained checkpoints ([#&#8203;6594](https://github.com/earendil-works/pi/pull/6594) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Moved the `uuidv7` export to `@earendil-works/pi-ai` ([#&#8203;6834](https://github.com/earendil-works/pi/pull/6834) by [@&#8203;xl0](https://github.com/xl0)). - Replaced the optional `Agent` `streamFn` fallback with a required `streamFunction` and made low-level loop stream functions required, preventing `@earendil-works/pi-ai/compat` and all built-in providers from entering selective-provider bundles ([#&#8203;6851](https://github.com/earendil-works/pi/issues/6851)). ##### Added - Added usage metadata to tool results, compaction entries, and branch summaries in the agent harness ([#&#8203;6671](https://github.com/earendil-works/pi/pull/6671) by [@&#8203;davidbrai](https://github.com/davidbrai)). ### [`v0.80.10`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#08010---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.9...v0.80.10) ### [`v0.80.9`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0809---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.8...v0.80.9) ### [`v0.80.8`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0808---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.7...v0.80.8) ### [`v0.80.7`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0807---2026-07-14) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.6...v0.80.7) ##### Added - Added `AgentToolResult.addedToolNames` propagation to `ToolResultMessage` so tools introduced by a result can be loaded from that transcript point onward ([#&#8203;6474](https://github.com/earendil-works/pi-mono/pull/6474)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-ai)</summary> ### [`v0.83.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0830---2026-07-29) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.1...v0.83.0) ##### Breaking Changes - Upgraded the exported TypeBox dependency 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. Consumers using removed APIs must migrate to supported TypeBox APIs ([#&#8203;7243](https://github.com/earendil-works/pi/pull/7243) by [@&#8203;petrroll](https://github.com/petrroll)). ##### Added - Added per-request `fetch` injection for supported text and image provider transports; Google adapters reject non-global implementations rather than silently bypassing them. - Added Claude Opus 5 support for the GitHub Copilot provider, routing through the Anthropic Messages API with adaptive thinking, 1M context, and the Copilot `minimal` thinking-level override ([#&#8203;7158](https://github.com/earendil-works/pi/pull/7158) by [@&#8203;jay-aye-see-kay](https://github.com/jay-aye-see-kay)). - Added the `"pending"` stop reason for partial streaming messages. See [Stop Reasons](README.md#stop-reasons) ([#&#8203;7151](https://github.com/earendil-works/pi/pull/7151) by [@&#8203;lucasmeijer](https://github.com/lucasmeijer)). - Added `AssistantMessage.rawStopReason` and populated it across Google, Anthropic, Amazon Bedrock, Mistral, and OpenAI streams; unmapped terminal reasons now surface as provider errors instead of successful stops ([#&#8203;7272](https://github.com/earendil-works/pi/pull/7272)). - Added manual redirect URL and authorization-code entry to OpenRouter OAuth login for remote and headless environments ([#&#8203;7114](https://github.com/earendil-works/pi/pull/7114) by [@&#8203;rgarcia](https://github.com/rgarcia)). - Added `AuthResolutionOverrides.minOAuthValidityMs` so callers can require and refresh OAuth credentials with a minimum remaining validity ([#&#8203;7168](https://github.com/earendil-works/pi/pull/7168)). ##### Changed - Changed stored OAuth credentials to refresh when less than five minutes of validity remain instead of waiting until expiration ([#&#8203;7168](https://github.com/earendil-works/pi/pull/7168)). ##### Fixed - Fixed Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels ([#&#8203;6951](https://github.com/earendil-works/pi/issues/6951), [#&#8203;6998](https://github.com/earendil-works/pi/issues/6998)). - Fixed Z.AI providers and compatible custom endpoints to send output limits through `max_tokens`, which those endpoints honor ([#&#8203;7174](https://github.com/earendil-works/pi/pull/7174) by [@&#8203;HyeokjaeLee](https://github.com/HyeokjaeLee)). - Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys ([#&#8203;7176](https://github.com/earendil-works/pi/pull/7176) by [@&#8203;christianbasch](https://github.com/christianbasch)). - Fixed malformed OpenAI-compatible tool-call deltas with both a valid `function` payload and an empty `custom` object discarding the function arguments ([#&#8203;7288](https://github.com/earendil-works/pi/pull/7288) by [@&#8203;sunnyyoung](https://github.com/sunnyyoung)). ### [`v0.82.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0821---2026-07-25) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.0...v0.82.1) ##### Added - Added `ModelsStoreEntry.etag` so persisted provider catalogs can carry the remote ETag validator for conditional refreshes. - Added `ANTHROPIC_AUTH_TOKEN` bearer authentication for Anthropic-compatible gateways ([#&#8203;5871](https://github.com/earendil-works/pi/issues/5871)) - Added Claude Opus 5 support for Anthropic and Amazon Bedrock with adaptive thinking, inference profiles, prompt caching, and preserved AWS validation messages ([#&#8203;7081](https://github.com/earendil-works/pi/pull/7081) by [@&#8203;unexge](https://github.com/unexge), [#&#8203;7083](https://github.com/earendil-works/pi/pull/7083) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Changed - Changed Radius OAuth device authorization, token exchange, and refresh requests to use the configured gateway directly. - Changed `ModelsError` messages to append the underlying cause, so auth failures such as `OAuth refresh failed for openai-codex` report the provider response instead of a bare wrapper message. ### [`v0.82.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0820---2026-07-24) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.1...v0.82.0) ##### Breaking Changes - Replaced `getBuiltinModelDataUrl(provider)` with `getBuiltinModelDataGeneratedAt()` so built-in catalog freshness uses its recorded generation time instead of installation-dependent file metadata ([#&#8203;7016](https://github.com/earendil-works/pi/pull/7016) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Added - Added Kimi Code subscription OAuth login for the `kimi-coding` provider, with device authorization, token refresh, and OAuth host overrides ([#&#8203;6935](https://github.com/earendil-works/pi/pull/6935) by [@&#8203;zaycruz](https://github.com/zaycruz)). - Added OpenRouter OAuth PKCE login that mints a user-controlled API key for chat and image providers ([#&#8203;6927](https://github.com/earendil-works/pi/pull/6927) by [@&#8203;rsaryev](https://github.com/rsaryev)). - Added `Tool.constrainedSampling` with strict JSON Schema (`prefer`/`require`) and OpenAI Lark/regex grammar variants, enforcing provider-side constrained tool sampling across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. See [Constrained Sampling for Tools](README.md#constrained-sampling-for-tools). - Added `supportsGrammarTools` and `supportsStrictTools` compatibility flags, expanded `supportsStrictMode` to Responses and Bedrock models, and generated model capability metadata to gate constrained sampling. ##### Changed - Changed generated model catalogs to expose only provider-verified reasoning effort levels from models.dev ([#&#8203;6928](https://github.com/earendil-works/pi/pull/6928) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Fixed - Fixed OpenAI Codex cached WebSocket continuations after grammar tool calls to send only the real tool-result delta. - Fixed constrained tool sampling across Google, Amazon Bedrock, Mistral, and Azure OpenAI Responses adapters, including model-aware strict-tool capabilities, grammar configuration validation, and malformed grammar-call replay errors. - Fixed `cacheRetention: "none"` to disable implicit prompt-cache writes for supported OpenAI models and session-based caching for OpenAI Codex ([#&#8203;6618](https://github.com/earendil-works/pi/pull/6618) by [@&#8203;tmustier](https://github.com/tmustier)). - Fixed DNS lookup failures such as `getaddrinfo`, `ENOTFOUND`, and `EAI_AGAIN` to trigger automatic assistant retries ([#&#8203;6946](https://github.com/earendil-works/pi/pull/6946) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after `previous_response_not_found` errors ([#&#8203;6955](https://github.com/earendil-works/pi/pull/6955) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits ([#&#8203;6980](https://github.com/earendil-works/pi/pull/6980) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for `~anthropic/*-latest` aliases ([#&#8203;6941](https://github.com/earendil-works/pi/pull/6941) by [@&#8203;mteam88](https://github.com/mteam88)). ### [`v0.81.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0811---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.0...v0.81.1) ##### Added - Added `retryAssistantCall()` for bounded retries of transient assistant failures with lifecycle callbacks and abort handling ([#&#8203;6901](https://github.com/earendil-works/pi/pull/6901) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Fixed - Fixed Kimi K3 models from Moonshot AI and Moonshot AI China to use the OpenAI thinking format and expose reasoning effort support. ### [`v0.81.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0810---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.10...v0.81.0) ##### Added - Added Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints, API-key authentication, and generated model catalogs ([#&#8203;6858](https://github.com/earendil-works/pi/pull/6858) by [@&#8203;QuintinShaw](https://github.com/QuintinShaw)). - Added `contentText` for extracting joined text from message content ([#&#8203;6840](https://github.com/earendil-works/pi/pull/6840) by [@&#8203;xl0](https://github.com/xl0)). - Added a shared `uuidv7` utility for time-ordered identifiers ([#&#8203;6834](https://github.com/earendil-works/pi/pull/6834) by [@&#8203;xl0](https://github.com/xl0)). - Added optional usage metadata to tool result messages ([#&#8203;6671](https://github.com/earendil-works/pi/pull/6671) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Changed - Changed generated model catalogs to keep TypeScript model shapes separate from ignored JSON model values, reducing generated source churn ([#&#8203;6765](https://github.com/earendil-works/pi/pull/6765) by [@&#8203;mitsuhiko](https://github.com/mitsuhiko)). - Changed model generation to validate ignored provider data before compilation; `npm run build` refreshes model data as before, while `npm run build:offline` reuses existing data without network access. ##### Fixed - Fixed stored API-key credentials to apply their provider-scoped `env` values during auth resolution, including Amazon Bedrock profiles ([#&#8203;6864](https://github.com/earendil-works/pi/pull/6864) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Fixed OpenAI-compatible cross-provider replay to preserve unique tool call IDs when multiple calls share a provider call ID ([#&#8203;6854](https://github.com/earendil-works/pi/pull/6854) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Fixed Kimi K3 to expose its supported low, high, and max thinking levels, and normalized the `k2p7` alias to the canonical `kimi-for-coding` model. - Fixed the OpenCode Go provider to support models routed through the OpenAI Responses API. - Fixed the `pi-ai` executable path to match npm registry metadata, avoiding repeated consumer lockfile changes ([#&#8203;6812](https://github.com/earendil-works/pi/pull/6812) by [@&#8203;jmfederico](https://github.com/jmfederico)). - Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs, enabling models that reject UUIDv4 IDs ([#&#8203;6834](https://github.com/earendil-works/pi/pull/6834) by [@&#8203;xl0](https://github.com/xl0)). - Fixed GitHub Copilot long-context pricing tiers in generated model metadata ([#&#8203;6668](https://github.com/earendil-works/pi/issues/6668)). - Fixed Kimi Coding subscription models to report API-equivalent implied costs when models.dev reports zero pricing. - Fixed OpenAI Responses early stream endings to be classified as retryable provider errors ([#&#8203;6727](https://github.com/earendil-works/pi/issues/6727)). - Fixed GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing ([#&#8203;6853](https://github.com/earendil-works/pi/pull/6853) by [@&#8203;aadishv](https://github.com/aadishv)). ### [`v0.80.10`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#08010---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.9...v0.80.10) ##### Fixed - Fixed Kimi Coding requests to use Anthropic adaptive thinking effort without token budgets, and enabled empty thinking signatures for K3 and `kimi-for-coding`. - Fixed Kimi K3 pricing metadata for Moonshot AI and Moonshot AI China. - Fixed Kimi Coding K3 thinking-level metadata to expose only the supported `max` level ([#&#8203;6737](https://github.com/earendil-works/pi/issues/6737)). - Fixed catalog generation restoring xAI models removed in 0.80.9 ([#&#8203;6736](https://github.com/earendil-works/pi/issues/6736)). ### [`v0.80.9`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0809---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.8...v0.80.9) ##### Added - Added Kimi K3 support for Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway. - Added Kimi deferred tool loading to OpenAI-compatible Chat Completions through `compat.deferredToolsMode`. ##### Changed - Changed xAI device OAuth to open a prefilled authorization link and added provider-specific OAuth login labels ([#&#8203;6734](https://github.com/earendil-works/pi-mono/pull/6734) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). ##### Fixed - Fixed Kimi K3 output limits for Vercel AI Gateway and OpenRouter models. ##### Removed - Removed Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 from the built-in xAI model catalog ([#&#8203;6734](https://github.com/earendil-works/pi-mono/pull/6734) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). ### [`v0.80.8`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0808---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.7...v0.80.8) ##### Breaking Changes - Changed runtime authentication to provider-scoped `Models.checkAuth()`, `getAuth()`, `login()`, and `logout()` APIs. `checkAuth()` now returns `AuthCheck | undefined`, and API-key auth resolvers no longer receive a model. - Removed the legacy built-in OAuth provider objects, global OAuth registry APIs, and public low-level built-in login/refresh functions. Use canonical `Provider.auth.oauth` methods instead; the `oauth` subpath now retains only extension compatibility types. - Renamed the canonical login interaction interface from `AuthLoginCallbacks` to `AuthInteraction`; it exposes the provider-neutral `prompt()`/`notify()` protocol used by API-key and OAuth flows. - Changed the `Models` request contract: `getAuth(model)` now includes model headers, while `getAuth(providerId)` remains provider-scoped, and Models stream options may include `transformHeaders`. Custom `Models` implementations must execute the transform after merging auth/model and explicit headers, then remove it before provider dispatch. - Changed dynamic model refresh to `Models.refresh(options)`, which refreshes every configured dynamic provider and returns per-provider errors/cancellation state. `Provider.refreshModels(context)` now receives the effective credential, scoped model storage, network policy, and abort signal. ##### Added - Added provider-owned authentication and availability resolution to `Models`, including stored OAuth refresh and interactive login support through `CredentialStore`. - Added async non-secret credential enumeration through `CredentialStore.list()` and credential-aware `Provider.filterModels()` availability policy. - Added neutral auth-flow information/link events and provider-owned Amazon Bedrock and Google Vertex AI credential selection flows. - Added `ModelsStore` with an in-memory default for restoring and persisting dynamic provider catalogs. - Added the dynamic Radius `pi-messages` gateway provider with OAuth and credential-specific catalog refresh. - Added `Models.refresh({ force: true })` to let providers bypass freshness checks for explicit refreshes. - Added xAI device-code OAuth login and routed Grok 4.5 through OpenAI Responses, with low, medium, and high thinking support ([#&#8203;6651](https://github.com/earendil-works/pi-mono/pull/6651) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). ##### Changed - Changed `Models.getAuth(model)` to include model headers and added a Models-only `transformHeaders` stream option that runs after auth and explicit header assembly but is not forwarded to providers. ##### Fixed - Fixed Cloudflare Workers AI and AI Gateway streams to materialize account and gateway endpoint placeholders after auth resolution, including compat streaming with custom model objects. - Fixed lazy provider streams to preserve their final assistant message when forwarding an inner stream. - Fixed OpenAI Codex session IDs longer than 64 characters to meet the API limit ([#&#8203;6630](https://github.com/earendil-works/pi-mono/issues/6630)). ### [`v0.80.7`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0807---2026-07-14) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.6...v0.80.7) ##### Breaking Changes - Removed the `OpenAIResponsesCompat.sendSessionIdHeader` flag. Session-affinity behavior is now controlled by `compat.sessionAffinityFormat` (`"openai"`, `"openai-nosession"`, or `"openrouter"`). Replace `sendSessionIdHeader: false` with `sessionAffinityFormat: "openai-nosession"` ([#&#8203;6496](https://github.com/earendil-works/pi-mono/pull/6496) by [@&#8203;petrroll](https://github.com/petrroll)). ##### Added - Added cache-friendly dynamic tool loading. `ToolResultMessage.addedToolNames` marks where tools from `Context.tools` became available; Anthropic and OpenAI Responses use native deferred loading so late tools stay out of the cached prefix, while other providers continue using `Context.tools` normally ([#&#8203;6474](https://github.com/earendil-works/pi-mono/pull/6474)). - Added native `xhigh` and `max` thinking levels for Claude Fable 5 across all generated provider catalogs ([#&#8203;6490](https://github.com/earendil-works/pi-mono/pull/6490) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Added `toolChoice` support to OpenAI and Codex Responses, including required and named tool selection ([#&#8203;6588](https://github.com/earendil-works/pi-mono/pull/6588) by [@&#8203;xl0](https://github.com/xl0)). ##### Fixed - Fixed OpenRouter model context windows to use the top provider's actual context length ([#&#8203;6481](https://github.com/earendil-works/pi-mono/pull/6481) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed the GitHub Copilot `mai-code-1-flash-picker` model to route through the `/responses` endpoint ([#&#8203;6544](https://github.com/earendil-works/pi-mono/pull/6544) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed Amazon Bedrock requests to use the generic `apiKey` stream option as a Bedrock bearer token. - Fixed OpenRouter OpenAI-compatible session IDs to use the `x-session-id` header instead of OpenAI-specific session-affinity fields ([#&#8203;6496](https://github.com/earendil-works/pi-mono/pull/6496) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed Amazon Bedrock ambient AWS credentials to keep using SigV4 authentication, including for custom model IDs ([#&#8203;6532](https://github.com/earendil-works/pi-mono/pull/6532) by [@&#8203;ribelo](https://github.com/ribelo)). - Fixed Cloudflare Workers AI and AI Gateway authentication to use ambient account and gateway IDs when stored credentials contain only an API key ([#&#8203;6292](https://github.com/earendil-works/pi-mono/pull/6292) by [@&#8203;markphelps](https://github.com/markphelps)). - Fixed Amazon Bedrock errors to report unhandled provider stop reasons instead of only `An unknown error occurred` ([#&#8203;6598](https://github.com/earendil-works/pi-mono/pull/6598) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed Azure OpenAI Responses reasoning replay when `encrypted_content` appears only in the terminal response event ([#&#8203;6608](https://github.com/earendil-works/pi-mono/pull/6608) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed Anthropic-compatible proxies that omit `usage` from `message_delta` events ([#&#8203;6611](https://github.com/earendil-works/pi-mono/pull/6611) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed OpenCode OpenAI Responses models to omit the unsupported `session-id` header while preserving other cache-affinity data ([#&#8203;6645](https://github.com/earendil-works/pi-mono/pull/6645) by [@&#8203;davidbrai](https://github.com/davidbrai)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-coding-agent)</summary> ### [`v0.83.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0830---2026-07-29) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.1...v0.83.0) ##### New Features - **Credential export for external clients** — `pi auth print-api-key` and `pi auth print-bearer-token` export configured credentials with automatic OAuth refresh and minimum-validity enforcement. - **Headless OpenRouter sign-in** — Complete `/login` over SSH by pasting the redirect URL or authorization code when the loopback callback is unavailable. See [OpenRouter](docs/providers.md#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](docs/providers.md#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`, and `Value.Mutate`, while fixing compiled validation of nullable array tool arguments. Extensions using removed APIs must migrate to supported TypeBox APIs. See [Package Dependencies](docs/packages.md#dependencies) ([#&#8203;7243](https://github.com/earendil-works/pi/pull/7243) by [@&#8203;petrroll](https://github.com/petrroll)). ##### Added - Added `pi auth print-api-key` and `pi auth print-bearer-token` commands for exporting configured credentials to external clients, including automatic OAuth refresh and configurable minimum token validity ([#&#8203;7168](https://github.com/earendil-works/pi/pull/7168)). - Exposed the session's resolved model scope as `ctx.scopedModels` to extensions. See [Extension Context](docs/extensions.md#ctxmodelregistry--ctxmodel--ctxthinkinglevel--ctxscopedmodels) ([#&#8203;7191](https://github.com/earendil-works/pi/pull/7191) by [@&#8203;pungggi](https://github.com/pungggi), [#&#8203;7215](https://github.com/earendil-works/pi/pull/7215)). - Added inherited per-request `fetch` injection for supported text and image provider transports. - Added the inherited `"pending"` stop reason for partial streaming messages. See [Custom Provider Stream Pattern](docs/custom-provider.md#stream-pattern) ([#&#8203;7151](https://github.com/earendil-works/pi/pull/7151) by [@&#8203;lucasmeijer](https://github.com/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 ([#&#8203;7272](https://github.com/earendil-works/pi/pull/7272)). - Added manual redirect URL and authorization-code entry to OpenRouter login for remote and headless environments. See [OpenRouter](docs/providers.md#openrouter) ([#&#8203;7114](https://github.com/earendil-works/pi/pull/7114) by [@&#8203;rgarcia](https://github.com/rgarcia)). - Added inherited Claude Opus 5 support for GitHub Copilot with adaptive thinking and a 1M context window. See [GitHub Copilot](docs/providers.md#github-copilot) ([#&#8203;7158](https://github.com/earendil-works/pi/pull/7158) by [@&#8203;jay-aye-see-kay](https://github.com/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 ([#&#8203;7168](https://github.com/earendil-works/pi/pull/7168)). ##### Fixed - Added a status line when the tool output expansion is toggled ([#&#8203;7180](https://github.com/earendil-works/pi/issues/7180)). - Fixed file-backed `SYSTEM.md` and `APPEND_SYSTEM.md` prompts being omitted from the interactive startup context listing. See [System Prompt Files](docs/usage.md#system-prompt-files) ([#&#8203;7096](https://github.com/earendil-works/pi/issues/7096)). - Fixed context files loading twice when a linked Git worktree is nested under its main repository. See [Context Files](docs/usage.md#context-files) ([#&#8203;7221](https://github.com/earendil-works/pi/pull/7221) by [@&#8203;arajkumar](https://github.com/arajkumar)). - Fixed llama.cpp streamed responses reporting zero token usage and leaving session context accounting empty. See [llama.cpp](docs/llama-cpp.md) ([#&#8203;7258](https://github.com/earendil-works/pi/pull/7258) by [@&#8203;SteveImmanuel](https://github.com/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](docs/usage.md#sessions) ([#&#8203;7022](https://github.com/earendil-works/pi/pull/7022) by [@&#8203;tmustier](https://github.com/tmustier)). - Fixed failed Git package installs leaving partial directories that blocked clean retries. See [Install and Manage](docs/packages.md#install-and-manage) ([#&#8203;7210](https://github.com/earendil-works/pi/pull/7210) by [@&#8203;haoqixu](https://github.com/haoqixu)). - Fixed the `/model` selector retaining a stale selection while filtering instead of highlighting the top match ([#&#8203;7211](https://github.com/earendil-works/pi/pull/7211) by [@&#8203;christianbasch](https://github.com/christianbasch)). - Fixed direct RPC bash commands bypassing extension `user_bash` handlers. See [User Bash Events](docs/extensions.md#user-bash-events) ([#&#8203;7214](https://github.com/earendil-works/pi/pull/7214)). - Fixed skills, prompts, and themes losing package source metadata after extensions reload resources. See [Resource Events](docs/extensions.md#resource-events) ([#&#8203;6968](https://github.com/earendil-works/pi/issues/6968)). - Fixed cancellation of concurrently running user bash commands so every active command is aborted ([#&#8203;7103](https://github.com/earendil-works/pi/pull/7103) by [@&#8203;yzhg1983](https://github.com/yzhg1983)). - Fixed duplicate messages appearing when extensions switch sessions during interactive startup ([#&#8203;7110](https://github.com/earendil-works/pi/pull/7110) by [@&#8203;yzhg1983](https://github.com/yzhg1983)). - Fixed inherited Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels ([#&#8203;6951](https://github.com/earendil-works/pi/issues/6951), [#&#8203;6998](https://github.com/earendil-works/pi/issues/6998)). - Fixed inherited Z.AI output limits being sent through an unsupported parameter. See [Providers](docs/providers.md) ([#&#8203;7174](https://github.com/earendil-works/pi/pull/7174) by [@&#8203;HyeokjaeLee](https://github.com/HyeokjaeLee)). - Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access keys. See [Amazon Bedrock](docs/providers.md#amazon-bedrock) ([#&#8203;7176](https://github.com/earendil-works/pi/pull/7176) by [@&#8203;christianbasch](https://github.com/christianbasch)). - Fixed inherited image fallback paths overflowing narrow terminals, shortened home-directory paths, and made absolute paths clickable when terminal hyperlinks are available ([#&#8203;7262](https://github.com/earendil-works/pi/pull/7262)). - Fixed inherited OpenAI-compatible tool calls losing their function arguments when malformed deltas also contain an empty `custom` object ([#&#8203;7288](https://github.com/earendil-works/pi/pull/7288) by [@&#8203;sunnyyoung](https://github.com/sunnyyoung)). ### [`v0.82.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0821---2026-07-25) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.0...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](docs/providers.md#api-keys). - **Anthropic gateway bearer auth** — `ANTHROPIC_AUTH_TOKEN` authenticates against Anthropic-compatible gateways that require `Authorization: Bearer`, including compaction and branch summaries. See [Environment Variables or Auth File](docs/providers.md#environment-variables-or-auth-file). - **Faster, more resilient model catalogs** — pi.dev catalogs revalidate with `If-None-Match` so unchanged providers answer with an empty `304`, and llama.cpp models stay listed across restarts. See [llama.cpp](docs/llama-cpp.md). ##### Added - Exposed the `outputPad` setting to custom message renderers. See [Extensions](docs/extensions.md) ([#&#8203;7045](https://github.com/earendil-works/pi/pull/7045) by [@&#8203;xl0](https://github.com/xl0)). - Added inherited `ANTHROPIC_AUTH_TOKEN` bearer authentication for Anthropic-compatible gateways. See [Providers](docs/providers.md#environment-variables-or-auth-file) ([#&#8203;5871](https://github.com/earendil-works/pi/issues/5871)). - Added inherited Claude Opus 5 support for Anthropic and Amazon Bedrock with adaptive thinking, inference profiles, prompt caching, and preserved AWS validation messages ([#&#8203;7081](https://github.com/earendil-works/pi/pull/7081) by [@&#8203;unexge](https://github.com/unexge), [#&#8203;7083](https://github.com/earendil-works/pi/pull/7083) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Changed - Changed pi.dev model catalog refreshes to revalidate with `If-None-Match`, so unchanged provider catalogs answer with an empty `304` instead 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-codex` report the provider response instead of a bare wrapper message. ##### Fixed - Fixed compaction and branch summaries for providers whose authentication resolves entirely to request headers ([#&#8203;5871](https://github.com/earendil-works/pi/issues/5871)) - Fixed unavailable scoped models being hidden from `/models`, allowing them to be removed without editing settings manually ([#&#8203;6949](https://github.com/earendil-works/pi/issues/6949), [#&#8203;7032](https://github.com/earendil-works/pi/pull/7032) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed startup context file discovery to skip directories that match context file names such as `AGENTS.md`, which produced `EISDIR` warnings ([#&#8203;7106](https://github.com/earendil-works/pi/pull/7106) by [@&#8203;mrexodia](https://github.com/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](docs/llama-cpp.md) ([#&#8203;7072](https://github.com/earendil-works/pi/pull/7072) by [@&#8203;davidbrai](https://github.com/davidbrai)). ### [`v0.82.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0820---2026-07-24) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.1...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](../ai/README.md#constrained-sampling-for-tools). - **OpenRouter and Kimi Code sign-in** — Use `/login` to authorize OpenRouter or a Kimi Code subscription without manually configuring API keys. See [OpenRouter](docs/providers.md#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](docs/environment-variables.md#bash-tool-session-environment) and [RPC bash events](docs/rpc.md#bash_execution_update). ##### Added - Added inherited `Tool.constrainedSampling` with 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](../ai/README.md#constrained-sampling-for-tools). - Added inherited `supportsGrammarTools` and `supportsStrictTools` compatibility flags, expanded `supportsStrictMode` coverage, 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 ([#&#8203;6935](https://github.com/earendil-works/pi/pull/6935) by [@&#8203;zaycruz](https://github.com/zaycruz)). - Added inherited OpenRouter OAuth PKCE login through `/login`, minting a user-controlled API key. See [OpenRouter](docs/providers.md#openrouter) ([#&#8203;6927](https://github.com/earendil-works/pi/pull/6927) by [@&#8203;rsaryev](https://github.com/rsaryev)). - Exposed `PI_SESSION_ID`, `PI_SESSION_FILE`, `PI_PROVIDER`, `PI_MODEL`, and `PI_REASONING_LEVEL` to commands run by built-in and factory-created bash tools. See [Bash Tool Session Environment](docs/environment-variables.md#bash-tool-session-environment). - Added streaming `bash_execution_update` events for direct RPC bash commands, correlated with request IDs. See [RPC bash events](docs/rpc.md#bash_execution_update) ([#&#8203;6971](https://github.com/earendil-works/pi/pull/6971) by [@&#8203;ananthakumaran](https://github.com/ananthakumaran)). ##### Changed - Changed inherited generated model catalogs to expose only provider-verified reasoning effort levels from models.dev ([#&#8203;6928](https://github.com/earendil-works/pi/pull/6928) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Fixed - Fixed inherited DNS lookup failures such as `getaddrinfo`, `ENOTFOUND`, and `EAI_AGAIN` to trigger automatic assistant retries ([#&#8203;6946](https://github.com/earendil-works/pi/pull/6946) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed inherited OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for `~anthropic/*-latest` aliases ([#&#8203;6941](https://github.com/earendil-works/pi/pull/6941) by [@&#8203;mteam88](https://github.com/mteam88)). - Fixed inherited OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after `previous_response_not_found` errors ([#&#8203;6955](https://github.com/earendil-works/pi/pull/6955) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed TUI debug and crash logs to respect custom agent directories instead of always writing under `~/.pi/agent` ([#&#8203;6958](https://github.com/earendil-works/pi/pull/6958) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed slow Ctrl+G external-editor startup when the system temporary directory contains many entries ([#&#8203;6903](https://github.com/earendil-works/pi/pull/6903) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed startup resource display to preserve relative paths for sibling npm extensions loaded by a package ([#&#8203;6964](https://github.com/earendil-works/pi/pull/6964) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported ([#&#8203;6618](https://github.com/earendil-works/pi/pull/6618) by [@&#8203;tmustier](https://github.com/tmustier)). - Fixed explicit self-updates when `PI_SKIP_VERSION_CHECK` is set ([#&#8203;6977](https://github.com/earendil-works/pi/issues/6977)). - Fixed scoped model IDs containing brackets to resolve as literal exact matches before glob matching ([#&#8203;6210](https://github.com/earendil-works/pi/issues/6210)). - Fixed inherited OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits ([#&#8203;6980](https://github.com/earendil-works/pi/pull/6980) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed fresh installs from preferring bundled model catalogs over newer remote catalogs because package file mtimes were newer ([#&#8203;7016](https://github.com/earendil-works/pi/pull/7016) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited editor scroll indicators overflowing narrow terminals ([#&#8203;7015](https://github.com/earendil-works/pi/pull/7015) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed llama.cpp models to use the loaded context window as their output token limit instead of capping it at 16K ([#&#8203;7034](https://github.com/earendil-works/pi/pull/7034) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed release source archives to include the generated provider model data used to build standalone binaries. - Updated the packaged `protobufjs` dependency to 7.6.5 to address GHSA-j3f2-48v5-ccww ([#&#8203;7005](https://github.com/earendil-works/pi/issues/7005)). - Fixed `/copy` on Wayland to fall back to X11 or OSC 52 when `wl-copy` fails ([#&#8203;7009](https://github.com/earendil-works/pi/pull/7009) by [@&#8203;rkfshakti](https://github.com/rkfshakti)). - Fixed `/model` to reload updated `models.json` configuration when opening the model picker ([#&#8203;6999](https://github.com/earendil-works/pi/issues/6999)). ### [`v0.81.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0811---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.0...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](../../README.md#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](docs/compaction.md) and [RPC retry events](docs/rpc.md#summarization_retry_scheduled--summarization_retry_attempt_start--summarization_retry_finished). ##### Added - Added deterministic, checksummed source archives to GitHub releases with documented standalone binary rebuild instructions ([#&#8203;6913](https://github.com/earendil-works/pi/pull/6913) by [@&#8203;christianklotz](https://github.com/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 ([#&#8203;6901](https://github.com/earendil-works/pi/pull/6901) by [@&#8203;davidbrai](https://github.com/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 ([#&#8203;6915](https://github.com/earendil-works/pi/issues/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`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0810---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.10...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](docs/llama-cpp.md). - **Full provider extensions** — Extensions can register complete pi-ai providers with authentication, model refresh, filtering, and custom streaming. See [Register New Provider](docs/custom-provider.md#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](docs/providers.md#api-keys). - **Expanded usage accounting** — Tool, compaction, and branch-summary usage is persisted and included in session totals. See [Compaction & Branch Summarization](docs/compaction.md). ##### Added - Added Qwen Token Plan and Qwen Token Plan China to built-in provider setup, default model resolution, and provider documentation ([#&#8203;6858](https://github.com/earendil-works/pi/pull/6858) by [@&#8203;QuintinShaw](https://github.com/QuintinShaw)). - Added the `get_available_thinking_levels` RPC command and `RpcClient.getAvailableThinkingLevels()` method ([#&#8203;6865](https://github.com/earendil-works/pi/pull/6865) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Exported message and tool execution lifecycle event types from the package root ([#&#8203;6772](https://github.com/earendil-works/pi/pull/6772) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Added built-in llama.cpp router support with `/login` connection setup and `/llama` Hugging Face model search and downloads, explicit loading, unloading, and live progress. See [llama.cpp](docs/llama-cpp.md). - 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 ([#&#8203;6671](https://github.com/earendil-works/pi/pull/6671) by [@&#8203;davidbrai](https://github.com/davidbrai)). ##### Fixed - Updated the packaged `brace-expansion` dependency to 5.0.7 ([#&#8203;6896](https://github.com/earendil-works/pi/pull/6896) by [@&#8203;davidbrai](https://github.com/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 `env` values, including Amazon Bedrock profiles ([#&#8203;6864](https://github.com/earendil-works/pi/pull/6864) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Fixed inherited OpenAI-compatible cross-provider replay to keep tool call IDs unique when multiple calls share a provider call ID ([#&#8203;6854](https://github.com/earendil-works/pi/pull/6854) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Fixed inherited Kimi K3 thinking levels to expose low, high, and max, and normalized the `k2p7` alias to `kimi-for-coding`. - Fixed inherited OpenCode Go models routed through the OpenAI Responses API. - Fixed inherited `pi-ai` package metadata to avoid repeated consumer lockfile changes ([#&#8203;6812](https://github.com/earendil-works/pi/pull/6812) by [@&#8203;jmfederico](https://github.com/jmfederico)). - Fixed inherited terminal shutdown to clear the editor's inverted software cursor before restoring the hardware cursor ([#&#8203;6790](https://github.com/earendil-works/pi/pull/6790) by [@&#8203;dam9000](https://github.com/dam9000)). - Fixed inherited ANSI-aware text wrapping to recognize CRLF and CR line endings while preserving styles ([#&#8203;6764](https://github.com/earendil-works/pi/pull/6764) by [@&#8203;xz-dev](https://github.com/xz-dev)). - Fixed inherited editor paste registry corruption after deleting and undoing paste markers, preventing literal or mismatched paste markers in submitted prompts ([#&#8203;6844](https://github.com/earendil-works/pi/issues/6844)). - Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs ([#&#8203;6834](https://github.com/earendil-works/pi/pull/6834) by [@&#8203;xl0](https://github.com/xl0)). - Fixed inherited GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing ([#&#8203;6853](https://github.com/earendil-works/pi/pull/6853) by [@&#8203;aadishv](https://github.com/aadishv)). - Fixed messages queued during compaction to preserve steering and follow-up delivery behavior ([#&#8203;6730](https://github.com/earendil-works/pi/pull/6730) by [@&#8203;dannote](https://github.com/dannote)). - Fixed read tool errors being syntax-highlighted as if they were file contents ([#&#8203;6731](https://github.com/earendil-works/pi/pull/6731) by [@&#8203;dannote](https://github.com/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 ([#&#8203;6793](https://github.com/earendil-works/pi/issues/6793)). - Fixed prompt-template defaults for all arguments (`${@&#8203;:-default}` and `${ARGUMENTS:-default}`) ([#&#8203;6695](https://github.com/earendil-works/pi/issues/6695)). - Fixed obsolete custom UI, custom tool, and custom editor examples in the extension documentation ([#&#8203;6735](https://github.com/earendil-works/pi/issues/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 ([#&#8203;6727](https://github.com/earendil-works/pi/issues/6727)). ### [`v0.80.10`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#08010---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.9...v0.80.10) ##### New Features - **Kimi Coding thinking compatibility** — Kimi Coding models now use adaptive thinking correctly; K3 exposes its supported `max` level and supports replaying empty-signature thinking blocks. See [Kimi For Coding setup](docs/providers.md#api-keys) and [Model Options](docs/usage.md#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 `max` level ([#&#8203;6737](https://github.com/earendil-works/pi/issues/6737)). - Fixed inherited catalog generation restoring xAI models removed in 0.80.9 ([#&#8203;6736](https://github.com/earendil-works/pi/issues/6736)). ### [`v0.80.9`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0809---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.8...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](docs/extensions.md#dynamic-tool-loading), [OpenAI Compatibility](docs/models.md#openai-compatibility), and the [`kimi-deferred-tools.ts`](examples/extensions/kimi-deferred-tools.ts) example. ##### 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](docs/extensions.md#dynamic-tool-loading), [OpenAI Compatibility](docs/models.md#openai-compatibility), and the [`kimi-deferred-tools.ts`](examples/extensions/kimi-deferred-tools.ts) example. ##### 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 ([#&#8203;6734](https://github.com/earendil-works/pi-mono/pull/6734) by [@&#8203;Jaaneek](https://github.com/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 - Removed Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 from the built-in xAI model catalog ([#&#8203;6734](https://github.com/earendil-works/pi-mono/pull/6734) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). ### [`v0.80.8`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0808---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.7...v0.80.8) ##### New Features - **Unified model runtime and provider authentication** — `ModelRuntime` centralizes model configuration, provider-owned `/login`, and dynamic provider catalogs. See [Providers](docs/providers.md). - **Live model catalog refresh** — `/model` refreshes configured providers in the background, and `pi update --models` forces an immediate refresh. See [Install and Manage](docs/packages.md#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](docs/providers.md#xai-grokx-subscription). ##### Breaking Changes - Replaced the SDK's `CreateAgentSessionOptions.authStorage` and `modelRegistry` options with the async `modelRuntime` option. `AuthStorage` and its storage backends are no longer exported; use `ModelRuntime` (or a custom pi-ai `CredentialStore`), or `readStoredCredential()` for one-off reads of auth.json. - Removed redundant `ModelRuntime.getAll()`, `find()`, `getSnapshot()`, and `getAuthOptions()` projections. Use the pi-ai `Models` methods `getModels()`, `getModel()`, `getProviders()`, and `checkAuth()` directly. - Replaced SDK request-auth assembly through `ModelRegistry.getApiKeyAndHeaders()` with `ModelRuntime.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 synchronous `void` to `Promise<void>` because `models.json` loading is asynchronous. Extensions must await it before making synchronous registry reads. - Moved canonical dynamic catalog refresh to async `ModelRuntime.refresh()`/pi-ai `Models.refresh()`. Legacy extension OAuth `modifyModels` remains supported as a synchronous compatibility projection after credential initialization. ##### Added - Added `ModelRuntime` as the canonical async SDK and internal model/auth facade while preserving the synchronous extension-facing `ModelRegistry` API. `ModelRuntime.create()` accepts any pi-ai `CredentialStore` through its `credentials` option. - Added provider-owned `/login` discovery 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 --models` to 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 ([#&#8203;6651](https://github.com/earendil-works/pi-mono/pull/6651) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). ##### Changed - Changed `ModelRuntime` to compose built-in providers, immutable `models.json` configuration, and extension overlays through ad-hoc pi-ai provider methods. - Changed `ModelRuntime` to own final request assembly: `getAuth(model)` includes configured model headers, stream methods resolve auth once, and `before_provider_headers` runs as the Models-only header transform before provider dispatch. - Changed `/model` to 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 ([#&#8203;6630](https://github.com/earendil-works/pi-mono/issues/6630)). - Fixed inherited terminal output to normalize tab characters consistently ([#&#8203;6697](https://github.com/earendil-works/pi-mono/pull/6697) by [@&#8203;xz-dev](https://github.com/xz-dev)). - Fixed the Windows terminal title after checking npm packages ([#&#8203;6629](https://github.com/earendil-works/pi-mono/issues/6629)). - Fixed Bun standalone binaries to bundle OAuth adapters for interactive logins. ### [`v0.80.7`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0807---2026-07-14) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.6...v0.80.7) ##### Breaking Changes - Removed the `openai-responses` `compat.sendSessionIdHeader` flag from `models.json`. Session-affinity behavior is now controlled by `compat.sessionAffinityFormat` (`"openai"`, `"openai-nosession"`, or `"openrouter"`). Replace `sendSessionIdHeader: false` with `sessionAffinityFormat: "openai-nosession"` ([#&#8203;6496](https://github.com/earendil-works/pi-mono/pull/6496) by [@&#8203;petrroll](https://github.com/petrroll)). ##### New Features - **Cache-friendly dynamic tool loading** - Extensions can add tools during execution while supported Anthropic and OpenAI Responses models preserve prompt-cache prefixes. See [Dynamic Tool Loading](docs/extensions.md#dynamic-tool-loading). - **Message copy shortcut** - `Ctrl+X` copies the last assistant message in the transcript or the selected message in `/tree`, making older and branched messages directly copyable. See [Display and Message Queue](docs/keybindings.md#display-and-message-queue). - **Fable 5 `xhigh` and `max` thinking** - Native `xhigh` and `max` thinking levels are available across generated provider catalogs. See [Model Options](docs/usage.md#model-options). ##### Added - Added cache-friendly dynamic tool loading for extension tools activated by tool results. Supported Anthropic and OpenAI Responses models load definitions where they become available, preserving the cached prompt prefix. See [Dynamic Tool Loading](docs/extensions.md#dynamic-tool-loading) ([#&#8203;6474](https://github.com/earendil-works/pi-mono/pull/6474)). - Added inherited native `xhigh` and `max` thinking levels for Claude Fable 5 across all generated provider catalogs ([#&#8203;6490](https://github.com/earendil-works/pi-mono/pull/6490) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Added `Ctrl+X` to copy the last assistant message, or the selected message in `/tree`. - Added inherited `toolChoice` support for OpenAI and Codex Responses, including required and named tool selection ([#&#8203;6588](https://github.com/earendil-works/pi-mono/pull/6588) by [@&#8203;xl0](https://github.com/xl0)). ##### Fixed - Fixed inherited OpenRouter model context windows to use the top provider's actual context length ([#&#8203;6481](https://github.com/earendil-works/pi-mono/pull/6481) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited OpenRouter OpenAI-compatible session IDs to use the `x-session-id` header instead of OpenAI-specific session-affinity fields ([#&#8203;6496](https://github.com/earendil-works/pi-mono/pull/6496) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed `Ctrl+V` to paste clipboard text when the pasteboard does not contain an image. - Fixed `/login amazon-bedrock` to prompt for and save a Bedrock API key instead of only displaying ambient AWS credential setup instructions. - Fixed inherited Amazon Bedrock ambient AWS credentials to keep using SigV4 authentication, including for custom model IDs ([#&#8203;6532](https://github.com/earendil-works/pi-mono/pull/6532) by [@&#8203;ribelo](https://github.com/ribelo)). - Fixed inherited Cloudflare Workers AI and AI Gateway authentication to use ambient account and gateway IDs when stored credentials contain only an API key ([#&#8203;6292](https://github.com/earendil-works/pi-mono/pull/6292) by [@&#8203;markphelps](https://github.com/markphelps)). - Fixed inherited legacy terminal decoding for Alt+symbol key combinations such as `Alt+,` and `Alt+.` ([#&#8203;6523](https://github.com/earendil-works/pi-mono/pull/6523) by [@&#8203;ribelo](https://github.com/ribelo)). - Fixed the GitHub Copilot `mai-code-1-flash-picker` model to route through the `/responses` endpoint ([#&#8203;6544](https://github.com/earendil-works/pi-mono/pull/6544) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed branch summaries to work with providers that use ambient authentication instead of API keys ([#&#8203;6595](https://github.com/earendil-works/pi-mono/pull/6595) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited Amazon Bedrock errors to report unhandled provider stop reasons instead of only `An unknown error occurred` ([#&#8203;6598](https://github.com/earendil-works/pi-mono/pull/6598) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed npm package removal when installed packages have conflicting peer dependencies ([#&#8203;6604](https://github.com/earendil-works/pi-mono/pull/6604) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited Azure OpenAI Responses reasoning replay when `encrypted_content` appears only in the terminal response event ([#&#8203;6608](https://github.com/earendil-works/pi-mono/pull/6608) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited Anthropic-compatible proxies that omit `usage` from `message_delta` events ([#&#8203;6611](https://github.com/earendil-works/pi-mono/pull/6611) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed inherited OpenCode OpenAI Responses models to omit the unsupported `session-id` header while preserving other cache-affinity data ([#&#8203;6645](https://github.com/earendil-works/pi-mono/pull/6645) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed system prompt cache invalidation across dates by removing the current date from the default prompt ([#&#8203;6621](https://github.com/earendil-works/pi/issues/6621)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-tui)</summary> ### [`v0.83.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0830---2026-07-29) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.1...v0.83.0) ##### Fixed - Fixed long image fallback paths overflowing narrow terminals, shortened home-directory paths, and made absolute paths clickable when terminal hyperlinks are available ([#&#8203;7262](https://github.com/earendil-works/pi/pull/7262)). ### [`v0.82.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0821---2026-07-25) [Compare Source](https://github.com/earendil-works/pi/compare/v0.82.0...v0.82.1) ### [`v0.82.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0820---2026-07-24) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.1...v0.82.0) ##### Fixed - Fixed debug and crash logs to use the configured TUI log directory, including `PI_CODING_AGENT_DIR`, instead of always writing under `~/.pi/agent` ([#&#8203;6958](https://github.com/earendil-works/pi/pull/6958) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed narrow terminals crashing when the editor's bottom scroll indicator exceeded the terminal width ([#&#8203;7015](https://github.com/earendil-works/pi/pull/7015) by [@&#8203;christianklotz](https://github.com/christianklotz)). ### [`v0.81.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0811---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.81.0...v0.81.1) ### [`v0.81.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0810---2026-07-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.10...v0.81.0) ##### Fixed - Fixed terminal shutdown to clear the editor's inverted software cursor before restoring the hardware cursor, avoiding a duplicate cursor artifact ([#&#8203;6790](https://github.com/earendil-works/pi/pull/6790) by [@&#8203;dam9000](https://github.com/dam9000)). - Fixed ANSI-aware text wrapping to recognize CRLF and CR line endings while preserving styles across lines ([#&#8203;6764](https://github.com/earendil-works/pi/pull/6764) by [@&#8203;xz-dev](https://github.com/xz-dev)). - Fixed editor paste registry corruption when deleting paste markers: undo now restores the paste registry together with the text, and marker renumbering shifts registry entries in ascending id order, so submitted prompts no longer contain literal `[paste #N ...]` markers or the wrong paste's content ([#&#8203;6844](https://github.com/earendil-works/pi/issues/6844)). ### [`v0.80.10`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#08010---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.9...v0.80.10) ### [`v0.80.9`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0809---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.8...v0.80.9) ### [`v0.80.8`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0808---2026-07-16) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.7...v0.80.8) ##### Fixed - Fixed terminal output to normalize tab characters consistently ([#&#8203;6697](https://github.com/earendil-works/pi-mono/pull/6697) by [@&#8203;xz-dev](https://github.com/xz-dev)). ### [`v0.80.7`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0807---2026-07-14) [Compare Source](https://github.com/earendil-works/pi/compare/v0.80.6...v0.80.7) ##### Fixed - Fixed legacy terminal decoding for Alt+symbol key combinations such as `Alt+,` and `Alt+.` ([#&#8203;6523](https://github.com/earendil-works/pi-mono/pull/6523) by [@&#8203;ribelo](https://github.com/ribelo)). </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Update Pi to v0.80.10
All checks were successful
Test Tests passed
93c90219c8
tophattedbot force-pushed renovate/pi from 93c90219c8
All checks were successful
Test Tests passed
to e12cf364e6
All checks were successful
Test Tests passed
2026-07-20 11:37:58 +00:00
Compare
tophattedbot force-pushed renovate/pi from e12cf364e6
All checks were successful
Test Tests passed
to 899915f420 2026-07-21 13:38:38 +00:00
Compare
tophattedbot changed title from Update Pi to v0.80.10 to Update Pi to ^0.81.0 2026-07-21 13:38:43 +00:00
tophattedbot changed title from Update Pi to ^0.81.0 to Update Pi to ^0.82.0 2026-07-24 07:37:54 +00:00
tophattedbot changed title from Update Pi to ^0.82.0 to Update Pi to ^0.83.0 2026-07-29 23:39:02 +00:00
Some required checks are missing.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/pi:renovate/pi
git switch renovate/pi
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
things/pi!11
No description provided.