skin

package
v0.4.21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CyberSkin = &Config{
	Name:        "cyber",
	Description: "Neon cyberpunk terminal theme",
	Colors: Colors{
		BannerBorder:    "\033[38;5;201m",
		BannerTitle:     "\033[38;5;51m",
		BannerAccent:    "\033[38;5;219m",
		BannerDim:       "\033[38;5;57m",
		BannerText:      "\033[38;5;231m",
		ResponseBorder:  "\033[38;5;201m",
		SpinnerActive:   "\033[38;5;51m",
		ToolPrefixColor: "\033[38;5;201m",
		ToolText:        "\033[38;5;231m",
		PromptSymbol:    "\033[38;5;51m",
		PromptText:      "\033[38;5;219m",
		Error:           "\033[38;5;196m",
		Warning:         "\033[38;5;214m",
		Success:         "\033[38;5;82m",
	},
	Spinner: Spinner{
		Frames: []string{
			"█", "▓", "▒", "░", "▒", "▓",
		},
		WaitingFaces: []string{
			"█[░]█",
			"█[▒]█",
			"█[▓]█",
		},
		ThinkingFaces: []string{
			"█[█]█",
			"▓[█]▓",
		},
		ThinkingVerbs: []string{
			"jacking in",
			"decrypting",
			"uploading",
			"hacking",
		},
		Wings: [][]string{
			{"⟨⚡", "⚡⟩"},
		},
		Speed: 80,
	},
	Branding: Branding{
		AgentName:     "Cyber Agent",
		Welcome:       "Type /help for commands, /exit to quit",
		ResponseLabel: "⚡ Cyber ",
		PromptSymbol:  "›",
	},
	ToolPrefix: "▏",
	ToolEmojis: ToolEmojis{
		"web_search":       "🌐",
		"read_file":        "📄",
		"write_file":       "💾",
		"execute_command":  "⚡",
		"browser_navigate": "🌍",
		"delegate_task":    "🎭",
		"memory_store":     "🧠",
		"memory_recall":    "📤",
		"execute_code":     "💻",
	},
}

Cyber skin - neon cyberpunk theme

View Source
var DefaultSkin = &Config{
	Name:        "default",
	Description: "Classic gold/kawaii style",
	Colors: Colors{
		BannerBorder:    "\033[38;5;220m",
		BannerTitle:     "\033[38;5;214m",
		BannerAccent:    "\033[38;5;220m",
		BannerDim:       "\033[38;5;241m",
		BannerText:      "\033[38;5;255m",
		ResponseBorder:  "\033[38;5;220m",
		SpinnerActive:   "\033[38;5;214m",
		ToolPrefixColor: "\033[38;5;75m",
		ToolText:        "\033[38;5;255m",
		PromptSymbol:    "\033[38;5;214m",
		PromptText:      "\033[38;5;255m",
		Error:           "\033[38;5;196m",
		Warning:         "\033[38;5;214m",
		Success:         "\033[38;5;82m",
	},
	Spinner: Spinner{
		Frames: []string{
			"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏",
		},
		WaitingFaces: []string{
			"(*・ω・)ノ",
			"( ̄ω ̄)ノ",
			"(ノ・ω・)ノ",
			"(・ω・)ノ",
			"(~ω~)ノ",
		},
		ThinkingFaces: []string{
			"(・ω・)ゞ",
			"(`・ω・)ゞ",
			"(・ω・)ゞ",
			"( ̄ω ̄)ゞ",
		},
		ThinkingVerbs: []string{
			"thinking",
			"analyzing",
			"processing",
			"researching",
			"planning",
		},
		Wings: [][]string{
			{"⟨⚡", "⚡⟩"},
		},
		Speed: 80,
	},
	Branding: Branding{
		AgentName:     "magic",
		Welcome:       "Type /help for commands, /exit to quit",
		ResponseLabel: "Response",
		PromptSymbol:  ">",
	},
	ToolPrefix: "┊",
	ToolEmojis: ToolEmojis{
		"web_search":       "🌐",
		"read_file":        "📄",
		"write_file":       "✏️",
		"execute_command":  "⚡",
		"browser_navigate": "🌍",
		"delegate_task":    "🎭",
		"memory_store":     "💾",
		"memory_recall":    "🧠",
		"session_search":   "🔎",
		"cronjob":          "⏰",
		"skill_list":       "📚",
		"skill_view":       "📖",
		"skill_create":     "✨",
		"ha_list_entities": "🏠",
		"ha_call_service":  "🔌",
		"execute_code":     "💻",
		"json":             "{}",
		"yaml":             "📝",
		"hash":             "#️⃣",
		"uuid":             "🆔",
	},
}

