github can1357/oh-my-pi v17.4.1

latest releases: v17.4.3, v17.4.2
8 hours ago

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

Fixed

  • Fixed Codex remote compaction requests failing for region-pinned enterprise ChatGPT workspaces when requests egress from a different region.

@oh-my-pi/pi-ai

Added

  • Added Codex Responses support for Code Mode, preserving tool modes and passing tool namespace metadata during sessions.

Fixed

  • Fixed OpenAI Codex requests failing with HTTP 401 data residency errors on enterprise ChatGPT workspaces when connecting from a different region via VPN or proxy.
  • Fixed concurrent xAI OAuth token refreshes revoking shared credentials across multiple processes.
  • Fixed Amazon Bedrock Converse multi-turn conversations failing on models like Amazon Nova due to unsigned reasoning content in replayed turns.
  • Fixed Antigravity OAuth login handling for project discovery and free-tier onboarding against Cloud Code Assist endpoints.
  • Fixed provider-detected OAuth access token expiration terminating active turns instead of automatically refreshing credentials and replaying the request.
  • Fixed compatibility issues with OpenAI-compatible servers (such as NInfer and vLLM) rejecting reasoning_effort inside chat_template_kwargs.
  • Fixed Google Cloud Code Assist and Antigravity rejecting MCP tool schemas with unsupported annotations (x-mcp-header, deprecated, readOnly, writeOnly, $comment).
  • Fixed Cursor provider issues with native file edit streaming (editToolCall) and ensuring always-apply system rules are properly preserved.
  • Fixed Cursor HTTP/2 requests ignoring standard proxy environment variables (HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY).

@oh-my-pi/pi-catalog

Added

  • Added helper functions and constants for reading enterprise ChatGPT workspace data-residency regions from Codex OAuth access tokens and forwarding the residency header to Codex backend endpoints.

