diff --git a/internal/cmd/agents.go b/internal/cmd/agents.go index ea747f31..887379a1 100644 --- a/internal/cmd/agents.go +++ b/internal/cmd/agents.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/spf13/cobra" + "github.com/steveyegge/gastown/internal/constants" "github.com/steveyegge/gastown/internal/lock" "github.com/steveyegge/gastown/internal/style" "github.com/steveyegge/gastown/internal/tmux" @@ -47,13 +48,14 @@ var AgentTypeColors = map[AgentType]string{ } // AgentTypeIcons maps agent types to display icons. +// Uses centralized emojis from constants package. var AgentTypeIcons = map[AgentType]string{ - AgentMayor: "๐ŸŽฉ", - AgentDeacon: "๐Ÿฆ‰", - AgentWitness: "๐Ÿ‘", - AgentRefinery: "๐Ÿญ", - AgentCrew: "๐Ÿ‘ท", - AgentPolecat: "๐Ÿ˜บ", + AgentMayor: constants.EmojiMayor, + AgentDeacon: constants.EmojiDeacon, + AgentWitness: constants.EmojiWitness, + AgentRefinery: constants.EmojiRefinery, + AgentCrew: constants.EmojiCrew, + AgentPolecat: constants.EmojiPolecat, } var agentsCmd = &cobra.Command{ diff --git a/internal/cmd/feed.go b/internal/cmd/feed.go index 33fb2f97..71237507 100644 --- a/internal/cmd/feed.go +++ b/internal/cmd/feed.go @@ -70,7 +70,7 @@ Event symbols: โœ“ completed - Issue closed or step completed โœ— failed - Step or issue failed โŠ˜ deleted - Issue removed - ๐Ÿ‘ patrol_started - Witness began patrol cycle + ๐Ÿฆ‰ patrol_started - Witness began patrol cycle โšก polecat_nudged - Worker was nudged ๐ŸŽฏ sling - Work was slung to worker ๐Ÿค handoff - Session handed off diff --git a/internal/cmd/prime.go b/internal/cmd/prime.go index e80aa8be..3a434587 100644 --- a/internal/cmd/prime.go +++ b/internal/cmd/prime.go @@ -12,6 +12,7 @@ import ( "github.com/spf13/cobra" "github.com/steveyegge/gastown/internal/beads" + "github.com/steveyegge/gastown/internal/constants" "github.com/steveyegge/gastown/internal/events" "github.com/steveyegge/gastown/internal/lock" "github.com/steveyegge/gastown/internal/style" @@ -871,7 +872,7 @@ func outputWitnessPatrolContext(ctx RoleContext) { PatrolMolName: "mol-witness-patrol", BeadsDir: ctx.WorkDir, Assignee: ctx.Rig + "/witness", - HeaderEmoji: "๐Ÿ‘", + HeaderEmoji: constants.EmojiWitness, HeaderTitle: "Witness Patrol Status", CheckInProgress: true, WorkLoopSteps: []string{ diff --git a/internal/cmd/status.go b/internal/cmd/status.go index 38413f1c..9b6aa905 100644 --- a/internal/cmd/status.go +++ b/internal/cmd/status.go @@ -316,16 +316,17 @@ func outputStatusText(status TownStatus) error { fmt.Println() } - // Role icons + // Role icons - uses centralized emojis from constants package roleIcons := map[string]string{ - "mayor": "๐ŸŽฉ", - "coordinator": "๐ŸŽฉ", - "deacon": "๐Ÿ””", - "health-check": "๐Ÿ””", - "witness": "๐Ÿ‘", - "refinery": "๐Ÿญ", - "crew": "๐Ÿ‘ท", - "polecat": "๐Ÿ˜บ", + constants.RoleMayor: constants.EmojiMayor, + constants.RoleDeacon: constants.EmojiDeacon, + constants.RoleWitness: constants.EmojiWitness, + constants.RoleRefinery: constants.EmojiRefinery, + constants.RoleCrew: constants.EmojiCrew, + constants.RolePolecat: constants.EmojiPolecat, + // Legacy names for backwards compatibility + "coordinator": constants.EmojiMayor, + "health-check": constants.EmojiDeacon, } // Global Agents (Mayor, Deacon) diff --git a/internal/constants/constants.go b/internal/constants/constants.go index 1aa045e2..e3be7af9 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -125,6 +125,48 @@ const ( RoleDeacon = "deacon" ) +// Role emojis - centralized for easy customization. +// These match the Gas Town visual identity (see ~/Desktop/Gas Town/ prompts). +const ( + // EmojiMayor is the mayor emoji (fox conductor). + EmojiMayor = "๐ŸŽฉ" + + // EmojiDeacon is the deacon emoji (wolf in the engine room). + EmojiDeacon = "๐Ÿบ" + + // EmojiWitness is the witness emoji (watchful owl). + EmojiWitness = "๐Ÿฆ‰" + + // EmojiRefinery is the refinery emoji (industrial). + EmojiRefinery = "๐Ÿญ" + + // EmojiCrew is the crew emoji (established worker). + EmojiCrew = "๐Ÿ‘ท" + + // EmojiPolecat is the polecat emoji (transient worker). + EmojiPolecat = "๐Ÿ˜บ" +) + +// RoleEmoji returns the emoji for a given role name. +func RoleEmoji(role string) string { + switch role { + case RoleMayor: + return EmojiMayor + case RoleDeacon: + return EmojiDeacon + case RoleWitness: + return EmojiWitness + case RoleRefinery: + return EmojiRefinery + case RoleCrew: + return EmojiCrew + case RolePolecat: + return EmojiPolecat + default: + return "โ“" + } +} + // SupportedShells lists shell binaries that Gas Town can detect and work with. // Used to identify if a tmux pane is at a shell prompt vs running a command. var SupportedShells = []string{"bash", "zsh", "sh", "fish", "tcsh", "ksh"} diff --git a/internal/tmux/tmux.go b/internal/tmux/tmux.go index 6fea7924..ef6c4ca0 100644 --- a/internal/tmux/tmux.go +++ b/internal/tmux/tmux.go @@ -581,13 +581,19 @@ func (t *Tmux) ApplyTheme(session string, theme Theme) error { } // roleIcons maps role names to display icons for the status bar. +// Uses centralized emojis from constants package. +// Includes legacy keys ("coordinator", "health-check") for backwards compatibility. var roleIcons = map[string]string{ - "coordinator": "๐ŸŽฉ", // Mayor - "health-check": "๐Ÿฆ‰", // Deacon - "witness": "๐Ÿ‘", - "refinery": "๐Ÿญ", - "crew": "๐Ÿ‘ท", - "polecat": "๐Ÿ˜บ", + // Standard role names (from constants) + constants.RoleMayor: constants.EmojiMayor, + constants.RoleDeacon: constants.EmojiDeacon, + constants.RoleWitness: constants.EmojiWitness, + constants.RoleRefinery: constants.EmojiRefinery, + constants.RoleCrew: constants.EmojiCrew, + constants.RolePolecat: constants.EmojiPolecat, + // Legacy names (for backwards compatibility) + "coordinator": constants.EmojiMayor, + "health-check": constants.EmojiDeacon, } // SetStatusFormat configures the left side of the status bar. diff --git a/internal/tui/feed/styles.go b/internal/tui/feed/styles.go index 8eda2bed..60b58401 100644 --- a/internal/tui/feed/styles.go +++ b/internal/tui/feed/styles.go @@ -1,7 +1,10 @@ // Package feed provides a TUI for the Gas Town activity feed. package feed -import "github.com/charmbracelet/lipgloss" +import ( + "github.com/charmbracelet/lipgloss" + "github.com/steveyegge/gastown/internal/constants" +) // Color palette var ( @@ -96,14 +99,14 @@ var ( BorderForeground(colorPrimary). Padding(0, 1) - // Role icons + // Role icons - uses centralized emojis from constants package RoleIcons = map[string]string{ - "mayor": "๐ŸŽฉ", - "witness": "๐Ÿ‘", - "refinery": "๐Ÿญ", - "crew": "๐Ÿ‘ท", - "polecat": "๐Ÿ˜บ", - "deacon": "๐Ÿ””", + constants.RoleMayor: constants.EmojiMayor, + constants.RoleWitness: constants.EmojiWitness, + constants.RoleRefinery: constants.EmojiRefinery, + constants.RoleCrew: constants.EmojiCrew, + constants.RolePolecat: constants.EmojiPolecat, + constants.RoleDeacon: constants.EmojiDeacon, } // MQ event styles @@ -130,7 +133,7 @@ var ( "delete": "โŠ˜", "pin": "๐Ÿ“Œ", // Witness patrol events - "patrol_started": "๐Ÿ‘", + "patrol_started": constants.EmojiWitness, "patrol_complete": "โœ“", "polecat_checked": "ยท", "polecat_nudged": "โšก",