Wire witness patrol events to gt feed display

Add support for displaying gt events (from ~/gt/.events.jsonl) in the
gt feed TUI, including witness patrol activity:

- Add event symbols for patrol events (patrol_started, patrol_complete,
  polecat_checked, polecat_nudged, escalation_sent), merge events, and
  general gt events (sling, hook, handoff, mail, spawn, etc.)

- Create GtEventsSource that parses .events.jsonl format with proper
  extraction of rig/role from actor paths and human-readable message
  generation from event payloads

- Create CombinedSource that merges multiple event sources (bd activity
  and gt events) using fan-in pattern

- Update feed command to use combined source for TUI mode

- Add appropriate styling for new event types (nudges/escalations in
  red, patrol complete in green, etc.)

Example gt feed output now shows:
  09:45 ✓ witness: All polecats healthy
  09:44  witness: nudged nux (idle 10m)
  09:40 🎯 mayor: slung gt-rbncw to furiosa

(gt-rbncw)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-30 01:52:24 -08:00
parent 4f9bf643bd
commit 1d4b27cf06
4 changed files with 345 additions and 53 deletions

View File

@@ -249,20 +249,24 @@ func (m *Model) renderEvent(e Event) string {
symbolStyle = EventCreateStyle
case "update":
symbolStyle = EventUpdateStyle
case "complete":
case "complete", "patrol_complete", "merged", "done":
symbolStyle = EventCompleteStyle
case "fail":
case "fail", "merge_failed":
symbolStyle = EventFailStyle
case "delete":
symbolStyle = EventDeleteStyle
case "merge_started":
symbolStyle = EventMergeStartedStyle
case "merged":
symbolStyle = EventMergedStyle
case "merge_failed":
symbolStyle = EventMergeFailedStyle
case "merge_skipped":
symbolStyle = EventMergeSkippedStyle
case "patrol_started", "polecat_checked":
symbolStyle = EventUpdateStyle
case "polecat_nudged", "escalation_sent", "nudge":
symbolStyle = EventFailStyle // Use red/warning style for nudges and escalations
case "sling", "hook", "spawn", "boot":
symbolStyle = EventCreateStyle
case "handoff", "mail":
symbolStyle = EventUpdateStyle
default:
symbolStyle = EventUpdateStyle
}