Changed

  • Preserved API-advertised tool_mode metadata (such as code_mode_only for GPT-5.6 Code Mode models) on Codex catalog models and types (#9069).
  • Added an optional tokenizer family field across bundled, discovered, and custom catalog models (claude-v3/v47/v5, Qwen 3.5+, DeepSeek V3/V4/R1, Kimi K2/K3, and GLM-5+), which can also be explicitly overridden in model configuration.
  • Updated subscription Codex GPT-5.6 Sol, Terra, and Luna models to include first-party cost.longContext pricing tiers for token inputs exceeding 272K tokens.

Fixed

  • Fixed Vercel AI Gateway Muse Spark 1.2 Contributor requests failing with HTTP 400 errors by capping advertised output allowances to the model's 131K limit.
  • Fixed LiteLLM model discovery to route OpenAI models through the Responses API for reasoning summaries in thinking blocks (#9085).
  • Fixed OpenCode Console Go and Zen Responses providers rejecting forced tool choices by automatically downgrading forced or named tool selections to auto.
  • Fixed OpenCode Go Muse Spark 1.2 and Muse Spark 1.2 Contributor models failing during tool calls or missing reasoning effort levels, ensuring they correctly route to the Responses API with full thinking, context, and multimodal support (#8957).
  • Improved OpenCode gateway model discovery to automatically infer the Responses API route for unlisted models from sibling gateways and billing base variants.
  • Fixed Cursor GPT-5.6 (Luna, Sol, and Terra) model discovery creating duplicate rows for each thinking tier by collapsing tiers into unified models with configurable reasoning effort (#9025).
  • Fixed Google Gemini CLI model discovery failing with 403 PERMISSION_DENIED by directing catalog refresh requests to the appropriate Antigravity discovery endpoints (#8885).

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

Added

  • Added PERSONALITY.md support: ~/.omp/agent/PERSONALITY.md (profile/XDG-aware agent dir) replaces the system prompt's personality block text; personality: none still omits the block (#8528)
  • Sloppy edits now support inline replacements with ⟪old│new⟫ syntax (⟪old│⟫ for deletions and ⟪│new⟫ for insertions), alongside automatic recovery for common formatting mistakes without needing a retry.
  • Sloppy edits now recover operations that mix ⟪old│new⟫ inline replacements with a » REWRITE instead of failing the payload: a redundant REWRITE is dropped, a diverging one is applied as the final text, and a note explains the interpretation.
  • Expanded archive support in read and write tools: read can now inspect and extract members from .rar, .7z, .iso, .cab, .deb, .rpm, .cpio, .ar/.a, .lzh, .arj, compressed tar files (.tar.bz2, .tar.xz, .tar.zst), package formats (.whl, .ipa, .xpi, .vsix, .nupkg, .cbz, .cbr), .asar archives, and single-file compressed streams; write can create .tar.zst and update .asar archives.
  • Added Code Mode for Codex code_mode_only models via providers.openai-codex.codeMode (off/on/auto), demoting non-essential tools into an eval bridge with generated TypeScript definitions.
  • MCP tool names longer than 64 characters are now automatically truncated with a deterministic hash suffix to comply with strict provider validators.
  • Marketplace-installed plugins with manifest settings can now be configured through omp plugin config and Settings → Plugins.
  • Configured discovery providers with authHeader now preserve cached models across application restarts.
  • Added repeat read warning hints when identical file content is read multiple times.
  • Explicit DAP adapters can now attach without a PID or port when attachDefaults provide the target arguments.
  • Added isProjectTrusted() compatibility shim to ExtensionContext for extensions targeting upstream per-directory trust gates.

Changed

  • Added compaction.asyncEnabled (default: on) to speculatively summarize context in the background before hitting threshold limits, avoiding blocking summarization pauses.
  • Replaced compaction.strategy and compaction.remoteEnabled with an ordered compaction.methodOrder preference list.
  • Handoff maintenance (/handoff and automatic handoff compaction) now commits generated summaries directly to the active session instead of starting a new session.
  • Added extendedContext setting (/settings → Context → General, default: on) to optionally clamp models with premium long-context pricing tiers (such as OpenAI GPT-5.6 Sol/Terra/Luna) to standard-pricing token limits before compaction triggers.
  • Token counting and token estimations are now dynamically scoped to each specific model tokenizer rather than using a single process-global tokenizer.
  • omp cleanse and /cleanse now feature a live interactive status board displaying active checkers, repair subagents, tool metrics, and token/cost totals in real time.
  • Eval-bridge nested tool.<name>() calls now enforce ACP permission gates and tool allowlists identically to direct tool calls.
  • Added tokenizer option to custom models and modelOverrides to allow overriding the local tokenizer family for proxied model endpoints.
  • Added qwenTemplateReasoningEffort to the models.yml compat schema to configure or disable reasoning effort flags for strict local inference servers.
  • Settings menus now support click-to-toggle and drag-to-reorder for list items, as well as warning indicators and risk notes on sensitive options such as External Thinking.
  • Supervised process completion notices now render as compact single-line entries.
  • The todo HUD header now displays a consolidated progress bar showing task completion across all stages.
  • /settings rows can now carry a risk note: a warning glyph on the row plus a warning-colored line above the description. External Thinking (externalThinking, --external-thinking) is the first user — providers have flagged the request shape it produces as abuse, up to account-level enforcement, so both the settings entry and --help now say so.

Fixed

  • Fixed regional HTTP 401 data-residency errors during Codex chat, web search, and image generation requests by passing token residency metadata on requests.
  • Fixed macOS SSH ControlMaster socket creation failures caused by sun_path length limits when using named profiles.
  • Fixed an issue where Nix-packaged builds failed to load on-demand native addons (onnxruntime-node/sherpa-onnx) due to missing shared C++ runtime library paths.
  • Fixed external editor spawning (Ctrl+G, plan review, /todo edit) failing to attach to visible terminals for editors like emacsclient.
  • Fixed omp --resume spinning at 100% CPU when new session entries arrived during initial transcript rendering.
  • Fixed session resume hints and fatal exit messages omitting the active --profile argument.
  • Fixed MCP OAuth authorization requests failing on pre-registered clients with restricted scopes by using RFC 9728 scopes_supported.
  • Fixed isolated task subagents causing out-of-memory crashes on repositories with large uncommitted binary files by pre-sizing diffs and enforcing snapshot limits.
  • Fixed LM Studio and lazy-loaded local models retaining uninitialized context lengths by re-probing loaded context lengths after initial inference.
  • Fixed project-scoped Claude Code marketplace plugins incorrectly loading into sessions in other projects.
  • Fixed configured advisors backed by discoverable providers remaining inactive on initial session startup until manually toggled.
  • Fixed resolving --model @<role> failing for roles backed by discovery providers like oMLX, Ollama, and llama-swap.
  • Fixed retry fallback chains stopping prematurely when encountering nested fallback configurations, and fixed session role priority during fallback chain selection.
  • Fixed cancelled prompts disappearing upon abort during turn setup, properly restoring user text and attachments to the input editor.
  • Fixed built-in shell utilities (grep, rg, diff, find, timeout, top, date, head, tail, stat, truncate, kill) across numerous POSIX/GNU/BSD compatibility edge cases and early-pipeline SIGPIPE handling.
  • Fixed Cursor sessions missing standard string-replacement edit tooling after server tool injection.
  • Fixed hub wait duplicating frozen rows into native scrollback during viewport overflow.
  • Fixed dark-theme contrast issues on markdown code-fence headers.
  • Fixed prompt guidance and descriptions for Task tools and SSH usage.
  • ACP editor clients that support elicitation forms (Zed) can now use ask, so the agent can pose single-choice, multi-select, and free-text questions inline instead of guessing.
  • /retry and /handoff now work over ACP, so editor clients (Zed) list them and can run them instead of sending the text to the model.
  • Added qwenTemplateReasoningEffort to the models.yml compat schema, so the auto-enabled Qwen 3.8+ template effort dialect (chat_template_kwargs.reasoning_effort) can be switched off per provider/model for strict local servers that reject unknown chat_template_kwargs.
  • Extensions can provide a normalized usage provider through pi.registerProvider(). Its reports now flow through AuthStorage caching, history, and usage displays, and the override is removed when the extension provider is unregistered.

@oh-my-pi/pi-natives

Changed

  • bun run build:native now builds through the local cargo/napi-rs backend by default, with Bazel available as an opt-in via OMP_NATIVE_BUILD_BACKEND=bazel or extra Bazel arguments after --.

@oh-my-pi/snapcompact

Added

  • Restored providerFrameBudget() to allow callers to size archives according to the maximum frame budget the provider will send.

Fixed

  • Fixed an issue where character-based truncation could split inline base64 data URLs into corrupted payloads that were rejected by OpenAI-compatible providers. Data URLs are now replaced atomically with placeholders before truncation, and previously affected archives are healed during re-compaction.

@oh-my-pi/pi-tui

Added

  • Added optional getNativeScrollbackLiveRegionPinnedStart() hook to allow nested transcripts to pin a later dashboard without shifting the earliest live seam.

@oh-my-pi/pi-utils

Added

  • New unified archive API @oh-my-pi/pi-utils/ar, providing an openArchive/ArchiveReader interface across formats (including ZIP/ZIP64, tar with gz/bz2/xz/zst compression, ASAR, RAR 4/5, 7z, ISO 9660, CAB, cpio, RPM, Unix ar, Debian packages, LZH, ARJ, and single-stream compressed files) with lazy ranged reads for local files or HTTP range requests via httpByteSource, size limits, symlink-safe extraction, and deterministic archive creation for zip, tar, tar.gz, tar.zst, and asar.

What's Changed

  • fix(task): bound isolation baseline capture to avoid host OOM by @roboomp in #8992
  • fix(retry): reach a fallback model's own chain instead of burning the budget on it by @STRML in #9000
  • fix(providers): refresh LM Studio runtime context after JIT load by @roboomp in #9002
  • fix(extensions): expose project trust to improve extension compatibility by @CallumWayve in #9007
  • fix(advisor): activate enabled advisor after model discovery settles by @roboomp in #9014
  • fix(ai): strip MCP x-mcp-header annotation from Google/CCA schema by @roboomp in #9017
  • fix(cli): include active profile in session resume hint by @roboomp in #9020
  • fix(catalog): collapse cursor gpt-5.6 effort siblings by @roboomp in #9026
  • fix(ai): retry provider-requested OAuth refresh by @usr-bin-roygbiv in #9038
  • feat(acp): expose the ask tool through elicitation forms by @joseotaviorf in #9042
  • fix(discovery): isolate Claude project plugins by @roboomp in #9044
  • fix(tools): correct SSH guidance tool names by @MikeeI in #9045
  • fix(coding-agent): clarify task spawn-policy defaults by @MikeeI in #9046
  • fix(coding-agent): correct task overlap guidance by @MikeeI in #9047
  • fix(catalog): correct gemini cli discovery endpoint by @roboomp in #9051
  • fix(pi-builtins): accept pgrep -q on linux by @szavadsky in #9055
  • fix(natives): cover prompt-or-granted desktop permission state by @szavadsky in #9056
  • fix(cursor): honor standard proxy env vars on the HTTP/2 run path by @roboomp in #9059
  • fix(catalog): disable forced tool choice for OpenCode Responses by @bchap1n in #9060
  • fix: cap snapcompact frames at the provider image budget by @Thytu in #9061
  • fix(snapcompact): elide inline base64 data URLs before truncation by @oshinop in #9066
  • fix(ssh): bound control-path under sun_path for macOS profiles by @roboomp in #9072
  • fix(coding-agent): restore inherit stdio for external editor by @roboomp in #9079
  • feat(acp): expose /retry and /handoff over ACP by @joseotaviorf in #9081
  • fix(catalog): route LiteLLM OpenAI models through Responses by @jbkkd in #9085
  • fix(ai): never resend unsigned Bedrock reasoning content on replay by @acomito in #9086
  • fix(nix): preload libstdc++ so runtime-downloaded addons load on NixOS by @lz37 in #9091
  • fix(auth): stop concurrent xAI OAuth refresh replay by @roboomp in #9093
  • docs(context-files): document disabling a single context file by @Honza-Jelinek in #9097
  • fix(mcp): prefer RFC 9728 resource scopes over auth-server catalogue by @roboomp in #9100
  • fix(tui): bound the resume transcript replay restart loop to stop 100% CPU livelock on --resume by @Mustaqeem66 in #9101
  • fix(dap): support preattached GDB remote adapters by @CoffeeImpliesCode in #9107
  • fix(plugins): expose marketplace plugin settings by @roboomp in #9109
  • fix(catalog): cap Vercel Muse Spark contributor output tokens by @jnyross in #9115
  • fix(models): restore auth headers for discovery cache by @roboomp in #9117
  • fix(theme): make markdown code fence borders legible on dark themes by @Mustaqeem66 in #9118
  • fix(tui): stop hub wait from smearing job rows into scrollback by @shentry in #9121
  • fix(nix): give dlopen'd ONNX addons a libstdc++ path by @labi-le in #9127
  • fix(ai/providers): declare Codex workspace data residency from token claims by @DusKing1 in #9128
  • fix(lsp): hard wall-clock bound on per-server diagnostics pipeline (edit tool hang) by @Mustaqeem66 in #9129
  • fix(mcp): cap minted tool names at 64 chars by @roboomp in #9131
  • fix: heal Qwen XML tool-call markup by @jzupnick in #8945
  • fix(ai): execute Cursor native StrReplace editToolCall by @eggpeat in #8946
  • fix(coding-agent): preserve shell operators after internal URLs by @sundbp in #8959
  • fix(advisor): defer in-progress non-blocker advice instead of dropping it by @barthazian in #8960
  • fix(tui): stop scrollback row loss across mux height-only resizes by @ephraimduncan in #8961
  • fix(sdk): refresh discoverable providers for deferred role aliases by @roboomp in #8972
  • fix(coding-agent): stop shared-role yaml order stealing retry fallback by @atacolak in #8984
  • fix(ai): strip deprecated/readOnly/writeOnly/$comment annotation keywords from CCA/Google tool schemas by @daviddatuX25 in #8994
  • fix(ai): forward OMP system prompts on Cursor requestContext.rules by @atacolak in #8997
  • fix(catalog): recover opencode-go muse-spark thinking levels by @Unravl in #8999
  • feat(coding-agent): support extension usage providers by @CallumWayve in #9006
  • fix(ci): fetch crates before the offline cargo-deny check by @svperfecta in #9156

New Contributors

Full Changelog: v17.4.0...v17.4.1

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

NewReleases is sending notifications on new releases.