✨ New Features
- feat(providers): Add GPT-5.5 support to the Codex provider — includes 1.05M context window, tool calling, vision, and reasoning capabilities with proper pricing entries across
cxandopenaiproviders. RefactorssplitCodexReasoningSuffix()into a shared helper for cleaner effort-level parsing (#1617 — thanks @Zhaba1337228). - feat(cli): Add
omniroute reset-encrypted-columnsrecovery command — nulls encrypted credential columns (api_key,access_token,refresh_token,id_token) inprovider_connectionswhile preserving provider metadata, giving users affected by #1622 a clean recovery path without losing configurations. - feat(i18n): Expand locale coverage with nine new language packs (Bengali, Farsi, Gujarati, Indonesian, Marathi, Swahili, Tamil, Telugu, Urdu), bringing total language support from 32 to 41 locales.
🐛 Bug Fixes
- fix(rate-limit): Add per-model rate limiting for GitHub Copilot provider — a 429 on one model (e.g.
gpt-5.1-codex-max) no longer locks the entire connection, matching the existing Gemini per-model quota pattern (#1624 — thanks @slewis3600). - fix(cli-tools): Preserve existing OpenCode configuration (MCP servers, custom providers, comments) when saving OmniRoute settings — uses
jsonc-parserfor tree-preserving edits instead of destructive JSON roundtrip. Fix API key clipboard copy to use raw keys instead of masked placeholders. Add theme-aware OpenCode light/dark SVG logos (#1626 — thanks @JasonLandbridge). - fix(cli-tools): Fix OpenCode guide step 3
{{baseUrl}}double-brace placeholder to use ICU-style{baseUrl}across all 41 locales, restoring next-intl interpolation (#1626). - fix(codex): Make
wreq-jsnative module import lazy and optional to prevent server crash on startup when the platform-specific binary is missing — affects pnpm installs, Docker Alpine, macOS ARM, and Windows (#1612, #1613, #1616). - fix(i18n): Add 14 missing translation keys (
logs.runningRequests,logs.model,logs.provider,logs.account,logs.elapsed,logs.count,logs.payloads, etc.) for the Active Requests panel across all locales. Replace 83 placeholder values in usage/evals namespace. Add 5 missing health namespace keys for rate limit status. - fix(encryption): Prevent
STORAGE_ENCRYPTION_KEYfrom being silently regenerated duringnpm install -gupgrades, which made all previously-encrypted provider credentials permanently unrecoverable due to AES-GCM auth-tag mismatch (#1622). - fix(startup): Add decrypt-probe diagnostic at server bootstrap — if
STORAGE_ENCRYPTION_KEYdoesn't match encrypted credentials in the database, a prominent warning is logged directing users to restore the key or use the new recovery command. - fix(cli-tools): Allow
nullAPI key values incliModelConfigSchemato prevent 400 Bad Request errors when saving cloud-based CLI tool configurations. Fix error handling across all 10 ToolCard components to safely extract messages from structured error objects, preventing React Error #31 crashes. - fix(docker): Set
NPM_CONFIG_LEGACY_PEER_DEPS=truein the Docker builder layer beforenpm ciand remove duplicatepostinstallSupport.mjsCOPY instruction — fixes container image build failures introduced in v3.7.0 (#1630 — thanks @rdself). - fix(antigravity): Hide deprecated Gemini-routed Claude 4.5 models from public catalogs and model lists. Legacy
gemini-claude-*aliases now silently resolve to current Claude 4.6 equivalents. Replace dynamic reverse-alias generation with an explicit allowlist for predictable model visibility (#1631 — thanks @backryun). - fix(types): Add explicit type annotations to sync-env test helpers and dynamic import casts to satisfy
typecheck:noimplicit:coreCI gate. - fix(reasoning): Implement Reasoning Replay Cache — hybrid memory/SQLite persistence for
reasoning_contentin multi-turn tool-calling flows. Automatically captures reasoning from DeepSeek V4, Kimi K2, Qwen-Thinking, and GLM models and re-injects it on follow-up turns to prevent HTTP 400 errors from strict reasoning-content validation. Includes dashboard telemetry tab, REST API, and 21 unit tests (#1628 — thanks @JasonLandbridge). - fix(postinstall): Extend postinstall native module repair to cover
wreq-js— detects missing platform-specific.nodebinaries insideapp/node_modules/wreq-js/rust/and copies them from the root install. Fixes globalpnpminstalls on macOS arm64 where the standalone app directory only contained Linux binaries (#1634 — thanks @MarcosT96). - fix(migration): Prevent compat-renamed migration slots from shadowing new migrations at the same version number. After rewriting
028_provider_connection_max_concurrent→029, the runner now verifies the old version slot is clear, ensuring028_create_files_and_batchesruns on v3.6.x → v3.7.x upgrades. Addsbatchestable as a physical schema sentinel for upgrade recovery (#1637 — thanks @V8-Software). - fix(registry): Route GitHub Copilot GPT 5.4/5.5 models through the Responses API (
targetFormat: "openai-responses"). Fixesgpt-5.4-miniandgpt-5.4being rejected on/chat/completionsby GitHub (#1641 — thanks @dhaern). - fix(usage): Correct MiniMax token plan quota display — the newer
/v1/token_plan/remainsendpoint reports used counts, not remaining counts. Rounds floating-point percentage artifacts in Provider Limits UI (#1642 — thanks @CruxExperts). - fix(codex): Lazy-load
wreq-jsWebSocket transport viacreateRequireinstead of top-level import. Server boots cleanly when native module is unavailable and returns 503 only when Codex WebSocket is actually requested. Fixes #1612 (#1640 — thanks @dendyadinirwana). - fix(electron): Package Electron runtime dependencies into
resources/app/node_modules/via separateextraResourcesFileSet. Adds cross-platform packaged app smoke test script and CI integration to prevent future regressions. Closes #1636 (#1639 — thanks @prateek). - feat(account-fallback): Add model-level daily quota lockout. When a provider returns 429 with
quota_exhausted, cooldown is set to tomorrow 00:00 instead of exponential backoff. Detects daily quota patterns viaisDailyQuotaExhausted()in chat handler (#1644 — thanks @clousky2020). - fix(codex): Use per-conversation
session_id/conversation_idfrom client body asprompt_cache_keyinstead of account-wideworkspaceId. The official Codex CLI usesconversation_id(a unique UUID per session); using the sharedworkspaceIdcapped cache hit-rate at ~49%. Includes 10 unit tests (#1643). - fix(claude): Stabilize billing header fingerprint to prevent Anthropic prompt-cache prefix invalidation. The fingerprint was derived from the first user message text, which changes every turn, mutating
system[]and forcing ~100%cache_create. Now uses a stable per-day hash, preserving ~96%cache_readhit rate (#1638). - fix(transport): Harden GitHub and Kiro streaming — thread
clientHeadersthroughBaseExecutor.buildHeaders()to eliminate mutable singleton state race condition on concurrent requests. Remove redundant[DONE]stripping TransformStream from GitHub executor. Add defensiveparseToolInput()for malformed Kiro tool call arguments. HoistTextEncoder/TextDecoderto module singletons and use zero-copysubarray()(#1645 — thanks @dhaern). - fix(transport): Prevent memory bloat and database exhaustion from large, fragmented streaming responses. Implemented
ByteQueueinkiro.tsfor zero-copy binary accumulation, refactoredantigravity.tsfor incremental SSE parsing, and enforced a strict 512KB tiered truncation limit (MAX_CALL_LOG_ARTIFACT_BYTES) on stream request logs and call artifacts (#1647). - chore(ci): Update build environment dependencies — bump Node to
24.15.0,actions/checkout@v6,docker/build-push-action@v7, pinactions/setup-pythonto major tag (#1646 — thanks @backryun).
📝 Documentation
- docs(env): Add
OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLSto.env.examplewith documentation for LM Studio and other local provider use cases (#1623).
What's Changed
- Add Codex GPT-5.5 support by @Zhaba1337228 in #1617
- [Urgent] fix: include npm config in Docker install layer by @rdself in #1630
- fix(antigravity): hide deprecated Gemini-Claude models by @backryun in #1631
- fix: route newer GitHub GPT models through Responses by @dhaern in #1641
- fix(usage): correct MiniMax token plan quota display by @CruxExperts in #1642
- fix(codex): avoid startup crash when wreq-js is unavailable by @dendyadinirwana in #1640
- fix: package Electron runtime deps by @prateek in #1639
- fix:Update Build env dependencies by @backryun in #1646
- fix(transport): harden GitHub and Kiro streaming by @dhaern in #1645
- Release v3.7.1 by @diegosouzapw in #1629
New Contributors
- @Zhaba1337228 made their first contribution in #1617
- @dhaern made their first contribution in #1641
- @CruxExperts made their first contribution in #1642
- @dendyadinirwana made their first contribution in #1640
- @prateek made their first contribution in #1639
Full Changelog: v3.7.0...v3.7.1