From 8e15f0bdd8ab857723d77d7ba566d9f7042b81d7 Mon Sep 17 00:00:00 2001 From: decolua Date: Fri, 18 Sep 2026 18:09:32 +0700 Subject: [PATCH] # v0.5.79 (2026-09-18) ## Features - **Xiaomi MiMo**: merge MiMo Desktop support into `xiaomi-mimo` with dual auth (API key + Desktop/OAuth session), Preview models support, and encrypted-callback OAuth flow - **Claude Code**: add 1M-context toggle (`[1m]` marker) and drive `CLAUDE_CODE_AUTO_COMPACT_WINDOW` directly from the dashboard - **Models**: add DeepSeek-V4.1-Flash to DeepSeek provider, CodeBuddy-Intl, and Ollama (`deepseek-v4.1-flash:cloud`); enable `low`..`max` reasoning effort levels and vision capability for DeepSeek-V4.* - **i18n**: integrate Persian (fa) translation ## Fixes - **OpenCode / OpenCode Go**: resolve 403 `FreeTierError` and 429 rate limits with canonical session format, valid User-Agent, and stable upstream session reuse; force stream and declare `forceStream` for free-tier SSE aggregation; cloak decoy tools, normalize Muse Free tool choice, and strip prior reasoning items on Responses models; route Union Alpha via Messages API - **Kiro**: preserve underscores in tool names (`mcp__server__tool`) and restore client tool names in responses; use neutral placeholder for tool-result-only turns; forward tool-result images - **Stream**: report aborts after HTTP 200 in-band (per-format error frames) instead of closing silently - **Command Code**: preserve images and `reasoning_effort` on `/alpha/generate`; retry transient stream errors and avoid fake stop chunks; add Quota Tracker support - **Zed**: harden OAuth lifecycle (preserve `systemId`, renew proxy timeout), support live model resolution, and lower display priority in OAuth list - **Antigravity**: scope cached thought signatures to model family; strip Claude Code billing headers from system prompts; sanitize Hermes system identity - **Codex**: route bare `codex-auto-review` requests to the Codex provider (#4135) - **Auth**: do not cool down an account for request-scoped 4xx errors - **Usage**: improve DeepSeek credit balance display as currency credit instead of 0/total quota bar - **Model Catalog**: scope synced catalog to gateways and declare vision capabilities for DeepSeek V4.1-Flash IDs --- CHANGELOG.md | 20 +++++++++++++ cli/package.json | 2 +- open-sse/providers/pricing.js | 2 ++ open-sse/providers/registry/deepseek.js | 1 + package.json | 2 +- tests/__baseline__/providers-baseline.json | 34 ++++++++++++++++++++-- 6 files changed, 56 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2b6139d..0585de42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +# v0.5.79 (2026-09-18) + +## Features +- **Xiaomi MiMo**: merge MiMo Desktop support into `xiaomi-mimo` with dual auth (API key + Desktop/OAuth session), Preview models support, and encrypted-callback OAuth flow +- **Claude Code**: add 1M-context toggle (`[1m]` marker) and drive `CLAUDE_CODE_AUTO_COMPACT_WINDOW` directly from the dashboard +- **Models**: add DeepSeek-V4.1-Flash to DeepSeek provider, CodeBuddy-Intl, and Ollama (`deepseek-v4.1-flash:cloud`); enable `low`..`max` reasoning effort levels and vision capability for DeepSeek-V4.* +- **i18n**: integrate Persian (fa) translation + +## Fixes +- **OpenCode / OpenCode Go**: resolve 403 `FreeTierError` and 429 rate limits with canonical session format, valid User-Agent, and stable upstream session reuse; force stream and declare `forceStream` for free-tier SSE aggregation; cloak decoy tools, normalize Muse Free tool choice, and strip prior reasoning items on Responses models; route Union Alpha via Messages API +- **Kiro**: preserve underscores in tool names (`mcp__server__tool`) and restore client tool names in responses; use neutral placeholder for tool-result-only turns; forward tool-result images +- **Stream**: report aborts after HTTP 200 in-band (per-format error frames) instead of closing silently +- **Command Code**: preserve images and `reasoning_effort` on `/alpha/generate`; retry transient stream errors and avoid fake stop chunks; add Quota Tracker support +- **Zed**: harden OAuth lifecycle (preserve `systemId`, renew proxy timeout), support live model resolution, and lower display priority in OAuth list +- **Antigravity**: scope cached thought signatures to model family; strip Claude Code billing headers from system prompts; sanitize Hermes system identity +- **Codex**: route bare `codex-auto-review` requests to the Codex provider (#4135) +- **Auth**: do not cool down an account for request-scoped 4xx errors +- **Usage**: improve DeepSeek credit balance display as currency credit instead of 0/total quota bar +- **Model Catalog**: scope synced catalog to gateways and declare vision capabilities for DeepSeek V4.1-Flash IDs + # v0.5.75 (2026-09-10) ## Features diff --git a/cli/package.json b/cli/package.json index 58b9dfa8..3e658e63 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "9router", - "version": "0.5.75", + "version": "0.5.79", "description": "9Router CLI - Start and manage 9Router server", "bin": { "9router": "./cli.js" diff --git a/open-sse/providers/pricing.js b/open-sse/providers/pricing.js index 7a7a0019..d09452e2 100644 --- a/open-sse/providers/pricing.js +++ b/open-sse/providers/pricing.js @@ -111,6 +111,8 @@ export const MODEL_PRICING = { "deepseek-v3.2-chat": { input: 0.14, output: 0.28, cached: 0.0028, reasoning: 0.28, cache_creation: 0.14 }, "deepseek-v3.2-reasoner": { input: 0.14, output: 0.28, cached: 0.0028, reasoning: 0.28, cache_creation: 0.14 }, "deepseek-v4-flash": { input: 0.14, output: 0.28, cached: 0.0028, reasoning: 0.28, cache_creation: 0.14 }, + "deepseek-v4.1-flash": { input: 0.14, output: 0.28, cached: 0.0028, reasoning: 0.28, cache_creation: 0.14 }, + "deepseek-flash": { input: 0.14, output: 0.28, cached: 0.0028, reasoning: 0.28, cache_creation: 0.14 }, "deepseek-v4-pro": { input: 0.435, output: 0.87, cached: 0.003625, reasoning: 0.87, cache_creation: 0.435 }, // === GLM === diff --git a/open-sse/providers/registry/deepseek.js b/open-sse/providers/registry/deepseek.js index 2c3a3e73..997840e3 100644 --- a/open-sse/providers/registry/deepseek.js +++ b/open-sse/providers/registry/deepseek.js @@ -59,6 +59,7 @@ export default { { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" }, { id: "deepseek-v4-pro-max", name: "DeepSeek V4 Pro Max", upstreamModelId: "deepseek-v4-pro" }, { id: "deepseek-v4-pro-none", name: "DeepSeek V4 Pro No Thinking", upstreamModelId: "deepseek-v4-pro" }, + { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash" }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" }, { id: "deepseek-v4-flash-vision-exp", name: "DeepSeek V4 Flash Vision (Exp)" }, { id: "deepseek-chat", name: "DeepSeek V3.2 Chat" }, diff --git a/package.json b/package.json index 15b7eca7..a0f7ac88 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "9router-app", - "version": "0.5.75", + "version": "0.5.79", "description": "9Router web dashboard", "private": true, "scripts": { diff --git a/tests/__baseline__/providers-baseline.json b/tests/__baseline__/providers-baseline.json index 2dd09f55..89a3db64 100644 --- a/tests/__baseline__/providers-baseline.json +++ b/tests/__baseline__/providers-baseline.json @@ -44,6 +44,7 @@ }, "usage": { "quotaApiUrl": "https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels", + "quotaSummaryApiUrl": "https://daily-cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaSummary", "loadProjectApiUrl": "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist", "tokenUrl": "https://oauth2.googleapis.com/token" }, @@ -131,6 +132,9 @@ "HTTP-Referer": "https://cline.bot", "X-Title": "Cline" }, + "quirks": { + "clineEnvelope": true + }, "tokenUrl": "https://api.cline.bot/api/v1/auth/token", "refreshUrl": "https://api.cline.bot/api/v1/auth/refresh", "auth": { @@ -149,6 +153,9 @@ "HTTP-Referer": "https://cline.bot", "X-Title": "Cline" }, + "quirks": { + "clineEnvelope": true + }, "auth": { "combined": true, "header": "Authorization", @@ -241,6 +248,12 @@ "reasoningInject": { "scope": "all" }, + "quirks": { + "claudeSupportedToolTypes": [ + "web_search_20250305", + "web_search_20260209" + ] + }, "format": "openai", "transports": [ { @@ -438,6 +451,9 @@ "groq": { "baseUrl": "https://api.groq.com/openai/v1/chat/completions", "validateUrl": "https://api.groq.com/openai/v1/models", + "usage": { + "url": "https://api.groq.com/openai/v1/models" + }, "format": "openai" }, "hyperbolic": { @@ -571,7 +587,8 @@ "Anthropic-Beta": "claude-code-20250219,interleaved-thinking-2025-05-14" }, "quirks": { - "dropOutputConfig": true + "dropOutputConfig": true, + "requireClaudeToolType": true }, "reasoningInject": { "scope": "all" @@ -622,7 +639,8 @@ "Anthropic-Beta": "claude-code-20250219,interleaved-thinking-2025-05-14" }, "quirks": { - "dropOutputConfig": true + "dropOutputConfig": true, + "requireClaudeToolType": true }, "reasoningInject": { "scope": "all" @@ -709,6 +727,9 @@ "opencode-go": { "baseUrl": "https://opencode.ai/zen/go/v1/chat/completions", "headers": {}, + "usage": { + "url": "https://opencode.ai/zen/go/v1/usage" + }, "format": "openai", "transports": [ { @@ -746,7 +767,13 @@ "headers": { "x-opencode-client": "desktop" }, + "forceStream": true, "noAuth": true, + "quirks": { + "forceAutoToolChoiceModels": [ + "muse-spark-1.3-contributor-free" + ] + }, "format": "openai" }, "openrouter": { @@ -949,6 +976,7 @@ "HTTP-Referer": "https://endpoint-proxy.local", "X-Title": "Endpoint Proxy" }, + "forceStream": true, "format": "openai" }, "baidu": { @@ -1010,4 +1038,4 @@ }, "format": "openai" } -} +} \ No newline at end of file