From 8e785963cf64715528741ea05b9aa45459ad8552 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 27 Apr 2026 15:31:48 +0900 Subject: [PATCH] fix(model-capabilities): recognize current provider aliases Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/shared/model-capability-aliases.test.ts | 22 +++++++++++++++++++++ src/shared/model-capability-aliases.ts | 12 +++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/shared/model-capability-aliases.test.ts b/src/shared/model-capability-aliases.test.ts index b6f5b6641..83936169b 100644 --- a/src/shared/model-capability-aliases.test.ts +++ b/src/shared/model-capability-aliases.test.ts @@ -56,6 +56,28 @@ describe("model-capability-aliases", () => { }) }) + test("normalizes Kimi for Coding k2pb aliases to the snapshot ID", () => { + const result = resolveModelIDAlias("kimi-for-coding/k2pb") + + expect(result).toEqual({ + requestedModelID: "kimi-for-coding/k2pb", + canonicalModelID: "k2p5", + source: "exact-alias", + ruleID: "kimi-k2pb-alias", + }) + }) + + test("normalizes GitHub Copilot dotted Claude Opus aliases to the snapshot ID", () => { + const result = resolveModelIDAlias("github-copilot/claude-opus-4.7") + + expect(result).toEqual({ + requestedModelID: "github-copilot/claude-opus-4.7", + canonicalModelID: "claude-opus-4-7", + source: "exact-alias", + ruleID: "claude-opus-dotted-version-alias", + }) + }) + test("does not resolve prototype keys as aliases", () => { const result = resolveModelIDAlias("constructor") diff --git a/src/shared/model-capability-aliases.ts b/src/shared/model-capability-aliases.ts index fe7ef6b3b..7691c4683 100644 --- a/src/shared/model-capability-aliases.ts +++ b/src/shared/model-capability-aliases.ts @@ -32,6 +32,18 @@ const EXACT_ALIAS_RULES: ReadonlyArray = [ canonicalModelID: "gemini-3-pro-preview", rationale: "Legacy Gemini 3 tier suffixes still need to land on the canonical preview model.", }, + { + aliasModelID: "k2pb", + ruleID: "kimi-k2pb-alias", + canonicalModelID: "k2p5", + rationale: "Kimi for Coding exposes k2pb while the bundled capabilities snapshot uses the canonical k2p5 ID.", + }, + { + aliasModelID: "claude-opus-4.7", + ruleID: "claude-opus-dotted-version-alias", + canonicalModelID: "claude-opus-4-7", + rationale: "GitHub Copilot exposes Claude Opus 4.7 with dotted version syntax while the snapshot uses dashed syntax.", + }, ] const EXACT_ALIAS_RULES_BY_MODEL: ReadonlyMap = new Map(