tui

package
v0.0.0-...-7c80309 Latest Latest
Warning

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

Go to latest
Published: Jan 22, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Overview

Package tui provides the Bubbletea-based terminal user interface for fab.

Index

Constants

View Source
const DirectorAgentID = "director"

DirectorAgentID is the special agent ID for the director agent.

View Source
const ManagerAgentID = "manager"

ManagerAgentID is the special agent ID for the manager agent.

View Source
const PlannerAgentIDPrefix = "plan:"

PlannerAgentIDPrefix is the prefix for planner agents in the agent list.

Variables

View Source
var (
	ErrInvalidModeTransition = errors.New("invalid mode transition")
	ErrMissingAgentID        = errors.New("abort requires an agent ID")
	ErrAlreadyInMode         = errors.New("already in this mode")
)

Validation errors for mode state transitions.

Functions

func Run

func Run() error

Run starts the TUI without a daemon connection.

func RunWithClient

func RunWithClient(client daemon.TUIClient, opts *TUIOptions) error

RunWithClient starts the TUI with a pre-connected daemon client.

Types

type AgentList

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

AgentList displays a navigable list of agents with status indicators.

func NewAgentList

func NewAgentList() AgentList

NewAgentList creates a new agent list component.

func (*AgentList) Agents

func (l *AgentList) Agents() []daemon.AgentStatus

Agents returns the current agent list.

func (*AgentList) IsFocused

func (l *AgentList) IsFocused() bool

IsFocused returns whether the agent list is focused.

func (*AgentList) MoveDown

func (l *AgentList) MoveDown()

MoveDown moves selection down one item.

func (*AgentList) MoveToBottom

func (l *AgentList) MoveToBottom()

MoveToBottom moves selection to the last item.

func (*AgentList) MoveToTop

func (l *AgentList) MoveToTop()

MoveToTop moves selection to the first item.

func (*AgentList) MoveUp

func (l *AgentList) MoveUp()

MoveUp moves selection up one item.

func (*AgentList) Selected

func (l *AgentList) Selected() *daemon.AgentStatus

Selected returns the currently selected agent, or nil if none.

func (*AgentList) SelectedIndex

func (l *AgentList) SelectedIndex() int

SelectedIndex returns the current selection index.

func (*AgentList) SetAgents

func (l *AgentList) SetAgents(agents []daemon.AgentStatus)

SetAgents updates the agent list.

func (*AgentList) SetFocused

func (l *AgentList) SetFocused(focused bool)

SetFocused sets the focus state.

func (*AgentList) SetNeedsAttention

func (l *AgentList) SetNeedsAttention(agentIDs map[string]bool)

SetNeedsAttention updates which agents have pending approvals.

func (*AgentList) SetSelected

func (l *AgentList) SetSelected(index int)

SetSelected sets the selection index.

func (*AgentList) SetSize

func (l *AgentList) SetSize(width, height int)

SetSize updates the component dimensions.

func (*AgentList) SetSpinnerFrame

func (l *AgentList) SetSpinnerFrame(frame int)

SetSpinnerFrame updates the current spinner animation frame.

func (AgentList) View

func (l AgentList) View() string

View renders the agent list.

type ChatView

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

ChatView displays chat entries for a selected agent in a conversational format.

func NewChatView

func NewChatView() ChatView

NewChatView creates a new chat view component.

func (*ChatView) AgentID

func (v *ChatView) AgentID() string

AgentID returns the current agent ID.

func (*ChatView) AppendEntry

func (v *ChatView) AppendEntry(entry daemon.ChatEntryDTO)

AppendEntry adds a chat entry to the view.

func (*ChatView) ClearAgent

func (v *ChatView) ClearAgent()

ClearAgent clears the current agent view.

func (*ChatView) ClearPlanProjectSelection

func (v *ChatView) ClearPlanProjectSelection()

ClearPlanProjectSelection clears plan project selection mode.

func (*ChatView) ClearPlanPromptMode

func (v *ChatView) ClearPlanPromptMode()

ClearPlanPromptMode clears plan prompt mode.

func (*ChatView) ClearSupervisorProjectSelection

func (v *ChatView) ClearSupervisorProjectSelection()

ClearSupervisorProjectSelection clears supervisor project selection mode.

func (*ChatView) GetSelectedAnswer

