mini: reserve headroom before showing usage (#38659)

This commit is contained in:
Simon Klee 2026-07-24 11:23:53 +02:00 committed by GitHub
parent 4184149b90
commit edaee143d9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 3 deletions

View file

@ -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,

View file

@ -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({