diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e86bae56b..18ed2b6fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,7 @@ --- -## [3.8.13] — Unreleased - -_Development cycle in progress — entries are added as work merges into `release/v3.8.13` and finalized by the release flow._ +## [3.8.13] — 2026-06-06 ### ✨ New Features @@ -33,6 +31,27 @@ _Development cycle in progress — entries are added as work merges into `releas - **fix(sse):** expose the Claude (`claude-opus-4-6-thinking`, `claude-sonnet-4-6`) and Gemini budget tiers (`gemini-3.1-pro-{high,low}`, `gemini-3.5-flash-{low,extra-low}`) in the Antigravity catalog — they are user-callable on the Antigravity OAuth backend (agy parity), correcting an earlier assumption that Claude had been removed. ([#3303](https://github.com/diegosouzapw/OmniRoute/pull/3303), discussion #3184 — thanks @diegosouzapw) - **fix(catalog):** compute a combo's `context_length` from the known targets only — a single target with unknown context no longer collapses the whole combo to `undefined`; also accepts live `{id, contextLength}` model entries in the opencode-provider helper (follow-up to #3298). ([#3304](https://github.com/diegosouzapw/OmniRoute/pull/3304) — thanks @herjarsa / @diegosouzapw) +### 📝 Maintenance + +- **test(catalog):** align the Antigravity preview-alias catalog test with the #3303 budget tiers — asserts the restored Claude/Gemini tiers are surfaced, locking in the behavior so a future tier change can't silently drop them again (thanks @diegosouzapw) +- **docs:** rename the `resolve-issues` skill references to `review-issues` across the docs/skill surfaces, matching the renamed governance skill (thanks @diegosouzapw) +- **chore(release):** open the v3.8.13 development cycle (version bump + cycle bookkeeping) and finalize this changelog (thanks @diegosouzapw) + +### 🙌 Contributors + +Thanks to everyone whose work landed in v3.8.13: + +| Contributor | PRs / Issues | +| --- | --- | +| [@zhiru](https://github.com/zhiru) | #3300, #3306, #3307 / #3310, #3309, #3301, #3311 | +| [@oyi77](https://github.com/oyi77) | #3292 (closes #3070) | +| [@onizukashonan14-png](https://github.com/onizukashonan14-png) | #3296 | +| [@uniQta](https://github.com/uniQta) | #3290, #3295 | +| [@wilsonicdev](https://github.com/wilsonicdev) | #3297 | +| [@herjarsa](https://github.com/herjarsa) | #3298, #3304 | +| [@mikmaneggahommie](https://github.com/mikmaneggahommie) | reported the Completions.me rickroll (discussion #3293) | +| [@diegosouzapw](https://github.com/diegosouzapw) | maintainer — #3299, #3302, #3303; co-author on #3292 / #3306 / #3298 / #3304 / #3309 | + --- ## [3.8.12] — 2026-06-06 diff --git a/docs/frameworks/MCP-SERVER.md b/docs/frameworks/MCP-SERVER.md index 4c1bb66a97..3e5790fb91 100644 --- a/docs/frameworks/MCP-SERVER.md +++ b/docs/frameworks/MCP-SERVER.md @@ -10,7 +10,7 @@ lastUpdated: 2026-05-30 > > Source of truth: `open-sse/mcp-server/schemas/tools.ts` (30 tools) + `open-sse/mcp-server/tools/memoryTools.ts` (3 tools) + `open-sse/mcp-server/tools/skillTools.ts` (4 tools) + `open-sse/mcp-server/tools/notionTools.ts` (6 tools). Tool registration and scope wiring lives in `open-sse/mcp-server/server.ts`. -![MCP tool inventory (43 tools by category)](../diagrams/exported/mcp-tools-37.svg) +![MCP tool inventory (43 tools by category)](../diagrams/exported/mcp-tools-43.svg) > Source: [diagrams/mcp-tools-43.mmd](../diagrams/mcp-tools-43.mmd) (regenerate via `npm run docs:render-diagrams`). diff --git a/eslint.config.mjs b/eslint.config.mjs index 3a29e83b5c..3a99309a10 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -72,6 +72,10 @@ const eslintConfig = [ // Dependencies "node_modules/**", ".worktrees/**", + // Nested git worktrees created by review/resolve skills live under + // .claude/ (gitignored). They hold other sessions' in-progress work and + // their files move mid-scan, so never lint them from the main checkout. + ".claude/**", ".omnivscodeagent/**", // VS Code extension and its large test fixtures "vscode-extension/**", diff --git a/open-sse/handlers/responseSanitizer.ts b/open-sse/handlers/responseSanitizer.ts index 3b3518d474..80dec34e6e 100644 --- a/open-sse/handlers/responseSanitizer.ts +++ b/open-sse/handlers/responseSanitizer.ts @@ -642,7 +642,7 @@ function sanitizeResponsesStreamingOutputItem(item: unknown): JsonRecord | null text: collapseExcessiveNewlines(toString(partRecord.text) || ""), }; }) - .filter((part): part is JsonRecord => part !== null) + .filter((part): part is NonNullable => part !== null) : []; return { diff --git a/tests/unit/combo-custom-provider-resolution.test.ts b/tests/unit/combo-custom-provider-resolution.test.ts index ae8a30bad0..2f8e781a31 100644 --- a/tests/unit/combo-custom-provider-resolution.test.ts +++ b/tests/unit/combo-custom-provider-resolution.test.ts @@ -165,7 +165,7 @@ test("custom provider auth lookup search pool maps alias prefixes to internal pr ); assert.match( authSrc, - /nodePrefix === provider \|\| nodePrefix === canonicalProvider \|\| nodePrefix === canonicalAlias/, + /nodePrefix === provider\s*\|\|\s*nodePrefix === canonicalProvider\s*\|\|\s*nodePrefix === canonicalAlias/, "auth lookup should match provider node prefixes against the requested alias/canonical provider values" ); assert.match( diff --git a/tests/unit/t28-model-catalog-updates.test.ts b/tests/unit/t28-model-catalog-updates.test.ts index c046364d10..de6d68655a 100644 --- a/tests/unit/t28-model-catalog-updates.test.ts +++ b/tests/unit/t28-model-catalog-updates.test.ts @@ -28,10 +28,14 @@ test("T28: antigravity static catalog exposes client-visible Gemini preview IDs" const staticIds = (getStaticModelsForProvider("antigravity") || []).map((m) => m.id); assert.ok(staticIds.includes("gemini-3-pro-preview")); - assert.ok(!staticIds.includes("gemini-3.1-pro-low")); assert.ok(staticIds.includes("gemini-3-flash-preview")); + // #3303 (agy parity, discussion #3184): the Gemini budget tiers ARE + // client-visible on the Antigravity OAuth backend — restoring tiers an + // earlier assumption had wrongly hidden. + assert.ok(staticIds.includes("gemini-3.1-pro-low")); + assert.ok(staticIds.includes("gemini-3.1-pro-high")); + // Legacy aliases that were never client-visible stay absent. assert.ok(!staticIds.includes("gemini-3-pro-high")); - assert.ok(!staticIds.includes("gemini-3.1-pro-high")); assert.ok(!staticIds.includes("gemini-claude-sonnet-4-5")); assert.ok(!staticIds.includes("gemini-claude-sonnet-4-5-thinking")); assert.ok(!staticIds.includes("gemini-claude-opus-4-5-thinking")); diff --git a/tests/unit/t31-t33-t34-t38-model-specs.test.ts b/tests/unit/t31-t33-t34-t38-model-specs.test.ts index ad455dec5c..a5926182e9 100644 --- a/tests/unit/t31-t33-t34-t38-model-specs.test.ts +++ b/tests/unit/t31-t33-t34-t38-model-specs.test.ts @@ -20,8 +20,11 @@ test("T31: antigravity static catalog exposes client-visible Gemini preview IDs" // still accepts its internal model identifiers. const staticIds = (getStaticModelsForProvider("antigravity") || []).map((m) => m.id); assert.ok(staticIds.includes("gemini-3-pro-preview")); - assert.ok(!staticIds.includes("gemini-3.1-pro-low")); - assert.ok(!staticIds.includes("claude-sonnet-4-6")); + // #3303 (agy parity, discussion #3184): the Gemini + Claude budget tiers ARE + // client-visible on the Antigravity OAuth backend (Claude was never removed). + assert.ok(staticIds.includes("gemini-3.1-pro-low")); + assert.ok(staticIds.includes("claude-sonnet-4-6")); + // The legacy cloaked Claude aliases remain absent. assert.ok(!staticIds.includes("gemini-claude-sonnet-4-5-thinking")); assert.ok(!staticIds.includes("gemini-claude-opus-4-5-thinking")); });