func (v *ChatView) GetSelectedAnswer() (header string, label string, isOther bool)

GetSelectedAnswer returns the selected answer for the current question. Returns the option label, or "" for "Other" (which requires freeform input).

func (*ChatView) HasPendingPermission

func (v *ChatView) HasPendingPermission() bool

HasPendingPermission returns whether there's a pending permission request.

func (*ChatView) HasPendingUserQuestion

func (v *ChatView) HasPendingUserQuestion() bool

HasPendingUserQuestion returns whether there's a pending user question.

func (*ChatView) IsFocused

func (v *ChatView) IsFocused() bool

IsFocused returns whether the view is focused.

func (*ChatView) PageDown

func (v *ChatView) PageDown()

PageDown scrolls down by one page.

func (*ChatView) PageUp

func (v *ChatView) PageUp()

PageUp scrolls up by one page.

func (*ChatView) PendingPermissionID

func (v *ChatView) PendingPermissionID() string

PendingPermissionID returns the ID of the pending permission request, or empty string.

func (*ChatView) PendingUserQuestionID

func (v *ChatView) PendingUserQuestionID() string

PendingUserQuestionID returns the ID of the pending user question, or empty string.

func (*ChatView) Project

func (v *ChatView) Project() string

Project returns the project name of the current agent.

func (*ChatView) QuestionMoveDown

func (v *ChatView) QuestionMoveDown()

QuestionMoveDown moves the selection down in the user question options.

func (*ChatView) QuestionMoveUp

func (v *ChatView) QuestionMoveUp()

QuestionMoveUp moves the selection up in the user question options.

func (*ChatView) ScrollDown

func (v *ChatView) ScrollDown(n int)

ScrollDown scrolls the viewport down.

func (*ChatView) ScrollToBottom

func (v *ChatView) ScrollToBottom()

ScrollToBottom scrolls to the bottom.

func (*ChatView) ScrollToTop

func (v *ChatView) ScrollToTop()

ScrollToTop scrolls to the top.

func (*ChatView) ScrollUp

func (v *ChatView) ScrollUp(n int)

ScrollUp scrolls the viewport up.

func (*ChatView) SetAbortConfirming

func (v *ChatView) SetAbortConfirming(confirming bool, agentID string)

SetAbortConfirming sets the abort confirmation state.

func (*ChatView) SetAgent

func (v *ChatView) SetAgent(agentID, project, backend, worktree string)

SetAgent sets the currently viewed agent.

func (*ChatView) SetEntries

func (v *ChatView) SetEntries(entries []daemon.ChatEntryDTO)

SetEntries merges historical entries with any streaming entries that may have arrived while the history was being fetched. This prevents a race condition where switching agents triggers a history fetch, but streaming events arrive before the history response - without merging, those streaming events would be lost when SetEntries replaces v.entries.

func (*ChatView) SetFocused

func (v *ChatView) SetFocused(focused bool)

SetFocused sets the focus state.

func (*ChatView) SetInputView

func (v *ChatView) SetInputView(view string, height int, focused bool)

SetInputView sets the rendered input line view to display.

func (*ChatView) SetPendingPermission

func (v *ChatView) SetPendingPermission(req *daemon.PermissionRequest)

SetPendingPermission sets the pending permission request for this chat view.

func (*ChatView) SetPendingUserQuestion

func (v *ChatView) SetPendingUserQuestion(question *daemon.UserQuestion)

SetPendingUserQuestion sets the pending user question for this chat view.

func (*ChatView) SetPlanProjectSelection

func (v *ChatView) SetPlanProjectSelection(projects []string, selectedIndex int)

SetPlanProjectSelection sets the plan project selection mode state.

func (*ChatView) SetPlanProjectSelectionWithFilter

func (v *ChatView) SetPlanProjectSelectionWithFilter(projects []string, selectedIndex int, filter string)

SetPlanProjectSelectionWithFilter sets the plan project selection mode state with a filter.

func (*ChatView) SetPlanPromptMode

func (v *ChatView) SetPlanPromptMode(project string)

SetPlanPromptMode sets the plan prompt mode state.

func (*ChatView) SetSize

func (v *ChatView) SetSize(width, height int)

SetSize updates the component dimensions.

func (*ChatView) SetSupervisorProjectSelection

