Skip to content

fix(deps): update all non-major dependencies (minor) - #1956

Merged
shunkakinoki merged 1 commit into
mainfrom
renovate/all-minor-patch
Jun 27, 2026
Merged

fix(deps): update all non-major dependencies (minor)#1956
shunkakinoki merged 1 commit into
mainfrom
renovate/all-minor-patch

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Jun 27, 2026

Copy link
Copy Markdown
Owner

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@oh-my-pi/pi-coding-agent (source) ^16.0.6^16.1.7 age confidence
@oh-my-pi/pi-natives (source) ^16.0.6^16.1.7 age confidence
droid (source) ^0.152.0^0.153.1 age confidence
fastapi (changelog) >=0.137.1>=0.138.0 age confidence
mistral-vibe >=2.16.1>=2.17.1 age confidence

Release Notes

can1357/oh-my-pi (@​oh-my-pi/pi-coding-agent)

v16.1.7

Compare Source

Fixed
  • Fixed custom models.yml providers rejecting the compat.supportsImageDetailOriginal override, so Responses-compatible proxies that reject snapcompact's native-resolution image hint can clamp frames to detail: "auto". (#​3092)

v16.1.6

Compare Source

Added
  • Enabled inline prompts with /loop commands (e.g., /loop 10 fix the bug)
  • Added support for compound duration formats in /loop (e.g., 1h30m)

v16.1.5

Compare Source

