Skip to content

UI Rework: graduated attention, dashboard-first, richer cards, search, visual polish#201

Merged
maxbeizer merged 25 commits intomainfrom
ui-rework-192
Feb 28, 2026
Merged

UI Rework: graduated attention, dashboard-first, richer cards, search, visual polish#201
maxbeizer merged 25 commits intomainfrom
ui-rework-192

Conversation

@maxbeizer
Copy link
Copy Markdown
Owner

Summary

Implements the Phase 1-3 UI rework from #192, delivering 6 sub-issues:

Phase 1 — Foundation

Phase 2 — Dashboard-first

  • Dashboard-first default landing view #197 Dashboard-first default landing view

    • Mission control is now the default view on launch
    • Attention section displayed prominently first
    • Recent completions section with PR info
    • Configurable via defaultView in .gh-agent-viz.yml
  • Always-visible summary stats bar #198 Always-visible summary stats bar

    • New statsbar component between header and content
    • Shows active/urgent/warning/done/tokens at a glance

Phase 3 — Polish & interaction

Testing

All 16 test packages pass with -race flag. New tests added for SessionAttentionLevel, SessionNeedsAnyAttention, AttentionLevel.String().

Closes #192, Closes #195, Closes #196, Closes #197, Closes #198, Closes #199, Closes #200

maxbeizer and others added 25 commits February 28, 2026 11:13
Implement AttentionLevel enum with Urgent/Warning/Info/None values.
- SessionAttentionLevel() returns graduated level based on status and idle time
- Warning: running idle 2h+, queued 30min+
- Urgent: needs-input, failed (backwards compatible)
- SessionNeedsAnyAttention() convenience for Warning+Urgent
- Updated mission control, task detail, header, and filter to use levels
- Attention tab now shows both urgent and warning sessions

Closes #195

Co-authored-by: Copilot <[email protected]>
Cards now show:
- Attention level indicator (🔴/🟡) replacing status icon when applicable
- Token count (🪙) when telemetry available
- PR number (📤) when session has an associated PR
- Third line with enriched metadata

Closes #196

Co-authored-by: Copilot <[email protected]>
New statsbar component shows active/urgent/warning/done/tokens
at a glance between the header tabs and main content area.
Updates on every data refresh automatically.

Closes #198

Co-authored-by: Copilot <[email protected]>
Mission control is now the default view on launch, showing:
- Fleet summary with proportional status bar
- Attention section (urgent + warning) prominently displayed first
- Repos with activity breakdown
- Recent completions with PR info

Configurable via defaultView in .gh-agent-viz.yml (dashboard/table/kanban).

Closes #197

Co-authored-by: Copilot <[email protected]>
Press / to activate search in list, kanban, or mission views.
Type to filter sessions by title, repo, branch, or status in real-time.
Esc clears the filter, Enter keeps it active while returning to navigation.
Search indicator shown above the footer with cursor.

Closes #199

Co-authored-by: Copilot <[email protected]>
- Table rows get subtle background tinting based on attention level:
  red for urgent (failed/needs-input), amber for warning (idle 2h+),
  green for actively working sessions
- Repo column width is now responsive (1/3 of terminal width)
- Adapts to both light and dark terminals via AdaptiveColor

Closes #200

Co-authored-by: Copilot <[email protected]>
- Remove status-based background colors on table rows (too heavy visually)
- Ensure ctrl+c quits from search mode and help overlay

Co-authored-by: Copilot <[email protected]>
…scroll

Dashboard improvements:
- Attention section now shows session titles (not just 'Possibly stuck')
- New 'Active now' section shows what's running with live action text
- Compact fleet summary with tokens inline
- Mouse wheel scrolling in all views (list, kanban, mission, logs)
- Mouse support enabled via tea.WithMouseCellMotion()

Co-authored-by: Copilot <[email protected]>
Transform the mission control dashboard into a 2-column bordered panel
layout inspired by btop/k9s:

Left column:
  ╭─ Fleet ─────╮  Summary stats + proportional bar
  ╭─ Attention ──╮  Sessions needing action with titles
  ╭─ Repos ──────╮  Repository breakdown with cursor

Right column:
  ╭─ Active ─────╮  Running sessions with live action text
  ╭─ Recent ─────╮  Latest completions with PR info

- Panels use unicode rounded borders with section titles
- Responsive: falls back to single-column below 100 cols
- Panel heights computed from terminal dimensions
- Animated status icons in active panel

Closes #202

Co-authored-by: Copilot <[email protected]>
- Panel titles now render on their own line above the border box
- Raise idle warning threshold from 2h to 4h to reduce false positives
- Esc from kanban returns to dashboard (not list)
- Tab/shift-tab cycles filters in kanban and mission views
- Mission shows K for kanban, esc for list in footer hints
- Remove redundant tea.EnterAltScreen from Init (already in WithAltScreen)
- Fix all test assertions for updated text