func (v *ChatView) SetSupervisorProjectSelection(projects []string, selectedIndex int, running map[string]bool)

SetSupervisorProjectSelection sets the supervisor project selection mode state.

func (*ChatView) SetSupervisorProjectSelectionWithFilter

func (v *ChatView) SetSupervisorProjectSelectionWithFilter(projects []string, selectedIndex int, running map[string]bool, filter string)

SetSupervisorProjectSelectionWithFilter sets the supervisor project selection mode state with a filter.

func (ChatView) View

func (v ChatView) View() string

View renders the chat view.

type EventStreamer

type EventStreamer interface {
	StreamEvents(projects []string) (<-chan daemon.EventResult, error)
}

EventStreamer is the interface for streaming events from the daemon.

type Focus

type Focus int

Focus indicates which panel is currently focused.

const (
	FocusAgentList Focus = iota
	FocusChatView
	FocusInputLine
)
type Header struct {
	// contains filtered or unexported fields
}

Header displays the fab TUI header with branding and status info.

func NewHeader

func NewHeader() Header

NewHeader creates a new header component.

func (*Header) SetAgentCounts

func (h *Header) SetAgentCounts(total, running int)

SetAgentCounts updates the agent statistics.

func (*Header) SetConnectionState

func (h *Header) SetConnectionState(state connectionState)

SetConnectionState updates the connection state display.

func (*Header) SetWidth

func (h *Header) SetWidth(width int)

SetWidth updates the header width.

func (Header) View

func (h Header) View() string

View renders the header.

type HelpBar

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

HelpBar displays context-sensitive keyboard shortcuts at the bottom of the TUI.

func NewHelpBar

func NewHelpBar() HelpBar

NewHelpBar creates a new help bar component.

func (*HelpBar) ClearError

func (h *HelpBar) ClearError()

ClearError clears the error message.

func (*HelpBar) SetError

func (h *HelpBar) SetError(msg string)

SetError sets the error message to display.

func (*HelpBar) SetModeState

func (h *HelpBar) SetModeState(state ModeState)

SetModeState updates the help bar's mode state for rendering appropriate shortcuts.

func (*HelpBar) SetWidth

func (h *HelpBar) SetWidth(width int)

SetWidth updates the help bar width.

func (HelpBar) View

func (h HelpBar) View() string

View renders the help bar with context-sensitive keyboard shortcuts.

type InputLine

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

InputLine is a text input component for sending input to agents.

func NewInputLine

func NewInputLine() InputLine

NewInputLine creates a new input line component.

func (*InputLine) AddToHistory

func (i *InputLine) AddToHistory(input string)

AddToHistory adds the given input to history if non-empty.

func (*InputLine) Clear

func (i *InputLine) Clear()

Clear resets the input value.

func (*InputLine) ContentHeight

func (i *InputLine) ContentHeight() int

ContentHeight returns the height needed to display the current content, including soft-wrapped lines. Minimum 1, maximum maxInputHeight.

func (*InputLine) Focus

func (i *InputLine) Focus()

Focus sets focus to the input.

func (*InputLine) HistoryDown

func (i *InputLine) HistoryDown() bool

HistoryDown navigates to the next (newer) history entry. Returns true if the input was changed.

func (*InputLine) HistoryUp

func (i *InputLine) HistoryUp() bool

HistoryUp navigates to the previous (older) history entry. Returns true if the input was changed.

func (*InputLine) InsertNewline

func (i *InputLine) InsertNewline()

InsertNewline inserts a newline at the cursor position (for shift+enter).

func (*InputLine) IsFocused

func (i *InputLine) IsFocused() bool

IsFocused returns whether the input is focused.

func (*InputLine) ResetHistoryNavigation

func (i *InputLine) ResetHistoryNavigation()

ResetHistoryNavigation resets history browsing state.

func (*InputLine) SetFocused

func (i *InputLine) SetFocused(focused bool)

SetFocused sets the focus state.

func (*InputLine) SetPlaceholder

func (i *InputLine) SetPlaceholder(text string)

SetPlaceholder sets the placeholder text.

func (*InputLine) SetSize

func (i *InputLine) SetSize(width, height int)

SetSize updates the component dimensions.

func (*InputLine) Update

