From 99c7df564040af601d93347a6f8fdf63c28f8b25 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 ce8d756..d2a7af2 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 ecf2c22..91890f4 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 84a4e6e..33481ea 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;