From bfd781c55223ba1ab551106afb8fb2247feacc18 Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Wed, 1 Apr 2026 05:31:02 +0900 Subject: [PATCH] fix: skip role model override on failover handoffs When forcedAgentType is set (failover), the role's configured model (e.g. claude-opus-4-6 for reviewer) was injected as CODEX_MODEL, causing codex SDK to reject it. Now model overrides are only injected for the primary agent type, not failover runs. --- src/container-runner.ts | 4 +++- src/message-agent-executor.ts | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/container-runner.ts b/src/container-runner.ts index ea3139c..56a73dc 100644 --- a/src/container-runner.ts +++ b/src/container-runner.ts @@ -494,7 +494,9 @@ export async function runReviewerContainer(args: { containerName, groupAgentType: group.agentType, isCodexAgent, - runnerPath: isCodexAgent ? '/app/codex/dist/index.js' : '/app/agent/dist/index.js', + runnerPath: isCodexAgent + ? '/app/codex/dist/index.js' + : '/app/agent/dist/index.js', }, 'Container exec runner selection', ); diff --git a/src/message-agent-executor.ts b/src/message-agent-executor.ts index 515076b..04e7f03 100644 --- a/src/message-agent-executor.ts +++ b/src/message-agent-executor.ts @@ -194,8 +194,11 @@ export async function runAgentForGroup( roomRoleContext, hasHumanMessage: args.hasHumanMessage, }); - // Inject role-specific model overrides into envOverrides - if (pairedExecutionContext) { + // Inject role-specific model overrides into envOverrides. + // When running a forced agent type (failover), skip the role's configured + // model — it belongs to the primary agent type (e.g. claude-opus-4-6 for + // a claude-code reviewer) and would be rejected by the fallback runtime. + if (pairedExecutionContext && !args.forcedAgentType) { const roleConfig = getRoleModelConfig(activeRole); if (roleConfig.model) { const modelKey = isClaudeCodeAgent ? 'CLAUDE_MODEL' : 'CODEX_MODEL';