Skip to content

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

Merged
shunkakinoki merged 1 commit into
mainfrom
renovate/all-minor-patch
Jul 5, 2026
Merged

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

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Jul 5, 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.1.13^16.2.2 age confidence
@oh-my-pi/pi-natives (source) ^16.1.13^16.2.2 age confidence
@sentry/cli (source) ^3.5.1^3.6.0 age confidence

Release Notes

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

v16.2.2

Compare Source

Added
  • Added a new tiny model role for consolidated online task handling.
  • Added a textVerbosity setting to control OpenAI and Codex response detail.
Changed
  • Simplified the status line subagent display by removing running state and hub hint indicators.
  • Updated online title, memory, and classification tasks to prioritize the new tiny model role.
Fixed
  • Improved reliability of auto-retry logic for aborted requests by standardizing error classification across model adapters and ensuring stale session states are reset.
  • Enhanced MCP authentication error detection, header-based server discovery, and 401/403 authorization failure detection during Smithery commands and HTTP RPCs.
  • Fixed auto-generated session titles incorrectly preserving user all-caps text, ensuring proper sentence casing while still respecting intentional mixed-case identifiers.
  • Fixed Tavily web search with recency filters to automatically retry without a time range if Tavily returns an empty HTTP 200 response.
  • Fixed TUI thought stream stalling and ui.loop-blocked warnings during subagent-heavy runs by optimizing the mid-run compaction persistence check.
  • Fixed marketplace-installed plugins incorrectly appearing in both the npm plugin list and the extension-package status provider.
  • Fixed inconsistent OpenRouter prompt-cache hits on /advisor turns by ensuring advisor agents inherit the same provider-shaping options, hooks, and settings as the main agent.
  • Fixed path-scoped TTSR (Targeted Tool Safety Rules) evaluation for hashline and apply_patch edit streams, ensuring rules are correctly applied to file paths parsed from section headers and envelope markers without leaking across file scopes.

v16.2.1

Compare Source

