@oh-my-pi/pi-ai
Added
- Added Z.AI GLM Coding Plan usage tracking: credit-based
CREDIT_LIMITwindows (5h + weekly) now surface inomp usageand the status line with the plan tier (plan: lite/pro/max).
Fixed
- Fixed Amazon Bedrock requests to OpenAI-schema models (the
gpt-5.xSKUs) failing with HTTP 400unknown_parameter: 'thinking'when reasoning was enabled, by sendingreasoning.effortinstead of Anthropic'sthinkingbudget block for models the catalog marks as effort-controlled. - Fixed Cursor replay rejecting sessions with orphaned tool results while preserving their output as assistant context.
@oh-my-pi/pi-catalog
Fixed
- Fixed the thinking control mode for OpenAI models served over Bedrock Converse (
global.openai.gpt-5.6-luna,-sol,-terra), which are now classified aseffortrather thanbudgetso requests use OpenAI's reasoning schema. - Fixed LiteLLM discovery leaking a colliding bundled model's provider-specific transport onto custom endpoints: a discovered alias (e.g.
kimi-k3) matching a bundled Fireworks model no longer inherits that model's wire-id transform, which had caused requests to POST a model id the endpoint never advertised and return HTTP 400 (#9938).
@oh-my-pi/pi-coding-agent
Added
- Transcript usage rows now show the total prompt-to-yield time (Δ + clock, including tool calls) after the turn timestamp, opt-in via
display.showTurnTime(off by default). omp usagenow shows Z.AI GLM Coding Plan credit quotas (5h + weekly) with the subscribed plan tier.- The usage status line now labels untiered quota windows with the report's plan tier, surfacing Z.AI Coding Plan (
pro) and Codex plan names next to the 5h/7d percentages.
Fixed
- Fixed corrupt session headers silently overwriting recoverable transcripts during resume (#9915).
- Fixed a startup race that left a new session with almost no tools and an empty skill inventory. An early reconcile could commit a small live tool set as the permanent enabled set. The enabled set is now seeded from the construction-time tool slate, and
reconcileCodeModesamples it inside the registry mutation lock. - Fixed
snapcompactcompaction frames larger than the persistence limit being truncated into invalid image base64 on session resume, which made the provider reject every subsequent request with HTTP 400; already-corrupted archives now resume from their retained source text instead (#9901). - Fixed prompts hanging when a successful automatic retry ended through an early terminal path such as
yield. - Fixed
hubsend await:trueblocking for the full IRC timeout when the awaited agent finished without replying; the send now settles as soon as the peer stops (#9913). - Fixed workspace symbol searches reporting success when every configured language server failed; partial failures now remain visible alongside successful results (#8387).
- Handle denied working-directory changes without crashing resume, move, or startup flows.
- Fixed Cursor-only sessions becoming permanently unusable after replaying orphaned async tool results.
- Fixed
!commandconfig values (auth.broker.url,auth.broker.token, custom headers) passing inherited file descriptors to the resolution command; on POSIX these commands now run under/bin/sh(Windows keeps the built-in shell and is unchanged) - Fixed
providers.amazon-bedrockguardrail, transport, and header settings being dropped for models referenced by an inference-profile ARN. - Fixed the welcome screen staying at its original width after a terminal resize; a settled rebuild now recomposes it at the new width like the rest of the transcript.
- Fixed
omp if-benchending an Anthropic model's run on a transientRefusal (cyber)classification; the cyber classifier is stochastic near the threshold, so a refused turn is now retried with a fresh session (up to 3 attempts) before it is scored as a run-ending provider failure. - Fixed streamed assistant responses crashing when a later provider delta revised earlier Markdown; assistant output now stays mutable until finalization.
- Fixed an orphaned foreground tool card surviving a later agent turn and pinning the entire transcript outside native scrollback; new turns now seal abandoned cards while preserving background-task updates.
- Fixed resize and display replays to include naturally emitted active-head rows in one atomic bottom-first transaction without rewinding lifecycle state, while graceful shutdown still drains every eligible final suffix.
- Fixed terminal resizes lagging on large transcripts: the transient resize repaint now renders only the visible tail instead of the entire committed transcript per resize event.
- Fixed cache-miss dividers crashing completed streamed assistant messages after stable rows had entered native history; cache-miss status now trails the assistant output.
- Fixed quitting re-streaming the entire committed transcript when a resize-triggered scrollback replay was still pending; shutdown now flushes only genuinely un-retired rows.
- Fixed fast tool completions leaving a permanent running summary that blocked transcript retirement and squeezed later tool output.
- Fixed
omp githunk navigation (alt+↓/alt+↑) appearing to do nothing while the file sidebar had focus: the diff cursor band now stays visible (dimmed) when the pane is unfocused. - Fixed the git TUI sidebar jumping back to the top of the file list after staging or unstaging a file; selection now stays on the nearest remaining row
- Fixed the
aarch64-linuxnix buildoutput segfaulting in the dynamic loader before startup by repointing the staleDT_VERDEFthatpatchelfleaves behind when it grows.dynamic, and surfaced smoke-test signal deaths in the build log instead of masking them (#9881). - Added custom RPC launcher builders so embedded clients can transport omp RPC through SSH and remote process managers.
@oh-my-pi/collab-web
Added
- Transcript Markdown now renders LaTeX:
$…$and\(…\)inline,$$…$$and\[…\]in display mode, plus own-line$$/\[blocks. Currency ("$5 and $10"), escaped dollars, and code spans stay literal, and half-streamed delimiters stay visible until the equation closes. - Note: parity with the TUI covers these delimited forms only. Bare
\begin{…}…\end{…}environments without$$/\[fences remain literal here (the TUI typesets them); web support is a follow-up.
@oh-my-pi/pi-natives
Fixed
- Large session histories no longer leave macOS Terminal unresponsive during repaint.
- Bounded the interactive PTY reader→JS queue (64 × ≤64 KiB) and forward chunks through a separate
call_asyncpump so a fast child plus a stalled JS consumer cannot accumulate unbounded output in-process, without freezing PTY input/resize/kill. After a finite child exit, wait until accepted output reacheson_chunk; only a permanently open slave skips that wait. Cancel, timeout, and that stuck-open path abort the pump beforestart()resolves. Same defect class as the non-PTY bash bridge (#4078).
@oh-my-pi/pi-tui
Added
ProcessTerminalaccepts aconptyoption to force ConPTY-hosted behavior on or off, keeping terminal tests hermetic on WSL where live env detection would otherwise flip kitty-keyboard flags and write chunking (#9887).
Fixed
- Fixed pending-work animations repeatedly composing expensive frames without applying their full render cost to CPU backpressure.
- Fixed unfinished live viewport rows entering tmux pane history and duplicating streamed output (#9780).
@oh-my-pi/pi-utils
Added
- Added the Linux
subreaperspawn option to retain reparented descendants for process-tree cleanup.
Fixed
- Keep project-directory state unchanged when changing directories fails.
- Fixed
ptreetimeout cleanup and output capture so timed commands retain their deadline through descendant-held pipes and untimed commands read output to EOF.
What's Changed
- fix(tui): apply full-frame cost to loader backpressure by @roboomp in #9892
- fix(hub): settle await:true send when recipient stops without replying by @roboomp in #9914
- fix(session): reject corrupt headers before resume by @roboomp in #9924
- fix(catalog): stop litellm discovery leaking cross-provider wire transport by @roboomp in #9941
- fix(cwd): Handle denied project directories by @christian-auguste in #9631
- fix(coding-agent): spawn
!commandconfig children with stdio pipes only by @ghosty-11 in #9640 - fix(voice): widen PulseAudio buffers when PULSE_SERVER targets a remote server by @sjawhar in #9680
- fix(session): filter orphaned tool results from replay by @roboomp in #9861
- Fix Bedrock Guardrails with AIPs by @cyruscook in #9863
- fix(session): seed enabled tool set from the construction slate by @ephraimduncan in #9874
- fix(bedrock): send reasoning.effort to OpenAI-schema models by @jordan-augment in #9876
- fix(tui): prevent duplicated and interleaved text in tmux scrollback by @savanne-kham in #9877
- fix(pi-natives): bound PTY output queue like bash (#4078) by @sheeki03 in #9879
- fix(nix): repair stale DT_VERDEF in aarch64-linux build output by @roboomp in #9882
- fix(ai): cannot query z.ai GLM model usage by @coderredlab in #9883
- test(mnemopi): isolate local-llm Mnemopi instances on temp db paths by @roboomp in #9888
- fix(tui): add conpty seam so terminal tests stay platform-hermetic by @roboomp in #9889
- fix(lsp): surface workspace symbol server failures by @dungartoriaaa in #9891
- fix(natives): prevent macOS Terminal output stalls by @mazzanfar in #9893
- fix(session): externalize snapcompact frames to blob store on persist by @roboomp in #9902
- fix(coding-agent): finalize retry lifecycle after recovery by @rpie9 in #9904
- feat(coding-agent): show prompt-to-yield time on transcript usage rows by @H4vC in #9943
New Contributors
- @christian-auguste made their first contribution in #9631
- @jordan-augment made their first contribution in #9876
- @savanne-kham made their first contribution in #9877
- @sheeki03 made their first contribution in #9879
- @dungartoriaaa made their first contribution in #9891
- @mazzanfar made their first contribution in #9893
- @rpie9 made their first contribution in #9904
Full Changelog: v18.0.7...v18.0.8