From 146ca34a7aaa39d2b3e8e1f9d3896e367cfda9a0 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 4 Apr 2026 01:27:40 +0900 Subject: [PATCH] fix(hooks): use actual context window token counts Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- ...ontext-window-monitor.model-context-limits.test.ts | 9 ++++----- src/hooks/context-window-monitor.test.ts | 6 +++--- src/hooks/context-window-monitor.ts | 11 +++-------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/hooks/context-window-monitor.model-context-limits.test.ts b/src/hooks/context-window-monitor.model-context-limits.test.ts index 3bd961e2f..104e49c91 100644 --- a/src/hooks/context-window-monitor.model-context-limits.test.ts +++ b/src/hooks/context-window-monitor.model-context-limits.test.ts @@ -86,8 +86,8 @@ describe("context-window-monitor modelContextLimitsCache", () => { // then expect(output.output).toContain("context remaining") - expect(output.output).toContain("524,288-token context window") - expect(output.output).toContain("[Context Status: 72.5% used (380,000/524,288 tokens), 27.5% remaining]") + expect(output.output).toContain("262,144-token context window") + expect(output.output).toContain("[Context Status: 72.5% used (190,000/262,144 tokens), 27.5% remaining]") expect(output.output).not.toContain("1,000,000") }) @@ -215,9 +215,8 @@ describe("context-window-monitor modelContextLimitsCache", () => { const output = createOutput() await hook["tool.execute.after"]({ tool: "bash", sessionID, callID: "call_1" }, output) - // then — 360K/500K = 72%, above 70% threshold, uses cached 500K limit expect(output.output).toContain("context remaining") - expect(output.output).toContain("1,000,000-token context window") + expect(output.output).toContain("500,000-token context window") }) }) }) @@ -262,7 +261,7 @@ describe("context-window-monitor modelContextLimitsCache", () => { // then expect(output.output).toContain("context remaining") - expect(output.output).toContain("400,000-token context window") + expect(output.output).toContain("200,000-token context window") }) }) }) diff --git a/src/hooks/context-window-monitor.test.ts b/src/hooks/context-window-monitor.test.ts index f25c21e8b..1693e005b 100644 --- a/src/hooks/context-window-monitor.test.ts +++ b/src/hooks/context-window-monitor.test.ts @@ -106,7 +106,7 @@ describe("context-window-monitor", () => { // #given token usage exceeds 70% threshold // #when tool.execute.after is called // #then context reminder should be appended to output - it("should append context reminder with doubled displayed counts when usage exceeds threshold", async () => { + it("should append context reminder with actual token counts when usage exceeds threshold", async () => { const hook = createContextWindowMonitorHook(ctx as never) const sessionID = "ses_high_usage" @@ -138,8 +138,8 @@ describe("context-window-monitor", () => { ) expect(output.output).toContain("context remaining") - expect(output.output).toContain("400,000-token context window") - expect(output.output).toContain("[Context Status: 80.0% used (320,000/400,000 tokens), 20.0% remaining]") + expect(output.output).toContain("200,000-token context window") + expect(output.output).toContain("[Context Status: 80.0% used (160,000/200,000 tokens), 20.0% remaining]") expect(ctx.client.session.messages).not.toHaveBeenCalled() }) diff --git a/src/hooks/context-window-monitor.ts b/src/hooks/context-window-monitor.ts index 63e8874ce..3d137ae6d 100644 --- a/src/hooks/context-window-monitor.ts +++ b/src/hooks/context-window-monitor.ts @@ -6,14 +6,9 @@ import { import { createSystemDirective, SystemDirectiveTypes } from "../shared/system-directive" const CONTEXT_WARNING_THRESHOLD = 0.70 -const DISPLAY_TOKEN_COUNT_MULTIPLIER = 2 - -function toDisplayTokenCount(actualTokenCount: number): number { - return actualTokenCount * DISPLAY_TOKEN_COUNT_MULTIPLIER -} function createContextReminder(actualLimit: number): string { - const limitTokens = toDisplayTokenCount(actualLimit).toLocaleString() + const limitTokens = actualLimit.toLocaleString() return `${createSystemDirective(SystemDirectiveTypes.CONTEXT_WINDOW_MONITOR)} @@ -72,8 +67,8 @@ export function createContextWindowMonitorHook( const usedPct = (actualUsagePercentage * 100).toFixed(1) const remainingPct = ((1 - actualUsagePercentage) * 100).toFixed(1) - const usedTokens = toDisplayTokenCount(totalInputTokens).toLocaleString() - const limitTokens = toDisplayTokenCount(actualLimit).toLocaleString() + const usedTokens = totalInputTokens.toLocaleString() + const limitTokens = actualLimit.toLocaleString() output.output += `\n\n${createContextReminder(actualLimit)} [Context Status: ${usedPct}% used (${usedTokens}/${limitTokens} tokens), ${remainingPct}% remaining]`