From bc252ea80298d4879dc6b3c69585af1610d2c76f Mon Sep 17 00:00:00 2001 From: decolua Date: Thu, 16 Jul 2026 18:13:51 +0700 Subject: [PATCH] # v0.5.35 (2026-07-16) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Features - **xAI**: Grok Imagine video generation (`/v1/videos`) + CLI - **CLI tools**: Grok Build setup — writes `[model.9router]` to `~/.grok/config.toml` - **GitHub Copilot**: route Claude models through Copilot's native `/v1/messages` - **Kiro**: add GPT-5.6 model family (#2596) - **RTK**: `X-9Router-Token-Saver` header to bypass token savers per request - **Providers**: quota visibility settings - **Translator**: drop temperature for all Claude models - **i18n**: Thai (th) + Persian (fa) translations / README ## Fixes - **Providers**: bulk-add API keys no longer overwrite existing keys (gap-fill `Key N`) - **Anthropic**: lowercase `anthropic-version` header to prevent duplication on `/v1/messages` - **Alicode-intl**: use DashScope compatible-mode endpoint so standard keys work - **Grok CLI**: align Grok Build with current subscription protocol (#2590) - **Grok CLI**: surface `expiresAt` so proactive token refresh fires (#2546) - **Kiro**: improve direct session cache reuse - **Models**: populate capabilities for live-catalog LLM models - **Models**: list compatible provider models in `/v1/models` - **Thinking**: send explicit `thinking:{type:adaptive}` alongside `output_config.effort` - **Translator**: strip `client_metadata` when converting openai-responses → openai ## Improvements - **Perf**: skip inactive background services on startup --- CHANGELOG.md | 30 +++++++++++++++++++++++++++--- cli/package.json | 2 +- open-sse/handlers/chatCore.js | 3 +++ package.json | 2 +- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12c1dd6c..fb1f69ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,38 @@ -# v0.5.31 (2026-07-13) +# v0.5.35 (2026-07-16) + +## Features +- **xAI**: Grok Imagine video generation (`/v1/videos`) + CLI +- **CLI tools**: Grok Build setup — writes `[model.9router]` to `~/.grok/config.toml` +- **GitHub Copilot**: route Claude models through Copilot's native `/v1/messages` +- **Kiro**: add GPT-5.6 model family (#2596) +- **RTK**: `X-9Router-Token-Saver` header to bypass token savers per request +- **Providers**: quota visibility settings +- **Translator**: drop temperature for all Claude models +- **i18n**: Thai (th) + Persian (fa) translations / README ## Fixes -- **Providers**: bulk-add API keys no longer overwrite existing keys. Auto-generated `Key N` names are now gap-filled against existing connection names (and earlier entries in the same batch), so a generated name never collides with a saved one. Previously the bulk-add modal named keys by paste-line index, blind to existing names, and the backend upserts apikey connections by name — so a colliding generated name silently replaced an existing key instead of inserting a new one. Custom `name|apiKey` lines and Cloudflare `name|apiKey|accountId` lines get the same collision-free numbering. +- **Providers**: bulk-add API keys no longer overwrite existing keys (gap-fill `Key N`) +- **Anthropic**: lowercase `anthropic-version` header to prevent duplication on `/v1/messages` +- **Alicode-intl**: use DashScope compatible-mode endpoint so standard keys work +- **Grok CLI**: align Grok Build with current subscription protocol (#2590) +- **Grok CLI**: surface `expiresAt` so proactive token refresh fires (#2546) +- **Kiro**: improve direct session cache reuse +- **Models**: populate capabilities for live-catalog LLM models +- **Models**: list compatible provider models in `/v1/models` +- **Thinking**: send explicit `thinking:{type:adaptive}` alongside `output_config.effort` +- **Translator**: strip `client_metadata` when converting openai-responses → openai + +## Improvements +- **Perf**: skip inactive background services on startup + +## Docs +- README: Persian YouTube tutorial # v0.5.30 (2026-07-10) ## Features - **Perplexity**: add Agent API provider (#2492) - **Grok CLI**: add Grok CLI / Grok Build provider with OAuth device-code flow (#2502) -- **CLI tools**: add Grok Build setup — writes `[model.9router]` custom model to `~/.grok/config.toml` - **Featherless**: add OpenAI-compatible provider presets - **SearXNG**: configure endpoint via SEARXNG_URL env (#2499) - **Providers**: add max thinking level for gpt-5.6-sol (#2500) diff --git a/cli/package.json b/cli/package.json index ac2196fd..d7fd2054 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "9router", - "version": "0.5.31", + "version": "0.5.35", "description": "9Router CLI - Start and manage 9Router server", "bin": { "9router": "./cli.js" diff --git a/open-sse/handlers/chatCore.js b/open-sse/handlers/chatCore.js index 594958e8..47190acf 100644 --- a/open-sse/handlers/chatCore.js +++ b/open-sse/handlers/chatCore.js @@ -210,6 +210,9 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred } } else if (tokenSaverEnabled && headroomEnabled) log?.warn?.("HEADROOM", `skipped: ${headroomDiagnostics.reason || "compression unavailable"}${headroomDiagnostics.endpoint ? ` (${headroomDiagnostics.endpoint})` : ""}`); + // Token-saver flags accumulator for the single "⚙" log line below. + const xf = []; + // Caveman: inject terse-style system prompt if (tokenSaverEnabled && cavemanEnabled && cavemanLevel) { injectCaveman(translatedBody, finalFormat, cavemanLevel); diff --git a/package.json b/package.json index 9f714c29..ba2170c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "9router-app", - "version": "0.5.31", + "version": "0.5.35", "description": "9Router web dashboard", "private": true, "scripts": {