Default skin - classic gold/kawaii style

View Source
var MonoSkin = &Config{
	Name:        "mono",
	Description: "Clean grayscale monochrome",
	Colors: Colors{
		BannerBorder:    "\033[90m",
		BannerTitle:     "\033[97m",
		BannerAccent:    "\033[37m",
		BannerDim:       "\033[90m",
		BannerText:      "\033[97m",
		ResponseBorder:  "\033[90m",
		SpinnerActive:   "\033[97m",
		ToolPrefixColor: "\033[90m",
		ToolText:        "\033[97m",
		PromptSymbol:    "\033[97m",
		PromptText:      "\033[90m",
		Error:           "\033[97m",
		Warning:         "\033[90m",
		Success:         "\033[37m",
	},
	Spinner: Spinner{
		Frames: []string{
			"◐", "◓", "◑", "◒",
		},
		WaitingFaces: []string{
			"[ ]",
			"[=]",
			"[*]",
		},
		ThinkingFaces: []string{
			"[?]",
			"[~]",
		},
		ThinkingVerbs: []string{
			"processing",
			"loading",
			"working",
		},
		Wings: [][]string{
			{"[", "]"},
		},
		Speed: 150,
	},
	Branding: Branding{
		AgentName:     "magic",
		Welcome:       "Type /help for commands, /exit to quit",
		ResponseLabel: "OUT",
		PromptSymbol:  "$",
	},
	ToolPrefix: "│",
	ToolEmojis: ToolEmojis{
		"web_search":       "[W]",
		"read_file":        "[F]",
		"write_file":       "[F]",
		"execute_command":  "[X]",
		"browser_navigate": "[B]",
		"delegate_task":    "[D]",
		"memory_store":     "[M]",
		"memory_recall":    "[M]",
		"execute_code":     "[C]",
	},
}

Mono skin - clean grayscale monochrome

View Source
var SlateSkin = &Config{
	Name:        "slate",
	Description: "Cool blue developer-focused theme",
	Colors: Colors{
		BannerBorder:    "\033[38;5;75m",
		BannerTitle:     "\033[38;5;39m",
		BannerAccent:    "\033[38;5;117m",
		BannerDim:       "\033[38;5;59m",
		BannerText:      "\033[38;5;195m",
		ResponseBorder:  "\033[38;5;75m",
		SpinnerActive:   "\033[38;5;39m",
		ToolPrefixColor: "\033[38;5;75m",
		ToolText:        "\033[38;5;195m",
		PromptSymbol:    "\033[38;5;39m",
		PromptText:      "\033[38;5;195m",
		Error:           "\033[38;5;203m",
		Warning:         "\033[38;5;214m",
		Success:         "\033[38;5;114m",
	},
	Spinner: Spinner{
		Frames: []string{
			"▁", "▂", "▃", "▅", "▆", "▇", "▆", "▅", "▃", "▂",
		},
		WaitingFaces: []string{
			"[-]",
			"[\\]",
			"[|]",
			"[/]",
			"[-]",
		},
		ThinkingFaces: []string{
			"[~]",
			"[≈]",
		},
		ThinkingVerbs: []string{
			"loading",
			"building",
			"compiling",
			"testing",
		},
		Wings: [][]string{
			{"━", "━"},
		},
		Speed: 100,
	},
	Branding: Branding{
		AgentName:     "magic",
		Welcome:       "Type /help for commands, /exit to quit",
		ResponseLabel: "▸",
		PromptSymbol:  "›",
	},
	ToolPrefix: "│",
	ToolEmojis: ToolEmojis{
		"web_search":       "🌐",
		"read_file":        "📄",
		"write_file":       "📝",
		"execute_command":  "⚡",
		"browser_navigate": "🌍",
		"delegate_task":    "🎭",
		"memory_store":     "💾",
		"memory_recall":    "🧠",
		"execute_code":     "💻",
	},
}

