Update Pi to ^0.87.0 #26

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.84.0 → ^0.87.0 age confidence
@earendil-works/pi-ai (source) ^0.84.0 → ^0.87.0 age confidence
@earendil-works/pi-coding-agent (source) ^0.84.0 → ^0.87.0 age confidence
@earendil-works/pi-tui (source) ^0.84.0 → ^0.87.0 age confidence

Release Notes

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

v0.87.1

Compare Source

v0.87.0

Compare Source

Breaking Changes
  • Removed AgentOptions.shouldStopAfterTurn and AgentLoopConfig.shouldStopAfterTurn. Use finishTurn and return { action: "end" } to stop after the completed turn:

    // Before
    shouldStopAfterTurn: async (turn, signal) => await shouldStop(turn, signal),
    
    // After
    finishTurn: async (turn, signal) => {
      // shouldStopAfterTurn previously ran only for normal responses.
      if (turn.message.stopReason === "error" || turn.message.stopReason === "aborted") return;
      return (await shouldStop(turn, signal)) ? { action: "end" } : undefined;
    },
    

    finishTurn runs after the assistant and all tool results are finalized but before turn_end; its decision is applied after turn_end. It also runs for error and aborted responses, whose decisions are ignored because those responses remain hard exits. The guard in the migration preserves the old hook's normal-response-only invocation, including avoiding predicate side effects on hard exits. Returning { action: "end" } leaves steering and follow-up queues untouched and skips prepareNextTurn.

Added
  • Added prepareRequest, which runs before every provider request, including the first. For example, return { context: { ...context, messages: persistedMessages } } to install canonical context after already-selected input is emitted without introducing another queue poll.
  • Added finishTurn, which runs after assistant/tool-result finalization and before turn_end for normal, error, and aborted responses. Return { action: "end" } to end a normal run after turn_end, or undefined to preserve normal scheduling. { action: "continue" } ensures one next provider request: existing tool-result, steering, or follow-up scheduling can satisfy that request without adding another one; otherwise the loop makes one context-only request. Error and aborted responses remain hard exits.
  • Added Agent.peekQueuedMessages() to preview the next queue-selected batch without consuming it.
