Skip to content

merge: DurinDoor 2.2.0 release - #360

Merged
bloodf merged 1 commit into
mainfrom
release/2.2.0
Jul 20, 2026
Merged

merge: DurinDoor 2.2.0 release#360
bloodf merged 1 commit into
mainfrom
release/2.2.0

Conversation

@bloodf

@bloodf bloodf commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Summary

Type

  • chore: — release merge

Breaking changes

  • No
  • Yes — describe below:

Testing

  • What was tested: pinned-Node CI checks (commitlint, ✨ Lint & Build, 🧪 Vitest + No-regression gate) on PR chore(release): v2.2.0 — campaign integration + hand-port fixes #359, all green. Local gate (node /tmp/gate.mjs) confirmed 6072 tests with 5 pre-existing baseline failures and 0 novel regressions.
  • Commands run: PR chore(release): v2.2.0 — campaign integration + hand-port fixes #359 CI; local cd tests && npm run test:ci; node /tmp/gate.mjs.
  • Evidence: PR chore(release): v2.2.0 — campaign integration + hand-port fixes #359 checks all green; campaign reports at '/home/cortexos/.omp/agent/sessions/-Developer-github.com-bloodf-durindoor/2026-07-20T00-26-30-784Z_019f7cea-ce00-7000-8304-4bfada25617f/local/release-cutover-plan.md', '/home/cortexos/.omp/agent/sessions/-Developer-github.com-bloodf-durindoor/2026-07-20T00-26-30-784Z_019f7cea-ce00-7000-8304-4bfada25617f/local/release-cutover-0709-report.md', '/home/cortexos/.omp/agent/sessions/-Developer-github.com-bloodf-durindoor/2026-07-20T00-26-30-784Z_019f7cea-ce00-7000-8304-4bfada25617f/local/release-cutover-0710-0713-report.md', '/home/cortexos/.omp/agent/sessions/-Developer-github.com-bloodf-durindoor/2026-07-20T00-26-30-784Z_019f7cea-ce00-7000-8304-4bfada25617f/local/release-cutover-final-merges-report.md'.

