✨ New Features
-
feat(docs): integrate multi-page documentation into OmniRoute dashboard (#1969)
-
feat(settings): add request body limit setting (#1968)
-
feat(auth): add Gemini CLI OAuth client secret default (#1974)
-
feat(models): expose models.dev context windows in /v1/models (#1972)
-
feat(compression): major upgrade to Caveman and RTK compression pipelines (#1876, #1889):
-
Add RTK tool-output compression, stacked Caveman + RTK pipelines, compression combo assignments, dashboard context pages, MCP management tools, and language-aware Caveman rule packs.
-
Expand RTK parity with a 39-filter catalog, RTK-style JSON DSL stages, inline verify/benchmark coverage, trust-gated custom filters, expanded command detection, and redacted raw-output recovery.
-
Expose rule intensities, track USD savings, unify config validation, and persist MCP savings.
-
Expand Caveman parity and MCP metadata compression.
-
feat(provider): update Jina AI model catalog to support Embeddings and Rerank natively (#1874 — thanks @backryun)
-
feat(provider): add NanoGPT image generation provider (#1899 — thanks @Aculeasis)
-
feat(ui): move proxy configuration to dedicated System → Proxy page (#1907 — thanks @oyi77)
-
feat(ui): add K/M/B/T cost shortener utility (#1902 — thanks @oyi77)
-
feat(providers): implement bulk paste for extra API keys (#1916 — thanks @0xtbug)
-
feat(analytics): usage history API key backfill + dark mode pricing (#1896 — thanks @Gi99lin)
-
feat(logs): show RTK and Caveman compression token savings accurately in request log UI (#1923 — thanks @emdash)
-
feat(routing): auto-skip exhausted quota accounts (Issue #1952)
-
feat(db): consolidate all database settings into SystemStorageTab (closes #1935) (#1947 — thanks @oyi77)
-
feat(sse): codex 429 mid-task failover with account rotation (#1888 — thanks @smartenok-ops)
-
feat(auto-assessment): add auto-assessment engine for combo self-healing (#1918 — thanks @oyi77)
-
feat(usage): DeepSeek V4 native cache token extraction (#1930 — thanks @smartenok-ops)
-
feat(cost): enhance cost formatting and add Codex GPT-5.5 pricing support (#1944 — thanks @JxnLexn)
🐛 Bug Fixes
- fix(auth): implement session affinity sticky routing logic
- fix(dashboard): derive display base URL from origin instead of hardcoding localhost (#1960 — thanks @jeanfbrito)
- fix(proxy): use credentials.connectionId instead of non-existent credentials.id for image proxy resolution (#1929 — thanks @Aculeasis)
- fix(routing): codex bare-name disambiguation + family-native fallback (#1933 — thanks @smartenok-ops)
- fix(infrastructure): move wreq-js to optionalDependencies and add Node 25/26 to secure runtime policy (#1924)
- fix(providers): resolve ChatGPT Web authentication failure by aligning TLS fingerprint User-Agent strings (#1925)
- fix(mitm): support root user for MITM sudo handling (#1948 — thanks @NekoMonci12)
- fix(db): resolve legacy encryption fallback causing re-encryption loops (#1941, #1945)
- fix(auth): fix Codex assistant final_answer response sanitization (#1965)
- fix(mcp): reclassify MCP endpoints to ensure API key authentication works even when dashboard auth is enabled (#1970)
- fix(providers): allow local OpenAI-compatible endpoints (like Ollama) to be added without an API key (fixes #1893)
- fix(providers): bypass AgentRouter unauthorized_client_error by spoofing Claude CLI headers via Anthropic endpoints (fixes #1921)
- fix(copilot): emit compatible reasoning text deltas (#1919 — thanks @ivan-mezentsev)
- fix(api-manager): show validation errors inline in modals, not behind (#1920 — thanks @andrewmunsell)
- fix(compression): align seeded standard savings combo with stacked default, preserve stacked defaults, and secure metadata routes.
- fix(gemini-cli): separate Cloud Code transport from Antigravity (#1869 — thanks @dhaern)
- fix(codex): map prompt field to input array for Cursor compatibility (fixes #1872)
- fix(core): align stream parameter default to false per strict OpenAI spec (fixes #1873)
- fix(ui): restore Next.js CSP
unsafe-evalin productionscript-srcto fix unresponsive Onboarding button (fixes #1883) - fix(proxy): globally strip
prompt_cache_retentioninBaseExecutorto prevent upstream 400 errors from strict endpoints like droid/gemini-2-pro (fixes #1884) - fix(ui): include
isOpendependency inEditConnectionModalstate sync to ensuremaxConcurrentis properly hydrated when reopening the modal (fixes #1859) - fix(security): remediate 4 polynomial-redos CodeQL alerts in compression regexes by bounding repetitions and removing overlapping quantifiers
- fix(codex): flatten Chat Completions tool format to Codex Responses format in
normalizeCodexTools— preventsMissing required parameter: tools[0].nameupstream errors (#1914 — thanks @tranduykhanh030) - fix(proxy): add proxy-aware execution context to image generation route — proxy settings are now correctly applied for image providers behind restricted networks (#1904 — thanks @Aculeasis)
- fix(translator): inject
properties: {}into zero-argument MCP tool schemas during Anthropic→OpenAI translation — prevents 400 errors from OpenAI strict schema validation (#1898 — thanks @bryceIT) - fix(codex): sanitize raw responses input (#1895 — thanks @dhaern)
- fix(combos): align strategy contracts (#1892 — thanks @dhaern)
- fix(combos): fix combo provider breaker profile handling (#1891 — thanks @rdself)
- fix(migrations): duplicate-column no-op fix (#1886 — thanks @smartenok-ops)
- fix(auth): per-connection OAuth refresh mutex (#1885 — thanks @smartenok-ops)
- fix(auth): require dashboard management auth for compression preview
🔄 Updates
- chore(provider): Add reka models list (#1956 — thanks @backryun)
- chore(model): Update new models, Delete Deprecated models (#1949 — thanks @backryun)
📝 Documentation
- docs(compression): document RTK+Caveman stacked savings ranges
🏆 Release Attribution & Retroactive Credits
- @payne0420 (PR #1828 / #1839) — Implementation of the Rate Limit Watchdog and environment overrides. (This feature was manually backported to v3.7.8, causing the automatic GitHub Release notes to omit the author's credit).
What's Changed
- fix(gemini-cli): separate Cloud Code transport from Antigravity by @dhaern in #1869
- chore(provider): Update Jina AI model catalog by @backryun in #1874
- feat(compression): RTK compression roadmap by @diegosouzapw in #1889
- feat(compression): atualização Caveman by @diegosouzapw in #1876
- feat(image-gen): add NanoGPT image generation provider by @Aculeasis in #1899
- fix(codex): sanitize raw responses input by @dhaern in #1895
- Fix combo provider breaker profile handling by @rdself in #1891
- fix(combos): align strategy contracts by @dhaern in #1892
- feat(proxy): move proxy configuration to dedicated System → Proxy page by @oyi77 in #1907
- feat: add K/M/B/T cost shortener to prevent UI overflow by @oyi77 in #1902
- feat(providers): implement bulk paste for extra API keys by @0xtbug in #1916
- fix(migrations): treat duplicate-column ALTER as no-op by @smartenok-ops in #1886
- fix(analytics): robust model pricing resolution, dark mode charts and SQL aggregation fixes by @Gi99lin in #1896
- fix(oauth): per-connection mutex for rotating refresh tokens by @smartenok-ops in #1885
- fix(copilot): emit compatible reasoning text deltas by @ivan-mezentsev in #1919
- fix(api-manager): show validation errors inline in modals, not behind by @andrewmunsell in #1920
- Release v3.7.9 by @diegosouzapw in #1917
- feat(logs): show compression tokens in request log UI by @andrewmunsell in #1923
- feat: enhance cost formatting and add Codex GPT-5.5 pricing support by @JxnLexn in #1944
- fix(routing): codex bare-name disambiguation + family-native fallback by @smartenok-ops in #1933
- feat(usage): DeepSeek V4 native cache token extraction by @smartenok-ops in #1930
- feat: Auto-Assessment and Self-Healing Combo Engine by @oyi77 in #1918
- chore: update dependencies and sidebar i18n by @backryun in #1946
- chore(model): Update new models, Delete Deprecated models by @backryun in #1949
- chore(provider): Add reka models list by @backryun in #1956
- feat(sse): codex 429 mid-task failover with account rotation by @smartenok-ops in #1888
- fix(proxy): use credentials.connectionId instead of non-existent credentials.id for image proxy resolution by @Aculeasis in #1929
- feat(db): consolidate all database settings into SystemStorageTab (closes #1935) by @oyi77 in #1947
- fix(dashboard): derive display base URL from origin instead of hardcoding localhost by @jeanfbrito in #1960
- deps: bump the production group with 3 updates by @dependabot[bot] in #1962
- deps: bump the development group with 2 updates by @dependabot[bot] in #1963
- fix: add default Gemini CLI OAuth client secret by @tuman-area in #1974
- fix(api): expose models.dev context windows in /v1/models by @payne0420 in #1972
- fix(codex): preserve final_answer responses replay by @AveryanAlex in #1965
- feat(settings): add request body limit setting by @Tr0sT in #1968
- feat(docs): integrate multi-page documentation into OmniRoute dashboard — Closes #1958 by @oyi77 in #1969
- Support root user for MITM sudo handling by @NekoMonci12 in #1948
- fix(api): expose models.dev context windows in /v1/models by @payne0420 in #1971
- Feat/docs site overhaul by @oyi77 in #1976
- fix: swap primary/legacy key derivation in encryption module (fixes #1941) by @oyi77 in #1945
- Release v3.7.9 by @diegosouzapw in #1959
- docs(changelog): sync missing v3.7.9 release entries by @diegosouzapw in #1979
- Release v3.7.9 (continued development) by @diegosouzapw in #1982
New Contributors
- @0xtbug made their first contribution in #1916
- @smartenok-ops made their first contribution in #1886
- @JxnLexn made their first contribution in #1944
- @tuman-area made their first contribution in #1974
Full Changelog: v3.7.8...v3.7.9