@oh-my-pi/pi-ai
Added
- Assistant turns from Anthropic-compatible hosts (direct, or via OpenRouter's
reasoning_details) carryupstreamModel, the serving model id recovered from the signed thinking block, so callers can detect a router substituting a different model than requested.
Fixed
- Fixed OpenCode Go window-limit 429s (
5-hour/Weekly/Monthly usage limit reached. Resets in …) not pinning the exhausted credential to the server-stated reset; the window phrasing is now covered by a regression test over the rotation classifier. (#12091 by @H4vC)
@oh-my-pi/pi-catalog
Breaking Changes
- Removed
getCatalogProviderEntryand theCATALOG_PROVIDERSconstant in favor ofproviderEntryandproviderEntries
Added
- Added support for DeepInfra, LiteLLM, Qwen Portal, SiliconFlow, and SiliconFlow-CN providers
- Added support for Gemini 3.8 Flash models
Changed
- Cached provider catalogs restore policy-versioned materialized models instead of rebuilding each row on launch.
- Model policy resolution reuses indexed rule matches and cached target results.
- Model-aware delegation prompts reuse policy decisions until the model's identity or capabilities change.
- Provider catalog entries (default model, env keys, discovery wiring) and the bundled fallback rows for providers that cannot be discovered at generation time (Anthropic, OpenAI Daybreak, xAI OAuth, Meta, Muse Code, Bedrock Mantle, Devin, Z.AI, Sakana, ai&, Abliteration, Yolo-Auto, GMI Cloud, Fire Pass, QwenCloud Token Plan, Cloudflare AI Gateway, GitLab Duo Workflow) now live in
src/compat/rules/providers/<id>.kdland compile intorules.json;KnownProvideris generated from them, and the generator bundles seed rows by each entry's declaredbundlepolicy instead of per-provider code.
@oh-my-pi/pi-coding-agent
Breaking Changes
Settings.getGroup()now returns shallow-frozen snapshots, reused until effective settings change.- Removed
parseSSE,MCPToolsResponse, andMCPCallResponse;callMCP()now returns the sharedJsonRpcResponsewith anunknownresult instead of an unchecked generic payload.
Added
- Added
ollamaweb search provider using Ollama's hosted web search API (POST https://ollama.com/api/web_search), authenticated viaOLLAMA_CLOUD_API_KEY(#3791). - Added
readUrlsupport for Ollama model pages (ollama.com/<model>andollama.com/library/<model>), extracting descriptions, tags, and architecture metadata. @upstreamrouting selectors accept tiered OpenRouter slugs (openrouter/google/gemini-3.8-flash@google-ai-studio/priority), andomp benchlabels each routed model with its upstream./skill:<name>in the composer becomes an atomic skill chip (icon + name, linked to its SKILL.md) once you finish typing it or accept it from autocomplete — it deletes as one unit and survives draft restores, like image chips.- The transcript now flags a gateway serving a different Claude model than requested: a
⚠ served claude-haiku-4-5-20251001 · requested claude-opus-5 · via openrouter/Amazon Bedrockdivider under the first affected turn, shown once per substitution per session.
Changed
- Compiled binaries ship precompiled bytecode:
ompboots in ~30 ms instead of ~250 ms and the interactive prompt accepts input ~300 ms sooner, at the cost of a larger binary. - Welcome recents refresh after first paint, and attachment bands reuse cached chip state until the draft changes.
- Interactive startup paints its speculative frame before loading the session runtime; model/auth dialogs and browser/computer preludes load on first use.
- Status-line redraws reuse unchanged segment output, settings groups, and tool token estimates while preserving live invalidation.
- Skill invocations render as a normal user turn: a mid-prompt skill shows as an inline chip in the user bubble; a leading skill shows as a railed callout with the chip and prompt size, with the rest of your message rendered as full multi-line Markdown instead of a single collapsed header.
Fixed
hub waiton a process now reports what it was actually blocked on when it times out (process exit, thepattern, or readiness) instead of always citing the start readiness log pattern.- Isolated settings no longer share mutable array and record defaults.
- Ask timeouts above 1,000 seconds now retain their configured duration.
- Configured extension directories no longer load fallback index files when declared entries are missing.
- Telemetry no longer sends OTLP when only a non-OTLP exporter is selected.
- Browser response-body failures now preserve their original protocol errors.
- Auto-retry waits past the signed 32-bit timer ceiling (e.g. a month-scale OpenCode Go reset with
retry.waitForUsageReset) now elapse in full instead of overflowing the timer and retrying immediately. - JavaScript eval now reports startup failure if both isolated runtimes fail, instead of executing uncancellable code on the host thread.
- CommonJS extensions now expose computed and non-enumerable named exports while preserving
require/import identity and reloads. - Exa MCP calls now select matching responses after notifications, accept valid SSE framing, and preserve cancellation.
- Esc-Esc rewind,
/copy, and/tree's user-only filter now treat user-invoked skill and collab prompts as user turns: they are selectable,←/→jumps land on them, and rewinding past one restores the text you typed (with its chips) into the editor. /skill:<name>followed by a newline now invokes the skill instead of sending the draft as plain text.openrouter/<vendor>/<model>@upstreamnow resolves when the first-party provider bundles the same id (e.g.google/gemini-*), instead of failing with "model not found".- Kept the subagent
yieldtool as a direct function call instead of mounting it throughxd://. - Git TUI staging now honors
.gitattributestext/eoland clean filters, so "Stage All" no longer leaveseol=crlffiles (e.g.*.cmd) dirty with no visible diff. - Browsers spawned via
app.pathinto an omp-owned profile no longer trigger the macOS "wants to use your confidential information in Safe Storage" keychain dialog. - Reading Hugging Face file URLs (
/raw/...,/resolve/...,/blob/...,/tree/...) now returns the file instead of the repo's model/dataset card. - Directory reads no longer append a bogus
[1 results limit reached. Use limit=2 for more]notice (readhas nolimit); capped child directories show only their inline… N moremarker, and the prompt documents paging with:N-M/:-N.
@oh-my-pi/pi-tui
Added
- Added
Editor.textRevisionfor content-dependent render caches, including undo and draft restoration. - Added collapseToAtom method to compress text spans into UI-friendly atoms
Changed
- Redrawing unchanged terminal rows now avoids rescanning ANSI, hyperlinks, and images.
- Terminal UIs reach their first frame with a smaller startup module graph.
@oh-my-pi/pi-utils
Breaking Changes
- Removed the unused
globPaths,loadGitignorePatterns, andGlobPathsOptionsexports. - Browser helpers now manage Chrome only: removed
Browser,BrowserTag,resolveBuildId(),getInstalledBrowsers(), andbrowseroptions/metadata;getDownloadUrl()now takes(platform, buildId, baseUrl?).
Added
- Added
relativePathWithinNormalizedRoot()for reusing canonical paths across containment checks. - Added
sleepLong()andMAX_TIMER_DELAY_MS: an abortable sleep that chunks delays past the signed 32-bit timer ceiling so day-scale provider waits elapse instead of overflowing the timer.
Changed
- Log-retention cleanup now runs after logger construction without keeping short-lived commands alive.
- Debugger support now loads only when SIGUSR1 requests it.
Fixed
- Fixed
extractRetryHintdropping OpenCode Go'sResets in …quota window (45min,2hr 15min,3 days): thereset inpattern now acceptsResetsphrasing,hr/dayunits, and compound2hr 15minremainders, so exhausted Go credentials block for the server-stated window instead of the 60s heuristic guess. (#12091 by @H4vC) - Async file-peek callbacks now receive stable
Uint8Arraywindows with copyingslice()semantics. - Dotenv loading now handles multiline values and escapes consistently with Bun, preventing project values from leaking into child-shell environments.
- SSE readers now support lone-CR line endings and CRLF split across chunks without merging or delaying events.
What's Changed
- feat(coding-agent): add Ollama web search provider by @niklasschaeffer in #10740
- fix(utils,ai): parse OpenCode Go Resets-in quota window for account rotation by @H4vC in #12091
New Contributors
- @niklasschaeffer made their first contribution in #10740
Full Changelog: v18.1.22...v18.2.0