func (i *InputLine) Update(msg tea.Msg) tea.Cmd

Update handles input events and returns a command.

func (*InputLine) Value

func (i *InputLine) Value() string

Value returns the current input value.

func (InputLine) View

func (i InputLine) View() string

View renders the input line.

type KeyBindings

type KeyBindings struct {
	// Global keys
	Quit      key.Binding
	Tab       key.Binding
	FocusChat key.Binding
	Reconnect key.Binding

	// Navigation keys
	Up       key.Binding
	Down     key.Binding
	Top      key.Binding
	Bottom   key.Binding
	PageUp   key.Binding
	PageDown key.Binding

	// Action keys
	Approve    key.Binding
	Reject     key.Binding
	Abort      key.Binding
	Plan       key.Binding
	Supervisor key.Binding

	// Input keys
	Submit      key.Binding
	Cancel      key.Binding
	HistoryUp   key.Binding
	HistoryDown key.Binding
	NewLine     key.Binding
}

KeyBindings defines all keyboard shortcuts for the TUI.

func DefaultKeyBindings

func DefaultKeyBindings() KeyBindings

DefaultKeyBindings returns the default key bindings.

type Mode

type Mode int

Mode represents the current interaction mode of the TUI. Only one mode can be active at a time, providing clear state management.

const (
	// ModeNormal is the default mode for navigating the TUI.
	ModeNormal Mode = iota
	// ModeInput means the user is typing in the input line.
	ModeInput
	// ModeAbortConfirm means the user is being asked to confirm an abort.
	ModeAbortConfirm
	// ModeUserQuestion means the user is answering a question from Claude.
	ModeUserQuestion
	// ModePlanProjectSelect means the user is selecting a project for planning.
	ModePlanProjectSelect
	// ModePlanPrompt means the user is entering a planning prompt.
	ModePlanPrompt
	// ModeSupervisorProjectSelect means the user is selecting a project for supervisor start.
	ModeSupervisorProjectSelect
)

func (Mode) String

func (m Mode) String() string

String returns the string representation of a Mode.

type ModeState

type ModeState struct {
	// Mode is the current interaction mode (normal, input, abort confirmation, user question).
	Mode Mode

	// Focus indicates which panel is currently focused when in normal mode.
	Focus Focus

	// AbortAgentID is the agent being aborted (only valid when Mode == ModeAbortConfirm).
	AbortAgentID string

	// HasPendingPermission indicates if there's a permission request awaiting approval.
	HasPendingPermission bool

	// HasPendingUserQuestion indicates if there's a user question awaiting response.
	HasPendingUserQuestion bool

	// PlanProject is the selected project for planning (only valid when Mode == ModePlanPrompt).
	PlanProject string

	// PlanProjects is the list of available projects for planning (only valid when Mode == ModePlanProjectSelect).
	PlanProjects []string

	// PlanProjectIndex is the currently selected project index (only valid when Mode == ModePlanProjectSelect).
	PlanProjectIndex int

	// PlanProjectFilter is the current filter text for fuzzy matching (only valid when Mode == ModePlanProjectSelect).
	PlanProjectFilter string

	// PlanProjectFiltered is the list of projects that match the filter (only valid when Mode == ModePlanProjectSelect).
	PlanProjectFiltered []string

	// SupervisorProjects is the list of available projects for supervisor (only valid when Mode == ModeSupervisorProjectSelect).
	SupervisorProjects []string

	// SupervisorProjectIndex is the currently selected project index (only valid when Mode == ModeSupervisorProjectSelect).
	SupervisorProjectIndex int

	// SupervisorProjectFilter is the current filter text for fuzzy matching (only valid when Mode == ModeSupervisorProjectSelect).
	SupervisorProjectFilter string

	// SupervisorProjectFiltered is the list of projects that match the filter (only valid when Mode == ModeSupervisorProjectSelect).
	SupervisorProjectFiltered []string

	// SupervisorProjectRunning tracks which projects have running supervision.
	SupervisorProjectRunning map[string]bool
}

ModeState centralizes all mode and focus-related state for the TUI. This provides a single source of truth for the current interaction state.

func NewModeState

func NewModeState() ModeState

NewModeState creates a new ModeState with default values.

func (*ModeState) CancelAbort

func (s *ModeState) CancelAbort() error

