Versions in this module Expand all Collapse all v0 v0.4.10 Jul 30, 2026 Changes in this version + var AppKeybindingDefinitions = []tui.KeybindingDefinition + func KeyHint(binding, description string) string + func KeyText(binding string) string + func NewAppKeybindings(user tui.KeybindingsConfig) *tui.KeybindingsManager + func RawKeyHint(key, description string) string + func RunConfigSelector(ctx context.Context, options ConfigSelectorOptions) error + func RunConfigSelectorWithTerminal(ctx context.Context, options ConfigSelectorOptions, terminal tui.Terminal) error + func RunInteractiveMode(ctx context.Context, session *codingagent.SessionRuntime, ...) int + func RunPrintMode(ctx context.Context, session printSession, options PrintModeOptions) int + func RunRPCMode(ctx context.Context, host RPCSessionHost, options RPCModeOptions) int + func RunSessionSelector(ctx context.Context, current, all SessionSelectorLoader) (string, bool, error) + func RunSessionSelectorWithTerminal(ctx context.Context, current, all SessionSelectorLoader, terminal tui.Terminal) (string, bool, error) + func RunStartupSelector(ctx context.Context, options StartupSelectorOptions) (string, bool, error) + func RunStartupSelectorWithTerminal(ctx context.Context, options StartupSelectorOptions, terminal tui.Terminal) (string, bool, error) + type ArminComponent struct + func NewArminComponent(ui tui.RenderRequester) *ArminComponent + func (component *ArminComponent) Dispose() + func (component *ArminComponent) Invalidate() + func (component *ArminComponent) Render(width int) []string + type AssistantMessageComponent struct + func NewAssistantMessageComponent(message *ai.AssistantMessage, hideThinking bool, mdTheme tui.MarkdownTheme, ...) *AssistantMessageComponent + func (c *AssistantMessageComponent) Invalidate() + func (c *AssistantMessageComponent) Render(width int) []string + func (c *AssistantMessageComponent) SetHiddenThinkingLabel(label string) + func (c *AssistantMessageComponent) SetHideThinkingBlock(hidden bool, label string) + func (c *AssistantMessageComponent) UpdateContent(message *ai.AssistantMessage) + type BashExecutionComponent struct + func NewBashExecutionComponent(command string, ui tui.RenderRequester, excludeFromContext bool) *BashExecutionComponent + func (c *BashExecutionComponent) AppendOutput(text string) + func (c *BashExecutionComponent) Invalidate() + func (c *BashExecutionComponent) Render(width int) []string + func (c *BashExecutionComponent) SetComplete(exitCode *int, cancelled bool) + func (c *BashExecutionComponent) SetExpanded(expanded bool) + type BranchSummaryMessageComponent struct + func NewBranchSummaryMessage(summary string, mdTheme tui.MarkdownTheme) *BranchSummaryMessageComponent + func (c *BranchSummaryMessageComponent) Invalidate() + func (c *BranchSummaryMessageComponent) Render(width int) []string + func (c *BranchSummaryMessageComponent) SetExpanded(expanded bool) + type CompactionSummaryMessageComponent struct + func NewCompactionSummaryMessage(summary string, tokensBefore int64, mdTheme tui.MarkdownTheme) *CompactionSummaryMessageComponent + func (c *CompactionSummaryMessageComponent) Invalidate() + func (c *CompactionSummaryMessageComponent) Render(width int) []string + func (c *CompactionSummaryMessageComponent) SetExpanded(expanded bool) + type ConfigSelector struct + func NewConfigSelector(options ConfigSelectorOptions, onClose, onExit func(), requestRender func()) *ConfigSelector + func (selector *ConfigSelector) HandleInput(event tui.KeyEvent) + func (selector *ConfigSelector) Render(width int) []string + func (selector *ConfigSelector) SetFocused(focused bool) + func (selector *ConfigSelector) WriteScope() ConfigWriteScope + type ConfigSelectorOptions struct + AgentDir string + CWD string + ProjectModeAvailable bool + ResolvedPaths ScopedResolvedPaths + SettingsManager *config.SettingsManager + TerminalHeight int + WriteScope ConfigWriteScope + type ConfigWriteScope string + const ConfigWriteGlobal + const ConfigWriteProject + type CountdownTimer struct + func NewCountdownTimer(durationMS int64, ui tui.RenderRequester, onTick func(int), onExpire func()) *CountdownTimer + func (ct *CountdownTimer) Dispose() + type CustomEditor struct + OnCtrlD func() + OnEscape func() + OnExtensionShortcut func(string) bool + OnPasteImage func() + func NewCustomEditor(ui *tui.TUI, editorTheme tui.EditorTheme, kb *tui.KeybindingsManager) *CustomEditor + func (ce *CustomEditor) OnAction(action string, handler func()) + func (ce *CustomEditor) Render(width int) []string + type CustomMessageComponent struct + func NewCustomMessageComponent(customType string, content any, mdTheme tui.MarkdownTheme) *CustomMessageComponent + func (c *CustomMessageComponent) Invalidate() + func (c *CustomMessageComponent) Render(width int) []string + func (c *CustomMessageComponent) SetExpanded(expanded bool) + type DynamicBorder struct + func NewDynamicBorder() *DynamicBorder + func NewDynamicBorderWithColor(colorFn func(string) string) *DynamicBorder + func (border *DynamicBorder) Invalidate() + func (border *DynamicBorder) Render(width int) []string + type EarendilAnnouncementComponent struct + func NewEarendilAnnouncementComponent() *EarendilAnnouncementComponent + type ExtensionEditorComponent struct + func NewExtensionEditorComponent(uiInstance *tui.TUI, bindings *tui.KeybindingsManager, title string, ...) *ExtensionEditorComponent + func (component *ExtensionEditorComponent) HandleInput(event tui.KeyEvent) + func (component *ExtensionEditorComponent) Invalidate() + func (component *ExtensionEditorComponent) Render(width int) []string + func (component *ExtensionEditorComponent) SetFocused(focused bool) + type ExtensionInputComponent struct + func NewExtensionInputComponent(title string, _ string, onSubmit func(string), onCancel func(), ...) *ExtensionInputComponent + func (component *ExtensionInputComponent) Dispose() + func (component *ExtensionInputComponent) HandleInput(event tui.KeyEvent) + func (component *ExtensionInputComponent) Invalidate() + func (component *ExtensionInputComponent) Render(width int) []string + func (component *ExtensionInputComponent) SetFocused(focused bool) + type ExtensionSelectorComponent struct + func NewExtensionSelectorItemsComponent(title string, options []tui.SelectItem, onSelect func(string), onCancel func(), ...) *ExtensionSelectorComponent + func (component *ExtensionSelectorComponent) Dispose() + func (component *ExtensionSelectorComponent) HandleInput(event tui.KeyEvent) + func (component *ExtensionSelectorComponent) HandleMouse(event tui.MouseEvent) bool + func (component *ExtensionSelectorComponent) Invalidate() + func (component *ExtensionSelectorComponent) Render(width int) []string + type FooterComponent struct + func NewFooterComponent(session footerSession, provider footerDataProvider) *FooterComponent + func (f *FooterComponent) Invalidate() + func (f *FooterComponent) Render(width int) []string + type IdleStatus struct + func (IdleStatus) Invalidate() + func (IdleStatus) Render(width int) []string + type InteractiveAuthOptions struct + Login []InteractiveAuthProvider + Logout []InteractiveAuthProvider + type InteractiveAuthProvider struct + AuthType aiauth.AuthType + Configured bool + ID string + LoginAvailable bool + LoginLabel string + MethodName string + Name string + Status *InteractiveAuthStatus + type InteractiveAuthStatus struct + Source string + Type aiauth.AuthType + type InteractiveForkResult struct + Cancelled bool + SelectedText string + type InteractiveMode struct + func (mode *InteractiveMode) AvailableProviderCount() int + func (mode *InteractiveMode) CurrentCWD() string + func (mode *InteractiveMode) GitBranch() string + func (mode *InteractiveMode) Height() int + func (mode *InteractiveMode) Invalidate() + func (mode *InteractiveMode) SessionName() string + func (mode *InteractiveMode) SessionNameInEditor(width int) bool + func (mode *InteractiveMode) Statuses() map[string]string + func (mode *InteractiveMode) Width() int + type InteractiveModeOptions struct + Changelog string + Diagnostics []string + Host InteractiveSessionHost + InitialImages []*ai.ImageContent + InitialMessage string + Messages []string + Output io.Writer + OutputTTY bool + SessionHeader *sessionstore.SessionHeader + StartupModelRefresh func(context.Context) error + StartupVersionCheck func(context.Context, extensions.UI) + Terminal tui.Terminal + Verbose bool + type InteractiveSessionHost interface + AuthOptions func(ctx context.Context) (InteractiveAuthOptions, error) + Dispose func() + Fork func(ctx context.Context, entryID string, options *extensions.ForkOptions) (InteractiveForkResult, error) + ImportSession func(ctx context.Context, inputPath, cwdOverride string) (extensions.SessionReplacementResult, error) + ListAllSessions func(onProgress sessionstore.SessionListProgress) []sessionstore.SessionInfo + ListProjectSessions func(onProgress sessionstore.SessionListProgress) []sessionstore.SessionInfo + Login func(ctx context.Context, providerID string, authType aiauth.AuthType, ...) error + Logout func(ctx context.Context, providerID string) error + NewSession func(ctx context.Context, options *extensions.NewSessionOptions) (extensions.SessionReplacementResult, error) + Reload func(ctx context.Context) error + Session func() *codingagent.SessionRuntime + SetAfterSessionStart func(func(*codingagent.SessionRuntime) error) + SetBeforeSessionInvalidate func(func()) + SetProjectTrust func(ctx context.Context, updates []config.ProjectTrustUpdate) error + SetRebindSession func(func(*codingagent.SessionRuntime) error) + SwitchSession func(ctx context.Context, sessionPath, cwdOverride string, ...) (extensions.SessionReplacementResult, error) + TrustState func() (InteractiveTrustState, error) + type InteractiveTrustState struct + CWD string + Options []config.ProjectTrustOption + ProjectTrusted bool + SavedDecision *config.ProjectTrustStoreEntry + type InteractiveUI struct + func NewInteractiveUI(mode *InteractiveMode) *InteractiveUI + func (ui *InteractiveUI) AddAutocompleteProvider(factory extensions.AutocompleteProviderFactory) + func (ui *InteractiveUI) Confirm(ctx context.Context, title, message string, opts *extensions.DialogOptions) (bool, error) + func (ui *InteractiveUI) Custom(ctx context.Context, factory extensions.CustomFactory, ...) (any, bool, error) + func (ui *InteractiveUI) Editor(ctx context.Context, title string, prefill *string) (string, bool, error) + func (ui *InteractiveUI) GetAllThemes() []extensions.ThemeInfo + func (ui *InteractiveUI) GetEditorComponent() extensions.EditorFactory + func (ui *InteractiveUI) GetEditorText() string + func (ui *InteractiveUI) GetTheme(name string) extensions.Theme + func (ui *InteractiveUI) GetToolsExpanded() bool + func (ui *InteractiveUI) Input(ctx context.Context, title string, placeholder *string, ...) (string, bool, error) + func (ui *InteractiveUI) Notify(message string, notifyType extensions.NotificationType) + func (ui *InteractiveUI) OnTerminalInput(handler extensions.TerminalInputHandler) func() + func (ui *InteractiveUI) PasteToEditor(text string) + func (ui *InteractiveUI) Select(ctx context.Context, title string, options []string, ...) (string, bool, error) + func (ui *InteractiveUI) SetEditorComponent(factory extensions.EditorFactory) + func (ui *InteractiveUI) SetEditorText(text string) + func (ui *InteractiveUI) SetFooter(factory extensions.FooterFactory) + func (ui *InteractiveUI) SetHeader(factory extensions.HeaderFactory) + func (ui *InteractiveUI) SetHiddenThinkingLabel(label *string) + func (ui *InteractiveUI) SetStatus(key string, text *string) + func (ui *InteractiveUI) SetTheme(value any) extensions.ThemeSetResult + func (ui *InteractiveUI) SetTitle(title string) + func (ui *InteractiveUI) SetToolsExpanded(expanded bool) + func (ui *InteractiveUI) SetWidget(key string, widget *extensions.Widget, opts *extensions.WidgetOptions) + func (ui *InteractiveUI) SetWorkingIndicator(opts *extensions.WorkingIndicatorOptions) + func (ui *InteractiveUI) SetWorkingMessage(msg *string) + func (ui *InteractiveUI) SetWorkingVisible(visible bool) + func (ui *InteractiveUI) Theme() extensions.Theme + type MissingSessionCwdError struct + FallbackCWD string + SessionCWD string + SessionFile string + func (err *MissingSessionCwdError) Error() string + type ModelSelectorComponent struct + func NewModelSelectorComponent(currentModel *ai.Model, models []ai.Model, scoped []codingagent.ScopedModel, ...) *ModelSelectorComponent + func (component *ModelSelectorComponent) HandleInput(event tui.KeyEvent) + func (component *ModelSelectorComponent) Invalidate() + func (component *ModelSelectorComponent) Render(width int) []string + func (component *ModelSelectorComponent) SetFocused(focused bool) + type OAuthSelectorComponent struct + func NewOAuthSelectorComponent(selectorMode string, providers []InteractiveAuthProvider, ...) *OAuthSelectorComponent + func (component *OAuthSelectorComponent) HandleInput(event tui.KeyEvent) + func (component *OAuthSelectorComponent) Invalidate() + func (component *OAuthSelectorComponent) Render(width int) []string + func (component *OAuthSelectorComponent) SetFocused(focused bool) + type PrintModeOptions struct + InitialImages []*ai.ImageContent + InitialMessage string + Messages []string + Mode PrintOutputMode + SessionHeader *session.SessionHeader + Stderr io.Writer + Stdout io.Writer + type PrintOutputMode string + const PrintOutputJSON + const PrintOutputText + type RPCClient struct + func NewRPCClient(options RPCClientOptions) *RPCClient + func (client *RPCClient) Abort(ctx context.Context) error + func (client *RPCClient) AbortBash(ctx context.Context) error + func (client *RPCClient) AbortRetry(ctx context.Context) error + func (client *RPCClient) Bash(ctx context.Context, command string) (tools.BashResult, error) + func (client *RPCClient) Clone(ctx context.Context) (RPCSessionReplacementResult, error) + func (client *RPCClient) CollectEvents(ctx context.Context) ([]RPCEvent, error) + func (client *RPCClient) Compact(ctx context.Context, customInstructions *string) (sessionstore.CompactionResult, error) + func (client *RPCClient) CycleModel(ctx context.Context) (*RPCModelCycleResult, error) + func (client *RPCClient) CycleThinkingLevel(ctx context.Context) (*RPCThinkingLevelResult, error) + func (client *RPCClient) ExportHTML(ctx context.Context, outputPath *string) (RPCExportResult, error) + func (client *RPCClient) FollowUp(ctx context.Context, message string, images []*ai.ImageContent) error + func (client *RPCClient) Fork(ctx context.Context, entryID string) (RPCForkResult, error) + func (client *RPCClient) GetAvailableModels(ctx context.Context) ([]RPCModelInfo, error) + func (client *RPCClient) GetAvailableThinkingLevels(ctx context.Context) ([]ai.ModelThinkingLevel, error) + func (client *RPCClient) GetCommands(ctx context.Context) ([]RPCSlashCommand, error) + func (client *RPCClient) GetEntries(ctx context.Context, since *string) (RPCEntriesResult, error) + func (client *RPCClient) GetForkMessages(ctx context.Context) ([]RPCForkMessage, error) + func (client *RPCClient) GetLastAssistantText(ctx context.Context) (*string, error) + func (client *RPCClient) GetMessages(ctx context.Context) (agent.AgentMessages, error) + func (client *RPCClient) GetSessionStats(ctx context.Context) (codingagent.SessionStats, error) + func (client *RPCClient) GetState(ctx context.Context) (RPCSessionState, error) + func (client *RPCClient) GetStderr() string + func (client *RPCClient) GetTree(ctx context.Context) (RPCTreeResult, error) + func (client *RPCClient) NewSession(ctx context.Context, parentSession *string) (RPCSessionReplacementResult, error) + func (client *RPCClient) OnEvent(listener RPCEventListener) func() + func (client *RPCClient) Prompt(ctx context.Context, message string, images []*ai.ImageContent) error + func (client *RPCClient) PromptAndWait(ctx context.Context, message string, images []*ai.ImageContent) ([]RPCEvent, error) + func (client *RPCClient) SetAutoCompaction(ctx context.Context, enabled bool) error + func (client *RPCClient) SetAutoRetry(ctx context.Context, enabled bool) error + func (client *RPCClient) SetFollowUpMode(ctx context.Context, mode agent.QueueMode) error + func (client *RPCClient) SetModel(ctx context.Context, provider ai.ProviderID, modelID string) (RPCModelSelection, error) + func (client *RPCClient) SetSessionName(ctx context.Context, name string) error + func (client *RPCClient) SetSteeringMode(ctx context.Context, mode agent.QueueMode) error + func (client *RPCClient) SetThinkingLevel(ctx context.Context, level ai.ModelThinkingLevel) error + func (client *RPCClient) Start(ctx context.Context) error + func (client *RPCClient) Steer(ctx context.Context, message string, images []*ai.ImageContent) error + func (client *RPCClient) Stop() error + func (client *RPCClient) SwitchSession(ctx context.Context, sessionPath string) (RPCSessionReplacementResult, error) + func (client *RPCClient) WaitForIdle(ctx context.Context) error + type RPCClientOptions struct + Args []string + CLIPath string + CWD string + Env map[string]string + Model string + Provider string + type RPCCommand struct + Command string + CustomInstructions string + Enabled *bool + EntryID string + ExcludeFromContext *bool + HasID bool + ID string + Images []*ai.ImageContent + Level string + Message string + Mode string + ModelID string + Name string + OutputPath string + ParentSession string + Provider string + SessionPath string + Since *string + StreamingBehavior string + Type string + type RPCEntriesResult struct + Entries []sessionstore.SessionEntry + LeafID *string + type RPCEvent struct + JSON json.RawMessage + Type string + type RPCEventListener func(RPCEvent) + type RPCExportResult struct + Path string + type RPCExtensionUI struct + func (ui *RPCExtensionUI) Confirm(ctx context.Context, title, message string, timeoutMS *int64) (bool, error) + func (ui *RPCExtensionUI) Editor(ctx context.Context, title string, prefill *string) (*string, error) + func (ui *RPCExtensionUI) HandleResponse(response RPCExtensionUIResponse) + func (ui *RPCExtensionUI) Input(ctx context.Context, title string, placeholder *string, timeoutMS *int64) (*string, error) + func (ui *RPCExtensionUI) Notify(message, notifyType string) error + func (ui *RPCExtensionUI) Select(ctx context.Context, title string, options []string, timeoutMS *int64) (*string, error) + func (ui *RPCExtensionUI) SetEditorText(text string) error + func (ui *RPCExtensionUI) SetStatus(key string, text *string) error + func (ui *RPCExtensionUI) SetTitle(title string) error + func (ui *RPCExtensionUI) SetWidget(key string, lines []string, placement string) error + type RPCExtensionUIRequest struct + ID string + Message string + Method string + NotifyType string + Options []string + Placeholder *string + Prefill *string + StatusKey string + StatusText *string + Text string + Timeout *int64 + Title string + Type string + WidgetKey string + WidgetLines *[]string + WidgetPlacement string + func (request RPCExtensionUIRequest) MarshalJSON() ([]byte, error) + type RPCExtensionUIResponse struct + Cancelled bool + Confirmed *bool + ID string + Type string + Value *string + type RPCForkMessage struct + EntryID string + Text string + type RPCForkResult struct + Cancelled bool + Text string + type RPCModeOptions struct + Commands func() []RPCSlashCommand + Stderr io.Writer + Stdin io.Reader + Stdout io.Writer + type RPCModelCycleResult struct + IsScoped bool + Model RPCModelSelection + ThinkingLevel ai.ModelThinkingLevel + type RPCModelInfo struct + ContextWindow float64 + ID string + Provider ai.ProviderID + Reasoning bool + type RPCModelSelection struct + ID string + Provider ai.ProviderID + type RPCResponse struct + Command string + Data any + Error string + HasData bool + HasID bool + ID string + Success bool + Type string + func (response RPCResponse) MarshalJSON() ([]byte, error) + type RPCSessionHost interface + Dispose func() + Fork func(entryID string, atEntry bool) (text string, cancelled bool, err error) + NewSession func(parentSession string) (cancelled bool, err error) + Session func() *codingagent.SessionRuntime + SwitchSession func(sessionPath string) (cancelled bool, err error) + type RPCSessionReplacementResult struct + Cancelled bool + type RPCSessionState struct + AutoCompactionEnabled bool + FollowUpMode string + IsCompacting bool + IsStreaming bool + MessageCount int + Model *ai.Model + PendingMessageCount int + SessionFile string + SessionID string + SessionName *string + SteeringMode string + ThinkingLevel ai.ModelThinkingLevel + type RPCSlashCommand struct + Description *string + Name string + Source string + SourceInfo RPCSourceInfo + type RPCSourceInfo struct + BaseDir *string + Origin string + Path string + Scope string + Source string + type RPCThinkingLevelResult struct + Level ai.ModelThinkingLevel + type RPCThinkingLevels struct + Levels []ai.ModelThinkingLevel + type RPCTreeResult struct + LeafID *string + Tree []*sessionstore.SessionTreeNode + type ScopedResolvedPaths struct + Global *codingagent.ResolvedPaths + Project *codingagent.ResolvedPaths + type SessionDeleteMethod string + const SessionDeleteTrash + const SessionDeleteUnlink + type SessionImportFileNotFoundError struct + FilePath string + func (err *SessionImportFileNotFoundError) Error() string + type SessionSelectorComponent struct + func NewSessionSelectorComponent(options SessionSelectorOptions, onSelect func(string), onCancel func()) *SessionSelectorComponent + func (selector *SessionSelectorComponent) HandleInput(event tui.KeyEvent) + func (selector *SessionSelectorComponent) HandleMouse(event tui.MouseEvent) bool + func (selector *SessionSelectorComponent) Invalidate() + func (selector *SessionSelectorComponent) Render(width int) []string + func (selector *SessionSelectorComponent) SetFocused(focused bool) + type SessionSelectorLoader func(session.SessionListProgress) []session.SessionInfo + type SessionSelectorOptions struct + AllSessions SessionSelectorLoader + CurrentSessionPath string + CurrentSessions SessionSelectorLoader + DeleteSession func(string) (SessionDeleteMethod, error) + Keybindings *tui.KeybindingsManager + Now func() time.Time + RequestRender func() + type SkillInvocationMessageComponent struct + func NewSkillInvocationMessage(name, content string, mdTheme tui.MarkdownTheme) *SkillInvocationMessageComponent + func (c *SkillInvocationMessageComponent) Invalidate() + func (c *SkillInvocationMessageComponent) Render(width int) []string + func (c *SkillInvocationMessageComponent) SetExpanded(expanded bool) + type StartupChoice struct + Cancel bool + Label string + Value string + type StartupSelectorOptions struct + Choices []StartupChoice + MaxVisible int + Title string + type StatusIndicator struct + Kind StatusIndicatorKind + func NewBranchSummaryStatusIndicator(ui tui.RenderRequester) *StatusIndicator + func NewCompactionStatusIndicator(ui tui.RenderRequester, reason string) *StatusIndicator + func NewRetryStatusIndicator(ui tui.RenderRequester, attempt, maxAttempts int, delayMS int64) *StatusIndicator + func NewWorkingStatusIndicator(ui tui.RenderRequester, message string, ...) *StatusIndicator + func (si *StatusIndicator) Dispose() + type StatusIndicatorKind string + const StatusBranchSummary + const StatusCompaction + const StatusRetry + const StatusWorking + type ToolExecutionComponent struct + func NewToolExecutionComponent(toolName, toolCallID string, args any, showImages bool, ...) *ToolExecutionComponent + func (c *ToolExecutionComponent) Invalidate() + func (c *ToolExecutionComponent) MarkExecutionStarted() + func (c *ToolExecutionComponent) Render(width int) []string + func (c *ToolExecutionComponent) SetArgsComplete() + func (c *ToolExecutionComponent) SetExpanded(expanded bool) + func (c *ToolExecutionComponent) UpdateArgs(args any) + func (c *ToolExecutionComponent) UpdateResult(content ai.ToolResultContent, isError bool, details any, partial bool) + type TreeSelectorComponent struct + OnCopy func(string) + func NewTreeSelectorComponent(roots []*sessionstore.SessionTreeNode, leafID string, terminalHeight int, ...) *TreeSelectorComponent + func (component *TreeSelectorComponent) HandleInput(event tui.KeyEvent) + func (component *TreeSelectorComponent) HandleMouse(event tui.MouseEvent) bool + func (component *TreeSelectorComponent) Invalidate() + func (component *TreeSelectorComponent) Render(width int) []string + func (component *TreeSelectorComponent) SetFocused(focused bool) + type UserMessageComponent struct + func NewUserMessageComponent(text string, mdTheme tui.MarkdownTheme, outputPad int) *UserMessageComponent + func (c *UserMessageComponent) Invalidate() + func (c *UserMessageComponent) Render(width int) []string