✨ 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_ordercolumn andPOST /api/combos/reorderendpoint. Includes DB migration020_combo_sort_order.sqland 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.failedevents (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 agpt-4fallback (#1098, closes #1094) - Docker EXDEV Fix:
build-next-isolated.mjsnow falls back fromfs.rename()tocp/rmwhen Docker buildx raisesEXDEV(cross-device link), unblocking the Docker image publish workflow (#1097) - macOS CLI Path Resolution:
cliRuntime.tsresolves symlink parents withfs.realpath()to handle macOS/var→/private/varchains, preventing falsesymlink_escaperejections (#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)
What's Changed
- fix(stream): surface Responses failures and preserve upstream model by @yart in #1098
- fix(docker): handle EXDEV in isolated build by @rdself in #1097
- Fix request log detail token layout by @rdself in #1096
- Add persistent combo ordering and reorder sidebar items by @rdself in #1095
- chore(release): v3.5.9 — combo ordering, stream failures, Docker build fix by @diegosouzapw in #1102
New Contributors
Full Changelog: v3.5.8...v3.5.9