@oh-my-pi/pi-agent-core
Fixed
- Improved the manual
/shakecommand to retain a small history of recent tool results, preventing the agent from losing its active working context.
@oh-my-pi/pi-ai
Breaking Changes
- Renamed
withGeminiThinkingLoopGuardtowithThinkingLoopGuard; the guard applies to Gemini, DeepSeek, and Grok model-id families.
Changed
- Updated OpenCode Go integration to use the official usage endpoint, removing hardcoded caps, enabling real-time credential validation, and routing multi-key pools based on rolling and weekly headroom.
- Optimized Anthropic prompt caching with rolling 5-minute breakpoints and idle refreshes to keep the prompt prefix warm.
Fixed
- Fixed Ollama chat adapter to correctly forward sampling parameters like temperature and topP to the provider.
- Fixed OpenAI agent turns ending prematurely after a web search with no visible answer, ensuring the agent continues processing the search results.
- Fixed a resource leak where completed model streams retained provider concurrency permits longer than necessary.
- Fixed image input support for qwen3.8-max and newer models when using DashScope compatible-mode.
- Fixed xAI usage reporting falling back to a stale cache when a new weekly cycle starts with 0% consumed credits.
- Fixed Together AI login validation failures by querying the authenticated models list instead of a hardcoded model.
- Fixed credential-health probes and usage fetches failing when using reference-stored API keys (such as environment variables or commands) by ensuring secrets are correctly resolved.
- Fixed Perplexity email-OTP login by preserving the session cookies required for verification.
- Fixed thinking configuration for OpenAI and Daybreak models to correctly send reasoning.effort: "none" when thinking is disabled.
- Fixed Grok runaway thinking streams bypassing the thinking-loop guard.
Removed
- Removed legacy local request-cost estimation machinery and database schemas previously used for OpenCode Go estimates.
@oh-my-pi/pi-catalog
Breaking Changes
- Removed
OpenAICompat.enableGeminiThinkingLoopGuard; thinking-loop eligibility is derived solely from themodel.idfamily.
Added
- Added first-party OpenAI Daybreak Blue, Daybreak Red, and GPT-5.6 Cyber models with full support for their documented API pricing (including long-context rates above 272K input), token limits, tools, and reasoning effort controls (off/low/medium/high/xhigh/max).
- Added calculateUncachedInputCost() to calculate prompt pricing against active context-length tiers without prompt caching.
Fixed
- Fixed Anthropic cache-write pricing to correctly honor mixed 5-minute and 1-hour TTL usage instead of incorrectly charging all writes at the 5-minute rate.
- Fixed Ollama Cloud DeepSeek V4 Flash and older reasoners to correctly apply the DeepSeek effort contract (e.g., low/high/max) instead of the generic effort ladder.
- Added a default request timeout to OpenAI-compatible model discovery to prevent stalled provider endpoints from hanging startup indefinitely.
- Fixed Anthropic cache-write pricing to honor mixed 5-minute and 1-hour TTL usage instead of charging every write at the 5-minute rate.
- Fixed Ollama Cloud DeepSeek V4 Flash (including dated/preview tags like
deepseek-v4-flash:0731) exposing the genericminimal/low/medium/high/xhigheffort ladder withoutmax; theollama-chattransport now applies the DeepSeek effort contract (Flash →low/high/max, older reasoners →high/max), matching the direct API and every other host (#8334). - Exposed the
lowreasoning-effort tier for DeepSeek V4 Pro on the direct API and faithful aggregator routes, matching DeepSeek's updated API contract advertisingreasoning_effortlow/high/maxfor both V4 SKUs; OpenRouter's non-Flash route still exposes onlyhigh, and the older V3.x/R1 reasoners remainhigh/max(#8405). - Bounded OpenAI-compatible model discovery with a default request timeout so a stalled provider
/modelsendpoint can no longer hang startup indefinitely inresolveModelDiscoveryFallback(#8315). - Fixed Codex-discovered
gpt-daybreak-*aliases being treated as unknown models, restoring the GPT-5.6low/medium/high/xhigh/maxeffort ladder and its 372K fallback only when the Codex registry omitscontext_window. - Fixed first-party OpenAI GPT-5.6 aliases to preserve wire-level
offthrough generated pro aliases and to price requests above 272K input at each SKU's documented long-context rates.
@oh-my-pi/pi-coding-agent
Breaking Changes
- Removed the global
advisor.subagentssetting. Subagent advisors are now configured per agent via frontmatter ortask.agentAdvisor. Existing configurations ofadvisor.subagents: truewill automatically migrate totask.agentAdvisor: { task: "on" }.
Added
- Added Astral
tyas a built-in fallback Python LSP server (ty server), ordered behindpyright,basedpyright, andpylsp. - Added first-party Nix support, including reproducible source builds for Linux and macOS, a pinned development shell, NixOS and Home Manager modules, and offline Bun dependency support.
- Added support for per-agent advisors configured via the
advisorfrontmatter field or thetask.agentAdvisorsettings, allowing different agents to be advised by different models. - Redesigned the
/agentsinterface as a fullscreen hub featuring a scope sidebar, type-to-filter search, a pinned detail pane, mouse support, and interactive property chips for configuring agent settings. - Prepared for the upcoming npm package rename by updating
omp updateand startup version checks to follow theomp.renamepointer in the published manifest.
Changed
- Updated
/usage,omp usage, and the status line to display authoritative OpenCode Go quota usage directly from the official endpoint, replacing estimated costs with actual usage across three time windows (5h, 7d, and monthly). - Documented the source-available local protocol relay and clarified that production collaboration relay binaries are not currently published.
- Enabled bounded Anthropic prompt-cache refreshes for the main agent loop while isolating advisor and side-channel requests from the shared refresh timer.
Fixed
- Fixed multiple Language Server Protocol (LSP) issues, including concurrent sessions sharing backend overlays, stale document overlays after workspace edits, incorrect transactional edit advertisements, unhandled snippet placeholders in rust-analyzer, and failing to restore overwritten targets during failed file renames.
- Fixed LSP
diagnosticsincorrectly reporting success when all language servers failed. - Fixed Hindsight memory scoping splitting repositories across multiple scopes on case-sensitive filesystems by lowercasing the project label.
- Fixed the CLI crashing at startup with a raw
AuthBrokerErrorwhen the configured auth broker is unreachable, replacing it with an actionable error message. - Fixed various resource and process leaks, including idle launch brokers staying alive indefinitely, stale MCP connections leaving child processes open, and undrained stdout in DAP
runInTerminalrequests. - Fixed custom STB-backed vision providers failing to decode WebP images by automatically detecting image formats from bytes and normalizing WebP blocks.
- Fixed command-backed provider API keys (
!command) staying pinned to cached values after receiving an HTTP 401 error. - Fixed the
/agentsControl Center failing to open when model overrides are configured as YAML arrays. - Fixed session-title generation regressions by restoring plain-sentence phrasing and name-fidelity instructions.
- Fixed agent-facing prompts and system instructions mentioning tools that are absent from the current session catalog.
- Fixed manual
/shakediscarding all tool results; it now retains a small recent tail of results to preserve active working context. - Fixed
omp installfailing validation for extensions importing legacyis<Tool>ToolResultevent guards. - Fixed profile aliases generated by standalone binaries invoking Bun's embedded virtual script instead of the installed
ompcommand. - Fixed
/skill:<name>tokens in/planor/vibeinline prompts being treated as literal text instead of executing the skill. - Fixed long streaming
writepreviews stalling the TUI by optimizing file scanning and splitting. - Fixed the Windows console disappearing when running commands like
/stats. - Fixed retry-fallback selection switching to a fallback model with a context window too small to hold the current session context.
- Fixed OpenCode discovery ignoring
opencode.jsoncfiles and rejecting comments inopencode.json. - Fixed WSL2 startup hanging forever when the Windows interop pipe is wedged: the WSL host-home discovery probes (
cmd.exe,wslpath) now run under a 500ms hard timeout and fall back to the Linux$HOME/~/.ompcandidates (#8402).
@oh-my-pi/hashline
Fixed
- Repaired mis-set replacement ranges using exact outside-row matches, indentation, tree-sitter structure, and a narrow pure-closer shape: opening comment fences and other syntax-essential edges are retained only when a parse-valid candidate satisfies those constraints; ambiguous placements are rejected.
@oh-my-pi/pi-natives
Fixed
- Fixed an issue where shell-internal background jobs (such as
yes >/dev/null &) could survive a one-shot shell session and consume CPU indefinitely after the command returned.
@oh-my-pi/omptype
Added
- Added
type.withJsonSchema(schema, json)to wrap a validation-only schema, ensuring JSON Schema emission yields the providedjsonverbatim even when nested inside objects, arrays, or unions. Schemas with defaults or output-changing morphs are rejected to prevent transformed outputs from being discarded.
@oh-my-pi/omp-stats
Added
- Added cost-weighted
cacheSavingsmetric alongsidecacheRate, accounting for cache-read discounts and write premiums against equivalent uncached prompt costs.
Fixed
- Ensured the embedded dashboard archive is byte-reproducible by sorting entries and zeroing tar and gzip timestamps during compilation.
@oh-my-pi/pi-tui
Fixed
- Fixed an issue where repeated pane-width adjustments or terminal resizing could corrupt native scrollback and soft-wrap behavior.
- Fixed an issue where scaled OSC 66 Markdown headings (such as "Large Headings" on Kitty) would render as invisible placeholders or get partially cleared after a redraw or terminal resize.
@oh-my-pi/pi-utils
Fixed
- Optimized performance of partial JSON parsing for long streaming tool-call arguments.
- Fixed Mermaid ASCII multi-word edge labels where routed lines would show through spaces.
What's Changed
- fix(tui): preserve scrollback across multiplexer width changes by @shawnkoh in #8072
- fix(session): forward retry fallback events to extensions by @roboomp in #8080
- fix(cli): surface actionable error when auth broker is unreachable by @roboomp in #8097
- fix(utils): mask routed lines beneath edge labels by @roboomp in #8101
- fix(discovery): support OpenCode JSONC configs by @roboomp in #8106
- fix(launch): rearm broker idle shutdown on terminal settlement by @roboomp in #8122
- fix(agent): reject cold revive that finishes after lifecycle dispose by @roboomp in #8123
- fix(dap): drain runInTerminal debuggee stdout by @roboomp in #8125
- fix(coding-agent): show scope in /ssh add hint by @kevcube in #8128
- fix(coding-agent): ship omp:// docs to npm consumers by @roboomp in #8136
- fix(coding-agent): interpret inline /skill in mode-command prompts by @roboomp in #8138
- fix(extensions): preserve unsafe schemas during plugin install by @roboomp in #8144
- fix(ai): preserve perplexity otp session cookies by @roboomp in #8157
- fix(coding-agent): lowercase the hindsight project label by @alvorithm in #8159
- fix(coding-agent): restore is*ToolResult guards on legacy pi shim by @roboomp in #8163
- docs(collab): clarify relay self-hosting availability by @roboomp in #8166
- fix(rpc): strip snapcompact archive from compact result by @roboomp in #8169
- fix(session): resolve wire-name aliases in hasBuiltInTool by @roboomp in #8185
- feat(lsp): add Astral ty as built-in Python primary LSP server by @FNDEVVE in #8186
- fix(coding-agent): gate prompt tool mentions on session tool availability by @szavadsky in #8199
- fix(agent): support array model overrides in dashboard by @roboomp in #8202
- fix(cli): handle standalone profile aliases by @roboomp in #8236
- chore: force refresh provider api key command by @djjorjinho in #8253
- fix(ai): continue after answerless hosted search by @kfxhjz in #8263
- fix(omp): prevent false reset fireworks by @oleksoleksoleks in #8266
- fix(coding-agent): skip idle mid-turn persistence waits by @ethancawse in #8283
- fix(ai): release provider permit before stream completion by @ethancawse in #8284
- Fix open browser behaviour on Windows by @x86matthew in #8288
- fix(ai): stop stripping images from multimodal qwen3.8-max on DashScope by @roboomp in #8307
- fix(coding-agent): suppress circular plan-yolo startup note by @roboomp in #8313
- fix(mcp): show config source in startup failures by @jeffscottward in #8316
- fix(catalog): bound openai-compatible model discovery with default timeout by @roboomp in #8317
- fix(tui): keep scaled OSC 66 heading reserved rows intact on repaint by @roboomp in #8320
- fix(ai): handle omitted creditUsagePercent in fresh xAI weekly periods by @bubua12 in #8325
- fix(ai): validated together login against models endpoint by @roboomp in #8333
- fix(catalog): apply DeepSeek effort contract on Ollama Cloud by @roboomp in #8335
- fix(usage): use authoritative OpenCode Go quotas by @will-bogusz in #8337
- fix(coding-agent): normalize WebP for STB-backed models by @ethancawse in #8339
- fix(natives): stop detached internal shell jobs by @roboomp in #8343
- fix(eval): allow awaiting Python workflow helpers by @Kigbnajd in #8348
- fix(mnemopi): contain lifecycle hook failures by @roboomp in #8352
- fix(bash): resolve msys drive paths in utility builtins by @roboomp in #8356
- docs: reconcile session dir layout with the 17.2.9 hashed-scheme revert by @tenequm in #8359
- test(coding-agent): fix pre-existing session-manager legacy migration test failure by @szavadsky in #8016
- fix(tui,utils): remove O(N²) hot paths when streaming long tool-call args by @AmecoCoding in #8040
- fix(coding-agent): preserve ArkType command API compatibility by @evandrodevbr in #8049
- fix(compaction): manual /shake keeps a recent tail of tool results by @zhang17-24 in #8067
- fix(agent): fit-check retry fallback before switching models by @roboomp in #8068
- fix(advisor): preserve advisor fallback role ownership by @roboomp in #8076
- fix(build): set CMAKE_POLICY_VERSION_MINIMUM for audiopus_sys in cargo env by @szavadsky in #8088
- fix(mcp): close stale initial connections by @roboomp in #8124
- fix(tui): keep large transcript rebuilds responsive by @roboomp in #8135
- fix(lsp): correct workspace edit failure handling by @roboomp in #8391
- fix(lsp): isolate document overlays across sessions by @roboomp in #8392
- fix(lsp): preserve workspace resource options by @roboomp in #8393
- fix(lsp): reject unsupported rust-analyzer snippet edits by @roboomp in #8394
- fix(lsp): roll back rename_file edits when the move fails by @roboomp in #8395
- fix(lsp): abort rename_file when willRenameFiles fails on a supporting server by @roboomp in #8396
- fix(lsp): fail diagnostics when every applicable server fails by @roboomp in #8397
- fix(lsp): synchronize applied workspace edits by @roboomp in #8399
- fix(discovery): bound WSL host-home probe with a hard timeout by @roboomp in #8403
New Contributors
- @kevcube made their first contribution in #8128
- @alvorithm made their first contribution in #8159
- @FNDEVVE made their first contribution in #8186
- @djjorjinho made their first contribution in #8253
- @kfxhjz made their first contribution in #8263
- @ethancawse made their first contribution in #8283
- @x86matthew made their first contribution in #8288
- @bubua12 made their first contribution in #8325
- @Kigbnajd made their first contribution in #8348
- @tenequm made their first contribution in #8359
- @AmecoCoding made their first contribution in #8040
- @evandrodevbr made their first contribution in #8049
Full Changelog: v17.2.15...v17.3.0