From 680dd161b40352c8f38f4ae2f1235f4d6389efe3 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 13:29:49 +0900 Subject: [PATCH 1/8] fix(model-capabilities): bundle gpt-5.4-mini-fast caps Keep the supplemental OpenAI model available when the bundled snapshot omits it.\nMerge its capabilities at runtime so downstream model resolution can use it. Co-authored-by: Sisyphus --- .../model-capabilities/bundled-snapshot.ts | 11 +++++++++- .../supplemental-entries.ts | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/shared/model-capabilities/supplemental-entries.ts diff --git a/src/shared/model-capabilities/bundled-snapshot.ts b/src/shared/model-capabilities/bundled-snapshot.ts index 65644a8cf..18ffec737 100644 --- a/src/shared/model-capabilities/bundled-snapshot.ts +++ b/src/shared/model-capabilities/bundled-snapshot.ts @@ -1,5 +1,6 @@ import bundledModelCapabilitiesSnapshotJson from "../../generated/model-capabilities.generated.json" +import { SUPPLEMENTAL_MODEL_CAPABILITIES } from "./supplemental-entries" import type { ModelCapabilitiesSnapshot } from "./types" function normalizeSnapshot( @@ -8,7 +9,15 @@ function normalizeSnapshot( return snapshot as ModelCapabilitiesSnapshot } -const bundledModelCapabilitiesSnapshot = normalizeSnapshot(bundledModelCapabilitiesSnapshotJson) +const normalizedBundledSnapshot = normalizeSnapshot(bundledModelCapabilitiesSnapshotJson) + +const bundledModelCapabilitiesSnapshot: ModelCapabilitiesSnapshot = { + ...normalizedBundledSnapshot, + models: { + ...normalizedBundledSnapshot.models, + ...SUPPLEMENTAL_MODEL_CAPABILITIES, + }, +} export function getBundledModelCapabilitiesSnapshot(): ModelCapabilitiesSnapshot { return bundledModelCapabilitiesSnapshot diff --git a/src/shared/model-capabilities/supplemental-entries.ts b/src/shared/model-capabilities/supplemental-entries.ts new file mode 100644 index 000000000..197d88001 --- /dev/null +++ b/src/shared/model-capabilities/supplemental-entries.ts @@ -0,0 +1,20 @@ +import type { ModelCapabilitiesSnapshotEntry } from "./types" + +export const SUPPLEMENTAL_MODEL_CAPABILITIES: Record = { + "gpt-5.4-mini-fast": { + id: "gpt-5.4-mini-fast", + family: "gpt-mini", + reasoning: true, + temperature: false, + toolCall: true, + modalities: { + input: ["text", "image", "pdf"], + output: ["text"], + }, + limit: { + context: 400000, + input: 272000, + output: 128000, + }, + }, +} From d2e5ddd73de06674134a90fec19e898bf7b4d13d Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 13:29:55 +0900 Subject: [PATCH 2/8] fix(model-requirements): route primary agents to mini-fast Use gpt-5.4-mini-fast as the primary runtime model for librarian and explore.\nKeep the fallback chain intact so older providers still resolve. Co-authored-by: Sisyphus --- src/shared/model-requirements.test.ts | 36 +++++++++++++++------------ src/shared/model-requirements.ts | 11 ++++---- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/shared/model-requirements.test.ts b/src/shared/model-requirements.test.ts index 3692677f7..258beb1a3 100644 --- a/src/shared/model-requirements.test.ts +++ b/src/shared/model-requirements.test.ts @@ -64,33 +64,38 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(last.model).toBe("big-pickle") }) - test("librarian has valid fallbackChain with opencode-go/minimax-m2.7 as primary", () => { + test("librarian has valid fallbackChain with openai/gpt-5.4-mini-fast as primary", () => { // given - librarian agent requirement const librarian = AGENT_MODEL_REQUIREMENTS["librarian"] // when - accessing librarian requirement - // then - fallbackChain exists with opencode-go/minimax-m2.7 as first entry + // then - fallbackChain exists with openai/gpt-5.4-mini-fast as first entry expect(librarian).toBeDefined() expect(librarian.fallbackChain).toBeArray() - expect(librarian.fallbackChain.length).toBeGreaterThan(0) + expect(librarian.fallbackChain).toHaveLength(5) const primary = librarian.fallbackChain[0] - expect(primary.providers[0]).toBe("opencode-go") - expect(primary.model).toBe("minimax-m2.7") + expect(primary.providers).toEqual(["openai"]) + expect(primary.model).toBe("gpt-5.4-mini-fast") const second = librarian.fallbackChain[1] - expect(second.providers[0]).toBe("opencode") + expect(second.providers[0]).toBe("opencode-go") expect(second.model).toBe("minimax-m2.7-highspeed") const tertiary = librarian.fallbackChain[2] - expect(tertiary.providers).toContain("anthropic") - expect(tertiary.model).toBe("claude-haiku-4-5") + expect(tertiary.providers[0]).toBe("opencode-go") + expect(tertiary.model).toBe("minimax-m2.7") const quaternary = librarian.fallbackChain[3] - expect(quaternary.model).toBe("gpt-5-nano") + expect(quaternary.providers).toContain("anthropic") + expect(quaternary.model).toBe("claude-haiku-4-5") + + const fifth = librarian.fallbackChain[4] + expect(fifth.providers).toContain("openai") + expect(fifth.model).toBe("gpt-5.4-nano") }) - test("explore has valid fallbackChain with grok-code-fast-1 as primary", () => { + test("explore has valid fallbackChain with openai/gpt-5.4-mini-fast as primary", () => { // given - explore agent requirement const explore = AGENT_MODEL_REQUIREMENTS["explore"] @@ -100,16 +105,15 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(explore.fallbackChain).toHaveLength(5) const primary = explore.fallbackChain[0] - expect(primary.providers).toContain("github-copilot") - expect(primary.providers).toContain("xai") - expect(primary.model).toBe("grok-code-fast-1") + expect(primary.providers).toEqual(["openai"]) + expect(primary.model).toBe("gpt-5.4-mini-fast") const secondary = explore.fallbackChain[1] expect(secondary.providers).toContain("opencode-go") expect(secondary.model).toBe("minimax-m2.7-highspeed") const tertiary = explore.fallbackChain[2] - expect(tertiary.providers).toContain("opencode") + expect(tertiary.providers).toContain("opencode-go") expect(tertiary.model).toBe("minimax-m2.7") const quaternary = explore.fallbackChain[3] @@ -117,8 +121,8 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(quaternary.model).toBe("claude-haiku-4-5") const fifth = explore.fallbackChain[4] - expect(fifth.providers).toContain("opencode") - expect(fifth.model).toBe("gpt-5-nano") + expect(fifth.providers).toContain("openai") + expect(fifth.model).toBe("gpt-5.4-nano") }) test("multimodal-looker has valid fallbackChain with gpt-5.4 as primary", () => { diff --git a/src/shared/model-requirements.ts b/src/shared/model-requirements.ts index 16f64cd6a..36771b4bc 100644 --- a/src/shared/model-requirements.ts +++ b/src/shared/model-requirements.ts @@ -77,19 +77,20 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { }, librarian: { fallbackChain: [ + { providers: ["openai"], model: "gpt-5.4-mini-fast" }, + { providers: ["opencode-go", "vercel"], model: "minimax-m2.7-highspeed" }, { providers: ["opencode-go", "vercel"], model: "minimax-m2.7" }, - { providers: ["opencode", "vercel"], model: "minimax-m2.7-highspeed" }, { providers: ["anthropic", "opencode", "vercel"], model: "claude-haiku-4-5" }, - { providers: ["opencode", "vercel"], model: "gpt-5-nano" }, + { providers: ["openai", "opencode", "vercel"], model: "gpt-5.4-nano" }, ], }, explore: { fallbackChain: [ - { providers: ["github-copilot", "xai", "vercel"], model: "grok-code-fast-1" }, + { providers: ["openai"], model: "gpt-5.4-mini-fast" }, { providers: ["opencode-go", "vercel"], model: "minimax-m2.7-highspeed" }, - { providers: ["opencode", "vercel"], model: "minimax-m2.7" }, + { providers: ["opencode-go", "vercel"], model: "minimax-m2.7" }, { providers: ["anthropic", "opencode", "vercel"], model: "claude-haiku-4-5" }, - { providers: ["opencode", "vercel"], model: "gpt-5-nano" }, + { providers: ["openai", "opencode", "vercel"], model: "gpt-5.4-nano" }, ], }, "multimodal-looker": { From ceadf4bdbc5f1acf0d13ea7c152ef9fbc1c7ebfc Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 13:30:02 +0900 Subject: [PATCH 3/8] fix(cli): prefer mini-fast for install fallback Default the install-time fallback chain to gpt-5.4-mini-fast for librarian and explore when OpenAI is available.\nKeep the snapshot and catalog tests aligned with the new resolution path. Co-authored-by: Sisyphus --- .../__snapshots__/model-fallback.test.ts.snap | 150 ++++++++++-------- src/cli/model-fallback.test.ts | 24 +-- src/cli/model-fallback.ts | 8 +- src/cli/openai-only-model-catalog.test.ts | 6 +- 4 files changed, 103 insertions(+), 85 deletions(-) diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index dc2bac7a6..ce9ea35df 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -519,12 +519,31 @@ exports[`generateModelConfig all native providers uses preferred models from fal "model": "anthropic/claude-sonnet-4-6", }, "explore": { - "model": "anthropic/claude-haiku-4-5", + "fallback_models": [ + { + "model": "anthropic/claude-haiku-4-5", + }, + { + "model": "openai/gpt-5.4-nano", + }, + ], + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "model": "openai/gpt-5.4", "variant": "medium", }, + "librarian": { + "fallback_models": [ + { + "model": "anthropic/claude-haiku-4-5", + }, + { + "model": "openai/gpt-5.4-nano", + }, + ], + "model": "openai/gpt-5.4-mini-fast", + }, "metis": { "fallback_models": [ { @@ -718,12 +737,31 @@ exports[`generateModelConfig all native providers uses preferred models with isM "model": "anthropic/claude-sonnet-4-6", }, "explore": { - "model": "anthropic/claude-haiku-4-5", + "fallback_models": [ + { + "model": "anthropic/claude-haiku-4-5", + }, + { + "model": "openai/gpt-5.4-nano", + }, + ], + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "model": "openai/gpt-5.4", "variant": "medium", }, + "librarian": { + "fallback_models": [ + { + "model": "anthropic/claude-haiku-4-5", + }, + { + "model": "openai/gpt-5.4-nano", + }, + ], + "model": "openai/gpt-5.4-mini-fast", + }, "metis": { "fallback_models": [ { @@ -917,10 +955,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "explore": { "fallback_models": [ { - "model": "opencode/minimax-m2.7", - }, - { - "model": "opencode/gpt-5-nano", + "model": "opencode/gpt-5.4-nano", }, ], "model": "opencode/claude-haiku-4-5", @@ -1142,10 +1177,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "explore": { "fallback_models": [ { - "model": "opencode/minimax-m2.7", - }, - { - "model": "opencode/gpt-5-nano", + "model": "opencode/gpt-5.4-nano", }, ], "model": "opencode/claude-haiku-4-5", @@ -1369,11 +1401,6 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "model": "github-copilot/claude-sonnet-4.6", }, "explore": { - "fallback_models": [ - { - "model": "github-copilot/grok-code-fast-1", - }, - ], "model": "github-copilot/gpt-5-mini", }, "hephaestus": { @@ -1555,11 +1582,6 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with "model": "github-copilot/claude-sonnet-4.6", }, "explore": { - "fallback_models": [ - { - "model": "github-copilot/grok-code-fast-1", - }, - ], "model": "github-copilot/gpt-5-mini", }, "hephaestus": { @@ -1869,14 +1891,11 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen }, "explore": { "fallback_models": [ - { - "model": "opencode/minimax-m2.7", - }, { "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "opencode/gpt-5.4-nano", }, ], "model": "anthropic/claude-haiku-4-5", @@ -2153,10 +2172,10 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "explore": { "fallback_models": [ { - "model": "github-copilot/grok-code-fast-1", + "model": "openai/gpt-5.4-nano", }, ], - "model": "github-copilot/gpt-5-mini", + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "fallback_models": [ @@ -2168,6 +2187,14 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "model": "openai/gpt-5.4", "variant": "medium", }, + "librarian": { + "fallback_models": [ + { + "model": "openai/gpt-5.4-nano", + }, + ], + "model": "openai/gpt-5.4-mini-fast", + }, "metis": { "fallback_models": [ { @@ -2622,13 +2649,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "explore": { "fallback_models": [ { - "model": "github-copilot/grok-code-fast-1", - }, - { - "model": "opencode/minimax-m2.7", - }, - { - "model": "opencode/gpt-5-nano", + "model": "opencode/gpt-5.4-nano", }, ], "model": "opencode/claude-haiku-4-5", @@ -2645,14 +2666,11 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider }, "librarian": { "fallback_models": [ - { - "model": "opencode/minimax-m2.7-highspeed", - }, { "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "opencode/gpt-5.4-nano", }, ], "model": "zai-coding-plan/glm-4.7", @@ -3020,19 +3038,19 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "explore": { "fallback_models": [ { - "model": "github-copilot/grok-code-fast-1", - }, - { - "model": "opencode/minimax-m2.7", + "model": "anthropic/claude-haiku-4-5", }, { "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "openai/gpt-5.4-nano", + }, + { + "model": "opencode/gpt-5.4-nano", }, ], - "model": "anthropic/claude-haiku-4-5", + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "fallback_models": [ @@ -3050,9 +3068,6 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe }, "librarian": { "fallback_models": [ - { - "model": "opencode/minimax-m2.7-highspeed", - }, { "model": "anthropic/claude-haiku-4-5", }, @@ -3060,10 +3075,13 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "openai/gpt-5.4-nano", + }, + { + "model": "opencode/gpt-5.4-nano", }, ], - "model": "zai-coding-plan/glm-4.7", + "model": "openai/gpt-5.4-mini-fast", }, "metis": { "fallback_models": [ @@ -3571,19 +3589,19 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "explore": { "fallback_models": [ { - "model": "github-copilot/grok-code-fast-1", - }, - { - "model": "opencode/minimax-m2.7", + "model": "anthropic/claude-haiku-4-5", }, { "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "openai/gpt-5.4-nano", + }, + { + "model": "opencode/gpt-5.4-nano", }, ], - "model": "anthropic/claude-haiku-4-5", + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "fallback_models": [ @@ -3601,9 +3619,6 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is }, "librarian": { "fallback_models": [ - { - "model": "opencode/minimax-m2.7-highspeed", - }, { "model": "anthropic/claude-haiku-4-5", }, @@ -3611,10 +3626,13 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "model": "opencode/claude-haiku-4-5", }, { - "model": "opencode/gpt-5-nano", + "model": "openai/gpt-5.4-nano", + }, + { + "model": "opencode/gpt-5.4-nano", }, ], - "model": "zai-coding-plan/glm-4.7", + "model": "openai/gpt-5.4-mini-fast", }, "metis": { "fallback_models": [ @@ -4120,9 +4138,6 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin }, "explore": { "fallback_models": [ - { - "model": "vercel/xai/grok-code-fast-1", - }, { "model": "vercel/minimax/minimax-m2.7", }, @@ -4130,7 +4145,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/anthropic/claude-haiku-4.5", }, { - "model": "vercel/openai/gpt-5-nano", + "model": "vercel/openai/gpt-5.4-nano", }, ], "model": "vercel/minimax/minimax-m2.7-highspeed", @@ -4148,7 +4163,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/anthropic/claude-haiku-4.5", }, { - "model": "vercel/openai/gpt-5-nano", + "model": "vercel/openai/gpt-5.4-nano", }, ], "model": "vercel/minimax/minimax-m2.7", @@ -4413,9 +4428,6 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin }, "explore": { "fallback_models": [ - { - "model": "vercel/xai/grok-code-fast-1", - }, { "model": "vercel/minimax/minimax-m2.7", }, @@ -4423,7 +4435,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/anthropic/claude-haiku-4.5", }, { - "model": "vercel/openai/gpt-5-nano", + "model": "vercel/openai/gpt-5.4-nano", }, ], "model": "vercel/minimax/minimax-m2.7-highspeed", @@ -4441,7 +4453,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/anthropic/claude-haiku-4.5", }, { - "model": "vercel/openai/gpt-5-nano", + "model": "vercel/openai/gpt-5.4-nano", }, ], "model": "vercel/minimax/minimax-m2.7", diff --git a/src/cli/model-fallback.test.ts b/src/cli/model-fallback.test.ts index 67fa83fd7..5d6d2915a 100644 --- a/src/cli/model-fallback.test.ts +++ b/src/cli/model-fallback.test.ts @@ -553,15 +553,15 @@ describe("generateModelConfig", () => { }) describe("special-case agents include fallback_models", () => { - test("explore includes fallback_models when Copilot and Claude are both available", () => { - // #given both Copilot and Claude are available - const config = createConfig({ hasCopilot: true, hasClaude: true }) + test("explore includes fallback_models when OpenAI and Claude are both available", () => { + // #given both OpenAI and Claude are available + const config = createConfig({ hasOpenAI: true, hasClaude: true }) // #when generateModelConfig is called const result = generateModelConfig(config) // #then explore should have fallback_models from the remaining chain entries - expect(result.agents?.explore?.model).toBe("anthropic/claude-haiku-4-5") + expect(result.agents?.explore?.model).toBe("openai/gpt-5.4-mini-fast") expect(result.agents?.explore?.fallback_models).toBeDefined() expect(result.agents?.explore?.fallback_models?.length).toBeGreaterThan(0) }) @@ -578,28 +578,28 @@ describe("generateModelConfig", () => { expect(result.agents?.explore?.fallback_models).toBeUndefined() }) - test("librarian includes fallback_models when opencode-go and Claude are both available", () => { - // #given opencode-go and Claude are available - const config = createConfig({ hasOpencodeGo: true, hasClaude: true }) + test("librarian includes fallback_models when OpenAI and opencode-go are both available", () => { + // #given OpenAI and opencode-go are available + const config = createConfig({ hasOpenAI: true, hasOpencodeGo: true }) // #when generateModelConfig is called const result = generateModelConfig(config) // #then librarian should have fallback_models - expect(result.agents?.librarian?.model).toBe("opencode-go/minimax-m2.7") + expect(result.agents?.librarian?.model).toBe("openai/gpt-5.4-mini-fast") expect(result.agents?.librarian?.fallback_models).toBeDefined() expect(result.agents?.librarian?.fallback_models?.length).toBeGreaterThan(0) }) - test("librarian omits fallback_models when only one provider matches", () => { - // #given only opencode-go is available - const config = createConfig({ hasOpencodeGo: true }) + test("librarian omits fallback_models when only ZAI is available", () => { + // #given only ZAI is available + const config = createConfig({ hasZaiCodingPlan: true }) // #when generateModelConfig is called const result = generateModelConfig(config) // #then librarian should not have fallback_models - expect(result.agents?.librarian?.model).toBe("opencode-go/minimax-m2.7") + expect(result.agents?.librarian?.model).toBe("zai-coding-plan/glm-4.7") expect(result.agents?.librarian?.fallback_models).toBeUndefined() }) }) diff --git a/src/cli/model-fallback.ts b/src/cli/model-fallback.ts index 088c4515e..6378482c6 100644 --- a/src/cli/model-fallback.ts +++ b/src/cli/model-fallback.ts @@ -127,7 +127,9 @@ export function generateModelConfig(config: InstallConfig): GeneratedOmoConfig { for (const [role, req] of Object.entries(CLI_AGENT_MODEL_REQUIREMENTS)) { if (role === "librarian") { let agentConfig: AgentConfig | undefined - if (avail.opencodeGo) { + if (avail.native.openai) { + agentConfig = { model: "openai/gpt-5.4-mini-fast" } + } else if (avail.opencodeGo) { agentConfig = { model: "opencode-go/minimax-m2.7" } } else if (avail.zai) { agentConfig = { model: ZAI_MODEL } @@ -142,7 +144,9 @@ export function generateModelConfig(config: InstallConfig): GeneratedOmoConfig { if (role === "explore") { let agentConfig: AgentConfig - if (avail.native.claude) { + if (avail.native.openai) { + agentConfig = { model: "openai/gpt-5.4-mini-fast" } + } else if (avail.native.claude) { agentConfig = { model: "anthropic/claude-haiku-4-5" } } else if (avail.opencodeZen) { agentConfig = { model: "opencode/claude-haiku-4-5" } diff --git a/src/cli/openai-only-model-catalog.test.ts b/src/cli/openai-only-model-catalog.test.ts index da544156c..91e910f60 100644 --- a/src/cli/openai-only-model-catalog.test.ts +++ b/src/cli/openai-only-model-catalog.test.ts @@ -54,8 +54,10 @@ describe("generateModelConfig OpenAI-only model catalog", () => { const result = generateModelConfig(config) // #then - expect(result.agents?.explore).toMatchObject({ model: "opencode-go/minimax-m2.7" }) - expect(result.agents?.librarian).toMatchObject({ model: "opencode-go/minimax-m2.7" }) + expect(result.agents?.explore).toMatchObject({ model: "openai/gpt-5.4-mini-fast" }) + expect(result.agents?.librarian).toMatchObject({ model: "openai/gpt-5.4-mini-fast" }) + expect(result.agents?.explore).not.toMatchObject({ variant: "medium" }) + expect(result.agents?.librarian).not.toMatchObject({ variant: "medium" }) expect(result.categories?.quick).toMatchObject({ model: "openai/gpt-5.4-mini" }) }) }) From 02e4de865eb1add67855c9abba697e2d6b2f14bd Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 13:30:11 +0900 Subject: [PATCH 4/8] docs(model): sync explorer and librarian guidance Document the new primary chain and install-time fallback behavior for explorer and librarian.\nKeep the user-facing guidance aligned with the runtime and CLI model selection. Co-authored-by: Sisyphus --- docs/guide/agent-model-matching.md | 10 +++++----- docs/guide/orchestration.md | 4 ++-- docs/reference/configuration.md | 4 ++-- docs/reference/features.md | 4 ++-- src/agents/AGENTS.md | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/guide/agent-model-matching.md b/docs/guide/agent-model-matching.md index 8c750a9b2..c2115039b 100644 --- a/docs/guide/agent-model-matching.md +++ b/docs/guide/agent-model-matching.md @@ -92,8 +92,8 @@ These agents do grep, search, and retrieval. They intentionally use the fastest, | Agent | Role | Fallback Chain | Notes | | --------------------- | ------------------ | ---------------------------------------------- | ----------------------------------------------------- | -| **Explore** | Fast codebase grep | github-copilot\|xai\|vercel/grok-code-fast-1 → opencode-go\|vercel/minimax-m2.7-highspeed → opencode\|vercel/minimax-m2.7 → anthropic\|opencode\|vercel/claude-haiku-4-5 → opencode\|vercel/gpt-5-nano | Exact runtime chain from `src/shared/model-requirements.ts`. | -| **Librarian** | Docs/code search | opencode-go\|vercel/minimax-m2.7 → opencode\|vercel/minimax-m2.7-highspeed → anthropic\|opencode\|vercel/claude-haiku-4-5 → opencode\|vercel/gpt-5-nano | Exact runtime chain from `src/shared/model-requirements.ts`. | +| **Explore** | Fast codebase grep | openai/gpt-5.4-mini-fast → opencode-go\|vercel/minimax-m2.7-highspeed → opencode-go\|vercel/minimax-m2.7 → anthropic\|opencode\|vercel/claude-haiku-4-5 → openai\|opencode\|vercel/gpt-5.4-nano | Exact runtime chain from `src/shared/model-requirements.ts`. | +| **Librarian** | Docs/code search | openai/gpt-5.4-mini-fast → opencode-go\|vercel/minimax-m2.7-highspeed → opencode-go\|vercel/minimax-m2.7 → anthropic\|opencode\|vercel/claude-haiku-4-5 → openai\|opencode\|vercel/gpt-5.4-nano | Exact runtime chain from `src/shared/model-requirements.ts`. | | **Multimodal Looker** | Vision/screenshots | openai\|opencode\|vercel/gpt-5.4 (medium) → opencode-go\|vercel/kimi-k2.5 → zai-coding-plan\|vercel/glm-4.6v → openai\|github-copilot\|opencode\|vercel/gpt-5-nano | Exact runtime chain from `src/shared/model-requirements.ts`. | | **Sisyphus-Junior** | Category executor | anthropic\|github-copilot\|opencode\|vercel/claude-sonnet-4-6 → opencode-go\|vercel/kimi-k2.5 → openai\|github-copilot\|opencode\|vercel/gpt-5.4 (medium) → opencode-go\|vercel/minimax-m2.7 → opencode/big-pickle | Exact runtime chain from `src/shared/model-requirements.ts`. | @@ -130,7 +130,7 @@ Principle-driven, explicit reasoning, deep technical capability. Best for agents | -------------------- | ------------------------------------------------------------------------------------------------------------ | | **Gemini 3.1 Pro** | Excels at visual/frontend tasks. Different reasoning style. Default for `visual-engineering` and `artistry`. | | **Gemini 3 Flash** | Fast. Good for doc search and light tasks. | -| **Grok Code Fast 1** | Blazing fast code grep. Default for Explore agent. | +| **GPT-5.4 Mini Fast** | Default for Explore and Librarian agents. Blazing-fast reasoning-capable mini model. | | **MiniMax M2.7** | Fast and smart. Used in OpenCode Go and OpenCode Zen utility fallback chains. | | **MiniMax M2.7 Highspeed** | High-speed OpenCode catalog entry used in utility fallback chains that prefer the fastest available MiniMax path. | @@ -144,8 +144,8 @@ A premium subscription tier ($10/month) that provides reliable access to Chinese | ------------------------ | --------------------------------------------------------------------- | | **opencode-go/kimi-k2.5** | Vision-capable, Claude-like reasoning. Used by Sisyphus, Atlas, Sisyphus-Junior, Multimodal Looker. | | **opencode-go/glm-5** | Text-only orchestration model. Used by Oracle, Prometheus, Metis, Momus. | -| **opencode-go/minimax-m2.7** | Ultra-cheap, fast responses. Used by Librarian, Atlas, and Sisyphus-Junior for utility work. | -| **opencode-go/minimax-m2.7-highspeed** | Even faster OpenCode Go MiniMax entry used by Explore when the high-speed catalog entry is available. | +| **opencode-go/minimax-m2.7** | Ultra-cheap, fast responses. Used by Atlas, Sisyphus-Junior, Explore and Librarian fallbacks for utility work. | +| **opencode-go/minimax-m2.7-highspeed** | Even faster OpenCode Go MiniMax entry used as a secondary fallback for Explore and Librarian when GPT-5.4 Mini Fast is unavailable. | **When It Gets Used:** diff --git a/docs/guide/orchestration.md b/docs/guide/orchestration.md index 0e21ce50a..0513be3f1 100644 --- a/docs/guide/orchestration.md +++ b/docs/guide/orchestration.md @@ -47,8 +47,8 @@ flowchart TB subgraph Workers["Worker Layer (Specialized Agents)"] Junior[" Sisyphus-Junior
(Task Executor)
claude-sonnet-4-6 / kimi-k2.5 / gpt-5.4 / minimax-m2.7"] Oracle[" Oracle
(Architecture)
gpt-5.4 / gemini-3.1-pro / claude-opus-4-7 / glm-5"] - Explore[" Explore
(Codebase Grep)
grok-code-fast-1 / minimax-m2.7-highspeed / claude-haiku-4-5"] - Librarian[" Librarian
(Docs/OSS)
minimax-m2.7 / minimax-m2.7-highspeed / claude-haiku-4-5"] +Explore[" Explore
(Codebase Grep)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] +Librarian[" Librarian
(Docs/OSS)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] Frontend[" visual-engineering
(category + frontend-ui-ux)
gemini-3.1-pro / glm-5 / claude-opus-4-7"] end diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index 04f510b6d..c6513bfe8 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -358,8 +358,8 @@ Capability data comes from provider runtime metadata first. OmO also ships bundl | **Sisyphus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/kimi-k2.5` → `kimi-for-coding/k2p5` → `opencode\|moonshotai\|moonshotai-cn\|firmware\|ollama-cloud\|aihubmix/kimi-k2.5` → `openai\|github-copilot\|opencode/gpt-5.4 (medium)` → `zai-coding-plan\|opencode/glm-5` → `opencode/big-pickle` | | **Hephaestus** | `gpt-5.4` | `gpt-5.4 (medium)` | | **oracle** | `gpt-5.4` | `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5` | -| **librarian** | `minimax-m2.7` | `opencode-go/minimax-m2.7` → `opencode/minimax-m2.7-highspeed` → `anthropic\|opencode/claude-haiku-4-5` → `opencode/gpt-5-nano` | -| **explore** | `grok-code-fast-1` | `github-copilot\|xai/grok-code-fast-1` → `opencode-go/minimax-m2.7-highspeed` → `opencode/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `opencode/gpt-5-nano` | +| **librarian** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano` | +| **explore** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano` | | **multimodal-looker** | `gpt-5.4` | `openai\|opencode/gpt-5.4 (medium)` → `opencode-go/kimi-k2.5` → `zai-coding-plan/glm-4.6v` → `openai\|github-copilot\|opencode/gpt-5-nano` | | **Prometheus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `opencode-go/glm-5` → `google\|github-copilot\|opencode/gemini-3.1-pro` | | **Metis** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `opencode-go/glm-5` → `kimi-for-coding/k2p5` | diff --git a/docs/reference/features.md b/docs/reference/features.md index 366554b6c..ab5f3925c 100644 --- a/docs/reference/features.md +++ b/docs/reference/features.md @@ -13,8 +13,8 @@ Core-agent tab cycling is deterministic via injected runtime order field. The fi | **Sisyphus** | `claude-opus-4-7` | The default orchestrator. Plans, delegates, and executes complex tasks using specialized subagents with aggressive parallel execution. Todo-driven workflow with extended thinking (32k budget). Fallback: `opencode-go/kimi-k2.5` → `kimi-for-coding/k2p5` → `opencode\|moonshotai\|moonshotai-cn\|firmware\|ollama-cloud\|aihubmix/kimi-k2.5` → `openai\|github-copilot\|opencode/gpt-5.4 (medium)` → `zai-coding-plan\|opencode/glm-5` → `opencode/big-pickle`. | | **Hephaestus** | `gpt-5.4` | The Legitimate Craftsman. Autonomous deep worker inspired by AmpCode's deep mode. Goal-oriented execution with thorough research before action. Explores codebase patterns, completes tasks end-to-end without premature stopping. Named after the Greek god of forge and craftsmanship. Requires a GPT-capable provider. | | **Oracle** | `gpt-5.4` | Architecture decisions, code review, debugging. Read-only consultation with stellar logical reasoning and deep analysis. Inspired by AmpCode. Fallback: `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5`. | -| **Librarian** | `minimax-m2.7` | Multi-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Fallback: `opencode/minimax-m2.7-highspeed` → `anthropic\|opencode/claude-haiku-4-5` → `opencode/gpt-5-nano`. | -| **Explore** | `grok-code-fast-1` | Fast codebase exploration and contextual grep. Fallback: `opencode-go/minimax-m2.7-highspeed` → `opencode/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `opencode/gpt-5-nano`. | +| **Librarian** | `gpt-5.4-mini-fast` | Multi-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Fallback: `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano`. | +| **Explore** | `gpt-5.4-mini-fast` | Fast codebase exploration and contextual grep. Fallback: `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano`. | | **Multimodal-Looker** | `gpt-5.4` | Visual content specialist. Analyzes PDFs, images, diagrams to extract information. Fallback: `opencode-go/kimi-k2.5` → `zai-coding-plan/glm-4.6v` → `openai\|github-copilot\|opencode/gpt-5-nano`. | ### Planning Agents diff --git a/src/agents/AGENTS.md b/src/agents/AGENTS.md index f92c44406..c69c0608a 100644 --- a/src/agents/AGENTS.md +++ b/src/agents/AGENTS.md @@ -13,8 +13,8 @@ Agent factories following `createXXXAgent(model) → AgentConfig` pattern. Each | **Sisyphus** | claude-opus-4-7 max | 0.1 | all | k2p5 -> kimi-k2.5 -> gpt-5.4 medium -> glm-5 -> big-pickle | Main orchestrator, plans + delegates | | **Hephaestus** | gpt-5.4 medium | 0.1 | all | — | Autonomous deep worker | | **Oracle** | gpt-5.4 high | 0.1 | subagent | gemini-3.1-pro high -> claude-opus-4-7 max | Read-only consultation | -| **Librarian** | minimax-m2.7 | 0.1 | subagent | minimax-m2.7-highspeed -> claude-haiku-4-5 -> gpt-5-nano | External docs/code search | -| **Explore** | grok-code-fast-1 | 0.1 | subagent | minimax-m2.7-highspeed -> minimax-m2.7 -> claude-haiku-4-5 -> gpt-5-nano | Contextual grep | +| **Librarian** | gpt-5.4-mini-fast | 0.1 | subagent | minimax-m2.7-highspeed -> minimax-m2.7 -> claude-haiku-4-5 -> gpt-5.4-nano | External docs/code search | +| **Explore** | gpt-5.4-mini-fast | 0.1 | subagent | minimax-m2.7-highspeed -> minimax-m2.7 -> claude-haiku-4-5 -> gpt-5.4-nano | Contextual grep | | **Multimodal-Looker** | gpt-5.3-codex medium | 0.1 | subagent | k2p5 -> gemini-3-flash -> glm-4.6v -> gpt-5-nano | PDF/image analysis | | **Metis** | claude-opus-4-7 max | **0.3** | subagent | gpt-5.4 high -> gemini-3.1-pro high | Pre-planning consultant | | **Momus** | gpt-5.4 xhigh | 0.1 | subagent | claude-opus-4-7 max -> gemini-3.1-pro high | Plan reviewer | From fe44363bf826535a708a86a6991f25b6f16e701f Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 13:38:23 +0900 Subject: [PATCH 5/8] fix(model-capabilities): drop pdf modality from gpt-5.4-mini-fast OpenAI's mini-fast variant only accepts text and image input; advertising pdf risks unsupported requests hitting runtime errors. --- src/shared/model-capabilities/supplemental-entries.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/model-capabilities/supplemental-entries.ts b/src/shared/model-capabilities/supplemental-entries.ts index 197d88001..87a35f71c 100644 --- a/src/shared/model-capabilities/supplemental-entries.ts +++ b/src/shared/model-capabilities/supplemental-entries.ts @@ -8,7 +8,7 @@ export const SUPPLEMENTAL_MODEL_CAPABILITIES: Record Date: Tue, 21 Apr 2026 13:38:23 +0900 Subject: [PATCH 6/8] docs(configuration): restore vercel aliases in explore/librarian rows Align documented fallback provider lists with the runtime chain in model-requirements.ts so operators see the same providers that resolve at runtime. --- docs/reference/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index c6513bfe8..3f59a7f7c 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -358,8 +358,8 @@ Capability data comes from provider runtime metadata first. OmO also ships bundl | **Sisyphus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/kimi-k2.5` → `kimi-for-coding/k2p5` → `opencode\|moonshotai\|moonshotai-cn\|firmware\|ollama-cloud\|aihubmix/kimi-k2.5` → `openai\|github-copilot\|opencode/gpt-5.4 (medium)` → `zai-coding-plan\|opencode/glm-5` → `opencode/big-pickle` | | **Hephaestus** | `gpt-5.4` | `gpt-5.4 (medium)` | | **oracle** | `gpt-5.4` | `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5` | -| **librarian** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano` | -| **explore** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/minimax-m2.7-highspeed` → `opencode-go/minimax-m2.7` → `anthropic\|opencode/claude-haiku-4-5` → `openai\|opencode/gpt-5.4-nano` | +| **librarian** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go\|vercel/minimax-m2.7-highspeed` → `opencode-go\|vercel/minimax-m2.7` → `anthropic\|opencode\|vercel/claude-haiku-4-5` → `openai\|opencode\|vercel/gpt-5.4-nano` | +| **explore** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go\|vercel/minimax-m2.7-highspeed` → `opencode-go\|vercel/minimax-m2.7` → `anthropic\|opencode\|vercel/claude-haiku-4-5` → `openai\|opencode\|vercel/gpt-5.4-nano` | | **multimodal-looker** | `gpt-5.4` | `openai\|opencode/gpt-5.4 (medium)` → `opencode-go/kimi-k2.5` → `zai-coding-plan/glm-4.6v` → `openai\|github-copilot\|opencode/gpt-5-nano` | | **Prometheus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `opencode-go/glm-5` → `google\|github-copilot\|opencode/gemini-3.1-pro` | | **Metis** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.4 (high)` → `opencode-go/glm-5` → `kimi-for-coding/k2p5` | From 3a6bd932525c0d6fa54bfddcb4736a3c4242bfd7 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 14:23:39 +0900 Subject: [PATCH 7/8] fix(cli): keep mini-fast primary in openai-only install catalog OPENAI_ONLY_AGENT_OVERRIDES was rewriting explore and librarian back to gpt-5.4 medium for OpenAI-only installs. Match the runtime primary so the install default stays on gpt-5.4-mini-fast. --- src/cli/__snapshots__/model-fallback.test.ts.snap | 12 ++++-------- src/cli/model-fallback.test.ts | 6 +++--- src/cli/openai-only-model-catalog.test.ts | 4 ++-- src/cli/openai-only-model-catalog.ts | 4 ++-- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index ce9ea35df..ddc9a60a0 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -206,16 +206,14 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "variant": "medium", }, "explore": { - "model": "openai/gpt-5.4", - "variant": "medium", + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "model": "openai/gpt-5.4", "variant": "medium", }, "librarian": { - "model": "openai/gpt-5.4", - "variant": "medium", + "model": "openai/gpt-5.4-mini-fast", }, "metis": { "model": "openai/gpt-5.4", @@ -296,16 +294,14 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "variant": "medium", }, "explore": { - "model": "openai/gpt-5.4", - "variant": "medium", + "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { "model": "openai/gpt-5.4", "variant": "medium", }, "librarian": { - "model": "openai/gpt-5.4", - "variant": "medium", + "model": "openai/gpt-5.4-mini-fast", }, "metis": { "model": "openai/gpt-5.4", diff --git a/src/cli/model-fallback.test.ts b/src/cli/model-fallback.test.ts index 5d6d2915a..ec27d40c6 100644 --- a/src/cli/model-fallback.test.ts +++ b/src/cli/model-fallback.test.ts @@ -355,9 +355,9 @@ describe("generateModelConfig", () => { // #when generateModelConfig is called const result = generateModelConfig(config) - // #then explore should use native OpenAI model - expect(result.agents?.explore?.model).toBe("openai/gpt-5.4") - expect(result.agents?.explore?.variant).toBe("medium") + // #then explore should use native OpenAI mini-fast (primary model) + expect(result.agents?.explore?.model).toBe("openai/gpt-5.4-mini-fast") + expect(result.agents?.explore?.variant).toBeUndefined() }) test("explore uses gpt-5-mini when only Copilot available", () => { diff --git a/src/cli/openai-only-model-catalog.test.ts b/src/cli/openai-only-model-catalog.test.ts index 91e910f60..7c94aa850 100644 --- a/src/cli/openai-only-model-catalog.test.ts +++ b/src/cli/openai-only-model-catalog.test.ts @@ -28,8 +28,8 @@ describe("generateModelConfig OpenAI-only model catalog", () => { const result = generateModelConfig(config) // #then - expect(result.agents?.explore).toEqual({ model: "openai/gpt-5.4", variant: "medium" }) - expect(result.agents?.librarian).toEqual({ model: "openai/gpt-5.4", variant: "medium" }) + expect(result.agents?.explore).toEqual({ model: "openai/gpt-5.4-mini-fast" }) + expect(result.agents?.librarian).toEqual({ model: "openai/gpt-5.4-mini-fast" }) }) test("fills remaining OpenAI-only category gaps with OpenAI models", () => { diff --git a/src/cli/openai-only-model-catalog.ts b/src/cli/openai-only-model-catalog.ts index 186b600b2..36d6ca802 100644 --- a/src/cli/openai-only-model-catalog.ts +++ b/src/cli/openai-only-model-catalog.ts @@ -1,8 +1,8 @@ import type { AgentConfig, CategoryConfig, GeneratedOmoConfig, ProviderAvailability } from "./model-fallback-types" const OPENAI_ONLY_AGENT_OVERRIDES: Record = { - explore: { model: "openai/gpt-5.4", variant: "medium" }, - librarian: { model: "openai/gpt-5.4", variant: "medium" }, + explore: { model: "openai/gpt-5.4-mini-fast" }, + librarian: { model: "openai/gpt-5.4-mini-fast" }, } const OPENAI_ONLY_CATEGORY_OVERRIDES: Record = { From 993fe20a1218074e7f92a756831fb7aa3ed60f2b Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 21 Apr 2026 14:23:39 +0900 Subject: [PATCH 8/8] docs(orchestration): reindent explore/librarian mermaid nodes Align with sibling Junior/Oracle/Frontend nodes in the Worker Layer subgraph. --- docs/guide/orchestration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guide/orchestration.md b/docs/guide/orchestration.md index 0513be3f1..b25a93bbb 100644 --- a/docs/guide/orchestration.md +++ b/docs/guide/orchestration.md @@ -47,8 +47,8 @@ flowchart TB subgraph Workers["Worker Layer (Specialized Agents)"] Junior[" Sisyphus-Junior
(Task Executor)
claude-sonnet-4-6 / kimi-k2.5 / gpt-5.4 / minimax-m2.7"] Oracle[" Oracle
(Architecture)
gpt-5.4 / gemini-3.1-pro / claude-opus-4-7 / glm-5"] -Explore[" Explore
(Codebase Grep)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] -Librarian[" Librarian
(Docs/OSS)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] + Explore[" Explore
(Codebase Grep)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] + Librarian[" Librarian
(Docs/OSS)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] Frontend[" visual-engineering
(category + frontend-ui-ux)
gemini-3.1-pro / glm-5 / claude-opus-4-7"] end