Releases: badlogic/pi-mono
Releases · badlogic/pi-mono
v0.56.3
New Features
claude-sonnet-4-6model available via thegoogle-antigravityprovider (#1859)- Custom editors can now define their own
onEscape/onCtrlDhandlers without being overwritten by app defaults, enabling vim-mode extensions (#1838) - Shift+Enter and Ctrl+Enter now work inside tmux via xterm modifyOtherKeys fallback (docs/tmux.md, #1872)
- Auto-compaction is now resilient to persistent API errors (e.g. 529 overloaded) and no longer retriggers spuriously after compaction (#1834, #1860)
Added
- Added
claude-sonnet-4-6model for thegoogle-antigravityprovider (#1859). - Added tmux setup documentation for modified enter key support (#1872)
Fixed
- Fixed custom editors having their
onEscape/onCtrlDhandlers unconditionally overwritten by app-level defaults, making vim-style escape handling impossible (#1838) - Fixed auto-compaction retriggering on the first prompt after compaction due to stale pre-compaction assistant usage (#1860 by @joelhooks)
- Fixed sessions never auto-compacting when hitting persistent API errors (e.g. 529 overloaded) by estimating context size from the last successful response (#1834)
- Fixed compaction summarization requests exceeding context limits by truncating tool results to 2k chars (#1796)
- Fixed
/newleaving startup header content, including the changelog, visible after starting a fresh session (#1880) - Fixed misleading docs and example implying that returning
{ isError: true }from a tool'sexecutefunction marks the execution as failed; errors must be signaled by throwing (#1881) - Fixed model switches through non-reasoning models to preserve the saved default thinking level instead of persisting a capability-forced
offclamp (#1864) - Fixed parallel pi processes failing with false "No API key found" errors due to immediate lockfile contention on
auth.jsonandsettings.json(#1871) - Fixed OpenAI Responses reasoning replay regression that broke multi-turn reasoning continuity (#1878)
v0.56.2
New Features
- GPT-5.4 support across
openai,openai-codex,azure-openai-responses, andopencode, withgpt-5.4now the default foropenaiandopenai-codex(README.md, docs/providers.md). treeFilterModesetting to choose the default/treefilter mode (default,no-tools,user-only,labeled-only,all) (docs/settings.md, #1852 by @lajarre).- Mistral native conversations integration with SDK-backed provider behavior, preserving Mistral-specific thinking and replay semantics (README.md, docs/providers.md, #1716).
Added
- Added
gpt-5.4model availability foropenai,openai-codex,azure-openai-responses, andopencodeproviders. - Added
gpt-5.3-codexfallback model availability forgithub-copilotuntil upstream model catalogs include it (#1853). - Added
treeFilterModesetting to choose the default/treefilter mode (default,no-tools,user-only,labeled-only,all) (#1852 by @lajarre).
Changed
- Updated the default models for the
openaiandopenai-codexproviders togpt-5.4.
Fixed
- Fixed GPT-5.3 Codex follow-up turns dropping OpenAI Responses assistant
phasemetadata by preserving replayable signatures in session history and forwardingphaseback to the Responses API (#1819). - Fixed OpenAI Responses replay to omit empty thinking blocks, avoiding invalid no-op reasoning items in follow-up turns.
- Updated Mistral integration to use the native SDK-backed provider and conversations API, including coding-agent model/provider wiring and Mistral setup documentation (#1716).
- Fixed Antigravity reliability: endpoint cascade on 403/404, added autopush sandbox fallback, removed extra fingerprint headers (#1830).
- Fixed
@mariozechner/pi-ai/oauthextension imports in published installs by resolving the subpath directly from builtdistfiles instead of package-root wrapper shims (#1856). - Fixed Gemini 3 multi-turn tool use losing structured context by using
skip_thought_signature_validatorsentinel for unsigned function calls instead of text fallback (#1829). - Fixed model selector filter not accepting typed characters in VS Code 1.110+ due to missing Kitty CSI-u printable decoding in the
Inputcomponent (#1857) - Fixed editor/footer visibility drift during terminal resize by forcing full redraws when terminal width or height changes (#1844 by @ghoulr).
- Fixed footer width truncation for wide Unicode text (session name, model, provider) to prevent TUI crashes from rendered lines exceeding terminal width (#1833).
- Fixed Windows write preview background artifacts by normalizing CRLF content (
\r\n) to LF for display rendering in tool output previews (#1854).
v0.56.1
v0.56.0
New Features
- Added OpenCode Go provider support with
opencode-gomodel defaults andOPENCODE_API_KEYenvironment variable support (docs/providers.md, #1757). - Added
branchSummary.skipPromptsetting to skip branch summarization prompts during tree navigation (docs/settings.md, #1792). - Added
gemini-3.1-flash-lite-previewfallback model availability for Google provider catalogs when upstream model metadata lags (README.md, #1785).
Breaking Changes
- Changed scoped model thinking semantics. Scoped entries without an explicit
:<thinking>suffix now inherit the current session thinking level when selected, instead of applying a startup-captured default. - Moved Node OAuth runtime exports off the top-level
@mariozechner/pi-aientry. OAuth login and refresh must be imported from@mariozechner/pi-ai/oauth(#1814).
Added
- Added
branchSummary.skipPromptsetting to skip the summary prompt when navigating branches (#1792). - Added OpenCode Go provider support with
opencode-gomodel defaults andOPENCODE_API_KEYenvironment variable support (#1757). - Added
gemini-3.1-flash-lite-previewfallback model availability in provider catalogs when upstream catalogs lag (#1785).
Changed
- Updated Antigravity Gemini 3.1 model metadata and request headers to match upstream behavior.
Fixed
- Fixed IME hardware cursor positioning in the custom extension editor (
ctx.ui.editor()/ extension editor dialog) by propagating focus to the internalEditor, preventing the terminal cursor from getting stuck at the bottom-right during composition. - Added OSC 133 semantic zone markers around rendered user messages to support terminal navigation between prompts in iTerm2, WezTerm, Kitty, Ghostty, and other compatible terminals (#1805).
- Fixed markdown blockquotes dropping nested list content in the TUI renderer (#1787).
- Fixed TUI width handling for regional indicator symbols to prevent wrap drift and stale characters during streaming (#1783).
- Fixed Kitty CSI-u handling to ignore unsupported modifiers so modifier-only events do not insert printable characters (#1807).
- Fixed single-line paste handling to insert text atomically and avoid repeated
@autocomplete scans on large pastes (#1812). - Fixed extension loading with the new
@mariozechner/pi-ai/oauthexport path by aliasing the oauth subpath in the extension loader and development path mapping (#1814). - Fixed browser-safe provider loading regressions by preloading the Bedrock provider module in compiled Bun binaries and rebuilding binaries against fresh workspace dependencies (#1814).
- Fixed GNU screen terminal detection by downgrading theme output to 256-color mode for
screen*TERM values (#1809). - Fixed branch summarization queue handling so messages typed while summaries are generated are processed correctly (#1803).
- Fixed compaction summary requests to avoid reasoning output for non-reasoning models (#1793).
- Fixed overflow auto-compaction cascades so a single overflow does not trigger repeated compaction loops.
- Fixed
models.jsonto allow provider-scoped custom model ids and model-levelbaseUrloverrides (#1759, #1777). - Fixed session selector display sanitization by stripping control characters from session display text (#1747).
- Fixed Groq Qwen3 reasoning effort mapping for OpenAI-compatible models (#1745).
- Fixed Bedrock
AWS_PROFILEregion resolution by honoring profileregionvalues (#1800). - Fixed Gemini 3.1 thinking-level detection for
googleandgoogle-vertexproviders (#1785). - Fixed browser bundling compatibility for
@mariozechner/pi-aiby removing Node-only side effects from default browser import paths (#1814).
v0.55.4
New Features
- Runtime tool registration now applies immediately in active sessions. Tools registered via
pi.registerTool()after startup are available topi.getAllTools()and the LLM without/reload(docs/extensions.md, examples/extensions/dynamic-tools.ts, #1720). - Tool definitions can customize the default system prompt with
promptSnippet(Available tools) andpromptGuidelines(Guidelines) while the tool is active (docs/extensions.md, #1720). - Custom tool renderers can suppress transcript output without leaving extra spacing or empty transcript footprint in interactive rendering (docs/extensions.md, #1719).
Added
- Added optional
promptSnippettoToolDefinitionfor one-line entries in the default system prompt'sAvailable toolssection. Active extension tools appear there when registered and active (#1237 by @semtexzv). - Added optional
promptGuidelinestoToolDefinitionso active tools can append tool-specific bullets to the default system promptGuidelinessection (#1720).
Fixed
- Fixed
pi.registerTool()dynamic registration after session initialization. Tools registered insession_startand later handlers now refresh immediately, become active, and are visible to the LLM without/reload(#1720) - Fixed session message persistence ordering by serializing
AgentSessionevent processing, preventingtoolResultentries from being written before their corresponding assistant tool-call messages when extension handlers are asynchronous (#1717) - Fixed spacing artifacts when custom tool renderers intentionally suppress per-call transcript output, including extra blank rows in interactive streaming and non-zero transcript footprint for empty custom renders (#1719 by @alasano)
- Fixed
session.prompt()returning before retry completion by creating the retry promise synchronously atagent_enddispatch, which closes a race when earlier queued event handlers are async (#1726 by @pasky)
v0.55.3
v0.55.2
New Features
- Extensions can dynamically remove custom providers via
pi.unregisterProvider(name), restoring any built-in models that were overridden, without requiring/reload(docs). pi.registerProvider()now takes effect immediately when called outside the initial extension load phase (e.g. from a command handler), removing the need for/reloadafter late registrations.
Added
pi.unregisterProvider(name)removes a dynamically registered provider and its models from the registry without requiring/reload. Built-in models that were overridden by the provider are restored (#1669 by @aliou).
Fixed
pi.registerProvider()now takes effect immediately when called after the initial extension load phase (e.g. from a command handler). Previously the registration sat in a pending queue that was never flushed until the next/reload(#1669 by @aliou).- Fixed duplicate session headers when forking from a point before any assistant message.
createBranchedSessionnow defers file creation to_persist()when the branched path has no assistant message, matching thenewSession()contract (#1672 by @w-winter). - Fixed SIGINT being delivered to pi while the process is suspended (e.g. via
ctrl+z), which could corrupt terminal state on resume (#1668 by @aliou). - Fixed Z.ai thinking control using wrong parameter name, causing thinking to always be enabled and wasting tokens/latency (#1674 by @okuyam2y)
- Fixed
redacted_thinkingblocks being silently dropped during Anthropic streaming, and related issues with interleaved-thinking beta headers and temperature being sent alongside extended thinking (#1665 by @tctev) - Fixed
(external, cli)user-agent flag causing 401 errors on Anthropic setup-token endpoint (#1677 by @LazerLance777) - Fixed crash when OpenAI-compatible provider returns a chunk with no
choicesarray (#1671)
v0.55.1
New Features
- Added offline startup mode via
--offline(orPI_OFFLINE) to disable startup network operations, with startup network timeouts to avoid hangs in restricted or offline environments. - Added
gemini-3.1-pro-previewmodel support to thegoogle-gemini-cliprovider (#1599 by @audichuang).
Fixed
- Fixed offline startup hangs by adding offline startup behavior and network timeouts during managed tool setup (#1631 by @mcollina)
- Fixed Windows VT input initialization in ESM by loading koffi via createRequire, avoiding runtime and bundling issues in end-user environments (#1627 by @kaste)
- Fixed managed
fd/rgbootstrap on Windows in Git Bash by usingextract-zipfor.ziparchives, searching extracted layouts more robustly, and isolating extraction temp directories to avoid concurrent download races (#1348) - Fixed extension loading on Windows when resolving
@sinclair/typeboxaliases so subpath imports like@sinclair/typebox/compilerresolve correctly. - Fixed adaptive thinking for Claude Sonnet 4.6 in Anthropic and Bedrock providers, and clamped unsupported
xhigheffort values to supported levels (#1548 by @tctev) - Fixed Vertex ADC credential detection race by avoiding caching a false negative during async import initialization (#1550 by @jeremiahgaylord-web)
- Fixed subagent extension example to resolve user agents from the configured agent directory instead of hardcoded paths (#1559 by @tianshuwang)
v0.55.0
Breaking Changes
- Resource precedence for extensions, skills, prompts, themes, and slash-command name collisions is now project-first (
cwd/.pi) before user-global (~/.pi/agent). If you relied on global resources overriding project resources with the same names, rename or reorder your resources. - Extension registration conflicts no longer unload the entire later extension. All extensions stay loaded, and conflicting command/tool/flag names are resolved by first registration in load order.
v0.54.2
Fixed
- Fixed
.pifolder being created unnecessarily when only reading settings. The folder is now only created when writing project-specific settings. - Fixed extension-driven runtime theme changes to persist in settings so
/settingsreflects the activecurrentThemeafterctx.ui.setTheme(...)(#1483 by @ferologics) - Fixed interactive mode freezes during large streaming
writetool calls by using incremental syntax highlighting while partial arguments stream, with a final full re-highlight after tool-call arguments complete.