github can1357/oh-my-pi v18.4.3

8 hours ago

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

Added

  • Added transformAssistantMessagePreservesToolCalls, letting stream speculation and direct speculative candidates run under a transformAssistantMessage that never rewrites streamed tool calls
  • Added authorizeLaunch to the speculative execution host and coordinator so tool stream sessions can start host-approved effectful work (e.g. subagents) before their call dispatches

Fixed

  • Fixed auto-compaction with the remote method failing on long Codex/OpenAI sessions with "Remote compaction input exceeds the context window" (#13611)
  • Fixed passive tool-call context being repeated when several calls in one batch returned the same text; identical per-call context is now delivered once, at its first position (#13633 by @andrebrait)

@oh-my-pi/pi-ai

Added

  • Added Command Code usage limits (5-hour, weekly, and credit balance) to /usage and the status line (#13666 by @riicodespretty)

Changed

  • Reduced per-token CPU and allocations while streaming: the leaked-thinking scanner used for OpenAI-compatible and custom endpoints no longer allocates per character, chat-completions and Bedrock look up a delta's content block in constant time, Google, Gemini CLI, Codex, and chat-completions streams skip raw SSE line capture unless an onSseEvent listener is attached, and event streams drain backlogs without Array#shift (#13650 by @H4vC).

@oh-my-pi/pi-catalog

Added

  • Added Command Code's typesafe/jev decision model for the judge role (#13666 by @riicodespretty)
  • Added Command Code's DeepSeek V4.1 Flash Fast model (#13666 by @riicodespretty)
  • Added Command Code's Claude Sonnet 5.5 model (#13666 by @riicodespretty)
  • Added trust-forbidden=#true for optional login validate checks, so a key check that answers 403 keeps the pasted key instead of rejecting it (#13666 by @riicodespretty)
  • hosted-image #false and image-model #false now remove a hosted image flag or image model that a class rule grants (#13666 by @riicodespretty)
  • Added support for Claude Sonnet 5.5 model with image and text inputs
  • Added new compatibility rules for Anthropic Sonnet family enabling mid‑conversation system features and disabling forced tool choice
  • Added the web-search-model, hosted-image, and image-model catalog axes (Model.webSearchModel, hostedImage, imageModel). web-search now comes from the model's lineage and API (GPT-5+ Responses, Claude 4+ Messages, Gemini 2+), so proxies and gateways that expose these models inherit it.

Changed

  • Renamed the Codex image model openai-codex/gpt-image-1 to openai-codex/gpt-image-2 to match what the Codex backend runs (gpt-image-2-codex); saved openai-codex/gpt-image-1 selectors resolve to the new id.
  • Routed Command Code's 10 GPT models through the OpenAI Responses API (#13666 by @riicodespretty)
  • Command Code login now rejects a key that Command Code answers with 401; a 403 or an unreachable check keeps the pasted key, as the Command Code CLI does (#13666 by @riicodespretty)
  • Command Code GPT models no longer advertise hosted image generation or the gpt-image-2 image model, which Command Code does not serve (#13666 by @riicodespretty)
  • Command Code Muse Spark models drop the minimal thinking level, and Muse Spark 1.3 adds max, matching the Command Code CLI (#13666 by @riicodespretty)
  • Changed Command Code prices to match the Command Code CLI: DeepSeek V4 Flash and V4 Flash Vision Exp drop from 0.22 / 0.66 to 0.15 / 0.6 per 1M tokens, Step 3.5 Flash input drops from 0.1 to 0.09, and LongCat 2.0 is no longer shown as free (0.3 / 1.2) (#13666 by @riicodespretty)

Fixed

  • Fixed missing thinking levels, image input, and prices for Command Code models (#13666 by @riicodespretty)

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

Added

  • Batch task calls now start each subagent as soon as its tasks[] item finishes streaming instead of waiting for the whole call; launched agents are aborted if the finished call is invalid, blocked, or changed. Controlled by task.speculativeLaunch (default on; requires auto-allowed task approval and no extension tool lifecycle handlers)
  • Set PI_SMART_GIT=1 to have every git worktree add in the bash tool — including inside compound commands, functions, and loops — copy-on-write clone the checkout (APFS, btrfs/XFS reflink, ReFS) instead of checking out every file, so new worktrees start with ignored build caches (target/, node_modules/) already in place; every worktree add option except --orphan, --no-checkout, --track, and --relative-paths is handled, and anything else still runs real git.

Changed

  • Running omp "prompt" without a terminal on stdin (scripts, CI, </dev/null) now runs the prompt headless like -p; a bare omp without a terminal exits 2 with an error instead of exiting silently (#13623 by @H4vC)
  • Invalid --thinking, --approval-mode, and --mode values are now rejected with a usage error (exit 2) listing the valid values, instead of being silently ignored (#13623 by @H4vC)
  • The default web search chain is now free-only: Parallel, the session's own model (new web/hosted), Exa, Firecrawl, SearXNG, and the credential-free scrapers. Paid engines (Perplexity, Tavily, Brave, Kagi, …) and other providers' chat models run only when you set them on the web role or its fallback chain.
  • Parallel, Exa, and Firecrawl now run their keyless endpoints in the automatic chain instead of only when explicitly selected.
  • Perplexity search no longer falls back to your OpenRouter key; select openrouter/perplexity/… explicitly to search through OpenRouter.
  • Hosted web search now follows the model rather than the host: GPT-5+ over any Responses API, Claude 4+ over any Messages API, and Gemini 2+ (including Gemini CLI), so web/hosted works through proxies and gateways. A model-backed search that returns no sources now counts as a failure, so the chain moves on to the next engine instead of showing an unsourced answer.
  • web/hosted first tries a cheaper model on the session's own provider (e.g. Opus → Haiku, GPT-5.x → GPT-5.6 Luna, Gemini Pro → Flash) and falls back to the session model itself when the host does not offer it or the call fails.
  • Image generation now tries the session provider's own image model first (e.g. GPT-5.x → gpt-image-2, Gemini → gemini-3-pro-image, Grok → grok-imagine-image), and a GPT-5+ session model generates images itself through the hosted image tool when its provider or proxy has no image model.
  • The default image model chain now uses openai/gpt-image-2, openai-codex/gpt-image-2, and the GA gemini-3-pro-image (Google and OpenRouter) instead of gpt-image-1 and the Gemini preview id.
  • Reduced CPU while streaming replies and tool calls: the reveal no longer deep-compares frozen leading content on every flush, streamed argument extraction no longer re-verifies the whole prefix, and deltas no longer queue extension notifications when no extension listens for message_update (#13650 by @H4vC).
  • Reduced CPU and allocations for in-memory reads (URLs, notebooks, converted documents), tool-result spill checks, write read-projection guards, and hashline prefix stripping (#13650 by @H4vC).

Fixed

  • Fixed alt+p and /switch model picker latency by avoiding unnecessary catalog rebuilds
  • Fixed --tools with an unknown name printing a stack trace and listing only the tools left after filtering; it now prints a clean error naming unknown tools, built-in tools unavailable in the session, and the built-in and registered tools (#13623 by @H4vC)
  • Fixed unknown CLI flags exiting 1 with an extra "ended before completing" line instead of exiting 2 (#13623 by @H4vC)
  • Fixed a mistyped --model in print mode telling you to set an API key; it now suggests the closest available models (#13623 by @H4vC)
  • Fixed the alt+p / /switch model picker taking seconds to appear: it rebuilt the whole model catalog on every open before painting, and now re-reads it only when startup discovery is still landing or models.yml changed
  • Fixed tool_call additionalContext being delivered more than once when several extension or hook handlers on the same call returned identical text (#13633 by @andrebrait)
  • Fixed hosted OpenAI web search on hosts that accept only string tool_choice values, such as Command Code (#13666 by @riicodespretty)

Removed

  • Removed the web search provider picker from omp setup; set the web model role (or keep the free default chain) instead.

@oh-my-pi/pi-natives

Changed

  • Lowered the macOS native addons' minimum supported macOS version to 12.0 (previously 15.5)
  • Reduced snapshot cost on every hashline read and grep: file-hash tagging no longer builds a normalized copy of the file, and the seen-line prefix regex is compiled once (#13650 by @H4vC).

Fixed

  • Fixed released Darwin arm64 addons omitting Apple Foundation Models support (#13610).
  • Fixed the edit tool's replace block/delete block operations in indentation-based languages such as Python extending a statement's block over every following statement in its body when a comment line at a different indentation came right after it (#13358 by @jchanghong023).

@oh-my-pi/omp-stats

Fixed

  • Fixed omp stats dashboard numbers following the browser locale while the rest of the UI is English (e.g. 546 B meaning 546 thousand and $38.003,33 on a Turkish browser); figures now always use en-US formatting (#13640 by @NaC-L)

@oh-my-pi/pi-tui

Changed

  • Reduced frame spikes and memory while long assistant replies retire into scrollback mid-stream: retiring rows no longer re-renders the whole published reply once per row, and the transcript no longer rescans the entire session history every frame (#13650 by @H4vC).
  • Reduced memory held by finished messages: streamed Markdown blocks release their streaming row caches, frozen lex tokens, and syntax-highlight streams when they finalize, and the Mermaid render cache is now size-bounded (#13650 by @H4vC).
  • Reduced per-frame CPU while streaming Markdown, edit previews (header facts are reused across frames; replace previews process only the visible lines), bash previews (highlighting is deferred to paint and the highlight cache is size-bounded), interleaved thinking blocks, and the live bash/ssh output tail (#13650 by @H4vC).
  • Changed git status refresh interval to 10 seconds and added generation tracking to avoid stale counts after HEAD moves

Fixed

  • Fixed streaming bash previews showing fields that follow the env object (e.g. command) as environment assignments (#13650 by @H4vC).
  • Fixed model picker latency by avoiding unnecessary catalog rebuilds
  • Fixed the @ completion popup showing a Searching… placeholder while a refreshed file search is pending; the popup now stays hidden until results arrive, and Escape is no longer swallowed by it
  • Fixed multi-line IME and dictation input (for example, voice input in Ghostty or cmux) being sent as one message per line; it now lands in the prompt as a single multi-line draft, while Enter typed during a UI freeze still submits (#13378 by @goransh-walia)

Removed

  • Removed the setup wizard's "Web search" tab; the providers scene is now sign-in only, and web search is chosen through the web model role like other kind roles.

@oh-my-pi/pi-utils

Added

  • Added an optional onDone callback to readSseJsonOrText that reports the [DONE] sentinel without attaching a raw-event observer (#13650 by @H4vC).

Changed

  • SSE events read without raw capture now share one frozen empty raw array instead of allocating one per event (#13650 by @H4vC).

Fixed

  • Fixed the unsettled-command report overriding an explicit non-zero exit code with 1 and printing a spurious "ended before completing" line (#13623 by @H4vC)

What's Changed

New Contributors

Full Changelog: v18.4.2...v18.4.3

Don't miss a new oh-my-pi release

NewReleases is sending notifications on new releases.