Release v3.8.24 — see CHANGELOG.md [3.8.24] for the full notes and the PR description for the contributors hall. Integration of release/v3.8.24 into main.
* chore(config): ignore additional agent workflow command files
Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.
* feat(deepseek-web): fix auth to use userToken + WASM PoW solver
Rewrite deepseek-web executor from broken cookie auth to userToken
Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM
solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.
* fix(deepseek-web): update target_path to use challenge property
* refactor(deepseek-web): streamline token handling and implement cache eviction
* fix(deepseek-web): fix SSE parser, prompt format, and error handling
- Handle all 3 DeepSeek SSE stream formats: initial fragments,
APPEND operations, and bare string tokens (fixes truncated responses)
- Simplify prompt builder to send system + last user message only
(DeepSeek web API is single-turn, full history caused marker leakage)
- Check json.code before token extraction (fixes "did not return
access token: Authorization" on code 40003 with HTTP 200)
- Clear session cache alongside token cache on auth errors
- Add dev origin for remote testing
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: ignore memory-bank and cursor agent rules from tracking
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: enhance documentation and configuration for Fumadocs integration
- Added Fumadocs MDX support in the Next.js configuration.
- Updated transpile packages to include fumadocs-ui and fumadocs-core.
- Implemented a comprehensive set of redirects for documentation paths to improve navigation.
- Removed the generate-docs-index script as it is no longer needed.
- Updated various documentation titles for consistency and clarity.
- Enhanced global styles to incorporate Fumadocs UI themes and styles.
* refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector
- Revert unrelated deepseek-web.ts changes (should be separate PR)
- Add .source/ to .gitignore (Fumadocs generated files)
- Remove contributor IP from allowedDevOrigins
- Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated
.md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline)
- Restore LanguageSelector in Fumadocs layout nav
- Restore SEO metadata (title template, description, robots)
* fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (#2608) (#2615)
Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API
* fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (#2616)
Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup
* chore(config): ignore additional agent workflow command files
Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.
* feat(docs): migrate /docs to Fumadocs MDX with nested routes (#2614)
Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects
* fix(catalog): skip static PROVIDER_MODELS when synced models exist (#2625)
Integrated into release/v3.8.3
* fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (#2629)
Integrated into release/v3.8.3
* fix(cli): register tsx loader and add opencode config subcommand (#2631)
Integrated into release/v3.8.3
* feat(dashboard): add search and filters to /dashboard/api-manager (#2628)
Integrated into release/v3.8.3
* fix(claude): improve Pi and OpenCode compatibility (#2621)
Integrated into release/v3.8.3
* fix: restore semantic passthrough system-role-only extraction instead of full normalization (#2620)
Integrated into release/v3.8.3
* fix(kiro): stabilize conversationId across prompt compression (#2630)
Integrated into release/v3.8.3
* fix(deepseek-web): SSE thinking/search routing and session lifecycle (#2624)
Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul
* feat(dashboard): free-tier grouping with symbolic link in /providers (#2632)
Integrated into release/v3.8.3
* fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (#2634)
Integrated into release/v3.8.3
* feat(dashboard): risk notice modal for sensitive providers (#2633)
Integrated into release/v3.8.3
* fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (#2639)
Integrated into release/v3.8.3
* fix(cli): Linux autostart via systemd user service (fixes#2627) (#2635)
Integrated into release/v3.8.3
* Refactor/providers free tier (#2640)
Integrated into release/v3.8.3
* fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check
* fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (#2646)
Integrated into release/v3.8.3
* feat(dashboard): media providers pages + Web Fetch category (#2645)
Integrated into release/v3.8.3
* Feature provider adapta org com tutorial de conexão em modal (#2643)
Integrated into release/v3.8.3
* fix(rtk): skip content-based filter matching for non-shell tool results (#2642)
Integrated into release/v3.8.3
* fix(translator): enable Claude extended thinking for Copilot Responses-API requests (#2647)
Integrated into release/v3.8.3
* feat(dashboard): add search and filters to /dashboard/api-manager (#2641)
Integrated into release/v3.8.3
* feat(dashboard): risk notice modal for sensitive providers (#2638)
Integrated into release/v3.8.3
* feat(dashboard): mini-playground inline (Phase 4) (#2648)
Integrated into release/v3.8.3
* fix(settings): fix Require Login modal Cancel button text and dismissal (#2649)
Integrated into release/v3.8.3
* feat(combos): universal context handoff for cross-model conversation continuity (#2653)
Integrated into release/v3.8.3
* chore(release): bump to v3.8.3 — changelog, docs, version sync
* feat(i18n): complete zh-CN translations for 1220 missing keys (#2655)
Integrated into release/v3.8.3
* chore(release): include electron package changes in v3.8.3
* docs(changelog): integrate PR #2655 into v3.8.3
* feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (#2659)
Integrated into release/v3.8.3
* feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (#2656)
Integrated into release/v3.8.3
* docs: update changelog for PR integrations under v3.8.3
* feat(cli): integrate native updates, autostart and headless CLI mode (#2662)
Integrated into release/v3.8.3
* fix(proxy): save dashboard custom proxies in registry (#2661)
Integrated into release/v3.8.3
* feat(dashboard): chat-first test slide-over (Option A) (#2660)
Integrated into release/v3.8.3
* docs: update changelog with Batch 2 PR merges for v3.8.3
* fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (#2666)
Integrated into release/v3.8.3
* docs: update changelog with Batch 3 PR #2666 merge for v3.8.3
* feat(quota+providers): card-grid layout, provider group headers, Codex race fix (#2667)
Integrated into release/v3.8.3
* feat(dashboard): real-time live WebSocket monitoring (#2668)
Integrated into release/v3.8.3
* feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (#2669)
Integrated into release/v3.8.3
* feat(pipeline): pre-request middleware hooks (#2670)
Integrated into release/v3.8.3
* feat(resilience): credential health check + adaptive circuit breaker (#2671)
Integrated into release/v3.8.3
* feat(playground): combo routing visual simulator (#2672)
Integrated into release/v3.8.3
* feat(auth): API key groups with model-level permissions (#2673)
Integrated into release/v3.8.3
* feat(pwa): enhanced manifest + push notification support (#2674)
Integrated into release/v3.8.3
* feat(proxy): serverless relay endpoints with rate limiting (#2675)
Integrated into release/v3.8.3
* docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors
* fix(db): remove transactions from migrations
Remove explicit transaction wrappers from recent migrations and correct
the API key groups migration metadata. Also fix codegraph path resolution
for ESM environments and refresh generated fumadocs source output.
---------
Co-authored-by: Ömer Vehbe <ovehbe@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Mr. Meowgi <mr@meowgi.dev>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: amogus22877769 <y.lev357@gmail.com>
Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com>
Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com>
Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com>
Co-authored-by: df4p <38404+df4p@users.noreply.github.com>
Co-authored-by: ivan-mezentsev <ivan@mezentsev.me>
Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com>
Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com>
Co-authored-by: M.M <mr.maatoug@gmail.com>
Co-authored-by: Benson K B <bensonkbmca@gmail.com>
Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
* feat(qoder): native cosy integration
* feat(qoder): implement native COSY encryption algorithm and remove CLI child instances, plus workflow bumps
* feat(resilience): context overflow fallback, OAuth token detection, empty content guard & context-optimized combo strategy
- Add isContextOverflowError + isContextOverflow detectors (400 + token-limit signals)
- Auto-fallback to next family model on context overflow in chatCore
- Add isEmptyContentResponse to catch fake-success empty responses, trigger fallback + recursive retry
- Add OAUTH_INVALID_TOKEN error type (T11) with isOAuthInvalidToken signal matching; warn instead of deactivating node
- Add getModelContextLimit helper in modelsDevSync (reads limit_context from synced capabilities)
- Upgrade getTokenLimit in contextManager to check models.dev DB before registry (fixes gemini-2.5-pro: 1000000→1048576)
- Add findLargerContextModel in modelFamilyFallback for context-aware model selection
- Add sortModelsByContextSize + context-optimized combo strategy in combo.ts
- Update context-manager unit test for corrected gemini-2.5-pro limit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(review): address Gemini code review — tool_calls path, infinite recursion, dedup signals, findLargerContextModel
- Fix isEmptyContentResponse: check message.tool_calls/delta.tool_calls instead
of firstChoice.tool_calls (wrong OpenAI API path, caused tool-call responses
to be falsely flagged as empty)
- Fix empty content fallback: replace recursive handleChatCore call (infinite
recursion risk + wrong model due to original body.model) with non-recursive
pattern — call executeProviderRequest, parse fallback response body, reassign
responseBody and fall through to existing processing
- Fix context overflow: use findLargerContextModel over family candidates first,
fall back to getNextFamilyFallback — ensures we pick a model with actually
larger context window on overflow
- Fix signal dedup: export CONTEXT_OVERFLOW_SIGNALS + CONTEXT_OVERFLOW_REGEX
from errorClassifier.ts; import shared regex in modelFamilyFallback.ts,
removing duplicate signal list and per-call RegExp construction
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(UI): add context-optimized strategy to frontend schema and options
* fix(sse): preserve Responses API events in stream translation
When translating Claude-format responses (e.g. GLM) to Responses API
format for Codex CLI, the sanitizer stripped {event, data} structured
items to {"object":"chat.completion.chunk"}, losing all content and
the critical response.completed event.
Only run sanitizeStreamingChunk on OpenAI Chat Completions chunks,
skipping items that have the Responses API {event, data} structure.
* test(sse): add regression test for Claude→Responses stream sanitization
Verifies that {event,data} structured items from the Responses API
translator bypass sanitizeStreamingChunk when translating Claude-format
providers (e.g. GLM) to Responses API format for Codex CLI.
* fix(sse): strengthen Responses API event detection with response. prefix check
Use explicit `response.` prefix check instead of generic `event && data`
presence check, as recommended in PR review.
* fix: pin Next.js to 16.0.10 to prevent Turbopack hashed module bug
Remove ^ prefix from next and eslint-config-next to prevent
automatic upgrades to 16.1.x+ which introduced content-based
hashing for external module references in Turbopack.
Also remove duplicate Material Symbols @import from globals.css
(font already loaded via <link> in layout.tsx).
Fixes#509
* align cc-compatible cache handling with client passthrough
* chore: integrate resilience and turbopack fixes (PRs #992, #990, #987)
* chore(release): bump to v3.5.2 — changelog, docs, version sync
* docs(i18n): sync documentation updates to 33 languages
* fix(qoder): replace any with unknown to comply with strict any-budget
---------
Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
Co-authored-by: oyi77 <oyi77@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Chris Staley <christopher-s@users.noreply.github.com>
Co-authored-by: Ivan <shanin-i2011@yandex.ru>
Co-authored-by: R.D. <rogerproself@gmail.com>
- Fix inverted Claude OAuth utilization (remaining, not used)
- Add hasUtilization() guard to prevent false exhaustion from empty responses
- Centralize anthropic-version into CLAUDE_CONFIG.apiVersion
- Add parseDate() for safe date validation in quota cache
- Batch background refresh with MAX_CONCURRENT_REFRESHES=5
- Move setModelUnavailable to after all accounts exhausted, not first 429
- Extract safePercentage() to shared utils (dedup)
- Use isRecord() type guard in usage API route
- Exclude binary files from Tailwind v4 source scanning
Code Quality Improvements:
- Export COLOR_THEMES from themeStore.ts for reuse (DRY)
- Add coral preset to color list (fixes default inconsistency)
- Sync local customThemeColor state reactively via Zustand subscribe
- Add hex color validation with visual feedback (red border + disabled button)
- Remove dead /themes route from Header.tsx (page doesn't exist)
- Add CSS color-mix() fallback for older browsers
- Add themeCoral i18n key to all 30 locale files
Tailwind CSS v4 auto-detection failed to scan Next.js route group
directories with parentheses (e.g. '(dashboard)'), causing responsive
grid utilities to be purged from production CSS. Added explicit @source
directives in globals.css to fix the content scanning.
CSS output: 10KB (broken) → 110KB (correct), 12 media queries restored.
OmniRoute is an intelligent API gateway that unifies 20+ AI providers behind a single
OpenAI-compatible endpoint. Features include intelligent routing with 6 strategies,
multi-format translation (OpenAI/Claude/Gemini/Responses API), circuit breakers,
semantic caching, combo fallback chains, real-time health monitoring, and a full
dashboard with provider management, analytics, and CLI tool integration.
Key highlights:
- 20+ providers (Claude Code, Codex, Gemini CLI, GitHub Copilot, iFlow, Qwen, Kiro, etc.)
- 6 routing strategies (Fill First, Round Robin, P2C, Random, Least Used, Cost Optimized)
- Export/Import database backup with full archive support
- Translator Playground with 4 modes (Playground, Chat Tester, Test Bench, Live Monitor)
- 100% TypeScript across src/ and open-sse/
- Docker support with multi-stage builds
- Comprehensive documentation and 9 dashboard screenshots