diff --git a/CHANGELOG.md b/CHANGELOG.md index da6b2c05..39b3010c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +# v0.5.69 (2026-09-05) + +## Features +- **Codex**: add GPT 6.0 Astra (`gpt-6-astra`) with vision, thinking and search capabilities +- **Usage**: add Claude Fable quota tracker support with weekly window normalization (`weekly fable (7d)`) +- **Dashboard**: group Antigravity Gemini and Claude quotas in Quota Tracker, prune stale hidden keys +- **OpenCode Go**: add `muse-spark-1.3-contributor` model and support parallel tool calls on Responses path (#3819) +- **Providers & Models**: align CodeBuddy-CN catalog/capabilities with server config; add GPT-5.6 Sol, Terra, Luna image aliases on Codex (#3806); refresh Qoder catalog with capability mapping and image pass-through +- **CLI tools**: replace Copilot MITM with VS Code extension setup guide +- **Gemini**: persist and replay `thoughtSignature` scoped by session namespace + +## Fixes +- **Claude**: normalize adaptive auto effort (`output_config.effort`) (#3792) +- **Antigravity**: prevent Google anti-abuse rate limits during multi-account refresh (#3813) +- **Anthropic-compatible**: forward Claude beta flags to nodes fronting Anthropic (#3797) +- **Dashboard**: dynamic mode label for local/remote detection (#3801) +- **Codex**: format reset credit API errors cleanly (#3778) +- **Security**: guard cowork MCP tools probe against SSRF (#3783) +- **OpenCode Go**: track OpenCode Go quota (#3791) and send stable session headers (#3800) +- **Logger**: suppress noisy background token refresh logs +- **CLI**: export packed `.tgz` directly into workspace root instead of parent directory + # v0.5.65 (2026-09-03) ## Features diff --git a/cli/package.json b/cli/package.json index d5776b4e..db516ac4 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "9router", - "version": "0.5.65", + "version": "0.5.69", "description": "9Router CLI - Start and manage 9Router server", "bin": { "9router": "./cli.js" @@ -16,7 +16,7 @@ "scripts": { "dev": "nodemon -I --watch cli.js --watch src --watch hooks --ext js,json cli.js", "build": "node scripts/build-cli.js", - "pack:cli": "npm run build && npm pack --pack-destination ../..", + "pack:cli": "npm run build && npm pack --pack-destination ..", "publish:cli": "npm run build && npm publish", "postinstall": "node hooks/postinstall.js", "prepublishOnly": "npm run build" diff --git a/open-sse/providers/capabilities.js b/open-sse/providers/capabilities.js index 7e1e757b..a9f8745a 100644 --- a/open-sse/providers/capabilities.js +++ b/open-sse/providers/capabilities.js @@ -154,6 +154,7 @@ export const PROVIDER_CAPABILITIES = { "deepseek-ai/deepseek-v4-flash": { reasoning: true, thinkingFormat: "openai", contextWindow: 1000000, maxOutput: 65536 }, }, "codex": { + "gpt-6-astra": { vision: true, reasoning: true, search: true, thinkingFormat: "openai", contextWindow: 272000, maxOutput: 128000 }, "gpt-5.6-sol": CODEX_GPT_56_SOL_CAPS, "gpt-5.6-sol-review": CODEX_GPT_56_SOL_CAPS, "gpt-5.6-terra": CODEX_GPT_56_DEFAULT_CAPS, @@ -283,6 +284,9 @@ export const PATTERN_CAPABILITIES = [ { pattern: "*gemma*", caps: { vision: true, contextWindow: 128000 } }, { pattern: "*nanobanana*", caps: { vision: true, imageOutput: true } }, + // ── OpenAI GPT-6.x (vision + thinking + web search) ────────────── + { pattern: "*gpt-6*", caps: { vision: true, reasoning: true, search: true, thinkingFormat: "openai", contextWindow: 272000, maxOutput: 128000 } }, + // ── OpenAI GPT-5.x (vision + thinking + web search) ────────────── { pattern: "*gpt-5*image*", caps: { imageOutput: true } }, { pattern: "*gpt-5*codex*", caps: { reasoning: true, search: true, thinkingFormat: "openai", contextWindow: 400000, maxOutput: 128000 } }, diff --git a/open-sse/providers/pricing.js b/open-sse/providers/pricing.js index 7cc302ff..7a7a0019 100644 --- a/open-sse/providers/pricing.js +++ b/open-sse/providers/pricing.js @@ -53,6 +53,7 @@ export const MODEL_PRICING = { "gpt-5.6-luna": { input: 1.00, output: 6.00, cached: 0.10, reasoning: 6.00, cache_creation: 1.00 }, "gpt-5.6-terra": { input: 2.50, output: 15.00, cached: 0.25, reasoning: 15.00, cache_creation: 2.50 }, "gpt-5.6-sol": { input: 5.00, output: 30.00, cached: 0.50, reasoning: 30.00, cache_creation: 5.00 }, + "gpt-6-astra": { input: 5.00, output: 30.00, cached: 0.50, reasoning: 30.00, cache_creation: 5.00 }, "o1": { input: 15.00, output: 60.00, cached: 7.50, reasoning: 90.00, cache_creation: 15.00 }, "o1-mini": { input: 3.00, output: 12.00, cached: 1.50, reasoning: 18.00, cache_creation: 3.00 }, diff --git a/open-sse/providers/registry/codex.js b/open-sse/providers/registry/codex.js index 427c47a4..1909fe97 100644 --- a/open-sse/providers/registry/codex.js +++ b/open-sse/providers/registry/codex.js @@ -45,6 +45,7 @@ export default { }, }, models: [ + { id: "gpt-6-astra", name: "GPT 6.0 Astra" }, { id: "gpt-5.6-sol", name: "GPT 5.6 Sol" }, { id: "gpt-5.6-sol-review", name: "GPT 5.6 Sol Review", upstreamModelId: "gpt-5.6-sol", quotaFamily: "review" }, { id: "gpt-5.6-terra", name: "GPT 5.6 Terra" }, diff --git a/open-sse/providers/thinkingLevels.js b/open-sse/providers/thinkingLevels.js index 8b2d6ead..7cc1b28f 100644 --- a/open-sse/providers/thinkingLevels.js +++ b/open-sse/providers/thinkingLevels.js @@ -35,6 +35,7 @@ const CODEX_GPT_5_6_LEVELS = ["none", "minimal", "low", "medium", "high", "xhigh // Model-name pattern overrides (glob, first match wins) — more precise than format default. const PATTERN_THINKING = [ + { provider: "codex", pattern: "*gpt-6*", levels: CODEX_GPT_5_6_LEVELS }, { provider: "codex", pattern: "*gpt-5.6-sol*", levels: [...CODEX_GPT_5_6_LEVELS, "ultra"] }, { provider: "codex", pattern: "*gpt-5.6-terra*", levels: [...CODEX_GPT_5_6_LEVELS, "ultra"] }, { provider: "codex", pattern: "*gpt-5.6-luna*", levels: CODEX_GPT_5_6_LEVELS }, diff --git a/package.json b/package.json index b2192e15..80f6d46b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "9router-app", - "version": "0.5.65", + "version": "0.5.69", "description": "9Router web dashboard", "private": true, "scripts": { diff --git a/tests/unit/capabilities.test.js b/tests/unit/capabilities.test.js index ac544d47..3482a2c8 100644 --- a/tests/unit/capabilities.test.js +++ b/tests/unit/capabilities.test.js @@ -62,4 +62,15 @@ describe("getCapabilitiesForModel", () => { expect(getCapabilitiesForModel("kiro", "gpt-5.6-luna-agentic")).toMatchObject(kiroGpt56Expected); expect(getCapabilitiesForModel("kiro", "gpt-5.6-sol-thinking-agentic")).toMatchObject(kiroGpt56Expected); }); + + it("reports Codex GPT 6.0 Astra as a vision and thinking capable model", () => { + expect(getCapabilitiesForModel("codex", "gpt-6-astra")).toMatchObject({ + vision: true, + reasoning: true, + search: true, + thinkingFormat: "openai", + contextWindow: 272000, + maxOutput: 128000, + }); + }); });