Fixed
  • Fixed models.yml remote compaction schema support for V2 streaming endpoint fields. (#​4146)
  • Fixed the SSH tool to reject cwd values of ~ and ~/... before sending guaranteed-bad quoted tilde paths to remote POSIX shells. (#​4002)

v16.2.0

Compare Source

Breaking Changes
  • Renamed the search tool to grep and the find tool to glob. Existing user settings are automatically migrated to the new configuration keys.
Added
  • Added ssh://host/path support to read, search, and write tools for single text files and directory listings on pre-configured POSIX SSH hosts.
  • Added an interactive /move overlay with path autocompletion and directory creation prompts, starting a fresh session in the target directory while leaving the previous session resumable.
  • Added support for file deletion and moving within file editing operations.
  • Added providers.maxInFlightRequests setting to cap concurrent LLM requests per provider across local OMP processes.
  • Added support for discovery.type: litellm in models.yml to automatically discover model metadata from LiteLLM gateways.
  • Added models.yml configuration options remoteCompaction and compactionModel to run compaction on a separate model or opt into provider-native compaction.
  • Added project, user, and plugin-level dap.json and dap.yaml support for defining or overriding debugger adapters used by the debug tool.
  • Added TinyFish, DuckDuckGo, xAI, and Firecrawl web search providers.
  • Added an Appearance setting for OSC 9;4 native terminal progress indicators during active agent turns and context maintenance.
  • Added Loop Guard "Tool-Call Reminder" to automatically interrupt Gemini reasoning loops that generate excessive planning headers without acting.
Changed
  • Redesigned the persistent Todo HUD as a compact connector tree with fixed-budget stage previews
  • Anchored status and HUD containers to prevent redundant UI elements in terminal scrollback
  • Redesigned the persistent Todo HUD to render active stages as a connector tree, capping the number of displayed stages and tasks to keep the plan overview concise and stable.
  • Anchored the status row container directly between the HUD and the editor to prevent redundant UI elements from piling up in terminal scrollback.
  • Optimized edit tool UI: delete and single-file move operations now render as compact status rows
  • Improved terminal output for file-level edits (delete/move) to display accurate paths and state
  • Refined edit renderer to prevent misleading "No changes" messages in multi-file operations
  • Changed the inlineToolDescriptors setting from a boolean to a three-way enum (auto | on | off), defaulting to auto to inline descriptors only for Gemini models.
  • Added caching for successful document conversions (PDFs, Office documents, EPUBs) to avoid redundant conversions on repeated reads.
  • Moved the Working… activity indicator below the sticky todo and subagent HUDs so it sits just above the editor instead of floating atop the todo panel.
Fixed
  • Fixed Z.AI web search to initialize the Streamable HTTP MCP session before calling web_search_prime, preserving the returned session ID for authenticated tool calls. (#​3619)
  • Fixed terminal hangs on Ctrl+Z (SIGTSTP) after running bash tool calls, and insulated MCP stdio servers from terminal job-control signals.
  • Fixed macOS Cmd+V silently dropping image-only clipboard pastes in supported terminals.
  • Fixed an infinite loop in auto-compaction when a single recent turn exceeded the compaction threshold.
  • Fixed an issue where the advisor could enter a spam loop of repeated blocker injections, polluting the transcript.
  • Fixed Claude API and Anthropic classifier refusals polluting the replayed session context or persisting as assistant dialogue.
  • Fixed MCP tool calls failing with strict-schema servers by stripping internal metadata fields at the MCP boundary.
  • Fixed a terminal freeze/hang when a subagent abort was triggered.
  • Fixed thinking blocks appearing in the UI when thinking level is "off" for providers that return them anyway.
  • Fixed GitLab Duo Agent namespace/project discovery and authentication flow hangs.
  • Hardened and improved ssh:// protocol handling, including support for IPv6 brackets, percent-encoded hosts, port validation, and POSIX shell restrictions, while preventing unsupported tools from attempting SSH connections.
  • Fixed TUI usage display fraction resolution and added expiry dates for banked Codex rate-limit resets to the /usage display.
  • Fixed a rendering issue where long-running SSH commands left stale pending headers in terminal scrollback.
  • Fixed garbled casing in auto-generated session titles by reconciling title tokens against the user's original messages.
  • Fixed IRC broadcasts rendering twice in the main agent's transcript.
  • Improved the persistent Todo HUD styling and progress indicators to make it self-describing and visually distinct.
  • Fixed browser screenshots reporting 0x0 dimensions when image headers expose real dimensions.
  • Fixed snapcompact compaction silently falling back to LLM summaries when local preflight rejects the archive.
  • Fixed snapcompact compaction silently falling back to an LLM summary when local preflight rejects the archive; manual and auto snapcompact now fail locally with the blocker instead of making provider calls. (#​3599)
  • Fixed garbled casing in auto-generated session titles. normalizeGeneratedTitle (packages/coding-agent/src/tiny/text.ts) used to force Title Case via a \b\p{Ll} regex, capitalizing function words ("for" → "For") and amplifying stray model capitals ("dAemon" → "DAemon"). It now reconciles each title token against the user's own message: tokens typed verbatim are kept; proper nouns the user cased distinctively are restored when the model flattened them ("tinyvmm" → "TinyVMM"); lowercase words carrying a stray interior capital the user never wrote are flattened ("dAemon" → "daemon"); and model-cased PascalCase proper nouns ("GitHub", "OAuth") are left untouched. Restoration is limited to distinctively cased source tokens so a message that merely starts with "For" can't force a mid-title "for" to "For". Applies to both the local tiny-model and online pi/smol title paths.
  • Fixed IRC broadcasts (to: "all") rendering twice in the main agent's transcript. A subagent broadcast fans out one bus.send per live peer, and listVisibleTo always includes Main, so the main agent received the body once as its own irc:incoming card and once per other recipient as an irc:relay observation of the sibling legs (Sender → Other) — identical text shown N+1 times. IrcTool.#executeSend now sets suppressRelay on every broadcast leg when Main is among the targets (it already has the body via its direct incoming card), and IrcBus.send skips #relayToMainUi for suppressed legs. Direct sub→sub relays, direct messages to Main, and Main's own outbound sends are unaffected.
  • Fixed Claude API refusals polluting the replayed session context and causing later prompts to refuse again. (#​3592)
  • Fixed browser screenshots reporting 0x0 dimensions when Bun.Image rejects an image whose PNG/JPEG header still exposes real dimensions. (#​3577)
  • Fixed Anthropic classifier refusals being persisted as assistant dialogue after no fallback handled them; refusal stops are now displayed as errors but pruned from active and saved context before the next prompt. (#​3591)
  • Fixed the eval tool.* bridge leaking the harness-internal i ("intent") field into MCP tools/call requests, so strict-schema servers (Linear, anything with additionalProperties:false / Zod .strict()) rejected every call with -32602 unrecognized_keys: ["i"] while the same call via the direct model tool-call path succeeded. MCPTool.execute / DeferredMCPTool.execute (packages/coding-agent/src/mcp/tool-bridge.ts) now strip INTENT_FIELD at the MCP boundary, so an MCP call behaves identically whether issued by the model directly or via the eval tool.* bridge; servers that legitimately declare i as a real parameter keep it untouched. (#​3575)
  • Fixed the advisor entering a spam loop in which it emitted hundreds of repeated Stop., Done., and No issue; continue. <advisory severity="blocker"> injections, polluting the primary transcript and destabilizing the watched agent after the task was already complete. The advisor system prompt's rules ("at most one advise per update", "NEVER send the same advice twice") are now enforced in code by a new AdvisorEmissionGuard on the enqueueAdvice boundary in AgentSession: it normalizes each note (case-insensitive, punctuation-folded), drops content-free self-talk filler (stop/done/no issue continue/lgtm/etc.), dedupes by exact normalized text across the session (bounded FIFO history), and rate-limits to one accepted note per advisor model prompt cycle. Reset on advisor reset (compaction, session switch, /new) so a re-primed reviewer can re-raise old issues. (#​3520)
  • Fixed auto-compaction thrashing on a session whose single most-recent kept turn already exceeds the compaction threshold. prepareCompaction keeps that turn verbatim (findCutPoint never cuts at tool results), so the rewritten context stays above threshold; the context-full / snapcompact success tail scheduled the agent-authored auto-continue (and the overflow/incomplete retry) unconditionally, so the next agent_end re-entered #checkCompaction over the same oversized tail and re-fired forever. This is the residual loop left after #​3247 capped snapcompact's own frame projection — once the frame cap drops below one frame, snapcompact is skipped and the context-full summarizer path still made no headroom. #runAutoCompaction now gates the threshold auto-continue on a post-maintenance headroom check (#compactionCreatedHeadroom, sharing shake's COMPACTION_RECOVERY_BAND hysteresis from #​2275) and the overflow/incomplete retry on a separate fit check (#compactionCreatedRetryFit, measured after the failed turn is dropped) so a recoverable overflow that fits the window still retries; when a pass frees too little for the relevant path it pauses automatic maintenance and emits a single warning instead of looping. The post-turn threshold check also ignores an assistant's stale pre-compaction usage so the scheduled auto-continue cannot re-trip on the kept assistant's old high token count. The headroom check now treats any residual at or below the recovery band as progress: the band sits strictly under the compaction threshold, so a stale/tool-output prune that already pushed the trigger sub-band no longer makes a residual that merely holds the line report a false "no progress" and suppress a valid auto-continue.
  • Fixed the advisor prompt allowing confident root-cause claims about tool-call arguments absent from its reviewed transcript, so timeout advice now has to cite observed fields instead of inventing mechanisms like paths[0] array flattening. (#​3483)
  • Fixed eval agent() helper subagents remaining visible as idle/IRC-revivable peers after the helper call returns; one-shot eval subagents now dispose and unregister at completion. (#​3407)
  • Fixed the parent interactive prompt wedging (frozen, 0% CPU) after a subagent's yield-triggered abort. The executor's abort monitor and abort listener each called session.abort() fire-and-forget, so runSubprocess could resolve and adopt the subagent before its abort cleanup finished clearing in-flight session state. Active-subagent aborts are now deduped through a single cached cleanup promise that the subprocess awaits (bounded) before finalizing. (#​2805)
  • Fixed thinking blocks appearing in the UI when thinking level is "off". Some providers (MiniMax, GLM, DeepSeek) return thinking blocks even with reasoning disabled; thinking blocks are now auto-hidden when the thinking level is "off", regardless of the hideThinkingBlock setting. Toggling thinking block visibility while thinking is off shows a status message instead of silently no-op'ing. (#​626)
  • Fixed the TUI usage display failing to resolve a used fraction for limits that only populate remainingFraction (no usedFraction, used/limit, or percent+used). The TUI's local resolveFraction was missing the inverted-remaining fallback that the shared resolveUsedFraction from @oh-my-pi/pi-ai already handles — replaced the local copy with the shared function so the TUI and CLI paths resolve fractions identically.
  • Fixed long-running SSH command boxes leaving a stale ⏳ SSH: [host] header above the final ⇄ SSH: [host] header in terminal scrollback. The SSH renderer now keeps its partial-result chrome on the pending icon/state and opts the block out of stream-commit while isPartial holds (via the new ToolRenderer.provisionalPartialResult flag honored by ToolExecutionComponent.isTranscriptBlockCommitStable), so the stable-prefix ratchet can't promote the partial header to native scrollback only to have the final render strand it above the settled frame (#​3177).
  • Fixed Gemini over-planning runs that emit long chains of thinking headers (**Refining …**, ## Examining …) without ever issuing a tool call. The session now interrupts that stream, discards the partial reasoning turn, injects a hidden tool-call reminder, and continues with the corrective context instead of burning the full budget on planning.
  • Fixed Cmd+V on macOS silently dropping image-only clipboard pastes (screenshot via Cmd+Shift+5 "save to clipboard", Chrome image copy, …) — the user had to fall back to Ctrl+V. Follow-up to #​3506: that fix handled clipboards exposing a file URL or path; the screenshot path leaves only raw image bytes on the pasteboard. macOS terminals (iTerm2, Terminal.app, Warp, Ghostty without OSC 5522, Windows Terminal forwarding, …) intercept Cmd+V and read NSPasteboardTypeString first; for an image-only clipboard that read returns "", so the terminal forwards a complete-but-empty bracketed paste (\x1b[200~\x1b[201~). CustomEditor.handleInput inserted the empty payload and the keystroke disappeared. CustomEditor now runs its own BracketedPasteHandler ahead of the inherited handler so the assembled paste payload is routed regardless of whether the start marker, payload, and end marker arrive in one stdin chunk or are fragmented across several (Windows Terminal under load, certain SSH muxes, tmux extended-keys passthrough, …). Strict-zero-length assembled payloads route to the same onPasteImage smart reader the app.clipboard.pasteImage keybind uses (attaches the clipboard image, or falls back to the #​1628 smart text paste / "clipboard is empty" diagnostic); explicit image-file paths route to onPasteImagePath (the #​3506 path also benefits from split-chunk assembly); everything else hands off to the base editor's pasteText so [Paste #N] markers, autocomplete, and undo state stay intact. Whitespace-only pastes are preserved as literal text. Trailing keystrokes that arrive in the same stdin read as the paste (a user hitting Enter right after Cmd+V) are queued behind the in-flight clipboard read and only dispatched once the image has reached pendingImages, so submit can't fire against an empty draft and leave the image stranded on the next prompt. (#​3601)

v16.1.23

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.22

Compare Source

Fixed
  • Fixed Windows stdio MCP server launches showing a separate cmd.exe window for direct executable servers; MCP subprocesses now set windowsHide on every Windows spawn path. (#​3535)
  • Fixed MCP OAuth still failing with Authorization failed: An unexpected error occurred against Plane's https://mcp.plane.so/http/mcp endpoint after #​3502. The protected-resource metadata advertised the path-scoped issuer https://mcp.plane.so/http, but discoverOAuthEndpoints (packages/coding-agent/src/mcp/oauth-discovery.ts) probed /.well-known/oauth-authorization-server at the origin root first and accepted the metadata served there — which describes a different issuer (https://mcp.plane.so/) whose /authorize endpoint rejects every grant. Discovery now honors RFC 8414 §3.3 and skips authorization-server / OpenID Connect well-known documents whose issuer field doesn't match the queried base URL (trailing-slash insensitive). Servers that omit issuer keep today's permissive behavior, so legacy flows are unaffected. (#​3537)

v16.1.21

Compare Source

Fixed
  • Fixed autolearn.autoContinue (the "Auto-run capture at stop" toggle) letting the synthetic capture turn keep working after the learn/manage_skill call instead of yielding. With the toggle on, the controller fires autolearn-nudge.md as a single attribution: "user" message on a new turn; the prompt opened with "Before you finish:" and gave no terminal contract, so the agent treated the synthetic prompt as the user's reply to its prior pending question (e.g. "Want me to commit and push?") and continued — pushing commits, running tools, etc. — without the user ever answering. The nudge is now split into two prompts: passive mode (the reminder rides the user's real next message) keeps additive framing — "answer the user normally; the capture is in addition to" — while auto-continue mode (autolearn-nudge-autocontinue.md) is explicitly terminal — "not a user reply; do not treat this as approval; capture, then stop; wait for the user's next prompt". Attribution stays user to preserve llama.cpp warm-prefix reuse (#​3456). (#​3504)
  • Fixed the clipboard image-paste keybind dropping image-file-only pasteboards as literal text on macOS. When the clipboard exposes only the file URL (e.g. Finder Cmd+C on a .png, certain screenshot tools), arboard::get_image() returns ContentNotAvailable and pbpaste(1) returns empty (it only surfaces plain text / RTF / EPS), so InputController.handleImagePaste either fell through to the #​1628 text fallback and pasted the path verbatim, or dead-ended with "Clipboard is empty". The keybind path now (1) reaches the public.file-url representation directly via a new readMacFileUrlsFromClipboard AppleScript bridge on Darwin and routes the first image-shaped path through handleImagePathPaste, (2) reuses a new extractImagePathFromText helper so any clipboard-text path that survived pbpaste is detected the same way the bracketed-paste handler already detects them — including a whole-text-as-path fallback for anchored paths whose unescaped spaces would otherwise be shredded by the bracketed-paste splitter (macOS screenshot names like /Users/me/Desktop/Screenshot 2026-06-25 at 1.23.45 PM.png), and (3) decodes file:// URLs to filesystem paths in normalizePastedPath (mirroring Codex's normalize_pasted_path in codex-rs/tui/src/clipboard_paste.rs). Keybind- and terminal-mediated paste now agree on raw image bytes, plain image paths, file:// URLs, Finder-copied image files, and screenshot filenames with spaces alike. (#​3506)
  • Fixed compiled-binary validation for legacy pi.extensions packages whose source imports worker-only coding-agent subpaths or extension-local package subpaths such as typebox/value; omp install @&#8203;charmland/pi-hyper-provider, omp plugin doctor, and runtime provider discovery now use a main-thread-safe load path. (#​3508)
  • Fixed repeated todo updates in one TUI turn stacking full todo panels; superseded todo snapshots now stay live until the next todo update replaces them or the turn ends. (#​3516)
  • Fixed MCP OAuth authorization failing with Authorization failed: An unexpected error occurred against authorization servers (Plane is the live example) that reject redundant fallback resource indicators. OMP now drops same-origin resources only when it synthesized them from the server URL fallback (e.g. https://mcp.plane.so/http/mcp). Provider-advertised resources from OAuth/protected-resource discovery or an embedded authorization-URL resource query parameter are preserved even when they are same-origin or origin-only, so gateway-hosted MCP services can still request the audience they advertised. The refresh-token path uses the same policy, filtered against the authorization-server origin persisted on the credential as authorizationUrl, with tokenUrl's origin as the legacy fallback when that field is absent. (#​3502)

v16.1.20

Compare Source

Fixed
  • Fixed Ctrl+Z hanging the terminal after any tool call had run: the TUI tore down (ui.stop()) but the process kept running in Sl+ state, leaving the user with a dead terminal recoverable only via kill -9. The embedded brush-core shell behind every bash tool call installs a tokio SIGTSTP listener on Process::wait (crates/brush-core-vendored/src/sys/unix/signal.rs::tstp_signal_listenertokio::signal::unix::signal(SIGTSTP)); per tokio's contract, the first call for a SignalKind permanently replaces the kernel-default handler for the lifetime of the process. So the first bash invocation — even /usr/bin/true — silently overrode SIGTSTP's "stop" default, and InputController.handleCtrlZ's subsequent process.kill(0, "SIGTSTP") was swallowed by tokio. The handler now sends SIGSTOP (uncatchable, unblockable, unignorable) to the foreground process group, so the kernel parks omp regardless of installed handlers and the shell sees the whole job stop even when omp runs behind a wrapper (npx, pnpm exec, bunx, …) or as one stage of a pipeline. MCP stdio servers now spawn detached into their own session — they're insulated both from terminal job-control signals (which used to stop their process trees and leave the JSONL read loop blocked on silent pipes) and from the new pgid=0 suspend itself (#​3461).
  • Fixed image-only composer submissions while the agent is streaming being treated as empty input, which dropped the image or aborted the active turn when another message was queued. Pending pasted images now count as submit content for Enter and Ctrl+Enter follow-ups. (#​3467)
  • Fixed omp gallery --state accepting lifecycle tokens that did not match displayed state labels and rendering unknown state values as · undefined; displayed labels now work as aliases, invalid values fail with a valid-token list, and failed gallery fixtures visibly render failures. (#​3473)
  • Fixed the bash tool's snapshotted mise() shell function dying with command: command not found: because $__MISE_EXE was empty in the replay shell. generateSnapshotScript captured the function via declare -f/typeset -f but only ever re-exported PATH, so every other env var the rc file set (notably the *_EXE sidecar mise activate exports) was lost; the function body then expanded command "$__MISE_EXE" "$@&#8203;" to command "" … and died with exit 127. The snapshot script now scans captured function bodies for $VAR / ${VAR…} references and re-emits export NAME='value' for each referenced var that is currently set (with a denylist for shell-internal names like PATH/HOME/BASH_*/LC_* plus a likely-secret denylist for *TOKEN*/*SECRET*/*API_KEY*/*PASSWORD*/*PRIVATE_KEY*/*ACCESS_KEY*/*CREDENTIAL*/*SESSION_KEY*), the snapshot script umask 077s itself and the JS caller chmods the snapshot file/dir to 0600/0700 so the new export pass can't leak secrets into a shared tmp dir. Fixes mise, asdf shims, direnv-style helpers, and other activation idioms that pair a function with a helper env var. getShellConfigFile now also honours env.HOME (falling back to os.homedir()) so sandboxed callers can target a non-default rc. (#​3470)
  • Fixed concise history:// transcript rendering for find and search so scoped paths arguments are visible instead of being hidden behind JSON fallback output or omitted when a search pattern is present. (#​3482)
  • Fixed manual /compact leaving session.isCompacting false while active-turn abort teardown awaited, so the first steer/follow-up typed during compaction startup now routes through the compaction queue instead of being lost. (#​3485)
  • Fixed ollama-cloud task/subagent fan-out exceeding the provider's three-request concurrency cap by adding a provider-specific subagent limiter, and let configured task/smol/advisor model roles inherit the default retry fallback chain when they do not define their own chain. (#​3464)
  • Fixed the per-provider subagent concurrency limiter (e.g. providers.ollama-cloud.maxConcurrency) being replaced with a fresh semaphore whenever the configured limit changed, which orphaned the in-flight slots on the old instance and let a runtime or mixed limit value exceed the cap. The limiter now resizes a single shared semaphore in place — raising the ceiling admits queued waiters immediately, lowering it drains in-flight holders without admitting past the new cap. (#​3464)
  • Fixed a background-task spawn slot leaking from the task.maxConcurrency limiter when progress reporting threw between acquiring the slot and entering the guarded run: markRunning/reportProgress now run inside the try whose finally releases the semaphore, so a failed progress report can no longer permanently shrink subagent concurrency. (#​3464)
  • Fixed active goal runs that successfully call yield and then receive a trailing empty assistant stop skipping threshold compaction; post-yield empty-stop suppression now still anchors active-goal compaction on the yield-bearing assistant turn, so long-running tasks continue after maintenance instead of settling early.

v16.1.19

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.18

Compare Source

Added
  • Added --list flag to view stored OAuth accounts for a provider
  • Added --account flag to select a specific OAuth account by index for token retrieval
  • Added mouse support for navigation, selection, and toggling in the extensions dashboard
Changed
  • Enabled fullscreen alternate-screen mode for the extensions dashboard
  • Improved tab navigation to mute empty enabled providers while keeping disabled ones selectable
  • /extensions (the Extension Control Center) now opens as a fullscreen window on the terminal's alternate screen, matching /settings: it borrows the alt buffer for its lifetime (the transcript is untouched underneath) and uses the same modern chrome — a titled rounded frame, the shared TabBar for provider switching, and a divider/footer layout. The dashboard is now mouse-aware: the wheel scrolls the list (and the detail inspector, which gained its own scroll viewport), hovering highlights tabs and rows, and clicking selects a row or — when it is already selected — toggles it; clicking a provider tab switches to it. Empty enabled providers are unselectable while disabled providers stay selectable so their master switch can re-enable them.
Fixed
  • Fixed omp install of legacy pi extensions failing with Cannot find module '/$bunfs/root/packages/coding-agent/src/extensibility/typebox.js' on every released omp-<platform>-<arch> binary. Commit dc5c93462f removed worker entrypoints from scripts/ci-release-build-binaries.ts; the inline comment then claimed the legacy-shim and package-barrel entrypoints (typebox.ts, legacy-pi-{ai,coding-agent}-shim.ts, packages/{agent,natives,tui,utils}/...) were "still" passed to bun build --compile, but they had never been re-added. The release binaries shipped without those files in bunfs, so legacy-pi-compat.ts redirected typebox imports to a bunfs path that didn't exist. __resolveTypeBoxShimPath now mirrors __validateLegacyPiPackageRootOverrides (#​2168) by dropping the override when the shim file is missing, so a missing shim falls through to native node_modules resolution instead of emitting a dead bunfs URL (#​3414).
  • Fixed every legacy @(scope)/pi-* and @sinclair/typebox import failing to load on the omp-darwin-arm64 release binary (and any other omp built with Bun 1.3.14). __validateLegacyPiPackageRootOverrides and the rewriteLegacyPiImports emit path both depended on --compile extras being reachable as /$bunfs/root/... filesystem entries, but Bun 1.3.14 stopped exposing them through every API (fs.existsSync, Bun.file().exists(), Bun.resolveSync, await import() on the bunfs path or its file:// URL all fail; only /$bunfs/root/<binary-name> itself answers). legacy-pi-compat.ts now keeps a JS-heap reference to every bundled pi-* surface in a lazy-loaded sibling legacy-pi-bundled-registry.ts and serves them through an omp-legacy-pi-bundled: virtual namespace whose Bun.plugin().onLoad returns synthetic re-exports — no bunfs path ever leaves the module in compiled mode, and dev / source-link / installed-package modes keep the historical file:// rewrite. The matching --compile extras in scripts/build-binary.ts, the shared scripts/binary-entrypoints.ts list, and the dead BUNFS_PACKAGE_ROOT / bunfsPath / __computeBunfsPackageRoot / __joinBunfsPath helpers are gone. (#​3423)

v16.1.17

Compare Source

Fixed
  • Fixed mnemopi auto-retain extracting facts/entities from assistant-authored transcript turns. MnemopiSessionState.retainMessages still stores the full multi-role window for episodic recall, but passes only user-authored turns as extractText, so assistant prose containing always/never no longer becomes durable user Instruction: memory. (#​3372)
  • Fixed lazy tool auto-downloads hanging when Bun.write(dest, response) receives a streaming fetch() Response; tool assets now stream the response body to disk with the existing download abort signal and remove partial files on abort. (#​3369)
  • Fixed profile-alias installer producing backslash-separated paths for bash/zsh/fish config files on Windows. path.join was used unconditionally, producing Windows-style paths that POSIX shells can't resolve. The installer now uses path.posix.join for non-Windows platforms and normalizes script paths to forward slashes for POSIX shell alias blocks, so omp --alias works correctly in Git Bash and WSL.
  • Fixed pasted or dragged non-image file paths in the TUI prompt staying as inert raw text; existing files now attach as clean local://attachment-N.<ext> references while image paths keep the image attachment flow. (#​3360)
  • Slash commands are now recorded in input history (Up Arrow recall). Previously only 4 commands (/plan, /goal, /mcp, /ssh) stored their text; all other built-in slash commands were silently skipped because executeBuiltinSlashCommand returned true before addToHistory was called. History is now centralized in the input controller after successful command dispatch. Commands that may carry secrets (/login <url> with OAuth callback params, /mcp add --token <token>) are excluded from history to prevent credential leakage (#​3148)
  • Fixed the ask tool's "Other (type your own)" free-text editor (prompt-style HookEditorComponent) ignoring Ctrl+Q and Ctrl+Enter, so Windows Terminal users who learned the app.message.followUp chord from the main editor (#​1903 / fixed by #​1905) got zero feedback on submit. The hook-style and main-editor surfaces honored matchesAppFollowUp; the prompt-style handler did not, leaving plain Enter as the sole submit path and Ctrl+Enter falling through to Editor as a newline (silently swallowed by WT). #handlePromptStyleInput now checks matchesAppFollowUp first — mirroring #handleHookStyleInput — and the hint reads enter or ctrl+q submit so the chord is discoverable. (#​3353)
  • Fixed the TUI freezing when a tool approval prompt fires while /settings (or the Extensions/Agents dashboard) is open. The fullscreen overlay's close handler restored focus to the editor it had captured at open time, but ExtensionUiController had since swapped the editor out of the editor slot for the approval prompt — so on exit the visible prompt sat unreachable while keystrokes routed to the now-unmounted editor (no Enter/Up/Down/Esc response, only Ctrl+C escaped). SelectorController now restores focus to whatever currently owns the editor slot via a focusActiveEditorArea() helper, applied to settings, extensions dashboard, and agents dashboard close paths. (#​3349)
  • Fixed /settings coercing enum/text values to display strings before handing them to the TUI list, preventing YAML numeric enum values from reaching native truncation (#​3338).
  • Fixed all extension loading silently failing on the cross-compiled omp-darwin-arm64 release binary (downloaded directly or via a Homebrew tap wrapper) because __computeBunfsPackageRoot mis-handled import.meta.dir = "//root/omp-darwin-arm64". Bun 1.3.14 reports <bunfs-root>/<binary-name> for the compiled entry's import.meta.dir, but the pre-fix function joined metaDir + "packages" and produced /root/omp-darwin-arm64/packages — the binary basename was baked into every bunfs path, so the TypeBox/legacy-pi shims and every @oh-my-pi/pi-* package-root override failed existsSync validation and resolveCanonicalPiSpecifier fell through to a bunfs Bun.resolveSync that also could not find the module. The function now detects the bunfs-root + binary-basename shape (path.basename(path.dirname(metaDir)) === "root") and strips the trailing binary segment by slicing the original metaDir; the production bunfs shim join path also preserves Bun's bunfs-native //root / B:\~BUN\root prefix that path.join would otherwise collapse. (#​3329)
  • Fixed llama.cpp discovery to prefer per-model /v1/models meta.n_ctx/meta.n_ctx_train values, refresh selected models after lazy load, and bypass fresh-cache reuse so server restarts update context windows. (#​3310)
  • Fixed task.maxConcurrency: 0 serializing subagent spawns instead of running them unbounded. The settings UI labels 0 as "Unlimited", but the session-scoped spawn Semaphore clamped max via Math.max(1, max), so the second subagent body in a batch always waited for the first to release the seat. The constructor now treats max <= 0 (and any non-finite input) as unbounded via Number.POSITIVE_INFINITY, matching the eval parallel()/pipeline() worker-pool semantics (#​3305).
  • Fixed MCP tool calls forwarding empty optional placeholder arguments ("" and {}) to tools/call; optional placeholders are now omitted while required fields and meaningful falsy values are preserved. (#​3302)
  • Fixed the welcome Tip: line rendering with hardcoded #b48cff / #&#8203;9ccfff pastels plus a manual \x1b[2m dim, so any light theme dropped the body to ~1.5:1 contrast (well under WCAG AA). renderWelcomeTip in packages/coding-agent/src/modes/components/welcome.ts now paints the label through theme.fg("customMessageLabel", …) and the body through theme.fg("muted", …) (no manual dim), so the line tracks the active theme and stays legible on light backgrounds. (#​3337)
  • Fixed omp usage and the /usage command duplicating provider-wide disclaimer notes (e.g. OpenCode Go's "OMP-observed spend only") once per account × limit window. Provider-level notes now render once above the per-account sections in the TUI, CLI, and ACP render paths, and identical per-limit notes are deduplicated in the TUI aggregate renderer. (#​3268)
  • Fixed the welcome panel advertising ? for keyboard shortcuts after the ? shortcut was deliberately removed (commit dcf482c). The tips section now points users at /hotkeys instead. (#​1614)
  • Fixed Devin provider models silently producing empty responses under the default defaultThinkingLevel: auto. Devin models advertise reasoning: true but no thinking.efforts (Cascade selects effort by routing to sibling model ids, not a wire param), so getSupportedEfforts(model) was empty; clampAutoThinkingEffort returned the classifier-picked effort as-is, which then tripped `requireSupporte

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 core agent and tooling dependencies for stability and fixes. Bumps @oh-my-pi to 16.2.x and @sentry/cli to 3.6.0; lockfile refreshes platform builds for @openai/codex.

  • Dependencies

    • @oh-my-pi/pi-coding-agent: ^16.1.13^16.2.2 (new tiny model role, SSH file ops, many reliability fixes)
    • @oh-my-pi/pi-natives: ^16.1.13^16.2.2 (compat with 16.2.x)
    • @sentry/cli: ^3.5.1^3.6.0
    • Lockfile: platform binaries for @openai/codex updated to 0.142.5
  • Migration

    • If you reference coding-agent tools by name, update: searchgrep, findglob (settings auto-migrate, but check custom scripts/configs).

Written for commit 312f991. Summary will update on new commits.

Review in cubic

@shunkakinoki
shunkakinoki enabled auto-merge (squash) July 5, 2026 04:24
@indent-zero

indent-zero Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor
PR Summary

Routine Renovate minor/patch bump of three top-level CLIs, with an incidental lockfile cleanup that removes stale entries left over from prior PRs. Low-risk: no application code consumes these packages programmatically and the lockfile is now consistent with package.json.

  • Bumps @oh-my-pi/pi-coding-agent and @oh-my-pi/pi-natives from ^16.1.13^16.2.2 (minor).
  • Bumps @sentry/cli from ^3.5.1^3.6.0 (minor).
  • Regenerates bun.lock, which drops the stale @vibe-kit/grok-cli entry and its transitive deps (already removed from package.json in chore: remove @vibe-kit/grok-cli #1984) and resyncs the @openai/codex-* platform-package workspace metadata to the 0.142.5-<platform> versions declared in package.json (from fix(codex): install real native binary for aliased optional deps #1982).
  • Dedups top-level openai from 5.23.26.39.1; safe because the only remaining consumer (openclaw) already pins 6.39.1.

Issues

No issues found.

CI Checks

Waiting for CI checks...

@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Warning

Review limit reached

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

Next review available in: 58 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

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 reviews.

How do review 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 refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 035d545a-1443-4269-b36d-a47b37bc0b45

📥 Commits

Reviewing files that changed from the base of the PR and between a656edb and 312f991.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (1)
  • package.json
✨ 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 in package.json and bun.lock. Specifically, @oh-my-pi/pi-coding-agent and @oh-my-pi/pi-natives are upgraded to ^16.2.2, and @sentry/cli is upgraded to ^3.6.0. Additionally, the lockfile reflects the removal of @vibe-kit/grok-cli along with its associated sub-dependencies, and the openai package is upgraded to version 6.39.1. There are no review comments, so I have no additional feedback to provide.

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.

@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 2 files

Re-trigger cubic

@shunkakinoki
shunkakinoki disabled auto-merge July 5, 2026 06:05
@shunkakinoki
shunkakinoki merged commit 3a2588f into main Jul 5, 2026
37 of 39 checks passed
@shunkakinoki
shunkakinoki deleted the renovate/all-minor-patch branch July 5, 2026 06:06
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