Skip to content

feat(tui,webui): columnize the session-list detail line#945

Merged
edwin-zvs merged 6 commits into
mainfrom
list-detail-columns
Jul 23, 2026
Merged

feat(tui,webui): columnize the session-list detail line#945
edwin-zvs merged 6 commits into
mainfrom
list-detail-columns

Conversation

@edwin-zvs

@edwin-zvs edwin-zvs commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to the full-view feedback: with real fleet data the detail line read poorly — no field started at the same x on any two rows (variable-width model names + omission), everything shared one muted style, and long-lived busy sessions ballooned into busy 2579m57s. This columnizes the line on both clients (spec 0106 updated):

  • Shared columns, vertical scanning. The context gauge leads the row (highest-priority scan signal), activity and tokens follow in shared columns, and the identity cell (model·effort, or the session's directory for model-less sessions) right-anchors at the row edge — stacking directly under the title row's harness label so the two "what's running this" facts group vertically, with the most variable-width field where its ragged left edge can't disturb alignment. TUI widths are computed across the whole list per frame (stable while scrolling); the web list uses fixed cell widths.
  • Placeholders hold empty cells open (dim ) so a column's position always means the same field.
  • Style hierarchy: values one step brighter than unit suffixes/placeholders; live busy time in the running green.
  • Bounded labels: busy goes coarse past an hour (busy 43h… TUI keeps 4m12s precision below); the web's narrower column uses single-unit busy throughout. The gauge clamps at 100% when a harness reports usage above its inferred window (the 146% in the report).
  • Narrow panes drop whole columns right-to-left (tokens → activity → identity, gauge last), identically on every row. On the web, dragging the sidebar wider reveals more columns, and the detail row's hover tooltip always carries the full data.

TUI

tui columns

web UI

web columns

Both captured live from a seeded daemon with deliberately varied data: long/short model ids, sessions missing context or model, shells with only busy timers.

Testing

  • cargo test --workspace green (1765 passed) including web_smoke against the rebuilt binary.
  • New/updated tests: cell extraction (model fallback, gauge clamp at 100%, busy/age selection), coarse busy formatting, shared-column width computation, and a two-session alignment test asserting the gauge starts at the same column and tokens right-anchor at the same edge across rows of different model widths.
  • Web verified live in Chrome at narrow (drop behavior, ticking green busy) and widened (all columns) sidebar widths; console clean.

🤖 Generated with Claude Code

The full-view detail line was a left-packed, variable-content text run:
no field started at the same x on any two rows, omission made position
meaningless, everything shared one muted style, and long-lived busy
sessions ballooned into '2579m57s'. Restructure it for vertical
scanning (spec 0106 updated):

- Shared columns: identity (model·effort, or the session's directory)
  left-aligned and capped, context gauge at a fixed slot, activity and
  tokens right-anchored at the row edge. TUI column widths are computed
  across the whole list each frame so nothing shifts while scrolling;
  the web list uses fixed cell widths with a drag-wider sidebar
  revealing more columns.
- Empty cells hold a dim placeholder instead of collapsing, so a
  column's position always means the same field.
- Style hierarchy: values one step brighter than unit suffixes and
  placeholders; live busy time in the running color.
- Bounded labels: busy time goes coarse past an hour (TUI) / always
  single-unit (web's narrower column); the gauge clamps at 100% when a
  harness reports usage above its inferred window.
- Narrow panes drop whole columns right-to-left (tokens, activity,
  identity - gauge last), identically on every row; the web detail row
  gets a hover tooltip carrying everything including dropped columns.
Review feedback: gauge leads the detail line (highest-priority scan
signal), activity and tokens follow in shared columns, and the
model/identity cell right-anchors at the row edge — stacking directly
under the title row's harness label so the two 'what's running this'
facts read as one group, with the most variable-width field where a
ragged left edge cannot disturb column alignment.
@edwin-zvs
edwin-zvs merged commit a66bd1a into main Jul 23, 2026
1 check passed
@edwin-zvs
edwin-zvs deleted the list-detail-columns branch July 23, 2026 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant