refactor(migration): auto-upgrade claude-opus-4-5 and 4-6 to claude-opus-4-7

MODEL_VERSION_MAP now chains the legacy claude-opus-4-5 entry straight
to claude-opus-4-7 and adds an explicit claude-opus-4-6 to 4-7 bump
path, letting existing user configs upgrade on next load without an
intermediate 4-6 stop.

MODEL_TO_CATEGORY_MAP picks up claude-opus-4-7 as the canonical
unspecified-high model (prior 4-6 entry is covered by the chained
version map above, so legacy hardcoded configs still resolve).

Migration tests rewritten to reflect the chained 4-5 to 4-7 behavior
and the new 4-6 to 4-7 bump path, including the sidecar-union
scenario.
This commit is contained in:
YeonGyu-Kim
2026-04-17 14:52:02 +09:00
parent def44338ff
commit 4ca4c06698
6 changed files with 40 additions and 39 deletions
@@ -42,7 +42,7 @@ describe("migrations sidecar", () => {
JSON.stringify({
appliedMigrations: [
"model-version:openai/gpt-5.3-codex->openai/gpt-5.4",
"model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-6",
"model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-7",
],
}),
)
@@ -51,7 +51,7 @@ describe("migrations sidecar", () => {
expect(applied.size).toBe(2)
expect(applied.has("model-version:openai/gpt-5.3-codex->openai/gpt-5.4")).toBe(true)
expect(applied.has("model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-6")).toBe(true)
expect(applied.has("model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-7")).toBe(true)
})
test("returns an empty set on malformed JSON instead of throwing", () => {
@@ -134,7 +134,7 @@ describe("migrations sidecar", () => {
const configPath = join(workdir, "oh-my-openagent.jsonc")
const original = new Set([
"model-version:openai/gpt-5.3-codex->openai/gpt-5.4",
"model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-6",
"model-version:anthropic/claude-opus-4-5->anthropic/claude-opus-4-7",
])
writeAppliedMigrations(configPath, original)