diff --git a/internal/cmd/statusline.go b/internal/cmd/statusline.go index 058a6398..21e35c7a 100644 --- a/internal/cmd/statusline.go +++ b/internal/cmd/statusline.go @@ -52,6 +52,11 @@ func runStatusLine(cmd *cobra.Command, args []string) error { return runMayorStatusLine(t) } + // Deacon status line + if role == "deacon" || statusLineSession == "gt-deacon" { + return runDeaconStatusLine(t) + } + // Witness status line (session naming: gt-witness-) if role == "witness" || strings.HasPrefix(statusLineSession, "gt-witness-") { return runWitnessStatusLine(t, rigName) @@ -151,6 +156,41 @@ func runMayorStatusLine(t *tmux.Tmux) error { return nil } +// runDeaconStatusLine outputs status for the deacon session. +// Shows: active rigs, patrol status, mail count +func runDeaconStatusLine(t *tmux.Tmux) error { + // Count active rigs by checking for witnesses + sessions, err := t.ListSessions() + if err != nil { + return nil // Silent fail + } + + rigs := make(map[string]bool) + for _, s := range sessions { + agent := categorizeSession(s) + if agent == nil { + continue + } + if agent.Rig != "" { + rigs[agent.Rig] = true + } + } + rigCount := len(rigs) + + // Get deacon mail + unread := getUnreadMailCount("deacon/") + + // Build status + var parts []string + parts = append(parts, fmt.Sprintf("%s %d rigs", AgentTypeIcons[AgentDeacon], rigCount)) + if unread > 0 { + parts = append(parts, fmt.Sprintf("\U0001F4EC %d", unread)) + } + + fmt.Print(strings.Join(parts, " | ") + " |") + return nil +} + // runWitnessStatusLine outputs status for a witness session. // Shows: polecat count under management, mail count func runWitnessStatusLine(t *tmux.Tmux, rigName string) error {