@oh-my-pi/pi-ai
Changed
- Exported
resolveAnthropicMetadataUserIdso non-streaming Anthropic Messages consumers (e.g. the coding-agent web search provider) can produce the same Claude-Code-shapedmetadata.user_idas the main streaming path.
Fixed
- Preserved Anthropic
stop_detailson assistant messages so refusal and sensitive classifier stops remain structurally visible to callers. (#2290) - Fixed OpenAI Responses, Azure OpenAI Responses, and OpenAI Completions streams hanging until the 120s idle watchdog errored the turn when a provider delivers the terminal frame but never sends
[DONE]nor closes the connection.processResponsesStreamnow breaks out of the event loop onresponse.completed/response.incomplete(mirroring the Codex websocket/SSE terminal break), and the completions consumer breaks oncefinish_reasonplus a usage payload arrived — or, for hosts that never send usage, ends the stream cleanly via a short post-finish grace window (iterateWithTerminalGrace) that aborts the transport to release the socket.
@oh-my-pi/pi-catalog
Fixed
- Fixed NVIDIA NIM Qwen turns failing with
400 Validation: Unsupported parameter(s): enable_thinking. NIM's chat-completions schema isadditionalProperties: falseand exposes thinking via the vLLM conventionchat_template_kwargs.enable_thinking;buildOpenAICompatwas sending top-levelenable_thinkingfor everyqwen/*id regardless of host. Registerednvidiaas a known host (integrate.api.nvidia.com) and routed NVIDIA-hosted Qwen models tothinkingFormat: "qwen-chat-template"(#2299). - Fixed Moonshot/Kimi native OpenAI-compatible request metadata so Kimi K2 uses
max_tokensand omits OpenAI-onlystore, restoring first-turn output withMOONSHOT_API_KEY(#2289).
@oh-my-pi/pi-coding-agent
Added
- Added the
statusLine.transparentappearance setting (default off): when enabled, the status line skips the theme'sstatusLineBgfill and powerline end caps so the bar inherits the terminal's default background — useful in Ghostty and other terminals whose theme background does not match the theme's hardcoded status-line color (#2306)
Changed
- Changed
display.smoothStreamingto animate streamed tool-call arguments (including write/edit/bash previews) at the smooth streaming cadence so partial tool input now appears progressively instead of in large jumps - Changed streamed updates for custom wire tools to render incremental raw input as
{ input }prefixes for preview async.enablednow defaults totrue, keeping background task execution and async bash available out of the box; disable it to force blocking subtasks (#2301).- Shortened the status line's background-job indicator to a dedicated gear icon plus count (e.g.
⚙ 1instead of👥 1 job running) and moved it left of the session name in the right segment group
Fixed
- Fixed the task tool's streaming call preview rendering the per-agent list above the shared context/assignment briefs: agent rows now render below them, matching the result layout, so the list no longer pushes the brief down as items stream in and then jumps below it once the first progress snapshot arrives
- Fixed interrupted or ending tool calls to flush streamed argument previews to the full received payload instead of freezing on a partial reveal chunk
- Fixed tool-argument reveal to avoid splitting UTF-16 surrogate pairs at frame boundaries
- Fixed input lag in long sessions whenever a spinner was visible: loader ticks forced a full TUI re-compose (re-walking every transcript block) 12.5 times per second. Animations that only change their own rows (status loaders, welcome intro, voice mic glyph,
/btwstreaming panel) now use the new component-scoped render path (TUI.requestComponentRender), which reuses every other root subtree's rows; resize, overlays, inline images, forced repaints, root-list changes, or any concurrent full request still compose the full frame - Fixed transcript rendering so blocks with rows committed to scrollback while still streaming rerender on the first finalized frame, so the final committed output is visible instead of stale in-flight lines
- Fixed committed transcript bypass logic to re-render finalized blocks when their version changes, so post-finalization updates like restored inline errors and late tool-result content now appear in scrollback
- Cached stable edit/write preview highlighting inside each tool component so steady-state frame renders do not re-enter the native syntax highlighter.
- Skipped rendering finalized transcript blocks whose rows are already committed to native scrollback, keeping long restored sessions from re-rendering historical tool blocks every frame.
- Fixed MCP OAuth authorization and token requests to include the required
resourceindicator for the target MCP server. - Restored
async.enabled=falseas the task tool's blocking mode, so subagents no longer become background jobs when async execution is disabled (#2301). - Fixed the
/treeselector and HTML session export dropping the inherited│gutter for chain rows under a last-sibling branch, so the conversation flow under a└─branch stays visually anchored to its parent message (#2298). - Fixed Anthropic web search requests to include
metadata.user_id, matching the main Messages path: API-key requests forward the active session id verbatim, OAuth requests build the Claude-Code-shaped{session_id, account_uuid?, device_id}JSON envelope so gateways see consistent attribution (#2295). - Fixed Anthropic classifier refusals to switch through configured retry fallback chains without same-model retries, and to keep the fallback pinned for the conversation. (#2290)
- Fixed the edit-tool hashline prompt to stop steering agents toward
insert after block N:on closing delimiter lines; opener-only block anchors now point visible closing-line insertions to plaininsert after M:. (#2292)
@oh-my-pi/hashline
Fixed
- Fixed the
insert after block N:prompt guidance so it explicitly says N must be the block opener, not the closing delimiter or last visible line, and points visible closing-line edits to plaininsert after M:. (#2292)
@oh-my-pi/pi-tui
Added
- Added
TUI.requestComponentRender(component)to schedule component-scoped renders for self-contained updates
Changed
- Changed the render pipeline to reuse only affected root subtrees for component-scoped updates, avoiding full-tree compose when animations or other isolated component changes occur
Fixed
- Fixed component-scoped renders to preserve prior live scrollback seam data for skipped root children, preventing duplicate or missing rows during spinner-only updates
- Reported committed native scrollback row counts to interested child components so immutable history can be skipped without breaking live-region commit bookkeeping.
- Fixed
ProcessTerminaltreating asynchronous stdoutEIOerrors as uncaught exceptions: stdouterrorevents now mark the terminal dead, disable future renders, and keep the active session process alive (#2284).
@oh-my-pi/pi-utils
Fixed
- Fixed cleanup reentry noise during fatal shutdown: recursive cleanup requests now no-op idempotently instead of logging repeated
Cleanup invoked recursivelyerrors (#2284).
What's Changed
- fix(tui): handle stdout EIO renderer failures by @roboomp in #2285
- fix(mcp): hide Windows cmd stdio shims by @roboomp in #2288
- fix(catalog): correct Moonshot Kimi request shaping by @roboomp in #2291
- fix(hashline): clarify insert-after-block anchors by @roboomp in #2293
- fix(retry): fall back on Anthropic refusals by @roboomp in #2294
- fix(providers): send Anthropic search metadata.user_id by @roboomp in #2296
- fix(catalog): route NVIDIA-hosted qwen to chat_template_kwargs.enable_thinking by @roboomp in #2300
- fix(tui): extend chain gutter past last-sibling branches in tree view by @roboomp in #2303
- feat(tui): add
statusLine.transparentsetting for terminal-native status bar background by @roboomp in #2307 - Fix MCP OAuth resource indicator by @th3fallen in #2269
- Fix render CPU thrash in long transcripts by @cexll in #2309
New Contributors
- @th3fallen made their first contribution in #2269
Full Changelog: v15.11.0...v15.11.1