ui

package
v0.0.25 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2026 License: MIT Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EnabledIcon  = "●"
	DisabledIcon = "○"
	SuccessIcon  = "✓"
	FailIcon     = "✗"
)

Status indicators

View Source
const SomethingElse = "__something_else__"

Variables

This section is empty.

Functions

func ANSILen added in v0.0.6

func ANSILen(s string) int

ANSILen returns the display width of a string, ignoring ANSI codes

func CalcDiffWidth added in v0.0.5

func CalcDiffWidth(oldContent, newContent string) int

CalcDiffWidth calculates the required padding width for a diff The result is capped to the terminal-aware max content width

func GetRefinement

func GetRefinement() (string, error)

GetRefinement prompts the user for additional guidance

func HasDiff added in v0.0.10

func HasDiff(oldContent, newContent string) bool

HasDiff returns true if old and new content are different

func InitTheme

func InitTheme(cfg ThemeConfig)

InitTheme initializes the theme from config

func PrintCompactDiff added in v0.0.5

func PrintCompactDiff(filePath, oldContent, newContent string, padWidth int)

PrintCompactDiff prints a compact diff with 2 lines of context and line numbers padWidth specifies the total line width for consistent backgrounds across diffs

func PrintUnifiedDiff added in v0.0.10

func PrintUnifiedDiff(filePath, oldContent, newContent string)

PrintUnifiedDiff prints a clean unified diff between old and new content If multiFile is true, shows the filename header (for multi-file diffs)

func PrintUnifiedDiffMulti added in v0.0.10

func PrintUnifiedDiffMulti(filePath, oldContent, newContent string)

PrintUnifiedDiffMulti prints a diff with filename header (for multi-file edits)

func PromptApplyEdit added in v0.0.5

func PromptApplyEdit() bool

PromptApplyEdit asks the user whether to apply an edit Returns true if user wants to apply (Enter or y), false to skip (n)

func RunSetupWizard

func RunSetupWizard() (*config.Config, error)

RunSetupWizard runs the first-time setup wizard and returns the config

func RunWithSpinner

func RunWithSpinner(ctx context.Context, debug bool, run func(context.Context) (any, error)) (any, error)

RunWithSpinner shows a spinner while executing the provided function.

func RunWithSpinnerProgress added in v0.0.11

func RunWithSpinnerProgress(ctx context.Context, debug bool, progress <-chan ProgressUpdate, run func(context.Context) (any, error)) (any, error)

RunWithSpinnerProgress shows a spinner with progress updates while executing the provided function. The progress channel can receive updates with token counts, status messages, and milestones.

func SelectCommand

func SelectCommand(suggestions []llm.CommandSuggestion, shell string, engine *llm.Engine, allowNonTTY bool) (string, error)

SelectCommand presents the user with a list of command suggestions and returns the selected one. Returns the selected command or SomethingElse if user wants to refine their request. If engine is non-nil and user presses 'h', shows help for the highlighted command. allowNonTTY permits a non-interactive fallback when no TTY is available.

func SetTheme

func SetTheme(t *Theme)

SetTheme sets the current active theme

func ShowCommand

func ShowCommand(cmd string)

ShowCommand displays the command that will be executed (to stderr, keeping stdout clean)

func ShowCommandHelp

func ShowCommandHelp(command, shell string, engine *llm.Engine) error

ShowCommandHelp renders scrollable help for a command

func ShowEditInfo added in v0.0.10

func ShowEditInfo(aboutText string)

ShowEditInfo displays the about/info text in a fullscreen pager

func ShowEditSkipped added in v0.0.5

func ShowEditSkipped(filePath string, reason string)

ShowEditSkipped shows that an edit was skipped

func ShowError

func ShowError(msg string)

ShowError displays an error message

func StripANSI added in v0.0.6

func StripANSI(s string) string

StripANSI removes all ANSI escape codes from a string

func Truncate