Slate skin - cool blue developer-focused theme

Functions

func BuiltinSkins

func BuiltinSkins() map[string]*Config

BuiltinSkins returns all built-in skins

Types

type Branding

type Branding struct {
	// Agent display name
	AgentName string `json:"agent_name" yaml:"agent_name"`

	// Welcome message
	Welcome string `json:"welcome" yaml:"welcome"`

	// Response box label
	ResponseLabel string `json:"response_label" yaml:"response_label"`

	// Prompt symbol (> , $, etc.)
	PromptSymbol string `json:"prompt_symbol" yaml:"prompt_symbol"`

	// ASCII art banner
	Banner string `json:"banner" yaml:"banner"`
}

Branding defines branding text customizations

type Colors

type Colors struct {
	// Banner colors
	BannerBorder string `json:"banner_border" yaml:"banner_border"`
	BannerTitle  string `json:"banner_title" yaml:"banner_title"`
	BannerAccent string `json:"banner_accent" yaml:"banner_accent"`
	BannerDim    string `json:"banner_dim" yaml:"banner_dim"`
	BannerText   string `json:"banner_text" yaml:"banner_text"`

	// Response box colors
	ResponseBorder string `json:"response_border" yaml:"response_border"`

	// Spinner colors
	SpinnerActive string `json:"spinner_active" yaml:"spinner_active"`

	// Tool output colors
	ToolPrefixColor string `json:"tool_prefix_color" yaml:"tool_prefix_color"`
	ToolText        string `json:"tool_text" yaml:"tool_text"`

	// Prompt colors
	PromptSymbol string `json:"prompt_symbol" yaml:"prompt_symbol"`
	PromptText   string `json:"prompt_text" yaml:"prompt_text"`

	// Error/Warning colors
	Error   string `json:"error" yaml:"error"`
	Warning string `json:"warning" yaml:"warning"`
	Success string `json:"success" yaml:"success"`
}

Colors defines all color customizations

type Config

type Config struct {
	Name        string     `json:"name" yaml:"name"`
	Description string     `json:"description" yaml:"description"`
	Colors      Colors     `json:"colors" yaml:"colors"`
	Spinner     Spinner    `json:"spinner" yaml:"spinner"`
	Branding    Branding   `json:"branding" yaml:"branding"`
	ToolPrefix  string     `json:"tool_prefix" yaml:"tool_prefix"`
	ToolEmojis  ToolEmojis `json:"tool_emojis" yaml:"tool_emojis"`
}

Config represents a complete skin configuration

func GetBuiltinSkin

func GetBuiltinSkin(name string) *Config

GetBuiltinSkin returns a built-in skin by name

func LoadSkinFile

func LoadSkinFile(path string) (*Config, error)

LoadSkinFile loads a skin from a YAML file

func (*Config) Merge

func (c *Config) Merge(other *Config)

Merge merges another config into this one, only overwriting empty values

func (*Config) Validate

func (c *Config) Validate() error

Validate validates the skin configuration

type CostInfo added in v0.3.0

type CostInfo struct {
	InputTokens  int
	OutputTokens int
	TotalTokens  int
	TotalCost    float64
	Currency     string
}

CostInfo holds cost information for display

type CostRenderer added in v0.3.0

type CostRenderer struct {
	// contains filtered or unexported fields
}

CostRenderer renders cost information

func NewCostRenderer added in v0.3.0

func NewCostRenderer(noColor bool) *CostRenderer

NewCostRenderer creates a new cost renderer

func (*CostRenderer) RenderCost added in v0.3.0

func (r *CostRenderer) RenderCost(info *CostInfo)

RenderCost renders cost information

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager handles skin loading, caching, and application

func NewManager

func NewManager(skinDir string) *Manager

NewManager creates a new skin manager

func (*Manager) DeleteUserSkin

func (m *Manager) DeleteUserSkin(name string) error

DeleteUserSkin removes a user skin

func (*Manager) ExportJSON

func (m *Manager) ExportJSON(name string) (string, error)

