UI Rework: graduated attention, dashboard-first, richer cards, search, visual polish#201
Merged
UI Rework: graduated attention, dashboard-first, richer cards, search, visual polish#201
Conversation
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]>
…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]>
…n message Co-authored-by: Copilot <[email protected]>
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.
Summary
Implements the Phase 1-3 UI rework from #192, delivering 6 sub-issues:
Phase 1 — Foundation
Graduated attention levels (🔴 urgent / 🟡 warning / 🟢 info) #195 Graduated attention levels (🔴 urgent / 🟡 warning / 🟢 info)
AttentionLevelenum withSessionAttentionLevel()functionSessionNeedsAttention()preservedRicher kanban cards (PR status, tokens, attention) #196 Richer kanban cards
Phase 2 — Dashboard-first
Dashboard-first default landing view #197 Dashboard-first default landing view
defaultViewin.gh-agent-viz.ymlAlways-visible summary stats bar #198 Always-visible summary stats bar
statsbarcomponent between header and contentPhase 3 — Polish & interaction
Fuzzy search/filter for sessions #199 Fuzzy search/filter
/activates search in list, kanban, or mission viewsEscclears,Enterkeeps filter while returning to navigationVisual polish: row highlighting, responsive widths, box drawing #200 Visual polish
Testing
All 16 test packages pass with
-raceflag. New tests added forSessionAttentionLevel,SessionNeedsAnyAttention,AttentionLevel.String().Closes #192, Closes #195, Closes #196, Closes #197, Closes #198, Closes #199, Closes #200