Fixed
  • Fixed harness reads misclassifying text files beginning with GIF as images (#​9755).

v0.86.1

Compare Source

v0.86.0

Compare Source

v0.85.1

Compare Source

v0.85.0

Compare Source

Fixed
  • Fixed proxied assistant responses dropping persisted provider-native thinking levels.
  • Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count (#​8979).
earendil-works/pi (@​earendil-works/pi-ai)

v0.87.1

Compare Source

Added
  • Added Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna to the GitHub Copilot catalog.
  • Added GPT-6 Sol and GPT-6 Luna for OpenAI API keys and OpenAI Codex subscriptions, with full reasoning-effort, prompt-caching, tool-search, long-context pricing, and official cost metadata.
  • Added Claude Opus 5.5 to the built-in Anthropic model catalog with adaptive thinking, 1M context, and official pricing metadata.
  • Added Grok 4.7 to the built-in xAI model catalog with long-context pricing metadata.
Fixed
  • Fixed image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part (#​9797)
  • Fixed Anthropic OAuth requests reporting an outdated Claude Code version.

v0.87.0

Compare Source

Added
  • Added model image-input limit and cache-safe resize metadata to the generated catalog (#​9631).
Fixed
  • Fixed unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support, while preserving strict tools for capable built-in models (#​9816).

v0.86.1

Compare Source

Added
  • Added Meta provider (Model API key and Muse subscription OAuth) with Muse Spark models (#​9096 by @​xl0).
Fixed
  • Fixed z.ai Prompt too long errors not being recognized as context overflow (#​9805).
  • Fixed Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed (#​9804 by @​EdenGottlieb).

v0.86.0

Compare Source

Breaking Changes
  • Changed provider-facing ProviderStreams and StreamFunction inputs from Context to normalized TranscriptContext values. System prompts and tool declarations now live in transcript system messages; custom providers must read them with getCurrentSystemPrompt() and getCurrentTools(). See System Messages.
  • Restricted ToolCall.arguments and ToolResultMessage.details to JSON-compatible values, changed ToolResultMessage into a conditional type, and made JsonValue arrays readonly.
Added
  • Added transcript-backed mid-conversation system prompt and tool changes, with native replay on supported models and automatic collapse for other providers. See System Messages (#​9548).
  • Added a generated public Radius model catalog for synchronous API lookup, with cached and live gateway catalogs overlaid at runtime.
  • Enabled native deferred tool loading for Fireworks Messages models. Use ToolSearch or tool_search as the loader name for prompt-prefix deferral (#​9323).
  • Added RetryPolicy.maxAgentDelayMs support to cap shared assistant retry backoff for summarization calls (#​8826).
  • Added Model.promptCache lifetime metadata for short and long retention tiers to support prompt-cache warming decisions (#​9668).
Fixed
  • Fixed GitHub Copilot GPT models, including GPT-6 Astra, using the Chat Completions adapter instead of the required Responses adapter (#​9253 by @​petrroll).
  • Fixed DeepSeek V4.1 thinking levels on OpenRouter and OpenCode Go preserving provider effort metadata (#​9485).
  • Fixed bodyless HTTP 400/413 errors from non-Cerebras providers being misclassified as context overflow (#​9482).
  • Fixed Vercel AI Gateway replaying unsigned thinking as assistant text (#​9676).
  • Fixed Google Generative AI and Vertex AI using unsupported thinking levels when reasoning is omitted or when model capabilities differ within a Gemini family (#​9455).
  • Fixed Anthropic-compatible relays breaking signed thinking replay when they report a different response model, while preserving fallback pricing (#​9188).
  • Fixed Amazon Bedrock one-hour cache writes being priced at the five-minute rate (#​9457).
  • Fixed quadratic CPU usage when draining buffered EventStream events (#​9055).
  • Fixed Mistral Medium reasoning requests to use reasoning_effort for all reasoning-capable mistral-medium-* model IDs instead of the unsupported prompt_mode (#​8700).
  • Fixed OpenCode and OpenCode Go requests to send x-opencode-session from sessionId across all supported API adapters (#​9326).
  • Fixed OpenAI Codex requests to send the model's Off reasoning effort instead of omitting it, while respecting unsupported Off mappings (#​9191).
  • Fixed Fireworks unsigned thinking replay and reasoning effort selection using catalog metadata, with verified DeepSeek V4 and Qwen3.8 fallbacks and removal of redundant GLM 5.2 and Kimi K3 effort aliases (#​9323).
  • Fixed OpenRouter requests to send x-session-id from sessionId for Chat Completions and Anthropic Messages models when prompt caching is enabled (#​9102).
  • Fixed the DeepSeek catalog to advertise deepseek-flash for DeepSeek V4.1 Flash instead of retired Flash aliases, and refreshed DeepSeek pricing metadata (#​9423).
  • Fixed Mistral-hosted GLM-5.2 reasoning requests to use reasoning_effort instead of the ignored prompt_mode (#​9375).
  • Fixed OpenAI-compatible Responses errors to identify the actual provider instead of always labeling them as OpenAI errors (#​9298).
  • Fixed Baseten requests to send session-affinity headers from sessionId for automatic prompt-cache routing (#​9629).
  • Fixed retry classification for Cloudflare 520 responses (#​9627).
  • Fixed retry classification for transient Azure peak-load capacity errors (#​9669).
Removed
  • Removed GPT-5.4 and GPT-5.4 mini from the OpenAI Codex catalog after they became unavailable to ChatGPT accounts (#​9394).

v0.85.1

Compare Source

Added
  • Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions.
Fixed
  • Fixed long prompt-cache requests for GPT-5.6+ Responses models to use prompt_cache_options.ttl: "30m" instead of prompt_cache_retention: "24h".

v0.85.0

Compare Source

Breaking Changes
  • Replaced createGatewayBindingFetch() with createAiBindingFetch() for Cloudflare Workers AI bindings. Configure the model's Workers AI Gateway passthrough baseUrl directly; requests now pass through the binding unchanged (#​8287 by @​Maximo-Guk).
Added
  • Added compact, persistable assistant-message frames with AssistantMessageFrameEncoder and reduceAssistantMessageFrames().
  • Added the vllmPriority OpenAI-compatible model setting for forwarding scheduler priority to vLLM (#​9004 by @​AppleDannyClegg).
  • Added the supportsMaxOutputTokens OpenAI Responses compatibility setting (#​8941 by @​scturtle).
  • Added an optional timestamp argument to uuidv7() for follower IDs.
  • Added narrow api, providers, and utils subpath exports for direct imports without loading the package barrel.
  • Added Anthropic per-turn effort persistence, deterministic historical effort markers, and signed-thinking mismatch recovery for supported Claude models across Anthropic Messages transports, including OpenRouter.
  • Added Meta provider (Model API key and Muse subscription OAuth) with Muse Spark models.
Fixed
  • Removed the unavailable Grok Build 0.1 model from the built-in xAI catalog (#​9093 by @​Jaaneek).
  • Fixed assistant-message frames preserving the provider thinking level.
  • Fixed simple provider streams to consistently emit standard stream events and custom tool-call deltas.
  • Fixed the Qwen Token Plan Individual catalog to include Qwen3.8 Flash (#​9021).
  • Fixed Baseten GLM-5.2 models incorrectly advertising image input support (#​8293 by @​Panoplos).
  • Fixed Fireworks GLM models using the wrong API adapter.
  • Removed the unnecessary Chord dependency from pi-ai by defining its exported JsonValue type directly.
  • Fixed GitHub Copilot Claude Fable 5 requests to use the Anthropic Messages adapter so selected reasoning levels are sent (#​8961).
  • Fixed OpenAI Codex SSE parsing to process terminal events that are not followed by a blank line (#​9047).
  • Fixed NO_PROXY matching for both root domains and subdomains (#​8737 by @​MeiSiristhebest).
earendil-works/pi (@​earendil-works/pi-coding-agent)

v0.87.1

Compare Source

New Features
  • Latest frontier models — Use Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna through supported providers, including GitHub Copilot. See Choose a Model.
  • Grok 4.7 by default for xAI — New xAI sessions now default to Grok 4.7. See Provider Authentication.
Added
  • Added inherited Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna support for GitHub Copilot.
  • Added inherited GPT-6 Sol and GPT-6 Luna support for OpenAI API keys and OpenAI Codex subscriptions.
  • Added inherited Claude Opus 5.5 support for Anthropic with adaptive thinking and a 1M context window.
Changed
  • Changed the default xAI model to Grok 4.7.
Fixed
  • Fixed split-turn compaction summaries being refused by Claude Fable 5.1 by clearly separating the conversation and using continuation-oriented instructions (#​9908 by @​davidbrai).
  • Fixed missing or invalid --mode values being silently ignored instead of reporting an error and exiting with a nonzero status (#​9045).
  • Fixed inherited image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part (#​9797).
  • Fixed inherited Anthropic OAuth requests reporting an outdated Claude Code version.

v0.87.0

Compare Source

New Features
  • Canonical session context and extension boundaries — Edit model context without rewriting history and add actionable lifecycle hooks. See ContextEditEntry and extension events.
  • Full-transcript context extensions — Use context_with_system for per-request system-message transformations. See context_with_system.
  • Per-model image input limits — Configure cache-safe image resizing per model for attachments, read, and tool-result images. See Image Input Limits.
Breaking Changes
  • Removed the inherited shouldStopAfterTurn agent option. Use finishTurn and return { action: "end" } instead. finishTurn runs before turn_end but applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returning undefined for those hard exits. See the @earendil-works/pi-agent-core changelog for a complete before-and-after example.
  • Added ContextEditEntry to the exported SessionEntry union. TypeScript consumers with exhaustive entry switches must handle context_edit; use replacement: null for omission and a content replacement otherwise.
  • Made SessionManager canonical for AgentSession provider context. Assigning session.agent.state.messages no longer replaces future request history; restore with SessionManager.inMemory(cwd, { id }, entries), navigate with session.navigateTree(), or append through session.sessionManager and call session.refreshContext().
  • Expanded TurnEndEvent with required boundary fields and added AgentBeforeSettleEvent to the exported ExtensionEvent union. Consumers constructing events or exhaustively switching on ExtensionEvent must handle the new shapes. ExtensionRunner.emit() no longer accepts turn_end; host integrations dispatch actionable boundaries with emitBoundary(baseEvent, buildContext).
  • Deferred runs requested from agent_settled handlers until all settled handlers finish. Handlers still observe ctx.isIdle() === true, but no longer see a reentrant agent_start during the same notification dispatch.
Added
  • Added append-only model-context edits. For example, sessionManager.appendContextEdit(entryId, null) omits one message from future provider context without changing raw history, usage, or UI history.
  • Added actionable turn_end and agent_before_settle extension boundaries. Return { entries: [...event.entries, draft], continue: true } to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling.
  • Added retain-none compaction input: sessionManager.appendCompaction(summary, null, tokensBefore) stores the compaction's own ID as its kept boundary.
  • Added the context_with_system extension event, which runs after context handlers on the full transcript including system messages and sends its result verbatim. See context_with_system.
  • Added per-model image resize profiles through inputLimits.images.resize in models.json, applied to file attachments, image reads, and tool-result images (#​9631).
Fixed
  • Fixed string context-edit replacements producing invalid assistant and tool-result message content instead of text blocks.
  • Fixed context-invisible boundary metadata and replacement edits causing newly appended or replaced input to be summarized before its first provider request.
  • Fixed edited-context accounting both discarding valid assistant usage captured after the latest context edit and reusing that usage after a later compaction made it stale.
  • Fixed selected error retries and final length/overflow recovery retaining abandoned model attempts in future provider context; post-run recovery omissions are now persisted without hiding raw transcript history or changing queue scheduling.
  • Fixed context handlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they run. See context (#​9789, #​9822).
  • Fixed /bug allowing uploads in offline mode while preserving local zip exports (#​9841 by @​christianklotz).
  • Fixed idle prompt-cache warming rebuilding expired caches when its timer or an extension decision is delayed.
  • Improved crash diagnostics with hints identifying loaded extensions that appear in the stack trace.
  • Fixed text files beginning with GIF being misclassified as images and omitted from read and CLI @file input (#​9755).
  • Fixed malformed prompt template frontmatter being silently ignored instead of reported as a resource warning (#​9830 by @​christianklotz).
  • Fixed inherited unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support (#​9816).

v0.86.1

Compare Source

New Features
  • Meta Muse provider — Sign in with Meta using /login meta or use META_API_KEY to access Muse Spark models. See Meta (Muse subscription).
Added
  • Added Meta (Muse subscription) login via /login meta with automatic Model API key refresh, plus META_API_KEY support (#​9096 by @​xl0).
Changed
  • Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time.
Fixed
  • Fixed /bug descriptions dropping line breaks from pasted diagnostics.
  • Fixed /bug hints appearing for user cancellations and retryable provider failures such as service unavailability.
  • Fixed clipboard copy failing in containers and WSL without WSLg by restoring the OSC 52 fallback when no display is available, and added a verified Windows clipboard backend for WSL (#​9688).
  • Fixed inherited z.ai Prompt too long errors not being recognized as context overflow (#​9805).
  • Fixed inherited Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed (#​9804 by @​EdenGottlieb).

v0.86.0

Compare Source

New Features
  • Prompt cache warming — Keep valuable prompt caches alive during long tool runs and optionally while idle using cost-aware refreshes. See Cache Warming.
  • Bug reporting — Report problems with /bug using redacted diagnostics, optional transcripts, or exported ZIP archives. See Reporting Bugs.
  • Transcript-aware prompt and tool updates — Preserve instruction and tool changes across resume and branch navigation while retaining cached prefixes. See before_agent_start.
  • Offline Radius model catalog — Select Radius models immediately, with cached and live catalogs overlaid when available. See Radius.
  • Per-model compaction budgets — Configure reserved and recent-token budgets by model. See Per-model overrides.
Breaking Changes
  • Changed inherited pi-ai provider stream inputs from Context to normalized TranscriptContext values. Custom providers must read system prompts and tool declarations from context.messages with getCurrentSystemPrompt() and getCurrentTools(). See Custom Streaming API.
  • Restricted inherited ToolCall.arguments and ToolResultMessage.details to JSON-compatible values, changed ToolResultMessage into a conditional type, and made JsonValue arrays readonly.
  • user_bash now fails closed: errors or invalid defined results abort the command without invoking later handlers or executing locally. Return undefined to continue propagation; otherwise return { operations } or { result } (#​9068).
Added
  • Added transcript-backed mid-conversation system prompt and tool changes so instruction and tool updates survive resume and branch navigation while preserving cached prefixes on supported models. See before_agent_start and Entry Types (#​9548).
  • Added inherited native deferred tool loading for Fireworks Messages models. Use ToolSearch or tool_search as the loader name for prompt-prefix deferral (#​9323).
  • Added click toggling for branch summaries, compaction summaries, and skill invocation entries.
  • Added the public Radius model catalog for immediate and offline model selection, with cached and live gateway catalogs overlaid when available.
  • Added ctx.modelRegistry.stream() and streamSimple() for extension model calls through configured providers with resolved authentication (#​8964).
  • Added per-model reserveTokens and keepRecentTokens settings through compaction.modelOverrides, with ordinary compaction settings as fallback (#​8133).
  • Added compat.allowedFallbackModels configuration for overriding or disabling Anthropic server-side fallback models (#​9294).
  • Added an unsubscribe function from pi.on() so extensions can drop event handlers. Handlers added or removed during a dispatch apply to later dispatches, not the current one (#​8967).
  • Exported extension hook event and result types that were previously omitted from the package entry points (#​9642).
  • Added /bug [description] to report a bug to the Pi developers. The report bundles environment, model, provider, extension, and settings metadata (secrets redacted), assistant message diagnostics from the session, optionally the session transcript, or a model-written summary of what went wrong instead. It is uploaded to Radius (no login required; attributed when logged in) or exported as a zip archive, and the report id is recorded in the session as a pi.bug-report entry. Crashes are recorded in ~/.pi/agent/crashes.json, announced once on the next start, and attached to the next report; unexplained errors and exhausted retries point at /bug once per session.
  • Added cost-aware prompt-cache warming during long tool runs and optionally while idle, with configurable modes, model cache-lifetime metadata, /session diagnostics, transcript notices, and the cache_warming_decision extension event. See Cache Warming (#​9668).
Changed
  • Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time.
  • Made --resume session results appear progressively, using file modification times to prioritize all-folder loading and cancelling outstanding transcript reads after selection.
  • Reduced --continue startup time by checking candidate session headers in modification-time order and stopping after the newest matching session.
  • Replaced the external native clipboard dependency with bundled asynchronous macOS, Windows, and X11 helpers while preserving platform command and OSC 52 fallbacks (#​9163).
  • Reduced inherited fuzzy search latency for long texts by using native substring search instead of scanning each character in JavaScript (#​9267).
  • Moved compaction, branch summarization, and retry spinners into the editor border alongside the working indicator. Custom editors use the same embedding opt-in for all status spinners.
  • Enabled strict-prefer JSON-schema sampling by default for built-in read, bash, powershell, edit, and write tools, without requiring PI_EXPERIMENTAL. Extensions can re-register tool definitions with constrainedSampling: false.
  • Formatted Bash and PowerShell tool durations of at least one minute as minutes and seconds, with hours when needed (#​9628).
  • Deferred the extension compiler and bundled virtual modules until a filesystem extension is loaded, reducing the baseline SDK import cost (#​9540).
Fixed
  • Fixed GitHub Copilot GPT models, including GPT-6 Astra, using the Chat Completions adapter instead of the required Responses adapter (#​9253 by @​petrroll).
  • Fixed inherited DeepSeek V4.1 thinking levels on OpenRouter and OpenCode Go preserving provider effort metadata (#​9485).
  • Fixed inherited bodyless HTTP 400/413 errors from non-Cerebras providers being misclassified as context overflow (#​9482).
  • Fixed inherited Vercel AI Gateway replaying unsigned thinking as assistant text (#​9676).
  • Fixed inherited Google Generative AI and Vertex AI using unsupported thinking levels when reasoning is omitted or when model capabilities differ within a Gemini family (#​9455).
  • Fixed inherited Anthropic-compatible relays breaking signed thinking replay when they report a different response model, while preserving fallback pricing (#​9188).
  • Fixed inherited Amazon Bedrock one-hour cache writes being priced at the five-minute rate (#​9457).
  • Fixed inherited quadratic CPU usage when draining buffered EventStream events (#​9055).
  • Fixed inherited Mistral Medium reasoning requests to use reasoning_effort for all reasoning-capable mistral-medium-* model IDs instead of the unsupported prompt_mode (#​8700).
  • Fixed inherited OpenCode and OpenCode Go requests to send x-opencode-session from sessionId across all supported API adapters (#​9326).
  • Fixed inherited OpenAI Codex requests to send the model's Off reasoning effort instead of omitting it, while respecting unsupported Off mappings (#​9191).
  • Fixed inherited Fireworks unsigned thinking replay and reasoning effort selection using catalog metadata, with verified DeepSeek V4 and Qwen3.8 fallbacks and removal of redundant GLM 5.2 and Kimi K3 effort aliases (#​9323).
  • Fixed inherited OpenRouter requests to send x-session-id from sessionId for Chat Completions and Anthropic Messages models when prompt caching is enabled (#​9102).
  • Fixed the inherited DeepSeek catalog to advertise deepseek-flash for DeepSeek V4.1 Flash instead of retired Flash aliases, and refreshed DeepSeek pricing metadata (#​9423).
  • Fixed inherited Mistral-hosted GLM-5.2 reasoning requests to use reasoning_effort instead of the ignored prompt_mode (#​9375).
  • Fixed inherited OpenAI-compatible Responses errors to identify the actual provider instead of always labeling them as OpenAI errors (#​9298).
  • Fixed inherited Baseten requests to send session-affinity headers from sessionId for automatic prompt-cache routing (#​9629).
  • Fixed inherited retry classification for Cloudflare 520 responses (#​9627).
  • Fixed inherited retry classification for transient Azure peak-load capacity errors (#​9669).
  • Fixed session tree navigation racing with active compaction and replacing its progress UI (#​9179 by @​acmerfight).
  • Fixed exact session ID lookup scanning complete transcript bodies instead of reading session headers (#​9601 by @​metaist).
  • Fixed repeated Anthropic thinking-drop notices being shown for the same dropped blocks, and shortened notices while retaining details in the session (#​9391).
  • Fixed mid-run threshold compaction silently skipping oversized trailing tool results (#​9740).
  • Fixed signal-terminated local shell commands being reported as successful with partial output (#​9577 by @​BrendanJMurphy).
  • Fixed local clipboard failures reporting success when the terminal ignored the fallback OSC 52 write, and added platform-specific setup guidance when no clipboard backend works (#​9618).
  • Capped agent-level retry backoff at retry.maxAgentDelayMs (60s by default) so long retry runs stay responsive during prolonged transient outages (#​8826).
  • Fixed direct RPC steer and follow_up commands bypassing extension input handlers (#​8718).
  • Fixed premature missing-model errors after login by waiting for catalog discovery. Radius now defaults to balanced, falling back to the first available Radius model when needed.
  • Fixed fullscreen mode reserving a blank row for custom footers that render zero rows (#​8919).
  • Fixed extension tools without parameter schemas to be rejected during registration instead of breaking provider requests (#​9300).
  • Fixed before_agent_start handlers returning systemPrompt (and forceSystemPrompt) on models with mid-conversation system messages: the forced prompt is now sent as the provider's leading system prompt instead of being appended as a section patch after the original prompt.
  • Fixed loaded llama.cpp models with enable_thinking chat templates ignoring Pi's thinking level (#​9528).
  • Fixed cancellation races that could start automatic compaction, leave stale retry state, or miss cancellation while waiting for summarization authentication (#​9340, #​9777).
  • Fixed asynchronous Kitty image conversion replacing newer partial tool output images (#​8743 by @​wutongyuonce).
  • Fixed inherited skill slash-command autocomplete ranking the skill: prefix instead of the bare skill name (#​9120 by @​yearth).
  • Fixed inherited file autocomplete boundaries and path quoting around CJK punctuation (#​9746 by @​haoqixu).
  • Fixed inherited LaTeX legacy font switches falling back to raw source, centered cases layouts around surrounding equations, and vertically laid out unsupported and nested display scripts (#​8827, #​9564, #​7929).
  • Fixed inherited fullscreen Kitty images being erased by later row clears in WezTerm (#​9169).
Removed
  • Removed unavailable inherited GPT-5.4 and GPT-5.4 mini models from OpenAI Codex selection (#​9394).

v0.85.1

Compare Source

New Features
  • GPT-6 Astra — Available through OpenAI API keys and OpenAI Codex subscriptions. See API Keys and OpenAI Codex.
Added
  • Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions.
  • Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode (#​9166 by @​xl0).
Fixed
  • Fixed configurable save keybindings in the model and thinking selectors (#​9149 by @​rwachtler).
  • Fixed SDK import failures caused by unintentionally publishing internal experimental code and dependencies in 0.85.0. The experimental client and experimental/plugin subpaths and server/client commands are now source-only through pi-test.sh; the supported local SDK and stdio RPC API are unchanged (#​9132).
  • Fixed mouse hover changing selection and recentering autocomplete and settings lists, causing clicks to target a different item.
  • Fixed long prompt-cache requests for GPT-5.6+ Responses models to use prompt_cache_options.ttl: "30m" instead of prompt_cache_retention: "24h".

v0.85.0

Compare Source

New Features
  • Persistent Claude thinking effort — Supported Anthropic transports preserve per-turn effort and recover safely from signed-thinking mismatches. See Model Configuration.
  • Fullscreen transcript controls — Jump to the latest message from a scrolled transcript and use the embedded working indicator. See TUI Fullscreen Viewport.
  • Restorable in-memory sessions — Resume externally stored session entries through the SDK. See Session Management.
Added
  • Added SessionManager.inMemory() support for restoring externally managed session entries (#​8980 by @​y-nk).
  • Added inherited OpenAI-compatible vllmPriority and supportsMaxOutputTokens model settings for vLLM scheduler priority and OpenAI Responses output-token limits (#​9004 by @​AppleDannyClegg, #​8941 by @​scturtle).
  • Added inherited LaTeX rendering for relational algebra join symbols (#​9050 by @​haoqixu).
  • Added a clickable "Jump to latest message" label with the tui.altScreen.bottom shortcut to the fullscreen transcript while it is scrolled up (#​9080 by @​rwachtler).
  • Added Meta (Muse subscription) login via /login meta with automatic Model API key refresh, plus META_API_KEY support.
Changed
  • Moved the streaming working indicator into the default editor border and matched its default spinner and label to the thinking-level border color. Custom editors retain the standalone indicator unless they opt in to embedding it (#​8799 by @​cristinaponcela).
  • Reduced inherited fullscreen transcript search latency on large transcripts by caching unchanged search results, indexing ASCII runs, and limiting highlight work to visible matches (#​8800 by @​cristinaponcela).
Fixed
  • Fixed managed fd and ripgrep downloads on Linux musl systems (#​9070 by @​Charlie0113-T).
  • Removed the unavailable inherited Grok Build 0.1 model from /model (#​9093 by @​Jaaneek).
  • Fixed inherited provider streams emitting incompatible event sequences and custom tool-call deltas.
  • Restored the @earendil-works/pi-coding-agent/client compatibility entry point.
  • Fixed the inherited Qwen Token Plan Individual catalog to include Qwen3.8 Flash (#​9021).
  • Fixed inherited OpenAI Codex SSE parsing to process terminal events that are not followed by a blank line (#​9047).
  • Fixed inherited GitHub Copilot Claude Fable 5 requests so selected reasoning levels are sent (#​8961).
  • Fixed inherited Baseten GLM-5.2 models incorrectly advertising image input support (#​8293 by @​Panoplos).
  • Fixed skills being unavailable when Bash is the only enabled tool (#​8552 by @​xl0).
  • Fixed concurrent session shares overwriting one another (#​8613 by @​wutongyuonce).
  • Fixed image orientation detection skipping EXIF data after non-EXIF APP1 segments (#​8616 by @​wutongyuonce).
  • Fixed imported sessions overwriting an existing session with the same filename (#​8985 by @​wutongyuonce).
  • Fixed session forks losing their compaction boundary (#​8990 by @​acmerfight).
  • Fixed in-memory session forks before an active turn settled (#​8937 by @​acmerfight).
  • Fixed inherited Fireworks GLM models using the wrong API adapter.
  • Fixed inherited NO_PROXY matching for root domains and subdomains (#​8737 by @​MeiSiristhebest).
  • Fixed bash, edit, find, grep, ls, read, and write tools ignoring ctx.cwd (#​8627 by @​vmizg).
  • Fixed inherited terminal startup under restricted seccomp policies that reject the SIGWINCH self-signal (#​8898 by @​bartlomiejkida).
  • Fixed inherited Zed terminal image capability detection (#​8828 by @​Perlence).
  • Fixed drag selection continuing over the fullscreen editor.
  • Fixed managed fd and ripgrep downloads requiring the GitHub Releases API (#​8708 by @​Terminator666666).
  • Fixed branch summaries failing when reasoning consumes the previous 2048-token output cap (#​8845).
  • Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count (#​8979).
  • Fixed proxied plain-HTTP provider requests hanging after a tool call by tunneling them with CONNECT (#​8134).
  • Fixed RPC abort reporting success without cancelling an in-progress manual compaction (#​8920).
earendil-works/pi (@​earendil-works/pi-tui)

v0.87.1

Compare Source

v0.87.0

Compare Source

v0.86.1

Compare Source

v0.86.0

Compare Source

Added
  • Added bundled asynchronous native clipboard readers for macOS, Windows, and X11 through the exported getNativeClipboard() API, replacing the external native clipboard dependency in consumers (#​9163).
Changed
  • Reduced fuzzy search latency for long texts by using native substring search instead of scanning each character in JavaScript (#​9267).
Fixed
  • Fixed LaTeX legacy font switches falling back to raw source, centered cases layouts around surrounding equations, and vertically laid out unsupported and nested display scripts (#​8827, #​9564, #​7929).
  • Fixed fullscreen clipboard failures hiding actionable backend error messages behind a generic notice, and extended failure notices to five seconds (#​9618).
  • Fixed fullscreen Kitty images being erased by later row clears in WezTerm (#​9169).
  • Fixed skill slash-command autocomplete ranking the skill: prefix instead of the bare skill name (#​9120 by @​yearth).
  • Fixed file autocomplete boundaries and path quoting around CJK punctuation (#​9746 by @​haoqixu).

v0.85.1

Compare Source

Added
  • Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode (#​9166 by @​xl0).
Fixed
  • Fixed mouse hover changing selection and recentering autocomplete and settings lists, causing clicks to target a different item.

v0.85.0

Compare Source

Breaking Changes
  • Removed coding-agent environment-variable defaults from pi-tui. Applications must configure the hardware cursor and clear-on-shrink behavior through the renderer constructor and setClearOnShrink(). PI_DEBUG_REDRAW is now PI_TUI_DEBUG_REDRAW; debug and crash log filenames now use the pi-tui- prefix. When no log directory is supplied, redraw logging is disabled and crash dumps are written to the OS temp directory. (#​8699 by @​geraschenko)
Added
  • Added a TuiAltScreen scrollToEndIndicator option that renders a clickable jump-to-end label on a follow-end primary scroll view while it is scrolled away from the end (#​9080 by @​rwachtler).
  • Added LaTeX rendering for relational algebra join symbols (#​9050 by @​haoqixu).
Changed
  • Changed the Loader animation and editor integration to support embedded working indicators (#​8799 by @​cristinaponcela).
  • Reduced fullscreen transcript search latency on large transcripts by caching unchanged search results, indexing ASCII runs, and limiting highlight work to visible matches (#​8800 by @​cristinaponcela).
Fixed
  • Fixed drag selection continuing over an editor.
  • Fixed terminal startup under restricted seccomp policies that reject the SIGWINCH self-signal (#​8898 by @​bartlomiejkida).
  • Fixed Zed terminal image capability detection (#​8828 by @​Perlence).

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 CLI.

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.84.0` → `^0.87.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-agent-core/0.84.4/0.87.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-agent-core/0.87.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-agent-core/0.84.4/0.87.1?slim=true) | | [@earendil-works/pi-ai](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/ai)) | [`^0.84.0` → `^0.87.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-ai/0.84.4/0.87.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-ai/0.87.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-ai/0.84.4/0.87.1?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.84.0` → `^0.87.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-coding-agent/0.84.4/0.87.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-coding-agent/0.87.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-coding-agent/0.84.4/0.87.1?slim=true) | | [@earendil-works/pi-tui](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/tui)) | [`^0.84.0` → `^0.87.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-tui/0.84.4/0.87.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-tui/0.87.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-tui/0.84.4/0.87.1?slim=true) | --- ### Release Notes <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-agent-core)</summary> ### [`v0.87.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0871---2026-09-22) [Compare Source](https://github.com/earendil-works/pi/compare/v0.87.0...v0.87.1) ### [`v0.87.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0870---2026-09-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.1...v0.87.0) ##### Breaking Changes - Removed `AgentOptions.shouldStopAfterTurn` and `AgentLoopConfig.shouldStopAfterTurn`. Use `finishTurn` and return `{ action: "end" }` to stop after the completed turn: ```ts // Before shouldStopAfterTurn: async (turn, signal) => await shouldStop(turn, signal), // After finishTurn: async (turn, signal) => { // shouldStopAfterTurn previously ran only for normal responses. if (turn.message.stopReason === "error" || turn.message.stopReason === "aborted") return; return (await shouldStop(turn, signal)) ? { action: "end" } : undefined; }, ``` `finishTurn` runs after the assistant and all tool results are finalized but before `turn_end`; its decision is applied after `turn_end`. It also runs for error and aborted responses, whose decisions are ignored because those responses remain hard exits. The guard in the migration preserves the old hook's normal-response-only invocation, including avoiding predicate side effects on hard exits. Returning `{ action: "end" }` leaves steering and follow-up queues untouched and skips `prepareNextTurn`. ##### Added - Added `prepareRequest`, which runs before every provider request, including the first. For example, return `{ context: { ...context, messages: persistedMessages } }` to install canonical context after already-selected input is emitted without introducing another queue poll. - Added `finishTurn`, which runs after assistant/tool-result finalization and before `turn_end` for normal, error, and aborted responses. Return `{ action: "end" }` to end a normal run after `turn_end`, or `undefined` to preserve normal scheduling. `{ action: "continue" }` ensures one next provider request: existing tool-result, steering, or follow-up scheduling can satisfy that request without adding another one; otherwise the loop makes one context-only request. Error and aborted responses remain hard exits. - Added `Agent.peekQueuedMessages()` to preview the next queue-selected batch without consuming it. ##### Fixed - Fixed harness reads misclassifying text files beginning with `GIF` as images ([#&#8203;9755](https://github.com/earendil-works/pi/issues/9755)). ### [`v0.86.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0861---2026-09-20) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.0...v0.86.1) ### [`v0.86.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0860---2026-09-19) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.1...v0.86.0) ### [`v0.85.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0851---2026-09-05) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.0...v0.85.1) ### [`v0.85.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/agent/CHANGELOG.md#0850---2026-09-04) [Compare Source](https://github.com/earendil-works/pi/compare/v0.84.4...v0.85.0) ##### Fixed - Fixed proxied assistant responses dropping persisted provider-native thinking levels. - Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count ([#&#8203;8979](https://github.com/earendil-works/pi/issues/8979)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-ai)</summary> ### [`v0.87.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0871---2026-09-22) [Compare Source](https://github.com/earendil-works/pi/compare/v0.87.0...v0.87.1) ##### Added - Added Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna to the GitHub Copilot catalog. - Added GPT-6 Sol and GPT-6 Luna for OpenAI API keys and OpenAI Codex subscriptions, with full reasoning-effort, prompt-caching, tool-search, long-context pricing, and official cost metadata. - Added Claude Opus 5.5 to the built-in Anthropic model catalog with adaptive thinking, 1M context, and official pricing metadata. - Added Grok 4.7 to the built-in xAI model catalog with long-context pricing metadata. ##### Fixed - Fixed image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part ([#&#8203;9797](https://github.com/earendil-works/pi/issues/9797)) - Fixed Anthropic OAuth requests reporting an outdated Claude Code version. ### [`v0.87.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0870---2026-09-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.1...v0.87.0) ##### Added - Added model image-input limit and cache-safe resize metadata to the generated catalog ([#&#8203;9631](https://github.com/earendil-works/pi/issues/9631)). ##### Fixed - Fixed unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support, while preserving strict tools for capable built-in models ([#&#8203;9816](https://github.com/earendil-works/pi/issues/9816)). ### [`v0.86.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0861---2026-09-20) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.0...v0.86.1) ##### Added - Added Meta provider (Model API key and Muse subscription OAuth) with Muse Spark models ([#&#8203;9096](https://github.com/earendil-works/pi/pull/9096) by [@&#8203;xl0](https://github.com/xl0)). ##### Fixed - Fixed z.ai `Prompt too long` errors not being recognized as context overflow ([#&#8203;9805](https://github.com/earendil-works/pi/issues/9805)). - Fixed Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed ([#&#8203;9804](https://github.com/earendil-works/pi/pull/9804) by [@&#8203;EdenGottlieb](https://github.com/EdenGottlieb)). ### [`v0.86.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0860---2026-09-19) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.1...v0.86.0) ##### Breaking Changes - Changed provider-facing `ProviderStreams` and `StreamFunction` inputs from `Context` to normalized `TranscriptContext` values. System prompts and tool declarations now live in transcript system messages; custom providers must read them with `getCurrentSystemPrompt()` and `getCurrentTools()`. See [System Messages](README.md#system-messages). - Restricted `ToolCall.arguments` and `ToolResultMessage.details` to JSON-compatible values, changed `ToolResultMessage` into a conditional type, and made `JsonValue` arrays readonly. ##### Added - Added transcript-backed mid-conversation system prompt and tool changes, with native replay on supported models and automatic collapse for other providers. See [System Messages](README.md#system-messages) ([#&#8203;9548](https://github.com/earendil-works/pi/pull/9548)). - Added a generated public Radius model catalog for synchronous API lookup, with cached and live gateway catalogs overlaid at runtime. - Enabled native deferred tool loading for Fireworks Messages models. Use `ToolSearch` or `tool_search` as the loader name for prompt-prefix deferral ([#&#8203;9323](https://github.com/earendil-works/pi/issues/9323)). - Added `RetryPolicy.maxAgentDelayMs` support to cap shared assistant retry backoff for summarization calls ([#&#8203;8826](https://github.com/earendil-works/pi/issues/8826)). - Added `Model.promptCache` lifetime metadata for short and long retention tiers to support prompt-cache warming decisions ([#&#8203;9668](https://github.com/earendil-works/pi/pull/9668)). ##### Fixed - Fixed GitHub Copilot GPT models, including GPT-6 Astra, using the Chat Completions adapter instead of the required Responses adapter ([#&#8203;9253](https://github.com/earendil-works/pi/pull/9253) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed DeepSeek V4.1 thinking levels on OpenRouter and OpenCode Go preserving provider effort metadata ([#&#8203;9485](https://github.com/earendil-works/pi/issues/9485)). - Fixed bodyless HTTP 400/413 errors from non-Cerebras providers being misclassified as context overflow ([#&#8203;9482](https://github.com/earendil-works/pi/issues/9482)). - Fixed Vercel AI Gateway replaying unsigned thinking as assistant text ([#&#8203;9676](https://github.com/earendil-works/pi/issues/9676)). - Fixed Google Generative AI and Vertex AI using unsupported thinking levels when reasoning is omitted or when model capabilities differ within a Gemini family ([#&#8203;9455](https://github.com/earendil-works/pi/issues/9455)). - Fixed Anthropic-compatible relays breaking signed thinking replay when they report a different response model, while preserving fallback pricing ([#&#8203;9188](https://github.com/earendil-works/pi/issues/9188)). - Fixed Amazon Bedrock one-hour cache writes being priced at the five-minute rate ([#&#8203;9457](https://github.com/earendil-works/pi/issues/9457)). - Fixed quadratic CPU usage when draining buffered `EventStream` events ([#&#8203;9055](https://github.com/earendil-works/pi/issues/9055)). - Fixed Mistral Medium reasoning requests to use `reasoning_effort` for all reasoning-capable `mistral-medium-*` model IDs instead of the unsupported `prompt_mode` ([#&#8203;8700](https://github.com/earendil-works/pi/issues/8700)). - Fixed OpenCode and OpenCode Go requests to send `x-opencode-session` from `sessionId` across all supported API adapters ([#&#8203;9326](https://github.com/earendil-works/pi/issues/9326)). - Fixed OpenAI Codex requests to send the model's Off reasoning effort instead of omitting it, while respecting unsupported Off mappings ([#&#8203;9191](https://github.com/earendil-works/pi/issues/9191)). - Fixed Fireworks unsigned thinking replay and reasoning effort selection using catalog metadata, with verified DeepSeek V4 and Qwen3.8 fallbacks and removal of redundant GLM 5.2 and Kimi K3 effort aliases ([#&#8203;9323](https://github.com/earendil-works/pi/issues/9323)). - Fixed OpenRouter requests to send `x-session-id` from `sessionId` for Chat Completions and Anthropic Messages models when prompt caching is enabled ([#&#8203;9102](https://github.com/earendil-works/pi/issues/9102)). - Fixed the DeepSeek catalog to advertise `deepseek-flash` for DeepSeek V4.1 Flash instead of retired Flash aliases, and refreshed DeepSeek pricing metadata ([#&#8203;9423](https://github.com/earendil-works/pi/issues/9423)). - Fixed Mistral-hosted GLM-5.2 reasoning requests to use `reasoning_effort` instead of the ignored `prompt_mode` ([#&#8203;9375](https://github.com/earendil-works/pi/issues/9375)). - Fixed OpenAI-compatible Responses errors to identify the actual provider instead of always labeling them as OpenAI errors ([#&#8203;9298](https://github.com/earendil-works/pi/issues/9298)). - Fixed Baseten requests to send session-affinity headers from `sessionId` for automatic prompt-cache routing ([#&#8203;9629](https://github.com/earendil-works/pi/issues/9629)). - Fixed retry classification for Cloudflare 520 responses ([#&#8203;9627](https://github.com/earendil-works/pi/issues/9627)). - Fixed retry classification for transient Azure peak-load capacity errors ([#&#8203;9669](https://github.com/earendil-works/pi/issues/9669)). ##### Removed - Removed GPT-5.4 and GPT-5.4 mini from the OpenAI Codex catalog after they became unavailable to ChatGPT accounts ([#&#8203;9394](https://github.com/earendil-works/pi/issues/9394)). ### [`v0.85.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0851---2026-09-05) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.0...v0.85.1) ##### Added - Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions. ##### Fixed - Fixed long prompt-cache requests for GPT-5.6+ Responses models to use `prompt_cache_options.ttl: "30m"` instead of `prompt_cache_retention: "24h"`. ### [`v0.85.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/ai/CHANGELOG.md#0850---2026-09-04) [Compare Source](https://github.com/earendil-works/pi/compare/v0.84.4...v0.85.0) ##### Breaking Changes - Replaced `createGatewayBindingFetch()` with `createAiBindingFetch()` for Cloudflare Workers AI bindings. Configure the model's Workers AI Gateway passthrough `baseUrl` directly; requests now pass through the binding unchanged ([#&#8203;8287](https://github.com/earendil-works/pi/pull/8287) by [@&#8203;Maximo-Guk](https://github.com/Maximo-Guk)). ##### Added - Added compact, persistable assistant-message frames with `AssistantMessageFrameEncoder` and `reduceAssistantMessageFrames()`. - Added the `vllmPriority` OpenAI-compatible model setting for forwarding scheduler priority to vLLM ([#&#8203;9004](https://github.com/earendil-works/pi/pull/9004) by [@&#8203;AppleDannyClegg](https://github.com/AppleDannyClegg)). - Added the `supportsMaxOutputTokens` OpenAI Responses compatibility setting ([#&#8203;8941](https://github.com/earendil-works/pi/pull/8941) by [@&#8203;scturtle](https://github.com/scturtle)). - Added an optional timestamp argument to `uuidv7()` for follower IDs. - Added narrow `api`, `providers`, and `utils` subpath exports for direct imports without loading the package barrel. - Added Anthropic per-turn effort persistence, deterministic historical effort markers, and signed-thinking mismatch recovery for supported Claude models across Anthropic Messages transports, including OpenRouter. - Added Meta provider (Model API key and Muse subscription OAuth) with Muse Spark models. ##### Fixed - Removed the unavailable Grok Build 0.1 model from the built-in xAI catalog ([#&#8203;9093](https://github.com/earendil-works/pi/pull/9093) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). - Fixed assistant-message frames preserving the provider thinking level. - Fixed simple provider streams to consistently emit standard stream events and custom tool-call deltas. - Fixed the Qwen Token Plan Individual catalog to include Qwen3.8 Flash ([#&#8203;9021](https://github.com/earendil-works/pi/issues/9021)). - Fixed Baseten GLM-5.2 models incorrectly advertising image input support ([#&#8203;8293](https://github.com/earendil-works/pi/pull/8293) by [@&#8203;Panoplos](https://github.com/Panoplos)). - Fixed Fireworks GLM models using the wrong API adapter. - Removed the unnecessary Chord dependency from pi-ai by defining its exported `JsonValue` type directly. - Fixed GitHub Copilot Claude Fable 5 requests to use the Anthropic Messages adapter so selected reasoning levels are sent ([#&#8203;8961](https://github.com/earendil-works/pi/issues/8961)). - Fixed OpenAI Codex SSE parsing to process terminal events that are not followed by a blank line ([#&#8203;9047](https://github.com/earendil-works/pi/issues/9047)). - Fixed `NO_PROXY` matching for both root domains and subdomains ([#&#8203;8737](https://github.com/earendil-works/pi/pull/8737) by [@&#8203;MeiSiristhebest](https://github.com/MeiSiristhebest)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-coding-agent)</summary> ### [`v0.87.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0871---2026-09-22) [Compare Source](https://github.com/earendil-works/pi/compare/v0.87.0...v0.87.1) ##### New Features - **Latest frontier models** — Use Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna through supported providers, including GitHub Copilot. See [Choose a Model](docs/models.md#select-a-model). - **Grok 4.7 by default for xAI** — New xAI sessions now default to Grok 4.7. See [Provider Authentication](docs/providers.md#use-an-api-key-from-the-environment). ##### Added - Added inherited Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna support for GitHub Copilot. - Added inherited GPT-6 Sol and GPT-6 Luna support for OpenAI API keys and OpenAI Codex subscriptions. - Added inherited Claude Opus 5.5 support for Anthropic with adaptive thinking and a 1M context window. ##### Changed - Changed the default xAI model to Grok 4.7. ##### Fixed - Fixed split-turn compaction summaries being refused by Claude Fable 5.1 by clearly separating the conversation and using continuation-oriented instructions ([#&#8203;9908](https://github.com/earendil-works/pi/pull/9908) by [@&#8203;davidbrai](https://github.com/davidbrai)). - Fixed missing or invalid `--mode` values being silently ignored instead of reporting an error and exiting with a nonzero status ([#&#8203;9045](https://github.com/earendil-works/pi/issues/9045)). - Fixed inherited image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part ([#&#8203;9797](https://github.com/earendil-works/pi/issues/9797)). - Fixed inherited Anthropic OAuth requests reporting an outdated Claude Code version. ### [`v0.87.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0870---2026-09-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.1...v0.87.0) ##### New Features - **Canonical session context and extension boundaries** — Edit model context without rewriting history and add actionable lifecycle hooks. See [ContextEditEntry](docs/session-format.md#contexteditentry) and [extension events](docs/extensions.md#extension-events). - **Full-transcript context extensions** — Use `context_with_system` for per-request system-message transformations. See [`context_with_system`](docs/extensions.md#context_with_system). - **Per-model image input limits** — Configure cache-safe image resizing per model for attachments, `read`, and tool-result images. See [Image Input Limits](docs/models.md#image-input-limits). ##### Breaking Changes - Removed the inherited `shouldStopAfterTurn` agent option. Use `finishTurn` and return `{ action: "end" }` instead. `finishTurn` runs before `turn_end` but applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returning `undefined` for those hard exits. See the `@earendil-works/pi-agent-core` changelog for a complete before-and-after example. - Added `ContextEditEntry` to the exported `SessionEntry` union. TypeScript consumers with exhaustive entry switches must handle `context_edit`; use `replacement: null` for omission and a content replacement otherwise. - Made `SessionManager` canonical for `AgentSession` provider context. Assigning `session.agent.state.messages` no longer replaces future request history; restore with `SessionManager.inMemory(cwd, { id }, entries)`, navigate with `session.navigateTree()`, or append through `session.sessionManager` and call `session.refreshContext()`. - Expanded `TurnEndEvent` with required boundary fields and added `AgentBeforeSettleEvent` to the exported `ExtensionEvent` union. Consumers constructing events or exhaustively switching on `ExtensionEvent` must handle the new shapes. `ExtensionRunner.emit()` no longer accepts `turn_end`; host integrations dispatch actionable boundaries with `emitBoundary(baseEvent, buildContext)`. - Deferred runs requested from `agent_settled` handlers until all settled handlers finish. Handlers still observe `ctx.isIdle() === true`, but no longer see a reentrant `agent_start` during the same notification dispatch. ##### Added - Added append-only model-context edits. For example, `sessionManager.appendContextEdit(entryId, null)` omits one message from future provider context without changing raw history, usage, or UI history. - Added actionable `turn_end` and `agent_before_settle` extension boundaries. Return `{ entries: [...event.entries, draft], continue: true }` to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling. - Added retain-none compaction input: `sessionManager.appendCompaction(summary, null, tokensBefore)` stores the compaction's own ID as its kept boundary. - Added the `context_with_system` extension event, which runs after `context` handlers on the full transcript including system messages and sends its result verbatim. See [`context_with_system`](docs/extensions.md#context_with_system). - Added per-model image resize profiles through `inputLimits.images.resize` in `models.json`, applied to file attachments, image reads, and tool-result images ([#&#8203;9631](https://github.com/earendil-works/pi/issues/9631)). ##### Fixed - Fixed string context-edit replacements producing invalid assistant and tool-result message content instead of text blocks. - Fixed context-invisible boundary metadata and replacement edits causing newly appended or replaced input to be summarized before its first provider request. - Fixed edited-context accounting both discarding valid assistant usage captured after the latest context edit and reusing that usage after a later compaction made it stale. - Fixed selected error retries and final length/overflow recovery retaining abandoned model attempts in future provider context; post-run recovery omissions are now persisted without hiding raw transcript history or changing queue scheduling. - Fixed `context` handlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they run. See [`context`](docs/extensions.md#context) ([#&#8203;9789](https://github.com/earendil-works/pi/issues/9789), [#&#8203;9822](https://github.com/earendil-works/pi/issues/9822)). - Fixed `/bug` allowing uploads in offline mode while preserving local zip exports ([#&#8203;9841](https://github.com/earendil-works/pi/pull/9841) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed idle prompt-cache warming rebuilding expired caches when its timer or an extension decision is delayed. - Improved crash diagnostics with hints identifying loaded extensions that appear in the stack trace. - Fixed text files beginning with `GIF` being misclassified as images and omitted from `read` and CLI `@file` input ([#&#8203;9755](https://github.com/earendil-works/pi/issues/9755)). - Fixed malformed prompt template frontmatter being silently ignored instead of reported as a resource warning ([#&#8203;9830](https://github.com/earendil-works/pi/pull/9830) by [@&#8203;christianklotz](https://github.com/christianklotz)). - Fixed inherited unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support ([#&#8203;9816](https://github.com/earendil-works/pi/issues/9816)). ### [`v0.86.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0861---2026-09-20) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.0...v0.86.1) ##### New Features - **Meta Muse provider** — Sign in with Meta using `/login meta` or use `META_API_KEY` to access Muse Spark models. See [Meta (Muse subscription)](docs/providers.md#meta-muse-subscription). ##### Added - Added Meta (Muse subscription) login via `/login meta` with automatic Model API key refresh, plus `META_API_KEY` support ([#&#8203;9096](https://github.com/earendil-works/pi/pull/9096) by [@&#8203;xl0](https://github.com/xl0)). ##### Changed - Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time. ##### Fixed - Fixed `/bug` descriptions dropping line breaks from pasted diagnostics. - Fixed `/bug` hints appearing for user cancellations and retryable provider failures such as service unavailability. - Fixed clipboard copy failing in containers and WSL without WSLg by restoring the OSC 52 fallback when no display is available, and added a verified Windows clipboard backend for WSL ([#&#8203;9688](https://github.com/earendil-works/pi/issues/9688)). - Fixed inherited z.ai `Prompt too long` errors not being recognized as context overflow ([#&#8203;9805](https://github.com/earendil-works/pi/issues/9805)). - Fixed inherited Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed ([#&#8203;9804](https://github.com/earendil-works/pi/pull/9804) by [@&#8203;EdenGottlieb](https://github.com/EdenGottlieb)). ### [`v0.86.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0860---2026-09-19) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.1...v0.86.0) ##### New Features - **Prompt cache warming** — Keep valuable prompt caches alive during long tool runs and optionally while idle using cost-aware refreshes. See [Cache Warming](docs/settings.md#cache-warming). - **Bug reporting** — Report problems with `/bug` using redacted diagnostics, optional transcripts, or exported ZIP archives. See [Reporting Bugs](docs/sessions.md#reporting-bugs). - **Transcript-aware prompt and tool updates** — Preserve instruction and tool changes across resume and branch navigation while retaining cached prefixes. See [`before_agent_start`](docs/extensions.md#before_agent_start). - **Offline Radius model catalog** — Select Radius models immediately, with cached and live catalogs overlaid when available. See [Radius](docs/providers.md#radius). - **Per-model compaction budgets** — Configure reserved and recent-token budgets by model. See [Per-model overrides](docs/compaction.md#per-model-overrides). ##### Breaking Changes - Changed inherited pi-ai provider stream inputs from `Context` to normalized `TranscriptContext` values. Custom providers must read system prompts and tool declarations from `context.messages` with `getCurrentSystemPrompt()` and `getCurrentTools()`. See [Custom Streaming API](docs/custom-provider.md#custom-streaming-api). - Restricted inherited `ToolCall.arguments` and `ToolResultMessage.details` to JSON-compatible values, changed `ToolResultMessage` into a conditional type, and made `JsonValue` arrays readonly. - `user_bash` now fails closed: errors or invalid defined results abort the command without invoking later handlers or executing locally. Return `undefined` to continue propagation; otherwise return `{ operations }` or `{ result }` ([#&#8203;9068](https://github.com/earendil-works/pi/issues/9068)). ##### Added - Added transcript-backed mid-conversation system prompt and tool changes so instruction and tool updates survive resume and branch navigation while preserving cached prefixes on supported models. See [`before_agent_start`](docs/extensions.md#before_agent_start) and [Entry Types](docs/session-format.md#entry-types) ([#&#8203;9548](https://github.com/earendil-works/pi/pull/9548)). - Added inherited native deferred tool loading for Fireworks Messages models. Use `ToolSearch` or `tool_search` as the loader name for prompt-prefix deferral ([#&#8203;9323](https://github.com/earendil-works/pi/issues/9323)). - Added click toggling for branch summaries, compaction summaries, and skill invocation entries. - Added the public Radius model catalog for immediate and offline model selection, with cached and live gateway catalogs overlaid when available. - Added `ctx.modelRegistry.stream()` and `streamSimple()` for extension model calls through configured providers with resolved authentication ([#&#8203;8964](https://github.com/earendil-works/pi/issues/8964)). - Added per-model `reserveTokens` and `keepRecentTokens` settings through `compaction.modelOverrides`, with ordinary compaction settings as fallback ([#&#8203;8133](https://github.com/earendil-works/pi-mono/issues/8133)). - Added `compat.allowedFallbackModels` configuration for overriding or disabling Anthropic server-side fallback models ([#&#8203;9294](https://github.com/earendil-works/pi/issues/9294)). - Added an unsubscribe function from `pi.on()` so extensions can drop event handlers. Handlers added or removed during a dispatch apply to later dispatches, not the current one ([#&#8203;8967](https://github.com/earendil-works/pi/issues/8967)). - Exported extension hook event and result types that were previously omitted from the package entry points ([#&#8203;9642](https://github.com/earendil-works/pi/pull/9642)). - Added `/bug [description]` to report a bug to the Pi developers. The report bundles environment, model, provider, extension, and settings metadata (secrets redacted), assistant message diagnostics from the session, optionally the session transcript, or a model-written summary of what went wrong instead. It is uploaded to Radius (no login required; attributed when logged in) or exported as a zip archive, and the report id is recorded in the session as a `pi.bug-report` entry. Crashes are recorded in `~/.pi/agent/crashes.json`, announced once on the next start, and attached to the next report; unexplained errors and exhausted retries point at `/bug` once per session. - Added cost-aware prompt-cache warming during long tool runs and optionally while idle, with configurable modes, model cache-lifetime metadata, `/session` diagnostics, transcript notices, and the `cache_warming_decision` extension event. See [Cache Warming](docs/settings.md#cache-warming) ([#&#8203;9668](https://github.com/earendil-works/pi/pull/9668)). ##### Changed - Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time. - Made `--resume` session results appear progressively, using file modification times to prioritize all-folder loading and cancelling outstanding transcript reads after selection. - Reduced `--continue` startup time by checking candidate session headers in modification-time order and stopping after the newest matching session. - Replaced the external native clipboard dependency with bundled asynchronous macOS, Windows, and X11 helpers while preserving platform command and OSC 52 fallbacks ([#&#8203;9163](https://github.com/earendil-works/pi/pull/9163)). - Reduced inherited fuzzy search latency for long texts by using native substring search instead of scanning each character in JavaScript ([#&#8203;9267](https://github.com/earendil-works/pi/issues/9267)). - Moved compaction, branch summarization, and retry spinners into the editor border alongside the working indicator. Custom editors use the same embedding opt-in for all status spinners. - Enabled strict-prefer JSON-schema sampling by default for built-in `read`, `bash`, `powershell`, `edit`, and `write` tools, without requiring `PI_EXPERIMENTAL`. Extensions can re-register tool definitions with `constrainedSampling: false`. - Formatted Bash and PowerShell tool durations of at least one minute as minutes and seconds, with hours when needed ([#&#8203;9628](https://github.com/earendil-works/pi/issues/9628)). - Deferred the extension compiler and bundled virtual modules until a filesystem extension is loaded, reducing the baseline SDK import cost ([#&#8203;9540](https://github.com/earendil-works/pi/issues/9540)). ##### Fixed - Fixed GitHub Copilot GPT models, including GPT-6 Astra, using the Chat Completions adapter instead of the required Responses adapter ([#&#8203;9253](https://github.com/earendil-works/pi/pull/9253) by [@&#8203;petrroll](https://github.com/petrroll)). - Fixed inherited DeepSeek V4.1 thinking levels on OpenRouter and OpenCode Go preserving provider effort metadata ([#&#8203;9485](https://github.com/earendil-works/pi/issues/9485)). - Fixed inherited bodyless HTTP 400/413 errors from non-Cerebras providers being misclassified as context overflow ([#&#8203;9482](https://github.com/earendil-works/pi/issues/9482)). - Fixed inherited Vercel AI Gateway replaying unsigned thinking as assistant text ([#&#8203;9676](https://github.com/earendil-works/pi/issues/9676)). - Fixed inherited Google Generative AI and Vertex AI using unsupported thinking levels when reasoning is omitted or when model capabilities differ within a Gemini family ([#&#8203;9455](https://github.com/earendil-works/pi/issues/9455)). - Fixed inherited Anthropic-compatible relays breaking signed thinking replay when they report a different response model, while preserving fallback pricing ([#&#8203;9188](https://github.com/earendil-works/pi/issues/9188)). - Fixed inherited Amazon Bedrock one-hour cache writes being priced at the five-minute rate ([#&#8203;9457](https://github.com/earendil-works/pi/issues/9457)). - Fixed inherited quadratic CPU usage when draining buffered `EventStream` events ([#&#8203;9055](https://github.com/earendil-works/pi/issues/9055)). - Fixed inherited Mistral Medium reasoning requests to use `reasoning_effort` for all reasoning-capable `mistral-medium-*` model IDs instead of the unsupported `prompt_mode` ([#&#8203;8700](https://github.com/earendil-works/pi/issues/8700)). - Fixed inherited OpenCode and OpenCode Go requests to send `x-opencode-session` from `sessionId` across all supported API adapters ([#&#8203;9326](https://github.com/earendil-works/pi/issues/9326)). - Fixed inherited OpenAI Codex requests to send the model's Off reasoning effort instead of omitting it, while respecting unsupported Off mappings ([#&#8203;9191](https://github.com/earendil-works/pi/issues/9191)). - Fixed inherited Fireworks unsigned thinking replay and reasoning effort selection using catalog metadata, with verified DeepSeek V4 and Qwen3.8 fallbacks and removal of redundant GLM 5.2 and Kimi K3 effort aliases ([#&#8203;9323](https://github.com/earendil-works/pi/issues/9323)). - Fixed inherited OpenRouter requests to send `x-session-id` from `sessionId` for Chat Completions and Anthropic Messages models when prompt caching is enabled ([#&#8203;9102](https://github.com/earendil-works/pi/issues/9102)). - Fixed the inherited DeepSeek catalog to advertise `deepseek-flash` for DeepSeek V4.1 Flash instead of retired Flash aliases, and refreshed DeepSeek pricing metadata ([#&#8203;9423](https://github.com/earendil-works/pi/issues/9423)). - Fixed inherited Mistral-hosted GLM-5.2 reasoning requests to use `reasoning_effort` instead of the ignored `prompt_mode` ([#&#8203;9375](https://github.com/earendil-works/pi/issues/9375)). - Fixed inherited OpenAI-compatible Responses errors to identify the actual provider instead of always labeling them as OpenAI errors ([#&#8203;9298](https://github.com/earendil-works/pi/issues/9298)). - Fixed inherited Baseten requests to send session-affinity headers from `sessionId` for automatic prompt-cache routing ([#&#8203;9629](https://github.com/earendil-works/pi/issues/9629)). - Fixed inherited retry classification for Cloudflare 520 responses ([#&#8203;9627](https://github.com/earendil-works/pi/issues/9627)). - Fixed inherited retry classification for transient Azure peak-load capacity errors ([#&#8203;9669](https://github.com/earendil-works/pi/issues/9669)). - Fixed session tree navigation racing with active compaction and replacing its progress UI ([#&#8203;9179](https://github.com/earendil-works/pi/pull/9179) by [@&#8203;acmerfight](https://github.com/acmerfight)). - Fixed exact session ID lookup scanning complete transcript bodies instead of reading session headers ([#&#8203;9601](https://github.com/earendil-works/pi/pull/9601) by [@&#8203;metaist](https://github.com/metaist)). - Fixed repeated Anthropic thinking-drop notices being shown for the same dropped blocks, and shortened notices while retaining details in the session ([#&#8203;9391](https://github.com/earendil-works/pi/issues/9391)). - Fixed mid-run threshold compaction silently skipping oversized trailing tool results ([#&#8203;9740](https://github.com/earendil-works/pi/issues/9740)). - Fixed signal-terminated local shell commands being reported as successful with partial output ([#&#8203;9577](https://github.com/earendil-works/pi/issues/9577) by [@&#8203;BrendanJMurphy](https://github.com/BrendanJMurphy)). - Fixed local clipboard failures reporting success when the terminal ignored the fallback OSC 52 write, and added platform-specific setup guidance when no clipboard backend works ([#&#8203;9618](https://github.com/earendil-works/pi/issues/9618)). - Capped agent-level retry backoff at `retry.maxAgentDelayMs` (60s by default) so long retry runs stay responsive during prolonged transient outages ([#&#8203;8826](https://github.com/earendil-works/pi/issues/8826)). - Fixed direct RPC `steer` and `follow_up` commands bypassing extension `input` handlers ([#&#8203;8718](https://github.com/earendil-works/pi/issues/8718)). - Fixed premature missing-model errors after login by waiting for catalog discovery. Radius now defaults to `balanced`, falling back to the first available Radius model when needed. - Fixed fullscreen mode reserving a blank row for custom footers that render zero rows ([#&#8203;8919](https://github.com/earendil-works/pi/issues/8919)). - Fixed extension tools without parameter schemas to be rejected during registration instead of breaking provider requests ([#&#8203;9300](https://github.com/earendil-works/pi/issues/9300)). - Fixed `before_agent_start` handlers returning `systemPrompt` (and `forceSystemPrompt`) on models with mid-conversation system messages: the forced prompt is now sent as the provider's leading system prompt instead of being appended as a section patch after the original prompt. - Fixed loaded llama.cpp models with `enable_thinking` chat templates ignoring Pi's thinking level ([#&#8203;9528](https://github.com/earendil-works/pi/issues/9528)). - Fixed cancellation races that could start automatic compaction, leave stale retry state, or miss cancellation while waiting for summarization authentication ([#&#8203;9340](https://github.com/earendil-works/pi/issues/9340), [#&#8203;9777](https://github.com/earendil-works/pi/issues/9777)). - Fixed asynchronous Kitty image conversion replacing newer partial tool output images ([#&#8203;8743](https://github.com/earendil-works/pi/pull/8743) by [@&#8203;wutongyuonce](https://github.com/wutongyuonce)). - Fixed inherited skill slash-command autocomplete ranking the `skill:` prefix instead of the bare skill name ([#&#8203;9120](https://github.com/earendil-works/pi/pull/9120) by [@&#8203;yearth](https://github.com/yearth)). - Fixed inherited file autocomplete boundaries and path quoting around CJK punctuation ([#&#8203;9746](https://github.com/earendil-works/pi/pull/9746) by [@&#8203;haoqixu](https://github.com/haoqixu)). - Fixed inherited LaTeX legacy font switches falling back to raw source, centered `cases` layouts around surrounding equations, and vertically laid out unsupported and nested display scripts ([#&#8203;8827](https://github.com/earendil-works/pi/issues/8827), [#&#8203;9564](https://github.com/earendil-works/pi/issues/9564), [#&#8203;7929](https://github.com/earendil-works/pi/issues/7929)). - Fixed inherited fullscreen Kitty images being erased by later row clears in WezTerm ([#&#8203;9169](https://github.com/earendil-works/pi/issues/9169)). ##### Removed - Removed unavailable inherited GPT-5.4 and GPT-5.4 mini models from OpenAI Codex selection ([#&#8203;9394](https://github.com/earendil-works/pi/issues/9394)). ### [`v0.85.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0851---2026-09-05) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.0...v0.85.1) ##### New Features - **GPT-6 Astra** — Available through OpenAI API keys and OpenAI Codex subscriptions. See [API Keys](docs/providers.md#api-keys) and [OpenAI Codex](docs/providers.md#openai-codex). ##### Added - Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions. - Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode ([#&#8203;9166](https://github.com/earendil-works/pi/pull/9166) by [@&#8203;xl0](https://github.com/xl0)). ##### Fixed - Fixed configurable save keybindings in the model and thinking selectors ([#&#8203;9149](https://github.com/earendil-works/pi/pull/9149) by [@&#8203;rwachtler](https://github.com/rwachtler)). - Fixed SDK import failures caused by unintentionally publishing internal experimental code and dependencies in 0.85.0. The experimental `client` and `experimental/plugin` subpaths and server/client commands are now source-only through `pi-test.sh`; the supported local SDK and stdio RPC API are unchanged ([#&#8203;9132](https://github.com/earendil-works/pi/issues/9132)). - Fixed mouse hover changing selection and recentering autocomplete and settings lists, causing clicks to target a different item. - Fixed long prompt-cache requests for GPT-5.6+ Responses models to use `prompt_cache_options.ttl: "30m"` instead of `prompt_cache_retention: "24h"`. ### [`v0.85.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#0850---2026-09-04) [Compare Source](https://github.com/earendil-works/pi/compare/v0.84.4...v0.85.0) ##### New Features - **Persistent Claude thinking effort** — Supported Anthropic transports preserve per-turn effort and recover safely from signed-thinking mismatches. See [Model Configuration](docs/models.md#model-configuration). - **Fullscreen transcript controls** — Jump to the latest message from a scrolled transcript and use the embedded working indicator. See [TUI Fullscreen Viewport](docs/keybindings.md#tui-fullscreen-viewport). - **Restorable in-memory sessions** — Resume externally stored session entries through the SDK. See [Session Management](docs/sdk.md#session-management). ##### Added - Added `SessionManager.inMemory()` support for restoring externally managed session entries ([#&#8203;8980](https://github.com/earendil-works/pi/pull/8980) by [@&#8203;y-nk](https://github.com/y-nk)). - Added inherited OpenAI-compatible `vllmPriority` and `supportsMaxOutputTokens` model settings for vLLM scheduler priority and OpenAI Responses output-token limits ([#&#8203;9004](https://github.com/earendil-works/pi/pull/9004) by [@&#8203;AppleDannyClegg](https://github.com/AppleDannyClegg), [#&#8203;8941](https://github.com/earendil-works/pi/pull/8941) by [@&#8203;scturtle](https://github.com/scturtle)). - Added inherited LaTeX rendering for relational algebra join symbols ([#&#8203;9050](https://github.com/earendil-works/pi/pull/9050) by [@&#8203;haoqixu](https://github.com/haoqixu)). - Added a clickable "Jump to latest message" label with the `tui.altScreen.bottom` shortcut to the fullscreen transcript while it is scrolled up ([#&#8203;9080](https://github.com/earendil-works/pi/pull/9080) by [@&#8203;rwachtler](https://github.com/rwachtler)). - Added Meta (Muse subscription) login via `/login meta` with automatic Model API key refresh, plus `META_API_KEY` support. ##### Changed - Moved the streaming working indicator into the default editor border and matched its default spinner and label to the thinking-level border color. Custom editors retain the standalone indicator unless they opt in to embedding it ([#&#8203;8799](https://github.com/earendil-works/pi/pull/8799) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Reduced inherited fullscreen transcript search latency on large transcripts by caching unchanged search results, indexing ASCII runs, and limiting highlight work to visible matches ([#&#8203;8800](https://github.com/earendil-works/pi/pull/8800) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). ##### Fixed - Fixed managed `fd` and ripgrep downloads on Linux musl systems ([#&#8203;9070](https://github.com/earendil-works/pi/pull/9070) by [@&#8203;Charlie0113-T](https://github.com/Charlie0113-T)). - Removed the unavailable inherited Grok Build 0.1 model from `/model` ([#&#8203;9093](https://github.com/earendil-works/pi/pull/9093) by [@&#8203;Jaaneek](https://github.com/Jaaneek)). - Fixed inherited provider streams emitting incompatible event sequences and custom tool-call deltas. - Restored the `@earendil-works/pi-coding-agent/client` compatibility entry point. - Fixed the inherited Qwen Token Plan Individual catalog to include Qwen3.8 Flash ([#&#8203;9021](https://github.com/earendil-works/pi/issues/9021)). - Fixed inherited OpenAI Codex SSE parsing to process terminal events that are not followed by a blank line ([#&#8203;9047](https://github.com/earendil-works/pi/issues/9047)). - Fixed inherited GitHub Copilot Claude Fable 5 requests so selected reasoning levels are sent ([#&#8203;8961](https://github.com/earendil-works/pi/issues/8961)). - Fixed inherited Baseten GLM-5.2 models incorrectly advertising image input support ([#&#8203;8293](https://github.com/earendil-works/pi/pull/8293) by [@&#8203;Panoplos](https://github.com/Panoplos)). - Fixed skills being unavailable when Bash is the only enabled tool ([#&#8203;8552](https://github.com/earendil-works/pi/pull/8552) by [@&#8203;xl0](https://github.com/xl0)). - Fixed concurrent session shares overwriting one another ([#&#8203;8613](https://github.com/earendil-works/pi/pull/8613) by [@&#8203;wutongyuonce](https://github.com/wutongyuonce)). - Fixed image orientation detection skipping EXIF data after non-EXIF APP1 segments ([#&#8203;8616](https://github.com/earendil-works/pi/pull/8616) by [@&#8203;wutongyuonce](https://github.com/wutongyuonce)). - Fixed imported sessions overwriting an existing session with the same filename ([#&#8203;8985](https://github.com/earendil-works/pi/pull/8985) by [@&#8203;wutongyuonce](https://github.com/wutongyuonce)). - Fixed session forks losing their compaction boundary ([#&#8203;8990](https://github.com/earendil-works/pi/pull/8990) by [@&#8203;acmerfight](https://github.com/acmerfight)). - Fixed in-memory session forks before an active turn settled ([#&#8203;8937](https://github.com/earendil-works/pi/pull/8937) by [@&#8203;acmerfight](https://github.com/acmerfight)). - Fixed inherited Fireworks GLM models using the wrong API adapter. - Fixed inherited `NO_PROXY` matching for root domains and subdomains ([#&#8203;8737](https://github.com/earendil-works/pi/pull/8737) by [@&#8203;MeiSiristhebest](https://github.com/MeiSiristhebest)). - Fixed `bash`, `edit`, `find`, `grep`, `ls`, `read`, and `write` tools ignoring `ctx.cwd` ([#&#8203;8627](https://github.com/earendil-works/pi/pull/8627) by [@&#8203;vmizg](https://github.com/vmizg)). - Fixed inherited terminal startup under restricted seccomp policies that reject the `SIGWINCH` self-signal ([#&#8203;8898](https://github.com/earendil-works/pi/pull/8898) by [@&#8203;bartlomiejkida](https://github.com/bartlomiejkida)). - Fixed inherited Zed terminal image capability detection ([#&#8203;8828](https://github.com/earendil-works/pi/pull/8828) by [@&#8203;Perlence](https://github.com/Perlence)). - Fixed drag selection continuing over the fullscreen editor. - Fixed managed `fd` and ripgrep downloads requiring the GitHub Releases API ([#&#8203;8708](https://github.com/earendil-works/pi/pull/8708) by [@&#8203;Terminator666666](https://github.com/Terminator666666)). - Fixed branch summaries failing when reasoning consumes the previous 2048-token output cap ([#&#8203;8845](https://github.com/earendil-works/pi/issues/8845)). - Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count ([#&#8203;8979](https://github.com/earendil-works/pi/issues/8979)). - Fixed proxied plain-HTTP provider requests hanging after a tool call by tunneling them with CONNECT ([#&#8203;8134](https://github.com/earendil-works/pi/issues/8134)). - Fixed RPC `abort` reporting success without cancelling an in-progress manual compaction ([#&#8203;8920](https://github.com/earendil-works/pi/issues/8920)). </details> <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-tui)</summary> ### [`v0.87.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0871---2026-09-22) [Compare Source](https://github.com/earendil-works/pi/compare/v0.87.0...v0.87.1) ### [`v0.87.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0870---2026-09-21) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.1...v0.87.0) ### [`v0.86.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0861---2026-09-20) [Compare Source](https://github.com/earendil-works/pi/compare/v0.86.0...v0.86.1) ### [`v0.86.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0860---2026-09-19) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.1...v0.86.0) ##### Added - Added bundled asynchronous native clipboard readers for macOS, Windows, and X11 through the exported `getNativeClipboard()` API, replacing the external native clipboard dependency in consumers ([#&#8203;9163](https://github.com/earendil-works/pi/pull/9163)). ##### Changed - Reduced fuzzy search latency for long texts by using native substring search instead of scanning each character in JavaScript ([#&#8203;9267](https://github.com/earendil-works/pi/issues/9267)). ##### Fixed - Fixed LaTeX legacy font switches falling back to raw source, centered `cases` layouts around surrounding equations, and vertically laid out unsupported and nested display scripts ([#&#8203;8827](https://github.com/earendil-works/pi/issues/8827), [#&#8203;9564](https://github.com/earendil-works/pi/issues/9564), [#&#8203;7929](https://github.com/earendil-works/pi/issues/7929)). - Fixed fullscreen clipboard failures hiding actionable backend error messages behind a generic notice, and extended failure notices to five seconds ([#&#8203;9618](https://github.com/earendil-works/pi/issues/9618)). - Fixed fullscreen Kitty images being erased by later row clears in WezTerm ([#&#8203;9169](https://github.com/earendil-works/pi/issues/9169)). - Fixed skill slash-command autocomplete ranking the `skill:` prefix instead of the bare skill name ([#&#8203;9120](https://github.com/earendil-works/pi/pull/9120) by [@&#8203;yearth](https://github.com/yearth)). - Fixed file autocomplete boundaries and path quoting around CJK punctuation ([#&#8203;9746](https://github.com/earendil-works/pi/pull/9746) by [@&#8203;haoqixu](https://github.com/haoqixu)). ### [`v0.85.1`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0851---2026-09-05) [Compare Source](https://github.com/earendil-works/pi/compare/v0.85.0...v0.85.1) ##### Added - Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode ([#&#8203;9166](https://github.com/earendil-works/pi/pull/9166) by [@&#8203;xl0](https://github.com/xl0)). ##### Fixed - Fixed mouse hover changing selection and recentering autocomplete and settings lists, causing clicks to target a different item. ### [`v0.85.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/tui/CHANGELOG.md#0850---2026-09-04) [Compare Source](https://github.com/earendil-works/pi/compare/v0.84.4...v0.85.0) ##### Breaking Changes - Removed coding-agent environment-variable defaults from pi-tui. Applications must configure the hardware cursor and clear-on-shrink behavior through the renderer constructor and `setClearOnShrink()`. `PI_DEBUG_REDRAW` is now `PI_TUI_DEBUG_REDRAW`; debug and crash log filenames now use the `pi-tui-` prefix. When no log directory is supplied, redraw logging is disabled and crash dumps are written to the OS temp directory. ([#&#8203;8699](https://github.com/earendil-works/pi/pull/8699) by [@&#8203;geraschenko](https://github.com/geraschenko)) ##### Added - Added a `TuiAltScreen` `scrollToEndIndicator` option that renders a clickable jump-to-end label on a follow-end primary scroll view while it is scrolled away from the end ([#&#8203;9080](https://github.com/earendil-works/pi/pull/9080) by [@&#8203;rwachtler](https://github.com/rwachtler)). - Added LaTeX rendering for relational algebra join symbols ([#&#8203;9050](https://github.com/earendil-works/pi/pull/9050) by [@&#8203;haoqixu](https://github.com/haoqixu)). ##### Changed - Changed the `Loader` animation and editor integration to support embedded working indicators ([#&#8203;8799](https://github.com/earendil-works/pi/pull/8799) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). - Reduced fullscreen transcript search latency on large transcripts by caching unchanged search results, indexing ASCII runs, and limiting highlight work to visible matches ([#&#8203;8800](https://github.com/earendil-works/pi/pull/8800) by [@&#8203;cristinaponcela](https://github.com/cristinaponcela)). ##### Fixed - Fixed drag selection continuing over an editor. - Fixed terminal startup under restricted seccomp policies that reject the `SIGWINCH` self-signal ([#&#8203;8898](https://github.com/earendil-works/pi/pull/8898) by [@&#8203;bartlomiejkida](https://github.com/bartlomiejkida)). - Fixed Zed terminal image capability detection ([#&#8203;8828](https://github.com/earendil-works/pi/pull/8828) by [@&#8203;Perlence](https://github.com/Perlence)). </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 CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zOS4zIiwidXBkYXRlZEluVmVyIjoiNDQuMzkuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Update Pi to ^0.85.0
Some checks failed
Test Tests failed
eda0b89e8f
tophattedbot force-pushed renovate/pi from eda0b89e8f
Some checks failed
Test Tests failed
to 558c691568
Some checks failed
Test Tests failed
2026-09-19 23:38:24 +00:00
Compare
tophattedbot changed title from Update Pi to ^0.85.0 to Update Pi to ^0.86.0 2026-09-19 23:38:28 +00:00
tophattedbot force-pushed renovate/pi from 558c691568
Some checks failed
Test Tests failed
to 496143a81d
Some checks failed
Test Tests failed
2026-09-21 17:38:21 +00:00
Compare
tophattedbot changed title from Update Pi to ^0.86.0 to Update Pi to ^0.87.0 2026-09-21 17:38:26 +00:00
Some checks failed
Test Tests failed
Required
Details
Some required checks were not successful.
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!26
No description provided.