github diegosouzapw/OmniRoute v3.8.50

2 hours ago

Living section — regenerated 2026-08-12 from all cycle commits (cycle open ed2db6cb19 → tip). Bullets carry the merged PR and its author; direct pushes listed separately.

✨ New Features

  • feat(search): first-class X Search provider (x-search) on… #10985

  • feat(core): add Layer A capability filter at router #5696

  • feat(providers): add DeepAI as paid API-key image provider #6671

  • feat(providers): add Naga.ac and… #6674 — thanks @chirag127

  • feat(api): add response content encoding verification —… #6736

  • feat(api): add plugins marketplace install endpoint with… #6752

  • feat(chatgpt-web): harden prompt-emulated… #7679 — thanks @horacecar

  • docs: add management authentication terminology guide #7786

  • feat(a2a): Conductor bridge — long-lived SSE consumer that… #8080

  • feat(a2a): the Agent Card (/.well-known/agent.json) now… #8119

  • feat(dashboard): "Conductor" panel — OmniConductor fleet… #8221

  • feat(dashboard): Faro chat with voice on the Conductor panel —… #8222

  • feat(a2a): inbound delegation to the OmniConductor fleet — `POST… #8223

  • docs: add low-memory/small VPS optimization guide #8237

  • feat(providers): add connection-level… #8369 — thanks @Benson-mk

  • feat(copilot): add approval gate for runOmniRouteCli commands #8461

  • feat(ci): add windows-latest leg to test-bun-sqlite job #8468

  • feat(electron): Desktop app can now attach… #8799 — thanks @soulhakr

  • Database The node:sqlite fallback now… #8870 — thanks @artickc

  • feat(models): add exact per-model… #8908 — thanks @xz-dev

  • Providers expands the Novita AI catalog… #8913 — thanks @jax-novita

  • feat(providers): native xAI Agent Tools passthrough on… #8964

  • feat(providers): add UnoRouter provider UnoRouter is an… #8978

  • feat(sse): deprecated the legacy gemini-cli **upstream… #7034 #8980

  • Add a default-off connection setting for Codex, OpenAI, and…

  • Omit opaque encrypted reasoning values from persisted call logs… #9000

  • feat(providers): add Regolo AI OpenAI-compatible provider #9031

  • feat(db): add provider-scoped model aliases that survive… #9068

  • feat(cursor): surface a dismissible dashboard banner suggesting… #9173

  • feat(cursor): proactively renew Cursor sessions before their ~24h… #9173

  • feat(codex): accept parenthesized… #9208 — thanks @seakleangnhak

  • feat(usage): surface Claude thinking token… #9214 — thanks @luoyide

  • feat(ollama): add Ollama Local embedding… #9225 — thanks @HaoNgo232

  • feat(images): execute full combo strategy + fallback in… #9239

    Adds open-sse/services/imageCombo.ts that expands combo targets, filters to images-capable, executes the priority strategy with handleImageGeneration per target, and returns the first success or last failure. Route patches detect combo names before model resolution and divert to the new execution path.

  • feat: make forwarded upstream response-header budget configurable… #9243

  • feat(providers): filter provider detail… #9247 — thanks @RobertsXML

  • feat(providers): make video_url… #9248 — thanks @HellFiveOsborn

  • feat(gemini): recursive type:object injection in schema… #9268

  • feat(dashboard): render a conditional "Get API key" link on the… #9270

  • feat(providers): accept JSON cookie… #9284 — thanks @AIB1TAL0S

  • feat(providers): support max reasoning effort for opencode-zen… #9318

  • feat(providers): expanded the NanoGPT (nano-gpt.com) upstream… #9322

  • feat(sse): combo system_message supports server-side… #5501

  • feat(sse): template expansion… #5501 #9414 — thanks @maxmad64bis

  • feat(sse): New-API/One-API/Sub2API aggregator balance detection… #9415

  • feat(catalog): added opt-in settings hideAutoCombos and… #9418

  • feat(opencode-plugin): added… #9473 — thanks @omniroute

  • feat(providers): add native DeepSeek V4 Flash and Pro… #9485

  • feat(opencode-plugin): warm catalog startup from disk snapshot +… #9490

    The config-shim hook now reads the last disk snapshot before fetching, so the provider registers immediately with the last-known-good catalog (~1-2s vs ~30s on a warm gateway). All six fetchers run concurrently via Promise.allSettled instead of sequentially. A failed refresh keeps the snapshot (no overwrite). An in-flight guard prevents concurrent refreshes for the same cache key. The features.diskCache: false opt-out disables the warm read entirely.

  • feat(models): Test All's "Auto-hide failed models" no longer… #9511

  • Add an advisory forgotten-sibling-tests report to pull-request… #9530

  • feat(providers): add Muse Code CLI provider preset #9544

  • feat(plugins): expose client request headers in plugin… #9570

  • feat(plugins): add onStreamComplete built-in event exposing… #9571

    Adds a new onStreamComplete plugin event that fires after an SSE stream is fully
    consumed, carrying usage token counts and timing metrics (latency, TTFT). Built-in
    events now include onStreamComplete as a fire-and-forget lifecycle hook.

    Payload: status, usage (prompt_tokens, completion_tokens, reasoning_tokens,
    cache_read_input_tokens, cache_creation_input_tokens), timing (latencyMs, ttft),
    model, provider, errorCode.

    Non-breaking — existing onResponse hooks with { streamed: true } remain unchanged.

  • feat(audio): Soniox STT + TTS provider (sx) — async… #9579

  • Show cache-read and cache-write token counts in request log rows and…
    report them. (#9620)

  • feat(memory): support custom OpenAI-compatible endpoints for… #9622

  • feat(resilience): add an opt-in watchdog for persistently slow… #9709

  • Onboarding: add an explicit, reviewable one-click setup for eligible…
    with per-provider caution links, selectable confirmation, idempotent creation, and safe partial
    retries. Existing provider connections are never changed and setup completion never enables
    providers silently. (#9752)

  • feat(settings): add a dedicated Modality Bridge settings page… #9782

  • feat(modality bridge): Transcribe chat audio for text-only… #9807

  • feat(memory): PROVIDERS_SYSTEM_MUST_BE_FIRST (the… #6135 #7293 #9924

  • feat(api): API keys can disable prompt… #10001 — thanks @shixi-li

  • Add cliproxy provider exposure controls and manifest injection #7329 — thanks @KooshaPari

  • feat(infra): add a systemd autostart unit for Linux #8635

  • feat(db): add node sqlite adapter parity #8871 — thanks @epsilonode

  • feat(alibaba): free-tier routing with live quota sync #8893 — thanks @AndrianBalanescu

  • feat(oauth): add Raycast Pro provider with local auto-import #8895 — thanks @AndrianBalanescu

  • feat(executors): add isolated Claude Code bridge over Devin ACP #8914 — thanks @McLuck

  • feat: improve provider quota layouts #8916 — thanks @apoapostolov

  • feat(mcp): add omniroute_create_combo tool #8925 — thanks @lucasmellos

  • feat(ci): gate the publish on clean-install AND upgrade-over-previous #8953

  • feat(providers): add Conol (conol.ai) web session provider #8974 — thanks @artickc

  • Feat/combo provider wise model test #9011 — thanks @JoshimOfficial

  • feat(model-alias): add runtime Model Alias Resolver middleware #9020 — thanks @Egorich-print

  • feat(i18n): complete zh-CN localization for compression engines and dashboard UI #9038 — thanks @qianze0628

  • feat: Cheaper Inference provider (chat + native Responses + images, sponsor rail 2nd) #9043

  • feat(providers): add comprehensive support for self-hosted Firecrawl via FIRECRAWL_BASE_URL and custom base URLs #9052 — thanks @mad-gooze

  • feat(dahl): add manual API key option alongside auto-generated token #9077 — thanks @pizzav-xyz

  • feat(ci): G0 — reforça o trilho PR→release/ ** #9108

  • feat(providers): native xAI Agent Tools passthrough for /v1/responses #9111 — thanks @VXNCXNX

  • feat(.50): completa itens restantes — G13, G14, gap34, docs, R0.2 #9126

  • feat(g1): rewrite combo-strategy check to runtime-import approach #9131

  • feat(test:scoped): TIA-based local test runner (#8084 D1) #9143

  • feat(docker): publish next from active release branches #9181 — thanks @Zartharas

  • feat(usage): show Grok Build billing limits #9205 — thanks @xz-dev

  • feat(models): functional gateway mirrors + fix synced-substitution #9217

  • feat(admission): add adaptive overload protection for LLM routes #9262 — thanks @xz-dev

  • feat(i18n): update italian translations #9280 — thanks @Gecky2102

  • feat(dashboard): persist provider screen filters to URL for bookmarking #9307 — thanks @swingtempo

  • feat(api-manager): add provider-level model permissions #9313 — thanks @xz-dev

  • feat(warmup): proactive Claude warmup scheduler (#8848) #9449 — thanks @HouMinXi

  • feat(infra): add systemd autostart unit for Linux (#8635) #9466

  • feat(lib): make MODELS_DEV_SYNC_ENABLED actually control the sync #9483 — thanks @HouMinXi

  • feat(radar): flag-gated signed free-model catalog overlay #9515

  • feat(compression): add Russian language pack #9581 — thanks @vinogradovnet

  • feat(providers): integrate wave4 free-tier gateways #9584

  • feat(providers): add Zylo UnoRouter and Poolside registries #9585

  • feat(providers): add FastRouter AnyAPI and ElectronHub registries #9586

  • feat(providers): add LLMGateway and LLM Kiwi registries #9587

  • feat(providers): add FreeInference registry #9594

  • feat(radar): contributor + supporter claim buttons on the activation screen (F4/T7) #9710

  • feat(radar): paste-key input on the activation screen (F4) #9758

  • feat(guardrails): modality bridge core — vision mode/task-aware/cache/input_image + modalityBridge settings #9759

  • feat(radar): referrals from standalone /v1/referrals feed (no 30-day delay) #9762

  • feat: generic OpenAI-compatible video custom provider #9844 #9818 — thanks @oyi77

  • feat(logging): make the chat-log truncation limit configurable, bumped default 128x #9863 #9738 — thanks @hartmark

  • feat(logging): bump CHAT_LOG_ARRAY_TAIL_ITEMS default 24 -> 128 #9864 #9735 — thanks @hartmark

  • feat(oauth): add Openference OAuth and API key provider integration #9869 #9722 — thanks @AnhLead

  • feat(src): proxy-pool-toolbar-minor-improvements #9870 #9718 — thanks @AgnesRiber

  • feat(resilience): expose providerQuotaOverrides via /api/resilience #9871 #9714 — thanks @herjarsa

  • feat(responses): add encrypted reasoning replay opt-in #9876 #9601 — thanks @jackjinke

  • feat(resilience): add per-account resilience connections view (API + dashboard) #9880 #9510 — thanks @HouMinXi

  • feat(db): add a job registry for scheduled background work #9886 #9631 — thanks @HouMinXi

  • feat(telegram): Mini App chat bridge — initData auth, update webhook, chat proxy #9907 #9812 — thanks @benzntech

  • feat(cursor): exclusive live listing + verbatim AgentRun model ids #9911 — thanks @yansigit

  • feat(usage): add Command Code quota tracking #9921 — thanks @yansigit

  • feat(combo): add quota-only priority fallback #9983 — thanks @xz-dev

  • feat(onboarding): add one-click free provider setup #10014

  • feat(admission) — direct pushes: adaptive overload/pressure…

  • feat(agentrouter) — direct pushes: support Claude and Codex…

  • feat(providers) — direct pushes: ChatGPT Web session credential…

  • feat(sse): honor provider-rule lock scope for agentrouter… #10419

  • feat(ocr): Vertex AI DeepSeek-OCR provider #10398

  • feat(providers): derive imageToText from the OCR registry +… #10400

  • feat(ocr): multi-provider /v1/ocr with transformation layer… #10283

  • feat(providers): declare imageToText serviceKind on major… #10275

  • feat(bridge): native-vision skip guard + configurable describe… #10289

  • feat(bridge): normalize images to 2048px long edge before… #10287

  • feat(sse): restate agentrouter quota 403/400 as retryable 429… #10335

  • feat(sse): add i-have-adhd output style to compression catalog #10271

  • feat(codex): add OAuth fingerprint… #10243 — thanks @xz-dev

  • feat(i18n): complete Portuguese… #10250 — thanks @DarkEsteves

  • feat(providers): publish Poolside's… #10216 — thanks @pacocartones

  • feat(crof): advertise reasoning… #10062 — thanks @excessivechaos

  • feat(open-sse): expose… #10040 #10046 — thanks @tiangao88

  • feat(dashboard): Kimi 15% first-top-up campaign — dedicated… #10240

  • feat(providers): integrate audited free-tier gateways #9210

🐛 Bug Fixes

  • fix(build): every route no longer answers HTTP… #11343 #6344 #10060
  • security(search) block SSRF via /v1/search… — thanks @zmf963
  • providers honor PATCH /api/providers/[id] so `omniroute… #10366
  • cli route provider test commands through configured connection… #10570
  • executors fix internal timeout misclassified as client… #8197
  • test(combo): guard auto/best-free never leaks the combo name as a… #7754
  • fix(vision-bridge): describe-model no longer returns unreachable… #8430
  • fix(vision-bridge): validate fixedModel against usable credentials… #8430
  • fix(vision-bridge): in the combo describe path, replace raw images… #8430
  • fix(quality): add base-relative file-size check so inherited drift… #8522
  • fix(ci): aggregate all fast-gates into non-fail-fast loop so one… #8542
  • fix(tests): make machineId tests macOS-compatible by stubbing… #8577
  • fix(scripts): replace bash 4+ readarray with compatible while-read… #8577
  • fix(cli): enable systray2 on Windows for Norton-friendly tray #8609
  • fix(executor): guard claude/anthropic buildHeaders against empty… #8653
  • fix(providers): gate premium opencode-zen/opencode-go models… #8681
  • fix(api): make /v1/models stale refresh response-safe… #8728 #8697
  • fix(yuanbao-web): accept content field in SSE text events… #8739
  • fix(build): remove misleading open-sse/package.json facade and add… #8781
  • fix(errorClassifier): classify ChatGPT Web SENTINEL_BLOCKED 403 as… #8813
  • fix(cli): fall back to node:sqlite when better-sqlite3 constructor… #8826
  • fix(opencode): prefix provider id with "opencode-" for auth login… #8830
  • fix(opencode-zen): add current free-tier models to registry to… #8841
  • fix(api): Let image and video providers… #8843 — thanks @artickc
  • fix(build): include better-sqlite3 prebuilds in standalone bun… #8847
  • fix(proxy-health): include credentials in proxy health check URLs #8853
  • fix(build): prepublish no… #8858 — thanks @omniroute @maisdesign
  • fix(opencode): generate… #8869 — thanks @xiaoyaner0201
  • fix(cli): default omitted Codex CLI… #8876 — thanks @xiaoyaner0201
  • fix(proxy): isolate new proxy… #8883 — thanks @xiaoyaner0201
  • fix(db): invalidate stale LKGP pins when provider connections are… #8887
  • fix(tests): update stale nightly compat fixtures and goldens to… #8901
  • fix(quota): Deleting a quota pool now… #8906 — thanks @xiaoyaner0201
  • fix(executors): Vertex AI now routes… #8909 — thanks @wgordon17
  • fix(providers): expose both OAuth… #8921 — thanks @Llliao1113
  • fix(compression): drop orphan… #8946
  • fix(auth): setting first dashboard login password no longer fails… #8950
  • fix(github): add targetFormat to GPT-5.6 Sol/Terra/Luna models #8951
  • fix(auto-update): skip synthetic Next.js standalone package.json… #8956
  • fix(opencode): propagate vision capability from live catalog into… #8960
  • fix(providers): switch Antigravity quota RPCs to iterate… #8965
  • fix(oauth): GHE Copilot OAuth lifecycle — connecting an account…
  • fix(health-check): the access-token-only… #8970 — thanks @hppsc1215
  • fix(providers): copilot-m365-web enterprise turns send… #8971
  • fix(ci): the reconciliation helper no longer bounds its scan… #8985
  • fix(ci): fixed a live auto-update defect where **Intel Macs… #8988
  • fix(sse): stripResponsesLifecycleEcho no longer strips… #8990
  • fix(vertex): route Claude models to native rawPredict endpoint and… #8994
  • fix(proxies): resolveProxyForConnection now returns the proxy… #8995
  • fix(translator): the Responses-to-Chat promotion path called… #8997
  • fix(sse): Claude reasoning-effort suffix ids…
    correctly on any provider serving a real Claude model, not just the direct Anthropic provider
    (#9006)
  • fix(sse): the no-thinking (no-think/) catalog variant's…
    made it unusable outside the direct provider, both in the discovery catalog and the dashboard
    playground — is fixed (#9006)
  • fix(sse): a single unrecognized model id on a Vertex connection no…
    other model on that connection for 2 minutes — Vertex 404s are now scoped to a per-model
    lockout via passthroughModels instead of a connection-wide cooldown
    (#9006)
  • fix(sse): Vertex PERMISSION_DENIED 403s are now disambiguated…
    documented error format — a genuinely connection-wide cause (API disabled, project-level IAM
    denial) still cools the whole connection, while a model-specific denial locks out only that
    model (#9006)
  • fix(sse): error-only streams now preserve… #9022 — thanks @shixi-li
  • fix(cursor): preserve tool context across multi-turn conversations… #9029
  • fix(sse): move Antigravity client system content to first user… #9030
  • fix(auth): IP blacklist now blocks on direct connections via… #9033
  • fix(api): use configured prefix instead of raw node UUID for… #9034
  • fix(resilience): Detect and reset idle-capacity rate-limit… #9041
  • fix(db): stream DB backup export instead of buffering entire file… #9045
  • fix(ui): normalize Free Pool API response payload to read from… #9046
  • fix(translator): pass… #9053 — thanks @ikelvingo
  • fix(api/analytics): stop charging :free models at arbitrary… #9054
  • fix(api): auto/* routing aliases bypass API-key… #9057
  • fix(providers): anthropic strips code-execution/skills beta flag,… #9064
  • fix(batches): GET /v1/batches now validates the limit query… #9073
  • fix(a2a): the A2A JSON-RPC router now compares the bearer token… #9083
  • fix(api/skills): the /api/skills/** routes now run caught… #9088
  • fix(providers): admit audio-speech/audio-transcriptions apiType in… #9096
  • fix(providers): modal.com validation returns clear error when Base… #9102
  • fix(providers): GitHub Copilot no longer re-imports or routes… #9103
  • fix(providers): resolve combo names in audio transcriptions route… #9134
  • fix(vscode): allow built-in auto-routing models in VS Code model… #9140
  • fix(background): detect Anthropic top-level system prompts for… #9142
  • fix(dashboard): the provider "Auto Sync" toggle now applies to… #9149
  • fix(cli): use process.execPath for macOS launchd autostart #9156
  • fix(management): authorize mcp:connect-only keys on loopback/LAN… #9159
  • fix(model-discovery): ingest capabilities.effort_tiers for synced… #9160
  • fix(translator): Honor configured Chat… #9161 — thanks @Zartharas
  • fix(translator): buffer and normalize upstream tool-call argument… #9168
  • fix(cursor): the manual "Refresh" button on Cursor connections now… #9173
  • fix(translator): avoid double-normalizing tool names in… #9177
  • fix(dashboard): the "Default Model" of an OpenAI-compatible… #9179
  • fix(db): honor the ENABLE_REQUEST_LOGS#9187 — thanks @RobertsXML
  • fix(model): normalize client… #9193 — thanks @b1nhm1nh
  • fix(catalog): repair dead guard and synced-first ordering for… #9195
  • fix(routing): consult customModels supportsVision flag in Combo… #9195
  • fix(models): Preserve published model… #9199 — thanks @xz-dev
  • fix(models): Reuse one build-local… #9199 — thanks @xz-dev
  • fix(models): Resolve token limits and model… #9199 — thanks @xz-dev
  • fix(models): Read and parse models.dev… #9199 — thanks @xz-dev
  • fix(compression): honor the global… #9200 — thanks @joachimBrindeau
  • fix(web-search): bind each search provider attempt to its… #9201
  • fix(auth): make antigravity and agy equivalent in credential… #9204
  • fix(cli): prefer IPv4 DNS for spawned… #9209 — thanks @dsitmilis
  • fix(pricing): stop billing reasoning… #9212 — thanks @yidecode
  • fix(models): /v1/models now… #4164 #9215 — thanks @nguyenha935
  • fix(combo): the Combo "Add model"… #9218 — thanks @szzhoujiarui
  • fix(codex): normalize additional_tools… #9219 — thanks @SalyyS1
  • fix(codex): preserve quota window… #9222 — thanks @HectorBernstorff
  • fix(azure): normalize GPT-5 chat… #9223 — thanks @royanrosyad85
  • fix(codex): strip orphaned tool outputs… #9228 — thanks @raflyazf
  • fix(i18n): completed the French UI… #9235 — thanks @alex-jordan547
  • fix(nvidia): normalize tool names and… #9236 — thanks @minhnhat166
  • fix(lmarena): emit Uint8Array SSE chunks instead of strings to… #9237
  • fix(db): validateRegisteredKey no longer rejects the first… #9241
  • fix(i18n): localized hardcoded web… #9245 — thanks @alex-jordan547
  • fix(db): deleting a provider connection… #9246 — thanks @maxmad64bis
  • fix(cli-tools): keep Apply enabled… #9250 — thanks @lazysaltyfish
  • fix(translator): harden Claude format… #9253 — thanks @ervareza
  • fix(minimax): add the required empty… #9256 — thanks @rixzkiye
  • fix(resilience): Enforce RPM limits with rolling leases and… #9259
  • fix(classify429): add missing have exhausted their quota#9269
  • fix(claude): remove unconditional "always" return in… #9276
  • fix(qoder): include actionable CLI_QODER_BIN hint in connection… #9277
  • fix(providers): the web search fallback detector in… #9279
  • fix(docker): the bundled Redis sidecar no longer publishes on… #9286
  • fix(credential-health): scheduler never retries failed connections… #9289
  • fix(db): persist the account egress IP… #9291 — thanks @maxmad64bis
  • fix(api): specialty model catalog ignores hidden OpenRouter model… #9293
  • fix(mcp): break circular import between googApiKeyAuth.ts and… #9297
  • fix(catalog): cache getModelsDevPricing to prevent OOM at startup #9300
  • fix(providers): bump qwen-web SPA version header from 0.2.66 to… #9304
  • fix(sse): broaden OMNIROUTE_SSE_COMMENTS to accept… #9305
  • fix(lmarena): encode SSE stream chunks as Uint8Array to prevent… #9306
  • fix(claude): reconcile compacted tool… #9308 — thanks @ryanngit
  • fix(kiro): validate completed nested… #9314 — thanks @SemonCat
  • fix(backend): use accumulated responseBody for provider payload in… #9315
  • fix(qoder): surface qodercli stderr in error message instead of… #9319
  • fix(security): require auth for /v1/models when management auth is… #9320
  • fix(claude): normalize nested Claude… #9332 — thanks @AlanSyue
  • fix(providers): map kimi-web/K3 to K2D5 scenario instead of OK… #9338
  • fix(security): require explicit tool envelope to prevent bare JSON… #9343
  • fix(api): consult LiteLLM pricing_synced layer in… #9364
  • fix(providers): treat claude-web 429 as unhealthy and forward… #9406
  • fix(providers): treat muse-spark-web 429 as unhealthy #9406
  • fix(providers): detect expired gemini-web sessions via… #9407
  • fix(providers): add tool_use block handling to claude-web stream… #9408
  • fix(api): fall back to slugified provider name when prefix is… #9416
  • fix(providers): Codex GPT-5.6 model metadata reports the 1M… #9431
  • fix(oauth): Kiro import token endpoint no longer overwrites… #9435
  • fix(sse): hoisting a mid-conversation system/developer#9436
  • fix(backend): force system MITM CA cert to 0644 on Linux… #9442
  • fix(routing): a Codex-native bare model id (gpt-5.5, the… #9447
  • fix(docker): ship MITM _internal/ shims and selfsigned package… #9451
  • fix(cli): probe PATH for claude.exe/codex.exe on Windows before… #9454
  • fix(cli): stop the supervisor before the child so omniroute stop… #9455
  • fix(cli): route claude-code OAuth to the Anthropic claude#9474
  • fix(cli): re-verify running binary version after `omniroute… #9475
  • fix(providers): classify 400 out of extra usage as quota_exhausted… #9486
  • fix(auth): redirect active sessions from… #9491 — thanks @DaDecky
  • fix(api): make the 800-message chat history cap opt-in so long… #9494
  • fix(translator): preserve authentic K3 Responses reasoning by… #9496
  • fix(translator): join reasoning summary segments with newline… #9500
  • fix(muse-spark-web): document the ecto1: WS auth token requirement… #9502
  • fix(sse): stop force-injecting advanced-tool-use beta via the… #9505
  • fix(sse): stop the reasoning-token buffer from enlarging a… #9507
  • fix(ci): include combo-matrix tests in test-integration job #9531
  • fix(ci): tighten unit suite ceiling from 100min to 80min as a… #9532
  • fix(ratelimit): added queue-wait timeout tests and… #9533
  • fix(test): prevent flaky modelsDevSync timer assertions by… #9534
  • fix(backend): map cache tokens in OpenAI-to-Claude non-streaming… #9536
  • fix(db): add transient-error retry to corruption probe to prevent… #9541
  • fix(search): mark searxng-search as fallbackOnly to prevent… #9543
  • fix(providers): strip provider prefix in getModelTargetFormat to… #9545
  • fix(model): add "aq" alias for amazon-q provider so parseModel… #9550
  • fix(proxy): NO_PROXY now bypasses context-level proxy in… #9551
  • fix(build): npm run build:cli#8858 #9553 — thanks @omniroute
  • fix(quality): #8522 #9024 #9324 #9329 #9193 #9332 #9228 #9260 #8934 #9196 #9163 #9554
  • fix(build): exec native esbuild binary directly in prepublish —… #9558
  • fix(mcp): the 3 audit.test.ts shutdown/fallback tests… #8959 #9559
  • fix(build): lazy-resolve module-level fs paths to avoid Turbopack… #9560
  • fix(sse): replace timer-based waits with polling to fix flaky… #9567
  • fix(translator): restore original tool name casing in… #9568
  • fix(translator): add case-insensitive fallback for upstream tool… #9575
  • fix(standalone): multipart uploads (`POST… #9580
  • fix(docker): standalone co-location now… #9615 — thanks @atjsh
  • fix(resilience): failed connection test now sets a short cooldown… #9623
  • fix(db): wire telemetry cleanup scheduler in Next.js startup path #9624
  • fix(db): align domain_cost_history cleanup cutoff with millisecond… #9625
  • fix(playground): surface provider model loading errors and offer… #9626
  • fix(combo): distinguish pre-dispatch skips from genuine failures… #9630
  • fix(build): add build-next-isolated.mjs sibling imports to… #9633
  • fix(providers): new per-provider… #9675
  • fix(docker): --build-arg OMNIROUTE_USE_TURBOPACK=0 now… #9695
  • fix(translator): restore TitleCase tool names on the Claude →… #9713
  • fix(db): clear stale combo connection pins when provider… #9719
  • fix(compression): persist enableRenderers through… #9730
  • Fixed GET/PUT/DELETE /api/memory/[id] always failing with a… #9737
  • Replaced hand-rolled body type checks with Zod validation in… #7 #9737
  • Restore Vietnamese locale parity after the entity-normalization… #9737
  • fix(radar): refresh signed catalog/referral caches when… #9776
  • Translator keep the Responses namespace… #9783 — thanks @VXNCXNX
  • fix(api): Model catalogs no longer expose… #9788 — thanks @xz-dev
  • fix(executors): preserve Command Code… #9826 — thanks @MrShitFox
  • fix(executors): prevent intermittent Codex… #9828
  • fix(cursor): SelectedImage uses… #9834 — thanks @yansigit
  • fix(test): reconcile test expectations that drifted from the… #9874
  • fix(search): nest Exa contents options (text/highlights) for… #9914
  • fix(i18n): re-escape CC discovery-alias… #8747 #9917 — thanks @yansigit
  • fix(encryption): name failing credential + recovery path in… #9927
  • fix(executors): preserve non-strict function-tool semantics… #9931
  • fix(migrations): don't abort on fresh install with only the 001… #9934
  • fix(admission): per-connection… #9654 #9940 — thanks @branben
  • Repair release-sweep regressions in locale and environment… #9945
  • Let the release-green validator finish the test-masking gate on… #9964
  • fix(chat): don't misclassify content-less thinking/redacted Claude… #9971
  • fix(images): normalize terminal upstream errors via… #9981
  • fix(quality): green release/v3.8.50 base-reds — sync 4 env vars… #9985
  • fix(sse): replay Gemini thought_signature on the direct Claude→Gemini path #3440 #2504 — thanks @csoftware-arigpt
  • fix(security): bump adm-zip >=0.6.0 + exact host matching in the mitm DNS test #7733
  • fix(i18n): polish zh-CN/zh-TW translations and fix over-translation of proper nouns #8872 — thanks @ikelvingo
  • fix(build): support npm v11 allowScripts for optional native deps #8877 — thanks @configurowebmax
  • fix(combo): exclude hidden leaves from catalog and dispatch #8878 — thanks @ahmet-cetinkaya
  • fix(antigravity): add onboardUser fallback for accounts missing Cloud Code project #8886 — thanks @HouMinXi
  • fix(sse): brand-neutral keepalive frames #8888 — thanks @AndrianBalanescu
  • fix(deepseek-web): enable toolCalling on all models #8889 — thanks @AndrianBalanescu
  • fix(combo): fail-fast concurrency gate and execute-mode overflow #8890 — thanks @AndrianBalanescu
  • fix(antigravity): quota-aware account selection and projectId persistence #8891 — thanks @AndrianBalanescu
  • fix(usage): aggregate provider window costs in SQL #8892 — thanks @AndrianBalanescu
  • fix(combo): least-used quota strategy and wildcard UI preservation #8894 — thanks @AndrianBalanescu
  • fix(test): stop autostart tests from disabling the developer's real systemd service #8900 — thanks @nosolosoft
  • fix(combos): include id column in getCombos query #8905 — thanks @HouMinXi
  • fix: prevent false 'Failed to save connection' error when adding providers #8912 — thanks @ziuus
  • fix: add Termux/Android support for playwright-core and better-sqlite3 #8922 — thanks @Kaedo17
  • fix(i18n): localize SubscriptionTab UI strings instead of hardcoded Chinese #8930 — thanks @Hdiaktoros
  • fix(kiro): keep interleaved tool results grouped without dropping assistant text (#8903) #8931 — thanks @xiaoyaner0201
  • Fix custom tool output pairing during context compression #8933 — thanks @JxnLexn
  • fix(routing): account for active OAuth sessions #8940 — thanks @JxnLexn
  • fix(vision): prevent bridge streaming and normalize OMP effort #8945 — thanks @rinseaid
  • fix(ci): stop one failing platform from taking the whole desktop channel down #8957
  • fix(api): alias-backed models leak raw node UUID prefix in /v1/models (#8958) #8961 — thanks @Rahulsharma0810
  • fix(sse): default OpenAI Chat Completions to non-stream when stream omitted #8976 — thanks @HouMinXi
  • fix(cache): add latency marker + per-key bypass for semantic cache #8984 — thanks @HouMinXi
  • fix(perplexity-web): update catalog to use 'copilot' mode and fix model IDs #8989
  • fix(docker): move entrypoint script to /app to avoid tmpfs masking #8999 — thanks @yutuknown
  • fix(executors): backfill missing tool message names for Kimi K3 and strict BYOK providers #9005 — thanks @Zenlyte
  • fix(command-code): enable vision flags for CC models and fix vision-bridge reroute #9007 — thanks @Stazyu
  • fix(sse): route Poe API-key traffic through DefaultExecutor (#8969) #9014 — thanks @Prudhvivuda
  • fix(sse): preserve Gemini thought_signature on Claude Desktop tool turns #9015 — thanks @Prudhvivuda
  • fix(sse): preserve Claude Code tool-name casing via Gemini/Antigravity #9016 — thanks @Prudhvivuda
  • fix(dashboard): make quota providers expandable #9025 — thanks @jktan0504
  • fix(chat): resolve stored combo names before image-model validation (#8986) #9027 — thanks @xiaoyaner0201
  • fix(kiro): read usage from the frames Kiro actually sends #9035 — thanks @ddarkr
  • fix(kiro): keep relocated tool documentation on multi-turn requests #9036 — thanks @ddarkr
  • fix(vision): preserve images for text-only routes #9037 — thanks @rinseaid
  • fix(db): bundle and verify the sql.js fallback #9044 — thanks @nguyenha935
  • fix(open-sse): route GitHub Copilot gpt-5.6 sol/terra/luna to /responses #9050 — thanks @marchlhw
  • fix: skills & memory — tool-name encoding, schema normalization, warm-cache, combo id, Ponytail catalog #9058 — thanks @Egorich-print
  • fix(classify): recognize Modal 'usage limit reached' as quota exhausted #9079 — thanks @HouMinXi
  • Fix/issue #8656 #9095 — thanks @infinit-X
  • fix(adobe-firefly): open browser sign-in and resolve provider slug in /login #9097 — thanks @artickc
  • fix(providers): make model Check/Test honor the node apiType, and show upstream model names #9099 — thanks @zhiru
  • fix(audio): let the audio routes use audio-typed provider nodes, and gate remote ones behind a default-off flag #9101 — thanks @zhiru
  • fix(antigravity): alias gemini-3.1-pro-high to gemini-pro-agent #9106 — thanks @HouMinXi
  • fix(api): flatten single-row embedding vectors to OpenAI shape #9148 — thanks @aniketshukla1
  • fix(proxy): restore connection pooling on proxy/relay paths (#9100) #9158 — thanks @oyi77
  • fix(rate-limit): separate queue wait from execution timeout #9164 — thanks @Zartharas
  • fix(translator): translate Codex agent messages for Chat #9171 — thanks @Gioxaa
  • fix(settings): allow hidePaidModels updates #9182 — thanks @Zartharas
  • fix(routing): evict affinity after terminal stream EOF #9184 — thanks @Zartharas
  • fix(docker): bundle LLMLingua optional dependencies #9185 — thanks @Zartharas
  • fix(health): skip disabled provider connections #9186 — thanks @Zartharas
  • fix(claude): preserve standalone whitespace deltas #9189 — thanks @Zartharas
  • fix(sse): evict a principal's own CCR blocks before another principal's (#9146) #9191 — thanks @fajarhide
  • fix(responses): normalize terminal usage for Codex #9192
  • fix(sse): back the CCR block store with a durable tier (#9061) #9198 — thanks @fajarhide
  • fix(combo): recover provider circuit breaker from HALF_OPEN on success #9207 — thanks @HouMinXi
  • fix(vision-bridge): improve compatibility with Anthropic image blocks and self-loop describe requests #9226 — thanks @Stazyu
  • fix(images): refresh OAuth credentials and rotate accounts after 401 #9231 — thanks @Bl0ck154
  • fix(ci): merge-queue tolerance for Build (advisory), drops paid-tier batching #9233 — thanks @wgordon17
  • fix(token-refresh): exempt transient errors from exponential backoff #9242 — thanks @HouMinXi
  • fix(resilience): count STREAM_EARLY_EOF as a provider failure in combo routing #9251 — thanks @TechNickAI
  • fix(command-code): preserve literal max effort for command-code provider #9257 — thanks @Chewji9875
  • fix(dashboard): open webhook wizard in edit mode #9272 — thanks @khoazero123
  • fix(mcp): remove non-standard x-provider field from omniroute_test_combo body #9274 — thanks @Sam280903
  • fix(routing): bare model ids route to codex first; validate synced candidates #9275
  • fix(mcp): stop DB init logging from corrupting the stdio JSON-RPC stream #9281 — thanks @Sam280903
  • fix(reasoning): forward Ollama Cloud thinking #9290 — thanks @xz-dev
  • fix(models): reconcile active live model catalogs #9294 — thanks @Zartharas
  • fix: update Baichuan website URL to baichuan-ai.com #9312 — thanks @zabrodschiipavel-sketch
  • fix(agentrouter): retry on 400 content-blocked + burst guard #9323
  • fix:nanogpt model discovery #9326 — thanks @TheFrenchGhosty
  • fix(rate-limit): patch Bottleneck doExpire capacity leak #9328 — thanks @HouMinXi
  • fix(auth): let an agy request find the connection it authorized #9340 — thanks @HouMinXi
  • fix(combo): network errors must not trip provider circuit breaker #9342 — thanks @HouMinXi
  • fix(antigravity): propagate switchAuth signal from 429 engine to retry guard #9351 — thanks @HouMinXi
  • fix(routing): correct reset-window strategy prioritization (#9330) #9353 — thanks @Iammilansoni
  • fix(sse): drop the localDb barrel imports from chat and auth #9380 — thanks @HouMinXi
  • fix(providers): enforce gemini-web reasoning and tool constraints (#9356) #9397 — thanks @Iammilansoni
  • fix(combo): complete #8400 — preserve full fallback order + per-model account affinity for deterministic combos #9420 — thanks @Chewji9875
  • fix(translator): normalize streamed optional tool arguments #9423 — thanks @KittisakT
  • fix(providers): correct Codex GPT-5.6 context limits #9432 — thanks @PixmaNts
  • fix(usage): stop double-counting cache-read tokens in Command Code executor #9438 — thanks @Stazyu
  • fix(deps): bumps transitive deps for 8 CVEs surfaced by vuln-ratchet #9441 — thanks @wgordon17
  • fix(ui): preserve request log position #9452 — thanks @xiaoyaner0201
  • fix(sse): preserve client cache boundaries when hoisting system roles #9457 — thanks @LeonG606
  • fix(providers): switch minimax from claude to openai format so images work #9463
  • fix(sse): take the Antigravity output ceiling from the model, not a constant #9482 — thanks @HouMinXi
  • fix(docs): add required MDX frontmatter to AGENTROUTER_WAF.md #9503
  • fix(quality): prune a stale entry from the ESLint suppressions baseline #9509 — thanks @HouMinXi
  • fix(classify): honor upstream retry windows on Gemini free-tier 429s #9513 — thanks @shixi-li
  • fix(quality): 2 production bugs + 24 unit base-reds + measured gate ceilings #9529
  • fix(providers): support data URL icons #9555 — thanks @xz-dev
  • fix(sse): shrink chat.ts back under the frozen file-size cap (base-red drain) #9598
  • fix(ci): clear base-reds on release/v3.8.50 (migration collision + 4 masked gates) #9600
  • fix(resilience): enforce RPM with rolling leases #9604
  • fix(backend): stop reasoning replay placeholder from self-poisoning #9610 — thanks @stanleytejakusuma
  • fix(providers): mint a Zed LLM token for zed-hosted model discovery #9628 — thanks @ARC345
  • fix(test): reconcile base-drifted test expectations on release/v3.8.50 #9634 — thanks @HouMinXi
  • fix(openrouter): scope model failures per-model instead of poisoning the whole connection #9635 — thanks @hartmark
  • fix(radar): close the audit gaps — auth, merged feed fields, opt-in state, sidebar gate, size cap + daily scheduler #9686
  • fix(ci): clear the NEW base-reds from the 08-06 merge batch (migration collision #2 + broken import) #9688
  • fix(codebuddy-cn): replace agent system prompts to bypass Tencent content filter #9723 — thanks @zuckdorsey
  • fix(db): resolve migration version 135 numbering collision #9745 — thanks @hartmark
  • fix(ci): clear the 08-08 base-red layers — dead-code, prod crash in chat.ts, Responses payload regression, born-red stdio test, gate drifts #9757
  • fix(bun): make server child and outbound fetch Bun-safe #9761 — thanks @Arul-
  • fix(sse): preserve original body for semantic cache signature — fixes 0% hit rate #9775
  • fix(api): validate request bodies with Zod in 4 routes — restores the t06 gate (#9737) #9779
  • fix(ci): restore current release test integrity #9819
  • fix(ci): close remaining release-green gaps #9835
  • fix(proxy): isolate wreq TLS sessions by account #9837 — thanks @agisota
  • fix(cursor): SelectedImage blobIdWithData + JPEG soft-cap prep #9840 #9834 — thanks @yansigit
  • fix(executors): strip redundant oneOf matching sibling enum #9841 #9828 — thanks @larin-vas
  • fix(executors): preserve Command Code usage in Responses streams #9842 #9826 — thanks @MrShitFox
  • fix(responses-api): tool call after a text message collided on the same output_index #9843 #9822 — thanks @hartmark
  • fix(admission): queue heavyweight chat requests before 503 busy #9845 #9816 — thanks @herjarsa
  • [TS7] fix(types): accept synced catalog model rows #9846 #9798 — thanks @backryun
  • [TS7] fix(types): normalize DuckDuckGo request messages #9847 #9797 — thanks @backryun
  • [TS7] fix(types): expose SQLite transaction state #9848 #9796 — thanks @backryun
  • [TS7] fix(types): validate default executor pool config #9849 #9795 — thanks @backryun
  • [TS7] fix(types): preserve The Old LLM proxy contracts #9850 #9793 — thanks @backryun
  • [TS7] fix(types): normalize Gemini Business credentials #9851 #9792 — thanks @backryun
  • [TS7] fix(types): preserve Claude thinking body contracts #9852 #9791 — thanks @backryun
  • fix(response): strip internal reasoning placeholder from all reasoning fields #9853 #9790 — thanks @adevwithpurpose
  • fix(api): enforce model permissions on gateway mirrors #9854 #9788 — thanks @xz-dev
  • fix(sse): apply Azure param rules on azure-ai and clamp gpt-4o-mini output tokens #9855 #9787 — thanks @Michael-Rocco-Goldmann
  • fix(sse): route claude discovery aliases for catalog-only providers #9856 #9777 — thanks @Michael-Rocco-Goldmann
  • fix(i18n): translate validation model keys in 34 locales #9857 #9773 — thanks @Michael-Rocco-Goldmann
  • [TS7] fix(skills): normalize web fetch credentials #9859 #9755 — thanks @backryun
  • [TS7] fix(types): narrow DeepSeek tool calls #9860 #9751 — thanks @backryun
  • fix(pricing): memoize getSyncedPricing() across catalog cache versions #9861 #9746 — thanks @chloeassistant
  • fix(logging): use configurable max-depth when bounding logged tool_calls #9865 #9734 — thanks @hartmark
  • fix(executors): repair DuckDuckGo AI Chat challenge solver (418 ERR_CHALLENGE) #9866 #9733 — thanks @Mynacol
  • fix(compression): persist RTK renderer configuration #9867 #9730 — thanks @isaaclb98
  • fix(dashboard): unregister leftover service workers in dev mode #9868 #9727 — thanks @hartmark
  • fix(docker): make the webpack build-arg escape hatch actually work #9872 #9695 — thanks @HouMinXi
  • fix(providers): per-provider opt-out for anonymous no-auth fallback (opencode-go/zen 401s) #9873 #9675 — thanks @chloeassistant
  • fix(providers): reject the dashboard password as a connection API key #9877 #9572 — thanks @HouMinXi
  • fix(settings): use provider prefixes in model overrides #9878 #9569 — thanks @xz-dev
  • fix(translator): preserve Kimi K3 Responses reasoning #9879 #9556 — thanks @jackjinke
  • fix(adobe-firefly): harden CDP warm, risk session, and browser sign-in #9881 #9549 — thanks @artickc
  • fix: pass max reasoning effort through by default, add global model registry fallback #9883 #9612 — thanks @Momen4444
  • fix(db): resolve CCR migration version collision #9884 #9618 — thanks @fenix007
  • fix(compression): add Lite tool truncation toggle #9885 #9629 — thanks @xz-dev
  • fix(web-tools): anchor tool contract at prompt tail + user-turn reminder for large prompts #9887 #9693 — thanks @ryan-brosas
  • fix(sse): persist per-tool-call JSON escape state across SSE delta chunks #9889 #9704 — thanks @hartmark
  • fix(db,combo): renumber ccr_blocks 134→139 + restore antigravity pool filter #9890 #9707 — thanks @matiasbaglieri
  • fix(sse): grace period before finalizing a client disconnect as 499 #9891 #9711 — thanks @hartmark
  • fix(build): standalone bundle misses LLMLingua dist + onnxruntime native binaries #9892 #9712 — thanks @hartmark
  • fix(responses-api): sync reasoning-cache write index with the fixed read side #9895 #9741 — thanks @hartmark
  • fix(ci): repair release lint test regressions #9896 #9813 — thanks @alex-jordan547
  • fix(command-code): include tool call arguments #9897 #9821 — thanks @Chewji9875
  • fix(providers): remove retired NVIDIA NIM catalog entries #9898 #9825 — thanks @Zartharas
  • fix(nvidia): keep 410 failures model-scoped #9899 #9833 — thanks @Zartharas
  • fix: retry CodeBuddy large-tool requests in compact form #9900 #9542 — thanks @mvanhorn
  • fix(quality): clears two release/v3.8.50 base-red gates #9901 #9619 — thanks @wgordon17
  • fix: resolve hollow external package directory crashes and implement … #9913 — thanks @SupremeNexas
  • fix(i18n): restore Vietnamese locale parity #9925
  • fix(combo): classify Cloudflare 1010 fingerprint rejection as non-auth #9929 — thanks @HouMinXi
  • fix(image): return Fal images as base64 by default #9932 — thanks @rinseaid
  • fix(image): support Fal reference-image edits #9933 — thanks @rinseaid
  • fix(db): invalidate LKGP pins on provider connection delete #9936 — thanks @Zartharas
  • fix(services): stop embedded-service supervisor retry loop when binary cannot spawn #9937 — thanks @herjarsa
  • fix(backend): retain streaming usage for providers with choices:[{delta:{}}] final chunk #9938 — thanks @sadSanta-07
  • fix(antigravity): ban-safety hardening — bounded onboarding retries, gate thought-signature bypass sentinel #9939 — thanks @benzntech
  • fix(guardrails): vision bridge reroute/pool/self-loop fixes (auto/best-vision, claude-wire base64) #9946 — thanks @herjarsa
  • fix(mcp): stop omniroute_get_health silently discarding real data #9959 — thanks @tald26
  • fix(build): bump @huggingface/transformers to 4.2.0 + onnxruntime-node 1.24.3 #9962 — thanks @witt3rd
  • fix(cleanup): prune mcp_tool_audit/a2a_task_events by created_at column #9963 — thanks @witt3rd
  • fix(db): avoid skipping pending job registry migration 146 #9965 — thanks @Zartharas
  • fix(video): support Fal-hosted Grok Imagine Video #9969 — thanks @rinseaid
  • fix(i18n): escape angle brackets in denoRelayOrgDomainHint across all 43 locales #9976 — thanks @AgnesRiber
  • fix(media): support Gemini Omni Flash video #9982 — thanks @rinseaid
  • fix(copilot-web): restore browser authentication #9984 — thanks @backryun
  • fix(opencode): fallback unsupported DeepSeek json schema output #9992 — thanks @Zartharas
  • fix(translator): restore TitleCase tool names on the Claude to Gemini path #9993 — thanks @engmarcosjr
  • fix(providers): scope model-level targetFormat to declaring provider catalog #9994 — thanks @Chewji9875
  • fix(kimi): apply K3 effort policy to aliases #10005 — thanks @jackjinke
  • fix(adobe-firefly) — direct pushes: harden credential parsing and…
  • fix(combo/sse) — direct pushes: ignore benign empty error fields…
  • fix(logging) — direct pushes: make stream-chunk capture and…
  • fix(i18n) — direct pushes: restore/unescape HTML entities in UI…
  • fix(providers) — direct pushes: repair the DeepAI registry import…
  • fix(deps) — direct pushes: CVE-driven bumps (nanoid, dompurify,…
  • fix(ci): pin Build (advisory) to a hosted runner with memory… #10408
  • fix(providers): refresh the translate-path golden for the… #10410
  • fix(sse): surface Qwen/Alibaba personal Token Plan quota in… #10290
  • fix(deps): pin next to an exact version so a fresh upstream… #10340
  • fix(types): restore custom model output… #10339 — thanks @backryun
  • fix(sse): stop the executor-contract guard from hot-looping… #10373
  • fix(types): validate nonstreaming JSON… #10258 — thanks @backryun
  • fix(types): narrow refresh token rotation… #10257 — thanks @backryun
  • fix(types): normalize executor result… #10256 — thanks @backryun
  • fix(types): align Responses stream options #10255 — thanks @backryun
  • fix(types): narrow combo credential… #10254 — thanks @backryun
  • fix(compression): cap… #10118 — thanks @adevwithpurpose
  • fix(ci): clear base-reds on release/v3.8.50 (round 4 #10260
  • fix(sse): extract perplexity-web… #10259 — thanks @jeyhunfaslanov
  • fix(mcp): persist and re-attach Gemini… #9448 — thanks @Sam280903
  • fix(opencode-plugin): respect… #8982 #9316 — thanks @xiaoyaner0201
  • fix(providers): raise default provider… #9283 — thanks @Sam280903
  • fix(opencode-plugin): stop… #8983 #9042 — thanks @xiaoyaner0201
  • fix(opencode): force CLI… #10222 — thanks @adevwithpurpose
  • fix(deepseek-web): classify business… #10218 — thanks @Zartharas
  • fix(combo): make failoverBeforeRetry… #10217 — thanks @hartmark
  • fix(responses): preserve case-insensitive… #10177 — thanks @ddarkr
  • fix(discovery): parse reasoning… #10138 — thanks @excessivechaos
  • fix(combo): isolate session stickiness… #10137 — thanks @hydraxman
  • fix(combo): default chaos SSE to… #10128 — thanks @herjarsa
  • fix(kimi): normalize MFJS tool schemas #10079 — thanks @xz-dev
  • fix(mcp): move pack validation out of… #10065 — thanks @yansigit
  • fix(zed-hosted): send the provider wire… #10051 — thanks @ARC345
  • fix(ci): repair and wire the two… #10050 — thanks @ARC345
  • fix(reasoning): preserve and replay… #10045 — thanks @jackjinke
  • fix(types): tighten chatCore helper… #10175 — thanks @backryun
  • fix(cli): read the full provider… #10097 — thanks @amartinawi
  • fix(cli): stop swallowing non-2xx… #10092 — thanks @amartinawi
  • fix(cli): openapi… #10091 — thanks @amartinawi
  • fix(cli): doctor detects prebuilt… #10090 — thanks @amartinawi
  • fix(providers): kilo-gateway authType… #10086 — thanks @TengSivtean
  • fix(cli): strip inline comments when… #10101 — thanks @amartinawi
  • fix(logging): document… #10038 — thanks @hartmark
  • fix(dashboard): expose OpenAI Responses… #10121 — thanks @hartmark
  • fix(combo): clear LKGP pin when its… #10034 — thanks @hartmark
  • fix(sse): provider-response summary… #10037 — thanks @hartmark
  • fix(responses-api): tool call after… #10025 — thanks @hartmark
  • fix(responses-api): explicit… #10041 — thanks @hartmark
  • fix(kimi): recupera limite temporario… #10058 — thanks @bortolidiego
  • fix(translator): preserve Responses… #10114 — thanks @mtb-ninja
  • fix(providers): xai-oauth… #10165 #10170 — thanks @nordz0r
  • fix(ollama-cloud): map xhigh reasoning… #10160 — thanks @Chewji9875
  • fix(translator): strip Codex encrypted… #10053 — thanks @XDayonline
  • fix(combo): preserve OpenCode Free oc/… #10180 — thanks @AStupidBear
  • fix(sse): apply free-tier filter to… #10199 — thanks @ggdayup
  • fix(providers): default missing… #10221 — thanks @jeff-alves
  • fix(ci): clear base-reds on release/v3.8.50 (round 3 #10213
  • fix(security): correct XML double-unescape and non-CSPRNG… #10154
  • fix(docker): eliminate npm-bundled CVEs from the published… #10182
  • fix(security): resolve open CodeQL alerts #10188
  • fix(dashboard): retarget Kimi promo CTA to the API platform… #10200
  • fix(build): repair broken production build, red lint gate and… #10198
  • fix(cli): repair hollow externalized package dirs in the nested… #7346
  • Electron packaged smoke test: add a cold-restart mode… #7592
  • fix(usage): keep session/weekly/monthly quota windows in… #7764
  • fix(images): retry Codex image generation on a sibling ChatGPT… #8307
  • fix(dashboard): treat UncloseAI as a no-auth provider so the… #8864
  • fix(dashboard): model-level allowed/blocked param edits now… #9013
  • fix(ssrf): make getProviderOutboundGuard (used for… #9123
  • fix(compression): preserve unfenced raw code (e.g. Copilot #file… #9144
  • fix(api): yield the event loop during catalog builds and bulk-load… #9147
  • fix(combo): recovery hint for all_targets_skipped now points at… #9303
  • fix(providers): strip uniqueItems from Gemini tool schemas (Gemini… #9617
  • fix(translator): convert OpenAI image_url blocks nested in… #9692
  • fix(resilience): retry a retryable Codex pre-output… #9708
  • fix(ratelimit): respect operator minTimeBetweenRequestsMs… #9763
  • fix(test): remove live npm pack from MCP files unit… #3578 #3821
  • fix(dashboard): media mini-playgrounds authenticate via session… #9935
  • fix(sse): exclude search providers from credential-health… #9970
  • Passthrough streaming: stop leaking upstream SSE control lines… #10017
  • fix(cli): stop diagnosing every Next.js instrumentation-hook… #10028
  • fix(build): stop the native… #10060 — thanks @latest
  • fix(providers): the five g4f.space… #10071 — thanks @chirag127
  • fix(chatgpt-web): Preserve native max… #10077 — thanks @zannen7
  • Fix: wire AgentRouter's existing console balance fetcher into the… #10078
  • Fix: AgentRouter's dollar balance now renders as a… #10078
  • fix(sse): bridge generic openai-compatible/anthropic-compatible… #10085
  • fix(domain): stop treating an unreported Antigravity quota… #10095
  • fix(dashboard): remap unified Kimi Code card API-key save to the… #10096
  • fix(antigravity): strip trailing model turn for native Gemini… #10104
  • fix(admission): stop the adaptive latency-gradient collapse… #10111
  • fix(sse): downgrade client-supplied thinking:{type:"adaptive"}… #10119
  • fix(logging): move call-log artifact serialization and… #10123
  • perf(logging): bound each scheduled call-log rotation pass to… #10125
  • fix(streaming): start early SSE heartbeats when Responses or… #10127
  • fix(combo): scope session-stickiness bindings to their owning… #10136
  • fix(translator): resolve the Claude thinking output cap with… #10139
  • fix(providers): correct the conol-web registry fallback-models import…
    non-existent open-sse/config/services/ and made any suite loading the provider registry fail to
    resolve (#10140)
  • fix(oauth): Claude connections created via… #10144 #10143
  • fix(sse): Responses-passthrough response.completed snapshots… #10156
  • fix(proxy-subscriptions): allow local/loopback proxy-subscription… #10158
  • fix(routing): keep approximate Combo… #10162 — thanks @xz-dev
  • docs(settings): document Thinking Budget modes (passthrough vs… #10169
  • fix(cli): guarantee a non-empty [STARTUP] Fatal: log line for… #10171
  • fix(sse): gate structural chat admission shedding on real… #10183 #10268
  • fix(guardrails): Vision Bridge handles… #10202 — thanks @Zartharas
  • fix(cursor): Stop truncating pending tool calls on… #10215
  • fix(responses): repair corrupted SSE deltas for non-ASCII… #10223
  • fix(combo): defer the known-context-overflow hard rejection… #10225
  • fix(api): deleting a… #3199 #3782 #10228 — thanks @Neuron-Mr-White
  • Audio Bridge: fix production transcription self-loop uploads… #10229
  • fix(api): DeepSeek V4's native… #10230 — thanks @Neuron-Mr-White
  • fix(providers): FreeAIAPIKey now targets… #10233
  • fix(providers): MonsterAPI's deprecation now actually applies… #10234
  • fix(cliproxy): read platform/arch at runtime via… #10244
  • fix(providers): compatible/custom providers… #10247 — thanks @xz-dev
  • fix(models): custom model metadata and… #10248 — thanks @jackjinke
  • fix(open-sse): stop concurrent requests colliding on the same… #10249
  • fix(translator): Text-format tool calls emitted inline by some… #10251
  • fix(dashboard): make provider card warning indicators expose the… #10261
  • fix(command-code): route chat to the documented… #10265
  • fix(providers): preserve validator HTTP… #10272 — thanks @Zartharas
  • fix(sse): tiny-budget reasoning… #10281 — thanks @harkaranbrar7
  • fix(video): stop advertising the googleflow (Veo) video provider… #10285
  • fix(build): stop Turbopack from dead-code-eliminating the… #10293
  • fix(ops): Docker HEALTHCHECK defaults to the lightweight… #10311
  • fix(api): hash the API key before using it as the model-catalog… #10313
  • fix(resilience): keep combo quality and auth failure reasons… #10314
  • fix(dashboard): send periodic WS heartbeat pings so live… #10319
  • fix(chat-body-admission): restore a single process-wide… #10110
  • fix(providers): validate Z.ai web Local… #10329 — thanks @Zartharas
  • fix(opencode-plugin): publish bare combo model ids without the… #10345
  • fix(backend): log auto/<family> matched no connected models… #10346
  • fix(backend): redact client IPs and account prefixes from default… #10348
  • fix(github): proactive credential… #10352 — thanks @RaviTharuma
  • fix(docker): warn at boot when OMNIROUTE_MEMORY_MB disagrees… #10353
  • fix(providers): GitLab Duo falls back to the public Code… #10365
  • fix(db): getSettings defaults… #10372 — thanks @lamchun1110
  • fix(translator): Consolidate tool-name casing… #7926 #8979 #10374
  • fix(responses): preserve native tool definitions for custom… #10374
  • fix(dashboard): Free Tier 'used this month' now includes live… #10381
  • fix(executors): OpencodeExecutor and MimocodeExecutor now… #10393
  • fix(sse): the header-budget drop… #10397 — thanks @lamchun1110
  • fix(sse): fail over combo streaming responses that reach… #10404
  • fix(guardrails): Vision Bridge now reroutes… #10415 — thanks @rqzbeh
  • fix(antigravity): geo-blocked egress… #10420 — thanks @rqzbeh
  • fix(antigravity): strip competing-agent… #10420 — thanks @rqzbeh
  • fix(antigravity): accounts with an empty… #10424 — thanks @rqzbeh
  • fix(antigravity): Google deprecated… #10424 — thanks @rqzbeh
  • fix(usage): read Gemini usageMetadata… #59 #10430 — thanks @rqzbeh
  • fix(usage): surface Gemini… #10430 #10465 — thanks @rqzbeh
  • fix(antigravity): automatically… #10424 #10470 — thanks @rqzbeh
  • fix(mitm): forward passthrough traffic to the actual requested… #10479
  • fix(docker): point the bifrost sidecar at the real… #10482
  • fix(sse): stop ZWJ-obfuscating the substring "hermes" in user… #10484
  • fix(memory): auto-check Qdrant health on mount and stop the… #10489
  • test(compression): align source-contract tests with the merged… #10489
  • fix(cli): use 127.0.0.1 for the readiness health-check poll… #10508
  • fix(providers): zed-hosted OAuth now… #10517 — thanks @phatchau036
  • fix(providers): allow token-backed web… #10518 — thanks @Zartharas
  • fix(providers): test token-backed web… #10519 — thanks @Zartharas
  • fix(compliance): redact additional… #10521 — thanks @Zartharas
  • fix(providers): register a real Firefly auth probe under both the… #10522
  • fix(services): isolate probeBeforeSpawn adoption tests on… #10523
  • fix(sse): auto-replay a bounded multi-turn trajectory in the… #10527
  • fix(network): direct (no-proxy) egress now bounds each… #10214
  • fix(models): align Codex GPT-5.6 context limits with the Codex… #10530
  • fix(deps): upgrade… #10536 — thanks @atjsh @tensorflow @huggingface
  • fix(deepseek): Advertise none, low,… #10540 — thanks @jackjinke
  • fix(a2a): use a constant-time bearer compare in… #10544
  • Preserve portable plaintext reasoning by default across… #10550 #10959
  • fix(dashboard): show the real model count on the "List Models"… #10553
  • fix(cli): ignore the operating… #10557 #10492 — thanks @redzrush101
  • fix(providers): OpenCode x-opencode-session now derives a… #10571
  • fix(mcp): make GitHub skill tools discoverable through…
  • fix(providers): remove 10 retired model ids from the crof seed… #10577
  • fix(audio): when a prefix-matched STT provider has no… #10583
  • fix(sse): resolve the short provider-alias prefix (e.g. el/)… #10586
  • fix(sse): map OpenAI-compat voice names to real ElevenLabs… #10589
  • fix(dashboard): route the Playground's ChatTab "Send" through the… #10592
  • fix(providers): Magnific Mystic is now the canonical provider… #10594
  • fix(sse): Include the redacted upstream error body in the… #10597
  • fix(xai): trim Chat Completions messages and Responses… #10601
  • fix(cli): derive the machine-id token correctly under plain… #10612
  • fix(cli): omniroute setup --add-provider --api-key <key> no… #10613
  • fix(dashboard): make /api/models agree with /v1/models on… #10615
  • Combo routing: await each connection's token limit before… #10686
  • fix(guardrails): resolve the public provider alias before… #10702
  • fix(dashboard): filter the Modality Bridge Vision model picker to… #10703
  • fix(usage): repair provider-reported input_tokens: 0 on… #10705
  • fix(cli): distinguish a CLI-probe timeout from a genuinely… #10710 #10711
  • fix(cli): pass --allow-scripts for the runtime's own… #10713
  • fix(db): filter getProviderMetrics to providers with a live… #10714
  • fix(proxy): keep password-only proxy credentials instead of… #10720
  • fix(executors): the Meta AI (muse-spark-web) WebSocket… #10727
  • fix(providers): copilot-m365-web chat… #10732 — thanks @acc0mplish
  • fix(catalog): stop counting getTokenLimit's generic 128k… #10734
  • fix(search): name /v1/search 502s with provider id and… #10735
  • fix(db): pause call-log rotation and record SQLITE_CORRUPT on… #10736
  • fix(compression): skip the expensive createCompressionStats… #10765
  • fix(api): /api/cache/stats reported the… #9446 — thanks @Poid-ZA
  • fix(logging): the app log is filterable and readable again. Entries…
  • fix(analytics): Claude Code… #10774 — thanks @electrumguy
  • fix(db): periodically run wal_checkpoint(TRUNCATE) so the… #10781
  • fix(sse): replace LiveWS's application-only liveness check with a… #10782
  • fix(open-sse): declare supportedThinkingEfforts… #10788
  • fix(resilience): scope the same-account transport retry out of… #9708
  • fix(opencode-plugin): respect log level… #10798 — thanks @tientien17
  • fix(providers): Keep NVIDIA timeout… #10799 — thanks @Zartharas
  • fix(db): disambiguate createProviderConnection's OAuth email… #10815
  • fix(oauth): stop treating the Kiro profile ARN as an account… #10815
  • fix(images): register OpenAI dall-e-3 in the image registry… #10832
  • fix(security): Outbound URL guard now… #10843 — thanks @ntdat812
  • fix(config): exclude cookie-auth image bridges (chatgpt-web,… #10848
  • fix(api): POST /v1/search now replies with a named `Unknown… #10849
  • fix(api): alias GET/HEAD /readyz to /healthz so… #10850
  • Document the conditional management authentication and 401/403…
  • fix(i18n): The "Disabled" status… #10812 #10853 — thanks @ntdat812
  • fix(skills): Marketplace-installed… #10854 — thanks @kriptoburak
  • fix(catalog): /v1/models no… #10831 #10857 — thanks @ntdat812
  • fix(context): Base64 file payloads… #10840 #10858 — thanks @ntdat812
  • fix(mcp): MCP tool calls that wait on a model provider no longer…
  • fix(providers): importing models with an expired API key… #5460 #5465
  • fix(api): reject a combo update that removes every model, and… #10866
  • fix(proxy): proxy "Test connection" no longer reports an… #1255
  • fix(cli): warn when a .env line never takes effect, and stop… #10870
  • fix(db): Remove stale MiMoCode provider… #10873 — thanks @Zartharas
  • fix(sse): getResetAwareProvider and the auto-combo quota… #10877
  • fix(provider-health): Keep unsupported… #10878 — thanks @Zartharas
  • fix(antigravity): map Gemini 3.7… #10882 — thanks @adevwithpurpose
  • fix(memory): enable agent memory… #10887 — thanks @Egorich-print
  • fix(perplexity-web): make the… #10902 #8634 — thanks @danscMax
  • fix(providers): the loopback readiness gate no longer… #10903
  • fix(relay): the Cloudflare… #4643 #1360 #6149 — thanks @evil
  • fix(build): the next Docker… #10936 #10933 — thanks @arminanton
  • fix(cli): always emit limit.output in generated OpenCode config… #10940
  • fix(relay): the private/loopback guard the three proxy-relay… #6149
  • Account rotation: make fallbackStrategy: "least-used"… #10945
  • Desktop auto-update (Windows): stop the in-app updater 404ing… #10947
  • Preserve explicit plaintext reasoning when a Responses… #10949 #10959
  • fix(catalog): preserve provider-declared… #10953 — thanks @xz-dev
  • fix(cli): combo create accepts --models and no longer creates… #10954
  • fix(cli): resolve $ref path params and add PATCH combos… #10955
  • fix(sse): default single-target incompatible reasoning to drop… #10959
  • fix(sse): combo diagnostics no longer truncate… #10967
  • fix(sse): combo terminal failures caused entirely by… #10966
  • fix(search): skip catalog-default SearXNG… #10976
  • fix(command-code): surface reasoning-only output as content when… #10986
  • fix(ci): clear inherited release/v3.8.50 quality-gate reds… #10988
  • fix(ci): clear remaining release/v3.8.50… #9147 #10501 #10988
  • Static model catalog for v0-vercel-web: seed a static catalog… #10990
  • fix(providers): mark the blackbox provider deprecated —… #10997
  • fix(providers): validate Dify keys against its native… #11002
  • fix(accounts): markCooldown now… #11008 — thanks @maxmad64bis
  • fix(providers): route terminal… #11009 — thanks @maxmad64bis
  • fix(codex): drop non-standard… #11014 — thanks @RaviTharuma
  • fix(resilience): count heavyweight… #11015 — thanks @RaviTharuma
  • fix(startup): log `Credential health… #11016 — thanks @RaviTharuma
  • docs(api-keys): document that… #2289 #11017 — thanks @RaviTharuma
  • fix(webhooks): remove 3 declared-but-never-emitted events…
  • fix(providers): filter Perplexity model import to the Sonar… #11060
  • fix(claude): restore canonical tool names… #11085 — thanks @linhdmn
  • fix(resilience): filter chat connection selection by each… #11089
  • fix(install): make the ONNX dependency chain optional so… #11095
  • fix(providers): Reject silent validation degradation on… #11101
  • Autopilot suggestion counter: the combo health autopilot… #11102
  • Config audit persistence: persist the configuration audit… #11103
  • fix(sse): resume mid-stream recovery after a completed tool… #11109
  • fix(providers): reasoning_effort now… #11116 — thanks @maxmad64bis
  • fix(sse): parallel function_call items in a Responses API… #11144
  • fix(analytics): opencode-go is now… #11149 — thanks @electrumguy
  • fix(dashboard): keep open-sse/config/providerRegistry.ts… #11122 #11154
  • Combo create: creating a routing combo without any model is now…
  • fix(resilience): a missing-model… #11165 — thanks @yourspraveen
  • fix(routing): a custom… #11180 — thanks @marcs7
  • fix(routing): the Routing tab's "last known good provider"… #11181
  • fix(ollama): Ollama Local models are… #11271 — thanks @yourspraveen
  • fix(providers): Antigravity OAuth marks connects with no Cloud… #11284
  • fix(translator): preserve omitted… #11297 — thanks @ofonseca-pyming
  • fix(db): group model patterns escape regex metacharacters, so… #11311
  • fix(db): the upstream proxy URL check judges the host by… #11319
  • fix(i18n): three pt strings had dropped their placeholders… #11325
  • fix(kie): map the remaining google-imagen/* KIE… #11225 #11326
  • fix(security): proxy-authorization and proxy-authenticate… #11328
  • fix(video-bridge): fall back to the deterministic… #11344
  • fix(translator): Codex Responses tool calls translated for… #11347
  • fix(video-bridge): burn high-contrast timestamps into every… #11350
  • fix(video): fingerprint protected Video Bridge bytes, coalesce… #11362
  • fix(catalog): keep large /v1/models builds responsive by… #11367
  • fix(video): apply the caption-frame cap after bounded visual… #11382
  • Live dashboard: honour the WebSocket port reported by… #11331
  • fix(dashboard): Model Database sync… #11394 — thanks @An0nym0us92
  • fix(api-manager): Allowed Combos can now be restricted to zero…
  • fix(build): tolerate a same-realpath symlink or stale-typed dest in the…
  • fix(auto): rate-limit auto/<family> matched no connected models
  • fix(cli): drop the orphaned resolveOpencodeConfigDir… #10246 #9985
  • fix(ci): make Build (advisory) produce a signal again — pinned to a…
  • fix(api): hash API keys in the /v1/models catalog cache Map key so…
  • fix(providers): register live OpenRouter… — thanks @RaviTharuma
  • fix(translator): merge consecutive same-role contents in direct…
  • fix(cli): omniroute update now finds npm… #52554 #5379 #5542 #11335
  • fix(cline): Preserve client-supplied Cline task IDs and omit the…
  • Hardened the Codex app-server transport after the post-merge… #11205
  • fix(codex): prefer max_context_window over the context_window
  • fix(catalog): derive combo reasoning-effort tiers from the exact…
  • fix(combo): evict in-memory session-stickiness bindings when a combo…
  • fix(combo): resolve effort-suffixed command-code variants (e.g.…
  • fix(db): the compression_run_telemetry retention sweep… #6848 #9625
  • fix(compression): use pathToFileURL in compressionWorkerPool so…
  • fix(db): database settings API no longer returns HTTP 500 on SQLite…
  • fix(discovery): parse upstream reasoning tiers nested under…
  • fix(ops): Docker HEALTHCHECK probes lightweight /healthz instead…
  • fix(api): /v1/embeddings 400s for native… — thanks @RaviTharuma
  • fix(sse): keep Codex/Anthropic quota headers under the upstream…
  • fix(usage): z.ai/GLM coding-plan subscription keys now render their…
  • fix(auth): a connection's lastError now names the real upstream…
  • fix(live-ws): the Live dashboard socket can now be pointed at… #11331
  • fix(sse): MiniMax music models now generate audio instead of failing…
  • fix(models): honor MODELS_DEV_SYNC_ENABLED=0 as a hard kill switch…
  • fix(providers): when OPENCODE_SYNTHESIZE_CLI_HEADERS=true, a… #5997
  • OpenCode config merge: stop mergeOpenCodeConfig splaying a…
  • fix(models): a model synced from a provider's own /models
  • fix(providers): Claude Code /… — thanks @jeff-alves
  • fix(electron): desktop window stays hidden on Windows because the…
  • fix(executors): OpencodeExecutor rotates (or retries once on a…
  • fix(cli): recognize native… #10227 — thanks @tito13kfm
  • fix(i18n): complete Vietnamese translations for recently added UI… #9985
  • fix(api): repair broken @/lib/db/connections import in the… #10939
  • chore(docs): regenerate PROVIDER_REFERENCE and refresh README diagram…
  • chore(lint): prune ESLint suppressions orphaned on the release branch
  • fix(build): #9011 #9982 #9969 #9199 #8728 #8736 #10087 #8974 #7682 #9173
  • fix(security): harden three secret-leak paths surfaced by an audit…
  • fix(db): the sql.js fallback now publishes the database atomically…
  • fix(sse): #10441 #11152 #11151 #10475 #10980 #10805 — thanks @geek007git @maxmad64bis @HouMinXi @linhdmn @minhlongs
  • fix(sse): #11043 #11110 #11129 #10330 #10806 — thanks @maxmad64bis @hartmark @xz-dev
  • fix(sse): #11209 #11214 #10803 #10457 #11113 — thanks @linhdmn @Kizuno18 @HouMinXi @ggdayup
  • fix(sse): #11194 #10445 #11047 #10435 #10632 #10650 #10450 #10434 #10691 #10674 — thanks @jonlwheat2-gif @killmonger2317-coder @maxmad64bis @octo-patch
  • fix(sse): #11177 #10545 #10684 #10978 #10306 #10488 — thanks @rqzbeh @NahuSaruf @cryptiklemur @maxmad64bis @RaviTharuma
  • fix(sse): the Adobe Firefly… #11387 #11386 — thanks @HouMinXi
  • fix(providers): #11375 #11123 #11262 #11117 #11055 #10356 #10566 #10634 — thanks @ggdayup @rqzbeh @rizxfrog @backryun @RaviTharuma
  • fix(providers): reasoning-effort… #11274 #11305 — thanks @linhdmn
  • fix(providers): #11309 #11302 #10862 #10971 #10072 #10471 #11049 #10973 #10974 — thanks @ntdat812 @RaviTharuma @xz-dev @sha367 @maxmad64bis
  • fix(resilience): #11355 #11310 #10534 #11078 #11267 #11075 #10506 #11020 — thanks @sprintberlin @SnCr90 @rqzbeh @yourspraveen @hartmark @RaviTharuma
  • fix(quota): #11353 #11378 — thanks @sprintberlin @Neuron-Mr-White
  • fix(combo): #11360 #10463 #10456 #11036 #10907 #10846 #10016 — thanks @sprintberlin @herjarsa @asorourx @excessivechaos @HouMinXi @fenix007
  • fix(auto): #10820 #10344 #11400 #11399 — thanks @RaviTharuma @jacobsparts
  • fix(routing): #11107 #11198 #11193 #10124 — thanks @SCys @pacocartones @benzntech
  • fix(models): #10957 #10898 #11397 #11307 #10533 #10299 #10055 — thanks @Neuron-Mr-White @rqzbeh @marcelokarval @ekinnee @jackjinke @RaviTharuma
  • fix(catalog): #10963 #10723 #11337 — thanks @xz-dev @stanleytejakusuma
  • fix(pricing): #10635 #10636 #11210 — thanks @stanleytejakusuma @xyzs996
  • fix(api): #10657 #10654 #10769 #10663 #10253 #10772 #10607 #10565 #11162 #11081 — thanks @maxmad64bis @HouMinXi @dpozimski @sadSanta-07 @pucedoteth @RaviTharuma @AndrianBalanescu
  • fix(security): #11429 #11418 #11261 #10888 #11293 #11040 #11028 #10738 #10739 #10380 #11189 — thanks @HouMinXi @rqzbeh
  • fix(authz): exact public routes are matched exactly instead of… #11417
  • fix(auth): #11376 #11175 #10899 #10614 — thanks @ntdat812 @rqzbeh @MeRezaRezaei
  • fix(oauth): #11141 #10725 #10620 — thanks @HouMinXi @MichaelYcJo @krishna3554
  • fix(cli): #11374 #11332 #11238 #10835 #11263 — thanks @ntdat812 @pacocartones @adevwithpurpose
  • fix(cli): #11173 #11079 #11054 #10572 #10468 #10447 #11264 — thanks @rqzbeh @hydraxman @xiaoyaner0201
  • fix(dashboard): #11407 #11402 #11067 #11056 #10872 #10452 #10448 #10449 — thanks @jacobsparts @rqzbeh @Rahulsharma0810
  • fix(live-ws): the… #11377 #11269 — thanks @ntdat812 @Minamaged18
  • fix(db): #10979 #10709 #10552 #10278 #10423 #10432 — thanks @RaviTharuma @jonlwheat2-gif @excessivechaos @maxmad64bis
  • fix(build): #11159 #10836 #10776 #11266 #10695 — thanks @aliyosufi @adevwithpurpose
  • fix(docker): #11419 #10818 #10288 — thanks @RaviTharuma @anudeepadi
  • fix(electron): the embedded server is… #10717 — thanks @echoriver89
  • fix(compression): #11364 #11084 #10807 #10660 #10834 #10498 #10655 — thanks @TheDemonTuan @HouMinXi @blackwell-systems @stanleytejakusuma @adevwithpurpose @abhijeetnardele24-hash
  • fix(translator): #11365 #10658 #10392 — thanks @Siva010 @giauphan
  • fix(gemini): a missing items schema… #10605 — thanks @sadSanta-07
  • fix(codex): #11179 #11041 #10608 #10573 #10838 #10946 — thanks @excessivechaos @jackjinke @JxnLexn @HouMinXi @YunyunZhai
  • fix(opencode): #10874 #11004 #11385 #11133 #10821 #11199 — thanks @zoser69 @ntdat812 @AStupidBear @maxmad64bis @RaviTharuma @pacocartones
  • fix(executors): #11158 #10402 #10694 — thanks @maxmad64bis @excessivechaos
  • fix(search): #10901 #11125 #10756 #10981 #11097 — thanks @rqzbeh @RaviTharuma @Egorich-print
  • fix(mcp): #11139 #10860 #10575 #10209 — thanks @HouMinXi @ntdat812 @branben @sadSanta-07
  • fix(memory): a mid-conversation… #11303 #11114 — thanks @ggdayup
  • fix(embeddings): an account is… #10529 #11260 — thanks @HouMinXi
  • fix(video-bridge): structural segment sampling is validated, contact…
  • fix(images): #10847 #10363 #10554 — thanks @RaviTharuma @tiangao88 @rinseaid
  • fix(fusion): the vision-compatibility filter is applied to… #10737
  • fix(proxy): #11182 #10868 #10664 #10416 — thanks @rqzbeh @ntdat812 @maxmad64bis
  • fix(relay): one… #10941 #10935 #10797 — thanks @ntdat812
  • fix(logging): #10770 #10331 — thanks @maxmad64bis @hartmark @benzntech
  • fix(logs): #11082 #10685 — thanks @AndrianBalanescu @cryptiklemur
  • fix(webhooks): three… #11050 #11130 — thanks @maxmad64bis
  • fix(antigravity): #10422 #10376 #10436 — thanks @JxnLexn @Chewji9875
  • fix(adobe-firefly): sessions renew through… #9255 — thanks @artickc
  • fix(cline): #10279 #10706 #11132 — thanks @arafatkatze @rqzbeh
  • fix(agentrouter): the protocol is inferred from the client endpoint,…
  • fix(services): the… #10371 #10459 — thanks @tkgo11 @aron-intframe
  • fix(monitoring): #10370 #10307 #10827 #10699 — thanks @tkgo11 @RaviTharuma
  • fix(github): GitHub access tokens are… #11320 — thanks @RaviTharuma
  • fix(i18n): #11339 #11322 #10546 #9721 #11208 — thanks @pacocartones @rizxfrog @dionjoshualobo
  • fix(chat): the… #11304 #10394 #10438 — thanks @azzaouiomar19-sketch
  • fix(providers): #11026 #10733 #10810 #10458 #11045 #10116 #10637 #11088 #10904 #10584 #10186 #11207 #10894 — thanks @sanforex24h @InkshadeWoods @Hsia97 @benzntech @MeRezaRezaei @Chewji9875 @backryun @yourspraveen @RaviTharuma @Tushar49 @rafacpti23 @rqzbeh
  • fix(radar): feature availability… #10487 #10464 — thanks @backryun
  • fix(usage): quota windows are ordered… #11241 — thanks @pacocartones
  • fix(files): the list limit… #10673 #11059 — thanks @pacocartones
  • fix(onboarding): the setup wizard… #10855 — thanks @krishna3554
  • fix(settings): #10890 #10525 — thanks @rqzbeh @HouMinXi
  • fix(conversations): the reconnect… #10800 — thanks @adevwithpurpose
  • fix(reasoning): compatible response… #10574 — thanks @jackjinke
  • fix(agent-bridge): the regenerate-cert… #10715 — thanks @ntdatt812
  • fix(api-manager): empty combo restrictions… #10066 — thanks @xz-dev
  • fix(db): the Database settings page no… #10558 — thanks @TechNickAI
  • fix(models): health-check-excluded… #10026 — thanks @ritheshcn25
  • fix(skills): the CLI skills left stale by the quota… #10698
  • fix(mcp): CLI MCP call protocol issues… #10960 — thanks @YunyunZhai
  • fix(dashboard): expert mode in the Combo Builder can type… #8875 #8285
  • fix(sse): a combo step pinned to an explicit connection (or a… #8875
  • fix(cli): the local CLI sees the full /api/monitoring/health… #11040
  • fix(search): a configured search connection (Serper, Brave,… #11524
  • fix(api): /v1/models no longer blocks the stale… #11551 #10198 #8728
  • fix(sse): a universal handoff whose summary comes back… #11552

📝 Maintenance

  • refactor(providers): removed the Puter provider (id puter, alias…
  • fix(types): preserve the client response format contract while… #8484
  • Preserve the Responses API transform options contract under TypeScript…
  • fix(types): preserved the known first-failure record while… #8484
  • fix(types): reuse the validation failure predicate when… #8484
  • fix(types): preserve the literal `capabilities.vision:… #9121 #8484
  • chore(quality): add an RTL layout ratchet… #3541 #8828 — thanks @lukiod
  • chore(sse): dropped the leftover iflow entry from the… #8966
  • chore(ci): removed two fork-owned image-publish workflows that… #8967
  • test(ci): fixed the intermittent spawnSync bash EPIPE failure… #8977
  • refactor(providers): removed the retired GitHub Models provider… #9023
  • test(sse): added the first test suite for…
    module was hotspot #7 in the coverage plan at 11.28% lines with no dedicated test; the 14 pure
    detectors are now pinned edge-to-edge (token ladders, per-domain max-not-sum scoring, and the
    min/max clamps), taking the file to ~100% line coverage. The suite also documents two quirks
    left unchanged: detectReasoningDepth scores above 0 on marker-free input via its
    always-applied message-depth bonus, and detectErrorContext returns non-integer scores because
    it never rounds (#9063)
  • fix(types): preserved the Veo polling delay promise result as… #9104
  • fix(types): imported compression analytics statistics from… #9105
  • chore(types): align semantic cache signature inputs with the… #9117
  • fix(types): narrowed non-streaming chat response metadata… #9118
  • docs(readme): replace Roo Code branding with… #9229 — thanks @taltas
  • chore(ci): stopped dependabot from grouping ioredis majors… #9425
  • chore(tests): cleared two… #9064 #9488 — thanks @typescript-eslint
  • test(cli): OpenCode plugin suite realigned to the… #9178 #9175 #9614
  • Removed the unused RadarReferrals type export left by the… #9697 #9738
  • Reconcile the final v3.8.50 bundle-size and file-size ratchets… #9839
  • chore(quality): expand all file-size baselines by +30% ahead of… #9950
  • fix(quality): tighten eslintWarnings baseline 5000->0 to match the…
  • [v3.8.50] feat: add RTL layout compatibility CSS (fixes #7680) #7987 — thanks @Dingding-leo
  • [v3.8.50] feat(devin-desktop): replace public Windsurf provider #8228 — thanks @backryun
  • [v3.8.50] feat(ci): extend i18n glossary-consistency gate to ko #8244 — thanks @MichaelYcJo
  • [v3.8.50] test(tail): realign 3 stale base-red guards + note 2 env-only false positives (slice 6) #8263
  • [v3.8.50] feat(ui): add global model search to Combo builder #8285 — thanks @corefusiion
  • [v3.8.50] feat: extract CloakBrowser/browser-pool into optional plugin package #8299 — thanks @oyi77
  • [v3.8.50] fix(i18n): clean up and naturalize Spanish translations #8339 — thanks @Dragost
  • [v3.8.50] fix(compression): bound session-dedup suffix-block scan to prevent OOM #8438 — thanks @adrianojiu
  • [v3.8.50] Fix Z.ai web browser transport and model capabilities #8451 — thanks @backryun
  • [v3.8.50] feat(services): add Dario as a 5th embedded service (Claude Code toggle/failover) #8523 — thanks @seanford
  • [v3.8.50] fix(adobe-firefly): live x-arp-session-id / Arkose wire (stop HTTP 408) #8571 — thanks @artickc
  • [v3.8.50] fix(adobe-firefly): durable session, Chrome recovery, browser sign-in #8578 — thanks @artickc
  • [v3.8.50] fix: passthrough non-standard cache token fields for DeepSeek / MiniMax / Bedrock across streaming, non-streaming, and Dashboard paths #8591 — thanks @ikelvingo
  • [v3.8.50] fix: treat zero-reset Antigravity 429s as transient #8626 — thanks @costaeder
  • [v3.8.50] fix: enforce OpenAI model lifecycle without silent reroutes #8627 — thanks @backryun
  • [v3.8.50] fix(claude): preserve signed thinking turns during obfuscation #8629 — thanks @costaeder
  • [v3.8.50] fix(antigravity): lock full quota per exact model #8630 — thanks @costaeder
  • [v3.8.50] fix(errorConfig): add status 499 metadata mapping (fixes #8535) #8640 — thanks @Dingding-leo
  • [v3.8.50] fix(auth): accept x-api-key without anthropic-version for claude-code user-agent (fixes #8655) #8678 — thanks @Dingding-leo
  • [v3.8.50] fix(open-sse): add 'has been exhausted' to CREDITS_EXHAUSTED_SIGNALS (fixes #8631) #8704 — thanks @Dingding-leo
  • [v3.8.50] fix(github): honor per-model targetFormat override for Copilot custom models #8713 — thanks @Witroch4
  • [v3.8.50] fix(test): revive orphaned vitest tests and fix CI routing #8718 — thanks @MohitRawat017
  • [v3.8.50] feat(providers): add support for TinyCMS Web #8736 — thanks @jhordanjw123
  • [v3.8.50] feat(memory): MemoryBackend provider pattern with generic HTTP connector #8752 — thanks @oyi77
  • [v3.8.50] refactor(db): add combo repository boundary #8757 — thanks @xiaoyaner0201
  • [v3.8.50] fix(test): revive orphaned open-sse vitest tests #8772 — thanks @MohitRawat017
  • [v3.8.50] fix(open-sse): filter non-numeric values in comboTargetLimits before min calculation #8774 — thanks @Dingding-leo
  • [v3.8.50] feat(compression): add Italian (it) Caveman rule pack #8776 — thanks @Anjielon
  • [v3.8.50] feat(combo): add maxContextWindow to contextRequirements (fixes #8777) #8790 — thanks @Dingding-leo
  • [v3.8.50] feat(images): add POST /v1/images/upscale (Adobe Firefly Topaz + Stability + Topaz Labs) #8791 — thanks @artickc
  • [v3.8.50] fix(providers): drop dead Cloudflare Workers AI free catalog IDs (#8717) #8804 — thanks @DinonowDev
  • [v3.8.50] fix(sse): stop fabricating encrypted Codex reasoning summary text #8807 — thanks @Prudhvivuda
  • [v3.8.50] fix(backend): update Cloudflare Workers AI model catalog & remove dead model IDs (#8717) #8808 — thanks @Dingding-leo
  • [TS7] [v3.8.50] refactor(db): preserve normalized combo model types #8809 — thanks @backryun
  • [v3.8.50] fix(db/apiKeys): respect provider parameter in group model permission checks (fixes #8803) #8817 — thanks @Dingding-leo
  • [TS7] [v3.8.50] fix(types): preserve browser abort handling #8818 — thanks @backryun
  • [v3.8.50] feat(cli): deliver the Antigravity credential straight to the remote install #8834
  • [v3.8.50] docs: slim AGENTS.md #8839 — thanks @MumuTW
  • docs(guides): add Antigravity (Google One AI) onboarding guide #8904 — thanks @HouMinXi
  • [v3.8.50] fix(usage): reject impossible provider token counts #8927 — thanks @artickc
  • Treat context metadata as a routing hint #8944 — thanks @JxnLexn
  • docs(db): specify MySQL conformance semantics #8947 — thanks @rushsinging
  • Add native ChatGPT Web provider for Codex clients #8949 — thanks @JxnLexn
  • i18n(ru): complete Russian locale — 100% coverage #9001 — thanks @Egorich-print
  • docs(troubleshooting): document the chat_admission_busy 503 and how to tune heavyweight chat concurrency #9021 — thanks @xiaoyaner0201
  • Security: Update Redis to fix critical vunerability #9065 — thanks @tuxmonteiro
  • [TS7] fix(types): validate chat context estimation inputs #9084 — thanks @backryun
  • [TS7] fix(types): narrow stream response output #9086 — thanks @backryun
  • docs: clarify free-provider model refresh outcomes #9087 — thanks @AbdullahFageeh
  • [TS7] [v3.8.50] fix(types): preserve SSE tool call function shape #9090 — thanks @backryun
  • [TS7] fix(types): narrow CCR store rejections #9091 — thanks @backryun
  • [TS7] fix(types): preserve array-buffer response bodies #9092 — thanks @backryun
  • [TS7] fix(types): narrow media generation failures #9093 — thanks @backryun
  • [TS7] fix(types): preserve thinking signature recovery failure #9114 — thanks @backryun
  • [TS7] fix(types): preserve Responses transform options #9119 — thanks @backryun
  • [TS7] fix(types): preserve validation failure narrowing #9120 — thanks @backryun
  • [TS7] fix(types): preserve client usage format contract #9122 — thanks @backryun
  • [TS7] fix(types): preserve request rule input contracts #9135 — thanks @backryun
  • [TS7] fix(types): simplify Codex service tier narrowing #9136 — thanks @backryun
  • [TS7] fix(types): tighten extracted chatCore contracts #9137 — thanks @backryun
  • [TS7] fix(types): align web executor event and model contracts #9138 — thanks @backryun
  • [TS7] fix(types): align web provider support contracts #9139 — thanks @backryun
  • [TS7] fix(types): type media provider request payloads #9141 — thanks @backryun
  • test(dashboard): drop stale next-intl mock breaking ProviderDetailPageClient smoke #9150 — thanks @maxmad64bis
  • test(mcp): guard Node 24 bundled MCP startup #9162 — thanks @Gioxaa
  • test(compression): lock in stacked RTK+Caveman savings on redundant tool_result content #9278 — thanks @Sam280903
  • chore: bump better-sqlite3 and add provider DB query scripts #9325 — thanks @jowimila
  • test(quota): wait for the hot-path consumption instead of sleeping #9365 — thanks @HouMinXi
  • refactor(sse): move the thinking-budget helpers out of base.ts #9381 — thanks @HouMinXi
  • test(sse): expect the trailing period in the no-credentials message #9392 — thanks @HouMinXi
  • chore(db): raise sqlite cache_size/mmap_size defaults #9467 — thanks @Poid-ZA
  • [TS7] fix(types): align stream failure callback contracts #9561 — thanks @backryun
  • [TS7] fix(types): narrow chatCore local contracts #9562 — thanks @backryun
  • [TS7] fix(types): validate Azure OpenAI base URLs #9563 — thanks @backryun
  • [TS7] fix(types): preserve sanitized tool array contracts #9564 — thanks @backryun
  • [TS7] fix(types): validate Vision Bridge combo names #9565 — thanks @backryun
  • [TS7] fix(types): preserve streaming PII choice keys #9566 — thanks @backryun
  • [TS7] test(types): use Vitest expectations in tier resolver #9742 — thanks @backryun
  • [TS7] fix(translator): preserve video URL override contracts #9747 — thanks @backryun
  • [TS7] fix(codex): preserve narrowed input arrays #9748 — thanks @backryun
  • [TS7] fix(kiro): complete cache-only usage totals #9753 — thanks @backryun
  • chore(repo): ignore Electron build output unpacked into repo root #9858 #9770 — thanks @Michael-Rocco-Goldmann
  • test(integration): add general live-test tool for the real "default" combo + rootless wire capture #9862 #9744 — thanks @hartmark
  • ci(test): route orphaned Vitest tests through blocking CI #9875 #9605 — thanks @MohitRawat017
  • docs(proposals): Telegram Mini App integration feasibility analysis #9906 #9810 — thanks @benzntech
  • chore: ignore docker-compose.override.yml #9919 — thanks @lucasalx
  • [TS7] fix(types): stabilize skill token extraction #9920 — thanks @backryun
  • docs: add quickstart code examples for Python, Node.js, PHP and cURL #9922 — thanks @Hariprajwal
  • [TS7] fix(types): narrow combo model collections #9972 — thanks @backryun
  • [TS7] fix(types): align Claude message contracts #9973 — thanks @backryun
  • [TS7] fix(types): type Copilot WebSocket construction #9974 — thanks @backryun
  • [TS7] chore(types): remove orphan combo manifest metrics #9975 — thanks @backryun
  • [TS7] fix(types): normalize stream usage before cost calculation #9977 — thanks @backryun
  • [TS7] fix(stream): collect synthesized Responses tool events #9978 — thanks @backryun
  • [TS7] fix(types): complete Responses stream failure contract #9979 — thanks @backryun
  • [TS7] fix(types): narrow chat dispatch contracts #9986 — thanks @backryun
  • [TS7] fix(types): narrow chatCore local contracts #9987 — thanks @backryun
  • [TS7] fix(types): preserve GHE Copilot executor configuration #9988 — thanks @backryun
  • [TS7] fix(types): validate Fal video result URLs #9989 — thanks @backryun
  • [TS7] fix(types): narrow Claude stream deltas #9990 — thanks @backryun
  • provider(agnes):refresh model catalog #9998 — thanks @backryun
  • docs: fix duplicated word in MCP server audit logging section #10000 — thanks @TengSivtean
  • docs: fix stale tool count (105 -> 104) in MCP server docs #10002 — thanks @TengSivtean
  • Document default behavior for ToS-flagged free-tier providers #10013 — thanks @yulinlina
  • [TS7] fix(tinycms): align executor and signer contracts #10087 — thanks @backryun
  • [TS7] fix(types): restore provider breaker predicate import #10088 — thanks @backryun
  • [TS7] ci: block new TypeScript 7 diagnostics #10134 — thanks @backryun
  • chore(repo): remove tracked local artifacts #10178 — thanks @backryun
  • maintenance — direct pushes (rollup): release-gate and base-red…
  • deps (rollup): #9081 #9082 #9427 #9458 #9459 #9461 #9462 #9472
  • docs/chore (rollup): #8954 #8991 #9059 #9194 #9258 #9508
  • main-branch plumbing (rollup): #7168 #7179 #7216 #7220 #7225 #8941 #7559 #6634 #7341 #7347 #8067 #8070 #8317 #7076
  • deps: bump the development group across 1… #10043 — thanks @app
  • deps: bump electron from 43.2.0 to 43.3.0 in… #10042 — thanks @app
  • maint(release): 45 direct pushes to the release branch with no PR…
  • maint(repo): #10187 #10189 #10190 #10193 #10196 #10203 #10204 #10205 #10207 #10210 #10236 #10318
  • docs(auth): distinguish dashboard sessions, oma_live_…… #7786
  • docs(ops): document Kubernetes probe… #10297 — thanks @RaviTharuma
  • docs(docker): spell out that :latest tracks the highest… #10317
  • docs(backend): document that memory extraction, skills… #10349
  • docs(docker): document default SQLite as single-replica /… #10350
  • docs(backend): document that pre-write SQLite backups… #10351
  • fix(tests): drain three base-reds on the release branch… #10539 #10704
  • chore(security): remove the unused enforceSecrets duplicate of… #10775
  • fix(quality): register GrokBuildToolCard.tsx… #10778
  • docs: Custom combos are only invoked… #10779 — thanks @maxmad64bis
  • chore(startup): remove src/server-init.ts (183 lines, never… #10780
  • fix(quality): rebaseline file-size for 's own… #10859
  • docs(openapi): document the GET and PUT operations on… #10875
  • fix(quality): bump EXPECTED_FEATURE_FLAG_COUNT to 52 for 's own… #10889
  • test(db): replace three empty test.skip placeholders in the… #10906
  • docs(docker): document runtime RAM for coding-agent… #10982
  • docs(database): align the SQLite cache guide with the 65,536… #11018
  • docs(docker): document N independent… #11024 — thanks @RaviTharuma
  • fix(quality): rebaseline file-size for modelCapabilities.ts… #11034
  • fix(quality): register… #11053
  • chore(quality): drain two release/v3.8.50 base-reds — refresh… #11160
  • chore(lint): ratchet… #7879 #11247 — thanks @typescript-eslint
  • fix(deps): prevent pnpm from auto-installing the… — thanks @lobehub
    @lobehub/icons, keeping six unneeded packages with incompatible or unverifiable license
    metadata out of production installs (#11342).
  • ci(changelog): replace the broad removal bypass with an exact,… #11345
  • docs(readme): reconcile live v3.8.50 provider, free-tier, CLI,…
    community, sponsor, acknowledgment, and SVG metrics with their audited source
    denominators, including a deduplicated OmniRoute-in-Action snapshot and distinct
    contributor rankings for merged pull requests, GitHub-attributed commits, and Git history
    (#11356).
  • docs(openapi): document the conditionally… #11363
  • fix(video-bridge): make opt-in segment-aware sampling use one… #11381
  • docs: add an embeddings client runbook with… — thanks @RaviTharuma
  • chore(ci): ignore ad-hoc BOT_TOKEN/BOT_URL in env-doc-sync…
  • test(kimi): the Kimi background health sweep no longer draws… #11361
  • chore(test): regenerate the provider/translate-path golden… #10531
  • chore(release): resync the v3.8.50 provider and CLI catalogs,…
  • fix(ci): route…
    download-failure message through sanitizeErrorMessage() instead of embedding a raw
    err.message, clearing the check:error-helper base-red on release/v3.8.50 (#9985).
  • fix(ci): drain three more base-reds on release/v3.8.50 .… #9985
    219 errors locally (vs. 25 in the last CI run) — all from react-hooks/set-state-in-effect,
    react-hooks/preserve-manual-memoization, react-hooks/immutability,
    react-hooks/static-components, react-hooks/refs and react-hooks/purity, six React
    Compiler lint rules that eslint-plugin-react-hooks v7 turns on by default and that were
    never frozen in config/quality/eslint-suppressions.json after the dependency bump. Froze
    the pre-existing violations for those six rules via ESLint's native
    --suppress-rule/--suppressions-location mechanism (the same pattern already used for
    @next/next/no-location-assign-relative-destination) — no application code changed, no rule
    disabled, only genuinely-new violations stay blocking. check:dead-code was at 418 against a
    415 baseline: removed the unused src/lib/quota/providerCapabilities.ts file and the unused
    ProviderQuotaMonitor interface in providerQuotaTelemetry.ts (both dead since PR #10148,
    2026-08-18, confirmed via grep/knip cross-reference), landing at 416; the residual +1 could
    not be attributed to a single recent commit after checking every dead-list entry touched
    since the 2026-08-14 baseline measurement, so it is rebaselined with the investigation
    recorded in quality-baseline.json. tests/unit/autoCombo/tieredRotation.test.ts's
    "rotates across all 43 Cerebras connection IDs" case was hitting vitest's 5000ms default
    timeout on a 200-iteration synchronous selectProvider() loop under shared-devbox
    contention (load average 40-60+ observed) — widened its explicit timeout to 20000ms; the
    assertion itself is unchanged.
  • fix(tests): drain two base-reds on the release branch —… #10491
  • fix(tests): realign the two stream-utils passthrough… #10017 #10473
  • fix(tests): drain several base-reds on release/v3.8.50 that… #9985
    of the same pattern — a legitimate product change landed without updating the test that
    asserted the old behavior: tests/unit/glm-provider-model-import-route.test.ts (12 tests)
    and tests/unit/model-sync-route.test.ts (2 tests) predate #10603's "upstream model sync is
    opt-in and manual overrides are preserved" change; tests/unit/antigravity-model-aliases.test.ts
    predated #10537 retiring the collapsed gemini-3.7-flash alias in favor of its three tiered
    ids. Also fixes a real data drift in open-sse/config/freeModelCatalog.data.ts (the qwen-web
    free-catalog entry still pointed at the retired qwen3.8-max-preview id instead of the
    current qwen3.8-max), corrects the zh-TW providers.autoFetchModelsTooltip string to the
    glossary-canonical 快取 instead of 緩存, and removes an unused default export from
    src/lib/oauth/providers/zed-hosted.ts (the named export already covers every consumer) to
    shave one symbol off the check:dead-code ratchet regression.
  • chore(release): synchronize migration-count documentation and…
  • fix(i18n): translate the 14 providers.harImport* keys into… #11069
  • fix(release): #11038 #10534 #10964 #11259 #11338 — thanks @backryun @adevwithpurpose @hartmark @pacocartones
  • fix(quality): #11438 #11321 — thanks @pacocartones @hartmark @adevwithpurpose @wgordon17 @backryun
  • fix(tests): #11306 #10726 #11161 #11341 #11327 #11240 #11380 #10683 #10682 #10689 #11135 #10700 #10451 #11040 #11147 — thanks @MichaelYcJo @rqzbeh @hartmark @wgordon17
  • fix(ci): Windows… #10453 #11301 #10828 #10325 — thanks @backryun
  • perf(electron): #10390 #10367 #10382 #10359 #10327 #10328 #10324 — thanks @backryun
  • perf(providers): provider schema validation is lazy and… #11334 #11220
  • refactor(sse): #10633 #10910 #8367 #10201 #11051 — thanks @oyi77 @xz-dev
  • refactor(dashboard): custom provider quota keys are… #11188 #11156
  • chore(security): the… #10952 #10411 — thanks @arminanton @blarovse
  • chore(deps): #10931 #10932 #10625 #10626 #10403 #10622 #10405 #10406 #10407 #10928 #10929 #10930
  • fix(deps): #10610 #10543 — thanks @atjsh @tensorflow @jonlwheat2-gif @huggingface @dcox79
  • docs: #10648 #10512 #10569 #10112 #10649 #10816 #10817 #10823 #10824 #10825 #10983 #11031 #11299 #11204 #11157 #10433
  • docs(i18n): #11254 #11237 #11246 #10777 #10490 #10731 — thanks @farshidrezaei @realize000 @pandaaaa1990
  • chore(repo): repository hygiene — the self-referential _tasks
  • chore(release): localized llm.txt mirrors and the v3.8.50 base…
  • fix(ci): the pack-artifact provenance gate now checks… #8875 #10427
  • test(dashboard): the proxy-registry e2e smoke flow opens… #8875 #9870
  • test(api): the /v1/models e2e check accepts the auth… #9320 #8875
  • chore(quality): refreshed the combos-page ESLint… #8875 #8285

🙌 Contributors

Thanks to everyone whose work landed in v3.8.50:

Contributor PRs / Issues
@AbdullahFageeh #9087
@abhijeetnardele24-hash #10498
@Abhishek4512009 #10494
@acc0mplish #10732, #10948
@adevwithpurpose #9790, #10118, #10222, #10800, #10834, #10835, #10836, #10882
@adrianojiu #8438
@agisota #9837
@AgnesRiber #9718, #9976
@ahmet-cetinkaya #8878
@AIB1TAL0S #9284
@AlanSyue direct commit / report
@alex-jordan547 #9235, #9245, #9813
@aliyosufi #11159
@amartinawi #10090, #10091, #10092, #10097, #10101
@An0nym0us92 #11394
@AndrianBalanescu #8888, #8889, #8890, #8891, #8892, #8893, #8894, #8895, #11081, #11082
@AnhLead #9722
@aniketshukla1 #9148
@Anjielon #8776
@anudeepadi #10288
@apoapostolov #8916
@app #10042, #10043
@arafatkatze #10706
@ARC345 #9628, #10050, #10051
@arminanton #10933, #10952, #11166
@aron-intframe #10459
@artickc #8571, #8578, #8791, #8843, #8870, #8927, #8974, #9097, #9255, #9549
@Arul- #9761
@asorourx #11036
@AStupidBear #10180, #11385
@azzaouiomar19-sketch #10394
@b1nhm1nh direct commit / report
@backryun #8228, #8451, #8627, #8809, #8818, #9084, #9086, #9090, #9091, #9092, #9093, #9114, #9119, #9120, #9122, #9135, #9136, #9137, #9138, #9139, #9141, #9561, #9562, #9563, #9564, #9565, #9566, #9742, #9747, #9748, #9751, #9753, #9755, #9791, #9792, #9793, #9795, #9796, #9797, #9798, #9920, #9972, #9973, #9974, #9975, #9977, #9978, #9979, #9984, #9986, #9987, #9988, #9989, #9990, #9998, #10087, #10088, #10134, #10175, #10178, #10195, #10254, #10255, #10256, #10257, #10258, #10324, #10339, #10453, #10464, #10483, #10637, #10964
@Benson-mk #8369
@benzntech #9810, #9812, #9939, #10124, #10126, #10458
@Bl0ck154 #9231
@blackwell-systems #10807
@blarovse #10411
@bortolidiego #10058
@branben #9940, #10575
@Chewji9875 #9257, #9420, #9821, #9994, #10116, #10160, #10305, #10376
@chirag127 #6674, #10071
@chloeassistant #9675, #9746
@configurowebmax #8877
@corefusiion #8285
@costaeder #8626, #8629, #8630
@cryptiklemur #10684, #10685
@csoftware-arigpt #3440
@DaDecky direct commit / report
@danscMax #8634
@DarkEsteves #10250
@dcox79 #10543
@ddarkr #9035, #9036, #10177
@Dingding-leo #7987, #8640, #8678, #8704, #8774, #8790, #8808, #8817
@DinonowDev #8804
@dionjoshualobo #9721
@dpozimski #10253
@Dragost #8339
@dsitmilis direct commit / report
@echoriver89 #10717
@Egorich-print #9001, #9020, #9058, #10881, #10887, #11097
@ekinnee #11307
@electrumguy #10774, #11149
@engmarcosjr #9993
@epsilonode #8871
@ervareza direct commit / report
@excessivechaos #10062, #10138, #10552, #10883, #10884, #10907, #11179
@fajarhide #9191, #9198
@farshidrezaei #10777
@fenix007 #9618, #10016
@freudantunes #10623
@Gecky2102 #9280
@geek007git #10441
@ggdayup #10199, #11113, #11114, #11375
@Gi99lin #10342
@giauphan #10392
@Gioxaa #9162, #9171
@HaoNgo232 direct commit / report
@Hariprajwal #9922
@harkaranbrar7 #10281
@hartmark #9635, #9704, #9711, #9712, #9727, #9734, #9735, #9738, #9741, #9744, #9745, #9822, #10025, #10034, #10037, #10038, #10041, #10121, #10217, #10262, #10263, #10330, #10331, #11259
@Hdiaktoros #8930
@HectorBernstorff direct commit / report
@HellFiveOsborn #9248
@herjarsa #9714, #9816, #9937, #9946, #10128, #10456
@hgaib #10722
@horacecar #7679
@HouMinXi #8886, #8904, #8905, #8976, #8984, #9079, #9106, #9207, #9242, #9328, #9340, #9342, #9351, #9365, #9380, #9381, #9392, #9449, #9482, #9483, #9509, #9510, #9572, #9631, #9634, #9695, #9929, #10457, #10475, #10525, #10529, #10573, #10663, #10846, #11084, #11139, #11140, #11141, #11386, #11418
@hppsc1215 #8970
@Hsia97 #10810
@hydraxman #10137, #10572
@Iammilansoni #9353, #9397
@ignamiranda #11206
@ikelvingo #8591, #8872, #9053
@infinit-X #9095
@InkshadeWoods #10733
@isaaclb98 #9730
@jackjinke #9556, #9601, #10005, #10045, #10248, #10533, #10540, #10574, #11041
@jacobsparts #11399, #11400, #11402
@jax-novita #8913
@jeff-alves #10221
@jeyhunfaslanov #10259
@jhordanjw123 #8736
@jktan0504 #9025
@joachimBrindeau #9200
@jonlwheat2-gif #10610, #10709, #11194
@JoshimOfficial #9011
@jowimila #9325
@JxnLexn #8933, #8940, #8944, #8949, #10422, #10608
@Kaedo17 #8922
@KaspaPulse #10362
@khoazero123 #9272
@killmonger2317-coder #10445
@KittisakT #9423
@Kizuno18 #10803
@KooshaPari #7329
@kriptoburak #10854
@krishna3554 #10620, #10855
@lamchun1110 #10372, #10397
@larin-vas #9828
@lazysaltyfish direct commit / report
@LeonG606 #9457
@linhdmn #10980, #11085, #11214, #11274
@Llliao1113 #8921
@lucasalx #9919
@lucasmellos #8925
@lukiod #8828
@luoyide direct commit / report
@maci0 #11279
@mad-gooze #9052
@maisdesign #8858
@marcelokarval #11397
@marchlhw #9050
@marcs7 #11180
@matiasbaglieri #9707
@maxmad64bis #9150, #9246, #9291, #9414, #10278, #10402, #10652, #10662, #10664, #10694, #10769, #10770, #10779, #10876, #10885, #10974, #10978, #11008, #11009, #11047, #11116, #11129, #11130, #11133, #11151, #11162, #11252
@McLuck #8914
@megamen32 #10184
@MeRezaRezaei #10174, #10614, #10944, #11042, #11045
@Michael-Rocco-Goldmann #9770, #9773, #9777, #9787
@MichaelYcJo #8244, #10725, #10726
@Minamaged18 #11269
@minhlongs #10805
@minhnhat166 direct commit / report
@MohitRawat017 #8718, #8772, #9605
@Momen4444 #9612
@MrShitFox #9826
@mtb-ninja #10114
@MumuTW #8839
@mvanhorn #9542
@mymusicmyspace #10965
@Mynacol #9733
@NahuSaruf #10545
@Neuron-Mr-White #10228, #10230, #10957, #11378
@nguyenha935 #9044, #9215
@nordz0r #10170
@nosolosoft #8900
@ntdat812 #10843, #10853, #10857, #10858, #10860, #10862, #10868, #10935, #11004, #11374, #11376, #11377
@ntdatt812 #10715, #11076
@octo-patch #10650
@ofonseca-pyming #11297
@oyi77 #8299, #8752, #9158, #9818, #10910, #10942
@pacocartones #10216, #10673, #11059, #11193, #11199, #11238, #11241, #11321, #11322, #11332, #11338
@pandaaaa1990 #10731
@phatchau036 #10517
@phuongddx #11415
@PixmaNts #9432
@pizzav-xyz #9077
@Poid-ZA #9467
@Prudhvivuda #8807, #9014, #9015, #9016
@pucedoteth #10607
@qianze0628 #9038
@rafacpti23 #11207, #11213
@raflyazf direct commit / report
@Rahulsharma0810 #8961, #10872
@RaviTharuma #10055, #10297, #10307, #10344, #10352, #10488, #10565, #10566, #10568, #10584, #10771, #10814, #10818, #10820, #10821, #10822, #10827, #10847, #10971, #10979, #10981, #11014, #11015, #11016, #11017, #11020, #11024, #11314, #11318, #11320
@realize000 #10490
@redzrush101 #10492
@rengaryang #11333
@rinseaid #8945, #9037, #9932, #9933, #9969, #9982, #10554
@ritheshcn25 #10026
@rixzkiye direct commit / report
@rizxfrog #10356, #10546
@RobertsXML direct commit / report
@royanrosyad85 direct commit / report
@rqzbeh #10415, #10420, #10424, #10430, #10465, #10470, #10890, #10894, #10898, #10899, #10901, #11039, #11054, #11055, #11056, #11078, #11117, #11123, #11125, #11132, #11155, #11161, #11177, #11182, #11189, #11262
@rushsinging #8947
@ryan-brosas #9693
@ryanngit direct commit / report
@sadSanta-07 #9938, #10209, #10605, #10772
@SalyyS1 direct commit / report
@Sam280903 #9274, #9278, #9281, #9283, #9448
@sanforex24h #11026
@SCys #11107
@seakleangnhak direct commit / report
@seanford #8523
@SemonCat direct commit / report
@sha367 #10471
@shixi-li #9022, #9513, #10001
@Siva010 #10658
@SnCr90 #10534
@soulhakr #8799
@sprintberlin #11353, #11355, #11360
@stanleytejakusuma #9610, #10636, #10660, #10730, #11337
@Stazyu #9007, #9226, #9438
@SupremeNexas #9913
@swingtempo #9307, #10354
@szzhoujiarui #9218
@tald26 #9959
@taltas direct commit / report
@TechNickAI #9251, #10558
@TengSivtean #10000, #10002, #10086
@TheDemonTuan #11364
@TheFrenchGhosty #9326
@tiangao88 #10046, #10363
@tientien17 #10798
@tito13kfm #10227
@tkgo11 #10370, #10371
@tuandinh0801 #10804, #10830, #11230
@Tushar49 #10186
@tuxmonteiro #9065
@vinogradovnet #9581
@VXNCXNX #9111, #9783
@wgordon17 #8909, #9233, #9441, #9619
@Witroch4 #8713
@witt3rd #9962, #9963
@wpec #10839
@XDayonline #10053
@xiaoyaner0201 #8757, #8869, #8876, #8883, #8906, #8931, #9021, #9027, #9042, #9316, #9452, #10468
@xyzs996 #11210
@xz-dev #8367, #8908, #9199, #9205, #9262, #9290, #9313, #9555, #9569, #9629, #9788, #9983, #10066, #10072, #10079, #10162, #10243, #10247, #10437, #10712, #10716, #10723, #10806, #10953
@yansigit #9834, #9909, #9911, #9917, #9921, #10065
@yidecode direct commit / report
@yourspraveen #11075, #11088, #11165, #11271
@yulinlina #10013
@YunyunZhai #10946, #10960
@yutuknown #8999
@zabrodschiipavel-sketch #9312
@zannen7 #10077
@Zartharas #9161, #9164, #9181, #9182, #9184, #9185, #9186, #9189, #9294, #9825, #9833, #9936, #9965, #9992, #10202, #10218, #10272, #10329, #10518, #10519, #10521, #10799, #10873, #10878
@Zenlyte #9005
@zhiru #9099, #9101
@ziuus #8912, #11372
@zmf963 direct commit / report
@zoser69 #10874
@zuckdorsey #9723
@diegosouzapw maintainer

📖 Full changelog with complete descriptions: CHANGELOG.md

Don't miss a new OmniRoute release

NewReleases is sending notifications on new releases.