chore(deps): update dependency can1357/oh-my-pi to v18.13.0 #239
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/can1357-oh-my-pi-18.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
18.12.6→18.13.0Release Notes
can1357/oh-my-pi
v18.13.0Compare Source
@oh-my-pi/pi-agent-core
Added
SummaryOptions.remotePromptCacheKeyandremoteCompactionPolicyModel()so remote compaction can carry a cache key gated against the request it actually sends (#16988 by @rafalopilowski1)Changed
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
--max-timevalues above about 596 hours (such as600h) aborting the first turn with "Deadline exceeded" right away (#17054 by @trukhinyuri)session.compactingcontext out of the turn-prefix summary (#16707 by @integrITsolutions)@oh-my-pi/pi-ai
Breaking Changes
OpenAIRequestSetupModelnow requires the catalog-policy fields (api,reasoning), so callers building a reduced model forresolveOpenAIRequestSetupmust pass them (#16988 by @rafalopilowski1)Added
PI_ANTHROPIC_API_VERSION=2026-10-21to 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)x-opencode-session, so Task siblings, forks and their parent reuse one gateway cache; custom providers declaringproviderType: "opencode-go"get the same OpenCode headers (#16988 by @rafalopilowski1)Changed
constvalue to a tool's ownenumarray (#16780 by @yuzu-octopus)cascade_id,root_cascade_id,request_id,used_non_gemini_model), and image model lookup sends the account's project (#17012 by @apoc)model_enumlabel, 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)Accept-Encoding: gzipwithout an explicitAccept, and no longer send the Claude thinking beta header to Claude 5.5 (#17012 by @apoc)Fixed
thinkingblock 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)message_start, substituting an in-banderrorframe, being reported as a completed-turn provider failure instead of a retryable stream truncation (#16990 by @Maziar123)/wham/usagereturnsrate_limit: nullfor them, and their per-user credit cap (spend_control.individual_limit) is now reported as aSpend cap (credits)limit that also gates chat requests when no plan windows exist (#16973 by @DusKing1)unsupported_native_inflight_messagewhen 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)Unsupported model mimo-v2.5after the V2.5 retirement (#16727 by @LiPu-jpg)ttp-Token Plan keys with401 Invalid API Key; they now validate against the regional Token Plan hosts liketp-keys (#17045)401 Invalid API Keywhen the key's own region rejected the probe for another reason; that region's actual error is now shown (#17045)Schemas contains too many optional parameters(#16887 by @alphastorm)array schema must define itemswhen a tool or a task'soutputSchemadeclares an array withoutitems(#16886 by @alphastorm)anyOf/oneOf/allOfof objects being sent as an empty closed object that only accepts{}; variant properties now fold into the rootinput_schema(#16630)invalid_grantafter 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)generate_imageruns 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)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)google-generative-ai,google-vertex) requests failing withThe operation timed out.after ~5 minutes of slow prefill even whenproviders.streamFirstEventTimeoutSecondsallowed longer (#16991)model.loopGuardsettings being ignored for providers routed through the shared option mapping, such asopenai-responsesmodels frommodels.yml(#11129, #16963 by @SipgateSteffenPaul)AGENTS.md) contains an HTML comment (#17044 by @trukhinyuri)google-generative-ai,google-vertex,google-gemini-cli/Antigravity) running out of output on smallmaxTokensrequests with reasoning on, ending with thinking only and no answer; the requestedmaxTokensnow leaves room for thinking on top, as on other providers (#16943 by @Mouriya-Emma)@oh-my-pi/browser-relay
Added
@oh-my-pi/pi-catalog
Breaking Changes
task-sibling-prompt-cacheaxis toshared-prompt-cache(catalog fieldsharedPromptCache); it now also covers forks and explicit prompt-cache keys (#16988 by @rafalopilowski1)Added
requiresThinkingPresencemodel compat (KDLrequires-thinking-presence) for Anthropic-compatible endpoints that reject a thinking-mode request whose current turn has an assistant message without athinkingblock (#16739 by @lz37)resolveAnthropicApiVersion(): Anthropic model discovery sends API version 2026-10-21 to the official API whenPI_ANTHROPIC_API_VERSION=2026-10-21is set (#16706 by @H4vC)muse-spark-1.3-contributor,muse-spark-1.2-contributor,gpt-5.6-luna,gpt-6-luna,grok-4.6(Responses) anddeepseek-v4-pro,omen-alpha(Completions) opt into shared prompt caching; lanes that warmed under any key stay off (#16988 by @rafalopilowski1)CatalogPolicyInputsso catalog-policy lookups accept a reduced model view (#16988 by @rafalopilowski1)bundle="always"seed row is missing from the bundledmodels.json, so a stale-snapshot regeneration can no longer silently drop an engine the wayweb/deepseekwas lost in 18.12.2 (#16610, #17053 by @ouyangjiahong26)Changed
http://127.0.0.1:8080, thenhttp://127.0.0.1:9931) (#16675 by @bartbroere)aicodescope like the official client; existing logins keep working, and the new scope applies at the next/login(#17012 by @apoc)User-Agentnow reports the native Antigravity build for the host OS (Linuxlinux/amd64, Windowswindows/amd64) instead of always claiming macOSdarwin/arm64(#17012 by @apoc)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
gemini-4-argonrequests failing with an unsupported protocol; discovered models now use native Gemini routing and low, medium, or high thinking (#17031)ttp-Token Plan keys to the pay-as-you-go host, which rejects them (#17045)openaiandopenai-codex) being priced at the retired $10/$45 long-context card instead of $8/$30 (#16742)baseUrlkeeps the conservative floor (vision limits; #16737 by @Fun10165)-1mlanes, 262K for SWE-2), and GPT and Grok models with a long-context price tier start at that tier's threshold, with/extended-context onopening their full window (#16905 by @will-bogusz)extended-cache-ttl-betacompat axis so a route can opt out of theextended-cache-ttl-2025-04-11beta (Factory Droid does), and prompt-cache lifetimes and long-retention support for Factory Droid's Claude models (#16296 by @will-bogusz)imagerole's choices, listed only while your Factory organization allows image generation and that model (#16316 by @will-bogusz)mode: decisionsbeing listed as chat models; they now route toopenai-decisionsas judge models (#16939)k3,k3-256k) pricing to include Kimi's $3/MTok cache-write rate, matching the Moonshot APIkimi-k3card (#16508, #16903 by @eggpeat)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
snapshotJobsno longer acceptsincludeResults, andbuildJobResultaccepts only the"wait"and"cancel"ops; the"jobs"op has had no caller sincewaitandproc://replaced thehubtool (#16763 by @will-bogusz)Added
omp -p --wait-async(settingasync.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)side: truefrontmatter (including Codex and OpenCode command directories) run as/btwside questions in the TUI, with or without arguments: they answer off the transcript and never steer a running turn. The panel and/btwhistory title them by the typed command (/sitrep); the title is kept in anentry-<id>.titlesidecar so older builds can still read the history. Other modes expand them as ordinary prompts (#16815 by @wolfiesch)compat.requiresThinkingPresencetomodels.ymloverrides, so a gateway model group whose strict member validates thinking replay can pad a turn a lax member answered without reasoning (#16739 by @lz37)PI_ANTHROPIC_API_VERSION=2026-10-21; web search omitstemperatureunder that version (#16706 by @H4vC)/local(orAlt+G, remappable asapp.local.open) opens a picker of the session'slocal://files and edits the chosen one in place in$VISUAL/$EDITOR;/local <name>opens a file directly with name completion (#16873 by @Shadorain)--no-context-filesto start a session withoutAGENTS.md,CLAUDE.mdor other context files, including those of--add-dirroots and in subagents (#16768 by @will-bogusz)Changed
xd://devices rather than relying ondumpTools(#16864 by @michaeltrefry)readadds to a PDF whose pages have no extractable text (a scan) now points at the:page<N>.pngselector, which returns the page as an image, instead of the browser prelude (#16585 by @will-bogusz)read doc.pdf:page<N>.pngrenders 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)--warn-costand--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 RPCget_session_stats, aseditRejections) lists your failed edits by why they were refused (unseen lines, stale tag, parse error, …), and each failed edit records that reason asdetails.errorKindin the session file (#16608 by @will-bogusz)grep: apathentry 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)waitandread 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)Accept-Encoding: gzip, no explicitAccept) (#17012 by @apoc)agent://<id>or act on without its ending (#16599 by @will-bogusz)yieldreaching its parent andagent://as its short reply to a peer message oragent://allbroadcast (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)ts-set-maprule stalling tool-call streaming on a long single-lineSetvalue (5 s at 20,000 characters) and firing when the literal array only feeds a computed argument such asnew Set(["a", "b"].map(normalize));ts-import-typeno longer fires onimport("x").thenwritten with a non-breaking space or line separator before the call (#16556 by @will-bogusz)ida-mcp'sida_*tools), which also made its first request after waking miss the prompt cache; extensions see the revive as abefore_agent_startwith the newreason: "revive"(#16597 by @will-bogusz)readshows 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)readof 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 --jsonnow includes each policy-routed account's priority, reserve and routing state (eligible,inside-reserve,exhaustedorunknown) as apolicyobject, matching the policy line in the text view (#16581 by @will-bogusz)generate_imagecan 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 theimagerole (#16316 by @will-bogusz)computer.apps.open(path, { app?, reveal? })call instead of a dozen steps driving Finder by hand (#16403 by @will-bogusz)~/.omp/browser-relay/extensionis rewritten and reloads itself once no omp session is using the relay (#15105 by @will-bogusz)browser.openresults when the Chrome extension was installed by an older omp, namingomp browser-relay installand a reload (#15105 by @will-bogusz)@pathfile mention reaching a text-only model as[image omitted: …]withimages.describeForTextModelsenabled; they now get thevisionrole description like pasted images (#16853)browser.open({ ignore_https_errors: true })still failing with certificate errors such asnet::ERR_CERT_AUTHORITY_INVALIDon the shared Chromium and onapp.cdp_urlbrowsers; the override now lasts until the tab is closed (#16930)ignore_https_errorsthrough the Chrome relay now fails up front, explaining that Chrome's extension debugger API cannot ignore certificate errors and pointing toapp.relay: false, instead of failing withSecurity.setIgnoreCertificateErrors wasn't found(#16930)agent://on the previous result instead of delivering the fresh answer (#16746)read proc://<agent>andwrite proc://<agent>/killanswering "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)web_searchresults as the preferred provider's: the tool result now notes which provider answered and why the earlier ones failed (#16948 by @BAKocska)power.sleepPreventionsetting 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)/advisor, a config reload or a restart), not after a cooldown (#16766 by @will-bogusz)computertool'scomputer.window({ app })failing for an app with no open window without saying what to do; the error now names thecomputer.apps.open(…)call that launches it (on macOS it also shows a window of a running app that has none), andcomputer.window()with no argument asks for a window id or filter instead of listing windows that "match undefined" (#16912 by @will-bogusz)computertool prompt leavingel.selectTextout of the element helpers; it now says a followingel.typeon that element replaces the selection (#16769 by @will-bogusz)Fixed
display_name,context_window, andinput_modalitieswhen a model list nests them undermetadata, so codex-lb-style gateways surface the advertised name, window, and image input instead of the raw id and defaults. (#17010 by @adi-IL)artifact://link the truncation footer advertises now reads the in-memory copy instead of failing with "No session - artifacts unavailable". (#17009 by @adi-IL)ompbinaries 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)computerruns in subagents andomp -pstopping at their firstcontrol.acquire: they now keep working through background window input and report only a step that needs foreground control (#16909 by @will-bogusz)bash.gitGuardon, a repository that once finished a conflicted rebase no longer counts as mid-conflict forever, which had letgit checkout,switchandrestorethrough; branch switches such asgit checkout -B <branch> <commit>stay refused during a real merge or rebase too, abbreviated options such asgit reset --haare refused like the full ones, andgit stash createis allowed (#16919 by @will-bogusz)Execution context was destroyedorCannot find context with specified id, and afillcould land on the old form; they now wait for the new page (#16907 by @will-bogusz)readline selectors using different coordinates from URLgrepwhen the response includes transport headers (#16877).writeto a SQLite row ignoring the database's declared foreign keys: orphan inserts and updates now fail,ON DELETE RESTRICTblocks the delete, andON DELETE CASCADEremoves dependent rows (#16999)/mcp addwizard putting it in the hidden chat draft instead of the URL field (#16975).omp --from-claudekeeps the last real model when Claude records a synthetic API error, and does not try to restore a synthetic-only placeholder (#16785).用户点名…); they now keep the full preview budget (#17070)blocked: covered bynaming the button's own slotted content; real overlays are still refused (#16958).xlsxfiles rewriting numeric-looking text cells: long IDs like12345678901234567890no longer round (and collide), and text such as00123keeps its leading zeros (#16831)alias ls='eza --icons') leaking into the bash tool;ls,cat,grepand the other core tools now run the real binaries (#17067)collab.autoStartshares the moved session (#16935)defaultmodel whenmodelRoles.smolis unset and sending background requests to the built-in smol chain (e.g.claude-haiku-5-5) instead of the model/modelsshows for SMOL (#16970)models.ymldiscovery providers with anapiKey(and noauthHeader: true) showing 0 models in/modelsand ctrl+p right after startup despite a cached catalog; cached models now load immediately (#16965)temperatureto Claude Haiku 5.5, avoiding HTTP 400 failures (#16986)fillTextafter callingcanvas.getContext("2d")repeatedly (#16879)edit, or outside OMP before a rename) until the language server restarted (#16880)omp plugin upgradefailing on Windows withEPERM: operation not permitted, symlinkwhen the installed plugin was replaced byomp plugin link; a failed upgrade now restores the link as a junction (#16844)omp plugin upgrade a@m b@m c@mnow upgrades every specified plugin instead of silently skipping targets after the first (#16826)tab.fill()/tab.type()(andframe.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)tools.approval.<tool>: promptpolicy on a tool mounted as anxd://device asking the same approval question twice for onewrite xd://<tool>call (#17039)ResourceNotFoundso clients can offersession/loadrecovery (#16889).mode: decisionsmodel groups being offered as chat models instead of judge models, including for customdiscovery.type: litellmproviders (#16939)instructionsreturned by MCP servers declared insession/newnow reach the model under "## MCP Server Instructions", as they do for.mcp.jsonservers (#16882)ompinstead of the session title after a JS eval worker oromp browser-relayran in the same console; omp no longer retitles the console from child processes and reclaims the title when another process replaces it (#16842)evalreporting the backend unavailable when the firstpythonon PATH is broken (e.g. a mise shim with no version set) even though a workingpython/python3sits further down PATH; every PATH match is now probed, and the error reports bounded probe failures with home paths shortened (#16824)errorframe for the missing terminal event — ending instead of continuing from the partial answer (#16990 by @Maziar123)/skill:arguments now registerm<N>agents and appear with the skill prompt instead of reaching the model as literal^selectors (#16818)omp plugin upgrade,install --force, oruninstallrun outside a project deleting the cached plugin a project-scope install in that project still links to (#16827)todocall now re-arms the per-turn budget instead of waiting for the next user prompt (#16962 by @omertahaoztop)returned no sourcesor falling back to engines that cannot read X posts (#16947 by @BAKocska)/deleteleaving an empty zero-turn session on disk when you quit before sending a message (#11303, #16798 by @NewtonChutney)extensions/directory plus--extensionwith the real path; discovery now dedupes extension paths by real file (#16788 by @wolfiesch)writerefusal in read-only subagents saying filesystem writes are unavailable; it now gives the on-disk path oflocal://files, so the agent can tell its caller where its report is (#17023 by @sjawhar)waitsaying 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)omp usagenow shows the Codex credit spend cap for credit-billed ChatGPT Business/Enterprise seats (previouslyno limits reported), and rounds fractional credit amounts to two decimals (#16973 by @DusKing1)bash,evalortaskarguments: 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)evaltool description so JS sessions see which helpers needawait(#16808 by @bigHippoZz)evalagent and judge docs so JS sessions see which handle, pool and batch calls needawait, and Python sessions with JS enabled seeagent()'sschema_modekeyword instead of JS'sschemaMode(#16810 by @bigHippoZz)retry.fallbackChainsentry untried once the conversation carried signed thinking; the refusal now moves to the next model in the chain (#17024 by @sjawhar)echo hi; make 2>build.err, and sendingcat > file <<'EOF'toread(#17022 by @sjawhar)MALFORMED_RESPONSE/UNEXPECTED_TOOL_CALLerrors inject a corrective tool-call reminder instead of replaying the identical cached prefix (#17063 by @martijnberger)/tandropping 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/tanstarts, so the next message cannot send them again, and come back with the draft when it cannot start (#16805 by @lemonleks)/btwdropping the images attached to its question: the side request now sends them, and like/tanthey leave the composer once it starts and come back with the draft when it cannot; BTW history keeps each question's images (imageson 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,/handoffand/cleanseno longer run without the images attached to their draft: they keep the draft and say they take text only (#16805 by @lemonleks)#1(#16805 by @lemonleks)/plan,/goal,/tan,/btwand others): the draft now comes back with its images (#16805 by @lemonleks)PUTwhose 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)omp gc --compressexiting 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)/resumeinto another session now cancels the previous session's background jobs, as/newdoes, instead of delivering their results into the resumed session and starting a turn there (#16760 by @will-bogusz)models.ymlreadable 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)/memory clearin one project deleting the memory state of every other project that shares the same agent directory (#16657 by @adi-IL)/usagereport 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)readof 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)greptrimming 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 asN+when every file was searched (#16594 by @will-bogusz)patch does not apply: <path> does not existwhen 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)reasoning_extractionrefusals and lost memories (#16679).rewindreport being sent to the model twice (as aBranch-return summaryand as theCheckpoint called and rewoundreport); it now appears once per checkpoint/rewind cycle, while the transcript still shows the branch summary (#16702)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)dd … of=/dev/null(and other write-only sinks such as/dev/stdoutand/dev/fd/1) triggering the unoverridable critical-command approval prompt;ddto real devices like/dev/sdastill prompts (#16714)reads, site-specific web scrapers (Stack Overflow, MDN, GitLab, …) and the browser's readable page extraction writing identifiers assnake\_caseorDOCX\_NEEDLE\_1(filtered plain text dropped the underscores): underscores inside words now stay literal (#16607 by @will-bogusz)^in a message sent while the agent is working no longer splits it in two: the model learns the newm<N>agent and reads your message in the same turn, instead of replying to the announcement alone first (#16614 by @will-bogusz)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)openai-models-listdiscovery leaving models that advertise their own reasoning levels (supported_reasoning_levelsanddefault_reasoning_level, top-level or undermetadataas codex-lb sends them) non-reasoning when the id is absent from the bundled catalog, so requests never carriedreasoning_effort(#16650 by @Komzpa)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)app.targetrejecting CDP page ids, including freshabout:blankpages, and added ids to unmatched-target listings (#16619)proc://<id>/killorproc://<id>/modeanswering only "writable only", so agents often moved on with the job still running; the error now names thewritecall that cancels the job or sets the mode, with the real id (#16580 by @will-bogusz)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)evaltool telling sessions with only the Python runtime to calltool.<name>(args)withoutawait, which returns a coroutine and never runs the tool (#16578 by @will-bogusz)/compactand 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)omp auth-broker servetoken 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)read doc.pdf:page<N>.pngreturning the PDF viewer's empty grey frame instead of the page on about half of reads (#16585 by @will-bogusz)writeturning a CRLF file into LF and dropping its UTF-8 BOM when it replaces the file; it now keeps both, aseditdoes (#16575 by @will-bogusz)@oh-my-pi/pi-mnemopi
Fixed
Hà Nội) or names of three or more words, and Vietnamese words liketôibeing stored as the participanti(#16723)@oh-my-pi/pi-natives
Added
EditStore.applyoutcome carrieserrorKind, a stable class of the refusal (unseen_lines,stale_tag,parse, …), andeditErrorKinds()lists every class (#16608 by @will-bogusz)excludetogrep()options: glob patterns of files and folders to leave out of a directory search; a matched folder is not walked (#16920 by @will-bogusz)openApplicationalso opens a file, folder or URL in its default application orApplicationOpenOptions.app, andrevealshows a file or folder selected in Finder; other platforms returnUnsupportedfor a URL,apporreveal(#16403 by @will-bogusz)psreporting an unsupported long option such as--forestasunsupported option '--'; it now names the option, and every unsupported-option error says that a systemps, if installed, may support more options when run by its full path (#17018 by @sjawhar)kill %Non 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)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=Xsuch as-t==is rejected as two characters (#17017 by @sjawhar)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 toclick()it instead (#16916 by @will-bogusz)Changed
Fixed
ax()andfind()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)ruff check --output-format fulloutput counting code-frame lines with function calls, such as14 | assert skill.read() == …, as diagnostics and files, which inflated theN diagnostics in M filessummary (#16837)pscrashing the shell on a non-ASCII character in an option cluster such asps -é; it now reportsunsupported option '-é'like any other unknown option (#17019 by @sjawhar)el.typeandel.presssent to the rename field were refused, and so were clicks in its window while Finder was your frontmost app (#16910 by @will-bogusz)stateDiagram-v2lines where>follows a multibyte character (#16749 by @berney)rgandfdon macOS and Linux finding nothing under a path that is a symlink to a directory, such as/tmpor/etcon macOS or a symlinked skill folder; like ripgrep and fd, they now search the folder the link points to (#16598 by @will-bogusz)git diff,git showanddiff -uoutput 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)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)renderMermaidAsciistarting an edge one cell away from its node's side when a labeled sibling edge leaves the same node from another side (#16730)A-->B,B-.->C,C:::cls-->D) into the preceding node ID or class name (#16750 by @berney)openApplication("Contacts")andopenApplication("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)UserIntervened, as a left click does (#16770 by @will-bogusz)axType,axKeyChordandaxClicksending 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 withUserIntervened, 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)git diff,git show,diff,jqandsshoutput that fits in 16 KB: it now arrives whole, and the patch summary, the 40-linejqcap and the remote head/tail cut apply only to larger output (#16589 by @will-bogusz)@oh-my-pi/pi-tui
Breaking Changes
CoordinationOpno longer includes"jobs", which no tool has produced sincewaitandproc://replaced thehubtool (#16763 by @will-bogusz)Argssection with the full arguments (#16765)Added
modelEndstoGroupedFileSection: 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)titletoBtwHistoryRecordand atitleoption toBtwPanelComponent: the/btwpanel, history list and thread show it as the topic heading in place of the question, so a side command reads as/sitrepinstead of its expanded template (#16815 by @wolfiesch).to repeat the last change, including the text typed in Insert or Replace mode, with Vim's count rules;uundoes a whole Insert session or.in one step (#16872 by @Shadorain)app.local.openkeybinding (defaultAlt+G) and its keyboard shortcuts row (#16873 by @Shadorain)errorKindtoEditToolDetails, set on a failed edit (#16608 by @will-bogusz)Changed
Fixed
vibe_waitandvibe_listworker cards repeatedly entering scrollback as elapsed time advanced after partial retirement; completed walls now retain a static snapshot while in-flight waits continue updating.[Image #N]markers and sends the ones whose marker stays in the draft (#16805 by @lemonleks)tui.maxInlineImagesimages (#16660)truncatedwarning stay visible (#16635)@oh-my-pi/pi-utils
Added
parseHeifImageMimeType(), which identifies HEIC, HEIF and AVIF images from a file header (#16612 by @will-bogusz)$whichAll(), which returns every PATH match for a command in PATH order (#16824)Changed
Fixed
setProcessName()no longer assignsprocess.titleon Windows, where it overwrites the shared console title (#16842)What's Changed
!globpath entries by @will-bogusz in #16920New Contributors
Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.12.6...v18.13.0
Configuration
📅 Schedule: (UTC)
🚦 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.
This PR has been generated by Mend Renovate CLI.