From 2ba46a622b4fca78a585c8693636603b91f96bf1 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Mon, 9 Mar 2026 08:49:13 -0300 Subject: [PATCH] =?UTF-8?q?feat(release):=20v2.0.17=20=E2=80=94=20Antigrav?= =?UTF-8?q?ity=20streaming=20fix=20+=20OpenCode=20integration=20+=20Electr?= =?UTF-8?q?on=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix(streaming): keep Gemini/Antigravity text block open across chunks (#253) Resolves Claude Code rendering each streaming delta on a separate line. The content_block is now kept open between chunks (openTextBlockIdx state) and only closed at finishReason or on block-type switch. - feat(agents): Download opencode.json button (discussion #162) Dashboard › Agents shows a Download opencode.json button when opencode is detected. Fetches /v1/models and generates a ready-to-use config. - fix(electron-ci): use macos-15-intel runner (replaces deprecated macos-13) - fix(electron-ci): sync electron/package.json version before build - fix(electron-ci): remove duplicate arm64 pattern from release assets --- CHANGELOG.md | 20 ++++++++++++++++++++ README.md | 18 +++++++++--------- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba7a9b898e..cfe07cc7ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [2.0.17] — 2026-03-09 + +> ### 🐛 Bug Fixes + 🔌 Integrations + +### 🐛 Bug Fixes + +- **Antigravity/Gemini streaming broken in Claude Code** — Fixed `gemini-to-claude.ts` response translator that was emitting `content_block_start` + `content_block_stop` on **every single streaming chunk**. Claude Code interpreted each block as a separate element, rendering each text delta on its own line. Fix: `openTextBlockIdx` state variable keeps the text block open across chunks and only closes it when the block type changes or at `finishReason`. Fixes #253. + +### 🔌 New Integrations + +- **OpenCode native integration** — Agents dashboard now shows a **"Download opencode.json"** button when `opencode` is detected as installed. Clicking it fetches all available models from `/v1/models`, auto-fills `baseURL` from your current OmniRoute instance, and downloads a ready-to-use `opencode.json` config file. Inspired by @Alph4d0g's plugin (discussion #162). + +### 🔧 CI Improvements + +- **Electron macOS Intel CI fixed** — Updated CI runner from deprecated `macos-13` to `macos-15-intel` (GitHub's new Intel x64 runner, GA since April 2025). Fixes all macOS Intel build failures. +- **Electron binary version sync** — Added step to sync `electron/package.json` version before build so binaries are named correctly (`OmniRoute-2.0.17.dmg` instead of `OmniRoute-2.0.13.dmg`). +- **Release asset deduplication** — Removed duplicate `*-arm64.dmg` pattern from release files; added `fail_on_unmatched_files: false` for optional `.blockmap` files. + +--- + ## [2.0.16] — 2026-03-08 > ### 🐛 Bug Fixes + 🔧 CI Hardening diff --git a/README.md b/README.md index 9022c12d5a..3f1e64d9e7 100644 --- a/README.md +++ b/README.md @@ -891,15 +891,15 @@ OmniRoute v2.0 is built as an operational platform, not just a relay proxy. ### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP -| Feature | What It Does | -| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing | -| 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** | -| 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw + 9 more), process spawner, `/api/acp/agents` endpoint | -| 🤖 **ACP Agents Dashboard** | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool | -| 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator | -| 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID | -| 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart | +| Feature | What It Does | +| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing | +| 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** | +| 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw + 9 more), process spawner, `/api/acp/agents` endpoint | +| 🤖 **ACP Agents Dashboard** | Debug › Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool. **OpenCode** users get a "Download opencode.json" button that auto-generates a ready-to-use config with all available models. | +| 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator | +| 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID | +| 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart | ### 🤖 Agent & Protocol Operations (v2.0) diff --git a/package-lock.json b/package-lock.json index 54aa319014..57fa621b88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "omniroute", - "version": "2.0.16", + "version": "2.0.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "omniroute", - "version": "2.0.16", + "version": "2.0.17", "hasInstallScript": true, "license": "MIT", "workspaces": [ diff --git a/package.json b/package.json index 990ec3508f..61252ab0d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omniroute", - "version": "2.0.16", + "version": "2.0.17", "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": {