diff --git a/packages/tui/src/mini/footer.width.ts b/packages/tui/src/mini/footer.width.ts index c48f7eeb15a..f6ee290fe4f 100644 --- a/packages/tui/src/mini/footer.width.ts +++ b/packages/tui/src/mini/footer.width.ts @@ -6,6 +6,8 @@ export function footerWidthPolicy(width: number) { } } +const USAGE_HEADROOM = 8 + export function footerStatuslinePolicy(input: { width: number mainWidth: number @@ -18,10 +20,10 @@ export function footerStatuslinePolicy(input: { }) { let remaining = input.width - input.mainWidth - (input.commandWidth ?? 0) let hasSection = input.commandWidth !== undefined - const include = (width: number | undefined) => { + const include = (width: number | undefined, headroom = 0) => { if (width === undefined) return false const required = width + (hasSection ? 3 : 1) - if (remaining < required) return false + if (remaining < required + headroom) return false remaining -= required hasSection = true return true @@ -40,7 +42,7 @@ export function footerStatuslinePolicy(input: { (showAgent || input.agentWidth === undefined) && contextComplete && (showVariant || input.variantWidth === undefined) && - include(input.usageWidth) + include(input.usageWidth, USAGE_HEADROOM) return { showAgent, diff --git a/packages/tui/test/mini/footer.view.test.tsx b/packages/tui/test/mini/footer.view.test.tsx index ae1c8322baa..022e90623ba 100644 --- a/packages/tui/test/mini/footer.view.test.tsx +++ b/packages/tui/test/mini/footer.view.test.tsx @@ -1522,6 +1522,27 @@ test("direct footer shows full usage metadata when room is available", async () } }) +test("direct footer omits usage when it would fill the statusline", async () => { + const app = await renderFooter({ + state: { phase: "running", model: "GPT-5.6 SoL", usage: "8.4K (1%) ยท $0.01" }, + currentVariant: "high", + mono: true, + width: 66, + }) + + try { + await app.renderOnce() + const frame = app.captureCharFrame() + + expect(frame).toContain("esc interrupt") + expect(frame).toContain("GPT-5.6 SoL high") + expect(frame).toContain("ctrl+p cmd") + expect(frame).not.toContain("8.4K") + } finally { + app.cleanup() + } +}) + test("direct footer hides routine activity and shows explicit notices", async () => { let status = "" const app = await renderFooter({