Repository navigation
feat(tui): pin the last message trailer and shed busy footer hints - #155
Merged
Merged
Conversation
Two layout changes above the prompt. The last assistant message's trailer is extracted into an exported MessageTrailer and hoisted out of the transcript into the pinned block below the todo panel, so "Baked for <duration>" sits directly above the prompt and stays there when you scroll back through history. History keeps its trailers inline. Spacing moves with it: the todo panel takes over the blank row that separated the pinned block from the transcript, and the pinned trailer only adds its own top gap when no panel precedes it. The busy footer carries spinner, interrupt hint, modified-file count and context/cost. As the terminal narrows flexbox runs the gaps to zero and below ~85 columns the row wraps and clips the cost. It now sheds by value instead: the palette hint below 108 columns, the modified-file count below 88. The spinner and interrupt hint always stay. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
quickbeard
force-pushed
the
footer-trailer-layout
branch
from
August 2, 2026 10:35
2dce3f6 to
bb8f655
Compare
This was referenced Aug 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two layout changes to the block above the prompt.
Pinned message trailer
Baked for <duration>used to live at the bottom of the transcript, which put the todo panel between it and the input box and made it scroll away as soon as you moved back through history.The trailer is extracted from
AssistantMessageinto an exportedMessageTrailer(it owns themodel/final/duration/suppressed/abortedmemos, which moved with it).AssistantMessagerenders it inline only for history;Sessionrenders the last message's copy in the pinned block, between the todo panel and the prompt slot:Spacing moved with it: the todo panel takes over the blank row that used to come from the trailer's
marginTop, and the pinned trailer adds its own top gap only when no panel precedes it (spacedprop, driven by a newtodoActivepredicate shared withTodoPanel). Verified in all four combinations — both visible, trailer only, panel only, neither.Side effect worth flagging: the pinned trailer no longer scrolls away.
Width-tiered busy footer
While a turn runs the row carries the spinner, the interrupt hint, the modified-file count and context/cost. As the terminal narrows, flexbox first squeezes the gaps to single spaces, and below ~85 columns the row wraps to two lines and clips the cost:
It now sheds by value instead:
ctrl+p commandsThe spinner and interrupt hint always stay. Measured at 120/100/90/80/70 — all render on one line (118, 98, 88, 78, 68 columns used).
Notes
DIVERGENCES.md: two new rows, plus edits to the two existing rows this touches (the trailer-dedup row and the busy-arm hint row).CHANGELOG.md: an entry for each change.footer-width.view.test.tsx(3 tests across widths) and a pinned-position test added tomessage-trailer.view.test.tsx.@ mention popup lists files before references and agents) is pre-existing and unrelated — it fails identically on a cleanmaincheckout withENOENT /tmp/opencode/state/kv.json.🤖 Generated with Claude Code