From 50b71adb6979fb731d37c3591c092700bd453774 Mon Sep 17 00:00:00 2001 From: JoaoHenriqueBarbosa Date: Thu, 19 Feb 2026 11:44:33 -0300 Subject: [PATCH 1/3] fix: only send context-1m beta header for models with >200K context The `context-1m-2025-08-07` anthropic-beta header was unconditionally sent for all Anthropic API requests. This causes "extra usage is required for long context requests" errors for users on plans that don't include the long context beta (e.g. Claude Max plan). Now the header is only appended when the model's context limit exceeds 200K tokens, which indicates it is a 1M context model that actually needs the beta. Fixes anthropics/claude-code#23700 --- packages/opencode/src/provider/provider.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index cf9c9f63e..1d2974050 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -103,7 +103,7 @@ export namespace Provider { // TODO: Add adaptive thinking headers when @ai-sdk/anthropic supports it: // adaptive-thinking-2026-01-28,effort-2025-11-24,max-effort-2026-01-24 "anthropic-beta": - "claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-1m-2025-08-07", + "claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14", }, }, } @@ -1025,6 +1025,19 @@ export namespace Provider { ...model.headers, } + // Only send context-1m beta header when the model actually supports >200K context + // This prevents "extra usage is required for long context requests" errors + // for users on plans that don't include the long context beta (e.g. Max plan) + if (model.api.npm === "@ai-sdk/anthropic" && model.limit.context > 200_000) { + const existing = options["headers"]?.["anthropic-beta"] ?? "" + if (!existing.includes("context-1m-2025-08-07")) { + options["headers"] = { + ...options["headers"], + "anthropic-beta": existing ? `${existing},context-1m-2025-08-07` : "context-1m-2025-08-07", + } + } + } + const key = Bun.hash.xxHash32(JSON.stringify({ providerID: model.providerID, npm: model.api.npm, options })) const existing = s.sdk.get(key) if (existing) return existing From c0ce0008fc2d16ea87d46e339d2056407ab70bb3 Mon Sep 17 00:00:00 2001 From: John Enrique Date: Thu, 19 Feb 2026 17:06:50 -0300 Subject: [PATCH 2/3] Update packages/opencode/src/provider/provider.ts Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- packages/opencode/src/provider/provider.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 2ae3d07d7..22c7ebb96 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1034,6 +1034,7 @@ export namespace Provider { // Only send context-1m beta header when the model actually supports >200K context // This prevents "extra usage is required for long context requests" errors // for users on plans that don't include the long context beta (e.g. Max plan) + // kilocode_change start if (model.api.npm === "@ai-sdk/anthropic" && model.limit.context > 200_000) { const existing = options["headers"]?.["anthropic-beta"] ?? "" if (!existing.includes("context-1m-2025-08-07")) { From 1e71ec88ea0544341bc4eda12abae7f8224322da Mon Sep 17 00:00:00 2001 From: JoaoHenriqueBarbosa Date: Thu, 19 Feb 2026 17:11:37 -0300 Subject: [PATCH 3/3] chore: add kilocode_change markers --- packages/opencode/src/provider/provider.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 22c7ebb96..019b7a420 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1044,6 +1044,7 @@ export namespace Provider { } } } + // kilocode_change end const key = Bun.hash.xxHash32(JSON.stringify({ providerID: model.providerID, npm: model.api.npm, options })) const existing = s.sdk.get(key)