CancelAbort cancels the abort confirmation and returns to normal mode. Returns an error if not in abort confirmation mode.

func (*ModeState) CancelPlanProjectSelect

func (s *ModeState) CancelPlanProjectSelect() error

CancelPlanProjectSelect cancels project selection and returns to normal mode.

func (*ModeState) CancelPlanPromptMode

func (s *ModeState) CancelPlanPromptMode() error

CancelPlanPromptMode cancels plan prompt mode without completing.

func (*ModeState) CancelSupervisorProjectSelect

func (s *ModeState) CancelSupervisorProjectSelect() error

CancelSupervisorProjectSelect cancels project selection and returns to normal mode.

func (*ModeState) ConfirmAbort

func (s *ModeState) ConfirmAbort() (string, error)

ConfirmAbort confirms the abort and returns to normal mode. Returns the agent ID that was being aborted, or an error if not in abort mode.

func (*ModeState) CycleFocus

func (s *ModeState) CycleFocus() (Focus, error)

CycleFocus advances focus to the next panel in the cycle. AgentList -> ChatView -> AgentList InputLine is not part of the cycle - it's accessed via the FocusChat key binding. Returns the new focus value, or an error if not in normal mode.

func (*ModeState) EnterAbortConfirm

func (s *ModeState) EnterAbortConfirm(agentID string) error

EnterAbortConfirm transitions to abort confirmation mode for the given agent. Returns an error if agentID is empty or already in abort confirmation.

func (*ModeState) EnterInputMode

func (s *ModeState) EnterInputMode() error

EnterInputMode transitions to input mode. Returns an error if already in input mode or in abort confirmation.

func (*ModeState) EnterPlanProjectSelect

func (s *ModeState) EnterPlanProjectSelect(projects []string) error

EnterPlanProjectSelect transitions to plan project selection mode. projects is the list of available projects to choose from.

func (*ModeState) EnterSupervisorProjectSelect

func (s *ModeState) EnterSupervisorProjectSelect(projects []string, running map[string]bool) error

EnterSupervisorProjectSelect transitions to supervisor project selection mode. projects is the list of available projects to choose from. running is a map of project names that have running supervision.

func (*ModeState) EnterUserQuestionMode

func (s *ModeState) EnterUserQuestionMode() error

EnterUserQuestionMode transitions to user question mode. Returns an error if already in user question mode or in another modal mode.

func (*ModeState) ExitInputMode

func (s *ModeState) ExitInputMode() error

ExitInputMode returns from input mode to normal mode. Returns an error if not currently in input mode.

func (*ModeState) ExitPlanPromptMode

func (s *ModeState) ExitPlanPromptMode() (string, error)

ExitPlanPromptMode returns from plan prompt mode to normal mode. Returns the selected project name, or an error if not in plan prompt mode.

func (*ModeState) ExitUserQuestionMode

func (s *ModeState) ExitUserQuestionMode() error

ExitUserQuestionMode returns from user question mode to normal mode. Returns an error if not currently in user question mode.

func (*ModeState) IsAbortConfirming

func (s *ModeState) IsAbortConfirming() bool

IsAbortConfirming returns true if in abort confirmation mode.

func (*ModeState) IsInputting

func (s *ModeState) IsInputting() bool

IsInputting returns true if in input mode.

func (*ModeState) IsNormal

func (s *ModeState) IsNormal() bool

IsNormal returns true if in normal mode.

func (*ModeState) IsPlanProjectSelect

func (s *ModeState) IsPlanProjectSelect() bool

IsPlanProjectSelect returns true if in plan project selection mode.

func (*ModeState) IsPlanPrompt

func (s *ModeState) IsPlanPrompt() bool

IsPlanPrompt returns true if in plan prompt mode.

func (*ModeState) IsSupervisorProjectSelect

func (s *ModeState) IsSupervisorProjectSelect() bool

IsSupervisorProjectSelect returns true if in supervisor project selection mode.

func (*ModeState) IsUserQuestion

func (s *ModeState) IsUserQuestion() bool

IsUserQuestion returns true if in user question mode.

func (*ModeState) NeedsApproval

func (s *ModeState) NeedsApproval() bool

NeedsApproval returns true if there's any pending approval.

func (*ModeState) PlanProjectAppendFilter

