Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
18aba9b
fix(streaming): #1211 greedy strip omniModel tags to prevent literal …
diegosouzapw Apr 14, 2026
a1ffbc4
fix: 3 bugs found during issue triage (#1175, #1187/#1218, #1202)
diegosouzapw Apr 14, 2026
b6e8597
fix(providers): update Xiaomi MiMo token-plan endpoints (#1238)
hijak Apr 14, 2026
ff183f8
fix(cc-compatible): trim beta flags and preserve cache passthrough (#…
rdself Apr 14, 2026
711812a
feat(memory+skills): full-featured memory & skills systems with tests…
oyi77 Apr 14, 2026
5acb40c
fix: forward client x-initiator header to GitHub Copilot upstream (#1…
cedrugs Apr 14, 2026
2a84d79
feat(bailian-quota): add Alibaba Coding Plan quota monitoring (#1235)
diegosouzapw Apr 14, 2026
a26b3ee
fix: resolve v3.6.6 backlog bugs (#1206, #1211, #1220, #1231)
diegosouzapw Apr 14, 2026
9949fad
fix(tests): resolve memory migration and skills route pagination bugs…
diegosouzapw Apr 14, 2026
d675c8f
docs: Update CHANGELOG.md with v3.6.6 features (#1182, #1165, #1177)
diegosouzapw Apr 14, 2026
de050be
chore(release): bump version to 3.6.6
diegosouzapw Apr 14, 2026
07b2810
feat(core): harden outbound provider calls and add cooldown retries
diegosouzapw Apr 14, 2026
9952a6c
feat(models): add glmt preset and hybrid token counting
diegosouzapw Apr 14, 2026
cc27bdd
feat(api): add sync tokens and v1 websocket bridge
diegosouzapw Apr 15, 2026
935c36f
docs: Update all documentation for v3.6.6
diegosouzapw Apr 15, 2026
7fc758c
fix: use api64 for proxy test (#1255)
mgarmash Apr 15, 2026
08a2a15
fix(page): update custom models section to include all providers #120…
hartmark Apr 15, 2026
00a4b45
fix: provide default client_id fallbacks to prevent broken OAuth requ…
Gi99lin Apr 15, 2026
678298f
fix: translate max_tokens/max_completion_tokens → max_output_tokens i…
Gi99lin Apr 15, 2026
da9af4a
feat(oauth): support cursor-agent CLI as Cursor credential source (#1…
payne0420 Apr 15, 2026
a17b723
fix(cc-compatible): restore upstream SSE and correct stream/combo tim…
rdself Apr 15, 2026
d89e38e
fix(cli-tools): resolve API key resolution and model mapping bugs in …
benzntech Apr 15, 2026
bc0ad6a
feat(cli-tools): add Qwen Code CLI integration (#1266)
benzntech Apr 15, 2026
ca21f51
fix(i18n): add missing zh-CN translations and fix logger imports (#1269)
clousky2020 Apr 15, 2026
69e46ca
fix(i18n): add Chinese i18n support to dashboard components (#1274)
clousky2020 Apr 15, 2026
2a175ec
feat: update Pollinations to require API key, remove free tier flag (…
diegosouzapw Apr 15, 2026
e860df1
feat: friendly error messages for crypto/encryption failures (#1165)
diegosouzapw Apr 15, 2026
915341a
feat: add TPS (tokens per second) metric column to request logs (#1182)
diegosouzapw Apr 15, 2026
efeafce
feat: merge custom/imported models into filter list for all providers…
diegosouzapw Apr 15, 2026
18604ac
feat(fallback): Fix provider-profile-driven lockouts (#1267)
diegosouzapw Apr 15, 2026
fdb8c10
fix(claude): proper Anthropic SDK integration (#1271)
diegosouzapw Apr 15, 2026
bd1a06d
fix(healthcheck): use correct proxy wrapper format for getAccessToken…
diegosouzapw Apr 15, 2026
699d746
chore(release): v3.6.6 — skills registry stability fix + final integr…
diegosouzapw Apr 15, 2026
de44f3b
fix(auth): harden bootstrap auth and memory dashboard behavior
diegosouzapw Apr 15, 2026
a158014
fix(codex): remove max_output_tokens from body for compatibility
diegosouzapw Apr 15, 2026
18fec5d
chore(release): v3.6.6 — include PR 1274 fixes in changelog
diegosouzapw Apr 15, 2026
0c0e530
chore: exclude additional build artifacts and internal directories fr…
diegosouzapw Apr 15, 2026
001310e
fix: update Gemini OAuth test to match registry defaults + codex UI i…
diegosouzapw Apr 15, 2026
288c35c
fix: restore .mjs refs for scripts/ in test imports after ts migration
diegosouzapw Apr 15, 2026
4e924db
fix: restore next.config.mjs ref in dev-origins test
diegosouzapw Apr 15, 2026
5bbe645
fix: implement db migration safety checks and codex config format
diegosouzapw Apr 15, 2026
419f4c6
fix: disable mass-migration abort during unit tests based on auto-bac…
diegosouzapw Apr 15, 2026
8f86907
fix: update script regex in auto-update tests to use .mjs
diegosouzapw Apr 15, 2026
66ace45
feat: Add Perplexity Web (Session) provider (#1289)
RaviTharuma Apr 15, 2026
497014d
fix(cli): resolve codex routing config parsing, standardize select mo…
diegosouzapw Apr 15, 2026
e1b19c0
docs(changelog): record recent cli, provider, and test updates
diegosouzapw Apr 15, 2026
058422c
chore(release): merge #1286 minor improvements manually to avoid test…
diegosouzapw Apr 15, 2026
33c6c43
chore(test): rename perplexity-web.test.mjs to .ts to maintain 100% T…
diegosouzapw Apr 15, 2026
77e4ce1
chore(docs): update CHANGELOG.md for perplexity-web provider
diegosouzapw Apr 15, 2026
5768e76
fix(security): resolve CodeQL incomplete URL substring sanitization v…
diegosouzapw Apr 15, 2026
b73d235
fix: integrate compressContext() into chatCore.ts request pipeline
oyi77 Apr 15, 2026
5791904
fix(tests): align reasoning expectations with GLM thinking structure
diegosouzapw Apr 15, 2026
9ae1a80
fix: prevent orphaned tool_result messages in purifyHistory()
oyi77 Apr 15, 2026
8b21c7b
Merge release/v3.6.6 into branch
diegosouzapw Apr 15, 2026
16e6fd8
Merge branch 'release/v3.6.6' into fix/compress-context-integration-1290
diegosouzapw Apr 15, 2026
0437592
fix(tests): supply tool_use in mock so it is not dropped
diegosouzapw Apr 15, 2026
327b06e
chore: convert remaining test to TypeScript
diegosouzapw Apr 15, 2026
674eada
fix(tests): restore compatibility with compressContext threshold test…
diegosouzapw Apr 15, 2026
6e1e927
docs: finalize v3.6.6 release documentation
diegosouzapw Apr 15, 2026
25d58dd
fix(core): finalize provider removal, type issues, and codex API key …
diegosouzapw Apr 15, 2026
89201f8
Merge remote-tracking branch 'origin/main' into release/v3.6.6
diegosouzapw Apr 15, 2026
b20fde8
fix(dashboard): render Web/Cookie, Search, Audio provider sections an…
diegosouzapw Apr 15, 2026
0fa025a
fix: increase MCP web_search timeout to 60s (#1278)
diegosouzapw Apr 15, 2026
0e4f9e3
fix: route combo testing properly for embedding models (#1260)
diegosouzapw Apr 15, 2026
3c239dd
fix: accumulate excluded accounts in combo fallback loop (#1233)
diegosouzapw Apr 15, 2026
93ae772
fix: strip leading whitespace and newlines from first streaming chunk…
diegosouzapw Apr 15, 2026
7bb0ce4
docs: clarify VPS and Docker settings for OAuth credentials (#1204)
diegosouzapw Apr 15, 2026
f239ae9
fix: return real retry-after for pipeline gates (#1301)
rdself Apr 16, 2026
578004c
feat: streaming semantic cache, Cursor auto-version detection, and ca…
Hdsje Apr 16, 2026
d166362
feat(api): support more OpenAI types (image, embeddings, audio-transc…
hartmark Apr 16, 2026
cc867aa
deps: bump hono from 4.12.12 to 4.12.14 (#1302)
dependabot[bot] Apr 16, 2026
72502e4
deps: bump hono from 4.12.12 to 4.12.14 (#1306)
dependabot[bot] Apr 16, 2026
4ebe313
chore: stabilization fixes for v3.6.6 (#1298, #1254, #59, CI)
diegosouzapw Apr 16, 2026
ae5ffdd
fix(providers): match correct endpoint for Xiaomi MiMo, strip routing…
diegosouzapw Apr 16, 2026
8cc478f
feat(storage): add database backup cleanup controls
xiaoge1688 Apr 15, 2026
e5508ab
Merge pull request #1304 from xiaoge1688/fix/db-backup-retention-cont…
diegosouzapw Apr 16, 2026
ed96ee7
chore(release): v3.6.6 — Final Stabilization Push
diegosouzapw Apr 16, 2026
37126fa
Backport call log storage refactor to release/v3.6.6 (#1307)
rdself Apr 16, 2026
732ce86
deps: update dompurify to 3.4.0 to resolve CVE-XYZ (#60)
diegosouzapw Apr 16, 2026
3d61788
test: disable sqlite auto backup in CI to resolve E2E timeout (#24481…
diegosouzapw Apr 16, 2026
103a781
chore(docs): sync CHANGELOG for v3.6.6 with missing features and fixes
diegosouzapw Apr 16, 2026
7d0da96
chore(release): prep v3.6.6 infrastructure and type safety fixes
diegosouzapw Apr 16, 2026
2266281
chore: fix TS build errors and e2e timeouts in CI
diegosouzapw Apr 16, 2026
7b18e75
chore(release): sync package version 3.6.6 across workspaces
diegosouzapw Apr 16, 2026
c13969e
test(e2e): universally increase UI component visibility timeouts from…
diegosouzapw Apr 16, 2026
e5c16fb
chore(build): inject baseUrl, paths, and types:node into MITM tsconfi…
diegosouzapw Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,40 @@

---

## [3.6.6] — 2026-04-14

### ✨ New Features

- **feat(api): Sync Tokens & V1 WebSocket Bridge** — Dedicated sync token storage, issuance, revocation, and bundle download routes backed by stable config bundle versioning with ETag support. Exposes `/v1/ws` WebSocket upgrade route and a custom Next.js server bridge (`scripts/v1-ws-bridge.mjs`) so OpenAI-compatible WebSocket traffic can be proxied through the gateway. Compliance auditing expanded with structured metadata, pagination, request context, auth/provider credential events, and SSRF-blocked validation logging. New migrations: `024_create_sync_tokens.sql`. New modules: `syncTokens.ts`, `src/lib/sync/bundle.ts`, `src/lib/sync/tokens.ts`, `src/lib/ws/handshake.ts`, `src/lib/apiBridgeServer.ts`, `src/lib/compliance/providerAudit.ts`.
- **feat(models): GLM Thinking Preset & Hybrid Token Counting** — GLM Thinking (`glmt`) registered as a first-class provider preset with shared GLM model metadata, pricing, per-connection usage sync, dashboard support, and `maxTokens: 65536 / thinkingBudgetTokens: 24576` request defaults with 900s extended timeout. Provider-side `/messages/count_tokens` endpoint used when a Claude-compatible upstream supports it; gracefully falls back to estimation on missing models, missing credentials, or upstream failures. Startup seeding of default model aliases (`src/lib/modelAliasSeed.ts`) normalizes common cross-proxy model dialects so canonical slash-based model IDs are not misrouted. New file `open-sse/config/glmProvider.ts`.
- **feat(core): Hardened Outbound Provider Calls & Cooldown Retries** — Guarded outbound fetch helpers (`src/shared/network/safeOutboundFetch.ts`, `src/shared/network/outboundUrlGuard.ts`) blocking private/local URLs with configurable retry, timeout normalisation, and route-level status propagation for provider validation and model discovery. Cooldown-aware chat retries (`src/sse/services/cooldownAwareRetry.ts`) with configurable `requestRetry` and `maxRetryIntervalSec` settings and model-scoped cooldown responses. Improved rate-limit learning from headers and error bodies so short upstream lockouts can recover automatically. Runtime environment validation (`src/lib/env/runtimeEnv.ts`) checks env at startup. Pollinations now requires an API key. Antigravity and Codex header handling aligned via `open-sse/config/antigravityUpstream.ts` and `open-sse/config/codexClient.ts`. Gemini tool names restored in translated responses; synthetic Claude text block injected when upstream SSE completes empty.
- **feat(logs):** Add TPS (Tokens Per Second) metric to log details modal metadata grid (#1182)
- **feat(memory+skills):** Full-featured Memory & Skills systems with FTS5 SQLite search, dynamic UI pagination, backend observability, and extensive test coverage (#1228)
- **feat(bailian-quota):** Add Alibaba Coding Plan quota monitoring, multi-window quota extraction, and UI credential validation (#1235)

### 🐛 Bug Fixes

- **fix(crypto):** Add validation guard to encryption layer to surface clear UI errors when cryptographic environment variables are missing, replacing raw Node.js TypeErrors. Legacy env vars `OMNIROUTE_CRYPT_KEY` and `OMNIROUTE_API_KEY_BASE64` now also accepted as fallbacks (#1165)
- **fix(providers):** Update Pollinations provider definition to require API keys and specify their new limited pollen/hour free tier (#1177)
- **Streaming `\n\n` Artifact Fix (#1211):** Changed `<omniModel>` tag-stripping regex from `?` to `*` quantifier across `combo.ts`, `comboAgentMiddleware.ts`, and `contextHandoff.ts` to greedily strip all accumulated JSON-escaped newline sequences surrounding the tag. This prevents literal `\n\n` prefix artifacts from appearing in consumer streaming responses
- **E2E Combo Test Locator:** Fixed Playwright strict-mode violation in `combo-unification.spec.ts` by replacing ambiguous `getByRole` locator with a compound filter locator for the "All" strategy tab
- **fix(cc-compatible):** Trim beta flags and preserve cache passthrough for third-party HTTP proxy compatibility (#1230)
- **fix(providers):** Update Xiaomi MiMo endpoints to the live token-plan, migrating away from dead API URLs (#1238)
- **fix:** Forward client `x-initiator` header to GitHub Copilot upstream to accurately distinguish agent vs user turns (#1227)
- **fix:** Resolve backlog bugs including streaming edge cases, unhandled rejections, and quota parse failures (#1206, #1220, #1231, #1175, #1187, #1218, #1202)
- **fix(tests):** Resolve memory migration and skills route pagination bugs arising from PR overlaps

### 🔧 Internal Improvements

- **Compliance Audit Expansion:** `src/lib/compliance/index.ts` expanded with structured metadata, pagination support, request context enrichment, and new `providerAudit.ts` module logging auth and provider credential events, SSRF-blocked validation attempts, and provider CRUD operations
- **Config Sync Bundle:** `src/lib/sync/bundle.ts` exports `buildConfigBundle()` generating a versioned JSON snapshot of settings, provider connections, nodes, model aliases, combos, and API keys (passwords redacted) with ETag support for bandwidth-efficient polling
- **Codex Client Constants:** Centralized `CODEX_CLIENT_VERSION`, `CODEX_USER_AGENT_PLATFORM`, and pattern-validated env overrides (`CODEX_CLIENT_VERSION`, `CODEX_USER_AGENT`) in `open-sse/config/codexClient.ts`
- **Antigravity Upstream Constants:** `open-sse/config/antigravityUpstream.ts` consolidates all Antigravity base URLs and model/fetchAvailableModels discovery path builders
- **Model Alias Seed:** `src/lib/modelAliasSeed.ts` seeds 30+ cross-proxy model dialect aliases (e.g. `openai/gpt-5` → `gpt-5`, `anthropic/claude-opus-4-6` → `cc/claude-opus-4-6`) at startup via idempotent `upsert`
- **Test Coverage:** 15+ new unit test suites covering sync routes, WebSocket bridge, compliance index, GLM provider config, cooldown-aware retry, safe outbound fetch, stream utilities, Codex executor, provider validation branches, model cross-proxy compatibility, and model alias seeding

---

## [3.6.5] — 2026-04-13

### ✨ New Features
Expand Down
82 changes: 52 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -801,6 +801,11 @@ Backward compatibility is preserved: existing `FETCH_TIMEOUT_MS`, `API_BRIDGE_PR

For Claude Code-compatible upstreams (`anthropic-compatible-cc-*`), OmniRoute also derives the outbound `X-Stainless-Timeout` header from the resolved fetch timeout so provider-side read timeouts stay aligned with your env configuration.

For third-party Claude Code-compatible reverse proxies, OmniRoute keeps the default
`anthropic-beta` set conservative and, when `Client Cache Control` is left on `Auto`,
only forwards client-provided `cache_control` markers. If the request does not include
`cache_control`, OmniRoute does not inject bridge-owned markers.

Advanced overrides are available if you need finer control:

| Variable | Default | Purpose |
Expand Down Expand Up @@ -1324,18 +1329,28 @@ OmniRoute v3.6 is built as an operational platform, not just a relay proxy.

### 🆕 New — v3.6.x Highlights (Apr 2026)

| Feature | What It Does |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| 🗑️ **Uninstall / Full Uninstall** | `npm run uninstall` keeps data, `npm run uninstall:full` removes everything — clean removal scripts for all install methods |
| 🔧 **OAuth Env Repair** | One-click "Repair env" action for OAuth providers restores missing environment variables and fixes broken auth state |
| 🔒 **Graceful Electron Shutdown** | Electron `before-quit` now shuts down Next.js gracefully, preventing SQLite WAL database locks on desktop app close |
| 👁️ **Model Visibility Toggle** | Per-model visibility toggle (👁 icon) with search filter and active-count badge (`N/M active`) on provider pages |
| 📧 **Email Privacy Masking** | OAuth account emails masked in provider dashboard (`di*****@g****.com`), full address visible on hover |
| 🔗 **Context Relay Strategy** | Combo strategy that preserves session continuity via structured handoff summaries when accounts rotate mid-conversation |
| 🛡️ **Proxy Hardening** | Token health check, API key validation, and undici dispatcher all honor proxy config — no more bypass in restricted envs |
| ⚠️ **Node.js 24 Login Warning** | Login page proactively detects incompatible Node.js versions and shows a clear warning banner with instructions |
| 📎 **Gemini PDF Attachments** | PDF files attached in chat messages are now correctly routed to Gemini via `inline_data` and generic base64 detection |
| 🔒 **CodeQL Security Hardening** | Resolved SSRF, insecure randomness, polynomial ReDoS, and incomplete URL sanitization alerts |
| Feature | What It Does |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| 🌐 **V1 WebSocket Bridge** | OpenAI-compatible WebSocket traffic upgraded and proxied via `/v1/ws` — full streaming over WS with session auth (API key or session cookie) |
| 🔑 **Sync Tokens & Config Bundle** | Issue/revoke sync tokens for config sync endpoints. Config bundles versioned with ETag for bandwidth-efficient polling |
| 🧠 **GLM Thinking (glmt) Preset** | GLM Thinking registered first-class: 65 536 max tokens, 24 576 thinking budget, 900s timeout, usage sync & pricing — Claude-compatible API |
| 🔢 **Hybrid Token Counting** | Uses provider-side `/messages/count_tokens` when available; falls back to estimation — accurate usage tracking without guessing |
| 🌱 **Model Alias Auto-Seed** | 30+ cross-proxy dialect aliases normalised at startup — no more routing mismatches |
| 🛡️ **Safe Outbound Fetch** | All provider validation and model discovery go through a guarded fetch layer blocking private/local URLs with retry, timeout, and SSRF protection |
| 🔄 **Cooldown-Aware Retries** | Chat requests auto-retry on model-scoped cooldowns with configurable `requestRetry` and `maxRetryIntervalSec` |
| 🔍 **Runtime Env Validation** | Startup validates all env vars with Zod schemas — clear errors for missing secrets, invalid URLs, or wrong types |
| 📋 **Compliance Audit Expansion** | Structured audit logs with pagination, request context, auth events, provider CRUD events, and SSRF-blocked validation logging |
| 🔐 **TPS Log Metric** | Log details modal shows Tokens Per Second (TPS) — quick performance at-a-glance for every request |
| 🗑️ **Uninstall / Full Uninstall** | `npm run uninstall` keeps data, `npm run uninstall:full` removes everything — clean removal for all install methods |
| 🔧 **OAuth Env Repair** | One-click "Repair env" action for OAuth providers restores missing env vars and fixes broken auth state |
| 🔒 **Graceful Electron Shutdown** | Electron `before-quit` shuts down Next.js gracefully, preventing SQLite WAL database locks on desktop close |
| 👁️ **Model Visibility Toggle** | Per-model visibility toggle (👁 icon) with search filter and active-count badge (`N/M active`) on provider pages |
| 📧 **Email Privacy Masking** | OAuth account emails masked (`di*****@g****.com`), full address visible on hover |
| 🔗 **Context Relay Strategy** | Combo strategy preserving session continuity via structured handoff summaries when accounts rotate mid-conversation |
| 🛡️ **Proxy Hardening** | Token health check, API key validation, and undici dispatcher all honor proxy config |
| ⚠️ **Node.js 24 Login Warning** | Login page proactively detects incompatible Node.js versions and shows a clear warning banner |
| 📎 **Gemini PDF Attachments** | PDF attachments correctly routed to Gemini via `inline_data` and generic base64 detection |
| 🔒 **CodeQL Security Hardening** | Resolved SSRF, insecure randomness, polynomial ReDoS, and incomplete URL sanitization alerts |

### 🆕 New — ClawRouter-Inspired Improvements (Mar 2026)

Expand Down Expand Up @@ -1416,24 +1431,28 @@ OmniRoute v3.6 is built as an operational platform, not just a relay proxy.

### 🛡️ Resilience, Security & Governance

| Feature | What It Does |
| ----------------------------------- | -------------------------------------------------------------------------------------- |
| 🔌 **Circuit Breakers** | Per-model trip/recover with threshold controls |
| 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore protections on retry/rate events |
| 🧠 **Semantic + Signature Cache** | Cost/latency reduction with two cache layers |
| ⚡ **Request Idempotency** | Duplicate protection window |
| 🔒 **TLS Fingerprint Spoofing** | Browser-like TLS fingerprint — **reduces bot detection and account flagging** |
| 🔏 **CLI Fingerprint Matching** | Matches native CLI request signatures — **reduces ban risk while preserving proxy IP** |
| 🌐 **IP Filtering** | Allowlist/blocklist control for exposed deployments |
| 📊 **Editable Rate Limits** | Configurable global/provider-level limits with persistence |
| 📉 **Graceful Degradation** | Multi-layer capability fallbacks protecting core gateway operations |
| 📜 **Config Audit Trail** | Diff-based change tracking preventing operational drift with simple rollbacks |
| ⏳ **Provider Health Sync** | Proactive token expiration monitoring triggering alerts before authorization failures |
| 🚪 **Auto-Disable Banned Accounts** | Operational circuit breaker sealing permanently blocked token accounts automatically |
| 🔑 **API Key Management + Scoping** | Secure key issuance/rotation and model/provider controls |
| 👁️ **Scoped API Key Reveal** 🆕 | Opt-in recovery of API keys via `ALLOW_API_KEY_REVEAL` |
| 🛡️ **Protected `/models`** | Optional auth gating and provider hiding for model catalog |
| Feature | What It Does |
| ----------------------------------- | --------------------------------------------------------------------------------------- |
| 🔌 **Circuit Breakers** | Per-model trip/recover with threshold controls |
| 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore protections on retry/rate events |
| 🧠 **Semantic + Signature Cache** | Cost/latency reduction with two cache layers |
| ⚡ **Request Idempotency** | Duplicate protection window |
| 🔒 **TLS Fingerprint Spoofing** | Browser-like TLS fingerprint — **reduces bot detection and account flagging** |
| 🔏 **CLI Fingerprint Matching** | Matches native CLI request signatures — **reduces ban risk while preserving proxy IP** |
| 🌐 **IP Filtering** | Allowlist/blocklist control for exposed deployments |
| 📊 **Editable Rate Limits** | Configurable global/provider-level limits with persistence |
| 📉 **Graceful Degradation** | Multi-layer capability fallbacks protecting core gateway operations |
| 📜 **Config Audit Trail** | Diff-based change tracking preventing operational drift with simple rollbacks |
| ⏳ **Provider Health Sync** | Proactive token expiration monitoring triggering alerts before authorization failures |
| 🚪 **Auto-Disable Banned Accounts** | Operational circuit breaker sealing permanently blocked token accounts automatically |
| 🔑 **API Key Management + Scoping** | Secure key issuance/rotation and model/provider controls |
| 👁️ **Scoped API Key Reveal** 🆕 | Opt-in recovery of API keys via `ALLOW_API_KEY_REVEAL` |
| 🛡️ **Protected `/models`** | Optional auth gating and provider hiding for model catalog |
| 🛡️ **Safe Outbound Fetch** 🆕 | Guarded fetch for provider calls — blocks private/local URLs, retries, SSRF protection |
| 🔄 **Cooldown-Aware Retries** 🆕 | Auto-retry chat on model cooldowns; configurable `requestRetry` / `maxRetryIntervalSec` |
| 🔍 **Runtime Env Validation** 🆕 | Zod-based env schema validation at startup with actionable error messages |
| 📋 **Compliance Audit v2** 🆕 | Pagination, request context, auth events, provider CRUD, and SSRF-blocked logging |

### 📊 Observability & Analytics

Expand All @@ -1448,6 +1467,7 @@ OmniRoute v3.6 is built as an operational platform, not just a relay proxy.
| 📈 **Analytics Visualizations** | Model/provider usage insights and trend views |
| 🧪 **Evaluation Framework** | Golden set testing with configurable match strategies |
| 📡 **Live Diagnostics** 🆕 | Semantic cache bypass for accurate combo live testing |
| 🔐 **TPS Log Metric** 🆕 | Tokens Per Second badge in log details modal |

### ☁️ Deployment & Platform

Expand All @@ -1467,6 +1487,8 @@ OmniRoute v3.6 is built as an operational platform, not just a relay proxy.
| 👁️ **Sidebar Controls** 🆕 | Hide components and integrations from Appearance Settings |
| 📋 **Issue Templates** | Standardized GitHub templates for bugs and features |
| 📂 **Custom Data Directory** | `DATA_DIR` override for storage location |
| 🌐 **V1 WebSocket Bridge** 🆕 | OpenAI-compatible WebSocket traffic proxied via `/v1/ws` |
| 🔑 **Sync Tokens & Bundle** 🆕 | Config sync tokens + versioned bundle endpoint with ETag support |

### Feature Deep Dive

Expand Down
Loading
Loading