From b5b18ae08b3053ad3b8f4ba12f8fa29e4a04a54d Mon Sep 17 00:00:00 2001 From: Buseong Kim Date: Wed, 21 Jan 2026 16:45:12 +0900 Subject: [PATCH] fix(opencode): accumulate step tokens for compaction --- packages/opencode/src/session/processor.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 27071056180a..002e1c009a74 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -239,9 +239,27 @@ export namespace SessionProcessor { usage: value.usage, metadata: value.providerMetadata, }) + const prev = input.assistantMessage.tokens ?? { + input: 0, + output: 0, + reasoning: 0, + cache: { + read: 0, + write: 0, + }, + } + const tokens = { + input: prev.input + usage.tokens.input, + output: prev.output + usage.tokens.output, + reasoning: prev.reasoning + usage.tokens.reasoning, + cache: { + read: prev.cache.read + usage.tokens.cache.read, + write: prev.cache.write + usage.tokens.cache.write, + }, + } input.assistantMessage.finish = value.finishReason input.assistantMessage.cost += usage.cost - input.assistantMessage.tokens = usage.tokens + input.assistantMessage.tokens = tokens await Session.updatePart({ id: Identifier.ascending("part"), reason: value.finishReason, @@ -271,7 +289,7 @@ export namespace SessionProcessor { sessionID: input.sessionID, messageID: input.assistantMessage.parentID, }) - if (await SessionCompaction.isOverflow({ tokens: usage.tokens, model: input.model })) { + if (await SessionCompaction.isOverflow({ tokens, model: input.model })) { needsCompaction = true } break