func Truncate(s string, maxLen int) string

Truncate shortens a string to maxLen with ellipsis

Types

type EditApprovalResult added in v0.0.10

type EditApprovalResult int

EditApprovalResult represents the result of batch approval prompt

const (
	EditApprovalYes  EditApprovalResult = iota // Apply all changes
	EditApprovalNo                             // Skip all changes
	EditApprovalInfo                           // Show info/about text
)

func PromptBatchApproval added in v0.0.10

func PromptBatchApproval(hasInfo bool, reprompt bool) EditApprovalResult

PromptBatchApproval asks user to approve all changes with option to see info Returns EditApprovalYes, EditApprovalNo, or EditApprovalInfo If reprompt is true, clears the line before showing prompt (used after returning from info)

type Highlighter added in v0.0.6

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

Highlighter handles syntax highlighting for diff display

func NewHighlighter added in v0.0.6

func NewHighlighter(filePath string) *Highlighter

NewHighlighter creates a highlighter for the given file path. Returns nil if the language is not recognized.

func (*Highlighter) HighlightLine added in v0.0.6

func (h *Highlighter) HighlightLine(line string) string

HighlightLine applies syntax highlighting to a line without a background color.

func (*Highlighter) HighlightLineWithBg added in v0.0.6

func (h *Highlighter) HighlightLineWithBg(line string, bg [3]int) string

HighlightLineWithBg applies syntax highlighting to a line with a specific background color. bg is an RGB array [r, g, b] for true color background.

type ProgressUpdate added in v0.0.11

type ProgressUpdate struct {
	// OutputTokens is the number of tokens generated so far.
	OutputTokens int

	// Status is the current status text (e.g., "editing main.go").
	Status string

	// Milestone is a completed milestone to print above the spinner
	// (e.g., "✓ Found edit for main.go").
	Milestone string

	// Phase is the current phase of the operation (e.g., "Thinking", "Responding").
	// Used to show state transitions in the spinner.
	Phase string
}

ProgressUpdate represents a progress update during long-running operations.

type SessionStats added in v0.0.19

type SessionStats struct {
	StartTime         time.Time
	InputTokens       int
	OutputTokens      int
	CachedInputTokens int // Tokens read from cache
	ToolCallCount     int
	TurnCount         int // For multi-turn sessions (chat)

	// Time tracking
	LLMTime  time.Duration
	ToolTime time.Duration
	// contains filtered or unexported fields
}

SessionStats tracks statistics for a session.

func NewSessionStats added in v0.0.19

func NewSessionStats() *SessionStats

NewSessionStats creates a new SessionStats with StartTime set to now.

func (*SessionStats) AddTurn added in v0.0.19

func (s *SessionStats) AddTurn()

AddTurn increments the turn count.

func (*SessionStats) AddUsage added in v0.0.19

func (s *SessionStats) AddUsage(input, output, cached int)

AddUsage adds token usage to the stats.

func (*SessionStats) Finalize added in v0.0.19

func (s *SessionStats) Finalize()

Finalize records any remaining time.

func (SessionStats) Render added in v0.0.19

func (s SessionStats) Render() string

Render returns the stats as a compact single-line string.

func (*SessionStats) ToolEnd added in v0.0.19

func (s *SessionStats) ToolEnd()

ToolEnd marks the end of tool execution (back to LLM).

func (*SessionStats) ToolStart added in v0.0.19

func (s *SessionStats) ToolStart()

ToolStart marks the start of a tool execution.

type StreamingIndicator added in v0.0.15

type StreamingIndicator struct {
	Spinner    string // spinner.View() output
	Phase      string // "Thinking", "Searching", etc.
	Elapsed    time.Duration
	Tokens     int    // 0 = don't show
	Status     string // optional status (e.g., "editing main.go")
	ShowCancel bool   // show "(esc to cancel)"
}

StreamingIndicator renders a consistent streaming status line

