fix(hooks): use last assistant message tokens instead of cumulative sum
Previously, token calculation accumulated ALL assistant messages' tokens, causing incorrect usage display (e.g., 524.9%) after compaction. Now uses only the last message's input tokens, which reflects the actual current context window usage. 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
@@ -52,11 +52,10 @@ export function createContextWindowMonitorHook(ctx: PluginInput) {
|
|||||||
const lastAssistant = assistantMessages[assistantMessages.length - 1]
|
const lastAssistant = assistantMessages[assistantMessages.length - 1]
|
||||||
if (lastAssistant.providerID !== "anthropic") return
|
if (lastAssistant.providerID !== "anthropic") return
|
||||||
|
|
||||||
const totalInputTokens = assistantMessages.reduce((sum, m) => {
|
// Use only the last assistant message's input tokens
|
||||||
const inputTokens = m.tokens?.input ?? 0
|
// This reflects the ACTUAL current context window usage (post-compaction)
|
||||||
const cacheReadTokens = m.tokens?.cache?.read ?? 0
|
const lastTokens = lastAssistant.tokens
|
||||||
return sum + inputTokens + cacheReadTokens
|
const totalInputTokens = (lastTokens?.input ?? 0) + (lastTokens?.cache?.read ?? 0)
|
||||||
}, 0)
|
|
||||||
|
|
||||||
const actualUsagePercentage = totalInputTokens / ANTHROPIC_ACTUAL_LIMIT
|
const actualUsagePercentage = totalInputTokens / ANTHROPIC_ACTUAL_LIMIT
|
||||||
|
|
||||||
|
|||||||
@@ -98,11 +98,11 @@ export function createGrepOutputTruncatorHook(ctx: PluginInput) {
|
|||||||
|
|
||||||
if (assistantMessages.length === 0) return
|
if (assistantMessages.length === 0) return
|
||||||
|
|
||||||
const totalInputTokens = assistantMessages.reduce((sum, m) => {
|
// Use only the last assistant message's input tokens
|
||||||
const inputTokens = m.tokens?.input ?? 0
|
// This reflects the ACTUAL current context window usage (post-compaction)
|
||||||
const cacheReadTokens = m.tokens?.cache?.read ?? 0
|
const lastAssistant = assistantMessages[assistantMessages.length - 1]
|
||||||
return sum + inputTokens + cacheReadTokens
|
const lastTokens = lastAssistant.tokens
|
||||||
}, 0)
|
const totalInputTokens = (lastTokens?.input ?? 0) + (lastTokens?.cache?.read ?? 0)
|
||||||
|
|
||||||
const remainingTokens = ANTHROPIC_ACTUAL_LIMIT - totalInputTokens
|
const remainingTokens = ANTHROPIC_ACTUAL_LIMIT - totalInputTokens
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user