diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index f3744b2ca..77fd973be 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -10,6 +10,9 @@ exports[`generateModelConfig no providers available returns ULTIMATE_FALLBACK fo "atlas": { "model": "opencode/gpt-5-nano", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "opencode/gpt-5-nano", }, @@ -78,6 +81,9 @@ exports[`generateModelConfig single native provider uses Claude models when only "atlas": { "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -153,6 +159,9 @@ exports[`generateModelConfig single native provider uses Claude models with isMa "atlas": { "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -230,6 +239,9 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "model": "openai/gpt-5.4", "variant": "medium", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "openai/gpt-5.4", "variant": "medium", @@ -324,6 +336,9 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "model": "openai/gpt-5.4", "variant": "medium", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "openai/gpt-5.4", "variant": "medium", @@ -417,6 +432,9 @@ exports[`generateModelConfig single native provider uses Gemini models when only "atlas": { "model": "opencode/gpt-5-nano", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "opencode/gpt-5-nano", }, @@ -485,6 +503,9 @@ exports[`generateModelConfig single native provider uses Gemini models with isMa "atlas": { "model": "opencode/gpt-5-nano", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "opencode/gpt-5-nano", }, @@ -575,6 +596,9 @@ exports[`generateModelConfig all native providers uses preferred models from fal ], "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -799,6 +823,9 @@ exports[`generateModelConfig all native providers uses preferred models with isM ], "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -1005,6 +1032,9 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on ], "model": "opencode/claude-sonnet-4-6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { @@ -1234,6 +1264,9 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is ], "model": "opencode/claude-sonnet-4-6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { @@ -1467,6 +1500,9 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when ], "model": "github-copilot/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -1657,6 +1693,9 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with ], "model": "github-copilot/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -1842,6 +1881,9 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian whe "atlas": { "model": "opencode/gpt-5-nano", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "opencode/gpt-5-nano", }, @@ -1906,6 +1948,9 @@ exports[`generateModelConfig fallback providers uses ZAI model for librarian wit "atlas": { "model": "opencode/gpt-5-nano", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "model": "opencode/gpt-5-nano", }, @@ -1980,6 +2025,9 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen ], "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { @@ -2270,6 +2318,9 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb ], "model": "github-copilot/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -2515,6 +2566,9 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + ZAI combinat "atlas": { "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -2620,6 +2674,9 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi "atlas": { "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/glm-4.7-free", + }, "explore": { "fallback_models": [ { @@ -2773,6 +2830,9 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider ], "model": "github-copilot/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { @@ -3191,6 +3251,9 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe ], "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { @@ -3765,6 +3828,9 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is ], "model": "anthropic/claude-sonnet-4.6", }, + "council-member": { + "model": "opencode/gpt-5-nano", + }, "explore": { "fallback_models": [ { diff --git a/src/shared/model-requirements.test.ts b/src/shared/model-requirements.test.ts index 219a5d79d..5f3186827 100644 --- a/src/shared/model-requirements.test.ts +++ b/src/shared/model-requirements.test.ts @@ -265,8 +265,8 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(hephaestus.requiresModel).toBeUndefined() }) - test("all 11 builtin agents have valid fallbackChain arrays", () => { - // #given - list of 11 agent names + test("all 12 builtin agents have valid fallbackChain arrays", () => { + // #given - list of 12 agent names const expectedAgents = [ "sisyphus", "hephaestus", @@ -280,6 +280,7 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { "atlas", "sisyphus-junior", "athena", + "council-member", ] // when - checking AGENT_MODEL_REQUIREMENTS