Release notes
Oh My Pi v18.15.0
@oh-my-pi/pi-agent-core
Fixed
- Fixed OpenAI remote compaction (
/responses/compact) replaying backend-onlyinternal_chat_message_metadata_passthroughmetadata that Codex rejects as an unknown parameter (#17590 by @briankeefe)
@oh-my-pi/pi-ai
Fixed
- Fixed Codex conversation replay failing with an unknown
internal_chat_message_metadata_passthrough.content_token_countparameter by omitting backend-internal response metadata from replayed input (#17590, #17597 by @briankeefe). - Fixed
service_tier: "ultrafast"being dropped for OpenAI-family models on custom providers even when the model'sserviceTierslists it (#17577 by @jakehemmerle) - Fixed Google Vertex requests with Workforce Identity Federation ADC failing token refresh against the wrong endpoint (#17447).
- Fixed Anthropic (and other rotating-token) OAuth accounts being signed out automatically when a background usage poll's token refresh got
invalid_grant, including refreshes a client delegates to an auth broker; usage polling no longer disables credentials, so only a real request's refresh can do that (#17468)
@oh-my-pi/pi-catalog
Added
- Added Modular Cloud (
modular) as a provider:/login modularwith an API key, models and prices from the models.devmodularentry, and per-model reasoning controls for MiniMax M3.1 Flash, MiniMax M3, and Gemma 4 31B (#17334 by @tommyjtl) - SambaNova Cloud follow-up turns now reuse the provider's prefix cache, so multi-turn conversations stop re-processing earlier context (#17555 by @rjuez00)
Fixed
- Fixed newly discovered OpenAI-compatible models ignoring provider-reported context and output token limits (#17561 by @wolfiesch)
@oh-my-pi/pi-coding-agent
Added
- Long or multi-step background shell commands get a one-line caption saying what they do and when they end, written once per job by the
widgetmodel role when the job, after running 15 seconds, is shown in a live widget or listed by/jobs full; the jobs sheet and/jobs fullshow it under the job's purpose. It follows the Live Job Widgets setting (async.widgets), andCreateAgentSessionOptions.jobCaptionWriterreplaces the model call (#17649 by @wolfiesch)
Changed
- In a source checkout, the error for a missing HTML export viewer now names the script that builds it,
packages/collab-web/scripts/build-export-viewer.ts, besidebun gen:export-viewer(#17636 by @sjawhar) - Fixed an eval cell running silently on a new kernel after the session's Python kernel or JS worker died between cells (a crash, a kill, an out-of-memory kill, or a cancelled JS cell): the first cell on the replacement now carries
Kernel restarted: … state is unavailable. Re-run needed setupahead of its own output, instead of failing with a bareNameErroron a variable an earlier cell set (#17595 by @sjawhar) - Fixed a task worker messaged (
write agent://<id>) while still starting up running on the sharedcontextalone and never receiving itstasks[].taskassignment; the message now waits for the assignment's turn (#17587) lsp reloadnow discovers Rust crates created after rust-analyzer started, so hover and other analysis work without restarting omp (#17658).- A model without image input (GLM, DeepSeek, Grok Composer and the like) reads a snapcompact archive's full kept text instead of image-omitted placeholders for its frames, after a model switch, on resume and in side requests (#17510 by @will-bogusz)
- Snapcompact no longer refuses a new archive as "would not reduce context" when it shrinks a session that already holds one (
/compact snapcompact, idle and pre-prompt compaction) (#17490 by @will-bogusz) - A failed
/compact snapcompactnow reports its reason once instead of twice, and names the/compactmode to run instead (#17490 by @will-bogusz) - Background bash and eval jobs now carry the purpose the model gave for the call:
/jobs,/jobs full,proc://listings,waitandjobresults, and the jobs HUD hover lead with it ahead of the raw command line (#17649 by @wolfiesch) - The
seanceguidance in the task tool and thearchivedocs now say that a question about an earlier session is answered by theseanceagent, and that reading the session's raw JSONL belongs to narrow mechanical checks only, so a consult is no longer duplicated by transcript reads and re-run checks (#17523 by @iacore)
Fixed
- A prompt on a model whose provider has no usable credential (logged out, refresh token expired, or an auth broker holding none) now switches to the first
retry.fallbackChainscandidate that has one instead of failing with "No API key found", and switches back on the first prompt after the credential returns (#17559 by @wolfiesch) - Fixed background results arriving during manual
/compactstarting turns on stale history or disappearing from the saved session (#17599). - Fixed isolated tasks on fuse-overlayfs leaving their overlay mounted and the
fuse-overlayfsdaemon running when the unmount hit a transient "Device or resource busy"; a failed unmount now reports fusermount's error and keeps the workspace foromp worktree clearinstead of deleting its layers under the live mount (#17644) - Usage-limit retries now count system sleep toward the quota-reset deadline instead of re-arming the remaining uptime delay after the countdown reaches zero (#17606 by @zhiland).
- Fixed role assignments to a
models.ymlmodel whose id differs only by case from a bundled model of the same provider (such asxiaomi/MiMo-V2.6-Probesidexiaomi/mimo-v2.6-pro) silently staying unset (#17580) - Fixed Eval's direct browser wait helpers (
tab.waitForSelector,tab.waitForText, …) giving up after 29 s when passed a longer{ timeout }; the requested timeout is now honored up to the browser tool's 300 s cap (#17617) - Fixed
browser.open
…