# OmniRoute v3.8.41 - Product: OmniRoute (https://whatsnew.fyi/product/omniroute) - Vendor: diegosouzapw - Date: 2026-06-29 - Version: v3.8.41 - Original notes: https://github.com/diegosouzapw/OmniRoute/releases/tag/v3.8.41 - Permalink: https://whatsnew.fyi/product/omniroute/releases/v3.8.41 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add selectable relay backend (TS / Bifrost / auto) via OMNIROUTE_RELAY_BACKEND / RELAY_ROUTING_BACKEND environment variable, with auto mode selecting Bifrost when BIFROST_BASE_URL is set and falling back to TypeScript if the sidecar is unreachable - **added** — Add X-Routing-Backend and X-Routing-Fallback response headers to indicate which relay backend handled the request - **added** — Add Proxy Pool dropdown to OpenCode Free per-account proxy modal, allowing selection of pre-saved proxies instead of manual Host/Port/credentials entry - **added** — Add Saved / Custom toggle for proxy configuration in OpenCode, with server-side resolution of proxies from the registry - **fixed** — Fix Claude translator to synthesize a minimal user turn when an OpenAI request carries only system/developer messages, preventing 400 errors from the Messages API - **fixed** — Remove retired Google AI Studio model IDs and align the Gemini catalog to live GenAI API, removing gemini-1.5-pro, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, and adding gemini-3.1-flash-lite and gemini-embedding-001/gemini-embedding-2 - **fixed** — Add modelDeprecation forwards for renamed Gemini model IDs to redirect legacy IDs to GA models instead of returning 404 - **fixed** — Fix embedded-services dashboard by lazily initializing service supervisors from /api/services/[name]/logs to prevent 404 errors for cliproxy and 9router logs before bootstrap - **fixed** — Fix dashboard lifecycle buttons to send JSON and properly handle empty install bodies defaulting to version latest - **fixed** — Fix dashboard lifecycle and log-stream failures to surface as actionable UI errors instead of silently showing no logs - **fixed** — Fix dashboard to recognize Tailscale CGNAT 100.64.0.0/10 peers as private-LAN local for local-only service access - **fixed** — Fix /api/v1/providers/{cliproxyapi,9router}/models to return synced embedded-service models instead of invalid_provider - **fixed** — Fix Claude adaptive-thinking dashboard Thinking-Budget setting being dropped on restart by hydrating from settings in server-init - **fixed** — Fix Claude executor to honor mode auto for stripping adaptive thinking while keeping default passthrough behavior, and remap operator thinking.type enabled to adaptive shape - **fixed** — Fix Claude thinking block replay to emit signature-less redacted_thinking block instead of reconstructing reasoning_content with fabricated signature - **fixed** — Fix OpenCode proxy resolution to safely degrade when proxyId is unknown or deleted by falling back to direct connection ##### [3.8.41] — 2026-06-29 ###### ✨ New Features - **feat(relay): selectable relay backend (TS / Bifrost / `auto`)** — the OpenAI-compatible relay endpoint can now route its hot path through a native Bifrost sidecar without clients changing URLs. `OMNIROUTE_RELAY_BACKEND` / `RELAY_ROUTING_BACKEND` = `ts | bifrost | auto`: defaults to the existing TypeScript relay; `auto` selects Bifrost when `BIFROST_BASE_URL` is set (and `BIFROST_ENABLED` ≠ `0`) and falls back to TS automatically if the sidecar is unreachable; `bifrost` keeps strict failure behavior. Auth, per-IP/token rate limits, prompt-injection checks, and model allowlists still run in the Next relay route before dispatch (control plane stays in the app); responses carry `X-Routing-Backend` / `X-Routing-Fallback`. Regression guards: `tests/unit/api/v1/relay-routing-backend.test.ts`, `tests/unit/api/v1/bifrost-sidecar.test.ts`. ([#5315](https://github.com/diegosouzapw/OmniRoute/pull/5315), #5316 — thanks @KooshaPari) ###### 🔧 Bug Fixes - **translator (claude):** synthesize a minimal `user` turn when an OpenAI→Claude request carries **only** `system`/`developer` messages, so the request stops failing with `[400]: messages: at least one message is required`. `openaiToClaudeRequest` hoists every system/developer turn into Claude's top-level `system` field and filters them out of `messages`; an all-system input (OpenCode compaction / title-generation requests) left `messages: []`, which the Messages API rejects — surfacing in OpenCode as a mid-task `stream error` that drops the conversation. The guard fires only when `messages` would otherwise be empty (system instructions still drive the response), so non-empty requests are unaffected. ([#5342](https://github.com/diegosouzapw/OmniRoute/pull/5342) — thanks @wild-feather) - **providers (gemini):** drop retired Google AI Studio model ids and align the catalog to what the live GenAI API actually serves (verified 2026-06-29 against the official deprecations page). Removes long-retired `gemini-1.5-pro`/`gemini-1.5-flash`, the shut-down `gemini-2.0-flash`/`gemini-2.0-flash-lite`, and dead experimentals; renames `gemini-3.1-flash-lite-preview` → the GA `gemini-3.1-flash-lite`; swaps the retired `text-embedding-004` for the live `gemini-embedding-001`/`gemini-embedding-2`; and adds graceful `modelDeprecation` forwards so legacy/renamed ids redirect to the GA model instead of 404ing. Native AI-Studio-direct image/video/music registration is intentionally out of scope (needs real executor work; those models stay reachable via Antigravity/Vertex/aggregators). ([#5337](https://github.com/diegosouzapw/OmniRoute/pull/5337) — thanks @backryun) - **services (dashboard):** fix the embedded-services dashboard failures (#5298) — service supervisors are now lazily initialized from `/api/services/[name]/logs` so `cliproxy`/`9router` logs no longer 404 before bootstrap registers a supervisor; lifecycle buttons send JSON (empty install bodies default to `version: "latest"`, malformed JSON still returns `400 Invalid JSON body`); lifecycle and log-stream failures surface as actionable UI errors instead of silently showing no logs; Tailscale CGNAT `100.64.0.0/10` peers count as private-LAN local for local-only service access; a parent `/dashboard/context` → `/dashboard/context/settings` redirect stops RSC prefetch 404s; and `/api/v1/providers/{cliproxyapi,9router}/models` return synced embedded-service models instead of `invalid_provider`. ([#5299](https://github.com/diegosouzapw/OmniRoute/pull/5299), #5298 — thanks @KooshaPari) - **thinking (claude):** fix three independent defects in Claude adaptive-thinking on the OpenAI-compatible path (Cursor → Claude OAuth). **(A)** the dashboard Thinking-Budget setting was dropped on every restart — `setThinkingBudgetConfig` was never called at boot, so a saved `{mode:"adaptive"…}` silently reverted to passthrough; it's now hydrated from settings in `server-init`. **(B)** the Claude executor force-injected _[Truncated at 4000 characters — full notes: https://github.com/diegosouzapw/OmniRoute/releases/tag/v3.8.41]_