From acfffdb0685096dcd73b82b139ae6f167352617d Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Wed, 4 Feb 2026 00:30:35 -0600 Subject: [PATCH] fix(session): include cache.write tokens in isOverflow() context calculation isOverflow() excludes cache_creation_input_tokens from its token count, causing compaction to trigger late for Anthropic models using prompt caching. Anthropic partitions input tokens into three disjoint categories: total_input = input_tokens + cache_read_input_tokens + cache_creation_input_tokens The overflow check only summed two of three, missing cache.write entirely. Debug data showed 24% reported vs 54% actual utilization at a single turn, with 62,900 cache_creation_input_tokens invisible to the overflow check. This adds input.tokens.cache.write to the sum. No impact on non-caching providers (cache.write defaults to 0). --- packages/opencode/src/session/compaction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index fb3825302918..88ff201b55a2 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -32,7 +32,7 @@ export namespace SessionCompaction { if (config.compaction?.auto === false) return false const context = input.model.limit.context if (context === 0) return false - const count = input.tokens.input + input.tokens.cache.read + input.tokens.output + const count = input.tokens.input + input.tokens.cache.read + input.tokens.cache.write + input.tokens.output const output = Math.min(input.model.limit.output, SessionPrompt.OUTPUT_TOKEN_MAX) || SessionPrompt.OUTPUT_TOKEN_MAX const usable = input.model.limit.input || context - output return count > usable