Centralize role emojis: Witness 👁→🦉, Deacon 🦉🐺

Added centralized emoji constants in internal/constants/constants.go
for easy customization. Updated all files that hardcoded role emojis
to use the new constants.

Changes:
- Witness emoji: 👁 (eye) → 🦉 (owl) - less creepy, matches visual identity
- Deacon emoji: 🦉 (owl) → 🐺 (wolf) - matches hierarchy prompt (wolf in engine room)
- Added RoleEmoji() helper function for string-based lookups
- Maintained backwards compatibility with legacy role names

🤖 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/joe
2026-01-01 11:10:44 -08:00
committed by Steve Yegge
parent 1e53cd78a6
commit 721b4ec1dd
7 changed files with 87 additions and 32 deletions

View File

@@ -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{

View File

@@ -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

View File

@@ -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{

View File

@@ -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)

View File

@@ -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"}

View File

@@ -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.

View File

@@ -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": "⚡",