Changed
  • Removed the legacy AgentSession.nextToolChoice() method. The per-turn tool-choice directive now flows solely through nextToolChoiceDirective() (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 underlying ToolChoiceQueue.nextToolChoice() is unchanged.

v16.1.4

Compare Source

Fixed
  • Fixed omp bench and omp dry-balance failing to resolve models from extension providers
  • Improved error reporting for omp bench runs that return no output or tokens
  • Cache-miss marker no longer fires on a cold turn whose predecessor only wrote the prompt cache (never read it back). The session's opening request always writes the prefix with cacheRead 0, so a long-running first tool call (e.g. gh run watch) that outlived the provider's cache TTL surfaced a spurious ⊘ cache miss divider 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.
  • Fixed omp bench and omp dry-balance failing to resolve models from extension-registered providers (pi.registerProvider(...)). Both commands build a one-shot ModelRegistry that previously only knew built-in catalog providers, so a provider/model selector for a provider contributed by an extension under ~/.omp/agent/extensions/ errored with "Model not found". A new loadCliExtensionProviders helper loads the session's extensions, drains their provider registrations into the registry, and discovers dynamic provider catalogs before resolving selectors — mirroring the interactive session and omp models paths.
  • omp bench now 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 with tokens 0 / TPS 0.0.
  • Cleared stale pending-preview gates when resolve finds no runnable handler, and forwarded the missing peekPendingInvoker and clearPendingInvokers hooks on the production session so staged previews actually reach the resolve tool and the gate drains on dispatch failure. (#​3061)
  • Deferred status-line usage refreshes off the render path and timeboxed the startup fetch so slow Anthropic quota lookups no longer block interactive startup. (#​3057)
  • Fixed image paste placeholders falling through to terminal hyperlink settings before Settings.init(), so early editor rendering falls back to plain text instead of crashing. (#​3064)
  • Fixed omp plugin install github:owner/repo silently keeping the user on a stale commit when re-run on an already-installed GitHub plugin. bun install <spec> respects the existing bun.lock pin when the spec is unchanged and never re-resolves the remote ref, so the manager now follows a git re-install with bun update <name> to refresh the lockfile pin against the upstream. The install transaction also snapshots bun.lock up 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.3

Compare Source

Changed
  • Refactored Perplexity authentication logic to prioritize cookies over OAuth in search operations
  • Updated token command to correctly display active Perplexity OAuth tokens when present
Fixed
  • Enabled auto-retry for AI "thinking loop" errors encountered during model inference
  • Cleared stale error banners automatically when triggered by an auto-retry recovery phase
  • Preserved bundled omitMaxOutputTokens policy when fresh cached provider discovery rows replace Ollama Cloud catalog models, so stale models.db entries cannot re-enable context-window-sized num_predict values. (#​2984)
  • Normalized cached-only Ollama Cloud discovery rows to omit on-the-wire output-token caps even when the cached model id has no bundled catalog entry. (#​2984)
  • Fixed Ollama, LM Studio, and llama.cpp (plus loopback vLLM / sglang servers) reprocessing the full prompt on every turn because provider.appendOnlyContext: auto only recognized DeepSeek and Xiaomi as prefix-cache providers. The auto-detect now enables append-only mode for ollama, ollama-cloud, lm-studio, llama.cpp, and any baseUrl resolving to a loopback/RFC1918/.local host, 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).
  • Isolated mnemopi's local embedding provider in a dedicated Bun.spawn subprocess so onnxruntime-node and fastembed never load into the main agent process. Previously memory.backend: mnemopi crashed Bun on Windows — standalone binaries faulted in the NAPI process.dlopen constructor 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).
  • Fixed image tool registration resolving image provider credentials during session startup, so broken or slow google-antigravity OAuth state no longer blocks sessions that never invoke generate_image (#​3036).
  • Fixed LSP client returning -32601 Method not found for 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).
  • Fixed WebP images being sent unchanged to local-server vision models, which can fail through llama.cpp/STB-backed decoders that do not support WebP (#​2922).
  • Made getSettingsListTheme, getEditorTheme, getSelectListTheme, and getSymbolTheme return a plain ASCII fallback instead of crashing with "undefined is not an object (evaluating 'theme.fg')" when the global theme is undefined — e.g. when a plugin calls them before initTheme() completes or from a separate module instance under npm-global installs. (#​2998)
  • Hardened TTS, STT, and tiny-title worker IPC 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)
  • Fixed Windows test failures caused by path handling: tests now use pathToFileURL, path.resolve, and path.join instead 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 backslashes
  • Fixed HistoryStorage.resetInstance() leaking its SQLite database handle on Windows by adding a #close() method that finalizes all prepared statements and closes the database; AgentStorage gained the same resetInstance()/#close() pattern
  • Fixed createAgentSession leaking the internally-created AuthStorage when session construction fails before the session takes ownership, causing EBUSY on Windows temp dir cleanup
  • Fixed MnemopiBackend.removeDbFiles() throwing on Windows when the database handle is still being released; it is now truly best-effort (logs failures instead of silently swallowing)
  • Fixed Windows EBUSY test failures by replacing raw fs.rmSync/fs.rm cleanup with TempDir (which retries) and best-effort .catch(() => {}) where SQLite handles outlive the test
  • Fixed TempDir prefix convention: non-@ prefixes created temp dirs relative to cwd instead of os.tmpdir(), causing module resolution failures on Windows
  • Fixed git line-ending mismatches in autoresearch tests by setting core.autocrlf false in test repo initialization
  • Fixed Bedrock inference-profile ARN models being dropped from the allowed-model set when models were scoped via enabledModels, the SDK, or ACP, so an accepted ARN no longer resolves to an empty selection. (#​3006)

v16.1.2

Compare Source

Added
  • Added compaction.midTurnEnabled for mid-turn threshold auto-compaction before the next tool-loop provider request. (#​3525)
  • Added grep -q/--quiet/--silent and -x/--line-regexp to the in-process grep builtin used by the bash tool. -q suppresses all stdout and exits 0 on the first match (short-circuiting, with match status taking precedence over read errors per GNU); -x anchors each pattern to whole lines. Unblocks shell conditionals such as grep -qx "$applet" <(strings bin).
  • Added plan-mode guidance (hashline edit mode only) steering the agent to revise the plan file section-by-section with SWAP.BLK/DEL.BLK/INS.BLK.POST anchored 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.
  • Added tui.renderMermaid to 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.
  • Added /resume <session-id> in the interactive command system, reusing the existing session-id/prefix resolver while bare /resume still opens the selector.
  • Added manual omp gc storage maintenance with gc.* defaults for blob sweeping, cold-session archiving, and SQLite WAL checkpointing.
Fixed
  • 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>.
  • Fixed plan mode rejecting edits to plan artifacts when models refer to them by bare filenames
  • Fixed absolute paths to session-owned artifacts being incorrectly routed through the editor bridge
  • Fixed Windows stdio MCP wrapper chains spawning visible PowerShell/cmd windows on startup after the #​3544 fix. StdioTransport.connect() now probes whether OMP already has an inheritable console and resolveStdioSpawnCommand skips windowsHide/CREATE_NO_WINDOW in that case, so cmd.exe/PowerShell grandchildren reuse the terminal console instead of allocating visible conhosts during MCP startup or reconnects. (#​3567)
  • Fixed Kimi-family models defaulting to hashline edit mode; they now fall back to replace unless edit.modelVariants, PI_EDIT_VARIANT, or PI_STRICT_EDIT_MODE explicitly opts into hashline.
  • Fixed MCP OAuth discovery rejecting Atlassian-style cross-host issuer metadata during the resource-server fallback probe; issuer matching now remains enforced for advertised auth-server candidates but no longer blocks fallback metadata where the resource host and authorization-server issuer differ. (#​3551)
  • Fixed plan approval applying the wrong execution model when the model-tier slider sat on the model that exit would restore. The match check now compares the selected role's effective thinking level against the pre-plan thinking level, so picking the active planning tier is retained and picking a same-model tier with an explicit thinking suffix (e.g. default = sonnet:off while plan-mode raised thinking to high) goes through applyRoleModel instead of silently restoring the pre-plan level. (#​3554)
  • Fixed plan approval applying the wrong execution model when the model-tier slider sat on the model that exit would restore. The match check now compares the selected role's effective thinking level against the pre-plan thinking level, and a singleton cycle (only modelRoles.plan configured, default unset, so getRoleModelCycle synthesizes a lone default entry 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)
  • Fixed the eval Julia 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-empty traceback verbatim and only falls back to ename: evalue when it is empty; the Python and Ruby runners embed the rendered error in traceback, but the Julia runner (packages/coding-agent/src/eval/jl/runner.jl) built traceback from stack frames only, so the message was dropped. emit_error now seeds traceback with the showerror output (matching the REPL's ERROR: text) ahead of the frames.
  • Fixed Windows stdio MCP servers timing out (and popping a visible terminal) when their direct child was a cmd.exe wrapper that itself launched a console grandchild — node wrappers, npx.cmd -y mcp-remote, similar nested shells. StdioTransport.connect() unconditionally passed detached: true to Bun.spawn, but Windows has no SIGTSTP/SIGTTIN to escape; detached only maps to CreateProcess(DETACHED_PROCESS), which strips the parent's inherited console. The hidden direct cmd.exe lost 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 MCP initialize response. resolveStdioSpawnCommand now returns detached: false for every Windows return shape (direct .exe, cmd.exe-wrapped batch / unresolvable command, npm cmd-shim launched through node) and keeps detached: true on POSIX, where the original SIGTSTP/SIGTTIN reason still holds; connect() consumes the resolved flag. (#​3544)
  • Fixed the LSP tool's per-cwd config cache (getConfig in packages/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 after reload *. The cached observation persists across chat sessions because OMP is a single-process binary, so users were stuck on No language servers configured until they killed the process. The reload handler now drops the cwd's cache entry and re-runs loadConfig before iterating servers, so the explicit refresh request behaves as the prompt documents. (#​3546)
  • Fixed stale snapcompact archive state being reintroduced at the AgentSession manual and auto LLM compaction save paths; preserveData.snapcompact is 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)
  • Fixed the snapcompact→context-full migration shipping the prior archive's plaintext to the summarization provider without secret redaction. When secrets are configured, the migrated archive's text/textHead/textTail regions are now obfuscated alongside the previous summary, while opaque provider-replay state (OpenAI remote-compaction encrypted_content) stays byte-identical. (#​3561)
  • Fixed fresh interactive launches ignoring modelRoles.default when the configured default lives on an extension-registered provider (e.g. an openai-compat plugin's posthog/claude-opus-4-8). createAgentSession resolved 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 to pickDefaultAvailableModel, replacing the user's configured default with the first bundled provider default with auth (commonly openai/gpt-5.5 when OPENAI_API_KEY was 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.1

Compare Source

Fixed
  • Fixed omp install <plugin> failing extension validation in compiled-binary mode with Cannot find module '@&#8203;(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 __buildLegacyPiPackageRootOverrides only covered the bare package roots, so rewriteLegacyPiImports rewrote @(scope)/pi-ai/oauth to @oh-my-pi/pi-ai/oauth, fell through to Bun.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-ai as a peerDependency only and never materialize a real install. The new scripts/generate-legacy-pi-bundled-registry.ts reads every bundled pi-* package's non-wildcard exports field and emits both the heavy legacy-pi-bundled-registry.ts (static imports + map) and a light legacy-pi-bundled-keys.ts (statically imported by legacy-pi-compat.ts to seed the override map without the cascade through legacy-pi-coding-agent-shim → ../index → export/html/...). scripts/build-binary.ts now runs the generator before bun build --compile. (#​3442)
  • Fixed skill:// tool resolution losing loaded session skills when a tool runs outside the session-initialization module state. Internal URL resolution now prefers the caller's session.skills snapshot before falling back to the process-global skill list, so read skill://<name> works across tool execution boundaries. (#​3436)
  • Fixed @image mentions on OpenAI Codex Responses (chatgpt.com gpt-5.5 and siblings) failing with Codex error event: [OneOfParam] [input[N].content[…]] [invalid_enum_value] Invalid value: 'input_image'. Supported values are: 'input_text'.. convertToLlm for fileMention always emitted a developer-role message, so the auto-attached image landed in a Responses content array that the Codex backend (and OpenAI Responses generally) only allows to carry input_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. convertToLlm now splits a mixed-content fileMention into two messages — text-only files stay on developer (so the auto-read context keeps instruction priority), while image-bearing files ride on user (the only Responses content slot that accepts input_image). (#​3443)
  • Fixed local:// binary attachments being decoded with Bun.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.0

Compare Source

Added
  • Added a prompt-cache miss marker: a slim ⊘ cache miss · <n> tokens divider 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 the display.cacheMissMarker setting (Appearance → Display, on by default).
Changed
  • Optimized preview workflows by removing forced tool choices, reducing prompt cache invalidations
  • Unified injected message styling with consistent rounded outlines and icon-tagged headers
  • Refreshed branch summary messages with a uniform banner style to match compaction points
  • Updated skill invocation UI with a compact header, home-shortened paths, and dynamic line counts
  • Refined session context to utilize history blocks instead of raw images for snapcompact summaries
  • Refreshed the skill-prompt transcript message to match the rest of the TUI: an icon-tagged ✦ 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 flat Skill:/Path:/Prompt: key/value dump (which also leaked the absolute home directory).
  • Refreshed the default custom/hook transcript message frame to a rounded, icon-tagged card: the [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.
  • Refreshed the branch-summary transcript message to render as the same slim divider banner as /compact, handoff, and snapcompact (⑂ branch · ctrl+o, summary revealed on expand) instead of a [branch] box.
  • Optimized network traffic by stripping tool descriptions from provider tool schemas
  • Renamed the prompt setting from repeatToolDescriptions / "Repeat Tool Descriptions" to inlineToolDescriptors / "Inline Tool Descriptors" and enabled inline descriptors by default.
  • Snapcompact compaction summaries now reach the model as ordered history blocks instead of one lead-in text block plus appended images: plain text at the oldest edge, an imaged middle, then plain text at the newest edge. This matches the new text-first snapcompact archive layout and preserves chronological order in the provider prompt.
  • Fixed /dump output repeating the tool inventory twice when inlineToolDescriptors is enabled.
  • Unified TUI border corners on the rounded style: tool-result frames, overlays, code fences, debug frames, and the interactive bash box now draw rounded corners (╭╮╰╯) to match the editor and message cards, instead of mixing rounded boxes with sharp (┌┐└┘) ones. boxRound now carries the sharp tee/cross junction glyphs (no rounded variant exists), so dividers still honor boxSharp.tee*/cross theme overrides. Markdown tables intentionally keep the fully sharp boxSharp set; its corner tokens now affect tables only.

v16.0.11

Compare Source

Added
  • Added __advisor.jsonl transcript persistence for advisor model usage attribution and visibility in the Agent Hub
  • Added defensive reservation against naming a task __advisor to prevent filesystem collisions with internal transcripts
  • Added mode property to the CompactOptions interface for extension-based compaction control
  • Updated /compact slash command to support soft, remote, and snapcompact subcommands for per-run strategy overrides
  • Added /compact mode subcommands so a manual compaction can override the configured compaction.strategy/remoteEnabled for 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 /compact and /compact <focus text> keep their existing behavior; soft/remote still accept trailing focus instructions, snapcompact rejects them. The subcommands are advertised to ACP clients and surface in TUI autocomplete. Extensions can pass the same selection via compact(instructions, { mode }).
  • The advisor now persists its own turns to a subagent-style transcript (<session>/__advisor.jsonl) so the advisor model's usage is attributed in omp stats and its transcript is observable in the Agent Hub (read-only). The transcript follows session switches (/new, resume, branch) and is drained/released before a /drop deletes the old artifacts dir. The advisor remains a non-peer: it is hidden from agent-facing rosters (irc list, history://, subagent peer prompt, broadcast targets), is not messageable (irc send / collab chat), and is not revivable/killable from the Hub or collab.
Changed
  • Standardized file elision markers to a compact […Nln elided…] format
  • Updated transcript viewer to clear cached content if the session file is deleted while opened
  • Refactored agent hub to use a fullscreen overlay for agent transcripts instead of inline chat
  • Improved transcript rendering stability by using a non-incremental builder for viewer replays
  • Advisor transcripts are now excluded from agent-facing surfaces like irc, history://, and peer rosters
  • Advisor transcripts are read-only and cannot be messaged, revived, or killed via the Agent Hub or IRC
  • Refined /compact argument parsing to reject focus instructions for modes that do not support them (e.g., snapcompact)
  • Protocol hosts (RPC/rpc-ui/ACP) now host-default the full advisor settings group — advisor.syncBacklog and advisor.immuneTurns in addition to advisor.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
  • Fixed memory-leaking stale transcripts in the agent viewer when underlying files are deleted
  • Fixed the Agent Hub transcript viewer rendering the transcript body one column right of the "Agent Hub" title (and the title appearing to shift when scrolled to the top): the fullscreen viewer added its own outer gutter on top of the transcript rows, which already carry a 1-column left pad, so the header and body no longer shared a gutter. The viewer now renders the scroll body at full width without the extra gutter, and the file-mention row carries the same 1-column pad as every other row.
  • Fixed the bash tool failing with pi-natives:command: syntax error at end of input on 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 via pipeline.to_string() and re-executes that string, but simple_segment only 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 brush Display round-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.
  • Fixed 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 now resetDisplay() 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.
  • Fixed ACP mobile voice settings being unable to call speech.models.list by exposing the local STT/TTS model and voice catalog without triggering setup or downloads (#​3011).
  • Fixed the collapsed inline arg preview used by tools without a custom renderer (e.g. advise, MCP tools) truncating every value at a fixed 24 columns, so a long note was cut to note="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
  • Removed display.tabWidth setting and configurable tab width support

v16.0.10

Compare Source

Added
  • Updated the pi option of the tools.format setting to use the new compact sigil-delimited owned tool-calling dialect (§/«…»/¤/‡‡) that uses ~46% fewer tokens than the legacy format on typical calls.
  • Integrated terminal QR codes directly into /collab and /collab view to display both deep links and scannable codes, and added a collab.webUrl setting for separately hosted collab web clients.
Changed
  • Updated description of Pi dialect in tool-calling settings to clarify compact sigil format
Fixed
  • Fixed legacy settings.json, models.json, and keybindings.json migration/loading to accept comments in JSON config files.
  • Support quoted file paths with spaces (such as default macOS screenshots) in file mentions and @-prefixed CLI arguments (#​2909).
  • Fixed the first steering/follow-up message typed as auto-compaction begins being dropped instead of queued; the compaction abort controller (which backs isCompacting) is now installed before the auto_compaction_start event fires, so input routed during that window lands in the compaction queue rather than the core agent queue.
  • Fixed queued steering/follow-up messages being silently cleared by the agent reset during a handoff; they are now captured and restored across the new-session reset.
  • Fixed the /login provider list still offering providers listed in disabledProviders (and their credential-alias logins, e.g. openai-codex-deviceopenai-codex) as login targets (#​2906).
  • Fixed an owned MCP manager not being disconnected on 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).
  • Fixed inspect_image resolving pasted image labels such as Image #&#8203;1, [Image #&#8203;1, WxH], and attachment://1 against current chat attachments instead of falling back to <cwd>/Image #&#8203;1 (#​2787).
  • Accepted max as 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).
  • Fixed --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.9

Compare Source

Added
  • Added a --print-thoughts flag 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 the hideThinkingBlock setting, --print-thoughts un-hides it for the print run so the flag is not a silent no-op (an explicit --hide-thinking still wins).
Fixed
  • Fixed active /goal mode 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.8

Compare Source

Changed
  • Optimized app startup time by lazily loading site-specific scraper modules
  • Refactored internal archive handling into a unified src/utils/zip.ts module
  • Centralized all fflate (ZIP) and Bun.Archive (tar/tar.gz) operations into zip.ts
  • Optimized archive reading by using lazy, ranged central-directory access for ZIP files
  • Updated internal image processing to no longer include metadata text for fetched images
  • Optimized omp:// documentation indexing by compressing doc bodies into a lazily-inflated blob
  • Changed Mermaid fenced-block ASCII rendering to use the first-party vendored renderer in @oh-my-pi/pi-utils (src/vendor/mermaid-ascii), dropping the beautiful-mermaid npm package, its transitive elkjs (~3.13MB), and the beautiful-mermaid bun patch; CJK/emoji width handling and the layout-direction override are preserved.
  • Changed 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 read docs/ from disk.
  • Replaced the markit-ai package with a vendored in-house document engine (src/markit) for the document formats it converts: PDF (via mupdf), DOCX (via mammoth), and PPTX/XLSX/EPUB (via fast-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/.rtf remain unsupported (a conversion error), as before.
  • Centralized ZIP handling behind a single src/utils/zip.ts (fflate): the new document converters, the write tool's in-place archive editing, and the read tool's ranged archive reader now share one ZIP implementation instead of mixing jszip and fflate.
Fixed
  • Fixed settings overlay crash when scrolling past the last row in list views
  • Improved tool result formatting by correctly wrapping <out> blocks in dim-ink toggles
  • Fixed auto-retry after transient model-stream socket closes to replay text/thinking-only partial assistant output, including turns where incomplete tool-call arguments were dropped; completed tool calls still block retry to avoid duplicating tool execution.
  • Fixed omp update reporting EPERM: 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).
  • Fixed plan-mode Refine plan so the internal approval abort is hidden and the editor is ready for a follow-up prompt instead of showing Operation aborted (#​2971).
  • Fixed TUI prompts beginning with shell-style variables such as $HOME being misrouted to Python eval; Python shortcuts now require $ <code> or $$ <code>. (#​2944)
  • Fixed LM Studio runtime discovery to use native /api/v0/models metadata so inspect_image can select VLM models. (#​2945)
  • Fixed omp crashing at startup with Cannot find module './browser-data/browser-data.js' (e.g. on Termux/proot Linux arm64). tools/browser/attach.ts value-imported the TargetType enum from puppeteer-core, which dragged the puppeteer-core barrel (and its @puppeteer/browsers Chromium 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 now import type and the target check compares against the "page" literal, so puppeteer only loads on first browser use.
  • Fixed the standalone compiled binary aborting at startup with error: Cannot find package 'mupdf'. The vendored document engine kept mupdf external, but a single-file bun --compile binary has no node_modules to resolve it from, and the bundler resolves the otherwise-lazy import eagerly at boot. mupdf (and its WASM module, embedded at build time via scripts/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 load mupdf from node_modules. mupdf is 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
  • Removed the markit-ai, exifr, music-metadata, and direct jszip dependencies. 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.7

Compare Source

Fixed
  • Fixed /model in the TUI to open the model setup picker again, leaving /switch as the temporary session model switcher (#​2933).
  • Fixed OpenCode Go sessions recording per-request cost history so /usage can show local cap utilization. (#​2942)
can1357/oh-my-pi (@​oh-my-pi/pi-natives)

v16.1.7

Compare Source

@​oh-my-pi/pi-catalog

Fixed
  • Fixed MiniMax-M3 catalog context for the MiniMax Coding/Token Plan providers minimax-code and minimax-code-cn to report the documented 1M long-context tier instead of the upstream 512K pricing boundary; the previous patch only covered minimax/minimax-cn, so the Coding Plan picker still showed 512K in the status bar (#​3097).

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

Fixed
  • Fixed custom models.yml providers rejecting the compat.supportsImageDetailOriginal override, so Responses-compatible proxies that reject snapcompact's native-resolution image hint can clamp frames to detail: "auto". (#​3092)

@​oh-my-pi/pi-tui

Fixed
  • Fixed slash command autocomplete, inline hints, and Enter completion when the slash command is preceded by leading whitespace (#​3095).
  • Fixed empty / 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.6

Compare Source

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

Added
  • Enabled inline prompts with /loop commands (e.g., /loop 10 fix the bug)
  • Added support for compound duration formats in /loop (e.g., 1h30m)

Full Changelog: can1357/oh-my-pi@v16.1.5...v16.1.6

v16.1.5

Compare Source

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

Fixed
  • Wire-encoded normalizeTools parameters unconditionally so tools whose intent resolves to "omit" (function intent or intent: "omit", e.g. builtin eval / resolve) no longer leak raw arktype/zod schema objects in parameters (#​3074)

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

Changed
  • Removed the legacy AgentSession.nextToolChoice() method. The per-turn tool-choice directive now flows solely through nextToolChoiceDirective() (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 underlying ToolChoiceQueue.nextToolChoice() is unchanged.

What's Changed

  • fix(agent): wire-encode normalizeTools parameters for omit-intent tools by @​roboomp in #​3076

Full Changelog: can1357/oh-my-pi@v16.1.4...v16.1.5

v16.1.4

Compare Source

@​oh-my-pi/pi-ai

Added
  • Added bounded auto-retry for empty assistant completions specifically to the OpenAI Responses provider
  • Added bounded auto-retry for empty assistant completions across the OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages providers. A benign terminal stop that streamed no content and billed no output tokens — the signature of a flaky OpenAI-/Anthropic-compatible gateway that intermittently 200s with an empty body — is now retried up to twice with exponential backoff (honoring 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
  • Fixed the Antigravity (google-antigravity) request builder dropping labels.model_enum when the wire profile does not declare one. Required for Claude 4.6 ids whose AntigravityModelWireProfile carries only maxOutputTokens (no captured model_enum); the label is now emitted only when the catalog defines it. (#​3067)

@​oh-my-pi/pi-catalog

Fixed
  • Fixed Claude 4.6 routing on the google-antigravity (and google-gemini-cli) Cloud Code Assist providers, whose backend exposes the models asymmetrically: claude-sonnet-4-6 has no -thinking twin and claude-opus-4-6 has only the -thinking twin. The shared thinkingPair family was routing thinking efforts on claude-sonnet-4-6 to a non-existent claude-sonnet-4-6-thinking wire id (404 Requested 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. Added claude-sonnet-4-6 and claude-opus-4-6-thinking entries to ANTIGRAVITY_MODEL_WIRE_PROFILES capped at the backend's 64000-output-token limit (over-cap requests 400'd with Request contains an invalid argument); modelEnum is now optional on AntigravityModelWireProfile since the Claude wire ids are accepted without a captured labels.model_enum. (#​3067)

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

Fixed
  • Fixed omp bench and omp dry-balance failing to resolve models from extension providers
  • Improved error reporting for omp bench runs that return no output or tokens
  • Cache-miss marker no longer fires on a cold turn whose predecessor only wrote the prompt cache (never read it back). The session's opening request always writes the prefix with cacheRead 0, so a long-running first tool call (e.g. gh run watch) that outlived the provider's cache TTL surfaced a spurious ⊘ cache miss divider 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.
  • Fixed omp bench and omp dry-balance failing to resolve models from extension-registered providers (pi.registerProvider(...)). Both commands build a one-shot ModelRegistry that previously only knew built-in catalog providers, so a provider/model selector for a provider contributed by an extension under ~/.omp/agent/extensions/ errored with "Model not found". A new loadCliExtensionProviders helper loads the session's extensions, drains their provider registrations into the registry, and discovers dynamic provider catalogs before resolving selectors — mirroring the interactive session and omp models paths.
  • omp bench now 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 with tokens 0 / TPS 0.0.
  • Cleared stale pending-preview gates when resolve finds no runnable handler, and forwarded the missing peekPendingInvoker and clearPendingInvokers hooks on the production session so staged previews actually reach the resolve tool and the gate drains on dispatch failure. (#​3061)
  • Deferred status-line usage refreshes off the render path and timeboxed the startup fetch so slow Anthropic quota lookups no longer block interactive startup. (#​3057)
  • Fixed image paste placeholders falling through to terminal hyperlink settings before Settings.init(), so early editor rendering falls back to plain text instead of crashing. (#​3064)
  • Fixed omp plugin install github:owner/repo silently keeping the user on a stale commit when re-run on an already-installed GitHub plugin. bun install <spec> respects the existing bun.lock pin when the spec is unchanged and never re-resolves the remote ref, so the manager now follows a git re-install with bun update <name> to refresh the lockfile pin against the upstream. The install transaction also snapshots bun.lock up 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.3

Compare Source

@​oh-my-pi/pi-ai

Added
  • Added regression test pinning that openai-completions emits a thinking block for reasoning_content deltas even when delta.content is explicitly JSON null (the DeepSeek-format dual-key pattern used by custom GLM/Qwen reasoning providers). See #​2996.
Changed
  • Improved the thinking loop guard to treat assistant text loops as retryable errors
  • Refined text normalization logic to reduce false positives in the thinking loop detector
Fixed
  • Fixed Ollama chat requests sendi

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone 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.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


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

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

    • Bump @oh-my-pi/pi-coding-agent to ^16.1.7 and @oh-my-pi/pi-natives to ^16.1.7 (auto-retry for empty completions, TUI slash autocomplete fixes, /loop inline prompts, multiple Windows/Linux stability fixes).
    • Bump droid to ^0.153.1 (latest platform binaries).
    • Bump fastapi to >=0.138.0.
    • Bump mistral-vibe to >=2.17.1.
  • Migration

    • If importing @oh-my-pi/pi-coding-agent APIs directly, replace any use of AgentSession.nextToolChoice() with nextToolChoiceDirective(). No other changes expected.

Written for commit ed43f8a. Summary will update on new commits.

Review in cubic

@shunkakinoki
shunkakinoki enabled auto-merge (squash) June 27, 2026 04:22
@indent-zero

indent-zero Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor
PR Summary

Automated Renovate bot PR bumping several minor/patch dependency versions in lockstep across package.json, pyproject.toml, and bun.lock. Keeps the dotfiles tool inventory current with upstream releases without any source-code changes.

  • Bump @oh-my-pi/pi-coding-agent and @oh-my-pi/pi-natives from ^16.0.6 to ^16.1.7
  • Bump droid from ^0.152.0 to ^0.153.1, including all 9 platform-specific @factory/cli-* optional sub-packages in bun.lock
  • Bump mistral-vibe from >=2.16.1 to >=2.17.1 (pyproject tools group)
  • Bump fastapi[standard] from >=0.137.1 to >=0.138.0 (pyproject hermes group)

Issues

No issues found.

CI Checks

The upgrade workflow fails during make dotagents-syncruler-apply-global with [ruler] Invalid configuration file format (Context: File: /home/runner/.ruler/ruler.toml, Errors: global). This failure is pre-existing on main (last 3 runs on main and prior renovate PRs all failed at the same step) and is unrelated to the dependency bumps in this PR — no code paths touching ruler.toml were changed.

Failing upgrade
Failing upgrade-check
  • Downstream check that fails because the upgrade job failed at the ruler-apply-global step described above. Pre-existing on main; not caused by this PR.

@mesa-dot-dev

mesa-dot-dev Bot commented Jun 27, 2026

Copy link
Copy Markdown

You do not have enough credits to review this pull request. Please purchase more credits to continue.

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@shunkakinoki, we couldn't start this review because you've reached your PR review rate limit.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b4dad376-6ac9-4dc8-b79a-5cd7ac431d13

📥 Commits

Reviewing files that changed from the base of the PR and between e8ba75c and ed43f8a.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • package.json
  • pyproject.toml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch renovate/all-minor-patch

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-dot-dev

mesa-dot-dev Bot commented Jun 27, 2026

Copy link
Copy Markdown

Mesa Description

TL;DR

Updates 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?

  • Project dependency files (e.g., package.json, lockfiles, or python dependency configurations):
    • Upgraded JS/TS dependencies:
      • @oh-my-pi/pi-coding-agent (^16.0.6^16.1.7) — Includes new /loop inline prompts, prompt-cache miss markers, TUI styling/TUI border corner unification, and various Windows compatibility and MCP fixes.
      • @oh-my-pi/pi-natives (^16.0.6^16.1.7) — Brings in TUI slash menu completions, skill command visibility in the slash menu, and provider catalog adjustments.
      • droid (^0.152.0^0.153.1)
    • Upgraded Python dependencies:
      • fastapi (>=0.137.1>0.138.0)
      • mistral-vibe (>=2.16.1>2.17.1)

Description generated by Mesa. Update settings

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 3 files

Re-trigger cubic

@shunkakinoki
shunkakinoki merged commit ab446fd into main Jun 27, 2026
40 of 42 checks passed
@shunkakinoki
shunkakinoki deleted the renovate/all-minor-patch branch June 27, 2026 05:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants