Files
gastown/internal/tui/feed/styles.go
gastown/crew/joe 721b4ec1dd 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>
2026-01-01 11:10:52 -08:00

160 lines
3.8 KiB
Go

// Package feed provides a TUI for the Gas Town activity feed.
package feed
import (
"github.com/charmbracelet/lipgloss"
"github.com/steveyegge/gastown/internal/constants"
)
// Color palette
var (
colorPrimary = lipgloss.Color("12") // Blue
colorSuccess = lipgloss.Color("10") // Green
colorWarning = lipgloss.Color("11") // Yellow
colorError = lipgloss.Color("9") // Red
colorDim = lipgloss.Color("8") // Gray
colorHighlight = lipgloss.Color("14") // Cyan
colorAccent = lipgloss.Color("13") // Magenta
)
// Styles for the feed TUI
var (
// Header styles
HeaderStyle = lipgloss.NewStyle().
Bold(true).
Foreground(colorPrimary).
Padding(0, 1)
TitleStyle = lipgloss.NewStyle().
Bold(true).
Foreground(lipgloss.Color("15"))
FilterStyle = lipgloss.NewStyle().
Foreground(colorDim)
// Agent tree styles
TreePanelStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorDim).
Padding(0, 1)
RigStyle = lipgloss.NewStyle().
Bold(true).
Foreground(colorPrimary)
RoleStyle = lipgloss.NewStyle().
Foreground(colorAccent)
AgentNameStyle = lipgloss.NewStyle().
Foreground(lipgloss.Color("15"))
AgentActiveStyle = lipgloss.NewStyle().
Foreground(colorSuccess)
AgentIdleStyle = lipgloss.NewStyle().
Foreground(colorDim)
// Event stream styles
StreamPanelStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorDim).
Padding(0, 1)
TimestampStyle = lipgloss.NewStyle().
Foreground(colorDim)
EventCreateStyle = lipgloss.NewStyle().
Foreground(colorSuccess)
EventUpdateStyle = lipgloss.NewStyle().
Foreground(colorPrimary)
EventCompleteStyle = lipgloss.NewStyle().
Foreground(colorSuccess).
Bold(true)
EventFailStyle = lipgloss.NewStyle().
Foreground(colorError).
Bold(true)
EventDeleteStyle = lipgloss.NewStyle().
Foreground(colorWarning)
// Status bar styles
StatusBarStyle = lipgloss.NewStyle().
Background(lipgloss.Color("236")).
Foreground(colorDim).
Padding(0, 1)
HelpKeyStyle = lipgloss.NewStyle().
Foreground(colorHighlight).
Bold(true)
HelpDescStyle = lipgloss.NewStyle().
Foreground(colorDim)
// Focus indicator
FocusedBorderStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorPrimary).
Padding(0, 1)
// Role icons - uses centralized emojis from constants package
RoleIcons = map[string]string{
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
EventMergeStartedStyle = lipgloss.NewStyle().
Foreground(colorPrimary)
EventMergedStyle = lipgloss.NewStyle().
Foreground(colorSuccess).
Bold(true)
EventMergeFailedStyle = lipgloss.NewStyle().
Foreground(colorError).
Bold(true)
EventMergeSkippedStyle = lipgloss.NewStyle().
Foreground(colorWarning)
// Event symbols
EventSymbols = map[string]string{
"create": "+",
"update": "→",
"complete": "✓",
"fail": "✗",
"delete": "⊘",
"pin": "📌",
// Witness patrol events
"patrol_started": constants.EmojiWitness,
"patrol_complete": "✓",
"polecat_checked": "·",
"polecat_nudged": "⚡",
"escalation_sent": "⬆",
// Merge events
"merge_started": "⚙",
"merged": "✓",
"merge_failed": "✗",
"merge_skipped": "⊘",
// General gt events
"sling": "🎯",
"hook": "🪝",
"unhook": "↩",
"handoff": "🤝",
"done": "✓",
"mail": "✉",
"spawn": "🚀",
"kill": "💀",
"nudge": "⚡",
"boot": "🔌",
"halt": "⏹",
}
)