Release notes
Oh My Pi v18.12.0
@oh-my-pi/pi-agent-core
Fixed
- Fixed Cursor turns failing with
PROVIDER_ERRORwhen a follow-up (a finished background job, a late diagnostic, a reminder) arrived while the previous turn was still streaming (#15821 by @robfeldmann)
@oh-my-pi/pi-ai
Breaking Changes
PI_CODEX_ZSTDis replaced byPI_REQUEST_COMPRESSION; setPI_REQUEST_COMPRESSION=0to send Codex (and every other) request body uncompressed (#16086 by @H4vC)
Added
- Added
ThinkingContent.narration, set on Anthropic and Bedrock thinking blocks whose signature marks them as between-tool narration, andpresentNarrationAsAnswer(message)to show those blocks as reply text while replay keeps them as signed thinking - Added
keys.peek(provider, { includeExpired: true })to name the stored account behind an expired OAuth token for reads that never send it, such as keying an offline model-cache lookup (#16061 by @gchai) - Added
prewarmModelConnection(model)(providers/connection-prewarm), which opens the model's API connection ahead of a request using the same transport and TLS settings so the request reuses it instead of paying the connection handshake (#16086 by @H4vC)
Changed
- Anthropic requests to the official API now gzip the request body, so long conversations reach the model sooner on slow uplinks; set
PI_REQUEST_COMPRESSION=0to disable it (#16044 by @H4vC) - GitHub Copilot requests (chat completions, Responses, and Claude messages) now send zstd-compressed bodies, cutting upload size by roughly 60–75% on long conversations; set
PI_REQUEST_COMPRESSION=0to disable it (#16086 by @H4vC) - A rejected request-body encoding now only disables compression for that host, and only after the uncompressed resend succeeds, so a genuine 400 no longer turns compression off (#16086 by @H4vC)
- Connection warm-up now covers every catalog provider, not only the official Anthropic API: it re-warms the origin a model's requests actually reach (Copilot plan hosts,
MOONSHOT_BASE_URL, regional hosts), throttled per host; custom providers, built-in provider ids routed to a gateway, local hosts, and Anthropic gateways are never probed (#16086 by @H4vC)
Fixed
- Fixed Ollama and Ollama Cloud streaming errors being silently accepted as successful responses (#16039 by @mottopanikeiku)
- Fixed the hermes in-band scanner exposing a truncated tool name for streaming tool calls:
toolStartnow waits for the complete JSON name, so a stream that splits or stops mid-name never reports a partial tool name (#16064 by @adi-IL) - Fixed
keys.peek()rotating through stored accounts on each call; it now returns the first account whose token has not expired, every time, so model discovery keeps reading one account's cached catalog (#16061 by @gchai) - Fixed local JSON Schema references with URI-percent-encoded, JSON Pointer-escaped, or empty definition names resolving incorrectly during dereferencing, strict conversion, and value validation (#15926 by @jchanghong023).
- Fixed network failures showing a generic "Connection error."; offline, connection-refused, and TLS-verification failures now name the host and the cause (#16036 by @jorgoose)
- Fixed Jev image limits rejecting inputs for unrelated native judges and redundant TypeSafe image judgments when only detail changes (#16002 by @anatoli-tsinovoy).
- Fixed SIGTERM interrupting an in-flight OAuth token rotation before its replacement refresh token was saved (#15845).
- Fixed sessions getting stuck on HTTP 400 after replaying tool names unsupported by the target provider, including invented
proc://*calls and Google tool names sent to Bedrock (#15839)
@oh-my-pi/pi-catalog
Added
- Added the
request-encodings,request-encoding-rejection, andendpoint-hostsrule axes,resolveRequestCompression(model, url), andisCatalogEndpointUrl(model, url), declaring which providers' own endpoints decode compressed request bodies: official Anthropic API (gzip), Codex backend (zstd), and GitHub Copilot's API hosts (zstd, then gzip); Moonshot's China host counts as its own endpoint (#16086 by @H4vC)
Changed
- Bundled GPT-5.4 rows on OpenAI, Azure, OpenCode Zen, and Command Code report a 1M context window, the window the coding agent already applied at runtime; GitHub Copilot and Factory Droid keep their own windows (#16094 by @H4vC)
Fixed
- Fixed custom providers that declare a built-in
providerType(Azure, GitHub Copilot, OpenCode, ClinePass, DeepSeek, NVIDIA) missing that provider's wire quirks, such as strict Responses pairing and the ClinePass reasoning field: they now follow the same catalog rules as the built-in provider (#16093 by @H4vC) - Fixed OpenCode Zen bringing back its retired bundled models after a failed refresh: the retry-backoff write no longer drops the cached snapshot's retention, so the pruned catalog survives the retry window and offline launches. (#16054 by @adi-IL)
- Fixed
providers.cacheWarmingnever arming for Claude on Google Antigravity: Claude models there now declare Vertex Anthropic's five-minute prompt-cache lifetime; Gemini models stay unwarmed because Google's implicit cache has no fixed lifetime (#15764, #16025 by @harshaygadekar) - Scoped Jev image bounds to the selected models instead of applying them to unrelated native judges (#16002 by @anatoli-tsinovoy)
- Fixed Bedrock sessions rejecting replayed tool names over 64 characters after a model switch (#15839)
@oh-my-pi/pi-coding-agent
Added
- Added
statusLine.segmentOptions.pi.showProfile: set it tofalseto hide the profile name next to theπbrand, for example when each profile already has its own theme (#16063 by @shgew) - Added
sharpshooter.minPromptLength(default 16, minimum 2) to control the shortest prompt Sharpshooter extracts decisions from (#16043 by @bigHippoZz)
Changed
…