Skip to content

Releases: earendil-works/pi

v0.84.1

Choose a tag to compare

@github-actions github-actions released this 07 Aug 06:07

New Features

  • Qwen Token Plan Individual — Use the built-in provider for models documented for Individual subscriptions. See API Keys.
  • Authentication readiness checks — Use pi auth check to verify provider or model credentials, optionally emitting the resolved credential.
  • Improved fullscreen interaction — Select words and paragraphs with multiple clicks and configure half-page transcript scrolling. See TUI Fullscreen Viewport.
  • Terminating blocked tool calls — Extension tool_call handlers can stop all-terminating batches without another model call. See Tool Events.

Added

  • Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international QWEN_TOKEN_PLAN_API_KEY. See API Keys (#7659 by @arasovic).
  • Added pi auth check provider/model auth preflight with optional credential output (#7152).
  • Added terminate support to blocked extension tool_call events so all-terminating batches can skip the automatic follow-up model call. See Tool Events (#7715 by @muyiyr).
  • Added inherited double-click word and whitespace selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode (#7725, #7733 by @volsa).
  • Added inherited unbound half-page transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#7735).

Changed

  • Softened the bash tool's PI_* environment guideline in an attempt to reduce unnecessary inspection commands (#7128).
  • Reduced worst-case automatic terminal theme detection delay from 200 ms to 100 ms by probing color-scheme and background support concurrently.

Fixed

  • Fixed Bun standalone binaries crashing on startup when the cwd contains a bunfig.toml with preload by compiling with --no-compile-autoload-bunfig (#7685 by @geril07).
  • Fixed extension TUI method wrappers recursing indefinitely when delegating to the original method (#7731).
  • Fixed right-click not pasting clipboard text in fullscreen mode on Windows.
  • Fixed inherited Agent.reset() clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#7717 by @wesleyzhangwq).
  • Fixed inherited LaTeX relation, multiplication, and named-operator spacing, and matrix composition with stacked fractions, operator limits, and adjacent matrices.
  • Reduced inherited fullscreen mouse event volume under tmux, Zellij, and GNU Screen by using button-motion tracking instead of all-motion tracking.

v0.84.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 11:07

New Features

  • Fullscreen TUI mode — Switch between regular and fullscreen modes at runtime, with a sticky editor and footer, independently scrollable transcript, and draggable scrollbars. See UI & Display.
  • Mermaid and LaTeX rendering — Render Mermaid diagrams and terminal-friendly Unicode math in interactive transcripts. See Markdown settings and TUI Markdown.
  • Per-directory context overrides — Use AGENTS.override.md to replace context files for a specific directory. See Context Files.
  • Advanced custom model sampling — Configure arbitrary OpenAI-compatible samplingParams and opt-in vLLM thinking_token_budget values. See Sampling Parameters.
  • Baseten provider — Use built-in Baseten authentication and model support. See API Keys.

Breaking Changes

  • Renamed the inherited pi-ai ModelsStreamTransforms interface to ModelsRequestTransforms because its header transformation now applies to all authenticated provider requests.

  • Changed JSON and RPC message_update events to emit only assistantMessageEvent deltas, removing the cumulative message and assistantMessageEvent.partial fields that caused quadratic output growth. Clients that need partial messages must assemble deltas between message_start and message_end; the latter remains authoritative (#7290).

  • ModelRegistry.getApiKeyAndHeaders() now returns ProviderHeaders with string | null values and preserves null header-deletion markers. Extensions that inspect returned headers must handle null; extensions forwarding them to pi-ai streams should pass them through unchanged. This prevents placeholder OpenAI credentials from being sent through Cloudflare AI Gateway (#7030).

  • Changed ModelRegistry.refresh() to accept ModelsRefreshOptions and return ModelsRefreshResult instead of discarding cancellation and provider errors.

  • Changed ModelRuntime.setRuntimeApiKey() to accept auth cancellation options rather than catalog refresh options. Call refresh({ providers: [providerId], signal }) separately when remote freshness is required.

  • Required config-form extension OAuth refreshToken(credentials, signal) callbacks to accept and honor a concrete abort signal.

  • Replaced dynamic provider refresh context store access with the read-only context.stored snapshot and generation-checked context.publish() transaction.

    Providers built with createProvider({ fetchModels }): no catalog-publication migration is required. Before and after, return the fetched models and register the resulting provider; createProvider() owns restoration, persistence, and in-memory publication.

    // Before
    const beforeProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });
    pi.registerProvider(beforeProvider);
    
    // After: unchanged
    const afterProvider = createProvider({
      // ...
      fetchModels: async ({ signal }) => {
        const response = await fetch(catalogUrl, { signal });
        return parseModels(await response.json());
      },
    });
    pi.registerProvider(afterProvider);

    Handwritten native Provider.refreshModels(): replace direct store access and pre-publication mutation with generation-guarded publications.

    // Before
    refreshModels: async (context) => {
      const stored = await context.store.read();
      if (stored) currentModels = stored.models;
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      currentModels = refreshed;
      await context.store.write({ models: refreshed, checkedAt: Date.now() });
    },
    
    // After
    refreshModels: async (context) => {
      if (context.stored) {
        const restored = context.stored.models;
        if (!(await context.publish({
          update: () => { currentModels = restored; },
        }))) return;
      }
      if (!context.allowNetwork) return;
    
      const refreshed = await fetchModels(context.signal);
      if (context.signal.aborted) return;
      await context.publish({
        persist: { models: refreshed, checkedAt: Date.now() },
        update: () => { currentModels = refreshed; },
      });
    },

    For the config-form pi.registerProvider(name, { refreshModels }), callbacks that only return models remain unchanged; pi publishes the returned list. If such a callback previously used context.store for custom persistence, read context.stored and call context.publish({ persist: entry }). In publish(), omit persist to leave storage unchanged, pass a ModelsStoreEntry to write it, or pass persist: null to delete it.

  • Replaced the inherited pi-agent-core harness session model with the v4 lane-based Session, SessionStorage, and SessionRepo APIs, including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views.

  • Promoted the inherited v2 session and AgentHarness API from pi-agent-core's experimental entrypoint to its default export and removed the experimental subpaths.

  • Removed the inherited legacy JSONL and in-memory repository APIs. Use pi-agent-core's v4 JsonlSessionRepo or InMemorySessionRepo, both implementing the new SessionRepo contract.

  • Added the inherited required pi-agent-core FileSystem.renameFile() operation for atomic JSONL publication; custom harness file-system implementations must provide same-filesystem replacement semantics (#7707 by @davidbrai).

  • Replaced experimental remote-session list summaries with durable SessionMetadata; RemoteSession.sessions no longer exposes runtime phase, model, thinking, attachment, or lock state, which remains available from acquired SessionSnapshot values (#7708).

Added

  • Added built-in Baseten provider support with BASETEN_API_KEY authentication and zai-org/GLM-5.2 as the default model.
  • Added experimental remote-session client APIs: the transport-neutral PiClient, CBOR protocol, Unix-socket transport, and @earendil-works/pi-coding-agent/client RemoteSession controller with transcript reducers. See Pi Client and Remote Protocol (#7344, #7348, #7371, #7409).
  • Added CredentialSynchronizationError for credential changes that commit successfully but fail to synchronize local model state.
  • Added chainable pi.registerMarkdownTransformer() hooks for display-only transformation of user and assistant Markdown. See pi.registerMarkdownTransformer() (#7231 by @xl0).
  • Added an experimental fullscreen TUI mode, selectable through --tui-mode fullscreen or /settings (#7304).
  • Added runtime switching between regular and fullscreen TUI modes through /settings.
  • Added a sticky editor, status, widget, and footer dock to fullscreen mode while keeping the transcript independently scrollable.
  • Added a draggable transcript scrollbar to fullscreen mode with configurable auto, always, and hidden modes through /settings; always reserves the rightmost column.
  • Added page scrolling and marked-message navigation shortcuts to fullscreen mode.
  • Added an optional scrollbarThumb theme color for fullscreen scrollbar thumbs, falling back to selectedBg.
  • Added configurable themed Unicode rendering for supported Mermaid diagrams in interactive messages, including optional rendering while streaming. See Markdown settings (#7624 by @xl0).
  • Added opt-in Ctrl+P/Ctrl+N prompt history navigation, with explicit history bindings taking precedence over application shortcuts while the editor is focused.
  • Added per-directory AGENTS.override.md context files, which replace AGENTS.md or CLAUDE.md in the same directory while preserving context from other directories. See Context Files (#7681 by @Marvae).
  • Added AI_AGENT=pi to CLI and RPC child-process environments for generic agent attribution. See Environment Variables (#7493 by @renaudhartert-db).
  • Added inherited terminal-friendly Unicode rendering for LaTeX expressions i...
Read more

v0.83.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 22:30

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

Choose a tag to compare

@github-actions github-actions released this 25 Jul 12:47

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

Choose a tag to compare

@github-actions github-actions released this 24 Jul 06:12

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

Choose a tag to compare

@github-actions github-actions released this 21 Jul 16:45

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

Choose a tag to compare

@github-actions github-actions released this 21 Jul 13:34

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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 22:05

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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 17:23

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

Choose a tag to compare

@github-actions github-actions released this 16 Jul 14:40

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.