fix(anthropic-effort): skip effort injection for internal agents (fixes #2940)

Internal agents (title, summary, compaction) no longer receive the
anthropic-beta effort header, preventing 400 errors on Google Vertex
Anthropic provider.

Verified: 12 tests pass, typecheck clean
This commit is contained in:
YeonGyu-Kim
2026-03-30 10:33:32 +09:00
parent 7bf7b20444
commit 67253447b7
2 changed files with 27 additions and 1 deletions
+8 -1
View File
@@ -1,6 +1,7 @@
import { log, normalizeModelID } from "../../shared"
const OPUS_PATTERN = /claude-.*opus/i
const INTERNAL_SKIP_AGENTS = new Set(["title", "summary", "compaction"])
function isClaudeProvider(providerID: string, modelID: string): boolean {
if (["anthropic", "google-vertex-anthropic", "opencode"].includes(providerID)) return true
@@ -13,6 +14,11 @@ function isOpusModel(modelID: string): boolean {
return OPUS_PATTERN.test(normalized)
}
function shouldSkipForInternalAgent(agentName: string | undefined): boolean {
if (!agentName) return false
return INTERNAL_SKIP_AGENTS.has(agentName.trim().toLowerCase())
}
interface ChatParamsInput {
sessionID: string
agent: { name?: string }
@@ -48,10 +54,11 @@ export function createAnthropicEffortHook() {
input: ChatParamsInput,
output: ChatParamsOutput
): Promise<void> => {
const { model, message } = input
const { agent, model, message } = input
if (!model?.modelID || !model?.providerID) return
if (message.variant !== "max") return
if (!isClaudeProvider(model.providerID, model.modelID)) return
if (shouldSkipForInternalAgent(agent?.name)) return
if (output.options.effort !== undefined) return
const opus = isOpusModel(model.modelID)