Co-authored-by: Copilot <[email protected]>
Navigation model:
- Dashboard (mission) is home — esc is no-op here
- Esc from any other view returns to dashboard
- Enter from dashboard → list view, K → kanban
- Remove tab cycling (no value with dashboard)

Chrome:
- Hide tab bar + stats bar on dashboard (dashboard has its own fleet panel)
- Other views still show full header chrome

Mouse:
- Switch to tea.WithMouseAllMotion() for tmux compatibility

Attention:
- Raise idle warning threshold to 4h (was 2h) to reduce false positives

Co-authored-by: Copilot <[email protected]>
- Dashboard shows banner + tagline + stats bar (just hides the tab bar)
- New header.ViewBannerOnly() method for dashboard chrome
- M on dashboard is no-op (dashboard IS mission control)
- Mouse requires tmux 'set -g mouse on' — app sends correct escape codes

Co-authored-by: Copilot <[email protected]>
Dashboard panels are now interactive:
- Tab/shift-tab cycles focus between Active, Attention, and Repos panels
- Focused panel gets highlighted border + cursor indicator (▎)
- Enter on Active/Attention session → drills into session detail
- Enter on Repos → filters list view to show only that repo's sessions
- Mouse click on left/right half focuses the corresponding panel
- Active panel is primary (top-left, default focus)
- Layout: Left=Active+Attention, Right=Fleet+Repos+Recent

Co-authored-by: Copilot <[email protected]>
New --snapshot <path> flag writes a JSON snapshot after initial data load:
- view_mode, terminal_size, rendered_output (raw text)
- session_count, filter_counts, per-session attention levels
- Exits cleanly after writing

Usage: ./gh-agent-viz --snapshot /tmp/snap.json
Useful for CI testing, debugging layout issues, and automated evaluation.

Co-authored-by: Copilot <[email protected]>
- Tab bar (RUNNING/DONE/FAILED/ALL/ATTENTION) removed from every view
- All views now show banner + tagline + stats bar only
- Press S anywhere to write snapshot to /tmp/gh-agent-viz-snapshot.json
  with toast confirmation

Co-authored-by: Copilot <[email protected]>
Snapshots now write to /tmp/gh-agent-viz-snapshot-2026-02-28T182453Z.json

Co-authored-by: Copilot <[email protected]>
Recent panel:
- Now a 4th focusable panel (tab cycles Active→Attention→Repos→Recent)
- Cursor + highlighted border when focused
- Enter on Recent session drills into detail

Attention false positives fixed:
- Sessions idle >24h are now considered abandoned, not stuck
- Only sessions idle 4-24h trigger warning (the sweet spot)
- AttentionStaleMax raised from 4h to 24h

Co-authored-by: Copilot <[email protected]>
Stats alignment:
- Stats bar now shows 'active' (working, updated <20min) and 'idle' (running
  but quiet) separately — matches what the Active panel shows
- No more '14 active' in stats vs '3 active' in panel

Panel sizing:
- Panels now size to content instead of filling remaining space
- Removed fixed Height() from panel borders — lipgloss sizes to content
- Recent panel no longer has 20+ empty lines

Co-authored-by: Copilot <[email protected]>
The 'possibly stuck' warnings were almost always false positives.
Sessions with 'running' status from hours ago are abandoned, not stuck.
Attention now only shows truly actionable items:
- 🔴 failed — session errored out
- 🔴 needs-input — agent is blocked on you

The idle warning infrastructure (AttentionWarning level) remains in the
code for future use if better stuck-detection signals become available.

Co-authored-by: Copilot <[email protected]>
Active panel enriched:
- Each session now shows 2 lines: title+action, then ⏱ duration + 🪙 tokens + repo
- Gives instant visibility into cost and runtime per session

Fleet panel:
- 'today' line shows completed count and tokens burned since midnight UTC

Idle panel (new):
- Shows sessions with running status but idle 20min+
- Focusable via tab (5th panel: Active→Attention→Repos→Recent→Idle)
- Enter drills into session detail
- Hidden when no idle sessions exist

Co-authored-by: Copilot <[email protected]>
…+Repos+Idle right

Left column:  Active → Recent → Attention
Right column: Fleet → Repos → Idle

Co-authored-by: Copilot <[email protected]>
Cards:
- Condensed to 2 lines: title + repo•age•tokens•PR on one metadata line
- Cleaner, denser layout

Done column:
- Capped at 10 most recent, shows '(N total)' in header
- X key dismisses all completed sessions with toast

Navigation:
- Tab/shift-tab cycles column focus (in addition to h/l)
- Footer hints updated

Co-authored-by: Copilot <[email protected]>
- Tab/shift-tab wraps around (Done→In Progress, In Progress→Done)
- X dismiss now works from kanban (was broken — used taskList instead of allSessions)
- Removed 10-item cap on Done column (was confusing with '112 total' label)

Co-authored-by: Copilot <[email protected]>
@maxbeizer maxbeizer merged commit bdae0aa into main Feb 28, 2026
3 checks passed
@maxbeizer maxbeizer deleted the ui-rework-192 branch February 28, 2026 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment