@oh-my-pi/pi-agent-core
Added
- Added a per-message token estimation cache to optimize performance by reusing token counts for settled message history, with automatic cache invalidation on message mutation.
Changed
- Improved tool execution control by making tool interruptibility resolvable per call, allowing side-effecting operations to complete while passive waits can yield to queued steering.
@oh-my-pi/pi-ai
Changed
- Changed Anthropic API-key requests to default to a 1-hour prompt-cache retention (using the extended-cache-ttl-2025-04-11 beta) to prevent cold-misses during idle sessions, with support for PI_CACHE_RETENTION values "short" and "none" to override this behavior.
Fixed
- Fixed transient OpenAI stream truncations by retrying once before output becomes replay-unsafe, preventing recoverable transport errors from failing the turn.
- Fixed native Kimi Code K3 thinking being disabled during named function selection by utilizing generic required tool choice.
- Fixed /login moonshot validating China-platform API keys against the international host instead of honoring MOONSHOT_BASE_URL.
- Fixed Anthropic session stickiness suppressing usage-based re-ranking indefinitely by gating stickiness on a 1-hour cache warmth window (configurable via ANTHROPIC_SESSION_STICKY_CACHE_WARM_MS) to restore proactive multi-account load balancing after long idle periods.
- Fixed credential ranking where clockless Anthropic usage windows incorrectly outranked clocked sibling credentials.
- Fixed tool request failures (HTTP 400) on local grammar-constrained OpenAI-compatible backends (such as llama.cpp, LM Studio, and vLLM) by widening bare boolean subschemas into a value-accepting primitive union.
- Fixed custom OAuth Anthropic-compatible endpoints receiving generated Claude Code fingerprint headers even when explicit header overrides were provided.
- Fixed active sessions for plan-gated OpenAI Codex models (Sol/Luna) silently re-routing to sibling OAuth accounts when usage headroom changed, ensuring session stickiness is preserved as long as the preferred credential remains usable and eligible.
@oh-my-pi/pi-catalog
Added
- Added an Anthropic compatibility flag to allow non-official OAuth endpoints to opt into configured Claude Code fingerprint header overrides.
Fixed
- Fixed a security issue where sensitive provider-defined request headers (such as API keys or credentials) were serialized in plaintext within the model cache (models.db). The cache now omits these headers, securely invalidates older cached rows, and restores or refetches them dynamically.
- Fixed OpenAI Codex discovery to respect caller-supplied fetch configurations (such as proxies or custom CAs) and correctly replace stale bundled models with the authenticated account catalog.
- Fixed stream timeouts and retry loops during long prefills on local loopback or RFC1918 backends (such as litellm proxies fronting local servers) by applying the local stream-timeout floor to these backends.
- Fixed Kimi K3 models served through generic OpenAI-compatible routes exposing unsupported reasoning efforts instead of the mandatory low/high/max scale.
@oh-my-pi/pi-coding-agent
Added
- Added support for Codex (ChatGPT subscription) in
generate_imagevia theproviders.image: "openai-codex"option, including automatic subscription detection and fallback logic. - Added an optional
providerparameter togenerate_imageto override the global image provider setting for a single request. - Added OpenTelemetry log and metric export capabilities alongside existing trace exports, supporting standard OTLP environment variables.
- Added support for id-prefixed targets and keys in
retry.fallbackChainswildcards (e.g.,"openrouter/google/*"). - Added support for
Shift+Enterin the session tree selector (/tree,/branch) to summarize and switch branches in a single step. - Added the
PI_CONFIG_FILESenvironment variable to load settings overlays before--configoverlays.
Changed
- Changed bundled TTSR rules to warn instead of interrupting generation.
- Renamed the system prompt's project-context section wrapper from
<context>to<repo-rules>to prevent XML tag collisions with in-band tool dialects. - Renamed the
/extensionsdashboard tab "Agents (standard)" to "Agent Dirs (.agent/.agents)" to clarify its purpose. - Optimized performance by reducing concurrent subagent update CPU usage, skipping unnecessary title generation in non-interactive hosts, and memoizing
convertToLlmconversions over settled history. - Improved the display of
read xd://calls by rendering them in a compact grouped view instead of full tool-execution cards. - Made the hashline seen-line guard opt-in and off by default via
edit.enforceSeenLines.
Fixed
- Fixed isolated
tasksubagents mutating the parent git checkout and stacking parallel task branches by detaching the git directory. - Fixed Windows compatibility issues, including
launch startdaemons opening visible console windows, startup crashes when running from a drive root, and command errors in thehubtool with non-POSIX shells. - Fixed Windows stdio MCP servers launched through
.cmd/.batshims failing withTransport closedby escaping arguments properly. - Fixed browser tool selectors (
tab.click,tab.select, etc.) to accept bare snapshot refs (e.g.,tab.click("e501"),@e501) and resolved crashes when handedElementHandleobjects. - Fixed classifier refusals (e.g., Anthropic
stop_reason: "refusal") ending turns with no visible error or exiting 0 in print mode. - Fixed transcript blocks being duplicated during streaming and tmux pane growth blanking finalized chat history.
- Fixed JS/TS debugging by launching vscode-js-debug over TCP and synchronizing breakpoints across the session tree.
- Fixed legacy pi extensions failing validation or loading when importing path helpers or package managers.
- Fixed
/loginand/logoutfailing to refresh model discovery with fresh credentials due to stale cached data. - Fixed Cursor models and advisors failing to receive or execute mounted
xd://devices and MCP tools. - Fixed MCP tools repeatedly unmounting/remounting with overlapping sanitized prefixes, and stale tools remaining after disconnecting.
- Fixed custom LSP servers crashing when requesting unconfigured
workspace/configurationsections. - Fixed keyboard input dying after the first keypress when custom tools or modules hijack stdin at import time.
- Fixed auto-compaction dead-ending in a warning loop when the most recent turn is over budget.
- Fixed GitHub-hosted repository file reads falling back to
curlby adding a dedicatedgithubfile-read operation. - Fixed active session markers and TUI usage panels truncating organization suffixes from same-email account labels.
- Fixed
writeapproval gates misclassifyingxd://device writes asexec. - Fixed bash command timeouts rendering with an incorrect error border, and resolved Windows bash crashes when piped commands time out.
- Migrated legacy nested/quoted-dotted config keys (e.g.,
dev.autoqa.consent->dev.autoqaConsent) on settings load. - Added managed
ctx.setInterval/ctx.setTimeout/ctx.clearTimerhelpers on extension contexts to prevent uncaught exceptions from crashing sessions.
@oh-my-pi/pi-natives
Added
- Added optional PTY start callbacks that report the spawned child PID before command completion.
@oh-my-pi/omp-stats
Fixed
- Fixed an EADDRINUSE error by properly reusing the live stats dashboard on the requested port and reclaiming stale listeners (#5970).
@oh-my-pi/pi-tui
Changed
- Improved rendering performance across text, box, editor, and frame layouts by caching validated line widths and avoiding redundant Unicode width measurements.
Fixed
- Fixed a performance issue where typing in the editor triggered a full UI re-render, significantly improving keystroke responsiveness.
- Restored text wrapping for long descriptions in the slash-command autocomplete picker to ensure readability at standard terminal widths.
- Prevented temporary dashboard frame updates from cluttering the terminal's native scrollback history.
- Added support for cleaning up tracked Kitty graphics, allowing inline images to be properly deleted before falling back to text.
- Fixed an issue where resizing or growing a multiplexer pane would incorrectly overwrite newly exposed rows with blank padding.
@oh-my-pi/pi-utils
Changed
- Updated
installRuntimeModuleResolverto return an uninstaller function that restores the stocknode:moduleresolver once all runtime roots are unregistered. - Added documentation regarding a known limitation with Bun 1.3.14's
createRequirebehavior when the module resolver patch is active.
What's Changed
- fix(tui): prevent vibe_wait TV-wall scrollback stacking by @roboomp in #5779
- fix(auth): scoped post-login model refresh and stripped cache credentials (#5780) by @roboomp in #5786
- fix(lsp): raise timeout ceiling to 300 seconds by @roboomp in #5810
- fix(read): honor exact line selector bounds by @roboomp in #5812
- fix(extensions): disambiguate .agent dirs provider tab label by @roboomp in #5822
- fix(coding-agent): show loop state in status line by @wolfiesch in #5832
- fix(tui): restore slash description wrapping by @roboomp in #5849
- docs(coding-agent): clarify async job lifecycle contract by @roboomp in #5871
- fix(ai): allow custom OAuth fingerprint header overrides by @roboomp in #5890
- fix(mcp): process-group kill and SIGKILL escalate on stdio transport close by @Mathews-Tom in #5894
- fix(advisor): keep advise when Cursor emits ungranted native tools by @roboomp in #5902
- fix(rpc): claim stdin before extension discovery by @roboomp in #5904
- fix(browser): bound scroll renderer acknowledgement wait by @roboomp in #5906
- fix(ai): retry safe truncated responses streams by @usr-bin-roygbiv in #5908
- fix(subagent): skip session title generation for headless subagents by @roboomp in #5911
- docs(advisor): clarify concern delivery after a self-ended yield by @roboomp in #5915
- fix(providers): sanitize boolean subschemas for grammar backends by @roboomp in #5919
- perf(coding-agent): coalesce subagent recent-output reconstruction to emit boundaries by @metaphorics in #5935
- perf(tui): carry measured widths through rendering by @metaphorics in #5937
- fix(tui): scope stable-focus keystroke renders by @roboomp in #5940
- fix(coding-agent): parallelize session teardown by @roboomp in #5941
- fix(coding-agent): drain advisor reviews in print mode by @paralin in #5942
- perf(session): memoize convertToLlm and estimateTokens over settled history by @roboomp in #5947
- fix(ai): normalize clockless usage drain ranking by @roboomp in #5961
- fix(session): discard capped zero-block assistant stops by @roboomp in #5962
- fix(auth): gate session credential pin on prompt-cache idle window by @roboomp in #5967
- fix(extensibility): re-export getPackageDir/getProjectDir from legacy pi shim by @roboomp in #5969
- fix(stats): reuse or reclaim occupied dashboard port by @roboomp in #5971
- fix: resolve configured model roles in --model by @paralin in #5972
- fix(ai): honor Moonshot base URL during login by @roboomp in #5986
- fix(catalog): normalize Kimi K3 reasoning efforts by @roboomp in #5987
- fix(coding-agent): render ask option previews inline by @metaphorics in #5988
- fix(coding-agent): enable js-debug child sessions by @roboomp in #5989
- fix(ai): allow K3 tools while thinking by @usr-bin-roygbiv in #5994
- fix(agent): preserve side-effecting hub outcomes by @roboomp in #5997
- fix(launch): prevent finite PTY start hangs by @roboomp in #5999
- fix(search): honor configured Codex transport by @roboomp in #6002
- fix(browser): isolate request interception per run by @roboomp in #6005
- fix(task): detach isolated worktree git dir from parent checkout by @roboomp in #6007
- fix: scope provider request hooks to the request model by @roboomp in #6008
- fix(tui): show async task job model badges by @roboomp in #5062
- fix(github): add dedicated repository file reads by @roboomp in #5424
- fix(coding-agent): rescue snapcompact dead-end when nothing is summarizable by @roboomp in #5448
- fix(auth): keep plan-gated Codex sessions on their sticky OAuth account by @roboomp in #5470
- fix(catalog): prune unsupported Codex account models by @roboomp in #5497
- fix(browser): observe raw promises before target close by @serverinspector in #5588
- fix(cli): make --config overlays global by @roboomp in #5687
- fix(task): inherit default fallback for single-model subagents by @jeffscottward in #5757
- fix(coding-agent): clear inline images when disabled by @derekszen in #5767
- fix(browser): reject non-string tab selectors with a named error by @roboomp in #5778
- fix(auth): isolate import tests from ambient broker config by @roboomp in #5784
- fix(browser): support authenticated cmux TCP relays by @roboomp in #5789
- fix(session): resume stalled Cursor tool turns by @roboomp in #5792
- fix(robomp): defer rate-limited submissions by @roboomp in #5886
- fix(tui): preserve history across tmux pane growth by @roboomp in #6012
- fix(launch): hide Windows daemon console windows by @roboomp in #6021
New Contributors
- @derekszen made their first contribution in #5767
Full Changelog: v17.0.4...v17.0.5