chore(deps): update dependency can1357/oh-my-pi to v18.13.0 #239

Merged
renovate-bot merged 2 commits from renovate/can1357-oh-my-pi-18.x into main 2026-10-26 21:06:34 +00:00
Collaborator

This PR contains the following updates:

Package Update Change
can1357/oh-my-pi minor 18.12.6 → 18.13.0

⚠️ Warning

Some dependencies could not be looked up. Check the warning logs for more information.


Release Notes

can1357/oh-my-pi

v18.13.0

Compare Source

@​oh-my-pi/pi-agent-core

Added
  • Added SummaryOptions.remotePromptCacheKey and remoteCompactionPolicyModel() so remote compaction can carry a cache key gated against the request it actually sends (#​16988 by @​rafalopilowski1)
Changed
  • Remote compaction now sends cache and session headers for the endpoint and model the request actually uses, so a configured compaction override no longer inherits the live turn's routing (#​16988 by @​rafalopilowski1)
  • Aside providers (AgentLoopConfig.getAsideMessages, Agent.setAsideMessageProvider) now receive which boundary is polled, "work" after tool calls or "stop" at the end of a turn, so they can keep a message out of a finished turn (#​16583 by @​will-bogusz)
Fixed
  • Fixed --max-time values above about 596 hours (such as 600h) aborting the first turn with "Deadline exceeded" right away (#​17054 by @​trukhinyuri)
  • Fixed repeated compaction on small or provider-capped context windows: compaction keeps only as much recent history as fits under the configured trigger, and no longer counts stale pre-compaction usage (#​16904 by @​eggpeat)
  • Fixed native compaction token estimates counting opaque encrypted-state bytes as conversation text (#​16904 by @​eggpeat)
  • Fixed split-turn compaction leaving session.compacting context out of the turn-prefix summary (#​16707 by @​integrITsolutions)
  • Fixed compaction failing as a whole, and discarding the completed summary, when the optional short summary fails or returns no answer; the compaction now completes without a short summary, and cancellation still cancels it (#​16942 by @​Mouriya-Emma)

@​oh-my-pi/pi-ai

Breaking Changes
  • OpenAIRequestSetupModel now requires the catalog-policy fields (api, reasoning), so callers building a reduced model for resolveOpenAIRequestSetup must pass them (#​16988 by @​rafalopilowski1)
Added
  • Added PI_ANTHROPIC_API_VERSION=2026-10-21 to send Anthropic API version 2026-10-21 to the official Anthropic API; sampling parameters are omitted under that version, which rejects them (#​16706 by @​H4vC)
  • OpenCode Go requests on lanes that opt into shared prompt caching send an explicit prompt-cache key as x-opencode-session, so Task siblings, forks and their parent reuse one gateway cache; custom providers declaring providerType: "opencode-go" get the same OpenCode headers (#​16988 by @​rafalopilowski1)
Changed
  • Reduced the CPU spent preparing tool schemas on every model call, so requests with many tools start faster (#​16780 by @​yuzu-octopus)
  • Fixed tool schema normalization modifying the caller's schema in place, which added the folded const value to a tool's own enum array (#​16780 by @​yuzu-octopus)
  • Google Antigravity requests now carry the same request labels as the official 2.26.0 client (cascade_id, root_cascade_id, request_id, used_non_gemini_model), and image model lookup sends the account's project (#​17012 by @​apoc)
  • Google Antigravity requests now send each model tier's own model_enum label, output cap and thinking setting from the serving account's model list, as the official client does: Claude 5.5 and Gemini 4 Argon tiers send a thinking level, Gemini 3.8 Flash tiers the tier's thinking budget (#​17012 by @​apoc)
  • Google Antigravity requests now number conversation steps like the official client (the first request is step 1, and each model turn and tool result adds one), send Accept-Encoding: gzip without an explicit Accept, and no longer send the Claude thinking beta header to Claude 5.5 (#​17012 by @​apoc)
Fixed
  • Anthropic-compatible endpoints that require a thinking block on every turn of the current turn no longer replay a 400 when the history holds a turn an upstream answered without reasoning; the serializer pads those turns (#​16739 by @​lz37)
  • Fixed an Anthropic stream that a gateway or proxy cuts after message_start, substituting an in-band error frame, being reported as a completed-turn provider failure instead of a retryable stream truncation (#​16990 by @​Maziar123)
  • Fixed Kimi Code, Z.AI, and ClinePass usage polls logging a warning every poll for accounts without a metered plan (#​17057 by @​trukhinyuri)
  • Fixed Codex usage showing no limits for credit-billed ChatGPT Business/Enterprise seats: /wham/usage returns rate_limit: null for them, and their per-user credit cap (spend_control.individual_limit) is now reported as a Spend cap (credits) limit that also gates chat requests when no plan windows exist (#​16973 by @​DusKing1)
  • Fixed overlapping OpenAI Codex requests in the same session (e.g. concurrent auth-gateway requests) closing the WebSocket another request was still streaming on; the later request now goes over SSE (#​16812 by @​Abelo9996)
  • Fixed Codex WebSocket turns dying with unsupported_native_inflight_message when the native turn lane was still busy; the turn is now retried as an independent full-context request instead of surfacing the error (#​17065 by @​AgileInnov8tor)
  • Fixed OpenRouter native failures appearing as successful empty stops and malformed Responses being replayed before corrective recovery; metadata permission/rate-limit failures no longer trigger malformed-response recovery (#​17063 by @​martijnberger)
  • Fixed Xiaomi MiMo API-key login failing with Unsupported model mimo-v2.5 after the V2.5 retirement (#​16727 by @​LiPu-jpg)
  • Fixed Xiaomi MiMo login rejecting ttp- Token Plan keys with 401 Invalid API Key; they now validate against the regional Token Plan hosts like tp- keys (#​17045)
  • Fixed Xiaomi MiMo Token Plan login reporting 401 Invalid API Key when the key's own region rejected the probe for another reason; that region's actual error is now shown (#​17045)
  • Fixed non-streaming requests reporting a missing API key when the credential resolver actually failed, hiding auth broker, OAuth and network outages behind "No API key" (#​16655 by @​adi-IL)
  • Fixed Claude subagents with large structured output schemas failing with Schemas contains too many optional parameters (#​16887 by @​alphastorm)
  • Fixed auth-gateway requests failing when a client requests an unsupported thinking effort; the gateway now uses the nearest supported tier (#​16671 by @​codyw912)
  • Fixed Codex requests failing with array schema must define items when a tool or a task's outputSchema declares an array without items (#​16886 by @​alphastorm)
  • Fixed Anthropic tools whose parameters are a root anyOf/oneOf/allOf of objects being sent as an empty closed object that only accepts {}; variant properties now fold into the root input_schema (#​16630)
  • Fixed OAuth logins failing with invalid_grant after a token refresh took longer than 10 seconds: the refresh now finishes in the background and saves the provider's new refresh token (#​16291 by @​will-bogusz)
  • Fixed a tool call from a Claude model that declined mid-response still running after its server-side fallback model took over (#​16250 by @​will-bogusz)
  • Added 1h prompt caching on Factory Droid's Claude models (Anthropic, Vertex, Bedrock and Azure upstreams) when you set cache retention to long, and cache warming plus cache-timed idle compaction on those models (#​16296 by @​will-bogusz)
  • Fixed Factory Droid accounts whose login token lacks an organization getting 401 "User not affiliated with an organization" on every request: omp now resolves the account's organization at login and refresh (#​14061) (#​16257 by @​will-bogusz)
  • Added image generation and editing through a Factory Droid login: generate_image runs Factory's GPT Image 2.5, GPT Image 2.5 Flare and Gemini 3 Pro Image, with up to 16 reference images for GPT Image edits (#​16316 by @​will-bogusz)
  • Fixed OpenAI-compatible chat completions with Anthropic-style prompt caching (cacheControlFormat: "anthropic", e.g. OpenRouter Claude) re-sending a turn's tool calls and results uncached on every tool-loop request; the cache breakpoint now advances onto the latest tool result (#​16845)
  • Fixed native Google (google-generative-ai, google-vertex) requests failing with The operation timed out. after ~5 minutes of slow prefill even when providers.streamFirstEventTimeoutSeconds allowed longer (#​16991)
  • Fixed model.loopGuard settings being ignored for providers routed through the shared option mapping, such as openai-responses models from models.yml (#​11129, #​16963 by @​SipgateSteffenPaul)
  • Fixed Google Antigravity's Gemini 4 Argon weekly bucket sharing the generic "Gemini" label with the shared Gemini weekly bucket, leaving usage rows indistinguishable; the Argon bucket now reads "Gemini (Argon)" (#​16790)
  • Fixed Anthropic API-key requests with thinking off failing with 400 "context_management: Extra inputs are not permitted" on Claude Opus 5.5 and Fable 5.1, and on Claude Haiku 5.5 after an effort change (for example a retry fallback from a model without reasoning) (#​17047 by @​sjawhar)
  • Fixed every GitLab Duo Agent request failing with 4400 "Flow configuration failed security validation" when a context file (such as an AGENTS.md) contains an HTML comment (#​17044 by @​trukhinyuri)
  • Fixed a GitLab Duo Agent session that GitLab rejects on close (WebSocket 4000–4999) ending as an empty answer that was silently retried three times; it now ends with an error naming GitLab's reason and HTTP status (#​17044 by @​trukhinyuri)
  • Fixed Cursor GitHub and Google logins never getting an account email (#​17048 by @​trukhinyuri)
  • Fixed Cursor X Subscription usage treating the weekly Grok/Composer pool as third-party budget; third-party models are now metered by prepaid credit (#​17048 by @​trukhinyuri)
  • Fixed Google models (google-generative-ai, google-vertex, google-gemini-cli/Antigravity) running out of output on small maxTokens requests with reasoning on, ending with thinking only and no answer; the requested maxTokens now leaves room for thinking on top, as on other providers (#​16943 by @​Mouriya-Emma)

@​oh-my-pi/browser-relay

Added
  • The extension reports the omp version that installed it, and reloads itself when the relay updates its files after an omp upgrade (#​15105 by @​will-bogusz)

@​oh-my-pi/pi-catalog

Breaking Changes
  • Renamed the task-sibling-prompt-cache axis to shared-prompt-cache (catalog field sharedPromptCache); it now also covers forks and explicit prompt-cache keys (#​16988 by @​rafalopilowski1)
Added
  • Added the requiresThinkingPresence model compat (KDL requires-thinking-presence) for Anthropic-compatible endpoints that reject a thinking-mode request whose current turn has an assistant message without a thinking block (#​16739 by @​lz37)
  • Added resolveAnthropicApiVersion(): Anthropic model discovery sends API version 2026-10-21 to the official API when PI_ANTHROPIC_API_VERSION=2026-10-21 is set (#​16706 by @​H4vC)
  • OpenCode Go muse-spark-1.3-contributor, muse-spark-1.2-contributor, gpt-5.6-luna, gpt-6-luna, grok-4.6 (Responses) and deepseek-v4-pro, omen-alpha (Completions) opt into shared prompt caching; lanes that warmed under any key stay off (#​16988 by @​rafalopilowski1)
  • Added CatalogPolicyInputs so catalog-policy lookups accept a reduced model view (#​16988 by @​rafalopilowski1)
  • Added a catalog conformance test that fails the build when a bundle="always" seed row is missing from the bundled models.json, so a stale-snapshot regeneration can no longer silently drop an engine the way web/deepseek was lost in 18.12.2 (#​16610, #​17053 by @​ouyangjiahong26)
Changed
  • llama.cpp login instructions now list both default local base URLs (http://127.0.0.1:8080, then http://127.0.0.1:9931) (#​16675 by @​bartbroere)
  • Devin requests now identify as Devin CLI 3000.11.205, the current stable release, instead of 3000.11.3 (#​16906 by @​will-bogusz)
  • Google Antigravity login now uses PKCE and requests the aicode scope like the official client; existing logins keep working, and the new scope applies at the next /login (#​17012 by @​apoc)
  • Antigravity requests identify as client 2.26.0 when the release manifest is unreachable (previously 2.19.1), and model discovery sends the account's project like the official client (#​17012 by @​apoc)
  • Antigravity's User-Agent now reports the native Antigravity build for the host OS (Linux linux/amd64, Windows windows/amd64) instead of always claiming macOS darwin/arm64 (#​17012 by @​apoc)
  • Antigravity model discovery now keeps each account's per-tier model_enum, output cap and thinking level or budget, and the bundled Antigravity models carry them for offline use; cached Antigravity model lists are refreshed once so they pick them up (#​17012 by @​apoc)
Fixed
  • Fixed OpenCode Go gemini-4-argon requests failing with an unsupported protocol; discovered models now use native Gemini routing and low, medium, or high thinking (#​17031)
  • Fixed DeepSeek V4 Pro cost estimates using Flash rates after September 14 despite Pro billing remaining unchanged (#​16875).
  • Anthropic refusal fallbacks from Claude Opus 5.5, Opus 5 and Sonnet 5.5 to their documented target models (Opus 4.8 and Opus 5, Opus 4.8, and Sonnet 5) now redeem fallback credit: the retry is no longer billed as a full cache write, and it is no longer skipped when the conversation holds signed thinking (#​17034 by @​sjawhar)
  • Fixed Step 5 Preview reasoning choices on OpenCode Go and Zen to offer only low, medium, and high (#​14987, #​16669 by @​SheetHappiness)
  • Fixed GPT-6 Sol/Luna API and MiniMax-M3 long-context usage estimates above their published input thresholds (#​16711)
  • Fixed Xiaomi Token Plan login and default model selection after the V2.5 retirement by using MiMo V2.6 Flash (#​16727 by @​LiPu-jpg)
  • Fixed Xiaomi model discovery sending ttp- Token Plan keys to the pay-as-you-go host, which rejects them (#​17045)
  • Fixed GPT-5.6 Sol requests over 272K input tokens (openai and openai-codex) being priced at the retired $10/$45 long-context card instead of $8/$30 (#​16742)
  • Fixed DeepSeek's official vision requests being held to the 5-image unknown-host floor: the catalog endpoint now carries DeepSeek's documented 600-image and 40 MiB inline-image budgets, while a custom baseUrl keeps the conservative floor (vision limits; #​16737 by @​Fun10165)
  • Fixed Devin model discovery falling back to the two SWE-1.6 seed models when the catalog takes longer than 5s to respond; it now waits up to 15s (#​16668 by @​DusKing1)
  • Fixed Go Task keeping stale prompt-cache affinity after a model's wire model changed (#​16988 by @​rafalopilowski1)
  • Fixed Devin models all showing a 200K context window: each model now reports its own (1M for Claude Opus 5.5 and the -1m lanes, 262K for SWE-2), and GPT and Grok models with a long-context price tier start at that tier's threshold, with /extended-context on opening their full window (#​16905 by @​will-bogusz)
  • Added the extended-cache-ttl-beta compat axis so a route can opt out of the extended-cache-ttl-2025-04-11 beta (Factory Droid does), and prompt-cache lifetimes and long-retention support for Factory Droid's Claude models (#​16296 by @​will-bogusz)
  • Added Factory Droid's image models (GPT Image 2.5, GPT Image 2.5 Flare, Gemini 3 Pro Image) to the image role's choices, listed only while your Factory organization allows image generation and that model (#​16316 by @​will-bogusz)
  • Fixed LiteLLM model groups with mode: decisions being listed as chat models; they now route to openai-decisions as judge models (#​16939)
  • Removed retired Anthropic models (Claude 3.x, Opus 4/4.1, Sonnet 4) from the bundled catalog and discovery (#​16755)
  • Fixed Kimi Code K3 and K3 256K (k3, k3-256k) pricing to include Kimi's $3/MTok cache-write rate, matching the Moonshot API kimi-k3 card (#​16508, #​16903 by @​eggpeat)
  • Fixed Cursor Auto (cursor/default) being metered against the third-party ("Other Models") pool instead of the Cursor Models pool it bills to (#​17048 by @​trukhinyuri)

@​oh-my-pi/pi-coding-agent

Breaking Changes
  • snapshotJobs no longer accepts includeResults, and buildJobResult accepts only the "wait" and "cancel" ops; the "jobs" op has had no caller since wait and proc:// replaced the hub tool (#​16763 by @​will-bogusz)
Added
  • Added omp -p --wait-async (setting async.printWake): print mode waits for the background jobs it started and wakes the same session with each result before exiting, instead of cancelling them (#​10363, #​16690 by @​trukhinyuri)
  • File slash commands with side: true frontmatter (including Codex and OpenCode command directories) run as /btw side questions in the TUI, with or without arguments: they answer off the transcript and never steer a running turn. The panel and /btw history title them by the typed command (/sitrep); the title is kept in an entry-<id>.title sidecar so older builds can still read the history. Other modes expand them as ordinary prompts (#​16815 by @​wolfiesch)
  • Added compat.requiresThinkingPresence to models.yml overrides, so a gateway model group whose strict member validates thinking replay can pad a turn a lax member answered without reasoning (#​16739 by @​lz37)
  • Anthropic web search and Files API uploads follow PI_ANTHROPIC_API_VERSION=2026-10-21; web search omits temperature under that version (#​16706 by @​H4vC)
  • llama.cpp auto-discovery now also finds local servers on llama-server's new default port 9931 when nothing answers on 8080 (#​16675 by @​bartbroere)
  • /local (or Alt+G, remappable as app.local.open) opens a picker of the session's local:// files and edits the chosen one in place in $VISUAL/$EDITOR; /local <name> opens a file directly with name completion (#​16873 by @​Shadorain)
  • Added --no-context-files to start a session without AGENTS.md, CLAUDE.md or other context files, including those of --add-dir roots and in subagents (#​16768 by @​will-bogusz)
Changed
  • Clarified how RPC and RPC-UI clients discover and invoke mounted MCP tools through xd:// devices rather than relying on dumpTools (#​16864 by @​michaeltrefry)
  • The note read adds to a PDF whose pages have no extractable text (a scan) now points at the :page<N>.png selector, which returns the page as an image, instead of the browser prelude (#​16585 by @​will-bogusz)
  • read doc.pdf:page<N>.png renders the page in a square 874x874 tab instead of the default landscape one, so a letter page comes back at 668x865 instead of 441x568 and a landscape page at 864x669 instead of 736x567 (#​16585 by @​will-bogusz)
  • Added --warn-cost and --max-cost (session.warnCost / session.maxCost): omp warns once at the first spend and stops sending model requests at the second, subagents included; capped print runs exit 3 (#​7802; first written by @​zhang17-24) (#​16803 by @​will-bogusz)
  • /session (and RPC get_session_stats, as editRejections) lists your failed edits by why they were refused (unseen lines, stale tag, parse error, …), and each failed edit records that reason as details.errorKind in the session file (#​16608 by @​will-bogusz)
  • Added exclusions to grep: a path entry starting with ! leaves matching files and folders out of the search (src;!*.test.ts, !vendor;!gen), where before it was taken as a path and found nothing (#​16920 by @​will-bogusz)
  • wait and read proc:// now show a running subagent's run time, request count, cost, context fill and stage, so a subagent that is looping is visible without opening its transcript (#​16863 by @​KimToehler)
  • Google Antigravity web search sends the same transport headers as the official client (Accept-Encoding: gzip, no explicit Accept) (#​17012 by @​apoc)
  • A subagent's result up to 11,500 characters now reaches its parent whole, instead of as a 5,000-character preview the parent had to re-read through agent://<id> or act on without its ending (#​16599 by @​will-bogusz)
  • Fixed a subagent's final report or yield reaching its parent and agent:// as its short reply to a peer message or agent://all broadcast (the parent's included) that arrived as it finished; such messages now get a turn of their own after the result, and a peer that wrote directly still receives the reply (#​16583 by @​will-bogusz)
  • Fixed the built-in ts-set-map rule stalling tool-call streaming on a long single-line Set value (5 s at 20,000 characters) and firing when the literal array only feeds a computed argument such as new Set(["a", "b"].map(normalize)); ts-import-type no longer fires on import("x").then written with a non-breaking space or line separator before the call (#​16556 by @​will-bogusz)
  • Fixed a subagent woken after it was parked losing the tools an extension registers at its first prompt (such as HexRays ida-mcp's ida_* tools), which also made its first request after waking miss the prompt cache; extensions see the revive as a before_agent_start with the new reason: "revive" (#​16597 by @​will-bogusz)
  • read shows HEIC, HEIF and AVIF photos (such as iPhone pictures) as images instead of refusing them as binary, decoding them with ffmpeg 8.1 or newer; text-only models get their metadata, and without such an ffmpeg the error says how to convert the file (#​16612 by @​will-bogusz)
  • Fixed read of web pages with tables, code or pricing lists (API references, specs, pricing pages) returning a shorter trafilatura or Jina rendering that leaves out much of the page, and noting the page "appears to require JavaScript or is mostly navigation" (#​16596 by @​will-bogusz)
  • omp usage --json now includes each policy-routed account's priority, reserve and routing state (eligible, inside-reserve, exhausted or unknown) as a policy object, matching the policy line in the text view (#​16581 by @​will-bogusz)
  • Added prompt-cache warming for Factory Droid's Claude models: replays follow the 5m entry, or the 1h entry once a response reports writing one (#​16296 by @​will-bogusz)
  • generate_image can now run Factory Droid's image models (GPT Image 2.5, GPT Image 2.5 Flare, Gemini 3 Pro Image) when one is chosen for the image role (#​16316 by @​will-bogusz)
  • On macOS, asking the agent to open a file, folder or URL, or to show a file in Finder, now takes one computer.apps.open(path, { app?, reveal? }) call instead of a dozen steps driving Finder by hand (#​16403 by @​will-bogusz)
  • Added in-place updates of the browser relay's Chrome extension after an omp upgrade: an older extension loaded from ~/.omp/browser-relay/extension is rewritten and reloads itself once no omp session is using the relay (#​15105 by @​will-bogusz)
  • Added a note to relay browser.open results when the Chrome extension was installed by an older omp, naming omp browser-relay install and a reload (#​15105 by @​will-bogusz)
  • Fixed images attached with an @path file mention reaching a text-only model as [image omitted: …] with images.describeForTextModels enabled; they now get the vision role description like pasted images (#​16853)
  • Fixed browser.open({ ignore_https_errors: true }) still failing with certificate errors such as net::ERR_CERT_AUTHORITY_INVALID on the shared Chromium and on app.cdp_url browsers; the override now lasts until the tab is closed (#​16930)
  • ignore_https_errors through the Chrome relay now fails up front, explaining that Chrome's extension debugger API cannot ignore certificate errors and pointing to app.relay: false, instead of failing with Security.setIgnoreCertificateErrors wasn't found (#​16930)
  • Fixed a parent follow-up consumed while a kept-alive subagent resumes from queued steering or an async completion leaving agent:// on the previous result instead of delivering the fresh answer (#​16746)
  • Fixed a long streamed answer ending the collab room for every guest with "collab send backlog exceeded its limit"; the host now sends guests only the latest state of a streaming message, and guests still speak the full answer when speech is on (#​16956)
  • Fixed read proc://<agent> and write proc://<agent>/kill answering "not found" for a subagent that a message woke while its new turn runs as job <agent>-2; they now reach that job, and reading the agent's finished first job names the job it is running as (#​17020 by @​sjawhar)
  • Fixed the agent reading a fallback engine's web_search results as the preferred provider's: the tool result now notes which provider answered and why the earlier ones failed (#​16948 by @​BAKocska)
  • Fixed a turn that ended with background jobs still running looking stuck: the working row now says it is waiting for those jobs and names them instead of repeating the last tool call, and Esc ends the wait, so the jobs keep running and their results land in context for your next prompt instead of starting a new turn (#​17032 by @​sjawhar)
  • The power.sleepPrevention setting now says it keeps the machine awake only while the agent is running a turn, not for as long as a session is open (#​16762 by @​will-bogusz)
  • The advisor docs now say a quota-paused advisor resumes only when its runtime is reset or rebuilt (compaction, a session switch, /advisor, a config reload or a restart), not after a cooldown (#​16766 by @​will-bogusz)
  • Fixed the computer tool's computer.window({ app }) failing for an app with no open window without saying what to do; the error now names the computer.apps.open(…) call that launches it (on macOS it also shows a window of a running app that has none), and computer.window() with no argument asks for a window id or filter instead of listing windows that "match undefined" (#​16912 by @​will-bogusz)
  • Fixed the computer tool prompt leaving el.selectText out of the element helpers; it now says a following el.type on that element replaces the selection (#​16769 by @​will-bogusz)
Fixed
  • Honored display_name, context_window, and input_modalities when a model list nests them under metadata, so codex-lb-style gateways surface the advertised name, window, and image input instead of the raw id and defaults. (#​17010 by @​adi-IL)
  • Recovered spilled tool output in sessions without an artifacts directory: the artifact:// link the truncation footer advertises now reads the in-memory copy instead of failing with "No session - artifacts unavailable". (#​17009 by @​adi-IL)
  • Fixed the compiled omp binaries trusting certificates from the compromised eMudhra intermediate CAs (CVE-2026-91403) and carrying the Brotli decoder out-of-bounds write (CVE-2026-111497); release binaries now build on Bun 1.4.4 (#​16822, #​16865 by @​bse-ai)
  • Fixed computer runs in subagents and omp -p stopping at their first control.acquire: they now keep working through background window input and report only a step that needs foreground control (#​16909 by @​will-bogusz)
  • With bash.gitGuard on, a repository that once finished a conflicted rebase no longer counts as mid-conflict forever, which had let git checkout, switch and restore through; branch switches such as git checkout -B <branch> <commit> stay refused during a real merge or rebase too, abbreviated options such as git reset --ha are refused like the full ones, and git stash create is allowed (#​16919 by @​will-bogusz)
  • Fixed browser calls right after a click that navigates (headless, connected and relay Chrome) reaching the page being left: reads and screenshots returned the old page or failed with Execution context was destroyed or Cannot find context with specified id, and a fill could land on the old form; they now wait for the new page (#​16907 by @​will-bogusz)
  • LSP diagnostics now reflect external edits to already-open dependencies when checking an importer, including after Write/Edit (#​16836).
  • Fixed URL read line selectors using different coordinates from URL grep when the response includes transport headers (#​16877).
  • Fixed write to a SQLite row ignoring the database's declared foreign keys: orphan inserts and updates now fail, ON DELETE RESTRICT blocks the delete, and ON DELETE CASCADE removes dependent rows (#​16999)
  • Fixed pasting a server URL into the /mcp add wizard putting it in the hidden chat draft instead of the URL field (#​16975).
  • omp --from-claude keeps the last real model when Claude records a synthetic API error, and does not try to restore a synthetic-only placeholder (#​16785).
  • Fixed skill-list previews of long CJK descriptions collapsing to the few characters before an early ASCII space (e.g. 用户点名…); they now keep the full preview budget (#​17070)
  • Browser clicks on a shadow-root button no longer fail with blocked: covered by naming the button's own slotted content; real overlays are still refused (#​16958)
  • Fixed reading .xlsx files rewriting numeric-looking text cells: long IDs like 12345678901234567890 no longer round (and collide), and text such as 00123 keeps its leading zeros (#​16831)
  • Fixed rc-file aliases for core tools (e.g. alias ls='eza --icons') leaking into the bash tool; ls, cat, grep and the other core tools now run the real binaries (#​17067)
  • Fixed a collab room staying half alive after its session moved to a new file because it was open in another omp process (or replaced/contested on disk): guests now get room-closed, the registry entry is withdrawn, and collab.autoStart shares the moved session (#​16935)
  • Fixed skill-description compression ignoring the configured default model when modelRoles.smol is unset and sending background requests to the built-in smol chain (e.g. claude-haiku-5-5) instead of the model /models shows for SMOL (#​16970)
  • Fixed models.yml discovery providers with an apiKey (and no authHeader: true) showing 0 models in /models and ctrl+p right after startup despite a cached catalog; cached models now load immediately (#​16965)
  • Anthropic web search no longer sends unsupported temperature to Claude Haiku 5.5, avoiding HTTP 400 failures (#​16986)
  • Fixed pages in the managed headless browser hitting "Maximum call stack size exceeded" in canvas fillText after calling canvas.getContext("2d") repeatedly (#​16879)
  • Fixed LSP references and rename previews still listing a file that was open and then deleted (via edit, or outside OMP before a rename) until the language server restarted (#​16880)
  • Fixed omp plugin upgrade failing on Windows with EPERM: operation not permitted, symlink when the installed plugin was replaced by omp plugin link; a failed upgrade now restores the link as a junction (#​16844)
  • omp plugin upgrade a@m b@m c@m now upgrades every specified plugin instead of silently skipping targets after the first (#​16826)
  • Browser tab.fill()/tab.type() (and frame.fill()/frame.type()) that time out on long text now stop typing instead of finishing it behind the rejected call, and the timeout reports how many characters were typed instead of claiming the element was hidden or covered (#​16833)
  • Concurrent archive member writes now preserve both updates across sessions and directory symlinks; canceled writes waiting for the archive no longer publish later (#​17000).
  • Fixed a tools.approval.<tool>: prompt policy on a tool mounted as an xd:// device asking the same approval question twice for one write xd://<tool> call (#​17039)
  • ACP cancellation now waits through Python kernel interrupt escalation before closing a session; prompts sent after a closed session return ResourceNotFound so clients can offer session/load recovery (#​16889).
  • Google Antigravity, Google, and Google Vertex now keep append-only context by default, preserving cached prompts across long-running agent turns (#​16979).
  • Fixed LiteLLM mode: decisions model groups being offered as chat models instead of judge models, including for custom discovery.type: litellm providers (#​16939)
  • ACP: instructions returned by MCP servers declared in session/new now reach the model under "## MCP Server Instructions", as they do for .mcp.json servers (#​16882)
  • Fixed the Windows tab title (e.g. in Tern) sticking at omp instead of the session title after a JS eval worker or omp browser-relay ran in the same console; omp no longer retitles the console from child processes and reclaims the title when another process replaces it (#​16842)
  • Fixed Python eval reporting the backend unavailable when the first python on PATH is broken (e.g. a mise shim with no version set) even though a working python/python3 sits further down PATH; every PATH match is now probed, and the error reports bounded probe failures with home paths shortened (#​16824)
  • Fixed a turn whose stream was cut after text had already rendered — a gateway substituting an in-band error frame for the missing terminal event — ending instead of continuing from the partial answer (#​16990 by @​Maziar123)
  • Model tags in /skill: arguments now register m<N> agents and appear with the skill prompt instead of reaching the model as literal ^ selectors (#​16818)
  • Fixed a user-scope omp plugin upgrade, install --force, or uninstall run outside a project deleting the cached plugin a project-scope install in that project still links to (#​16827)
  • Fixed resuming anonymized sessions with text tool results crashing before the next model request (#​16859, #​16896 by @​tneemo)
  • Fixed the mid-run todo nudge going silent for the rest of a long turn after two nudges: a todo call now re-arms the per-turn budget instead of waiting for the next user prompt (#​16962 by @​omertahaoztop)
  • xAI web and X searches now run Grok's hosted search instead of failing with returned no sources or falling back to engines that cannot read X posts (#​16947 by @​BAKocska)
  • Fixed /delete leaving an empty zero-turn session on disk when you quit before sending a message (#​11303, #​16798 by @​NewtonChutney)
  • Idle recap no longer runs when the prior message was not generated (a user message, or an assistant turn that produced no output). A generated assistant reply still recaps after the idle delay (#​16978 by @​atacolak)
  • Fixed an extension loading twice, so every handler ran twice, when the same file was reachable both through a symlink and its target, such as a link in the agent extensions/ directory plus --extension with the real path; discovery now dedupes extension paths by real file (#​16788 by @​wolfiesch)
  • Fixed the write refusal in read-only subagents saying filesystem writes are unavailable; it now gives the on-disk path of local:// files, so the agent can tell its caller where its report is (#​17023 by @​sjawhar)
  • Fixed wait saying a subagent "finished its turn without replying" (and to ask again) after that subagent's result had already arrived as a background-job result, for a follow-up that woke it or that it got while running (#​16929 by @​sjawhar)
  • Fixed a Markdown link to a local path that cannot be encoded pointing at a broken target instead of staying plain text (#​16806 by @​laviRZ)
  • Fixed the Agent Hub reordering its rows on every heartbeat while it loaded the session's saved subagents, so no row could be selected until the load ended: a row's place is now fixed when the hub first shows it, agents found on disk take their place in the status/recency ranking, and a scan reads a transcript again only after it changed, so reopening the hub on a session with many saved agents no longer rereads them all (#​10524, #​16952 by @​lemonleks)
  • omp usage now shows the Codex credit spend cap for credit-billed ChatGPT Business/Enterprise seats (previously no limits reported), and rounds fractional credit amounts to two decimals (#​16973 by @​DusKing1)
  • Fixed TTSR rule matching slowing down quadratically on long tool calls such as bash, eval or task arguments: their streamed JSON escapes newlines, so every delta rescanned the whole argument (a 64 KB call with 10 rules took 120 ms of matching, now 4.5 ms). A long unterminated line is now rescanned as it grows by a quarter, and the final check still scans all of it (#​14248, #​16974 by @​lavinhoque33)
  • Fixed the eval tool description so JS sessions see which helpers need await (#​16808 by @​bigHippoZz)
  • Fixed the eval agent and judge docs so JS sessions see which handle, pool and batch calls need await, and Python sessions with JS enabled see agent()'s schema_mode keyword instead of JS's schemaMode (#​16810 by @​bigHippoZz)
  • Fixed a classifier refusal on an Anthropic model ending the turn with the rest of an Anthropic retry.fallbackChains entry untried once the conversation carried signed thinking; the refusal now moves to the next model in the chain (#​17024 by @​sjawhar)
  • Fixed the bash tool blocking commands such as echo hi; make 2>build.err, and sending cat > file <<'EOF' to read (#​17022 by @​sjawhar)
  • Empty-stop retry exhaustion now reports provider usage without claiming that output was filtered or dropped, and same-model retries of content-less MALFORMED_RESPONSE/UNEXPECTED_TOOL_CALL errors inject a corrective tool-call reminder instead of replaying the identical cached prefix (#​17063 by @​martijnberger)
  • Fixed automatic compaction committing summaries that increase context and repeatedly retrying the same retained-history cut point; token counts now include trailing tool results and post-compaction rescue (#​16904 by @​eggpeat)
  • Fixed /tan dropping the images attached to its draft: the background agent now gets them with its request and keeps them, as admitted, when compaction restores the request; they leave the composer once /tan starts, so the next message cannot send them again, and come back with the draft when it cannot start (#​16805 by @​lemonleks)
  • Fixed /btw dropping the images attached to its question: the side request now sends them, and like /tan they leave the composer once it starts and come back with the draft when it cannot; BTW history keeps each question's images (images on the RPC BTW records), so every follow-up sends them again, and a follow-up in the BTW history also takes pasted images (#​13890, #​16805 by @​lemonleks)
  • /omfg, /handoff and /cleanse no longer run without the images attached to their draft: they keep the draft and say they take text only (#​16805 by @​lemonleks)
  • Fixed an image pasted while an extension input hook held a submission being dropped from the next message: once the submitted images leave the composer, the images that stay are renumbered from #1 (#​16805 by @​lemonleks)
  • Fixed a collab guest losing the draft of a host-only command that takes its draft out of the composer on Enter (/plan, /goal, /tan, /btw and others): the draft now comes back with its images (#​16805 by @​lemonleks)
  • Fixed a hashline PUT whose body repeats the line just above or below its range (or both), and is shorter than the range, silently deleting the range's other lines or writing a neighbouring line twice in Python, TypeScript and other parsed files; it is now refused, and the "too short" refusal names the lines the body leaves out (#​17028 by @​sjawhar)
  • Fixed omp gc --compress exiting with "the event loop drained while it was still pending" on Bun 1.3.14 when a session artifact is pretty-printed JSON larger than 1 MiB, and session header probes (gc, session move and transfer) reading whole artifacts on Windows (#​15745, #​16754 by @​wolfiesch)
  • /resume into another session now cancels the previous session's background jobs, as /new does, instead of delivering their results into the resumed session and starting a turn there (#​16760 by @​will-bogusz)
  • Fixed the models config migration writing models.yml readable by other users on the machine, and dropping every custom provider when the write was interrupted; the migrated file is now published atomically with owner-only permissions (#​16654 by @​adi-IL)
  • Fixed /memory clear in one project deleting the memory state of every other project that shares the same agent directory (#​16657 by @​adi-IL)
  • Fixed the classic /usage report averaging distinct quota buckets that share a label and window (Google Antigravity's Gemini and Gemini 4 Argon weeklies) into one "50% free" row that hid the drained bucket; groups now split by quota identity while shared buckets still merge (#​16790)
  • Fixed read of a web page failing with HTTP 403 or 429 when the site serves the page to another user agent, as SEC EDGAR filings, Ars Technica, AP News and Yahoo Finance do: a refused request now retries with the next user agent whatever its error page says (#​16593 by @​will-bogusz)
  • Fixed grep trimming a file to its first 20 matches in a multi-file search (200 in a single file) without telling the agent; the result now names the trimmed files and how to see the rest, and no longer reports the file total as N+ when every file was searched (#​16594 by @​will-bogusz)
  • Fixed isolated task capture failing with patch does not apply: <path> does not exist when the worker's commits leave untracked baseline files of the parent checkout untouched: the baseline work-in-progress is replayed before the worker's delta and rewound afterwards (#​16648 by @​Komzpa)
  • Fixed a project-wide LSP rename corrupting files that were edited outside OMP while open: the rename now syncs every open document (not just the requested file) before the workspace edit is computed, so the server's ranges match the current disk text instead of writing the identifier into blank lines (#​15772, #​16649 by @​holny)
  • Fixed local memory stage-1 extraction sending prior assistant reasoning to Claude, causing reasoning_extraction refusals and lost memories (#​16679).
  • Fixed each rewind report being sent to the model twice (as a Branch-return summary and as the Checkpoint called and rewound report); it now appears once per checkpoint/rewind cycle, while the transcript still shows the branch summary (#​16702)
  • Browser relay opens fail immediately with Chrome's reason (e.g. Host access is restricted by policy. on Chromium 155+ with an extension debugger policy) instead of timing out, and close the tab Chrome refused (#​16748)
  • Collab guests can answer a pending question after the host reconnects to the relay without duplicated answer controls (#​16682 by @​DAnaeto)
  • Fixed dd … of=/dev/null (and other write-only sinks such as /dev/stdout and /dev/fd/1) triggering the unoverridable critical-command approval prompt; dd to real devices like /dev/sda still prompts (#​16714)
  • Fixed Word and EPUB reads, site-specific web scrapers (Stack Overflow, MDN, GitLab, …) and the browser's readable page extraction writing identifiers as snake\_case or DOCX\_NEEDLE\_1 (filtered plain text dropped the underscores): underscores inside words now stay literal (#​16607 by @​will-bogusz)
  • Tagging a model with ^ in a message sent while the agent is working no longer splits it in two: the model learns the new m<N> agent and reads your message in the same turn, instead of replying to the announcement alone first (#​16614 by @​will-bogusz)
  • Fixed subagent model resolution skipping an authenticated later entry of the configured model list: when the first resolved model has no credentials, the remaining entries are tried in order before the parent session's model. (#​16640 by @​Komzpa)
  • Fixed background job widgets rejecting percentage progress with meter.total: 100 appears nowhere in the job or its output; a meter may now use a total of 100 when every value feeding it was printed as a percentage (#​16885 by @​alphastorm)
  • Fixed openai-models-list discovery leaving models that advertise their own reasoning levels (supported_reasoning_levels and default_reasoning_level, top-level or under metadata as codex-lb sends them) non-reasoning when the id is absent from the bundled catalog, so requests never carried reasoning_effort (#​16650 by @​Komzpa)
  • Fixed marketplace auto-update leaving cloned checkouts behind after startup errors; abandoned clones are removed on a later refresh (#​16693)
  • Fixed an extension's idle pi.sendMessage({ display: true }, { deliverAs: "nextTurn", triggerTurn: false }) clearing and replaying the whole transcript, which froze input for longer as the session grew; the message is now appended to the existing transcript (#​16744 by @​OriginalByteMe)
  • Fixed app.target rejecting CDP page ids, including fresh about:blank pages, and added ids to unmatched-target listings (#​16619)
  • Fixed reading proc://<id>/kill or proc://<id>/mode answering only "writable only", so agents often moved on with the job still running; the error now names the write call that cancels the job or sets the mode, with the real id (#​16580 by @​will-bogusz)
  • Fixed history://<id> failing with "has no transcript: session is gone" for a worker that is still running but has not created its session or transcript file yet; it now answers "No transcript has been written yet". (#​16645 by @​Komzpa)
  • Fixed the eval tool telling sessions with only the Python runtime to call tool.<name>(args) without await, which returns a coroutine and never runs the tool (#​16578 by @​will-bogusz)
  • Task subagents on models that opt into shared prompt caching now share one cache key with their same-type siblings, even when the parent runs another model or the child switches models later; /compact and auto-compaction use that key against the model the compaction request actually sends, and keep the session's own id when no key applies (#​16988 by @​rafalopilowski1)
  • Fixed omp auth-broker serve token refreshes that hang continuing past the refresh deadline and keeping other refreshes of that credential waiting: the deadline now cancels the token request (#​16291 by @​will-bogusz)
  • Fixed read doc.pdf:page<N>.png returning the PDF viewer's empty grey frame instead of the page on about half of reads (#​16585 by @​will-bogusz)
  • Fixed language servers keeping every file omp ever opened loaded for the whole session; files unused for 5 minutes are now closed when omp opens another, so the server can free that memory (#​15418 by @​will-bogusz)
  • Fixed write turning a CRLF file into LF and dropping its UTF-8 BOM when it replaces the file; it now keeps both, as edit does (#​16575 by @​will-bogusz)

@​oh-my-pi/pi-mnemopi

Fixed
  • Fixed polyphonic recall's graph voice finding no memories for non-English names (e.g. Hà Nội) or names of three or more words, and Vietnamese words like tôi being stored as the participant i (#​16723)

@​oh-my-pi/pi-natives

Added
  • A failed EditStore.apply outcome carries errorKind, a stable class of the refusal (unseen_lines, stale_tag, parse, …), and editErrorKinds() lists every class (#​16608 by @​will-bogusz)
  • Added exclude to grep() options: glob patterns of files and folders to leave out of a directory search; a matched folder is not walked (#​16920 by @​will-bogusz)
  • On macOS, openApplication also opens a file, folder or URL in its default application or ApplicationOpenOptions.app, and reveal shows a file or folder selected in Finder; other platforms return Unsupported for a URL, app or reveal (#​16403 by @​will-bogusz)
  • Fixed a rerouted parallel Mermaid flowchart edge running over other edges, ports and labels at the same two nodes; the route no longer depends on declaration order, and it can pass outside the first row or column of nodes to reach a free port (#​16773, #​16774 by @​berney)
  • Fixed the built-in ps reporting an unsupported long option such as --forest as unsupported option '--'; it now names the option, and every unsupported-option error says that a system ps, if installed, may support more options when run by its full path (#​17018 by @​sjawhar)
  • Fixed kill %N on a backgrounded compound command (such as (while :; do :; done) &) in a persistent shell session: the job was reported done but the in-process loop kept spinning until the process exited; it now stops at the next interpreter check (#​16937 by @​holny)
  • Fixed sort -t= (and clusters such as -nrt=) failing with "separator must be exactly one character long"; an attached = now selects = as the field separator, as in GNU sort, and -t=X such as -t== is rejected as two characters (#​17017 by @​sjawhar)
  • Fixed macOS press() on a control with no press action, such as a button on a Chrome page, failing without saying what to do; the error now tells you to click() it instead (#​16916 by @​will-bogusz)
Changed
Fixed
  • Fixed macOS ax() and find() leaving a text field with no label of its own, such as Reminders' Add Date and Add Location fields, unnamed; such a field is now named by its placeholder (#​16915 by @​will-bogusz)
  • Fixed minimized ruff check --output-format full output counting code-frame lines with function calls, such as 14 | assert skill.read() == …, as diagnostics and files, which inflated the N diagnostics in M files summary (#​16837)
  • Fixed omp crashing with a stack overflow when an edit's path did not resolve to an existing file and the workspace search for it reached a deeply nested directory tree; directory walks no longer use a stack frame per nesting level (#​16857)
  • Fixed the built-in ps crashing the shell on a non-ASCII character in an option cluster such as ps -é; it now reports unsupported option '-é' like any other unknown option (#​17019 by @​sjawhar)
  • Fixed computer use on macOS being unable to finish renaming a file in Finder: keys, el.type and el.press sent to the rename field were refused, and so were clicks in its window while Finder was your frontmost app (#​16910 by @​will-bogusz)
  • Fixed a UTF-8 char-boundary panic when parsing stateDiagram-v2 lines where > follows a multibyte character (#​16749 by @​berney)
  • Fixed the bash tool's rg and fd on macOS and Linux finding nothing under a path that is a symlink to a directory, such as /tmp or /etc on macOS or a symlinked skill folder; like ripgrep and fd, they now search the folder the link points to (#​16598 by @​will-bogusz)
  • Fixed minimized git diff, git show and diff -u output dropping a hunk's changes and listing a made-up file when a changed line starts with -- or ++ (SQL comments, Markdown --- rules) (#​16588 by @​will-bogusz)
  • Fixed the bash tool's minimizer summarizing word diffs (git diff --word-diff, --color-words, --word-diff-regex), which carry no per-line +/- markers; word-diff patches are now passed through unsummarized (#​16588 by @​will-bogusz)
  • Fixed Mermaid flowcharts drawing two edges between the same pair of nodes as one line, with their labels written over each other; each edge now gets its own route, line style, arrowhead and label (#​16731)
  • Fixed renderMermaidAscii starting an edge one cell away from its node's side when a labeled sibling edge leaves the same node from another side (#​16730)
  • Fixed Mermaid flowchart parsing swallowing leading dashes of spaceless arrows (A-->B, B-.->C, C:::cls-->D) into the preceding node ID or class name (#​16750 by @​berney)
  • Fixed macOS openApplication("Contacts") and openApplication("Messages") failing as ambiguous because a helper of the app (an agent app or a running app extension) has the same name; a name shared only with such helpers now opens the app (#​16911 by @​will-bogusz)
  • Fixed a macOS background right or middle double click pressing again after you clicked or typed in its app between its presses; it now stops there with UserIntervened, as a left click does (#​16770 by @​will-bogusz)
  • Fixed macOS background axType, axKeyChord and axClick sending input into an app you switched to while it was busy answering the element's window or bounds lookup; they now read your front app first and refuse with UserIntervened, as window input does. The refusal for an element that does not take focus now says no keys were sent, since the focus request reached the app (#​16769 by @​will-bogusz)
  • Fixed the shell output minimizer cutting short git diff, git show, diff, jq and ssh output that fits in 16 KB: it now arrives whole, and the patch summary, the 40-line jq cap and the remote head/tail cut apply only to larger output (#​16589 by @​will-bogusz)

@​oh-my-pi/pi-tui

Breaking Changes
  • CoordinationOp no longer includes "jobs", which no tool has produced since wait and proc:// replaced the hub tool (#​16763 by @​will-bogusz)
  • Fixed a table's last rows (such as its bottom border) going blank in scrollback when its SIXEL chart was drawn while the reply kept streaming, with the chart painted over them (#​16870)
  • Fixed Tern MCP tool cards showing only a clipped one-line summary of the arguments; the call and result cards now include a folded Args section with the full arguments (#​16765)
  • Fixed pasting an API key or redirect URL into the setup wizard's provider sign-in prompt silently doing nothing (#​16898 by @​camiloeferrera)
  • Fixed the usage dashboard averaging distinct quota buckets that share a label and window (Google Antigravity's Gemini and Gemini 4 Argon weeklies) into one row, which masked a drained bucket as "50% left"; buckets now group by quota identity, and shared Claude/GPT copies still merge (#​16790)
Added
  • Added modelEnds to GroupedFileSection: per file, the model-line index just past its last line, so a caller cutting the output can tell which files it shows whole (#​16594 by @​will-bogusz)
  • Added an optional title to BtwHistoryRecord and a title option to BtwPanelComponent: the /btw panel, history list and thread show it as the topic heading in place of the question, so a side command reads as /sitrep instead of its expanded template (#​16815 by @​wolfiesch)
  • Vim mode now supports . to repeat the last change, including the text typed in Insert or Replace mode, with Vim's count rules; u undoes a whole Insert session or . in one step (#​16872 by @​Shadorain)
  • Added the app.local.open keybinding (default Alt+G) and its keyboard shortcuts row (#​16873 by @​Shadorain)
  • Added errorKind to EditToolDetails, set on a failed edit (#​16608 by @​will-bogusz)
Changed
  • Command and eval output panes no longer re-style and re-join their whole output on every frame, so a long command's output stops costing frame time while it sits in the transcript (#​16779 by @​yuzu-octopus)
Fixed
  • Fixed typo underlines changing when the cursor or selection splits a word (#​16821)
  • Fixed completed vibe_wait and vibe_list worker cards repeatedly entering scrollback as elapsed time advanced after partial retirement; completed walls now retain a static snapshot while in-flight waits continue updating.
  • Fixed resuming a session with a recorded tool-call path that cannot be turned into a link, which crashed the TUI while it rebuilt the context (#​16806 by @​laviRZ)
  • Fixed the Agent Hub reordering its rows on every heartbeat while the session's saved subagents loaded, so no row could be selected until the load ended: a row's place is now fixed when the hub first shows it, an agent the load finds takes its place in the status/recency ranking, and every other new generation goes on top (#​10524, #​16952 by @​lemonleks)
  • Fixed the BTW history follow-up composer refusing pasted images; it now attaches them as [Image #N] markers and sends the ones whose marker stays in the draft (#​16805 by @​lemonleks)
  • Fixed long URLs in fenced code blocks opening only their first visual line on ctrl/cmd-click; each wrapped fragment now carries the full OSC 8 hyperlink when the terminal supports it (#​16740 by @​OriginalByteMe)
  • Fixed the newest inline charts and images at the bottom of the screen showing as text placeholders while older ones stayed rendered once a session (or a resumed one) holds more than tui.maxInlineImages images (#​16660)
  • Fixed Markdown tables in the terminal ignoring their column alignment, so right-aligned and centered columns rendered flush left (#​16658 by @​adi-IL)
  • Grep, Glob, Find, and AST Grep result headers wrap a long pattern instead of cutting it off, so the match/file counts and truncated warning stay visible (#​16635)

@​oh-my-pi/pi-utils

Added
  • Added parseHeifImageMimeType(), which identifies HEIC, HEIF and AVIF images from a file header (#​16612 by @​will-bogusz)
  • Added $whichAll(), which returns every PATH match for a command in PATH order (#​16824)
Changed
  • Faster lenient JSONL session parsing when recovering past malformed lines (#​16995 by @​GTanger)
Fixed
  • setProcessName() no longer assigns process.title on Windows, where it overwrites the shared console title (#​16842)
  • Fixed inline code spans rendering flush against the surrounding text when a backslash preceded the closing backtick (#​16972 by @​akainth015)

What's Changed

New Contributors

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.12.6...v18.13.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Update | Change | |---|---|---| | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) | minor | `18.12.6` → `18.13.0` | --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the warning logs for more information. --- ### Release Notes <details> <summary>can1357/oh-my-pi</summary> ### [`v18.13.0`](https://github.com/can1357/oh-my-pi/releases/tag/v18.13.0) [Compare Source](https://github.com/can1357/oh-my-pi/compare/v18.12.6...v18.13.0) #### [@&#8203;oh-my-pi/pi-agent-core](https://github.com/oh-my-pi/pi-agent-core) ##### Added - Added `SummaryOptions.remotePromptCacheKey` and `remoteCompactionPolicyModel()` so remote compaction can carry a cache key gated against the request it actually sends ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) ##### Changed - Remote compaction now sends cache and session headers for the endpoint and model the request actually uses, so a configured compaction override no longer inherits the live turn's routing ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) - Aside providers (`AgentLoopConfig.getAsideMessages`, `Agent.setAsideMessageProvider`) now receive which boundary is polled, `"work"` after tool calls or `"stop"` at the end of a turn, so they can keep a message out of a finished turn ([#&#8203;16583](https://github.com/can1357/oh-my-pi/pull/16583) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Fixed - Fixed `--max-time` values above about 596 hours (such as `600h`) aborting the first turn with "Deadline exceeded" right away ([#&#8203;17054](https://github.com/can1357/oh-my-pi/pull/17054) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed repeated compaction on small or provider-capped context windows: compaction keeps only as much recent history as fits under the configured trigger, and no longer counts stale pre-compaction usage ([#&#8203;16904](https://github.com/can1357/oh-my-pi/pull/16904) by [@&#8203;eggpeat](https://github.com/eggpeat)) - Fixed native compaction token estimates counting opaque encrypted-state bytes as conversation text ([#&#8203;16904](https://github.com/can1357/oh-my-pi/pull/16904) by [@&#8203;eggpeat](https://github.com/eggpeat)) - Fixed split-turn compaction leaving `session.compacting` context out of the turn-prefix summary ([#&#8203;16707](https://github.com/can1357/oh-my-pi/pull/16707) by [@&#8203;integrITsolutions](https://github.com/integrITsolutions)) - Fixed compaction failing as a whole, and discarding the completed summary, when the optional short summary fails or returns no answer; the compaction now completes without a short summary, and cancellation still cancels it ([#&#8203;16942](https://github.com/can1357/oh-my-pi/pull/16942) by [@&#8203;Mouriya-Emma](https://github.com/Mouriya-Emma)) #### [@&#8203;oh-my-pi/pi-ai](https://github.com/oh-my-pi/pi-ai) ##### Breaking Changes - `OpenAIRequestSetupModel` now requires the catalog-policy fields (`api`, `reasoning`), so callers building a reduced model for `resolveOpenAIRequestSetup` must pass them ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) ##### Added - Added `PI_ANTHROPIC_API_VERSION=2026-10-21` to send Anthropic API version 2026-10-21 to the official Anthropic API; sampling parameters are omitted under that version, which rejects them ([#&#8203;16706](https://github.com/can1357/oh-my-pi/pull/16706) by [@&#8203;H4vC](https://github.com/H4vC)) - OpenCode Go requests on lanes that opt into shared prompt caching send an explicit prompt-cache key as `x-opencode-session`, so Task siblings, forks and their parent reuse one gateway cache; custom providers declaring `providerType: "opencode-go"` get the same OpenCode headers ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) ##### Changed - Reduced the CPU spent preparing tool schemas on every model call, so requests with many tools start faster ([#&#8203;16780](https://github.com/can1357/oh-my-pi/pull/16780) by [@&#8203;yuzu-octopus](https://github.com/yuzu-octopus)) - Fixed tool schema normalization modifying the caller's schema in place, which added the folded `const` value to a tool's own `enum` array ([#&#8203;16780](https://github.com/can1357/oh-my-pi/pull/16780) by [@&#8203;yuzu-octopus](https://github.com/yuzu-octopus)) - Google Antigravity requests now carry the same request labels as the official 2.26.0 client (`cascade_id`, `root_cascade_id`, `request_id`, `used_non_gemini_model`), and image model lookup sends the account's project ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - Google Antigravity requests now send each model tier's own `model_enum` label, output cap and thinking setting from the serving account's model list, as the official client does: Claude 5.5 and Gemini 4 Argon tiers send a thinking level, Gemini 3.8 Flash tiers the tier's thinking budget ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - Google Antigravity requests now number conversation steps like the official client (the first request is step 1, and each model turn and tool result adds one), send `Accept-Encoding: gzip` without an explicit `Accept`, and no longer send the Claude thinking beta header to Claude 5.5 ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) ##### Fixed - Anthropic-compatible endpoints that require a `thinking` block on every turn of the current turn no longer replay a 400 when the history holds a turn an upstream answered without reasoning; the serializer pads those turns ([#&#8203;16739](https://github.com/can1357/oh-my-pi/pull/16739) by [@&#8203;lz37](https://github.com/lz37)) - Fixed an Anthropic stream that a gateway or proxy cuts after `message_start`, substituting an in-band `error` frame, being reported as a completed-turn provider failure instead of a retryable stream truncation ([#&#8203;16990](https://github.com/can1357/oh-my-pi/pull/16990) by [@&#8203;Maziar123](https://github.com/Maziar123)) - Fixed Kimi Code, Z.AI, and ClinePass usage polls logging a warning every poll for accounts without a metered plan ([#&#8203;17057](https://github.com/can1357/oh-my-pi/pull/17057) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed Codex usage showing no limits for credit-billed ChatGPT Business/Enterprise seats: `/wham/usage` returns `rate_limit: null` for them, and their per-user credit cap (`spend_control.individual_limit`) is now reported as a `Spend cap (credits)` limit that also gates chat requests when no plan windows exist ([#&#8203;16973](https://github.com/can1357/oh-my-pi/pull/16973) by [@&#8203;DusKing1](https://github.com/DusKing1)) - Fixed overlapping OpenAI Codex requests in the same session (e.g. concurrent auth-gateway requests) closing the WebSocket another request was still streaming on; the later request now goes over SSE ([#&#8203;16812](https://github.com/can1357/oh-my-pi/pull/16812) by [@&#8203;Abelo9996](https://github.com/Abelo9996)) - Fixed Codex WebSocket turns dying with `unsupported_native_inflight_message` when the native turn lane was still busy; the turn is now retried as an independent full-context request instead of surfacing the error ([#&#8203;17065](https://github.com/can1357/oh-my-pi/pull/17065) by [@&#8203;AgileInnov8tor](https://github.com/AgileInnov8tor)) - Fixed OpenRouter native failures appearing as successful empty stops and malformed Responses being replayed before corrective recovery; metadata permission/rate-limit failures no longer trigger malformed-response recovery ([#&#8203;17063](https://github.com/can1357/oh-my-pi/pull/17063) by [@&#8203;martijnberger](https://github.com/martijnberger)) - Fixed Xiaomi MiMo API-key login failing with `Unsupported model mimo-v2.5` after the V2.5 retirement ([#&#8203;16727](https://github.com/can1357/oh-my-pi/pull/16727) by [@&#8203;LiPu-jpg](https://github.com/LiPu-jpg)) - Fixed Xiaomi MiMo login rejecting `ttp-` Token Plan keys with `401 Invalid API Key`; they now validate against the regional Token Plan hosts like `tp-` keys ([#&#8203;17045](https://github.com/can1357/oh-my-pi/issues/17045)) - Fixed Xiaomi MiMo Token Plan login reporting `401 Invalid API Key` when the key's own region rejected the probe for another reason; that region's actual error is now shown ([#&#8203;17045](https://github.com/can1357/oh-my-pi/issues/17045)) - Fixed non-streaming requests reporting a missing API key when the credential resolver actually failed, hiding auth broker, OAuth and network outages behind "No API key" ([#&#8203;16655](https://github.com/can1357/oh-my-pi/pull/16655) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Fixed Claude subagents with large structured output schemas failing with `Schemas contains too many optional parameters` ([#&#8203;16887](https://github.com/can1357/oh-my-pi/pull/16887) by [@&#8203;alphastorm](https://github.com/alphastorm)) - Fixed auth-gateway requests failing when a client requests an unsupported thinking effort; the gateway now uses the nearest supported tier ([#&#8203;16671](https://github.com/can1357/oh-my-pi/pull/16671) by [@&#8203;codyw912](https://github.com/codyw912)) - Fixed Codex requests failing with `array schema must define items` when a tool or a task's `outputSchema` declares an array without `items` ([#&#8203;16886](https://github.com/can1357/oh-my-pi/pull/16886) by [@&#8203;alphastorm](https://github.com/alphastorm)) - Fixed Anthropic tools whose parameters are a root `anyOf`/`oneOf`/`allOf` of objects being sent as an empty closed object that only accepts `{}`; variant properties now fold into the root `input_schema` ([#&#8203;16630](https://github.com/can1357/oh-my-pi/issues/16630)) - Fixed OAuth logins failing with `invalid_grant` after a token refresh took longer than 10 seconds: the refresh now finishes in the background and saves the provider's new refresh token ([#&#8203;16291](https://github.com/can1357/oh-my-pi/pull/16291) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a tool call from a Claude model that declined mid-response still running after its server-side fallback model took over ([#&#8203;16250](https://github.com/can1357/oh-my-pi/pull/16250) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added 1h prompt caching on Factory Droid's Claude models (Anthropic, Vertex, Bedrock and Azure upstreams) when you set cache retention to long, and cache warming plus cache-timed idle compaction on those models ([#&#8203;16296](https://github.com/can1357/oh-my-pi/pull/16296) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed Factory Droid accounts whose login token lacks an organization getting 401 "User not affiliated with an organization" on every request: omp now resolves the account's organization at login and refresh ([#&#8203;14061](https://github.com/can1357/oh-my-pi/issues/14061)) ([#&#8203;16257](https://github.com/can1357/oh-my-pi/pull/16257) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added image generation and editing through a Factory Droid login: `generate_image` runs Factory's GPT Image 2.5, GPT Image 2.5 Flare and Gemini 3 Pro Image, with up to 16 reference images for GPT Image edits ([#&#8203;16316](https://github.com/can1357/oh-my-pi/pull/16316) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed OpenAI-compatible chat completions with Anthropic-style prompt caching (`cacheControlFormat: "anthropic"`, e.g. OpenRouter Claude) re-sending a turn's tool calls and results uncached on every tool-loop request; the cache breakpoint now advances onto the latest tool result ([#&#8203;16845](https://github.com/can1357/oh-my-pi/issues/16845)) - Fixed native Google (`google-generative-ai`, `google-vertex`) requests failing with `The operation timed out.` after \~5 minutes of slow prefill even when `providers.streamFirstEventTimeoutSeconds` allowed longer ([#&#8203;16991](https://github.com/can1357/oh-my-pi/issues/16991)) - Fixed `model.loopGuard` settings being ignored for providers routed through the shared option mapping, such as `openai-responses` models from `models.yml` ([#&#8203;11129](https://github.com/can1357/oh-my-pi/issues/11129), [#&#8203;16963](https://github.com/can1357/oh-my-pi/pull/16963) by [@&#8203;SipgateSteffenPaul](https://github.com/SipgateSteffenPaul)) - Fixed Google Antigravity's Gemini 4 Argon weekly bucket sharing the generic "Gemini" label with the shared Gemini weekly bucket, leaving usage rows indistinguishable; the Argon bucket now reads "Gemini (Argon)" ([#&#8203;16790](https://github.com/can1357/oh-my-pi/issues/16790)) - Fixed Anthropic API-key requests with thinking off failing with 400 "context_management: Extra inputs are not permitted" on Claude Opus 5.5 and Fable 5.1, and on Claude Haiku 5.5 after an effort change (for example a retry fallback from a model without reasoning) ([#&#8203;17047](https://github.com/can1357/oh-my-pi/pull/17047) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed every GitLab Duo Agent request failing with 4400 "Flow configuration failed security validation" when a context file (such as an `AGENTS.md`) contains an HTML comment ([#&#8203;17044](https://github.com/can1357/oh-my-pi/pull/17044) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed a GitLab Duo Agent session that GitLab rejects on close (WebSocket 4000–4999) ending as an empty answer that was silently retried three times; it now ends with an error naming GitLab's reason and HTTP status ([#&#8203;17044](https://github.com/can1357/oh-my-pi/pull/17044) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed Cursor GitHub and Google logins never getting an account email ([#&#8203;17048](https://github.com/can1357/oh-my-pi/pull/17048) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed Cursor X Subscription usage treating the weekly Grok/Composer pool as third-party budget; third-party models are now metered by prepaid credit ([#&#8203;17048](https://github.com/can1357/oh-my-pi/pull/17048) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - Fixed Google models (`google-generative-ai`, `google-vertex`, `google-gemini-cli`/Antigravity) running out of output on small `maxTokens` requests with reasoning on, ending with thinking only and no answer; the requested `maxTokens` now leaves room for thinking on top, as on other providers ([#&#8203;16943](https://github.com/can1357/oh-my-pi/pull/16943) by [@&#8203;Mouriya-Emma](https://github.com/Mouriya-Emma)) #### [@&#8203;oh-my-pi/browser-relay](https://github.com/oh-my-pi/browser-relay) ##### Added - The extension reports the omp version that installed it, and reloads itself when the relay updates its files after an omp upgrade ([#&#8203;15105](https://github.com/can1357/oh-my-pi/pull/15105) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) #### [@&#8203;oh-my-pi/pi-catalog](https://github.com/oh-my-pi/pi-catalog) ##### Breaking Changes - Renamed the `task-sibling-prompt-cache` axis to `shared-prompt-cache` (catalog field `sharedPromptCache`); it now also covers forks and explicit prompt-cache keys ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) ##### Added - Added the `requiresThinkingPresence` model compat (KDL `requires-thinking-presence`) for Anthropic-compatible endpoints that reject a thinking-mode request whose current turn has an assistant message without a `thinking` block ([#&#8203;16739](https://github.com/can1357/oh-my-pi/pull/16739) by [@&#8203;lz37](https://github.com/lz37)) - Added `resolveAnthropicApiVersion()`: Anthropic model discovery sends API version 2026-10-21 to the official API when `PI_ANTHROPIC_API_VERSION=2026-10-21` is set ([#&#8203;16706](https://github.com/can1357/oh-my-pi/pull/16706) by [@&#8203;H4vC](https://github.com/H4vC)) - OpenCode Go `muse-spark-1.3-contributor`, `muse-spark-1.2-contributor`, `gpt-5.6-luna`, `gpt-6-luna`, `grok-4.6` (Responses) and `deepseek-v4-pro`, `omen-alpha` (Completions) opt into shared prompt caching; lanes that warmed under any key stay off ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) - Added `CatalogPolicyInputs` so catalog-policy lookups accept a reduced model view ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) - Added a catalog conformance test that fails the build when a `bundle="always"` seed row is missing from the bundled `models.json`, so a stale-snapshot regeneration can no longer silently drop an engine the way `web/deepseek` was lost in 18.12.2 ([#&#8203;16610](https://github.com/can1357/oh-my-pi/issues/16610), [#&#8203;17053](https://github.com/can1357/oh-my-pi/pull/17053) by [@&#8203;ouyangjiahong26](https://github.com/ouyangjiahong26)) ##### Changed - llama.cpp login instructions now list both default local base URLs (`http://127.0.0.1:8080`, then `http://127.0.0.1:9931`) ([#&#8203;16675](https://github.com/can1357/oh-my-pi/pull/16675) by [@&#8203;bartbroere](https://github.com/bartbroere)) - Devin requests now identify as Devin CLI 3000.11.205, the current stable release, instead of 3000.11.3 ([#&#8203;16906](https://github.com/can1357/oh-my-pi/pull/16906) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Google Antigravity login now uses PKCE and requests the `aicode` scope like the official client; existing logins keep working, and the new scope applies at the next `/login` ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - Antigravity requests identify as client 2.26.0 when the release manifest is unreachable (previously 2.19.1), and model discovery sends the account's project like the official client ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - Antigravity's `User-Agent` now reports the native Antigravity build for the host OS (Linux `linux`/`amd64`, Windows `windows`/`amd64`) instead of always claiming macOS `darwin`/`arm64` ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - Antigravity model discovery now keeps each account's per-tier `model_enum`, output cap and thinking level or budget, and the bundled Antigravity models carry them for offline use; cached Antigravity model lists are refreshed once so they pick them up ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) ##### Fixed - Fixed OpenCode Go `gemini-4-argon` requests failing with an unsupported protocol; discovered models now use native Gemini routing and low, medium, or high thinking ([#&#8203;17031](https://github.com/can1357/oh-my-pi/issues/17031)) - Fixed DeepSeek V4 Pro cost estimates using Flash rates after September 14 despite Pro billing remaining unchanged ([#&#8203;16875](https://github.com/can1357/oh-my-pi/issues/16875)). - Anthropic refusal fallbacks from Claude Opus 5.5, Opus 5 and Sonnet 5.5 to their documented target models (Opus 4.8 and Opus 5, Opus 4.8, and Sonnet 5) now redeem fallback credit: the retry is no longer billed as a full cache write, and it is no longer skipped when the conversation holds signed thinking ([#&#8203;17034](https://github.com/can1357/oh-my-pi/pull/17034) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed Step 5 Preview reasoning choices on OpenCode Go and Zen to offer only low, medium, and high ([#&#8203;14987](https://github.com/can1357/oh-my-pi/issues/14987), [#&#8203;16669](https://github.com/can1357/oh-my-pi/pull/16669) by [@&#8203;SheetHappiness](https://github.com/SheetHappiness)) - Fixed GPT-6 Sol/Luna API and MiniMax-M3 long-context usage estimates above their published input thresholds ([#&#8203;16711](https://github.com/can1357/oh-my-pi/issues/16711)) - Fixed Xiaomi Token Plan login and default model selection after the V2.5 retirement by using MiMo V2.6 Flash ([#&#8203;16727](https://github.com/can1357/oh-my-pi/pull/16727) by [@&#8203;LiPu-jpg](https://github.com/LiPu-jpg)) - Fixed Xiaomi model discovery sending `ttp-` Token Plan keys to the pay-as-you-go host, which rejects them ([#&#8203;17045](https://github.com/can1357/oh-my-pi/issues/17045)) - Fixed GPT-5.6 Sol requests over 272K input tokens (`openai` and `openai-codex`) being priced at the retired $10/$45 long-context card instead of $8/$30 ([#&#8203;16742](https://github.com/can1357/oh-my-pi/issues/16742)) - Fixed DeepSeek's official vision requests being held to the 5-image unknown-host floor: the catalog endpoint now carries DeepSeek's documented 600-image and 40 MiB inline-image budgets, while a custom `baseUrl` keeps the conservative floor ([vision limits](https://api-docs.deepseek.com/guides/vision#limits); [#&#8203;16737](https://github.com/can1357/oh-my-pi/pull/16737) by [@&#8203;Fun10165](https://github.com/Fun10165)) - Fixed Devin model discovery falling back to the two SWE-1.6 seed models when the catalog takes longer than 5s to respond; it now waits up to 15s ([#&#8203;16668](https://github.com/can1357/oh-my-pi/pull/16668) by [@&#8203;DusKing1](https://github.com/DusKing1)) - Fixed Go Task keeping stale prompt-cache affinity after a model's wire model changed ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) - Fixed Devin models all showing a 200K context window: each model now reports its own (1M for Claude Opus 5.5 and the `-1m` lanes, 262K for SWE-2), and GPT and Grok models with a long-context price tier start at that tier's threshold, with `/extended-context on` opening their full window ([#&#8203;16905](https://github.com/can1357/oh-my-pi/pull/16905) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added the `extended-cache-ttl-beta` compat axis so a route can opt out of the `extended-cache-ttl-2025-04-11` beta (Factory Droid does), and prompt-cache lifetimes and long-retention support for Factory Droid's Claude models ([#&#8203;16296](https://github.com/can1357/oh-my-pi/pull/16296) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added Factory Droid's image models (GPT Image 2.5, GPT Image 2.5 Flare, Gemini 3 Pro Image) to the `image` role's choices, listed only while your Factory organization allows image generation and that model ([#&#8203;16316](https://github.com/can1357/oh-my-pi/pull/16316) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed LiteLLM model groups with `mode: decisions` being listed as chat models; they now route to `openai-decisions` as judge models ([#&#8203;16939](https://github.com/can1357/oh-my-pi/issues/16939)) - Removed retired Anthropic models (Claude 3.x, Opus 4/4.1, Sonnet 4) from the bundled catalog and discovery ([#&#8203;16755](https://github.com/can1357/oh-my-pi/issues/16755)) - Fixed Kimi Code K3 and K3 256K (`k3`, `k3-256k`) pricing to include Kimi's $3/MTok cache-write rate, matching the Moonshot API `kimi-k3` card ([#&#8203;16508](https://github.com/can1357/oh-my-pi/issues/16508), [#&#8203;16903](https://github.com/can1357/oh-my-pi/pull/16903) by [@&#8203;eggpeat](https://github.com/eggpeat)) - Fixed Cursor Auto (`cursor/default`) being metered against the third-party ("Other Models") pool instead of the Cursor Models pool it bills to ([#&#8203;17048](https://github.com/can1357/oh-my-pi/pull/17048) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) #### [@&#8203;oh-my-pi/pi-coding-agent](https://github.com/oh-my-pi/pi-coding-agent) ##### Breaking Changes - `snapshotJobs` no longer accepts `includeResults`, and `buildJobResult` accepts only the `"wait"` and `"cancel"` ops; the `"jobs"` op has had no caller since `wait` and `proc://` replaced the `hub` tool ([#&#8203;16763](https://github.com/can1357/oh-my-pi/pull/16763) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Added - Added `omp -p --wait-async` (setting `async.printWake`): print mode waits for the background jobs it started and wakes the same session with each result before exiting, instead of cancelling them ([#&#8203;10363](https://github.com/can1357/oh-my-pi/issues/10363), [#&#8203;16690](https://github.com/can1357/oh-my-pi/pull/16690) by [@&#8203;trukhinyuri](https://github.com/trukhinyuri)) - File slash commands with `side: true` frontmatter (including Codex and OpenCode command directories) run as `/btw` side questions in the TUI, with or without arguments: they answer off the transcript and never steer a running turn. The panel and `/btw` history title them by the typed command (`/sitrep`); the title is kept in an `entry-<id>.title` sidecar so older builds can still read the history. Other modes expand them as ordinary prompts ([#&#8203;16815](https://github.com/can1357/oh-my-pi/pull/16815) by [@&#8203;wolfiesch](https://github.com/wolfiesch)) - Added `compat.requiresThinkingPresence` to `models.yml` overrides, so a gateway model group whose strict member validates thinking replay can pad a turn a lax member answered without reasoning ([#&#8203;16739](https://github.com/can1357/oh-my-pi/pull/16739) by [@&#8203;lz37](https://github.com/lz37)) - Anthropic web search and Files API uploads follow `PI_ANTHROPIC_API_VERSION=2026-10-21`; web search omits `temperature` under that version ([#&#8203;16706](https://github.com/can1357/oh-my-pi/pull/16706) by [@&#8203;H4vC](https://github.com/H4vC)) - llama.cpp auto-discovery now also finds local servers on llama-server's new default port 9931 when nothing answers on 8080 ([#&#8203;16675](https://github.com/can1357/oh-my-pi/pull/16675) by [@&#8203;bartbroere](https://github.com/bartbroere)) - `/local` (or `Alt+G`, remappable as `app.local.open`) opens a picker of the session's `local://` files and edits the chosen one in place in `$VISUAL`/`$EDITOR`; `/local <name>` opens a file directly with name completion ([#&#8203;16873](https://github.com/can1357/oh-my-pi/pull/16873) by [@&#8203;Shadorain](https://github.com/Shadorain)) - Added `--no-context-files` to start a session without `AGENTS.md`, `CLAUDE.md` or other context files, including those of `--add-dir` roots and in subagents ([#&#8203;16768](https://github.com/can1357/oh-my-pi/pull/16768) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Changed - Clarified how RPC and RPC-UI clients discover and invoke mounted MCP tools through `xd://` devices rather than relying on `dumpTools` ([#&#8203;16864](https://github.com/can1357/oh-my-pi/pull/16864) by [@&#8203;michaeltrefry](https://github.com/michaeltrefry)) - The note `read` adds to a PDF whose pages have no extractable text (a scan) now points at the `:page<N>.png` selector, which returns the page as an image, instead of the browser prelude ([#&#8203;16585](https://github.com/can1357/oh-my-pi/pull/16585) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `read doc.pdf:page<N>.png` renders the page in a square 874x874 tab instead of the default landscape one, so a letter page comes back at 668x865 instead of 441x568 and a landscape page at 864x669 instead of 736x567 ([#&#8203;16585](https://github.com/can1357/oh-my-pi/pull/16585) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added `--warn-cost` and `--max-cost` (`session.warnCost` / `session.maxCost`): omp warns once at the first spend and stops sending model requests at the second, subagents included; capped print runs exit 3 ([#&#8203;7802](https://github.com/can1357/oh-my-pi/issues/7802); first written by [@&#8203;zhang17-24](https://github.com/zhang17-24)) ([#&#8203;16803](https://github.com/can1357/oh-my-pi/pull/16803) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `/session` (and RPC `get_session_stats`, as `editRejections`) lists your failed edits by why they were refused (unseen lines, stale tag, parse error, …), and each failed edit records that reason as `details.errorKind` in the session file ([#&#8203;16608](https://github.com/can1357/oh-my-pi/pull/16608) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added exclusions to `grep`: a `path` entry starting with `!` leaves matching files and folders out of the search (`src;!*.test.ts`, `!vendor;!gen`), where before it was taken as a path and found nothing ([#&#8203;16920](https://github.com/can1357/oh-my-pi/pull/16920) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `wait` and `read proc://` now show a running subagent's run time, request count, cost, context fill and stage, so a subagent that is looping is visible without opening its transcript ([#&#8203;16863](https://github.com/can1357/oh-my-pi/pull/16863) by [@&#8203;KimToehler](https://github.com/KimToehler)) - Google Antigravity web search sends the same transport headers as the official client (`Accept-Encoding: gzip`, no explicit `Accept`) ([#&#8203;17012](https://github.com/can1357/oh-my-pi/pull/17012) by [@&#8203;apoc](https://github.com/apoc)) - A subagent's result up to 11,500 characters now reaches its parent whole, instead of as a 5,000-character preview the parent had to re-read through `agent://<id>` or act on without its ending ([#&#8203;16599](https://github.com/can1357/oh-my-pi/pull/16599) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a subagent's final report or `yield` reaching its parent and `agent://` as its short reply to a peer message or `agent://all` broadcast (the parent's included) that arrived as it finished; such messages now get a turn of their own after the result, and a peer that wrote directly still receives the reply ([#&#8203;16583](https://github.com/can1357/oh-my-pi/pull/16583) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the built-in `ts-set-map` rule stalling tool-call streaming on a long single-line `Set` value (5 s at 20,000 characters) and firing when the literal array only feeds a computed argument such as `new Set(["a", "b"].map(normalize))`; `ts-import-type` no longer fires on `import("x").then` written with a non-breaking space or line separator before the call ([#&#8203;16556](https://github.com/can1357/oh-my-pi/pull/16556) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a subagent woken after it was parked losing the tools an extension registers at its first prompt (such as HexRays `ida-mcp`'s `ida_*` tools), which also made its first request after waking miss the prompt cache; extensions see the revive as a `before_agent_start` with the new `reason: "revive"` ([#&#8203;16597](https://github.com/can1357/oh-my-pi/pull/16597) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `read` shows HEIC, HEIF and AVIF photos (such as iPhone pictures) as images instead of refusing them as binary, decoding them with ffmpeg 8.1 or newer; text-only models get their metadata, and without such an ffmpeg the error says how to convert the file ([#&#8203;16612](https://github.com/can1357/oh-my-pi/pull/16612) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed `read` of web pages with tables, code or pricing lists (API references, specs, pricing pages) returning a shorter trafilatura or Jina rendering that leaves out much of the page, and noting the page "appears to require JavaScript or is mostly navigation" ([#&#8203;16596](https://github.com/can1357/oh-my-pi/pull/16596) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `omp usage --json` now includes each policy-routed account's priority, reserve and routing state (`eligible`, `inside-reserve`, `exhausted` or `unknown`) as a `policy` object, matching the policy line in the text view ([#&#8203;16581](https://github.com/can1357/oh-my-pi/pull/16581) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added prompt-cache warming for Factory Droid's Claude models: replays follow the 5m entry, or the 1h entry once a response reports writing one ([#&#8203;16296](https://github.com/can1357/oh-my-pi/pull/16296) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - `generate_image` can now run Factory Droid's image models (GPT Image 2.5, GPT Image 2.5 Flare, Gemini 3 Pro Image) when one is chosen for the `image` role ([#&#8203;16316](https://github.com/can1357/oh-my-pi/pull/16316) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - On macOS, asking the agent to open a file, folder or URL, or to show a file in Finder, now takes one `computer.apps.open(path, { app?, reveal? })` call instead of a dozen steps driving Finder by hand ([#&#8203;16403](https://github.com/can1357/oh-my-pi/pull/16403) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added in-place updates of the browser relay's Chrome extension after an omp upgrade: an older extension loaded from `~/.omp/browser-relay/extension` is rewritten and reloads itself once no omp session is using the relay ([#&#8203;15105](https://github.com/can1357/oh-my-pi/pull/15105) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added a note to relay `browser.open` results when the Chrome extension was installed by an older omp, naming `omp browser-relay install` and a reload ([#&#8203;15105](https://github.com/can1357/oh-my-pi/pull/15105) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed images attached with an `@path` file mention reaching a text-only model as `[image omitted: …]` with `images.describeForTextModels` enabled; they now get the `vision` role description like pasted images ([#&#8203;16853](https://github.com/can1357/oh-my-pi/issues/16853)) - Fixed `browser.open({ ignore_https_errors: true })` still failing with certificate errors such as `net::ERR_CERT_AUTHORITY_INVALID` on the shared Chromium and on `app.cdp_url` browsers; the override now lasts until the tab is closed ([#&#8203;16930](https://github.com/can1357/oh-my-pi/issues/16930)) - `ignore_https_errors` through the Chrome relay now fails up front, explaining that Chrome's extension debugger API cannot ignore certificate errors and pointing to `app.relay: false`, instead of failing with `Security.setIgnoreCertificateErrors wasn't found` ([#&#8203;16930](https://github.com/can1357/oh-my-pi/issues/16930)) - Fixed a parent follow-up consumed while a kept-alive subagent resumes from queued steering or an async completion leaving `agent://` on the previous result instead of delivering the fresh answer ([#&#8203;16746](https://github.com/can1357/oh-my-pi/issues/16746)) - Fixed a long streamed answer ending the collab room for every guest with "collab send backlog exceeded its limit"; the host now sends guests only the latest state of a streaming message, and guests still speak the full answer when speech is on ([#&#8203;16956](https://github.com/can1357/oh-my-pi/issues/16956)) - Fixed `read proc://<agent>` and `write proc://<agent>/kill` answering "not found" for a subagent that a message woke while its new turn runs as job `<agent>-2`; they now reach that job, and reading the agent's finished first job names the job it is running as ([#&#8203;17020](https://github.com/can1357/oh-my-pi/pull/17020) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed the agent reading a fallback engine's `web_search` results as the preferred provider's: the tool result now notes which provider answered and why the earlier ones failed ([#&#8203;16948](https://github.com/can1357/oh-my-pi/pull/16948) by [@&#8203;BAKocska](https://github.com/BAKocska)) - Fixed a turn that ended with background jobs still running looking stuck: the working row now says it is waiting for those jobs and names them instead of repeating the last tool call, and Esc ends the wait, so the jobs keep running and their results land in context for your next prompt instead of starting a new turn ([#&#8203;17032](https://github.com/can1357/oh-my-pi/pull/17032) by [@&#8203;sjawhar](https://github.com/sjawhar)) - The `power.sleepPrevention` setting now says it keeps the machine awake only while the agent is running a turn, not for as long as a session is open ([#&#8203;16762](https://github.com/can1357/oh-my-pi/pull/16762) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - The advisor docs now say a quota-paused advisor resumes only when its runtime is reset or rebuilt (compaction, a session switch, `/advisor`, a config reload or a restart), not after a cooldown ([#&#8203;16766](https://github.com/can1357/oh-my-pi/pull/16766) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the `computer` tool's `computer.window({ app })` failing for an app with no open window without saying what to do; the error now names the `computer.apps.open(…)` call that launches it (on macOS it also shows a window of a running app that has none), and `computer.window()` with no argument asks for a window id or filter instead of listing windows that "match undefined" ([#&#8203;16912](https://github.com/can1357/oh-my-pi/pull/16912) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the `computer` tool prompt leaving `el.selectText` out of the element helpers; it now says a following `el.type` on that element replaces the selection ([#&#8203;16769](https://github.com/can1357/oh-my-pi/pull/16769) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Fixed - Honored `display_name`, `context_window`, and `input_modalities` when a model list nests them under `metadata`, so codex-lb-style gateways surface the advertised name, window, and image input instead of the raw id and defaults. ([#&#8203;17010](https://github.com/can1357/oh-my-pi/pull/17010) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Recovered spilled tool output in sessions without an artifacts directory: the `artifact://` link the truncation footer advertises now reads the in-memory copy instead of failing with "No session - artifacts unavailable". ([#&#8203;17009](https://github.com/can1357/oh-my-pi/pull/17009) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Fixed the compiled `omp` binaries trusting certificates from the compromised eMudhra intermediate CAs (CVE-2026-91403) and carrying the Brotli decoder out-of-bounds write (CVE-2026-111497); release binaries now build on Bun 1.4.4 ([#&#8203;16822](https://github.com/can1357/oh-my-pi/issues/16822), [#&#8203;16865](https://github.com/can1357/oh-my-pi/pull/16865) by [@&#8203;bse-ai](https://github.com/bse-ai)) - Fixed `computer` runs in subagents and `omp -p` stopping at their first `control.acquire`: they now keep working through background window input and report only a step that needs foreground control ([#&#8203;16909](https://github.com/can1357/oh-my-pi/pull/16909) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - With `bash.gitGuard` on, a repository that once finished a conflicted rebase no longer counts as mid-conflict forever, which had let `git checkout`, `switch` and `restore` through; branch switches such as `git checkout -B <branch> <commit>` stay refused during a real merge or rebase too, abbreviated options such as `git reset --ha` are refused like the full ones, and `git stash create` is allowed ([#&#8203;16919](https://github.com/can1357/oh-my-pi/pull/16919) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed browser calls right after a click that navigates (headless, connected and relay Chrome) reaching the page being left: reads and screenshots returned the old page or failed with `Execution context was destroyed` or `Cannot find context with specified id`, and a `fill` could land on the old form; they now wait for the new page ([#&#8203;16907](https://github.com/can1357/oh-my-pi/pull/16907) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - LSP diagnostics now reflect external edits to already-open dependencies when checking an importer, including after Write/Edit ([#&#8203;16836](https://github.com/can1357/oh-my-pi/issues/16836)). - Fixed URL `read` line selectors using different coordinates from URL `grep` when the response includes transport headers ([#&#8203;16877](https://github.com/can1357/oh-my-pi/issues/16877)). - Fixed `write` to a SQLite row ignoring the database's declared foreign keys: orphan inserts and updates now fail, `ON DELETE RESTRICT` blocks the delete, and `ON DELETE CASCADE` removes dependent rows ([#&#8203;16999](https://github.com/can1357/oh-my-pi/issues/16999)) - Fixed pasting a server URL into the `/mcp add` wizard putting it in the hidden chat draft instead of the URL field ([#&#8203;16975](https://github.com/can1357/oh-my-pi/issues/16975)). - `omp --from-claude` keeps the last real model when Claude records a synthetic API error, and does not try to restore a synthetic-only placeholder ([#&#8203;16785](https://github.com/can1357/oh-my-pi/issues/16785)). - Fixed skill-list previews of long CJK descriptions collapsing to the few characters before an early ASCII space (e.g. `用户点名…`); they now keep the full preview budget ([#&#8203;17070](https://github.com/can1357/oh-my-pi/issues/17070)) - Browser clicks on a shadow-root button no longer fail with `blocked: covered by` naming the button's own slotted content; real overlays are still refused ([#&#8203;16958](https://github.com/can1357/oh-my-pi/issues/16958)) - Fixed reading `.xlsx` files rewriting numeric-looking text cells: long IDs like `12345678901234567890` no longer round (and collide), and text such as `00123` keeps its leading zeros ([#&#8203;16831](https://github.com/can1357/oh-my-pi/issues/16831)) - Fixed rc-file aliases for core tools (e.g. `alias ls='eza --icons'`) leaking into the bash tool; `ls`, `cat`, `grep` and the other core tools now run the real binaries ([#&#8203;17067](https://github.com/can1357/oh-my-pi/issues/17067)) - Fixed a collab room staying half alive after its session moved to a new file because it was open in another omp process (or replaced/contested on disk): guests now get room-closed, the registry entry is withdrawn, and `collab.autoStart` shares the moved session ([#&#8203;16935](https://github.com/can1357/oh-my-pi/issues/16935)) - Fixed skill-description compression ignoring the configured `default` model when `modelRoles.smol` is unset and sending background requests to the built-in smol chain (e.g. `claude-haiku-5-5`) instead of the model `/models` shows for SMOL ([#&#8203;16970](https://github.com/can1357/oh-my-pi/issues/16970)) - Fixed `models.yml` discovery providers with an `apiKey` (and no `authHeader: true`) showing 0 models in `/models` and ctrl+p right after startup despite a cached catalog; cached models now load immediately ([#&#8203;16965](https://github.com/can1357/oh-my-pi/issues/16965)) - Anthropic web search no longer sends unsupported `temperature` to Claude Haiku 5.5, avoiding HTTP 400 failures ([#&#8203;16986](https://github.com/can1357/oh-my-pi/issues/16986)) - Fixed pages in the managed headless browser hitting "Maximum call stack size exceeded" in canvas `fillText` after calling `canvas.getContext("2d")` repeatedly ([#&#8203;16879](https://github.com/can1357/oh-my-pi/issues/16879)) - Fixed LSP references and rename previews still listing a file that was open and then deleted (via `edit`, or outside OMP before a rename) until the language server restarted ([#&#8203;16880](https://github.com/can1357/oh-my-pi/issues/16880)) - Fixed `omp plugin upgrade` failing on Windows with `EPERM: operation not permitted, symlink` when the installed plugin was replaced by `omp plugin link`; a failed upgrade now restores the link as a junction ([#&#8203;16844](https://github.com/can1357/oh-my-pi/issues/16844)) - `omp plugin upgrade a@m b@m c@m` now upgrades every specified plugin instead of silently skipping targets after the first ([#&#8203;16826](https://github.com/can1357/oh-my-pi/issues/16826)) - Browser `tab.fill()`/`tab.type()` (and `frame.fill()`/`frame.type()`) that time out on long text now stop typing instead of finishing it behind the rejected call, and the timeout reports how many characters were typed instead of claiming the element was hidden or covered ([#&#8203;16833](https://github.com/can1357/oh-my-pi/issues/16833)) - Concurrent archive member writes now preserve both updates across sessions and directory symlinks; canceled writes waiting for the archive no longer publish later ([#&#8203;17000](https://github.com/can1357/oh-my-pi/issues/17000)). - Fixed a `tools.approval.<tool>: prompt` policy on a tool mounted as an `xd://` device asking the same approval question twice for one `write xd://<tool>` call ([#&#8203;17039](https://github.com/can1357/oh-my-pi/issues/17039)) - ACP cancellation now waits through Python kernel interrupt escalation before closing a session; prompts sent after a closed session return `ResourceNotFound` so clients can offer `session/load` recovery ([#&#8203;16889](https://github.com/can1357/oh-my-pi/issues/16889)). - Google Antigravity, Google, and Google Vertex now keep append-only context by default, preserving cached prompts across long-running agent turns ([#&#8203;16979](https://github.com/can1357/oh-my-pi/issues/16979)). - Fixed LiteLLM `mode: decisions` model groups being offered as chat models instead of judge models, including for custom `discovery.type: litellm` providers ([#&#8203;16939](https://github.com/can1357/oh-my-pi/issues/16939)) - ACP: `instructions` returned by MCP servers declared in `session/new` now reach the model under "## MCP Server Instructions", as they do for `.mcp.json` servers ([#&#8203;16882](https://github.com/can1357/oh-my-pi/issues/16882)) - Fixed the Windows tab title (e.g. in Tern) sticking at `omp` instead of the session title after a JS eval worker or `omp browser-relay` ran in the same console; omp no longer retitles the console from child processes and reclaims the title when another process replaces it ([#&#8203;16842](https://github.com/can1357/oh-my-pi/issues/16842)) - Fixed Python `eval` reporting the backend unavailable when the first `python` on PATH is broken (e.g. a mise shim with no version set) even though a working `python`/`python3` sits further down PATH; every PATH match is now probed, and the error reports bounded probe failures with home paths shortened ([#&#8203;16824](https://github.com/can1357/oh-my-pi/issues/16824)) - Fixed a turn whose stream was cut after text had already rendered — a gateway substituting an in-band `error` frame for the missing terminal event — ending instead of continuing from the partial answer ([#&#8203;16990](https://github.com/can1357/oh-my-pi/pull/16990) by [@&#8203;Maziar123](https://github.com/Maziar123)) - Model tags in `/skill:` arguments now register `m<N>` agents and appear with the skill prompt instead of reaching the model as literal `^` selectors ([#&#8203;16818](https://github.com/can1357/oh-my-pi/issues/16818)) - Fixed a user-scope `omp plugin upgrade`, `install --force`, or `uninstall` run outside a project deleting the cached plugin a project-scope install in that project still links to ([#&#8203;16827](https://github.com/can1357/oh-my-pi/issues/16827)) - Fixed resuming anonymized sessions with text tool results crashing before the next model request ([#&#8203;16859](https://github.com/can1357/oh-my-pi/issues/16859), [#&#8203;16896](https://github.com/can1357/oh-my-pi/pull/16896) by [@&#8203;tneemo](https://github.com/tneemo)) - Fixed the mid-run todo nudge going silent for the rest of a long turn after two nudges: a `todo` call now re-arms the per-turn budget instead of waiting for the next user prompt ([#&#8203;16962](https://github.com/can1357/oh-my-pi/pull/16962) by [@&#8203;omertahaoztop](https://github.com/omertahaoztop)) - xAI web and X searches now run Grok's hosted search instead of failing with `returned no sources` or falling back to engines that cannot read X posts ([#&#8203;16947](https://github.com/can1357/oh-my-pi/pull/16947) by [@&#8203;BAKocska](https://github.com/BAKocska)) - Fixed `/delete` leaving an empty zero-turn session on disk when you quit before sending a message ([#&#8203;11303](https://github.com/can1357/oh-my-pi/issues/11303), [#&#8203;16798](https://github.com/can1357/oh-my-pi/pull/16798) by [@&#8203;NewtonChutney](https://github.com/NewtonChutney)) - Idle recap no longer runs when the prior message was not generated (a user message, or an assistant turn that produced no output). A generated assistant reply still recaps after the idle delay ([#&#8203;16978](https://github.com/can1357/oh-my-pi/pull/16978) by [@&#8203;atacolak](https://github.com/atacolak)) - Fixed an extension loading twice, so every handler ran twice, when the same file was reachable both through a symlink and its target, such as a link in the agent `extensions/` directory plus `--extension` with the real path; discovery now dedupes extension paths by real file ([#&#8203;16788](https://github.com/can1357/oh-my-pi/pull/16788) by [@&#8203;wolfiesch](https://github.com/wolfiesch)) - Fixed the `write` refusal in read-only subagents saying filesystem writes are unavailable; it now gives the on-disk path of `local://` files, so the agent can tell its caller where its report is ([#&#8203;17023](https://github.com/can1357/oh-my-pi/pull/17023) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed `wait` saying a subagent "finished its turn without replying" (and to ask again) after that subagent's result had already arrived as a background-job result, for a follow-up that woke it or that it got while running ([#&#8203;16929](https://github.com/can1357/oh-my-pi/pull/16929) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed a Markdown link to a local path that cannot be encoded pointing at a broken target instead of staying plain text ([#&#8203;16806](https://github.com/can1357/oh-my-pi/pull/16806) by [@&#8203;laviRZ](https://github.com/laviRZ)) - Fixed the Agent Hub reordering its rows on every heartbeat while it loaded the session's saved subagents, so no row could be selected until the load ended: a row's place is now fixed when the hub first shows it, agents found on disk take their place in the status/recency ranking, and a scan reads a transcript again only after it changed, so reopening the hub on a session with many saved agents no longer rereads them all ([#&#8203;10524](https://github.com/can1357/oh-my-pi/issues/10524), [#&#8203;16952](https://github.com/can1357/oh-my-pi/pull/16952) by [@&#8203;lemonleks](https://github.com/lemonleks)) - `omp usage` now shows the Codex credit spend cap for credit-billed ChatGPT Business/Enterprise seats (previously `no limits reported`), and rounds fractional credit amounts to two decimals ([#&#8203;16973](https://github.com/can1357/oh-my-pi/pull/16973) by [@&#8203;DusKing1](https://github.com/DusKing1)) - Fixed TTSR rule matching slowing down quadratically on long tool calls such as `bash`, `eval` or `task` arguments: their streamed JSON escapes newlines, so every delta rescanned the whole argument (a 64 KB call with 10 rules took 120 ms of matching, now 4.5 ms). A long unterminated line is now rescanned as it grows by a quarter, and the final check still scans all of it ([#&#8203;14248](https://github.com/can1357/oh-my-pi/issues/14248), [#&#8203;16974](https://github.com/can1357/oh-my-pi/pull/16974) by [@&#8203;lavinhoque33](https://github.com/lavinhoque33)) - Fixed the `eval` tool description so JS sessions see which helpers need `await` ([#&#8203;16808](https://github.com/can1357/oh-my-pi/pull/16808) by [@&#8203;bigHippoZz](https://github.com/bigHippoZz)) - Fixed the `eval` agent and judge docs so JS sessions see which handle, pool and batch calls need `await`, and Python sessions with JS enabled see `agent()`'s `schema_mode` keyword instead of JS's `schemaMode` ([#&#8203;16810](https://github.com/can1357/oh-my-pi/pull/16810) by [@&#8203;bigHippoZz](https://github.com/bigHippoZz)) - Fixed a classifier refusal on an Anthropic model ending the turn with the rest of an Anthropic `retry.fallbackChains` entry untried once the conversation carried signed thinking; the refusal now moves to the next model in the chain ([#&#8203;17024](https://github.com/can1357/oh-my-pi/pull/17024) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed the bash tool blocking commands such as `echo hi; make 2>build.err`, and sending `cat > file <<'EOF'` to `read` ([#&#8203;17022](https://github.com/can1357/oh-my-pi/pull/17022) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Empty-stop retry exhaustion now reports provider usage without claiming that output was filtered or dropped, and same-model retries of content-less `MALFORMED_RESPONSE`/`UNEXPECTED_TOOL_CALL` errors inject a corrective tool-call reminder instead of replaying the identical cached prefix ([#&#8203;17063](https://github.com/can1357/oh-my-pi/pull/17063) by [@&#8203;martijnberger](https://github.com/martijnberger)) - Fixed automatic compaction committing summaries that increase context and repeatedly retrying the same retained-history cut point; token counts now include trailing tool results and post-compaction rescue ([#&#8203;16904](https://github.com/can1357/oh-my-pi/pull/16904) by [@&#8203;eggpeat](https://github.com/eggpeat)) - Fixed `/tan` dropping the images attached to its draft: the background agent now gets them with its request and keeps them, as admitted, when compaction restores the request; they leave the composer once `/tan` starts, so the next message cannot send them again, and come back with the draft when it cannot start ([#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed `/btw` dropping the images attached to its question: the side request now sends them, and like `/tan` they leave the composer once it starts and come back with the draft when it cannot; BTW history keeps each question's images (`images` on the RPC BTW records), so every follow-up sends them again, and a follow-up in the BTW history also takes pasted images ([#&#8203;13890](https://github.com/can1357/oh-my-pi/issues/13890), [#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - `/omfg`, `/handoff` and `/cleanse` no longer run without the images attached to their draft: they keep the draft and say they take text only ([#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed an image pasted while an extension input hook held a submission being dropped from the next message: once the submitted images leave the composer, the images that stay are renumbered from `#1` ([#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed a collab guest losing the draft of a host-only command that takes its draft out of the composer on Enter (`/plan`, `/goal`, `/tan`, `/btw` and others): the draft now comes back with its images ([#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed a hashline `PUT` whose body repeats the line just above or below its range (or both), and is shorter than the range, silently deleting the range's other lines or writing a neighbouring line twice in Python, TypeScript and other parsed files; it is now refused, and the "too short" refusal names the lines the body leaves out ([#&#8203;17028](https://github.com/can1357/oh-my-pi/pull/17028) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed `omp gc --compress` exiting with "the event loop drained while it was still pending" on Bun 1.3.14 when a session artifact is pretty-printed JSON larger than 1 MiB, and session header probes (gc, session move and transfer) reading whole artifacts on Windows ([#&#8203;15745](https://github.com/can1357/oh-my-pi/issues/15745), [#&#8203;16754](https://github.com/can1357/oh-my-pi/pull/16754) by [@&#8203;wolfiesch](https://github.com/wolfiesch)) - `/resume` into another session now cancels the previous session's background jobs, as `/new` does, instead of delivering their results into the resumed session and starting a turn there ([#&#8203;16760](https://github.com/can1357/oh-my-pi/pull/16760) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the models config migration writing `models.yml` readable by other users on the machine, and dropping every custom provider when the write was interrupted; the migrated file is now published atomically with owner-only permissions ([#&#8203;16654](https://github.com/can1357/oh-my-pi/pull/16654) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Fixed `/memory clear` in one project deleting the memory state of every other project that shares the same agent directory ([#&#8203;16657](https://github.com/can1357/oh-my-pi/pull/16657) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Fixed the classic `/usage` report averaging distinct quota buckets that share a label and window (Google Antigravity's Gemini and Gemini 4 Argon weeklies) into one "50% free" row that hid the drained bucket; groups now split by quota identity while shared buckets still merge ([#&#8203;16790](https://github.com/can1357/oh-my-pi/issues/16790)) - Fixed `read` of a web page failing with HTTP 403 or 429 when the site serves the page to another user agent, as SEC EDGAR filings, Ars Technica, AP News and Yahoo Finance do: a refused request now retries with the next user agent whatever its error page says ([#&#8203;16593](https://github.com/can1357/oh-my-pi/pull/16593) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed `grep` trimming a file to its first 20 matches in a multi-file search (200 in a single file) without telling the agent; the result now names the trimmed files and how to see the rest, and no longer reports the file total as `N+` when every file was searched ([#&#8203;16594](https://github.com/can1357/oh-my-pi/pull/16594) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed isolated task capture failing with `patch does not apply: <path> does not exist` when the worker's commits leave untracked baseline files of the parent checkout untouched: the baseline work-in-progress is replayed before the worker's delta and rewound afterwards ([#&#8203;16648](https://github.com/can1357/oh-my-pi/pull/16648) by [@&#8203;Komzpa](https://github.com/Komzpa)) - Fixed a project-wide LSP rename corrupting files that were edited outside OMP while open: the rename now syncs every open document (not just the requested file) before the workspace edit is computed, so the server's ranges match the current disk text instead of writing the identifier into blank lines ([#&#8203;15772](https://github.com/can1357/oh-my-pi/issues/15772), [#&#8203;16649](https://github.com/can1357/oh-my-pi/pull/16649) by [@&#8203;holny](https://github.com/holny)) - Fixed local memory stage-1 extraction sending prior assistant reasoning to Claude, causing `reasoning_extraction` refusals and lost memories ([#&#8203;16679](https://github.com/can1357/oh-my-pi/issues/16679)). - Fixed each `rewind` report being sent to the model twice (as a `Branch-return summary` and as the `Checkpoint called and rewound` report); it now appears once per checkpoint/rewind cycle, while the transcript still shows the branch summary ([#&#8203;16702](https://github.com/can1357/oh-my-pi/issues/16702)) - Browser relay opens fail immediately with Chrome's reason (e.g. `Host access is restricted by policy.` on Chromium 155+ with an extension debugger policy) instead of timing out, and close the tab Chrome refused ([#&#8203;16748](https://github.com/can1357/oh-my-pi/issues/16748)) - Collab guests can answer a pending question after the host reconnects to the relay without duplicated answer controls ([#&#8203;16682](https://github.com/can1357/oh-my-pi/pull/16682) by [@&#8203;DAnaeto](https://github.com/DAnaeto)) - Fixed `dd … of=/dev/null` (and other write-only sinks such as `/dev/stdout` and `/dev/fd/1`) triggering the unoverridable critical-command approval prompt; `dd` to real devices like `/dev/sda` still prompts ([#&#8203;16714](https://github.com/can1357/oh-my-pi/issues/16714)) - Fixed Word and EPUB `read`s, site-specific web scrapers (Stack Overflow, MDN, GitLab, …) and the browser's readable page extraction writing identifiers as `snake\_case` or `DOCX\_NEEDLE\_1` (filtered plain text dropped the underscores): underscores inside words now stay literal ([#&#8203;16607](https://github.com/can1357/oh-my-pi/pull/16607) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Tagging a model with `^` in a message sent while the agent is working no longer splits it in two: the model learns the new `m<N>` agent and reads your message in the same turn, instead of replying to the announcement alone first ([#&#8203;16614](https://github.com/can1357/oh-my-pi/pull/16614) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed subagent model resolution skipping an authenticated later entry of the configured model list: when the first resolved model has no credentials, the remaining entries are tried in order before the parent session's model. ([#&#8203;16640](https://github.com/can1357/oh-my-pi/pull/16640) by [@&#8203;Komzpa](https://github.com/Komzpa)) - Fixed background job widgets rejecting percentage progress with `meter.total: 100 appears nowhere in the job or its output`; a meter may now use a total of 100 when every value feeding it was printed as a percentage ([#&#8203;16885](https://github.com/can1357/oh-my-pi/pull/16885) by [@&#8203;alphastorm](https://github.com/alphastorm)) - Fixed `openai-models-list` discovery leaving models that advertise their own reasoning levels (`supported_reasoning_levels` and `default_reasoning_level`, top-level or under `metadata` as codex-lb sends them) non-reasoning when the id is absent from the bundled catalog, so requests never carried `reasoning_effort` ([#&#8203;16650](https://github.com/can1357/oh-my-pi/pull/16650) by [@&#8203;Komzpa](https://github.com/Komzpa)) - Fixed marketplace auto-update leaving cloned checkouts behind after startup errors; abandoned clones are removed on a later refresh ([#&#8203;16693](https://github.com/can1357/oh-my-pi/issues/16693)) - Fixed an extension's idle `pi.sendMessage({ display: true }, { deliverAs: "nextTurn", triggerTurn: false })` clearing and replaying the whole transcript, which froze input for longer as the session grew; the message is now appended to the existing transcript ([#&#8203;16744](https://github.com/can1357/oh-my-pi/pull/16744) by [@&#8203;OriginalByteMe](https://github.com/OriginalByteMe)) - Fixed `app.target` rejecting CDP page ids, including fresh `about:blank` pages, and added ids to unmatched-target listings ([#&#8203;16619](https://github.com/can1357/oh-my-pi/issues/16619)) - Fixed reading `proc://<id>/kill` or `proc://<id>/mode` answering only "writable only", so agents often moved on with the job still running; the error now names the `write` call that cancels the job or sets the mode, with the real id ([#&#8203;16580](https://github.com/can1357/oh-my-pi/pull/16580) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed `history://<id>` failing with "has no transcript: session is gone" for a worker that is still running but has not created its session or transcript file yet; it now answers "No transcript has been written yet". ([#&#8203;16645](https://github.com/can1357/oh-my-pi/pull/16645) by [@&#8203;Komzpa](https://github.com/Komzpa)) - Fixed the `eval` tool telling sessions with only the Python runtime to call `tool.<name>(args)` without `await`, which returns a coroutine and never runs the tool ([#&#8203;16578](https://github.com/can1357/oh-my-pi/pull/16578) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Task subagents on models that opt into shared prompt caching now share one cache key with their same-type siblings, even when the parent runs another model or the child switches models later; `/compact` and auto-compaction use that key against the model the compaction request actually sends, and keep the session's own id when no key applies ([#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1)) - Fixed `omp auth-broker serve` token refreshes that hang continuing past the refresh deadline and keeping other refreshes of that credential waiting: the deadline now cancels the token request ([#&#8203;16291](https://github.com/can1357/oh-my-pi/pull/16291) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed `read doc.pdf:page<N>.png` returning the PDF viewer's empty grey frame instead of the page on about half of reads ([#&#8203;16585](https://github.com/can1357/oh-my-pi/pull/16585) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed language servers keeping every file omp ever opened loaded for the whole session; files unused for 5 minutes are now closed when omp opens another, so the server can free that memory ([#&#8203;15418](https://github.com/can1357/oh-my-pi/pull/15418) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed `write` turning a CRLF file into LF and dropping its UTF-8 BOM when it replaces the file; it now keeps both, as `edit` does ([#&#8203;16575](https://github.com/can1357/oh-my-pi/pull/16575) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) #### [@&#8203;oh-my-pi/pi-mnemopi](https://github.com/oh-my-pi/pi-mnemopi) ##### Fixed - Fixed polyphonic recall's graph voice finding no memories for non-English names (e.g. `Hà Nội`) or names of three or more words, and Vietnamese words like `tôi` being stored as the participant `i` ([#&#8203;16723](https://github.com/can1357/oh-my-pi/issues/16723)) #### [@&#8203;oh-my-pi/pi-natives](https://github.com/oh-my-pi/pi-natives) ##### Added - A failed `EditStore.apply` outcome carries `errorKind`, a stable class of the refusal (`unseen_lines`, `stale_tag`, `parse`, …), and `editErrorKinds()` lists every class ([#&#8203;16608](https://github.com/can1357/oh-my-pi/pull/16608) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added `exclude` to `grep()` options: glob patterns of files and folders to leave out of a directory search; a matched folder is not walked ([#&#8203;16920](https://github.com/can1357/oh-my-pi/pull/16920) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - On macOS, `openApplication` also opens a file, folder or URL in its default application or `ApplicationOpenOptions.app`, and `reveal` shows a file or folder selected in Finder; other platforms return `Unsupported` for a URL, `app` or `reveal` ([#&#8203;16403](https://github.com/can1357/oh-my-pi/pull/16403) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a rerouted parallel Mermaid flowchart edge running over other edges, ports and labels at the same two nodes; the route no longer depends on declaration order, and it can pass outside the first row or column of nodes to reach a free port ([#&#8203;16773](https://github.com/can1357/oh-my-pi/issues/16773), [#&#8203;16774](https://github.com/can1357/oh-my-pi/pull/16774) by [@&#8203;berney](https://github.com/berney)) - Fixed the built-in `ps` reporting an unsupported long option such as `--forest` as `unsupported option '--'`; it now names the option, and every unsupported-option error says that a system `ps`, if installed, may support more options when run by its full path ([#&#8203;17018](https://github.com/can1357/oh-my-pi/pull/17018) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed `kill %N` on a backgrounded compound command (such as `(while :; do :; done) &`) in a persistent shell session: the job was reported done but the in-process loop kept spinning until the process exited; it now stops at the next interpreter check ([#&#8203;16937](https://github.com/can1357/oh-my-pi/pull/16937) by [@&#8203;holny](https://github.com/holny)) - Fixed `sort -t=` (and clusters such as `-nrt=`) failing with "separator must be exactly one character long"; an attached `=` now selects `=` as the field separator, as in GNU sort, and `-t=X` such as `-t==` is rejected as two characters ([#&#8203;17017](https://github.com/can1357/oh-my-pi/pull/17017) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed macOS `press()` on a control with no press action, such as a button on a Chrome page, failing without saying what to do; the error now tells you to `click()` it instead ([#&#8203;16916](https://github.com/can1357/oh-my-pi/pull/16916) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Changed - Faster native grep on minified and long lines ([#&#8203;17016](https://github.com/can1357/oh-my-pi/pull/17016) by [@&#8203;GTanger](https://github.com/GTanger)) - Faster native ANSI text wrapping on long lines with many words ([#&#8203;16927](https://github.com/can1357/oh-my-pi/pull/16927) by [@&#8203;GTanger](https://github.com/GTanger)) - Faster native memory reranking when selecting many results ([#&#8203;16921](https://github.com/can1357/oh-my-pi/pull/16921) by [@&#8203;GTanger](https://github.com/GTanger)) - Faster structural code summaries on large files ([#&#8203;16993](https://github.com/can1357/oh-my-pi/pull/16993) by [@&#8203;GTanger](https://github.com/GTanger)) - Faster native edit diff formatting and fuzzy line matching on large files ([#&#8203;16926](https://github.com/can1357/oh-my-pi/pull/16926) by [@&#8203;GTanger](https://github.com/GTanger)) - Reduced native word-diff allocation overhead when joining tokens and deduplicating boundary whitespace ([#&#8203;16922](https://github.com/can1357/oh-my-pi/pull/16922) by [@&#8203;GTanger](https://github.com/GTanger)) ##### Fixed - Fixed macOS `ax()` and `find()` leaving a text field with no label of its own, such as Reminders' Add Date and Add Location fields, unnamed; such a field is now named by its placeholder ([#&#8203;16915](https://github.com/can1357/oh-my-pi/pull/16915) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed minimized `ruff check --output-format full` output counting code-frame lines with function calls, such as `14 | assert skill.read() == …`, as diagnostics and files, which inflated the `N diagnostics in M files` summary ([#&#8203;16837](https://github.com/can1357/oh-my-pi/issues/16837)) - Fixed omp crashing with a stack overflow when an edit's path did not resolve to an existing file and the workspace search for it reached a deeply nested directory tree; directory walks no longer use a stack frame per nesting level ([#&#8203;16857](https://github.com/can1357/oh-my-pi/issues/16857)) - Fixed the built-in `ps` crashing the shell on a non-ASCII character in an option cluster such as `ps -é`; it now reports `unsupported option '-é'` like any other unknown option ([#&#8203;17019](https://github.com/can1357/oh-my-pi/pull/17019) by [@&#8203;sjawhar](https://github.com/sjawhar)) - Fixed computer use on macOS being unable to finish renaming a file in Finder: keys, `el.type` and `el.press` sent to the rename field were refused, and so were clicks in its window while Finder was your frontmost app ([#&#8203;16910](https://github.com/can1357/oh-my-pi/pull/16910) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a UTF-8 char-boundary panic when parsing `stateDiagram-v2` lines where `>` follows a multibyte character ([#&#8203;16749](https://github.com/can1357/oh-my-pi/pull/16749) by [@&#8203;berney](https://github.com/berney)) - Fixed the bash tool's `rg` and `fd` on macOS and Linux finding nothing under a path that is a symlink to a directory, such as `/tmp` or `/etc` on macOS or a symlinked skill folder; like ripgrep and fd, they now search the folder the link points to ([#&#8203;16598](https://github.com/can1357/oh-my-pi/pull/16598) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed minimized `git diff`, `git show` and `diff -u` output dropping a hunk's changes and listing a made-up file when a changed line starts with `-- ` or `++ ` (SQL comments, Markdown `---` rules) ([#&#8203;16588](https://github.com/can1357/oh-my-pi/pull/16588) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the bash tool's minimizer summarizing word diffs (`git diff --word-diff`, `--color-words`, `--word-diff-regex`), which carry no per-line `+`/`-` markers; word-diff patches are now passed through unsummarized ([#&#8203;16588](https://github.com/can1357/oh-my-pi/pull/16588) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed Mermaid flowcharts drawing two edges between the same pair of nodes as one line, with their labels written over each other; each edge now gets its own route, line style, arrowhead and label ([#&#8203;16731](https://github.com/can1357/oh-my-pi/issues/16731)) - Fixed `renderMermaidAscii` starting an edge one cell away from its node's side when a labeled sibling edge leaves the same node from another side ([#&#8203;16730](https://github.com/can1357/oh-my-pi/issues/16730)) - Fixed Mermaid flowchart parsing swallowing leading dashes of spaceless arrows (`A-->B`, `B-.->C`, `C:::cls-->D`) into the preceding node ID or class name ([#&#8203;16750](https://github.com/can1357/oh-my-pi/pull/16750) by [@&#8203;berney](https://github.com/berney)) - Fixed macOS `openApplication("Contacts")` and `openApplication("Messages")` failing as ambiguous because a helper of the app (an agent app or a running app extension) has the same name; a name shared only with such helpers now opens the app ([#&#8203;16911](https://github.com/can1357/oh-my-pi/pull/16911) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a macOS background right or middle double click pressing again after you clicked or typed in its app between its presses; it now stops there with `UserIntervened`, as a left click does ([#&#8203;16770](https://github.com/can1357/oh-my-pi/pull/16770) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed macOS background `axType`, `axKeyChord` and `axClick` sending input into an app you switched to while it was busy answering the element's window or bounds lookup; they now read your front app first and refuse with `UserIntervened`, as window input does. The refusal for an element that does not take focus now says no keys were sent, since the focus request reached the app ([#&#8203;16769](https://github.com/can1357/oh-my-pi/pull/16769) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed the shell output minimizer cutting short `git diff`, `git show`, `diff`, `jq` and `ssh` output that fits in 16 KB: it now arrives whole, and the patch summary, the 40-line `jq` cap and the remote head/tail cut apply only to larger output ([#&#8203;16589](https://github.com/can1357/oh-my-pi/pull/16589) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) #### [@&#8203;oh-my-pi/pi-tui](https://github.com/oh-my-pi/pi-tui) ##### Breaking Changes - `CoordinationOp` no longer includes `"jobs"`, which no tool has produced since `wait` and `proc://` replaced the `hub` tool ([#&#8203;16763](https://github.com/can1357/oh-my-pi/pull/16763) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Fixed a table's last rows (such as its bottom border) going blank in scrollback when its SIXEL chart was drawn while the reply kept streaming, with the chart painted over them ([#&#8203;16870](https://github.com/can1357/oh-my-pi/issues/16870)) - Fixed Tern MCP tool cards showing only a clipped one-line summary of the arguments; the call and result cards now include a folded `Args` section with the full arguments ([#&#8203;16765](https://github.com/can1357/oh-my-pi/issues/16765)) - Fixed pasting an API key or redirect URL into the setup wizard's provider sign-in prompt silently doing nothing ([#&#8203;16898](https://github.com/can1357/oh-my-pi/pull/16898) by [@&#8203;camiloeferrera](https://github.com/camiloeferrera)) - Fixed the usage dashboard averaging distinct quota buckets that share a label and window (Google Antigravity's Gemini and Gemini 4 Argon weeklies) into one row, which masked a drained bucket as "50% left"; buckets now group by quota identity, and shared Claude/GPT copies still merge ([#&#8203;16790](https://github.com/can1357/oh-my-pi/issues/16790)) ##### Added - Added `modelEnds` to `GroupedFileSection`: per file, the model-line index just past its last line, so a caller cutting the output can tell which files it shows whole ([#&#8203;16594](https://github.com/can1357/oh-my-pi/pull/16594) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added an optional `title` to `BtwHistoryRecord` and a `title` option to `BtwPanelComponent`: the `/btw` panel, history list and thread show it as the topic heading in place of the question, so a side command reads as `/sitrep` instead of its expanded template ([#&#8203;16815](https://github.com/can1357/oh-my-pi/pull/16815) by [@&#8203;wolfiesch](https://github.com/wolfiesch)) - Vim mode now supports `.` to repeat the last change, including the text typed in Insert or Replace mode, with Vim's count rules; `u` undoes a whole Insert session or `.` in one step ([#&#8203;16872](https://github.com/can1357/oh-my-pi/pull/16872) by [@&#8203;Shadorain](https://github.com/Shadorain)) - Added the `app.local.open` keybinding (default `Alt+G`) and its keyboard shortcuts row ([#&#8203;16873](https://github.com/can1357/oh-my-pi/pull/16873) by [@&#8203;Shadorain](https://github.com/Shadorain)) - Added `errorKind` to `EditToolDetails`, set on a failed edit ([#&#8203;16608](https://github.com/can1357/oh-my-pi/pull/16608) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) ##### Changed - Command and eval output panes no longer re-style and re-join their whole output on every frame, so a long command's output stops costing frame time while it sits in the transcript ([#&#8203;16779](https://github.com/can1357/oh-my-pi/pull/16779) by [@&#8203;yuzu-octopus](https://github.com/yuzu-octopus)) ##### Fixed - Fixed typo underlines changing when the cursor or selection splits a word ([#&#8203;16821](https://github.com/can1357/oh-my-pi/issues/16821)) - Fixed completed `vibe_wait` and `vibe_list` worker cards repeatedly entering scrollback as elapsed time advanced after partial retirement; completed walls now retain a static snapshot while in-flight waits continue updating. - Fixed resuming a session with a recorded tool-call path that cannot be turned into a link, which crashed the TUI while it rebuilt the context ([#&#8203;16806](https://github.com/can1357/oh-my-pi/pull/16806) by [@&#8203;laviRZ](https://github.com/laviRZ)) - Fixed the Agent Hub reordering its rows on every heartbeat while the session's saved subagents loaded, so no row could be selected until the load ended: a row's place is now fixed when the hub first shows it, an agent the load finds takes its place in the status/recency ranking, and every other new generation goes on top ([#&#8203;10524](https://github.com/can1357/oh-my-pi/issues/10524), [#&#8203;16952](https://github.com/can1357/oh-my-pi/pull/16952) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed the BTW history follow-up composer refusing pasted images; it now attaches them as `[Image #N]` markers and sends the ones whose marker stays in the draft ([#&#8203;16805](https://github.com/can1357/oh-my-pi/pull/16805) by [@&#8203;lemonleks](https://github.com/lemonleks)) - Fixed long URLs in fenced code blocks opening only their first visual line on ctrl/cmd-click; each wrapped fragment now carries the full OSC 8 hyperlink when the terminal supports it ([#&#8203;16740](https://github.com/can1357/oh-my-pi/pull/16740) by [@&#8203;OriginalByteMe](https://github.com/OriginalByteMe)) - Fixed the newest inline charts and images at the bottom of the screen showing as text placeholders while older ones stayed rendered once a session (or a resumed one) holds more than `tui.maxInlineImages` images ([#&#8203;16660](https://github.com/can1357/oh-my-pi/issues/16660)) - Fixed Markdown tables in the terminal ignoring their column alignment, so right-aligned and centered columns rendered flush left ([#&#8203;16658](https://github.com/can1357/oh-my-pi/pull/16658) by [@&#8203;adi-IL](https://github.com/adi-IL)) - Grep, Glob, Find, and AST Grep result headers wrap a long pattern instead of cutting it off, so the match/file counts and `truncated` warning stay visible ([#&#8203;16635](https://github.com/can1357/oh-my-pi/issues/16635)) #### [@&#8203;oh-my-pi/pi-utils](https://github.com/oh-my-pi/pi-utils) ##### Added - Added `parseHeifImageMimeType()`, which identifies HEIC, HEIF and AVIF images from a file header ([#&#8203;16612](https://github.com/can1357/oh-my-pi/pull/16612) by [@&#8203;will-bogusz](https://github.com/will-bogusz)) - Added `$whichAll()`, which returns every PATH match for a command in PATH order ([#&#8203;16824](https://github.com/can1357/oh-my-pi/issues/16824)) ##### Changed - Faster lenient JSONL session parsing when recovering past malformed lines ([#&#8203;16995](https://github.com/can1357/oh-my-pi/pull/16995) by [@&#8203;GTanger](https://github.com/GTanger)) ##### Fixed - `setProcessName()` no longer assigns `process.title` on Windows, where it overwrites the shared console title ([#&#8203;16842](https://github.com/can1357/oh-my-pi/issues/16842)) - Fixed inline code spans rendering flush against the surrounding text when a backslash preceded the closing backtick ([#&#8203;16972](https://github.com/can1357/oh-my-pi/pull/16972) by [@&#8203;akainth015](https://github.com/akainth015)) #### What's Changed - feat(ai): add opt-in Anthropic API version 2026-10-21 by [@&#8203;H4vC](https://github.com/H4vC) in [#&#8203;16706](https://github.com/can1357/oh-my-pi/pull/16706) - fix(coding-agent): stop gc --compress stalling on large JSON artifacts by [@&#8203;wolfiesch](https://github.com/wolfiesch) in [#&#8203;16754](https://github.com/can1357/oh-my-pi/pull/16754) - fix(providers): use MiMo V2.6 for Xiaomi login validation by [@&#8203;LiPu-jpg](https://github.com/LiPu-jpg) in [#&#8203;16727](https://github.com/can1357/oh-my-pi/pull/16727) - fix(catalog): correct OpenCode Step 5 reasoning efforts by [@&#8203;SheetHappiness](https://github.com/SheetHappiness) in [#&#8203;16669](https://github.com/can1357/oh-my-pi/pull/16669) - fix(tui): kept the newest transcript images live under the image budget by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16677](https://github.com/can1357/oh-my-pi/pull/16677) - fix(memory): removed reasoning from stage-one rollouts by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16681](https://github.com/can1357/oh-my-pi/pull/16681) - fix(collab): restore pending ask controls after host reconnect by [@&#8203;DAnaeto](https://github.com/DAnaeto) in [#&#8203;16682](https://github.com/can1357/oh-my-pi/pull/16682) - fix(agent): include session.compacting context in split-turn prefix summaries by [@&#8203;integrITsolutions](https://github.com/integrITsolutions) in [#&#8203;16707](https://github.com/can1357/oh-my-pi/pull/16707) - test: control Cowork response body lifetime by [@&#8203;jwaldrip](https://github.com/jwaldrip) in [#&#8203;16708](https://github.com/can1357/oh-my-pi/pull/16708) - fix(catalog): priced long-context GPT-6 and MiniMax requests by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16712](https://github.com/can1357/oh-my-pi/pull/16712) - fix(coding-agent): stopped flagging dd to write-only pseudo-devices by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16716](https://github.com/can1357/oh-my-pi/pull/16716) - test(tui): trust screen background fixture by [@&#8203;jwaldrip](https://github.com/jwaldrip) in [#&#8203;16717](https://github.com/can1357/oh-my-pi/pull/16717) - test(coding-agent): seed npm global layout fixture by [@&#8203;jwaldrip](https://github.com/jwaldrip) in [#&#8203;16722](https://github.com/can1357/oh-my-pi/pull/16722) - fix(mnemopi): shared unicode proper-noun extraction across gists and graph voice by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16724](https://github.com/can1357/oh-my-pi/pull/16724) - fix(natives): kept mermaid label widening off node border columns by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16735](https://github.com/can1357/oh-my-pi/pull/16735) - fix(natives): routed parallel mermaid edges apart by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16736](https://github.com/can1357/oh-my-pi/pull/16736) - fix(catalog): apply DeepSeek's 600-image vision limit by [@&#8203;Fun10165](https://github.com/Fun10165) in [#&#8203;16737](https://github.com/can1357/oh-my-pi/pull/16737) - fix(tui): link every wrapped fragment of URLs in fenced code blocks by [@&#8203;OriginalByteMe](https://github.com/OriginalByteMe) in [#&#8203;16740](https://github.com/can1357/oh-my-pi/pull/16740) - fix(coding-agent): append idle extension notices instead of rebuilding the transcript by [@&#8203;OriginalByteMe](https://github.com/OriginalByteMe) in [#&#8203;16744](https://github.com/can1357/oh-my-pi/pull/16744) - fix(catalog): priced gpt-5.6 sol long-context turns at the $8/$30 card by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16745](https://github.com/can1357/oh-my-pi/pull/16745) - fix(natives): guard UTF-8 char boundary in mermaid state transitions by [@&#8203;berney](https://github.com/berney) in [#&#8203;16749](https://github.com/can1357/oh-my-pi/pull/16749) - fix(natives): backtrack trailing dashes before spaceless mermaid arrows by [@&#8203;berney](https://github.com/berney) in [#&#8203;16750](https://github.com/can1357/oh-my-pi/pull/16750) - fix(browser): failed relay opens fast with chrome's attach refusal by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16751](https://github.com/can1357/oh-my-pi/pull/16751) - fix(coding-agent): tell Python-only eval sessions to await tool calls by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16578](https://github.com/can1357/oh-my-pi/pull/16578) - fix(coding-agent): name the write call when proc:// kill or mode is read by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16580](https://github.com/can1357/oh-my-pi/pull/16580) - fix(pi-shell): keep diff hunk lines starting with -- or ++ inside their hunk by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16588](https://github.com/can1357/oh-my-pi/pull/16588) - fix(coding-agent): retry a refused web read with the next user agent by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16593](https://github.com/can1357/oh-my-pi/pull/16593) - fix(coding-agent): tell the model when grep's per-file match cap trims a file by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16594](https://github.com/can1357/oh-my-pi/pull/16594) - fix(pi-builtins): follow a symlinked path operand in rg and fd by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16598](https://github.com/can1357/oh-my-pi/pull/16598) - fix(coding-agent): keep underscores inside words literal in converted Markdown by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16607](https://github.com/can1357/oh-my-pi/pull/16607) - fix(coding-agent): deliver a steered model mention's agent notice with the steer by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16614](https://github.com/can1357/oh-my-pi/pull/16614) - fix(browser): matched exact cdp target ids before page text by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16632](https://github.com/can1357/oh-my-pi/pull/16632) - fix(ai): folded anthropic root union tool schemas into the root object by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16633](https://github.com/can1357/oh-my-pi/pull/16633) - fix(tui): wrapped search tool result headers instead of truncating by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16636](https://github.com/can1357/oh-my-pi/pull/16636) - fix(task): try the remaining configured subagent models before the parent model by [@&#8203;Komzpa](https://github.com/Komzpa) in [#&#8203;16640](https://github.com/can1357/oh-my-pi/pull/16640) - fix(internal-urls): describe a running worker that has no transcript yet in history:// by [@&#8203;Komzpa](https://github.com/Komzpa) in [#&#8203;16645](https://github.com/can1357/oh-my-pi/pull/16645) - fix(task): merge isolated task branches when the parent has untracked baseline files by [@&#8203;Komzpa](https://github.com/Komzpa) in [#&#8203;16648](https://github.com/can1357/oh-my-pi/pull/16648) - fix(coding-agent): sync open documents before a project-wide LSP rename by [@&#8203;holny](https://github.com/holny) in [#&#8203;16649](https://github.com/can1357/oh-my-pi/pull/16649) - fix(coding-agent): treat /v1/models rows that advertise reasoning levels as reasoning-capable by [@&#8203;Komzpa](https://github.com/Komzpa) in [#&#8203;16650](https://github.com/can1357/oh-my-pi/pull/16650) - fix(coding-agent): write the migrated models.yml atomically with owner-only permissions by [@&#8203;adi-IL](https://github.com/adi-IL) in [#&#8203;16654](https://github.com/can1357/oh-my-pi/pull/16654) - fix(ai): surface a thrown credential resolver instead of reporting a missing key by [@&#8203;adi-IL](https://github.com/adi-IL) in [#&#8203;16655](https://github.com/can1357/oh-my-pi/pull/16655) - fix(coding-agent): scope /memory clear to the current project by [@&#8203;adi-IL](https://github.com/adi-IL) in [#&#8203;16657](https://github.com/can1357/oh-my-pi/pull/16657) - fix(tui): honor GFM column alignment in markdown tables by [@&#8203;adi-IL](https://github.com/adi-IL) in [#&#8203;16658](https://github.com/can1357/oh-my-pi/pull/16658) - fix(catalog): extend Devin model discovery timeout to 15s by [@&#8203;DusKing1](https://github.com/DusKing1) in [#&#8203;16668](https://github.com/can1357/oh-my-pi/pull/16668) - fix(ai): serve the nearest supported effort in the auth gateway by [@&#8203;codyw912](https://github.com/codyw912) in [#&#8203;16671](https://github.com/can1357/oh-my-pi/pull/16671) - Add port 9931 (the new default) to local llama cpp discovery by [@&#8203;bartbroere](https://github.com/bartbroere) in [#&#8203;16675](https://github.com/can1357/oh-my-pi/pull/16675) - fix(marketplace): prevented orphaned startup clones by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16697](https://github.com/can1357/oh-my-pi/pull/16697) - fix(coding-agent): sent each rewind report to the model once by [@&#8203;roboomp](https://github.com/roboomp) in [#&#8203;16703](https://github.com/can1357/oh-my-pi/pull/16703) - test(ai): narrow image clamp fixtures by [@&#8203;jwaldrip](https://github.com/jwaldrip) in [#&#8203;16709](https://github.com/can1357/oh-my-pi/pull/16709) - fix(coding-agent): cancel the outgoing session's background jobs on /resume by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16760](https://github.com/can1357/oh-my-pi/pull/16760) - fix(coding-agent): accept observed percentage meter totals by [@&#8203;alphastorm](https://github.com/alphastorm) in [#&#8203;16885](https://github.com/can1357/oh-my-pi/pull/16885) - fix(ai): count repeated anthropic strict schema parameters by [@&#8203;alphastorm](https://github.com/alphastorm) in [#&#8203;16887](https://github.com/can1357/oh-my-pi/pull/16887) - fix(ai): repair itemless arrays in codex tool schemas by [@&#8203;alphastorm](https://github.com/alphastorm) in [#&#8203;16886](https://github.com/can1357/oh-my-pi/pull/16886) - feat(coding-agent): run side: true file commands as /btw side questions by [@&#8203;wolfiesch](https://github.com/wolfiesch) in [#&#8203;16815](https://github.com/can1357/oh-my-pi/pull/16815) - feat(coding-agent): let print mode wake on background job results by [@&#8203;trukhinyuri](https://github.com/trukhinyuri) in [#&#8203;16690](https://github.com/can1357/oh-my-pi/pull/16690) - feat(tui): add Vim dot repeat to the prompt editor by [@&#8203;Shadorain](https://github.com/Shadorain) in [#&#8203;16872](https://github.com/can1357/oh-my-pi/pull/16872) - feat(coding-agent): open local:// files in external editor via /local and Alt+G by [@&#8203;Shadorain](https://github.com/Shadorain) in [#&#8203;16873](https://github.com/can1357/oh-my-pi/pull/16873) - fix(build): bump bundled Bun to 1.4.4 for CVE-2026-111497 and CVE-2026-91403 by [@&#8203;bse-ai](https://github.com/bse-ai) in [#&#8203;16865](https://github.com/can1357/oh-my-pi/pull/16865) - fix(cache): share OpenCode Go Task family affinity by [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1) in [#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) - feat(computer): open files, folders and URLs and reveal them in Finder with apps.open on macOS by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16403](https://github.com/can1357/oh-my-pi/pull/16403) - fix(coding-agent): keep ts-set-map fast on long Set lines and stop two false reminders by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16556](https://github.com/can1357/oh-my-pi/pull/16556) - feat(coding-agent): include account policy state in omp usage --json by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16581](https://github.com/can1357/oh-my-pi/pull/16581) - fix(coding-agent,agent): keep a subagent's report when a peer message lands as it finishes by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16583](https://github.com/can1357/oh-my-pi/pull/16583) - fix(coding-agent): stop read doc.pdf:page<N>.png returning an empty PDF viewer by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16585](https://github.com/can1357/oh-my-pi/pull/16585) - fix(coding-agent): keep a web page's native rendering when its short lines are tables and code by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16596](https://github.com/can1357/oh-my-pi/pull/16596) - fix(coding-agent): keep extension tools registered at a subagent's first prompt after it is revived by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16597](https://github.com/can1357/oh-my-pi/pull/16597) - fix(task): inline subagent reports up to 11.5k characters instead of cutting them at 5k by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16599](https://github.com/can1357/oh-my-pi/pull/16599) - feat(edit): record why an edit failed and count it in /session by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16608](https://github.com/can1357/oh-my-pi/pull/16608) - feat(coding-agent): show HEIC and AVIF photos in read instead of refusing them as binary by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16612](https://github.com/can1357/oh-my-pi/pull/16612) - fix(coding-agent): describe power.sleepPrevention as held only during turns by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16762](https://github.com/can1357/oh-my-pi/pull/16762) - refactor(coding-agent,tui): drop the unused jobs op from buildJobResult by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16763](https://github.com/can1357/oh-my-pi/pull/16763) - docs(coding-agent): say what clears an advisor's quota pause by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16766](https://github.com/can1357/oh-my-pi/pull/16766) - feat(coding-agent): add --no-context-files to start without AGENTS.md and other context files by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16768](https://github.com/can1357/oh-my-pi/pull/16768) - fix(natives,computer): read the macOS front app before el.type, el.press and el.click ask the target app by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16769](https://github.com/can1357/oh-my-pi/pull/16769) - fix(natives): stop a macOS background right or middle multi-click at the user's input by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16770](https://github.com/can1357/oh-my-pi/pull/16770) - feat(session): add --warn-cost and --max-cost to cap a session's spend by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16803](https://github.com/can1357/oh-my-pi/pull/16803) - fix(catalog): read Devin context windows from model info by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16905](https://github.com/can1357/oh-my-pi/pull/16905) - fix(catalog): identify Devin requests as CLI 3000.11.205 by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16906](https://github.com/can1357/oh-my-pi/pull/16906) - fix(browser): wait for the page a click navigates to before the next call by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16907](https://github.com/can1357/oh-my-pi/pull/16907) - fix(coding-agent): keep a headless computer run going after control.acquire answers no-ui by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16909](https://github.com/can1357/oh-my-pi/pull/16909) - fix(natives): open Contacts and Messages by name on macOS instead of calling them ambiguous by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16911](https://github.com/can1357/oh-my-pi/pull/16911) - fix(coding-agent): say what to call when computer.window finds no window for an app, or gets no selector by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16912](https://github.com/can1357/oh-my-pi/pull/16912) - fix(natives): name macOS ax() text fields that have no label by their placeholder by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16915](https://github.com/can1357/oh-my-pi/pull/16915) - fix(natives): tell an agent to click() a macOS element that has no press action by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16916](https://github.com/can1357/oh-my-pi/pull/16916) - fix(pi-shell): end the git guard's conflict exemption with the conflict by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16919](https://github.com/can1357/oh-my-pi/pull/16919) - feat(coding-agent,natives): exclude files and folders from grep with `!glob` path entries by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16920](https://github.com/can1357/oh-my-pi/pull/16920) - feat(coding-agent,browser-relay): keep the relay extension current after an omp upgrade by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;15105](https://github.com/can1357/oh-my-pi/pull/15105) - fix(lsp): release language server memory by closing documents unused for 5 minutes by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;15418](https://github.com/can1357/oh-my-pi/pull/15418) - fix(ai): keep a declining Claude model's tool calls out of the turn after a fallback handoff by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16250](https://github.com/can1357/oh-my-pi/pull/16250) - fix(ai): sign Factory Droid logins without an organization claim into the account's organization by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16257](https://github.com/can1357/oh-my-pi/pull/16257) - fix(ai): keep a rotated OAuth refresh token when the exchange outlasts the caller's budget by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16291](https://github.com/can1357/oh-my-pi/pull/16291) - feat(ai,catalog): use the 1h prompt cache and cache warming on Factory Droid Claude models by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16296](https://github.com/can1357/oh-my-pi/pull/16296) - feat(ai,catalog): generate images through a Factory Droid login by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16316](https://github.com/can1357/oh-my-pi/pull/16316) - fix(coding-agent): keep a replaced file's CRLF line endings and BOM in write by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16575](https://github.com/can1357/oh-my-pi/pull/16575) - fix(pi-shell): keep diffs, jq results and ssh output whole up to 16 KB in the minimizer by [@&#8203;will-bogusz](https://github.com/will-bogusz) in [#&#8203;16589](https://github.com/can1357/oh-my-pi/pull/16589) #### New Contributors - [@&#8203;LiPu-jpg](https://github.com/LiPu-jpg) made their first contribution in [#&#8203;16727](https://github.com/can1357/oh-my-pi/pull/16727) - [@&#8203;SheetHappiness](https://github.com/SheetHappiness) made their first contribution in [#&#8203;16669](https://github.com/can1357/oh-my-pi/pull/16669) - [@&#8203;DAnaeto](https://github.com/DAnaeto) made their first contribution in [#&#8203;16682](https://github.com/can1357/oh-my-pi/pull/16682) - [@&#8203;integrITsolutions](https://github.com/integrITsolutions) made their first contribution in [#&#8203;16707](https://github.com/can1357/oh-my-pi/pull/16707) - [@&#8203;Fun10165](https://github.com/Fun10165) made their first contribution in [#&#8203;16737](https://github.com/can1357/oh-my-pi/pull/16737) - [@&#8203;OriginalByteMe](https://github.com/OriginalByteMe) made their first contribution in [#&#8203;16740](https://github.com/can1357/oh-my-pi/pull/16740) - [@&#8203;berney](https://github.com/berney) made their first contribution in [#&#8203;16749](https://github.com/can1357/oh-my-pi/pull/16749) - [@&#8203;codyw912](https://github.com/codyw912) made their first contribution in [#&#8203;16671](https://github.com/can1357/oh-my-pi/pull/16671) - [@&#8203;bartbroere](https://github.com/bartbroere) made their first contribution in [#&#8203;16675](https://github.com/can1357/oh-my-pi/pull/16675) - [@&#8203;trukhinyuri](https://github.com/trukhinyuri) made their first contribution in [#&#8203;16690](https://github.com/can1357/oh-my-pi/pull/16690) - [@&#8203;rafalopilowski1](https://github.com/rafalopilowski1) made their first contribution in [#&#8203;16988](https://github.com/can1357/oh-my-pi/pull/16988) **Full Changelog**: <https://github.com/can1357/oh-my-pi/compare/v18.12.6...v18.13.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xODYuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE4Ni4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
chore(deps): update dependency can1357/oh-my-pi to v18.13.0
All checks were successful
Update hashes / update-hashes (pull_request) Successful in 2m9s
d31b95dbee
renovate-bot scheduled this pull request to auto merge when all checks succeed 2026-10-26 21:04:28 +00:00
renovate-bot deleted branch renovate/can1357-oh-my-pi-18.x 2026-10-26 21:06:34 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mandlm/omp-nix!239
No description provided.