ExportJSON exports a skin as JSON

func (*Manager) GetActive

func (m *Manager) GetActive() *Config

GetActive returns the currently active skin

func (*Manager) GetActiveName

func (m *Manager) GetActiveName() string

GetActiveName returns the name of the active skin

func (*Manager) GetSkin

func (m *Manager) GetSkin(name string) (*Config, error)

GetSkin returns a skin by name (checks user skins first, then builtins)

func (*Manager) GetSkinInfo

func (m *Manager) GetSkinInfo(name string) (map[string]interface{}, error)

GetSkinInfo returns info about a skin without loading full content

func (*Manager) IsBuiltin

func (m *Manager) IsBuiltin(name string) bool

IsBuiltin checks if a skin is built-in

func (*Manager) List

func (m *Manager) List() []string

List returns all available skin names

func (*Manager) ListBuiltin

func (m *Manager) ListBuiltin() []string

ListBuiltin returns only built-in skin names

func (*Manager) ListUser

func (m *Manager) ListUser() []string

ListUser returns only user skin names

func (*Manager) OnChange

func (m *Manager) OnChange(cb func(*Config))

OnChange registers a callback for skin changes

func (*Manager) Reset

func (m *Manager) Reset() error

Reset resets to the default skin

func (*Manager) SaveUserSkin

func (m *Manager) SaveUserSkin(name string, skin *Config) error

SaveUserSkin saves a skin to the user directory

func (*Manager) SetActive

func (m *Manager) SetActive(name string) error

SetActive sets the active skin

func (*Manager) SetSkinDir

func (m *Manager) SetSkinDir(dir string)

SetSkinDir sets the user skin directory

type MarkdownRenderer added in v0.3.0

type MarkdownRenderer struct {
	// contains filtered or unexported fields
}

MarkdownRenderer renders markdown content

func NewMarkdownRenderer added in v0.3.0

func NewMarkdownRenderer(noColor bool) *MarkdownRenderer

NewMarkdownRenderer creates a new markdown renderer

func (*MarkdownRenderer) Render added in v0.3.0

func (r *MarkdownRenderer) Render(text string) string

Render renders markdown to styled text

func (*MarkdownRenderer) RenderStreaming added in v0.3.0

func (r *MarkdownRenderer) RenderStreaming(text string) string

RenderStreaming renders markdown content streamingly

type Renderer

type Renderer struct {
	// contains filtered or unexported fields
}

Renderer renders text with skin styling

func NewRenderer

func NewRenderer(skin *Config) *Renderer

NewRenderer creates a new skin renderer

func (*Renderer) AgentName

func (r *Renderer) AgentName() string

AgentName returns the styled agent name

func (*Renderer) Banner

func (r *Renderer) Banner(title, subtitle string) string

Banner renders the banner with skin colors

func (*Renderer) BulletItem

func (r *Renderer) BulletItem(text string) string

BulletItem returns a styled bullet item

func (*Renderer) Color

func (r *Renderer) Color(name string) string

Color returns a color by name

func (*Renderer) Error

func (r *Renderer) Error(msg string) string

Error returns styled error message

func (*Renderer) GetSkin

func (r *Renderer) GetSkin() *Config

GetSkin returns the current skin

func (*Renderer) Info

func (r *Renderer) Info(msg string) string

Info returns styled info message

func (*Renderer) KeyValue

func (r *Renderer) KeyValue(key, value string) string

KeyValue returns a styled key-value pair

func (*Renderer) ProgressBar

func (r *Renderer) ProgressBar(current, total int, width int) string

ProgressBar renders a mini progress bar

func (*Renderer) Prompt

func (r *Renderer) Prompt() string

Prompt returns styled prompt symbol

func (*Renderer) ResetFrame

func (r *Renderer) ResetFrame()

ResetFrame resets the spinner frame index

func (*Renderer) ResponseLabel

func (r *Renderer) ResponseLabel() string

ResponseLabel returns the styled response label

func (*Renderer) SectionHeader

func (r *Renderer) SectionHeader(title string) string

SectionHeader returns a styled section header

func (*Renderer) SetSkin

func (r *Renderer) SetSkin(skin *Config)