func (s *ModeState) PlanProjectAppendFilter(ch rune)

PlanProjectAppendFilter appends a character to the filter.

func (*ModeState) PlanProjectBackspaceFilter

func (s *ModeState) PlanProjectBackspaceFilter()

PlanProjectBackspaceFilter removes the last character from the filter.

func (*ModeState) PlanProjectFilterState

func (s *ModeState) PlanProjectFilterState() string

PlanProjectFilterState returns the current filter string.

func (*ModeState) PlanProjectSelectDown

func (s *ModeState) PlanProjectSelectDown()

PlanProjectSelectDown moves the selection down in the project list.

func (*ModeState) PlanProjectSelectUp

func (s *ModeState) PlanProjectSelectUp()

PlanProjectSelectUp moves the selection up in the project list.

func (*ModeState) PlanProjectSetFilter

func (s *ModeState) PlanProjectSetFilter(filter string)

PlanProjectSetFilter updates the filter and recomputes the filtered list.

func (*ModeState) SelectPlanProject

func (s *ModeState) SelectPlanProject() (string, error)

SelectPlanProject selects the current project and transitions to prompt mode.

func (*ModeState) SelectSupervisorProject

func (s *ModeState) SelectSupervisorProject() (project string, wasRunning bool, err error)

SelectSupervisorProject selects the current project and returns to normal mode. Returns the project name and whether it was running (to determine start vs stop).

func (*ModeState) SelectedPlanProject

func (s *ModeState) SelectedPlanProject() (string, []string, int)

SelectedPlanProject returns the selected project name and the filtered list of projects.

func (*ModeState) SelectedSupervisorProject

func (s *ModeState) SelectedSupervisorProject() ([]string, int, map[string]bool)

SelectedSupervisorProject returns the filtered list of projects and the current index.

func (*ModeState) SetFocus

func (s *ModeState) SetFocus(focus Focus) error

SetFocus changes the focus panel. Only valid in normal mode. Returns an error if called in a mode that doesn't support focus changes.

func (*ModeState) SetPendingApprovals

func (s *ModeState) SetPendingApprovals(hasPermission, hasAction, hasUserQuestion bool)

SetPendingApprovals updates the pending approval state. The second parameter (hasAction) is kept for API compatibility but ignored.

func (*ModeState) SupervisorProjectAppendFilter

func (s *ModeState) SupervisorProjectAppendFilter(ch rune)

SupervisorProjectAppendFilter appends a character to the filter.

func (*ModeState) SupervisorProjectBackspaceFilter

func (s *ModeState) SupervisorProjectBackspaceFilter()

SupervisorProjectBackspaceFilter removes the last character from the filter.

func (*ModeState) SupervisorProjectFilterState

func (s *ModeState) SupervisorProjectFilterState() string

SupervisorProjectFilterState returns the current filter string.

func (*ModeState) SupervisorProjectSelectDown

func (s *ModeState) SupervisorProjectSelectDown()

SupervisorProjectSelectDown moves the selection down in the project list.

func (*ModeState) SupervisorProjectSelectUp

func (s *ModeState) SupervisorProjectSelectUp()

SupervisorProjectSelectUp moves the selection up in the project list.

func (*ModeState) SupervisorProjectSetFilter

func (s *ModeState) SupervisorProjectSetFilter(filter string)

SupervisorProjectSetFilter updates the filter and recomputes the filtered list.

func (*ModeState) Validate

func (s *ModeState) Validate() error

Validate checks that the mode state is internally consistent. Returns an error if the state is invalid.

type Model

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

Model is the main Bubbletea model for the fab TUI.

func New

func New() Model

New creates a new TUI model.

func NewWithClient

func NewWithClient(client daemon.TUIClient, opts *TUIOptions) Model

NewWithClient creates a new TUI model with a pre-connected daemon client.

func (Model) Init

func (m Model) Init() tea.Cmd

Init implements tea.Model.

func (Model) Update

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)

Update implements tea.Model.

func (Model) View

func (m Model) View() string

View implements tea.Model.

type TUIOptions

type TUIOptions struct {
	// InitialAgentID specifies an agent to select on startup.
	// If empty, the first agent in the list will be selected.
	InitialAgentID string
}

TUIOptions configures the TUI behavior.

Jump to

Keyboard shortcuts

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