diff --git a/CHANGELOG.md b/CHANGELOG.md index 3271628810..70a9a23333 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [2.3.2] — 2026-03-12 + +> ### Claude 1M Context, Postinstall Fix, New Models & OAuth Remote Docs + +### ✨ New Features + +- **Claude 1M extended context window support** — Use `[1m]` suffix on Claude model names (e.g. `claude-sonnet-4-6[1m]`) to activate Anthropic's 1M token context via the `Anthropic-Beta: context-1m-2025-08-07` header. Supported: `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-sonnet-4-5`, `claude-sonnet-4`. (PR #311 — @DavyMassoneto) +- **New provider models** — Added `coder-model` (Qwen3.5) to Qwen and `iflow-rome-30ba3b`, `qwen3-max`, `qwen3-vl-plus`, `kimi-k2-0905`, `deepseek-v3.2`, `qwen3-235b` variants to iFlow; `kimi-for-coding` to Kimi. (PR #326 — @nyatoru) + +### 🐛 Bug Fixes + +- **Postinstall native binary regression fix** — PR #313's `process.exit(1)` caused npm to rollback the full package on rebuild failure. New approach copies the already-compiled binary from root `node_modules/` instead of rebuilding inside `app/` (which is a no-op). New `native-binary-compat.mjs` reads ELF/Mach-O/PE headers for reliable platform detection. (PR #327 — @ardaaltinors, fixes #321) +- **README: English Remote OAuth guide added** — The OAuth Remote Server guide existed only in Portuguese. English version now appears first; PT moved to a collapsible section. Fixes the 🔗 anchor `#oauth-on-a-remote-server` referenced from `OAuthModal.tsx` since v2.3.1. (PR #329, fixes #318) + +### 🧪 Tests + +- Added 3 unit tests for `parseModel([1m])` suffix parsing (`model-parse.test.mjs`) + +--- + ## [2.3.1] — 2026-03-11 > ### TypeScript Fixes & UI Polish diff --git a/package-lock.json b/package-lock.json index ec4214844c..20ba67265c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "omniroute", - "version": "2.3.1", + "version": "2.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "omniroute", - "version": "2.3.1", + "version": "2.3.2", "hasInstallScript": true, "license": "MIT", "workspaces": [ diff --git a/package.json b/package.json index c07f7503f4..ff8b65b6ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omniroute", - "version": "2.3.1", + "version": "2.3.2", "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": { diff --git a/tests/unit/model-parse.test.mjs b/tests/unit/model-parse.test.mjs new file mode 100644 index 0000000000..c1cbe50b8e --- /dev/null +++ b/tests/unit/model-parse.test.mjs @@ -0,0 +1,18 @@ +// [1m] extended context suffix — PR #311 (DavyMassoneto) +test("[1m] suffix: strips suffix and sets extendedContext=true", () => { + const result = parseModel("claude-sonnet-4-6[1m]"); + assert.strictEqual(result.model, "claude-sonnet-4-6"); + assert.strictEqual(result.extendedContext, true); +}); + +test("[1m] suffix: normal model has extendedContext=false", () => { + const result = parseModel("claude-sonnet-4-6"); + assert.strictEqual(result.model, "claude-sonnet-4-6"); + assert.strictEqual(result.extendedContext, false); +}); + +test("[1m] suffix: works with provider prefix", () => { + const result = parseModel("claude/claude-sonnet-4-6[1m]"); + assert.strictEqual(result.model, "claude-sonnet-4-6"); + assert.strictEqual(result.extendedContext, true); +});