func (StreamingIndicator) Render added in v0.0.15

func (s StreamingIndicator) Render(styles *Styles) string

Render returns the formatted streaming indicator string

type Styles

type Styles struct {

	// Text styles
	Title       lipgloss.Style
	Subtitle    lipgloss.Style
	Success     lipgloss.Style
	Error       lipgloss.Style
	Muted       lipgloss.Style
	Bold        lipgloss.Style
	Highlighted lipgloss.Style

	// Table styles
	TableHeader lipgloss.Style
	TableCell   lipgloss.Style
	TableBorder lipgloss.Style

	// UI element styles
	Spinner lipgloss.Style
	Command lipgloss.Style
	Footer  lipgloss.Style

	// Diff styles
	DiffAdd     lipgloss.Style // Added lines (+)
	DiffRemove  lipgloss.Style // Removed lines (-)
	DiffContext lipgloss.Style // Context lines (unchanged)
	DiffHeader  lipgloss.Style // Diff header (@@ ... @@)
	// contains filtered or unexported fields
}

Styles returns styled text helpers bound to a renderer

func DefaultStyles

func DefaultStyles() *Styles

DefaultStyles returns styles for stderr (default TUI output)

func NewStyledWithTheme

func NewStyledWithTheme(output *os.File, theme *Theme) *Styles

NewStyledWithTheme creates styles with a specific theme

func NewStyles

func NewStyles(output *os.File) *Styles

NewStyles creates a new Styles instance for the given output

func (*Styles) FormatEnabled

func (s *Styles) FormatEnabled(enabled bool) string

FormatEnabled returns a styled enabled/disabled indicator

func (*Styles) FormatResult

func (s *Styles) FormatResult(success bool, msg string) string

FormatResult returns a styled success/fail result

func (*Styles) Theme

func (s *Styles) Theme() *Theme

Theme returns the theme used by these styles

type Theme

type Theme struct {
	// Primary colors
	Primary   lipgloss.Color // main accent color (commands, highlights)
	Secondary lipgloss.Color // secondary accent (headers, borders)

	// Semantic colors
	Success lipgloss.Color // success states, enabled
	Error   lipgloss.Color // error states, disabled
	Warning lipgloss.Color // warnings
	Muted   lipgloss.Color // dimmed/secondary text
	Text    lipgloss.Color // primary text

	// UI element colors
	Spinner    lipgloss.Color // loading spinner
	Border     lipgloss.Color // borders and dividers
	Background lipgloss.Color // background (if needed)

	// Diff backgrounds
	DiffAddBg     lipgloss.Color // background for added lines
	DiffRemoveBg  lipgloss.Color // background for removed lines
	DiffContextBg lipgloss.Color // background for context lines
}

Theme defines the color palette for the UI

func DefaultTheme

func DefaultTheme() *Theme

DefaultTheme returns the default color theme

func GetTheme

func GetTheme() *Theme

GetTheme returns the current active theme

func ThemeFromConfig

func ThemeFromConfig(cfg ThemeConfig) *Theme

ThemeFromConfig creates a theme with config overrides applied

type ThemeConfig

type ThemeConfig struct {
	Primary   string
	Secondary string
	Success   string
	Error     string
	Warning   string
	Muted     string
	Text      string
	Spinner   string
}

ThemeConfig mirrors the config.ThemeConfig for applying overrides

type ToolPhase added in v0.0.25

type ToolPhase struct {
	// Active is the phase text shown during execution (e.g., "Generating image: cat")
	Active string
	// Completed is the text shown after completion (e.g., "Generated image: cat")
	Completed string
}

ToolPhase contains display strings for a tool execution phase.

func FormatToolPhase added in v0.0.25

func FormatToolPhase(name, info string) ToolPhase

FormatToolPhase returns display strings for a tool based on name and preview info. The info comes from tool.Preview() and contains context like the prompt or file path.

Jump to

Keyboard shortcuts

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