diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index 04cf6202..8c8365f0 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -4,19 +4,7 @@ exports[`generateModelConfig no providers available returns ULTIMATE_FALLBACK fo { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "opencode/glm-4.7-free", - }, - "Metis (Plan Consultant)": { - "model": "opencode/glm-4.7-free", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/glm-4.7-free", - }, - "Prometheus (Planner)": { - "model": "opencode/glm-4.7-free", - }, - "Sisyphus": { + "atlas": { "model": "opencode/glm-4.7-free", }, "explore": { @@ -25,12 +13,24 @@ exports[`generateModelConfig no providers available returns ULTIMATE_FALLBACK fo "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "opencode/glm-4.7-free", + }, + "momus": { + "model": "opencode/glm-4.7-free", + }, "multimodal-looker": { "model": "opencode/glm-4.7-free", }, "oracle": { "model": "opencode/glm-4.7-free", }, + "prometheus": { + "model": "opencode/glm-4.7-free", + }, + "sisyphus": { + "model": "opencode/glm-4.7-free", + }, }, "categories": { "artistry": { @@ -62,21 +62,7 @@ exports[`generateModelConfig single native provider uses Claude models when only { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "anthropic/claude-opus-4-5", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -85,6 +71,13 @@ exports[`generateModelConfig single native provider uses Claude models when only "librarian": { "model": "anthropic/claude-sonnet-4-5", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "anthropic/claude-opus-4-5", + }, "multimodal-looker": { "model": "anthropic/claude-haiku-4-5", }, @@ -92,6 +85,13 @@ exports[`generateModelConfig single native provider uses Claude models when only "model": "anthropic/claude-opus-4-5", "variant": "max", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -126,30 +126,22 @@ exports[`generateModelConfig single native provider uses Claude models with isMa { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "anthropic/claude-opus-4-5", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, "explore": { "model": "anthropic/claude-haiku-4-5", }, "librarian": { "model": "anthropic/claude-sonnet-4-5", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "anthropic/claude-opus-4-5", + }, "multimodal-looker": { "model": "anthropic/claude-haiku-4-5", }, @@ -157,6 +149,14 @@ exports[`generateModelConfig single native provider uses Claude models with isMa "model": "anthropic/claude-opus-4-5", "variant": "max", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, }, "categories": { "artistry": { @@ -192,31 +192,23 @@ exports[`generateModelConfig single native provider uses OpenAI models when only { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "openai/gpt-5.2", }, - "Metis (Plan Consultant)": { - "model": "openai/gpt-5.2", - "variant": "high", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "openai/gpt-5.2", - "variant": "high", - }, - "Sisyphus": { - "model": "openai/gpt-5.2", - "variant": "high", - }, "explore": { "model": "opencode/grok-code", }, "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "openai/gpt-5.2", + "variant": "high", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "openai/gpt-5.2", }, @@ -224,6 +216,14 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "openai/gpt-5.2", + "variant": "high", + }, + "sisyphus": { + "model": "openai/gpt-5.2", + "variant": "high", + }, }, "categories": { "artistry": { @@ -259,31 +259,23 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "openai/gpt-5.2", }, - "Metis (Plan Consultant)": { - "model": "openai/gpt-5.2", - "variant": "high", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "openai/gpt-5.2", - "variant": "high", - }, - "Sisyphus": { - "model": "openai/gpt-5.2-codex", - "variant": "medium", - }, "explore": { "model": "opencode/grok-code", }, "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "openai/gpt-5.2", + "variant": "high", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "openai/gpt-5.2", }, @@ -291,6 +283,14 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "openai/gpt-5.2", + "variant": "high", + }, + "sisyphus": { + "model": "openai/gpt-5.2-codex", + "variant": "medium", + }, }, "categories": { "artistry": { @@ -326,21 +326,7 @@ exports[`generateModelConfig single native provider uses Gemini models when only { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "google/gemini-3-pro-preview", - }, - "Metis (Plan Consultant)": { - "model": "google/gemini-3-pro-preview", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "google/gemini-3-pro-preview", - "variant": "max", - }, - "Prometheus (Planner)": { - "model": "google/gemini-3-pro-preview", - }, - "Sisyphus": { + "atlas": { "model": "google/gemini-3-pro-preview", }, "explore": { @@ -349,12 +335,26 @@ exports[`generateModelConfig single native provider uses Gemini models when only "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "google/gemini-3-pro-preview", + "variant": "max", + }, + "momus": { + "model": "google/gemini-3-pro-preview", + "variant": "max", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, "oracle": { "model": "google/gemini-3-pro-preview", }, + "prometheus": { + "model": "google/gemini-3-pro-preview", + }, + "sisyphus": { + "model": "google/gemini-3-pro-preview", + }, }, "categories": { "artistry": { @@ -387,21 +387,7 @@ exports[`generateModelConfig single native provider uses Gemini models with isMa { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "google/gemini-3-pro-preview", - }, - "Metis (Plan Consultant)": { - "model": "google/gemini-3-pro-preview", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "google/gemini-3-pro-preview", - "variant": "max", - }, - "Prometheus (Planner)": { - "model": "google/gemini-3-pro-preview", - }, - "Sisyphus": { + "atlas": { "model": "google/gemini-3-pro-preview", }, "explore": { @@ -410,12 +396,26 @@ exports[`generateModelConfig single native provider uses Gemini models with isMa "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "google/gemini-3-pro-preview", + "variant": "max", + }, + "momus": { + "model": "google/gemini-3-pro-preview", + "variant": "max", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, "oracle": { "model": "google/gemini-3-pro-preview", }, + "prometheus": { + "model": "google/gemini-3-pro-preview", + }, + "sisyphus": { + "model": "google/gemini-3-pro-preview", + }, }, "categories": { "artistry": { @@ -448,22 +448,7 @@ exports[`generateModelConfig all native providers uses preferred models from fal { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -472,6 +457,14 @@ exports[`generateModelConfig all native providers uses preferred models from fal "librarian": { "model": "anthropic/claude-sonnet-4-5", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, @@ -479,6 +472,13 @@ exports[`generateModelConfig all native providers uses preferred models from fal "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -512,31 +512,23 @@ exports[`generateModelConfig all native providers uses preferred models with isM { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, "explore": { "model": "anthropic/claude-haiku-4-5", }, "librarian": { "model": "anthropic/claude-sonnet-4-5", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, @@ -544,6 +536,14 @@ exports[`generateModelConfig all native providers uses preferred models with isM "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, }, "categories": { "artistry": { @@ -578,22 +578,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "opencode/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "opencode/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "opencode/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "opencode/claude-sonnet-4-5", }, "explore": { @@ -602,6 +587,14 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "opencode/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "opencode/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "opencode/gemini-3-flash-preview", }, @@ -609,6 +602,13 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "model": "opencode/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "opencode/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "opencode/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -642,31 +642,23 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "opencode/claude-sonnet-4-5", }, - "Metis (Plan Consultant)": { - "model": "opencode/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "opencode/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { - "model": "opencode/claude-opus-4-5", - "variant": "max", - }, "explore": { "model": "opencode/claude-haiku-4-5", }, "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "opencode/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "opencode/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "opencode/gemini-3-flash-preview", }, @@ -674,6 +666,14 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "model": "opencode/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "opencode/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "opencode/claude-opus-4-5", + "variant": "max", + }, }, "categories": { "artistry": { @@ -708,22 +708,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "github-copilot/claude-sonnet-4.5", - }, - "Metis (Plan Consultant)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "github-copilot/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "github-copilot/claude-sonnet-4.5", }, "explore": { @@ -732,6 +717,14 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "librarian": { "model": "github-copilot/claude-sonnet-4.5", }, + "metis": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "momus": { + "model": "github-copilot/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "github-copilot/gemini-3-flash-preview", }, @@ -739,6 +732,13 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "model": "github-copilot/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "sisyphus": { + "model": "github-copilot/claude-sonnet-4.5", + }, }, "categories": { "artistry": { @@ -772,31 +772,23 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "github-copilot/claude-sonnet-4.5", }, - "Metis (Plan Consultant)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "github-copilot/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Sisyphus": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, "explore": { "model": "opencode/grok-code", }, "librarian": { "model": "github-copilot/claude-sonnet-4.5", }, + "metis": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "momus": { + "model": "github-copilot/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "github-copilot/gemini-3-flash-preview", }, @@ -804,6 +796,14 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with "model": "github-copilot/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "sisyphus": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, }, "categories": { "artistry": { @@ -838,19 +838,7 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian whe { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "opencode/glm-4.7-free", - }, - "Metis (Plan Consultant)": { - "model": "opencode/glm-4.7-free", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/glm-4.7-free", - }, - "Prometheus (Planner)": { - "model": "opencode/glm-4.7-free", - }, - "Sisyphus": { + "atlas": { "model": "opencode/glm-4.7-free", }, "explore": { @@ -859,12 +847,24 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian whe "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "opencode/glm-4.7-free", + }, + "momus": { + "model": "opencode/glm-4.7-free", + }, "multimodal-looker": { "model": "zai-coding-plan/glm-4.6v", }, "oracle": { "model": "opencode/glm-4.7-free", }, + "prometheus": { + "model": "opencode/glm-4.7-free", + }, + "sisyphus": { + "model": "opencode/glm-4.7-free", + }, }, "categories": { "artistry": { @@ -896,33 +896,33 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian wit { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "opencode/glm-4.7-free", }, - "Metis (Plan Consultant)": { - "model": "opencode/glm-4.7-free", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/glm-4.7-free", - }, - "Prometheus (Planner)": { - "model": "opencode/glm-4.7-free", - }, - "Sisyphus": { - "model": "zai-coding-plan/glm-4.7", - }, "explore": { "model": "opencode/grok-code", }, "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "opencode/glm-4.7-free", + }, + "momus": { + "model": "opencode/glm-4.7-free", + }, "multimodal-looker": { "model": "zai-coding-plan/glm-4.6v", }, "oracle": { "model": "opencode/glm-4.7-free", }, + "prometheus": { + "model": "opencode/glm-4.7-free", + }, + "sisyphus": { + "model": "zai-coding-plan/glm-4.7", + }, }, "categories": { "artistry": { @@ -954,22 +954,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "opencode/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -978,6 +963,14 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "librarian": { "model": "opencode/glm-4.7-free", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "opencode/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "opencode/gemini-3-flash-preview", }, @@ -985,6 +978,13 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "model": "opencode/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -1018,22 +1018,7 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "github-copilot/claude-sonnet-4.5", - }, - "Metis (Plan Consultant)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "github-copilot/claude-sonnet-4.5", }, "explore": { @@ -1042,6 +1027,14 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "librarian": { "model": "github-copilot/claude-sonnet-4.5", }, + "metis": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "github-copilot/gemini-3-flash-preview", }, @@ -1049,6 +1042,13 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "sisyphus": { + "model": "github-copilot/claude-sonnet-4.5", + }, }, "categories": { "artistry": { @@ -1082,21 +1082,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + ZAI combinat { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "anthropic/claude-opus-4-5", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -1105,6 +1091,13 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + ZAI combinat "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "anthropic/claude-opus-4-5", + }, "multimodal-looker": { "model": "anthropic/claude-haiku-4-5", }, @@ -1112,6 +1105,13 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + ZAI combinat "model": "anthropic/claude-opus-4-5", "variant": "max", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -1146,21 +1146,7 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "anthropic/claude-opus-4-5", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -1169,6 +1155,13 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi "librarian": { "model": "anthropic/claude-sonnet-4-5", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "anthropic/claude-opus-4-5", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, @@ -1176,6 +1169,13 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi "model": "anthropic/claude-opus-4-5", "variant": "max", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -1209,22 +1209,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "github-copilot/claude-sonnet-4.5", - }, - "Metis (Plan Consultant)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "github-copilot/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "github-copilot/claude-opus-4.5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "github-copilot/claude-sonnet-4.5", }, "explore": { @@ -1233,6 +1218,14 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "momus": { + "model": "github-copilot/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "github-copilot/gemini-3-flash-preview", }, @@ -1240,6 +1233,13 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "model": "github-copilot/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "github-copilot/claude-opus-4.5", + "variant": "max", + }, + "sisyphus": { + "model": "github-copilot/claude-sonnet-4.5", + }, }, "categories": { "artistry": { @@ -1273,22 +1273,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { - "model": "anthropic/claude-sonnet-4-5", - }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, "explore": { @@ -1297,6 +1282,14 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, @@ -1304,6 +1297,13 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-sonnet-4-5", + }, }, "categories": { "artistry": { @@ -1337,31 +1337,23 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is { "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { - "Atlas": { + "atlas": { "model": "anthropic/claude-sonnet-4-5", }, - "Metis (Plan Consultant)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Momus (Plan Reviewer)": { - "model": "openai/gpt-5.2", - "variant": "medium", - }, - "Prometheus (Planner)": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, - "Sisyphus": { - "model": "anthropic/claude-opus-4-5", - "variant": "max", - }, "explore": { "model": "anthropic/claude-haiku-4-5", }, "librarian": { "model": "zai-coding-plan/glm-4.7", }, + "metis": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "momus": { + "model": "openai/gpt-5.2", + "variant": "medium", + }, "multimodal-looker": { "model": "google/gemini-3-flash-preview", }, @@ -1369,6 +1361,14 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "model": "openai/gpt-5.2", "variant": "high", }, + "prometheus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, + "sisyphus": { + "model": "anthropic/claude-opus-4-5", + "variant": "max", + }, }, "categories": { "artistry": { diff --git a/src/cli/config-manager.test.ts b/src/cli/config-manager.test.ts index 3ec4334e..1aac92be 100644 --- a/src/cli/config-manager.test.ts +++ b/src/cli/config-manager.test.ts @@ -219,7 +219,7 @@ describe("generateOmoConfig - model fallback system", () => { // #then should use native anthropic sonnet (cost-efficient for standard plan) expect(result.$schema).toBe("https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json") expect(result.agents).toBeDefined() - expect((result.agents as Record).Sisyphus.model).toBe("anthropic/claude-sonnet-4-5") + expect((result.agents as Record).sisyphus.model).toBe("anthropic/claude-sonnet-4-5") }) test("generates native opus models when Claude max20 subscription", () => { @@ -238,7 +238,7 @@ describe("generateOmoConfig - model fallback system", () => { const result = generateOmoConfig(config) // #then should use native anthropic opus (max power for max20 plan) - expect((result.agents as Record).Sisyphus.model).toBe("anthropic/claude-opus-4-5") + expect((result.agents as Record).sisyphus.model).toBe("anthropic/claude-opus-4-5") }) test("uses github-copilot sonnet fallback when only copilot available", () => { @@ -257,7 +257,7 @@ describe("generateOmoConfig - model fallback system", () => { const result = generateOmoConfig(config) // #then should use github-copilot sonnet models (copilot fallback) - expect((result.agents as Record).Sisyphus.model).toBe("github-copilot/claude-sonnet-4.5") + expect((result.agents as Record).sisyphus.model).toBe("github-copilot/claude-sonnet-4.5") }) test("uses ultimate fallback when no providers configured", () => { @@ -277,7 +277,7 @@ describe("generateOmoConfig - model fallback system", () => { // #then should use ultimate fallback for all agents expect(result.$schema).toBe("https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json") - expect((result.agents as Record).Sisyphus.model).toBe("opencode/glm-4.7-free") + expect((result.agents as Record).sisyphus.model).toBe("opencode/glm-4.7-free") }) test("uses zai-coding-plan/glm-4.7 for librarian when Z.ai available", () => { @@ -298,7 +298,7 @@ describe("generateOmoConfig - model fallback system", () => { // #then librarian should use zai-coding-plan/glm-4.7 expect((result.agents as Record).librarian.model).toBe("zai-coding-plan/glm-4.7") // #then other agents should use native opus (max20 plan) - expect((result.agents as Record).Sisyphus.model).toBe("anthropic/claude-opus-4-5") + expect((result.agents as Record).sisyphus.model).toBe("anthropic/claude-opus-4-5") }) test("uses native OpenAI models when only ChatGPT available", () => { @@ -317,7 +317,7 @@ describe("generateOmoConfig - model fallback system", () => { const result = generateOmoConfig(config) // #then Sisyphus should use native OpenAI (fallback within native tier) - expect((result.agents as Record).Sisyphus.model).toBe("openai/gpt-5.2") + expect((result.agents as Record).sisyphus.model).toBe("openai/gpt-5.2") // #then Oracle should use native OpenAI (first fallback entry) expect((result.agents as Record).oracle.model).toBe("openai/gpt-5.2") // #then multimodal-looker should use native OpenAI (fallback within native tier) diff --git a/src/cli/doctor/checks/model-resolution.test.ts b/src/cli/doctor/checks/model-resolution.test.ts index e5d6e1f6..9bbe236d 100644 --- a/src/cli/doctor/checks/model-resolution.test.ts +++ b/src/cli/doctor/checks/model-resolution.test.ts @@ -12,7 +12,7 @@ describe("model-resolution check", () => { const info = getModelResolutionInfo() // #then: Should have agent entries - const sisyphus = info.agents.find((a) => a.name === "Sisyphus") + const sisyphus = info.agents.find((a) => a.name === "sisyphus") expect(sisyphus).toBeDefined() expect(sisyphus!.requirement.fallbackChain[0]?.model).toBe("claude-opus-4-5") expect(sisyphus!.requirement.fallbackChain[0]?.providers).toContain("anthropic") @@ -84,7 +84,7 @@ describe("model-resolution check", () => { const info = getModelResolutionInfoWithOverrides(mockConfig) // #then: Should show provider fallback chain - const sisyphus = info.agents.find((a) => a.name === "Sisyphus") + const sisyphus = info.agents.find((a) => a.name === "sisyphus") expect(sisyphus).toBeDefined() expect(sisyphus!.userOverride).toBeUndefined() expect(sisyphus!.effectiveResolution).toContain("Provider fallback:") diff --git a/src/cli/model-fallback.test.ts b/src/cli/model-fallback.test.ts index 15c54698..a7ab33bb 100644 --- a/src/cli/model-fallback.test.ts +++ b/src/cli/model-fallback.test.ts @@ -364,7 +364,7 @@ describe("generateModelConfig", () => { const result = generateModelConfig(config) // #then Sisyphus should use opus (sisyphus-high) - expect(result.agents?.Sisyphus?.model).toBe("anthropic/claude-opus-4-5") + expect(result.agents?.sisyphus?.model).toBe("anthropic/claude-opus-4-5") }) test("Sisyphus uses sisyphus-low capability when isMax20 is false", () => { @@ -375,7 +375,7 @@ describe("generateModelConfig", () => { const result = generateModelConfig(config) // #then Sisyphus should use sonnet (sisyphus-low) - expect(result.agents?.Sisyphus?.model).toBe("anthropic/claude-sonnet-4-5") + expect(result.agents?.sisyphus?.model).toBe("anthropic/claude-sonnet-4-5") }) }) diff --git a/src/cli/model-fallback.ts b/src/cli/model-fallback.ts index 023e9920..a3eefb2b 100644 --- a/src/cli/model-fallback.ts +++ b/src/cli/model-fallback.ts @@ -97,7 +97,7 @@ function resolveModelFromChain( function getSisyphusFallbackChain(isMaxPlan: boolean): FallbackEntry[] { // Sisyphus uses opus when isMaxPlan, sonnet otherwise if (isMaxPlan) { - return AGENT_MODEL_REQUIREMENTS.Sisyphus.fallbackChain + return AGENT_MODEL_REQUIREMENTS.sisyphus.fallbackChain } // For non-max plan, use sonnet instead of opus return [ @@ -153,7 +153,7 @@ export function generateModelConfig(config: InstallConfig): GeneratedOmoConfig { // Special case: Sisyphus uses different fallbackChain based on isMaxPlan const fallbackChain = - role === "Sisyphus" ? getSisyphusFallbackChain(avail.isMaxPlan) : req.fallbackChain + role === "sisyphus" ? getSisyphusFallbackChain(avail.isMaxPlan) : req.fallbackChain const resolved = resolveModelFromChain(fallbackChain, avail) if (resolved) {