From 77ac46693ffc28a2ddab30e48b8bc48fcdfefa6b Mon Sep 17 00:00:00 2001 From: Steven Vo <875426+stevenvo@users.noreply.github.com> Date: Sat, 3 Jan 2026 04:06:06 -0800 Subject: [PATCH] fix: respect ANTHROPIC_1M_CONTEXT and VERTEX_ANTHROPIC_1M_CONTEXT env vars (#450) - Update preemptive-compaction hook to use 1M limit when env vars set - Update dynamic-truncator to use 1M limit for output truncation - Update context-window-monitor to use 1M limit for usage tracking Previously hardcoded 200k limits caused compaction at 140k tokens even with 1M context enabled. Now respects env vars consistently with base opencode implementation. Fixes compaction triggering too early with Claude Sonnet 4.5 1M context. Related to anomalyco/opencode#6660 --- src/hooks/context-window-monitor.ts | 6 +++++- src/hooks/preemptive-compaction/index.ts | 6 +++++- src/shared/dynamic-truncator.ts | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/hooks/context-window-monitor.ts b/src/hooks/context-window-monitor.ts index ce8d756b0..d2a7af24c 100644 --- a/src/hooks/context-window-monitor.ts +++ b/src/hooks/context-window-monitor.ts @@ -1,7 +1,11 @@ import type { PluginInput } from "@opencode-ai/plugin" const ANTHROPIC_DISPLAY_LIMIT = 1_000_000 -const ANTHROPIC_ACTUAL_LIMIT = 200_000 +const ANTHROPIC_ACTUAL_LIMIT = + process.env.ANTHROPIC_1M_CONTEXT === "true" || + process.env.VERTEX_ANTHROPIC_1M_CONTEXT === "true" + ? 1_000_000 + : 200_000 const CONTEXT_WARNING_THRESHOLD = 0.70 const CONTEXT_REMINDER = `[SYSTEM REMINDER - 1M Context Window] diff --git a/src/hooks/preemptive-compaction/index.ts b/src/hooks/preemptive-compaction/index.ts index ecf2c2297..91890f497 100644 --- a/src/hooks/preemptive-compaction/index.ts +++ b/src/hooks/preemptive-compaction/index.ts @@ -48,7 +48,11 @@ interface MessageWrapper { } const CLAUDE_MODEL_PATTERN = /claude-(opus|sonnet|haiku)/i -const CLAUDE_DEFAULT_CONTEXT_LIMIT = 200_000 +const CLAUDE_DEFAULT_CONTEXT_LIMIT = + process.env.ANTHROPIC_1M_CONTEXT === "true" || + process.env.VERTEX_ANTHROPIC_1M_CONTEXT === "true" + ? 1_000_000 + : 200_000 function isSupportedModel(modelID: string): boolean { return CLAUDE_MODEL_PATTERN.test(modelID) diff --git a/src/shared/dynamic-truncator.ts b/src/shared/dynamic-truncator.ts index 84a4e6e8f..33481ea92 100644 --- a/src/shared/dynamic-truncator.ts +++ b/src/shared/dynamic-truncator.ts @@ -1,6 +1,10 @@ import type { PluginInput } from "@opencode-ai/plugin"; -const ANTHROPIC_ACTUAL_LIMIT = 200_000; +const ANTHROPIC_ACTUAL_LIMIT = + process.env.ANTHROPIC_1M_CONTEXT === "true" || + process.env.VERTEX_ANTHROPIC_1M_CONTEXT === "true" + ? 1_000_000 + : 200_000; const CHARS_PER_TOKEN_ESTIMATE = 4; const DEFAULT_TARGET_MAX_TOKENS = 50_000;