Add convoy dashboard panel to gt feed TUI

Adds a third panel to the feed TUI showing:
- In-progress convoys with progress bars (completed/total)
- Recently landed convoys (last 24h) with time since landing

Features:
- Panel cycles with tab: tree -> convoy -> feed
- Direct access via 1/2/3 number keys
- Auto-refresh every 10 seconds
- Styled progress indicators (●●○○)

The convoy panel bridges the gap between "WHO is working" (agent tree)
and "WHAT is happening" (event feed) by showing "WHAT IS SHIPPING".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/crew/gus
2025-12-30 23:17:41 -08:00
committed by Steve Yegge
parent 59ffb3cc58
commit 31c4a222bc
5 changed files with 469 additions and 38 deletions

View File

@@ -49,12 +49,14 @@ var feedCmd = &cobra.Command{
By default, launches an interactive TUI dashboard with:
- Agent tree (top): Shows all agents organized by role with latest activity
- Convoy panel (middle): Shows in-progress and recently landed convoys
- Event stream (bottom): Chronological feed you can scroll through
- Vim-style navigation: j/k to scroll, tab to switch panels, q to quit
- Vim-style navigation: j/k to scroll, tab to switch panels, 1/2/3 for panels, q to quit
The feed combines two event sources:
The feed combines multiple event sources:
- Beads activity: Issue creates, updates, completions (from bd activity)
- GT events: Agent activity like patrol, sling, handoff (from .events.jsonl)
- Convoy status: In-progress and recently-landed convoys (refreshes every 10s)
Use --plain for simple text output (wraps bd activity only).
@@ -229,6 +231,7 @@ func runFeedTUI(workDir string) error {
// Create model and connect event source
m := feed.NewModel()
m.SetEventChannel(multiSource.Events())
m.SetTownRoot(townRoot)
// Run the TUI
p := tea.NewProgram(m, tea.WithAltScreen())