fix(deps): update all non-major dependencies (minor) - #1956
Conversation
Signed-off-by:
|
|
You do not have enough credits to review this pull request. Please purchase more credits to continue. |
|
Warning Review limit reached
More reviews will be available in 59 minutes and 39 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates several dependencies across the project's configuration files. In package.json and bun.lock, @oh-my-pi/pi-coding-agent and @oh-my-pi/pi-natives are upgraded to version 16.1.7, and droid is upgraded to 0.153.1. In pyproject.toml, mistral-vibe is bumped to >=2.17.1 and fastapi[standard] is bumped to >=0.138.0. I have no feedback to provide on these changes.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Mesa DescriptionTL;DRUpdates several non-major dependencies (minor and patch versions) across JavaScript/TypeScript and Python packages to bring in performance optimizations, bug fixes, and new features. What changed?
Description generated by Mesa. Update settings |
This PR contains the following updates:
^16.0.6→^16.1.7^16.0.6→^16.1.7^0.152.0→^0.153.1>=0.137.1→>=0.138.0>=2.16.1→>=2.17.1Release Notes
can1357/oh-my-pi (@oh-my-pi/pi-coding-agent)
v16.1.7Compare Source
Fixed
models.ymlproviders rejecting thecompat.supportsImageDetailOriginaloverride, so Responses-compatible proxies that reject snapcompact's native-resolution image hint can clamp frames todetail: "auto". (#3092)v16.1.6Compare Source
Added
/loopcommands (e.g.,/loop 10 fix the bug)/loop(e.g.,1h30m)v16.1.5Compare Source
Changed
AgentSession.nextToolChoice()method. The per-turn tool-choice directive now flows solely throughnextToolChoiceDirective()(which folds in the hard-choice dequeue plus active-tool filtering as a private helper), eliminating the dual entry point that let callers consume the queue while bypassing the soft pending-preview lifecycle. The underlyingToolChoiceQueue.nextToolChoice()is unchanged.v16.1.4Compare Source
Fixed
omp benchandomp dry-balancefailing to resolve models from extension providersomp benchruns that return no output or tokenscacheRead 0, so a long-running first tool call (e.g.gh run watch) that outlived the provider's cache TTL surfaced a spurious⊘ cache missdivider right under the opening message. The marker now requires the previous turn to have actually read a warm prefix, so it flags only a demonstrably working cache going cold — and collapses a run of consecutive cold turns to a single marker at the moment the cache broke.omp benchandomp dry-balancefailing to resolve models from extension-registered providers (pi.registerProvider(...)). Both commands build a one-shotModelRegistrythat previously only knew built-in catalog providers, so aprovider/modelselector for a provider contributed by an extension under~/.omp/agent/extensions/errored with "Model not found". A newloadCliExtensionProvidershelper loads the session's extensions, drains their provider registrations into the registry, and discovers dynamic provider catalogs before resolving selectors — mirroring the interactive session andomp modelspaths.omp benchnow reports a run that streamed no content and measured no output tokens as a failure ("provider returned no output") instead of a misleading green check withtokens 0 / TPS 0.0.resolvefinds no runnable handler, and forwarded the missingpeekPendingInvokerandclearPendingInvokershooks on the production session so staged previews actually reach the resolve tool and the gate drains on dispatch failure. (#3061)Settings.init(), so early editor rendering falls back to plain text instead of crashing. (#3064)omp plugin install github:owner/reposilently keeping the user on a stale commit when re-run on an already-installed GitHub plugin.bun install <spec>respects the existingbun.lockpin when the spec is unchanged and never re-resolves the remote ref, so the manager now follows a git re-install withbun update <name>to refresh the lockfile pin against the upstream. The install transaction also snapshotsbun.lockup front and routes feature validation, extension validation, and runtime-config save through one rollback path so a failed install can never leave the rejected commit pinned in the active tree or lockfile. First-time installs are unaffected. (#3063)v16.1.3Compare Source
Changed
tokencommand to correctly display active Perplexity OAuth tokens when presentFixed
omitMaxOutputTokenspolicy when fresh cached provider discovery rows replace Ollama Cloud catalog models, so stalemodels.dbentries cannot re-enable context-window-sizednum_predictvalues. (#2984)provider.appendOnlyContext: autoonly recognized DeepSeek and Xiaomi as prefix-cache providers. The auto-detect now enables append-only mode forollama,ollama-cloud,lm-studio,llama.cpp, and any baseUrl resolving to a loopback/RFC1918/.localhost, so the system prompt + tool catalogue + prior-turn message bytes stay byte-stable across turns and llama.cpp's KV-cache prefix reuse can hit (#3033).Bun.spawnsubprocess soonnxruntime-nodeandfastembednever load into the main agent process. Previouslymemory.backend: mnemopicrashed Bun on Windows — standalone binaries faulted in the NAPIprocess.dlopenconstructor at session start, npm installs faulted in the NAPI finalizer at process teardown. Mirrors the tiny-model isolation pattern from #1607; the parent SIGKILLs the child on dispose so the destructor never runs in either address space (#3031).google-antigravityOAuth state no longer blocks sessions that never invokegenerate_image(#3036).-32601 Method not foundfor defined server→client requests (window/showMessageRequest,window/showDocument,workspace/{semanticTokens,inlayHint,codeLens,codeAction,diagnostic}/refresh). Servers that stall waiting for a real reply (same failure mode as #3029) now receive the spec no-op result (#3044).local-servervision models, which can fail through llama.cpp/STB-backed decoders that do not support WebP (#2922).getSettingsListTheme,getEditorTheme,getSelectListTheme, andgetSymbolThemereturn a plain ASCII fallback instead of crashing with "undefined is not an object (evaluating 'theme.fg')" when the globalthemeis undefined — e.g. when a plugin calls them beforeinitTheme()completes or from a separate module instance under npm-global installs. (#2998)send()paths against async EPIPE rejections:Subprocess.send()is now wrapped so neither a synchronous "process exited" throw nor an asynchronous EPIPE rejection (when the pipe breaks between exit being observed and the next send) can escape as a fatal unhandled rejection. A dying Kokoro/TTS/STT worker can no longer crash the whole agent session mid-task. (#2997)pathToFileURL,path.resolve, andpath.joininstead of hard-coded POSIX paths;shortenPath()normalizes backslashes to forward slashes after~and respects home directory boundaries; shell-escaped interpolated paths in bash tool tests to prevent Git Bash eating backslashesHistoryStorage.resetInstance()leaking its SQLite database handle on Windows by adding a#close()method that finalizes all prepared statements and closes the database;AgentStoragegained the sameresetInstance()/#close()patterncreateAgentSessionleaking the internally-createdAuthStoragewhen session construction fails before the session takes ownership, causing EBUSY on Windows temp dir cleanupMnemopiBackend.removeDbFiles()throwing on Windows when the database handle is still being released; it is now truly best-effort (logs failures instead of silently swallowing)fs.rmSync/fs.rmcleanup withTempDir(which retries) and best-effort.catch(() => {})where SQLite handles outlive the testTempDirprefix convention: non-@prefixes created temp dirs relative to cwd instead ofos.tmpdir(), causing module resolution failures on Windowscore.autocrlf falsein test repo initializationenabledModels, the SDK, or ACP, so an accepted ARN no longer resolves to an empty selection. (#3006)v16.1.2Compare Source
Added
compaction.midTurnEnabledfor mid-turn threshold auto-compaction before the next tool-loop provider request. (#3525)grep -q/--quiet/--silentand-x/--line-regexpto the in-processgrepbuiltin used by the bash tool.-qsuppresses all stdout and exits 0 on the first match (short-circuiting, with match status taking precedence over read errors per GNU);-xanchors each pattern to whole lines. Unblocks shell conditionals such asgrep -qx "$applet" <(strings bin).SWAP.BLK/DEL.BLK/INS.BLK.POSTanchored on markdown headings — a heading resolves its whole section (through nested deeper headings), so the agent can rewrite, drop, or append sections without rewriting the file.tui.renderMermaidto control Mermaid fenced-block ASCII rendering; disabling it also removes the Mermaid diagram hint from the generated system prompt so Mermaid blocks fall back to ordinary highlighted code fences./resume <session-id>in the interactive command system, reusing the existing session-id/prefix resolver while bare/resumestill opens the selector.omp gcstorage maintenance withgc.*defaults for blob sweeping, cold-session archiving, and SQLite WAL checkpointing.Fixed
/resume <session-id>in the interactive TUI only searching the active cwd's session directory; id-prefix lookup now falls back to sessions from other cwd buckets like CLI--resume <session-id>.StdioTransport.connect()now probes whether OMP already has an inheritable console andresolveStdioSpawnCommandskipswindowsHide/CREATE_NO_WINDOWin that case, socmd.exe/PowerShell grandchildren reuse the terminal console instead of allocating visible conhosts during MCP startup or reconnects. (#3567)replaceunlessedit.modelVariants,PI_EDIT_VARIANT, orPI_STRICT_EDIT_MODEexplicitly opts into hashline.default = sonnet:offwhile plan-mode raised thinking tohigh) goes throughapplyRoleModelinstead of silently restoring the pre-plan level. (#3554)modelRoles.planconfigured, default unset, sogetRoleModelCyclesynthesizes a lonedefaultentry from the active plan model and the slider stays hidden) is no longer pinned as the execution tier — approval falls through to the pre-plan restore instead of silently switching back to the plan model. (#3554)evalJulia kernel showing only runner-internal backtrace frames (at top-level scope (./none:N),at main (…runner-…jl:635)) with no exception type or message, making cell errors undebuggable. The host renderer (packages/coding-agent/src/eval/kernel-base.ts) displays a non-emptytracebackverbatim and only falls back toename: evaluewhen it is empty; the Python and Ruby runners embed the rendered error intraceback, but the Julia runner (packages/coding-agent/src/eval/jl/runner.jl) builttracebackfrom stack frames only, so the message was dropped.emit_errornow seedstracebackwith theshowerroroutput (matching the REPL'sERROR:text) ahead of the frames.cmd.exewrapper that itself launched a console grandchild —nodewrappers,npx.cmd -y mcp-remote, similar nested shells.StdioTransport.connect()unconditionally passeddetached: truetoBun.spawn, but Windows has no SIGTSTP/SIGTTIN to escape;detachedonly maps toCreateProcess(DETACHED_PROCESS), which strips the parent's inherited console. The hidden directcmd.exelost its console, so the grandchild allocated a brand-new visible conhost whose stdout no longer routed through OMP's pipe — the proxy reported the bridge was up while OMP timed out waiting for the MCPinitializeresponse.resolveStdioSpawnCommandnow returnsdetached: falsefor every Windows return shape (direct.exe, cmd.exe-wrapped batch / unresolvable command, npm cmd-shim launched through node) and keepsdetached: trueon POSIX, where the original SIGTSTP/SIGTTIN reason still holds;connect()consumes the resolved flag. (#3544)getConfiginpackages/coding-agent/src/lsp/index.ts) never being invalidated, so.omp/lsp.json, root markers, and plugin LSP configs added after the first LSP call stayed invisible for the remainder of the process — even afterreload *. The cached observation persists across chat sessions because OMP is a single-process binary, so users were stuck onNo language servers configureduntil they killed the process. Thereloadhandler now drops the cwd's cache entry and re-runsloadConfigbefore iterating servers, so the explicit refresh request behaves as the prompt documents. (#3546)preserveData.snapcompactis now stripped after hook- and result-supplied preserve data are merged, so a prior snapcompact pass can no longer leak frames into a later context-full compaction. (#3561 by @serverinspector)text/textHead/textTailregions are now obfuscated alongside the previous summary, while opaque provider-replay state (OpenAI remote-compactionencrypted_content) stays byte-identical. (#3561)modelRoles.defaultwhen the configured default lives on an extension-registered provider (e.g. an openai-compat plugin'sposthog/claude-opus-4-8).createAgentSessionresolved the default role before extension factories registered their providers, so the role-pointed model wasn't visible there; on a fresh launch (no-c/--resume) the post-extension fallback then went straight topickDefaultAvailableModel, replacing the user's configured default with the first bundled provider default with auth (commonlyopenai/gpt-5.5whenOPENAI_API_KEYwas set). The fallback now retries the default-role lookup against the post-extension allowed-model set — including its explicit thinking selector — before falling back to a bundled provider default. (#3569)v16.1.1Compare Source
Fixed
omp install <plugin>failing extension validation in compiled-binary mode withCannot find module '@​(scope)/pi-ai/oauth' from '<plugin>/src/oauth.ts'(and any other non-wildcard pi-* subpath import like@oh-my-pi/pi-coding-agent/tools). The bundled-registry override map seeded by__buildLegacyPiPackageRootOverridesonly covered the bare package roots, sorewriteLegacyPiImportsrewrote@(scope)/pi-ai/oauthto@oh-my-pi/pi-ai/oauth, fell through toBun.resolveSync(which bunfs can't satisfy on Bun 1.3.14+), then left the original specifier alone — at which point Bun's native resolver failed because most plugins declare@(scope)/pi-aias apeerDependencyonly and never materialize a real install. The newscripts/generate-legacy-pi-bundled-registry.tsreads every bundled pi-* package's non-wildcardexportsfield and emits both the heavylegacy-pi-bundled-registry.ts(static imports + map) and a lightlegacy-pi-bundled-keys.ts(statically imported bylegacy-pi-compat.tsto seed the override map without the cascade throughlegacy-pi-coding-agent-shim → ../index → export/html/...).scripts/build-binary.tsnow runs the generator beforebun build --compile. (#3442)skill://tool resolution losing loaded session skills when a tool runs outside the session-initialization module state. Internal URL resolution now prefers the caller'ssession.skillssnapshot before falling back to the process-global skill list, soread skill://<name>works across tool execution boundaries. (#3436)@imagementions on OpenAI Codex Responses (chatgpt.comgpt-5.5and siblings) failing withCodex error event: [OneOfParam] [input[N].content[…]] [invalid_enum_value] Invalid value: 'input_image'. Supported values are: 'input_text'..convertToLlmforfileMentionalways emitted adeveloper-role message, so the auto-attached image landed in a Responses content array that the Codex backend (and OpenAI Responses generally) only allows to carryinput_text. #3421's previous fix only stopped the Codex Responses Lite header from going out on image-bearing turns; the full transport kept rejecting the same payload.convertToLlmnow splits a mixed-contentfileMentioninto two messages — text-only files stay ondeveloper(so the auto-read context keeps instruction priority), while image-bearing files ride onuser(the only Responses content slot that acceptsinput_image). (#3443)local://binary attachments being decoded withBun.file().text()before read-tool file safeguards could reject or stream them.read local://...now routes file-backed resources through the normal filesystem reader, the protocol handler refuses known binary/container resources without materializing their bytes, and the streaming reader's NUL-byte refusal now also covers binary blobs whose first newline lies beyond the byte budget (videos, archives) — those previously bypassed the per-line scan and surfaced as decoded mojibake. (#3448)v16.1.0Compare Source
Added
⊘ cache miss · <n> tokensdivider above an assistant turn whose request lost the provider prompt cache. Detected from per-turn usage — the previous turn cached a meaningful prefix but this request read none of it back and reprocessed the prompt (e.g. after a thinking-level / service-tier / model change, tool or system-prompt change, or a history rewrite). Reports the reprocessed token count. Toggle with thedisplay.cacheMissMarkersetting (Appearance → Display, on by default).Changed
✦ skill <name>header (with invocation args trailing), a single meta line with a home-shortened, click-to-open path in the accent color and the prompt size in muted, and a rounded outline around the card. Replaces the old[skill]label with the flatSkill:/Path:/Prompt:key/value dump (which also leaked the absolute home directory).[customType]bracket label is replaced by an<icon> <type>header (📦 for extension messages, 🪝 for legacy hook-role messages) with a subtle outline, matching the skill card. Covers every extension/hook custom type without a bespoke renderer./compact, handoff, and snapcompact (⑂ branch · ctrl+o, summary revealed on expand) instead of a[branch]box.repeatToolDescriptions/ "Repeat Tool Descriptions" toinlineToolDescriptors/ "Inline Tool Descriptors" and enabled inline descriptors by default./dumpoutput repeating the tool inventory twice wheninlineToolDescriptorsis enabled.╭╮╰╯) to match the editor and message cards, instead of mixing rounded boxes with sharp (┌┐└┘) ones.boxRoundnow carries the sharp tee/cross junction glyphs (no rounded variant exists), so dividers still honorboxSharp.tee*/crosstheme overrides. Markdown tables intentionally keep the fully sharpboxSharpset; its corner tokens now affect tables only.v16.0.11Compare Source
Added
__advisor.jsonltranscript persistence for advisor model usage attribution and visibility in the Agent Hub__advisorto prevent filesystem collisions with internal transcriptsmodeproperty to theCompactOptionsinterface for extension-based compaction control/compactslash command to supportsoft,remote, andsnapcompactsubcommands for per-run strategy overrides/compactmode subcommands so a manual compaction can override the configuredcompaction.strategy/remoteEnabledfor that one run:/compact soft(summarize locally, skip remote endpoints),/compact remote(summarize via the remote endpoint / provider-native compaction; warns and falls back to a local summary when no remote path is available), and/compact snapcompact(archive history onto dense bitmap images, no LLM call). Bare/compactand/compact <focus text>keep their existing behavior;soft/remotestill accept trailing focus instructions,snapcompactrejects them. The subcommands are advertised to ACP clients and surface in TUI autocomplete. Extensions can pass the same selection viacompact(instructions, { mode }).<session>/__advisor.jsonl) so the advisor model's usage is attributed inomp statsand its transcript is observable in the Agent Hub (read-only). The transcript follows session switches (/new, resume, branch) and is drained/released before a/dropdeletes the old artifacts dir. The advisor remains a non-peer: it is hidden from agent-facing rosters (irclist,history://, subagent peer prompt, broadcast targets), is not messageable (irc send/ collab chat), and is not revivable/killable from the Hub or collab.Changed
[…Nln elided…]formatirc,history://, and peer rosters/compactargument parsing to reject focus instructions for modes that do not support them (e.g.,snapcompact)rpc-ui/ACP) now host-default the full advisor settings group —advisor.syncBacklogandadvisor.immuneTurnsin addition toadvisor.enabled/advisor.subagents— so a host that opts the advisor in gets the default tuning instead of inheriting the user's local advisor preferences.Fixed
pi-natives:command: syntax error at end of inputon a valid&&/;chain whose later pipeline stage is a compound command, e.g.echo x && git log | while read h; do …; done | head. The minimizer's segmented-chain runner rebuilds each chain segment from the brush AST viapipeline.to_string()and re-executes that string, butsimple_segmentonly validated the first pipeline stage — so a compound later stage (while/for/if/subshell) was re-serialized without its terminator and re-run as broken shell. Every stage is now required to be a Display-safe simple command, and — as a general guard against the recurring class of brushDisplayround-trip divergences (previously: quoted here-doc close tags, multi-byte char/byte offsets) — each reconstructed segment is now re-parsed and must match the original pipeline shape before the chain runner executes it; any divergence runs the command whole, unsegmented, instead of corrupting it.Ctrl+T(toggle thinking blocks) and the/settings"Hide Thinking Blocks" toggle only collapsing/expanding thinking in the live region: blocks that had scrolled into committed native scrollback on ED3-risk terminals kept their pre-toggle snapshot, so scrolling up showed the old thinking state. Both paths nowresetDisplay()after flipping each block's flag, forcing a full clear + replay of the whole transcript (matching the tool-output expansion toggle) so every block above the fold re-renders at its new height.speech.models.listby exposing the local STT/TTS model and voice catalog without triggering setup or downloads (#3011).advise, MCP tools) truncating every value at a fixed 24 columns, so a long note was cut tonote="Your “stric…"even on a wide card with empty space to spare. Each value now grows into the width the card actually has, reserving only a small slice for the keys that still follow so a long leading value can't hide them.Removed
display.tabWidthsetting and configurable tab width supportv16.0.10Compare Source
Added
pioption of thetools.formatsetting to use the new compact sigil-delimited owned tool-calling dialect (§/«…»/¤/‡‡) that uses ~46% fewer tokens than the legacy format on typical calls./collaband/collab viewto display both deep links and scannable codes, and added acollab.webUrlsetting for separately hosted collab web clients.Changed
Fixed
settings.json,models.json, andkeybindings.jsonmigration/loading to accept comments in JSON config files.@-prefixed CLI arguments (#2909).isCompacting) is now installed before theauto_compaction_startevent fires, so input routed during that window lands in the compaction queue rather than the core agent queue./loginprovider list still offering providers listed indisabledProviders(and their credential-alias logins, e.g.openai-codex-device→openai-codex) as login targets (#2906).AgentSession.dispose(), orphaning stdio MCP subprocesses across session teardown (/exit, print mode, subagent teardown); the dispose-time disconnect is now bounded so a slow HTTP/SSE transport close cannot stall exit (#2839).inspect_imageresolving pasted image labels such asImage #​1,[Image #​1, WxH], andattachment://1against current chat attachments instead of falling back to<cwd>/Image #​1(#2787).maxas an alias for the top thinking level (xhigh) in selectors and--thinking, so DeepSeek V4 Pro can be selected with its provider-facing maximum effort (#2727).--provider=amazon-bedrock --model <application-inference-profile ARN>being rejected as an unknown model before the Bedrock provider could send the ARN to Converse Stream. (#3004)v16.0.9Compare Source
Added
--print-thoughtsflag for single-shot print mode that includes sanitized thinking blocks in the text output; default print output stays the final answer only. When thinking is hidden by thehideThinkingBlocksetting,--print-thoughtsun-hides it for the print run so the flag is not a silent no-op (an explicit--hide-thinkingstill wins).Fixed
/goalmode being paused by internal compaction and session-switch lifecycle aborts, and made those switches persist wall-clock goal usage without charging time spent in another session to a preserved goal.v16.0.8Compare Source
Changed
src/utils/zip.tsmodulefflate(ZIP) andBun.Archive(tar/tar.gz) operations intozip.tsomp://documentation indexing by compressing doc bodies into a lazily-inflated blob@oh-my-pi/pi-utils(src/vendor/mermaid-ascii), dropping thebeautiful-mermaidnpm package, its transitiveelkjs(~3.13MB), and thebeautiful-mermaidbun patch; CJK/emoji width handling and the layout-direction override are preserved.omp://documentation embedding to a gzipped base64 index (docs-index.generated.txt, populated at build time and reset afterward) inflated on first read, instead of a ~1.6MB raw TypeScript map. The compiled binary / npm bundle drops ~0.9MB; the dev tree and source checkouts readdocs/from disk.markit-aipackage with a vendored in-house document engine (src/markit) for the document formats it converts: PDF (viamupdf), DOCX (viamammoth), and PPTX/XLSX/EPUB (viafast-xml-parser). Conversion output is preserved, including the PDF column/table-detection pipeline and HTML-table normalization;markit-ai's unused converters and their dependency tail are gone. Legacy.doc/.ppt/.xls/.rtfremain unsupported (a conversion error), as before.src/utils/zip.ts(fflate): the new document converters, thewritetool's in-place archive editing, and thereadtool's ranged archive reader now share one ZIP implementation instead of mixingjszipandfflate.Fixed
<out>blocks in dim-ink togglesomp updatereportingEPERM: operation not permitted, unlink '<binary>.bak'on Windows when self-replacing a standalone binary, even though the new binary had already been installed. The backed-up old executable is still the running process image and cannot be unlinked until the process exits, so the post-verify backup cleanup is now best-effort, backups use a unique per-attempt name, and stale backups are swept on the next update (#845).Refine planso the internal approval abort is hidden and the editor is ready for a follow-up prompt instead of showingOperation aborted(#2971).$HOMEbeing misrouted to Python eval; Python shortcuts now require$ <code>or$$ <code>. (#2944)/api/v0/modelsmetadata soinspect_imagecan select VLM models. (#2945)ompcrashing at startup withCannot find module './browser-data/browser-data.js'(e.g. on Termux/proot Linux arm64).tools/browser/attach.tsvalue-imported theTargetTypeenum frompuppeteer-core, which dragged the puppeteer-core barrel (and its@puppeteer/browsersChromium downloader) back onto the eager startup import graph — defeating the lazy-load deferral and turning any bundling quirk in that subtree into a fatal boot crash instead of a recoverable browser-tool error. The import is nowimport typeand the target check compares against the"page"literal, so puppeteer only loads on first browser use.error: Cannot find package 'mupdf'. The vendored document engine keptmupdfexternal, but a single-filebun --compilebinary has nonode_modulesto resolve it from, and the bundler resolves the otherwise-lazy import eagerly at boot.mupdf(and its WASM module, embedded at build time viascripts/embed-mupdf-wasm.ts) is now bundled into the binary, so startup and PDF/document conversion both work in the standalone binary; npm and source installs still loadmupdffromnode_modules.mupdfis also imported lazily inside the PDF converter now, which fixes a compiled-bundle init-order hazard —mupdf's top-level await made the bundled markit chunk's module init async, exposing the converters before their extension tables initialized — and keeps the ~10MB WASM off non-PDF document conversions.Removed
markit-ai,exifr,music-metadata, and directjszipdependencies. As a side effect, fetching an image or audio URL no longer appends EXIF/audio metadata text; image inlining and resizing are unchanged, and document conversion (PDF/DOCX/PPTX/XLSX/EPUB) is unaffected.v16.0.7Compare Source
Fixed
/modelin the TUI to open the model setup picker again, leaving/switchas the temporary session model switcher (#2933)./usagecan show local cap utilization. (#2942)can1357/oh-my-pi (@oh-my-pi/pi-natives)
v16.1.7Compare Source
@oh-my-pi/pi-catalog
Fixed
minimax-codeandminimax-code-cnto report the documented 1M long-context tier instead of the upstream 512K pricing boundary; the previous patch only coveredminimax/minimax-cn, so the Coding Plan picker still showed 512K in the status bar (#3097).@oh-my-pi/pi-coding-agent
Fixed
models.ymlproviders rejecting thecompat.supportsImageDetailOriginaloverride, so Responses-compatible proxies that reject snapcompact's native-resolution image hint can clamp frames todetail: "auto". (#3092)@oh-my-pi/pi-tui
Fixed
/autocomplete burying user skill commands below every built-in command, so installed skills appear in the initial slash popup (#2875).What's Changed
Full Changelog: can1357/oh-my-pi@v16.1.6...v16.1.7
v16.1.6Compare Source
@oh-my-pi/pi-coding-agent
Added
/loopcommands (e.g.,/loop 10 fix the bug)/loop(e.g.,1h30m)Full Changelog: can1357/oh-my-pi@v16.1.5...v16.1.6
v16.1.5Compare Source
@oh-my-pi/pi-agent-core
Fixed
normalizeToolsparameters unconditionally so tools whoseintentresolves to"omit"(function intent orintent: "omit", e.g. builtineval/resolve) no longer leak raw arktype/zod schema objects inparameters(#3074)@oh-my-pi/pi-coding-agent
Changed
AgentSession.nextToolChoice()method. The per-turn tool-choice directive now flows solely throughnextToolChoiceDirective()(which folds in the hard-choice dequeue plus active-tool filtering as a private helper), eliminating the dual entry point that let callers consume the queue while bypassing the soft pending-preview lifecycle. The underlyingToolChoiceQueue.nextToolChoice()is unchanged.What's Changed
Full Changelog: can1357/oh-my-pi@v16.1.4...v16.1.5
v16.1.4Compare Source
@oh-my-pi/pi-ai
Added
providerRetryWait) before being surfaced, instead of silently stalling the agent loop. Retries fire only before any content streams, so live streaming (including thinking) is never delayed, retried, or duplicated.Fixed
google-antigravity) request builder droppinglabels.model_enumwhen the wire profile does not declare one. Required for Claude 4.6 ids whoseAntigravityModelWireProfilecarries onlymaxOutputTokens(no capturedmodel_enum); the label is now emitted only when the catalog defines it. (#3067)@oh-my-pi/pi-catalog
Fixed
google-antigravity(andgoogle-gemini-cli) Cloud Code Assist providers, whose backend exposes the models asymmetrically:claude-sonnet-4-6has no-thinkingtwin andclaude-opus-4-6has only the-thinkingtwin. The sharedthinkingPairfamily was routing thinking efforts onclaude-sonnet-4-6to a non-existentclaude-sonnet-4-6-thinkingwire id (404Requested entity was not found); replaced both 4.6 entries with bespoke single-wire families so every effort and off resolve to the live wire id. Addedclaude-sonnet-4-6andclaude-opus-4-6-thinkingentries toANTIGRAVITY_MODEL_WIRE_PROFILEScapped at the backend's 64000-output-token limit (over-cap requests 400'd withRequest contains an invalid argument);modelEnumis now optional onAntigravityModelWireProfilesince the Claude wire ids are accepted without a capturedlabels.model_enum. (#3067)@oh-my-pi/pi-coding-agent
Fixed
omp benchandomp dry-balancefailing to resolve models from extension providersomp benchruns that return no output or tokenscacheRead 0, so a long-running first tool call (e.g.gh run watch) that outlived the provider's cache TTL surfaced a spurious⊘ cache missdivider right under the opening message. The marker now requires the previous turn to have actually read a warm prefix, so it flags only a demonstrably working cache going cold — and collapses a run of consecutive cold turns to a single marker at the moment the cache broke.omp benchandomp dry-balancefailing to resolve models from extension-registered providers (pi.registerProvider(...)). Both commands build a one-shotModelRegistrythat previously only knew built-in catalog providers, so aprovider/modelselector for a provider contributed by an extension under~/.omp/agent/extensions/errored with "Model not found". A newloadCliExtensionProvidershelper loads the session's extensions, drains their provider registrations into the registry, and discovers dynamic provider catalogs before resolving selectors — mirroring the interactive session andomp modelspaths.omp benchnow reports a run that streamed no content and measured no output tokens as a failure ("provider returned no output") instead of a misleading green check withtokens 0 / TPS 0.0.resolvefinds no runnable handler, and forwarded the missingpeekPendingInvokerandclearPendingInvokershooks on the production session so staged previews actually reach the resolve tool and the gate drains on dispatch failure. (#3061)Settings.init(), so early editor rendering falls back to plain text instead of crashing. (#3064)omp plugin install github:owner/reposilently keeping the user on a stale commit when re-run on an already-installed GitHub plugin.bun install <spec>respects the existingbun.lockpin when the spec is unchanged and never re-resolves the remote ref, so the manager now follows a git re-install withbun update <name>to refresh the lockfile pin against the upstream. The install transaction also snapshotsbun.lockup front and routes feature validation, extension validation, and runtime-config save through one rollback path so a failed install can never leave the rejected commit pinned in the active tree or lockfile. First-time installs are unaffected. (#3063)What's Changed
Full Changelog: can1357/oh-my-pi@v16.1.3...v16.1.4
v16.1.3Compare Source
@oh-my-pi/pi-ai
Added
openai-completionsemits athinkingblock forreasoning_contentdeltas even whendelta.contentis explicitly JSONnull(the DeepSeek-format dual-key pattern used by custom GLM/Qwen reasoning providers). See #2996.Changed
Fixed
Configuration
📅 Schedule: (in timezone UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate.
Summary by cubic
Update non-major dependencies across JavaScript and Python to pick up recent fixes and small features. Improves stability, CLI ergonomics, and server tooling with no app code changes.
Dependencies
@oh-my-pi/pi-coding-agentto^16.1.7and@oh-my-pi/pi-nativesto^16.1.7(auto-retry for empty completions, TUI slash autocomplete fixes,/loopinline prompts, multiple Windows/Linux stability fixes).droidto^0.153.1(latest platform binaries).fastapito>=0.138.0.mistral-vibeto>=2.17.1.Migration
@oh-my-pi/pi-coding-agentAPIs directly, replace any use ofAgentSession.nextToolChoice()withnextToolChoiceDirective(). No other changes expected.Written for commit ed43f8a. Summary will update on new commits.