From 4bca25d783befddd348236f06e8659d240f1f4e9 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Thu, 9 Apr 2026 22:22:02 -0300 Subject: [PATCH] =?UTF-8?q?chore(release):=20v3.5.9=20=E2=80=94=20combo=20?= =?UTF-8?q?ordering,=20stream=20failures,=20Docker=20EXDEV,=20token=20layo?= =?UTF-8?q?ut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 17 +++++++++++++++++ electron/package.json | 2 +- llm.txt | 4 ++-- open-sse/package.json | 2 +- package-lock.json | 2 +- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9c06d23df..2758efdae8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,23 @@ --- +## [3.5.9] — 2026-04-09 + +### ✨ New Features + +- **Persistent Combo Ordering:** Drag combo cards by handle to reorder them in the dashboard; order is persisted to SQLite via a new `sort_order` column and `POST /api/combos/reorder` endpoint. Includes DB migration `020_combo_sort_order.sql` and JSON import preservation (#1095) +- **Sidebar Group Reorder:** Moved "Logs" before "Health" in the System section and "Limits & Quotas" after "Cache" in the Primary section for a more logical navigation flow (#1095) + +### 🐛 Bug Fixes + +- **Stream Failure Surfacing:** Upstream `response.failed` events (e.g. Codex rate-limit errors) are now properly surfaced as non-200 errors instead of being silently swallowed as empty 200 OK streams. Rate-limit failures return HTTP 429 (#1098, closes #1093) +- **Upstream Model Preservation:** The Responses-to-OpenAI stream translator now preserves the actual upstream model (e.g. `gpt-5.4`) instead of hardcoding a `gpt-4` fallback (#1098, closes #1094) +- **Docker EXDEV Fix:** `build-next-isolated.mjs` now falls back from `fs.rename()` to `cp/rm` when Docker buildx raises `EXDEV` (cross-device link), unblocking the Docker image publish workflow (#1097) +- **macOS CLI Path Resolution:** `cliRuntime.ts` resolves symlink parents with `fs.realpath()` to handle macOS `/var` → `/private/var` chains, preventing false `symlink_escape` rejections (#1097) +- **Request Log Token Layout:** Split token badges into separate Input (Total In, Cache Read, Cache Write) and Output (Total Out, Reasoning) groups for clearer readability; renamed "Time" label to "Completed Time" (#1096) + +--- + ## [3.5.8] — 2026-04-09 ### ✨ New Features & Analytics diff --git a/electron/package.json b/electron/package.json index cac1e7841d..f456ce06a3 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "omniroute-desktop", - "version": "3.5.8", + "version": "3.5.9", "description": "OmniRoute Desktop Application", "main": "main.js", "author": { diff --git a/llm.txt b/llm.txt index 032cc53203..d866b81c8d 100644 --- a/llm.txt +++ b/llm.txt @@ -8,7 +8,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo **Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost. -**Current version:** 3.5.8 +**Current version:** 3.5.9 ## Tech Stack @@ -279,7 +279,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo └── .env.example # Environment variable template ``` -## Key Features (v3.5.8) +## Key Features (v3.5.9) ### Core Proxy - **60+ AI providers** with automatic format translation diff --git a/open-sse/package.json b/open-sse/package.json index 72f2367ff2..9d86567a66 100644 --- a/open-sse/package.json +++ b/open-sse/package.json @@ -1,6 +1,6 @@ { "name": "@omniroute/open-sse", - "version": "3.5.8", + "version": "3.5.9", "description": "Express SSE sidecar for OmniRoute — handles streaming, protocol translation, and provider orchestration", "type": "module", "main": "index.js", diff --git a/package-lock.json b/package-lock.json index d69590b1eb..c5cf7990dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20980,7 +20980,7 @@ }, "open-sse": { "name": "@omniroute/open-sse", - "version": "3.5.8" + "version": "3.5.9" } } }