diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index d5c721ed..cf164d19 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -477,16 +477,16 @@ exports[`generateModelConfig all native providers uses preferred models from fal "council": { "members": [ { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", + "model": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", }, { - "model": "openai/gpt-5.2", - "name": "GPT", + "model": "openai/gpt-5.3-codex", + "name": "GPT 5.3 Codex", }, { - "model": "google/gemini-3-flash", - "name": "Gemini", + "model": "google/gemini-3-pro-preview", + "name": "Gemini Pro 3", }, ], }, @@ -571,16 +571,16 @@ exports[`generateModelConfig all native providers uses preferred models with isM "council": { "members": [ { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", + "model": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", }, { - "model": "openai/gpt-5.2", - "name": "GPT", + "model": "openai/gpt-5.3-codex", + "name": "GPT 5.3 Codex", }, { - "model": "google/gemini-3-flash", - "name": "Gemini", + "model": "google/gemini-3-pro-preview", + "name": "Gemini Pro 3", }, ], }, @@ -1093,18 +1093,6 @@ 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": { "athena": { - "council": { - "members": [ - { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", - }, - { - "model": "opencode/claude-sonnet-4-5", - "name": "OpenCode Claude", - }, - ], - }, "model": "anthropic/claude-opus-4-6", "variant": "max", }, @@ -1183,18 +1171,6 @@ 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": { "athena": { - "council": { - "members": [ - { - "model": "openai/gpt-5.2", - "name": "GPT", - }, - { - "model": "github-copilot/gpt-5.2", - "name": "Copilot GPT", - }, - ], - }, "model": "github-copilot/claude-opus-4.6", "variant": "max", }, @@ -1341,12 +1317,12 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi "council": { "members": [ { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", + "model": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", }, { - "model": "google/gemini-3-flash", - "name": "Gemini", + "model": "google/gemini-3-pro-preview", + "name": "Gemini Pro 3", }, ], }, @@ -1420,18 +1396,6 @@ 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": { "athena": { - "council": { - "members": [ - { - "model": "github-copilot/gpt-5.2", - "name": "Copilot GPT", - }, - { - "model": "opencode/claude-sonnet-4-5", - "name": "OpenCode Claude", - }, - ], - }, "model": "github-copilot/claude-opus-4.6", "variant": "max", }, @@ -1513,24 +1477,16 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "council": { "members": [ { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", + "model": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", }, { - "model": "openai/gpt-5.2", - "name": "GPT", + "model": "openai/gpt-5.3-codex", + "name": "GPT 5.3 Codex", }, { - "model": "google/gemini-3-flash", - "name": "Gemini", - }, - { - "model": "github-copilot/gpt-5.2", - "name": "Copilot GPT", - }, - { - "model": "opencode/claude-sonnet-4-5", - "name": "OpenCode Claude", + "model": "google/gemini-3-pro-preview", + "name": "Gemini Pro 3", }, ], }, @@ -1615,24 +1571,16 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "council": { "members": [ { - "model": "anthropic/claude-sonnet-4-5", - "name": "Claude", + "model": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", }, { - "model": "openai/gpt-5.2", - "name": "GPT", + "model": "openai/gpt-5.3-codex", + "name": "GPT 5.3 Codex", }, { - "model": "google/gemini-3-flash", - "name": "Gemini", - }, - { - "model": "github-copilot/gpt-5.2", - "name": "Copilot GPT", - }, - { - "model": "opencode/claude-sonnet-4-5", - "name": "OpenCode Claude", + "model": "google/gemini-3-pro-preview", + "name": "Gemini Pro 3", }, ], }, diff --git a/src/cli/council-members-generator.test.ts b/src/cli/council-members-generator.test.ts index 3ad925cb..e4edd1a2 100644 --- a/src/cli/council-members-generator.test.ts +++ b/src/cli/council-members-generator.test.ts @@ -77,27 +77,29 @@ describe("generateCouncilMembers", () => { }) //#given only one native provider - //#when copilot is also available - //#then returns 2 members (native + copilot) - test("uses copilot as second member when only one native provider", () => { + //#when kimi is also available + //#then returns 2 members (native + kimi) + test("uses kimi as second member when only one native provider", () => { const members = generateCouncilMembers(makeAvail({ native: { claude: true }, - copilot: true, + kimiForCoding: true, })) - expect(members.length).toBeGreaterThanOrEqual(2) + expect(members).toHaveLength(2) + expect(members.some(m => m.model.startsWith("anthropic/"))).toBe(true) + expect(members.some(m => m.model.startsWith("kimi-for-coding/"))).toBe(true) }) - //#given only one native provider - //#when opencode zen is also available - //#then returns 2 members - test("uses opencode zen as second member when only one native provider", () => { + //#given all 4 candidates available + //#when generating council members + //#then returns 4 members + test("returns 4 members when all candidates available", () => { const members = generateCouncilMembers(makeAvail({ - native: { gemini: true }, - opencodeZen: true, + native: { claude: true, openai: true, gemini: true }, + kimiForCoding: true, })) - expect(members.length).toBeGreaterThanOrEqual(2) + expect(members).toHaveLength(4) }) //#given no providers at all diff --git a/src/cli/council-members-generator.ts b/src/cli/council-members-generator.ts index e7ae39d5..66ad9572 100644 --- a/src/cli/council-members-generator.ts +++ b/src/cli/council-members-generator.ts @@ -12,29 +12,24 @@ const COUNCIL_CANDIDATES: Array<{ }> = [ { provider: (a) => a.native.claude, - model: "anthropic/claude-sonnet-4-5", - name: "Claude", + model: "anthropic/claude-opus-4-6", + name: "Claude Opus 4.6", }, { provider: (a) => a.native.openai, - model: "openai/gpt-5.2", - name: "GPT", + model: "openai/gpt-5.3-codex", + name: "GPT 5.3 Codex", }, { provider: (a) => a.native.gemini, - model: "google/gemini-3-flash", - name: "Gemini", + model: "google/gemini-3-pro-preview", + name: "Gemini Pro 3", }, { - provider: (a) => a.copilot, - model: "github-copilot/gpt-5.2", - name: "Copilot GPT", - }, - { - provider: (a) => a.opencodeZen, - model: "opencode/claude-sonnet-4-5", - name: "OpenCode Claude", - }, + provider: (a) => a.kimiForCoding, + model: "kimi-for-coding/k2p5", + name: "Kimi 2.5", + } ] export function generateCouncilMembers(avail: ProviderAvailability): CouncilMember[] {