v17.0.3
@oh-my-pi/pi-ai
Fixed
- Replaced the opaque
h2 is not supportedfailure on the Cursor run transport with an actionable error naming the ALPN-stripping proxy as the cause and pointing at theproviders.cursor.baseUrlHTTP/2 bridge workaround. The run RPC is HTTP/2-only, so behind a TLS-intercepting proxy that strips ALPN (e.g. Zscaler) bun cannot negotiateh2and the completion cannot proceed (#5828). - Restored the
createAssistantMessageEventStream()root export used by legacy provider extensions (#5879). - Fixed parallel Responses tool-result images interleaving synthetic user messages before all pending outputs, preventing strict OpenRouter/Moonshot backends from rejecting follow-up requests. (#5850)
- Fixed Kimi Code K3 requests to send native named efforts (
low,high,max) and use adaptive effort rather than generic token budgets on explicit Anthropic transport overrides (#5893). - Automatically invalidate and rotate OAuth credentials when an "invalidated oauth token" error occurs
- Fixed Anthropic usage reports treating the organization response header as the account identity, which caused the 5h/7d status-line segment to disappear for OAuth credentials without stored organization metadata. (#5698)
@oh-my-pi/pi-catalog
Fixed
- Logged LiteLLM rich-metadata endpoint failures once with their endpoint and status before falling back to incomplete
/v1/modelsdata (#5801). - Fixed authenticated Kimi Code discovery to preserve live effort levels, default effort, mandatory-thinking state, and per-model protocol metadata (#5893).
- Fixed LiteLLM provider ignoring per-model pricing:
mapLiteLLMRichEntrynow readsinput_cost_per_token/output_cost_per_token(plus cache costs) from LiteLLM rich metadata and maps them tocost.input/cost.output, falling back to the bundled reference only when LiteLLM omits cost, so proxied models no longer display as free (#5818).
@oh-my-pi/pi-coding-agent
Changed
omp usageand the in-session/usageview now show the Anthropic organization next to the account for org-scoped credentials (with--redactmasking applied per part in the CLI, falling back to the org id when no display name is available), attribute "no usage data" rows per organization, and match the "in use by this session" marker by organization so only the active subscription is flagged. The OAuth login success message names the account and organization that was stored — a login landing on an unintended subscription is visible immediately./logoutlabels Anthropic accounts with their organization and marks only the credential of the active organization as active;omp token --listshows the organization next to each account. Two subscriptions sharing one email are distinguishable when selecting which to remove or mint a token for.omp auth-broker migrate --from-localdedupes Anthropic OAuth identities per organization, so a Team seat already on the broker no longer blocks uploading the personal plan under the same email.- The status line invalidates its cached usage when the session rotates to a different Anthropic organization (previously the old subscription's quota could linger for the cache TTL), and
omp auth-gateway checklabels each credential with its organization so a failing row says which subscription needs re-login. omp usage"no usage data" attribution is org-decisive whenever either the stored account or a report carries an organization: an org-less legacy credential whose own fetch failed is no longer hidden by an org-attributed sibling report sharing the same email.- Active-account matching for
/usage,/logout, andomp token --listnow treats a shared organization as a qualifier rather than a match: two Anthropic Team seats in one org (same org id, per-user pools) no longer flag each other's rows or reports as "in use by this session" — the base identity (account/email/project) is still required, with org-only sessions matching on the org alone. omp usage"no usage data" coverage now requires the member's own identity within a shared organization: a sibling Team member's same-org report no longer counts as coverage for an account whose own report is missing, while an org-only account remains covered by any same-org report.omp auth-broker migrate --from-localreruns now recognize an already-migrated org-only Anthropic row (login recovered neither email nor account) by its organization id instead of re-uploading it, which could overwrite the broker's newer refresh token with the stale local one.- Updated tangential agent forks to ignore parent session history and focus exclusively on the new request
- Hardened
/tanfork isolation: the clone's inherited todo list is cleared at fork (parent todo reminders no longer drag the tan back onto the parent's task), the fork notice warns that the parent is concurrently editing the same working directory, and the notice is re-injected after each compaction so the fork boundary survives summarization - Added visual markers in the transcript for elided tool calls that have no corresponding result
- Updated status event log to prioritize the most recent entries in the display window
- Updated the snapcompact shape preview transcript to use the compact scope format shown to models during compaction.
Fixed
- Fixed
xd://mount notices triggering unsolicited model turns by deferring hidden notices until the next user prompt. - Fixed
xd://device tools appearing in the direct tool inventory and prompting invalid function calls (#5797). - Fixed
history://read selectors being treated as part of the agent id instead of paging the transcript (#5806). - Narrowed the
history://contract in the system prompt to match the implementation: it serves registered agents process-wide plus persisted subagents discoverable from their artifact trees, but does not discover unregistered top-level sessions solely from persisted session files (#5839). - Fixed expanded
!bash andevaloutput keeping a stale… N more lines (ctrl+o to expand)footer after Ctrl+O revealed every line (#5842). - Fixed MCP reauthentication continuing to an authorization URL without
client_idafter dynamic client registration fails; the registration error now blocks the flow with the provider response details (#5852). - Fixed collapsed todo views hiding the in-progress task in large phases. Both the transient
Todotool result and the stickyTodosHUD now share one walking-viewport policy: completed/abandoned tasks are omitted, every active task (the in-progress one, or a pending task a live subagent is executing) is pulled to the head in todo order, remaining rows fill with the following pending tasks, and an explicit… N more active todossummary is shown when active work alone exceeds the preview cap (#5873). - Fixed legacy provider extensions failing to load when they use the historical synchronous auth-storage surface (#5879).
- Fixed orphaned detached MCP stdio server process trees surviving session dispose by escalating stdin-EOF → group SIGTERM → group SIGKILL on close() (#5578)
- Fixed
/newstarting an unsolicited old-context provider turn when a hidden steer (e.g. anxd://mount notice) was queued: the session transition is now an atomic boundary, so a queued steer/follow-up can no longer auto-resume against the pre-/newcontext while the session is disconnected mid-transition./compactstill resumes a steer/follow-up that arrives while it runs, draining the queue once it reconnects (#5800). - Fixed signed thinking-only Claude stops being discarded and retried as empty responses (#5881).
- Fixed repeated URL reads and URL-backed searches returning stale same-session responses instead of refetching the resource (#5803).
- Fixed
read/writenot recognizing ZIP-based.jar/.war/.ear/.apkfiles as archives, soread lib.jar:META-INF/MANIFEST.MFfailed with path-not-found (#5808). - Fixed legacy binary
.doc/.ppt/.xls/.rtfbeing advertised as convertible inread,fetch, and CLI@filehandling despite having no markit converter, which surfaced anUnsupported formaterror instead of falling through to normal file handling (#5808). - Fixed Kimi Code transport selection to follow live per-model protocol metadata by default while preserving explicit OpenAI and Anthropic overrides (#5893).
- Fixed repeated edit-tool rejections from local models by recovering comma-separated ranges and malformed trailers, while clarifying canonical string input and
.=syntax (#5805). - Fixed LSP diagnostics and edit-time diagnostics writethrough for pull-only servers that advertise
textDocument/diagnosticstatically or through dynamic registration (#5825). - Fixed local
!command output concatenating carriage-return progress updates by preserving them as readable line boundaries (#5845). - Fixed
hub/ircpeer discovery after process-crash resume by restoring persisted subagents as parked peers before listing the roster (#5864).
Removed
- Removed the unreliable Bing and Yahoo HTML-scraping web search providers
@oh-my-pi/pi-natives
Fixed
- Fixed
~(tilde) not expanding for every element of a brace expansion in the bash tool, somkdir -p ~/project/{a,b}now creates bothaandbunder$HOME/projectinstead of leaving a literal~/project/bin the working directory (#5819). - Fixed ANSI text wrapping to close and restore OSC 8 hyperlinks at physical line boundaries, preventing link targets from leaking into appended content (#5885).
@oh-my-pi/pi-tui
Fixed
- Fixed multiline pastes arriving without bracketed-paste markers (e.g. Cmd+V in the Codex desktop embedded terminal on macOS) being split into one submit per line:
StdinBuffernow collects adjacent ESC-free, CR/LF-bearing stdin reads in a fixed 10 ms classification window and coalesces three or more lines into one paste event, while ambiguous one-break input (including Enter batched with a following keystroke) is replayed unchanged (#5841). - Fixed wrapped OSC 8 links in Markdown tables making cell padding, separators, and adjacent cells clickable (#5885).
- Fixed interactive sessions surviving terminal closure and entering a runaway render loop by stopping the TUI and raising SIGHUP when terminal input closes or output fails (#5835).
- Fixed native cmux SSH pane resizes inserting blank rows into terminal scrollback by routing remote-transport sessions through the in-place repaint path (#5857).
- Fixed the terminal flickering when leaving a fullscreen overlay (e.g.
/settings) on terminals that re-report their size when the alternate screen buffer toggles: the alt-toggle SIGWINCH echo is height-only, so the resize fast path no longer borrows the alternate screen for it (#5854).
What's Changed
- fix(prompting): hide xd tools from direct inventory by @roboomp in #5799
- feat(task): unify structured subagent execution by @vmcall in #5283
- fix(catalog): warn when LiteLLM metadata discovery is forbidden by @roboomp in #5807
- fix(session): make /new an atomic boundary against queued steers by @roboomp in #5809
- fix(read): refresh URL responses on each invocation by @roboomp in #5811
- fix(edit): recover malformed local-model range syntax by @roboomp in #5813
- fix(read): support history URL selectors by @roboomp in #5814
- fix(ai): preserve Anthropic account identity in usage reports by @roboomp in #5815
- fix(tools): recognize zip-family archives and prune unconvertible extensions by @roboomp in #5816
- fix(catalog): read litellm per-model cost from rich metadata by @roboomp in #5820
- fix(shell): expand tilde for every brace-expansion element by @roboomp in #5823
- fix(lsp): support pull diagnostics by @roboomp in #5826
- fix(cursor): surface actionable error when h2 ALPN negotiation fails by @roboomp in #5829
- fix(tui): exit when the terminal disconnects by @roboomp in #5837
- docs: narrow history:// contract to current session tree by @roboomp in #5840
- fix(tui): coalesce raw multiline paste bursts without bracketed markers by @roboomp in #5843
- fix(tui): drop stale hidden-lines footer on expanded bash/eval output by @roboomp in #5844
- fix(cli): preserve carriage-return progress boundaries by @roboomp in #5846
- fix(ai): order parallel tool outputs before result images by @roboomp in #5853
- fix(mcp): stop reauth after failed dynamic client registration by @roboomp in #5855
- fix(tui): recognize remote cmux resize sessions by @roboomp in #5863
- fix(hub): restore persisted peers after resume by @roboomp in #5865
- fix(tui): prevent settings exit flicker by @roboomp in #5866
- fix(tui): keep active todo visible in collapsed views by @roboomp in #5878
- fix(extensions): restore legacy Kimi provider compatibility by @roboomp in #5880
- fix(agent): preserve signed thinking-only stops by @roboomp in #5883
- fix(tui): isolate wrapped OSC 8 links in tables by @roboomp in #5887
- fix(kimi-code): preserve K3 native effort contract by @roboomp in #5896
Full Changelog: v17.0.2...v17.0.3