SetSkin updates the active skin

func (*Renderer) SimpleBanner

func (r *Renderer) SimpleBanner(title string) string

SimpleBanner renders a simple banner without box

func (*Renderer) SpinnerFrame

func (r *Renderer) SpinnerFrame() string

SpinnerFrame returns the next spinner frame

func (*Renderer) Stop

func (r *Renderer) Stop()

Stop stops any running animations

func (*Renderer) Success

func (r *Renderer) Success(msg string) string

Success returns styled success message

func (*Renderer) ThinkingAnimation

func (r *Renderer) ThinkingAnimation() string

ThinkingAnimation returns a thinking animation with verb

func (*Renderer) ThinkingSpinner

func (r *Renderer) ThinkingSpinner() string

ThinkingSpinner returns a thinking spinner with verb

func (*Renderer) ToolName

func (r *Renderer) ToolName(name string) string

ToolName returns styled tool name with emoji

func (*Renderer) ToolOutput

func (r *Renderer) ToolOutput(output string) string

ToolOutput returns styled tool output

func (*Renderer) ToolPrefix

func (r *Renderer) ToolPrefix() string

ToolPrefix returns the styled tool prefix

func (*Renderer) WaitingAnimation

func (r *Renderer) WaitingAnimation() string

WaitingAnimation returns a waiting animation with face

func (*Renderer) Warning

func (r *Renderer) Warning(msg string) string

Warning returns styled warning message

func (*Renderer) Welcome

func (r *Renderer) Welcome() string

Welcome returns the welcome message

type Spinner

type Spinner struct {
	// Spinner characters
	Frames []string `json:"frames" yaml:"frames"`

	// Waiting state faces (emoji)
	WaitingFaces []string `json:"waiting_faces" yaml:"waiting_faces"`

	// Thinking state faces (emoji)
	ThinkingFaces []string `json:"thinking_faces" yaml:"thinking_faces"`

	// Thinking verbs (actions shown during thinking)
	ThinkingVerbs []string `json:"thinking_verbs" yaml:"thinking_verbs"`

	// Wings (decorative characters on each side)
	Wings [][]string `json:"wings" yaml:"wings"`

	// Animation speed (milliseconds per frame)
	Speed int `json:"speed" yaml:"speed"`
}

Spinner defines spinner animation settings

type ToolCallDisplay added in v0.3.0

type ToolCallDisplay struct {
	Name      string
	Arguments string
	Started   time.Time
	Ended     time.Time
	Success   bool
	Error     string
}

ToolCallDisplay holds tool call information for display

type ToolCallRenderer added in v0.3.0

type ToolCallRenderer struct {
	// contains filtered or unexported fields
}

ToolCallRenderer renders tool call information

func NewToolCallRenderer added in v0.3.0

func NewToolCallRenderer(noColor bool) *ToolCallRenderer

NewToolCallRenderer creates a new tool call renderer

func (*ToolCallRenderer) RenderResult added in v0.3.0

func (r *ToolCallRenderer) RenderResult(display *ToolCallDisplay)

RenderResult renders the result of a tool call

func (*ToolCallRenderer) RenderStart added in v0.3.0

func (r *ToolCallRenderer) RenderStart(display *ToolCallDisplay)

RenderStart renders the start of a tool call

type ToolEmojis

type ToolEmojis map[string]string

ToolEmojis maps tool names to emoji icons

func (ToolEmojis) GetToolEmoji

func (te ToolEmojis) GetToolEmoji(toolName string) string

GetToolEmoji returns the emoji for a specific tool

type Waiter

type Waiter struct {
	// contains filtered or unexported fields
}

Waiter provides a spinner for long-running operations

func NewWaiter

func NewWaiter(renderer *Renderer, message string) *Waiter

NewWaiter creates a new waiter with a message

func (*Waiter) Fail

func (w *Waiter) Fail(msg string)

Fail shows an error message

func (*Waiter) Start

func (w *Waiter) Start()

Start starts the spinner animation

func (*Waiter) Stop

func (w *Waiter) Stop()

Stop stops the spinner and optionally shows a message

func (*Waiter) Succeed

func (w *Waiter) Succeed(msg string)

Succeed shows a success message

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL