From da14390fe0f86ccbecaf2266963a2a26a8efae55 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Sat, 14 Mar 2026 15:31:27 -0300 Subject: [PATCH] chore: release v2.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Includes: - PR #363: strict-random strategy, API key controls, connection groups, Limits UX (AndersonFirmino) - PR #365: external pricing sync with LiteLLM 3-tier resolution (Regis-RCR) - fix #355: stream idle timeout 60s → 300s for thinking models - fix #350: combo test bypasses REQUIRE_API_KEY via X-Internal-Test header - fix #346: filter tools with empty function.name before forwarding upstream --- CHANGELOG.md | 22 +++++++++++++++++++++- docs/openapi.yaml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bacf7d271f..8c610748b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,27 @@ ## [Unreleased] -## [2.4.4] - 2026-03-14 +## [2.5.0] - 2026-03-14 + +> Major release: strict-random routing strategy, API key access controls, connection groups, external pricing sync, and critical bug fixes for thinking models, combo testing, and tool name validation. + +### ✨ New Features (PRs #363 & #365) + +- **Strict-Random Routing Strategy**: Fisher-Yates shuffle deck with anti-repeat guarantee and mutex serialization for concurrent requests. Independent decks per combo and per provider. +- **API Key Access Controls**: `allowedConnections` (restrict which connections a key can use), `is_active` (enable/disable key with 403), `accessSchedule` (time-based access control), `autoResolve` toggle, rename keys via PATCH. +- **Connection Groups**: Group provider connections by environment. Accordion view in Limits page with localStorage persistence and smart auto-switch. +- **External Pricing Sync (LiteLLM)**: 3-tier pricing resolution (user overrides → synced → defaults). Opt-in via `PRICING_SYNC_ENABLED=true`. MCP tool `omniroute_sync_pricing`. 23 new tests. +- **i18n**: 30 languages updated with strict-random strategy, API key management strings. pt-BR fully translated. + +### 🐛 Bug Fixes + +- **fix #355**: Stream idle timeout increased from 60s to 300s — prevents aborting extended-thinking models (claude-opus-4-6, o3, etc.) during long reasoning phases. Configurable via `STREAM_IDLE_TIMEOUT_MS`. +- **fix #350**: Combo test now bypasses `REQUIRE_API_KEY=true` using internal header, and uses OpenAI-compatible format universally. Timeout extended from 15s to 20s. +- **fix #346**: Tools with empty `function.name` (forwarded by Claude Code) are now filtered before upstream providers receive them, preventing "Invalid input[N].name: empty string" errors. + +### 🗑️ Closed Issues + +- **#341**: Debug section removed — replacement is `/dashboard/logs` and `/dashboard/health`. > API Key Round-Robin support for multi-key provider setups, and confirmation of wildcard routing and quota window rolling already in place. diff --git a/docs/openapi.yaml b/docs/openapi.yaml index 6e52dab7bb..814a1a2221 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: OmniRoute API - version: 2.4.4 + version: 2.5.0 description: | OmniRoute is a local-first AI API proxy router. It provides an OpenAI-compatible endpoint that routes requests to multiple AI providers with load balancing, diff --git a/package-lock.json b/package-lock.json index af230a45b5..59df7099ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "omniroute", - "version": "2.4.3", + "version": "2.4.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "omniroute", - "version": "2.4.3", + "version": "2.4.4", "hasInstallScript": true, "license": "MIT", "workspaces": [ diff --git a/package.json b/package.json index c0019995c5..e8669eaaef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omniroute", - "version": "2.4.4", + "version": "2.5.0", "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.", "type": "module", "bin": {