Checklist

  • Tests added or updated for behavioral changes
  • No new dependencies without explicit justification
  • Conventional commit used
  • CHANGELOG updated (# 2.2.0 section)
  • No secrets, keys, credentials, or tokens committed

Release v2.2.0 highlights

  • AgentRouter runtime transports (claude + openai) with per-model targetFormat.
  • AliCode Intl compatible-mode endpoint fix.
  • xAI Grok CLI proactive token refresh (absolute expiresAt).
  • Model capability overrides migration (SCHEMA_VERSION bumped 10 → 11).
  • Auto-combo engine + resolver + compression preview.
  • Catalog allowlist tooling.
  • Codex review followups.
  • MCP transport race hardening.
  • 276 local-worktree gitlinks untracked (submodule-aware tooling fix).
  • Wrong open-sse/AGENTS.md reference in CLAUDE.md corrected to point at root AGENTS.md.
  • Per-provider followups: zai/glm-5 max_tokens clamp (#2428), better-sqlite3 lazy loading, Kiro listAvailableProfiles fix, MiniMax-M3 targetFormat removal, Kiro region guard.

Notes

  • feat/durindoor-fixes-ports and feat/durindoor-full-sync were NOT wholesale-merged (full-sync would have wiped dev's MCP/compression/quota/icons/skills evolution). Three hand-port commits landed the genuine fix-class changes (agentrouter transports, AliCode endpoint, xai expiresAt).
  • Reviewer resolution: 5 chatgpt-codex-connector review threads all replied + resolved on PR chore(release): v2.2.0 — campaign integration + hand-port fixes #359 (P1 gitlinks fixed in fb5d20bd9; P2 CLAUDE.md pointer fixed in 839cc2065; remaining 3 P2 concerns tracked as post-release follow-ups: Gemini STT IDs, apiKeyUsageTotals TABLES ordering, capability-override runtime wiring).

@bloodf
bloodf merged commit 9d5d83e into main Jul 20, 2026
3 checks passed
@bloodf
bloodf deleted the release/2.2.0 branch July 20, 2026 21:03

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 69f165a558

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +51 to +53
{ id: "gemini-2.5-pro-stt", name: "Gemini 2.5 Pro (Best)", params: ["language","prompt"], kind: "stt" },
{ id: "gemini-2.5-flash-stt", name: "Gemini 2.5 Flash", params: ["language","prompt"], kind: "stt" },
{ id: "gemini-2.5-flash-lite-stt", name: "Gemini 2.5 Flash Lite (Cheapest)", params: ["language","prompt"], kind: "stt" },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep Gemini STT IDs provider-facing

When a user selects any of these STT rows, the request reaches handleSttCore with this catalog id unchanged; transcribeGemini() builds the upstream URL as ${cfg.baseUrl}/${model}:generateContent (open-sse/handlers/sttCore.js:110). Google documents audio transcription through normal Gemini audio-understanding model ids (docs), and this commit renamed only the catalog ids without adding an upstream mapping, so the default STT selection will call /models/gemini-2.5-pro-stt:generateContent and fail upstream. Keep the displayed id equal to the provider id or add a mapping that the STT path honors.

Useful? React with 👍 / 👎.

category: "apikey",
transport: {
baseUrl: "https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",
baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep alicode-intl on its coding endpoint

alicode-intl is still treated elsewhere as the Coding Plan provider: the connection test path and model discovery configs continue to hardcode coding-intl.dashscope.aliyuncs.com (src/app/api/providers/[id]/test/testUtils.js:737-739, src/app/api/providers/[id]/models/providerModelsConfig.js:219-224), while alibaba already covers the standard dashscope-intl endpoint. Alibaba's base-url docs state API keys must match their billing plan/base URL (docs), so existing Coding Plan keys saved under this provider will now be sent to the standard DashScope host for chat and fail auth; update the provider identity/code paths consistently or keep the coding-plan base here.

Useful? React with 👍 / 👎.

// OpenAI transport does not require Claude spoof headers; keep an empty
// headers object so DefaultExecutor does not try to fall back to the
// primary transport's headers and break the cookie-shape request.
headers: {},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add OpenAI transport auth without Claude overlay

For AgentRouter requests routed to this OpenAI transport, DefaultExecutor.buildHeaders() uses rt?.auth || AUTH_DESCRIPTORS[this.provider] (open-sse/executors/default.js:400). Because this transport defines no auth, any prior Claude Code request that populated the global Claude header cache makes the OpenAI /v1/chat/completions call run the provider-level claudeOverlay hook and receive Anthropic/Claude CLI identity headers, despite the comment saying this endpoint should not inherit Claude spoof headers. Give this runtime transport its own x-api-key auth descriptor without the Claude hook.

Useful? React with 👍 / 👎.

Comment thread src/lib/db/schema.js
Comment on lines +236 to +240
apiKeyUsageTotals: {
columns: {
apiKeyId: "TEXT PRIMARY KEY",
totalTokens: "INTEGER DEFAULT 0",
totalCost: "REAL DEFAULT 0",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the API-key totals table shape

On fresh databases, migration 001 builds tables from TABLES before migration 006 runs, and this second apiKeyUsageTotals entry overrides the earlier definition that included REFERENCES apiKeys(id) ON DELETE CASCADE and NOT NULL constraints. Fresh installs therefore create a different published table shape, so deleteApiKey() removes only the API-key row and leaves stale usage totals behind, while upgraded installs still cascade. Keep a single definition matching the migration shape or add an explicit migration for the intended constraint change.

Useful? React with 👍 / 👎.

* Either a "provider/model" string or an object with provider/model fields.
* @returns {Promise<{ provider: string | null, model: string | null, maxOutputTokens: number | null }>}
*/
export async function getResolvedModelCapabilities(input) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Wire capability overrides into chat dispatch

modelCapabilityOverrides are never applied on the request path: the only references to this resolver are its own exports, while chat dispatch still gets caps from loadCustomCapabilities() and then handleChatCore reads modelCapabilities.maxOutput (not this helper's maxOutputTokens). As a result, rows saved in the new table cannot change max-token clamps or thinking/vision decisions in production. Wire this resolver into loadCustomCapabilities/chat dispatch and return the existing capability shape.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant