Documentation
¶
Overview ¶
Package ui provides the Bubble Tea TUI for agent-deck. keyboard_compat.go implements compatibility helpers for the Kitty keyboard protocol (CSI u encoding) used by Wayland compositors and modern terminals such as Ghostty, Foot, and Alacritty.
Background: Bubble Tea v1.3.10 does not parse Kitty keyboard protocol sequences. On Wayland, terminals send keys using CSI u encoding by default, which causes uppercase shortcuts and uppercase text input to be silently dropped. This file provides:
DisableKittyKeyboard / RestoreKittyKeyboard — escape sequences that ask the terminal to fall back to legacy key reporting before the TUI starts.
ParseCSIu — a CSI u sequence parser, available as a public API for future use or for terminals that ignore the protocol-disable request.
NewCSIuReader — a reader that translates CSI u sequences to legacy bytes on the fly, as a belt-and-suspenders fallback.
Index ¶
- Constants
- Variables
- func DetachByteFromBinding(binding string) byte
- func DetachByteLabel(b byte) string
- func DisableKittyKeyboard(w io.Writer)
- func DisableModifyOtherKeys(w io.Writer)
- func EnableKittyKeyboard(w io.Writer)
- func EnableModifyOtherKeys(w io.Writer)
- func GetToolStyle(tool string) lipgloss.Style
- func InitTheme(theme string)
- func MenuKey(key, description string) string
- func NewCSIuReader(r io.Reader) io.Reader
- func ParseCSIu(data []byte) *tea.KeyMsg
- func ParseModifyOtherKeys(data []byte) *tea.KeyMsg
- func RenderLogoCompact(running, waiting, idle int) string
- func RenderLogoIndicator(indicator string) string
- func RenderLogoLarge(running, waiting, idle int) string
- func ResolvedDetachByte(overrides map[string]string) byte
- func RestoreKittyKeyboard(w io.Writer)
- func RestoreLegacyKeyboardCmd(w io.Writer) tea.Cmd
- func SetVersion(v string)
- func StatusIndicator(status string) string
- func ToolColor(tool string) lipgloss.Color
- func ToolIcon(tool string) string
- type AnalyticsPanel
- func (p *AnalyticsPanel) SetAnalytics(a *session.SessionAnalytics)
- func (p *AnalyticsPanel) SetDisplaySettings(settings session.AnalyticsDisplaySettings)
- func (p *AnalyticsPanel) SetGeminiAnalytics(a *session.GeminiSessionAnalytics)
- func (p *AnalyticsPanel) SetSize(width, height int)
- func (p *AnalyticsPanel) View() string
- type BranchPickerDialog
- func (d *BranchPickerDialog) Hide()
- func (d *BranchPickerDialog) IsVisible() bool
- func (d *BranchPickerDialog) SetQuery(query string)
- func (d *BranchPickerDialog) SetSize(width, height int)
- func (d *BranchPickerDialog) Show(projectPath, query string) error
- func (d *BranchPickerDialog) Update(msg tea.KeyMsg) (string, bool)
- func (d *BranchPickerDialog) View() string
- type Change
- type ClaudeOptionsPanel
- func (p *ClaudeOptionsPanel) AtTop() bool
- func (p *ClaudeOptionsPanel) Blur()
- func (p *ClaudeOptionsPanel) Focus()
- func (p *ClaudeOptionsPanel) GetExtraArgs() []string
- func (p *ClaudeOptionsPanel) GetOptions() *session.ClaudeOptions
- func (p *ClaudeOptionsPanel) GetStartQuery() string
- func (p *ClaudeOptionsPanel) IsFocused() bool
- func (p *ClaudeOptionsPanel) ResetStartQuery()
- func (p *ClaudeOptionsPanel) SetDefaults(config *session.UserConfig)
- func (p *ClaudeOptionsPanel) SetExtraArgs(tokens []string)
- func (p *ClaudeOptionsPanel) SetFromOptions(opts *session.ClaudeOptions)
- func (p *ClaudeOptionsPanel) SetStartQuery(query string)
- func (p *ClaudeOptionsPanel) Update(msg tea.Msg) tea.Cmd
- func (p *ClaudeOptionsPanel) View() string
- type ConfirmDialog
- func (c *ConfirmDialog) GetConfirmType() ConfirmType
- func (c *ConfirmDialog) GetFocusedButton() int
- func (c *ConfirmDialog) GetPendingSession() (name, path, command, groupPath string, toolOptionsJSON json.RawMessage, ...)
- func (c *ConfirmDialog) GetRemoteName() string
- func (c *ConfirmDialog) GetTargetID() string
- func (c *ConfirmDialog) Hide()
- func (c *ConfirmDialog) IsVisible() bool
- func (c *ConfirmDialog) SetSize(width, height int)
- func (c *ConfirmDialog) ShowBulkRemoveErrored(count int)
- func (c *ConfirmDialog) ShowCloseRemoteSession(remoteName, sessionID, sessionName string)
- func (c *ConfirmDialog) ShowCloseSession(sessionID string, sessionName string, sandboxed bool)
- func (c *ConfirmDialog) ShowCreateDirectory(path string, sessionName string, command string, groupPath string, ...)
- func (c *ConfirmDialog) ShowDeleteGroup(groupPath, groupName string)
- func (c *ConfirmDialog) ShowDeleteRemoteSession(remoteName, sessionID, sessionName string)
- func (c *ConfirmDialog) ShowDeleteSession(sessionID string, sessionName string, sandboxed, worktree bool)
- func (c *ConfirmDialog) ShowInstallHooks()
- func (c *ConfirmDialog) ShowQuitWithPool(mcpCount int)
- func (c *ConfirmDialog) ShowRemoveSession(sessionID string, sessionName string)
- func (c *ConfirmDialog) Update(msg tea.KeyMsg) (*ConfirmDialog, tea.Cmd)
- func (c *ConfirmDialog) View() string
- type ConfirmType
- type CreatingSession
- type EditPathsDialog
- func (d *EditPathsDialog) GetPaths() []string
- func (d *EditPathsDialog) GetSessionID() string
- func (d *EditPathsDialog) HasChanged() bool
- func (d *EditPathsDialog) Hide()
- func (d *EditPathsDialog) IsEditing() bool
- func (d *EditPathsDialog) IsVisible() bool
- func (d *EditPathsDialog) SetSize(w, h int)
- func (d *EditPathsDialog) Show(inst *session.Instance, pathSuggestions []string)
- func (d *EditPathsDialog) Update(msg tea.Msg) (*EditPathsDialog, tea.Cmd)
- func (d *EditPathsDialog) Validate() string
- func (d *EditPathsDialog) View() string
- type EditSessionDialog
- func (d *EditSessionDialog) ClearError()
- func (d *EditSessionDialog) GetChanges(inst *session.Instance) []Change
- func (d *EditSessionDialog) HasRestartRequiredChanges(inst *session.Instance) bool
- func (d *EditSessionDialog) Hide()
- func (d *EditSessionDialog) IsVisible() bool
- func (d *EditSessionDialog) SessionID() string
- func (d *EditSessionDialog) SetError(msg string)
- func (d *EditSessionDialog) SetSize(w, h int)
- func (d *EditSessionDialog) Show(inst *session.Instance)
- func (d *EditSessionDialog) Update(msg tea.Msg) (*EditSessionDialog, tea.Cmd)
- func (d *EditSessionDialog) Validate() string
- func (d *EditSessionDialog) View() string
- type EmptyStateConfig
- type FeedbackDialog
- func (d *FeedbackDialog) Hide()
- func (d *FeedbackDialog) IsVisible() bool
- func (d *FeedbackDialog) OnSent(msg feedbackSentMsg)
- func (d *FeedbackDialog) SetSize(width, height int)
- func (d *FeedbackDialog) Show(version string, st *feedback.State, sender *feedback.Sender)
- func (d *FeedbackDialog) Update(msg tea.KeyMsg) (*FeedbackDialog, tea.Cmd)
- func (d *FeedbackDialog) View() string
- type ForkDialog
- func (d *ForkDialog) ClearError()
- func (d *ForkDialog) GetOptions() *session.ClaudeOptions
- func (d *ForkDialog) GetParentProjectPath() string
- func (d *ForkDialog) GetParentSessionID() string
- func (d *ForkDialog) GetValues() (name, group string)
- func (d *ForkDialog) GetValuesWithWorktree() (name, group, branch string, worktreeEnabled bool)
- func (d *ForkDialog) Hide()
- func (d *ForkDialog) IsBranchPickerOpen() bool
- func (d *ForkDialog) IsSandboxEnabled() bool
- func (d *ForkDialog) IsVisible() bool
- func (d *ForkDialog) IsWorktreeEnabled() bool
- func (d *ForkDialog) SetError(msg string)
- func (d *ForkDialog) SetSize(width, height int)
- func (d *ForkDialog) Show(originalName, projectPath, groupPath string, conductors []*session.Instance, ...)
- func (d *ForkDialog) ToggleSandbox()
- func (d *ForkDialog) ToggleWorktree()
- func (d *ForkDialog) Update(msg tea.Msg) (*ForkDialog, tea.Cmd)
- func (d *ForkDialog) Validate() string
- func (d *ForkDialog) View() string
- type GeminiModelDialog
- func (d *GeminiModelDialog) HandleModelsFetched(msg modelsFetchedMsg)
- func (d *GeminiModelDialog) Hide()
- func (d *GeminiModelDialog) IsVisible() bool
- func (d *GeminiModelDialog) SetSize(width, height int)
- func (d *GeminiModelDialog) Show(instanceID, currentModel string) tea.Cmd
- func (d *GeminiModelDialog) Update(msg tea.KeyMsg) (*GeminiModelDialog, tea.Cmd)
- func (d *GeminiModelDialog) View() string
- type GlobalSearch
- func (gs *GlobalSearch) Hide()
- func (gs *GlobalSearch) IsVisible() bool
- func (gs *GlobalSearch) MarkInAgentDeck(instances []*session.Instance)
- func (gs *GlobalSearch) RefreshStats()
- func (gs *GlobalSearch) Selected() *GlobalSearchResult
- func (gs *GlobalSearch) SetIndex(index *session.GlobalSearchIndex)
- func (gs *GlobalSearch) SetSize(width, height int)
- func (gs *GlobalSearch) Show()
- func (gs *GlobalSearch) Update(msg tea.Msg) (*GlobalSearch, tea.Cmd)
- func (gs *GlobalSearch) View() string
- func (gs *GlobalSearch) WantsSwitchToLocal() bool
- type GlobalSearchResult
- type GroupDialog
- func (g *GroupDialog) CanToggle() bool
- func (g *GroupDialog) ClearError()
- func (g *GroupDialog) GetDefaultPath() string
- func (g *GroupDialog) GetGroupPath() string
- func (g *GroupDialog) GetParentPath() string
- func (g *GroupDialog) GetSelectedGroup() string
- func (g *GroupDialog) GetSessionID() string
- func (g *GroupDialog) GetValue() string
- func (g *GroupDialog) HasParent() bool
- func (g *GroupDialog) Hide()
- func (g *GroupDialog) IsVisible() bool
- func (g *GroupDialog) Mode() GroupDialogMode
- func (g *GroupDialog) SetError(msg string)
- func (g *GroupDialog) SetSize(width, height int)
- func (g *GroupDialog) Show()
- func (g *GroupDialog) ShowCreateSubgroup(parentPath, parentName string)
- func (g *GroupDialog) ShowCreateWithContext(parentPath, parentName string)
- func (g *GroupDialog) ShowCreateWithContextDefaultRoot(parentPath, parentName string)
- func (g *GroupDialog) ShowMove(groupPaths []string)
- func (g *GroupDialog) ShowRename(currentPath, currentName string)
- func (g *GroupDialog) ShowRenameSession(sessionID, currentName string)
- func (g *GroupDialog) ToggleRootSubgroup()
- func (g *GroupDialog) Update(msg tea.KeyMsg) (*GroupDialog, tea.Cmd)
- func (g *GroupDialog) Validate() string
- func (g *GroupDialog) View() string
- type GroupDialogMode
- type HelpOverlay
- func (h *HelpOverlay) Hide()
- func (h *HelpOverlay) IsVisible() bool
- func (h *HelpOverlay) SetHotkeys(bindings map[string]string)
- func (h *HelpOverlay) SetSize(width, height int)
- func (h *HelpOverlay) Show()
- func (h *HelpOverlay) Update(msg tea.Msg) (*HelpOverlay, tea.Cmd)
- func (h *HelpOverlay) View() string
- type Home
- func (h *Home) Init() tea.Cmd
- func (h *Home) SetCostBudget(budget *costs.BudgetChecker)
- func (h *Home) SetCostPricer(pricer *costs.Pricer)
- func (h *Home) SetCostStore(store *costs.Store)
- func (h *Home) SetGroupScope(path string)
- func (h *Home) SetInitialSelection(idOrTitle string)
- func (h *Home) SetWebMenuData(menuData *web.MemoryMenuData)
- func (h *Home) Update(msg tea.Msg) (tea.Model, tea.Cmd)
- func (h *Home) View() string
- type List
- func (l *List) Cursor() int
- func (l *List) Len() int
- func (l *List) MoveDown()
- func (l *List) MoveUp()
- func (l *List) Selected() *session.Instance
- func (l *List) SetItems(items []*session.Instance)
- func (l *List) SetSize(width, height int)
- func (l *List) ToggleFolder(name string)
- func (l *List) View() string
- type MCPColumn
- type MCPDialog
- func (m *MCPDialog) Apply() error
- func (m *MCPDialog) GetError() error
- func (m *MCPDialog) GetProjectPath() string
- func (m *MCPDialog) GetSessionID() string
- func (m *MCPDialog) HasChanged() bool
- func (m *MCPDialog) HasItems() bool
- func (m *MCPDialog) Hide()
- func (m *MCPDialog) IsVisible() bool
- func (m *MCPDialog) Move()
- func (m *MCPDialog) ScrollDown()
- func (m *MCPDialog) ScrollUp()
- func (m *MCPDialog) SetSize(width, height int)
- func (m *MCPDialog) Show(projectPath string, sessionID string, tool string) error
- func (m *MCPDialog) Update(msg tea.KeyMsg) (*MCPDialog, tea.Cmd)
- func (m *MCPDialog) View() string
- type MCPItem
- type MCPScope
- type MaintenanceCompleteMsg
- type Menu
- type NewDialog
- func (d *NewDialog) ApplyHighlightedModelSuggestion()
- func (d *NewDialog) ApplyHighlightedSuggestion()
- func (d *NewDialog) ClearError()
- func (d *NewDialog) DismissModelSuggestions()
- func (d *NewDialog) DismissSuggestions()
- func (d *NewDialog) GetClaudeExtraArgs() []string
- func (d *NewDialog) GetClaudeOptions() *session.ClaudeOptions
- func (d *NewDialog) GetClaudeStartQuery() string
- func (d *NewDialog) GetCodexYoloMode() bool
- func (d *NewDialog) GetLaunchModelID() string
- func (d *NewDialog) GetMultiRepoPaths() ([]string, bool)
- func (d *NewDialog) GetParentProjectPath() string
- func (d *NewDialog) GetParentSessionID() string
- func (d *NewDialog) GetSelectedCommand() string
- func (d *NewDialog) GetSelectedGroup() string
- func (d *NewDialog) GetValues() (name, path, command string)
- func (d *NewDialog) GetValuesWithWorktree() (name, path, command, branch string, worktreeEnabled bool)
- func (d *NewDialog) Hide()
- func (d *NewDialog) IsBranchPickerOpen() bool
- func (d *NewDialog) IsGeminiYoloMode() bool
- func (d *NewDialog) IsModelSuggestionsActive() bool
- func (d *NewDialog) IsModelTypeCustomHighlighted() bool
- func (d *NewDialog) IsMultiRepoEditing() bool
- func (d *NewDialog) IsRecentPickerOpen() bool
- func (d *NewDialog) IsSandboxEnabled() bool
- func (d *NewDialog) IsSuggestionsActive() bool
- func (d *NewDialog) IsTypeCustomHighlighted() bool
- func (d *NewDialog) IsVisible() bool
- func (d *NewDialog) IsWorktreeEnabled() bool
- func (d *NewDialog) SetDefaultTool(tool string)
- func (d *NewDialog) SetError(msg string)
- func (d *NewDialog) SetPathSuggestions(paths []string)
- func (d *NewDialog) SetRecentSessions(sessions []*statedb.RecentSessionRow)
- func (d *NewDialog) SetSize(width, height int)
- func (d *NewDialog) Show()
- func (d *NewDialog) ShowInGroup(groupPath, groupName, defaultPath string, conductors []*session.Instance, ...)
- func (d *NewDialog) ToggleMultiRepo()
- func (d *NewDialog) ToggleSandbox()
- func (d *NewDialog) ToggleWorktree()
- func (d *NewDialog) Update(msg tea.Msg) (*NewDialog, tea.Cmd)
- func (d *NewDialog) Validate() string
- func (d *NewDialog) View() string
- type OptionsPanel
- type PluginDialog
- func (d *PluginDialog) GetSessionID() string
- func (d *PluginDialog) HasChanged() bool
- func (d *PluginDialog) Hide()
- func (d *PluginDialog) IsVisible() bool
- func (d *PluginDialog) SelectedPluginNames() []string
- func (d *PluginDialog) SetSize(w, h int)
- func (d *PluginDialog) Show(inst *session.Instance) error
- func (d *PluginDialog) Update(msg tea.KeyMsg) (*PluginDialog, tea.Cmd)
- func (d *PluginDialog) View() string
- type Preview
- type PreviewMode
- type Search
- func (s *Search) Hide()
- func (s *Search) IsVisible() bool
- func (s *Search) Selected() *session.Instance
- func (s *Search) SetItems(items []*session.Instance)
- func (s *Search) SetScopedGroup(groupPath string)
- func (s *Search) SetSize(width, height int)
- func (s *Search) Show()
- func (s *Search) Update(msg tea.Msg) (*Search, tea.Cmd)
- func (s *Search) View() string
- func (s *Search) WantsSwitchToGlobal() bool
- type SessionPickerDialog
- func (d *SessionPickerDialog) GetSelected() *session.Instance
- func (d *SessionPickerDialog) GetSource() *session.Instance
- func (d *SessionPickerDialog) Hide()
- func (d *SessionPickerDialog) IsVisible() bool
- func (d *SessionPickerDialog) SetSize(w, h int)
- func (d *SessionPickerDialog) Show(source *session.Instance, allInstances []*session.Instance)
- func (d *SessionPickerDialog) Update(msg tea.KeyMsg) (*SessionPickerDialog, tea.Cmd)
- func (d *SessionPickerDialog) View() string
- type SettingType
- type SettingsPanel
- func (s *SettingsPanel) GetConfig() *session.UserConfig
- func (s *SettingsPanel) Hide()
- func (s *SettingsPanel) IsVisible() bool
- func (s *SettingsPanel) LoadConfig(config *session.UserConfig)
- func (s *SettingsPanel) NeedsRestart() bool
- func (s *SettingsPanel) ScrollDown()
- func (s *SettingsPanel) ScrollUp()
- func (s *SettingsPanel) SetProfile(profile string)
- func (s *SettingsPanel) SetSize(width, height int)
- func (s *SettingsPanel) Show()
- func (s *SettingsPanel) Update(msg tea.KeyMsg) (*SettingsPanel, tea.Cmd, bool)
- func (s *SettingsPanel) View() string
- type SetupWizard
- func (w *SetupWizard) GetConfig() *session.UserConfig
- func (w *SetupWizard) Hide()
- func (w *SetupWizard) IsComplete() bool
- func (w *SetupWizard) IsVisible() bool
- func (w *SetupWizard) SetSize(width, height int)
- func (w *SetupWizard) Show()
- func (w *SetupWizard) Update(msg tea.Msg) (*SetupWizard, tea.Cmd)
- func (w *SetupWizard) View() string
- type SkillColumn
- type SkillDialog
- func (d *SkillDialog) Apply() error
- func (d *SkillDialog) GetError() error
- func (d *SkillDialog) GetSessionID() string
- func (d *SkillDialog) HasChanged() bool
- func (d *SkillDialog) Hide()
- func (d *SkillDialog) IsVisible() bool
- func (d *SkillDialog) Move()
- func (d *SkillDialog) NeedsApply() bool
- func (d *SkillDialog) SetSize(width, height int)
- func (d *SkillDialog) Show(projectPath, sessionID, tool string) error
- func (d *SkillDialog) Update(msg tea.KeyMsg) (*SkillDialog, tea.Cmd)
- func (d *SkillDialog) View() string
- type SkillDialogItem
- type StorageWatcher
- type Theme
- type ThemeWatcher
- type Tree
- func (t *Tree) AddFolder(name string)
- func (t *Tree) Clear()
- func (t *Tree) GetFolder(name string) *TreeFolder
- func (t *Tree) GetFolders() []string
- func (t *Tree) IsFolderExpanded(name string) bool
- func (t *Tree) SetFolderCount(name string, count int)
- func (t *Tree) ToggleFolder(name string)
- func (t *Tree) View(selectedFolder string) string
- type TreeFolder
- type WatcherActionMsg
- type WatcherDisplayItem
- type WatcherEventDisplay
- type WatcherPanel
- func (wp *WatcherPanel) Hide()
- func (wp *WatcherPanel) IsVisible() bool
- func (wp *WatcherPanel) SelectedWatcher() *WatcherDisplayItem
- func (wp *WatcherPanel) SetEvents(events []WatcherEventDisplay)
- func (wp *WatcherPanel) SetSize(w, h int)
- func (wp *WatcherPanel) SetWatchers(items []WatcherDisplayItem)
- func (wp *WatcherPanel) Show()
- func (wp *WatcherPanel) Update(msg tea.Msg) (*WatcherPanel, tea.Cmd)
- func (wp *WatcherPanel) View() string
- type WebMutator
- func (m *WebMutator) CloseSession(id string) error
- func (m *WebMutator) CreateGroup(name, parentPath string) (string, error)
- func (m *WebMutator) CreateSession(title, tool, projectPath, groupPath, modelID string) (string, error)
- func (m *WebMutator) DeleteGroup(groupPath string) error
- func (m *WebMutator) DeleteSession(id string) error
- func (m *WebMutator) FinishWorktree(id string, opts web.WorktreeFinishOptions) (web.WorktreeFinishResult, error)
- func (m *WebMutator) ForkSession(id string) (string, error)
- func (m *WebMutator) RenameGroup(groupPath, newName string) error
- func (m *WebMutator) RestartSession(id string) error
- func (m *WebMutator) StartSession(id string) error
- func (m *WebMutator) StopSession(id string) error
- func (m *WebMutator) UndoDelete() (string, error)
- func (m *WebMutator) WithUndoWindow(d time.Duration) *WebMutator
- type WorktreeFinishDialog
- func (d *WorktreeFinishDialog) GetOptions() (mergeEnabled bool, targetBranch string, keepBranch bool)
- func (d *WorktreeFinishDialog) GetSessionID() string
- func (d *WorktreeFinishDialog) HandleKey(key string) (action string)
- func (d *WorktreeFinishDialog) Hide()
- func (d *WorktreeFinishDialog) IsVisible() bool
- func (d *WorktreeFinishDialog) SetDirtyStatus(isDirty bool)
- func (d *WorktreeFinishDialog) SetError(msg string)
- func (d *WorktreeFinishDialog) SetExecuting(executing bool)
- func (d *WorktreeFinishDialog) SetSize(width, height int)
- func (d *WorktreeFinishDialog) Show(...)
- func (d *WorktreeFinishDialog) UpdateTargetInput(msg interface{})
- func (d *WorktreeFinishDialog) View() string
- type YoloOptionsPanel
- func (p *YoloOptionsPanel) AtTop() bool
- func (p *YoloOptionsPanel) Blur()
- func (p *YoloOptionsPanel) Focus()
- func (p *YoloOptionsPanel) GetYoloMode() bool
- func (p *YoloOptionsPanel) IsFocused() bool
- func (p *YoloOptionsPanel) SetDefaults(yoloMode bool)
- func (p *YoloOptionsPanel) Update(msg tea.Msg) tea.Cmd
- func (p *YoloOptionsPanel) View() string
- type ZoxidePicker
Constants ¶
const ( LayoutModeSingle = "single" // <50 cols: list only LayoutModeStacked = "stacked" // 50-79 cols: vertical stack LayoutModeDual = "dual" // 80+ cols: side-by-side )
Layout mode names
const ( IconClaude = "🤖" IconGemini = "✨" IconOpenCode = "🌐" IconCodex = "💻" IconPi = "π" IconShell = "🐚" )
Tool Icons
const FilterKeyActive = "%"
FilterKeyActive is the keyboard shortcut for the "open" status filter (shows all sessions except error/stopped). Change this constant to rebind.
const FilterModeActive session.Status = "active"
FilterModeActive is the filter value for "open" sessions: excludes the configured set of statuses (see DisplaySettings.ActiveFilterExcludes; default {error}). This is NOT a session status (never assigned to a session), just a filter mode.
const MaxNameLength = 50
MaxNameLength is the maximum allowed length for session and group names. Used by dialog CharLimits and Validate() methods to ensure consistency.
Variables ¶
var ( ColorBg lipgloss.Color ColorSurface lipgloss.Color ColorBorder lipgloss.Color ColorText lipgloss.Color ColorTextDim lipgloss.Color ColorAccent lipgloss.Color ColorPurple lipgloss.Color ColorCyan lipgloss.Color ColorGreen lipgloss.Color ColorYellow lipgloss.Color ColorOrange lipgloss.Color ColorRed lipgloss.Color ColorComment lipgloss.Color )
Active color variables (set by InitTheme)
var ( BaseStyle lipgloss.Style TitleStyle lipgloss.Style PanelStyle lipgloss.Style HighlightStyle lipgloss.Style DimStyle lipgloss.Style ErrorStyle lipgloss.Style SuccessStyle lipgloss.Style WarningStyle lipgloss.Style InfoStyle lipgloss.Style )
Base Styles
var ( RunningStyle lipgloss.Style WaitingStyle lipgloss.Style IdleStyle lipgloss.Style ErrorIndicatorStyle lipgloss.Style )
Status Indicator Styles
var ( MenuBarStyle lipgloss.Style MenuKeyStyle lipgloss.Style MenuDescStyle lipgloss.Style MenuSeparatorStyle lipgloss.Style )
Menu Bar Styles
var ( SearchBoxStyle lipgloss.Style SearchPromptStyle lipgloss.Style SearchMatchStyle lipgloss.Style )
Search Styles
var ( DialogBoxStyle lipgloss.Style DialogTitleStyle lipgloss.Style DialogButtonStyle lipgloss.Style DialogButtonActiveStyle lipgloss.Style )
Dialog Styles
var ( PreviewPanelStyle lipgloss.Style PreviewTitleStyle lipgloss.Style PreviewHeaderStyle lipgloss.Style PreviewContentStyle lipgloss.Style PreviewMetaStyle lipgloss.Style )
Preview Pane Styles
var ( ListItemStyle lipgloss.Style ListItemActiveStyle lipgloss.Style )
List Item Styles (used by legacy list.go component in tests)
var ( TagStyle lipgloss.Style TagActiveStyle lipgloss.Style TagErrorStyle lipgloss.Style )
Tag Styles
var ( FolderStyle lipgloss.Style FolderCollapsedStyle lipgloss.Style )
Folder Styles
var ( SessionItemStyle lipgloss.Style SessionItemSelectedStyle lipgloss.Style )
Session Item Styles
var ( // Tree connector styles TreeConnectorStyle lipgloss.Style TreeConnectorSelStyle lipgloss.Style // Session status indicator styles SessionStatusRunning lipgloss.Style SessionStatusWaiting lipgloss.Style SessionStatusIdle lipgloss.Style SessionStatusError lipgloss.Style SessionStatusStopped lipgloss.Style SessionStatusSelStyle lipgloss.Style // Session title styles by state SessionTitleDefault lipgloss.Style SessionTitleActive lipgloss.Style SessionTitleError lipgloss.Style SessionTitleSelStyle lipgloss.Style // Selection indicator SessionSelectionPrefix lipgloss.Style // Group item styles GroupExpandStyle lipgloss.Style GroupNameStyle lipgloss.Style GroupCountStyle lipgloss.Style GroupHotkeyStyle lipgloss.Style GroupStatusRunning lipgloss.Style GroupStatusWaiting lipgloss.Style // Group selected styles GroupNameSelStyle lipgloss.Style GroupCountSelStyle lipgloss.Style GroupExpandSelStyle lipgloss.Style )
Session List Rendering Styles (PERFORMANCE: cached at package level) These styles are used by renderSessionItem() and renderGroupItem() to avoid repeated allocations on every View() call
var ( SubtitleStyle lipgloss.Style ColorError lipgloss.Color ColorSuccess lipgloss.Color ColorWarning lipgloss.Color ColorPrimary lipgloss.Color )
Additional Styles
var DefaultToolStyle lipgloss.Style
DefaultToolStyle is used when tool is not in cache
var LogoBorderStyle lipgloss.Style
LogoBorderStyle for the grid lines
var LogoFrames = [][]string{
{"●", "◐", "○"},
}
LogoFrames kept for backward compatibility (empty state default)
var MenuStyle lipgloss.Style
Menu Styles
var TimestampStyle lipgloss.Style
Timestamp Style
var ToolStyleCache map[string]lipgloss.Style
ToolStyleCache provides pre-allocated styles for each tool type Avoids repeated lipgloss.NewStyle() calls in renderSessionItem()
var Version = "0.0.0"
Version is set by main.go for update checking
Functions ¶
func DetachByteFromBinding ¶ added in v0.26.4
DetachByteFromBinding converts a hotkey binding string (e.g. "ctrl+q") to the corresponding ASCII byte used by the PTY attach loop. Returns 0x11 (Ctrl+Q) as the default when the binding cannot be mapped.
func DetachByteLabel ¶ added in v0.26.4
DetachByteLabel returns a human-readable label for a detach byte (e.g. "Ctrl+Q").
func DisableKittyKeyboard ¶ added in v0.26.2
DisableKittyKeyboard writes the escape sequence that pops the Kitty keyboard protocol stack, restoring the previous keyboard mode. If nothing was on the stack, this is a safe no-op. After this call, Kitty-protocol-aware terminals stop sending CSI u sequences and revert to legacy key reporting. Terminals that do not support the protocol ignore the sequence.
func DisableModifyOtherKeys ¶ added in v1.9.23
DisableModifyOtherKeys writes the xterm escape sequence that returns the terminal to default key reporting (modifyOtherKeys mode 0). Call on TUI exit so the user's shell behaves normally again.
func EnableKittyKeyboard ¶ added in v1.3.2
EnableKittyKeyboard writes the escape sequence that pushes Kitty keyboard mode 1 (disambiguate) onto the protocol stack. This re-enables extended key reporting so that sequences like Shift+Enter are sent as CSI u codes. Call this before attaching to a session that needs Kitty keyboard support (e.g. Claude Code). Pair with DisableKittyKeyboard to pop the stack on return.
func EnableModifyOtherKeys ¶ added in v1.9.23
EnableModifyOtherKeys writes the xterm escape sequence that requests modifyOtherKeys mode 1: terminals supporting the protocol (iTerm2, xterm, Konsole, …) start sending modified keys — including the previously indistinguishable Shift+Enter — as CSI 27;<modifier>;<codepoint>~ sequences rather than the legacy unmodified byte. Unmodified keys still arrive as their normal bytes, so plain Enter is unaffected.
This is the upstream half of the #1093 fix: without it, a fresh agent-deck launch in iTerm2 sees plain '\r' for both Enter and Shift+Enter and cannot distinguish them. With it, Shift+Enter arrives as \x1b[27;2;13~ and our csiuReader relays it through to home.go as "shift+enter".
Pair with DisableModifyOtherKeys on TUI exit so the user's shell prompt returns to default key-reporting behavior.
func GetToolStyle ¶ added in v0.8.9
GetToolStyle returns cached style for tool or default. Read-locked to protect against concurrent map access during live theme switches.
func InitTheme ¶ added in v0.8.16
func InitTheme(theme string)
InitTheme sets the active color palette based on theme name Must be called before any UI rendering
func NewCSIuReader ¶ added in v0.26.2
NewCSIuReader returns a reader that wraps r and translates any CSI u sequences to their legacy equivalents. This is a belt-and-suspenders fallback for terminals that do not honor DisableKittyKeyboard.
If r is a *os.File, the returned reader also implements the *os.File interface (preserving Fd() for terminal raw-mode setup by Bubble Tea). If r is any other io.Reader, a plain io.Reader is returned.
func ParseCSIu ¶ added in v0.26.2
ParseCSIu parses a Kitty keyboard protocol (CSI u) escape sequence and returns the equivalent tea.KeyMsg. Returns nil if the data is not a valid CSI u sequence.
The CSI u format is: ESC '[' <codepoint> [';' <modifier>] 'u'
Modifier encoding (1 + bitmask):
1 = no modifier 2 = shift (1 + 1) 3 = alt (1 + 2) 4 = shift+alt (1 + 1 + 2) 5 = ctrl (1 + 4) 6 = shift+ctrl (1 + 1 + 4)
func ParseModifyOtherKeys ¶ added in v1.3.4
ParseModifyOtherKeys parses an xterm modifyOtherKeys escape sequence and returns the equivalent tea.KeyMsg. Returns nil if the data is not a valid modifyOtherKeys sequence.
The modifyOtherKeys format is: ESC '[' '27' ';' <modifier> ';' <codepoint> '~'
tmux with extended-keys sends this format. The modifier encoding is the same as CSI u (1 + bitmask).
func RenderLogoCompact ¶
RenderLogoCompact renders the compact inline logo for the header Shows REAL status: running=●, waiting=◐, idle=○ Format: ⟨ ● │ ◐ │ ○ ⟩ (using angle brackets for modern look)
func RenderLogoIndicator ¶
RenderLogoIndicator renders a single indicator with appropriate color
func RenderLogoLarge ¶
RenderLogoLarge renders the large logo for empty state Shows REAL status: running=●, waiting=◐, idle=○ Format:
┌──┬──┬──┐ │● │◐ │○ │ └──┴──┴──┘
func ResolvedDetachByte ¶ added in v0.26.4
ResolvedDetachByte returns the detach byte for the current hotkey configuration.
func RestoreKittyKeyboard ¶ added in v0.26.2
RestoreKittyKeyboard writes the escape sequence that pops the keyboard mode stack, restoring the terminal to its previous keyboard mode. Call this when the TUI exits so that the terminal returns to normal operation.
func RestoreLegacyKeyboardCmd ¶ added in v1.7.21
RestoreLegacyKeyboardCmd returns a tea.Cmd that pops the Kitty keyboard protocol stack, restoring legacy key reporting on the given writer.
This is the cleanup half of the attach/detach symmetry: when the dashboard hands control to tmux via tea.Exec, tmux's extended-keys setting activates Kitty/modifyOtherKeys on the outer terminal. Those settings persist after the user detaches, so the outer terminal keeps sending CSI u sequences that Bubble Tea v1.3.10 cannot parse, silently dropping shifted keys (capitals) on the dashboard. Dispatching this command after tea.Exec returns undoes the state tmux set.
Takes a writer so tests can substitute a buffer for os.Stdout.
func SetVersion ¶ added in v0.4.0
func SetVersion(v string)
SetVersion sets the current version for update checking
func StatusIndicator ¶
StatusIndicator returns a styled status indicator. Read-locked to protect against concurrent style access during live theme switches. Standard symbols: ● running, ◐ waiting, ○ idle, ✕ error, ⟳ starting
Types ¶
type AnalyticsPanel ¶ added in v0.8.27
type AnalyticsPanel struct {
// contains filtered or unexported fields
}
AnalyticsPanel displays session analytics in a formatted panel
func NewAnalyticsPanel ¶ added in v0.8.27
func NewAnalyticsPanel() *AnalyticsPanel
NewAnalyticsPanel creates a new analytics panel
func (*AnalyticsPanel) SetAnalytics ¶ added in v0.8.27
func (p *AnalyticsPanel) SetAnalytics(a *session.SessionAnalytics)
SetAnalytics sets the Claude analytics data to display
func (*AnalyticsPanel) SetDisplaySettings ¶ added in v0.8.53
func (p *AnalyticsPanel) SetDisplaySettings(settings session.AnalyticsDisplaySettings)
SetDisplaySettings configures which sections to show
func (*AnalyticsPanel) SetGeminiAnalytics ¶ added in v0.8.35
func (p *AnalyticsPanel) SetGeminiAnalytics(a *session.GeminiSessionAnalytics)
SetGeminiAnalytics sets the Gemini analytics data to display
func (*AnalyticsPanel) SetSize ¶ added in v0.8.27
func (p *AnalyticsPanel) SetSize(width, height int)
SetSize sets the panel dimensions
func (*AnalyticsPanel) View ¶ added in v0.8.27
func (p *AnalyticsPanel) View() string
View renders the analytics panel
type BranchPickerDialog ¶ added in v1.3.1
type BranchPickerDialog struct {
// contains filtered or unexported fields
}
BranchPickerDialog is an in-TUI branch picker with inline filtering.
func NewBranchPickerDialog ¶ added in v1.3.1
func NewBranchPickerDialog() *BranchPickerDialog
func (*BranchPickerDialog) Hide ¶ added in v1.3.1
func (d *BranchPickerDialog) Hide()
func (*BranchPickerDialog) IsVisible ¶ added in v1.3.1
func (d *BranchPickerDialog) IsVisible() bool
func (*BranchPickerDialog) SetQuery ¶ added in v1.3.1
func (d *BranchPickerDialog) SetQuery(query string)
func (*BranchPickerDialog) SetSize ¶ added in v1.3.1
func (d *BranchPickerDialog) SetSize(width, height int)
func (*BranchPickerDialog) Show ¶ added in v1.3.1
func (d *BranchPickerDialog) Show(projectPath, query string) error
func (*BranchPickerDialog) Update ¶ added in v1.3.1
func (d *BranchPickerDialog) Update(msg tea.KeyMsg) (string, bool)
Update handles list navigation keys. Text entry should remain in the parent input.
func (*BranchPickerDialog) View ¶ added in v1.3.1
func (d *BranchPickerDialog) View() string
type ClaudeOptionsPanel ¶ added in v0.8.39
type ClaudeOptionsPanel struct {
// contains filtered or unexported fields
}
ClaudeOptionsPanel is a UI panel for Claude-specific launch options Used in both ForkDialog and NewDialog
func NewClaudeOptionsPanel ¶ added in v0.8.39
func NewClaudeOptionsPanel() *ClaudeOptionsPanel
NewClaudeOptionsPanel creates a new panel for NewDialog
func NewClaudeOptionsPanelForFork ¶ added in v0.8.39
func NewClaudeOptionsPanelForFork() *ClaudeOptionsPanel
NewClaudeOptionsPanelForFork creates a panel for ForkDialog (fewer options)
func (*ClaudeOptionsPanel) AtTop ¶ added in v0.10.18
func (p *ClaudeOptionsPanel) AtTop() bool
AtTop returns true if focus is on the first element
func (*ClaudeOptionsPanel) Blur ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) Blur()
Blur removes focus from this panel
func (*ClaudeOptionsPanel) Focus ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) Focus()
Focus sets focus to this panel
func (*ClaudeOptionsPanel) GetExtraArgs ¶ added in v1.7.21
func (p *ClaudeOptionsPanel) GetExtraArgs() []string
GetExtraArgs returns the parsed extra-args tokens (whitespace-split, empties dropped). Callers assign the result to Instance.ExtraArgs. Tokens with embedded spaces cannot be expressed through this input — use CLI `--extra-arg` for that.
func (*ClaudeOptionsPanel) GetOptions ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) GetOptions() *session.ClaudeOptions
GetOptions returns current options as ClaudeOptions
func (*ClaudeOptionsPanel) GetStartQuery ¶ added in v1.7.67
func (p *ClaudeOptionsPanel) GetStartQuery() string
GetStartQuery returns the trimmed raw input, un-split. Callers assign the result to Instance.StartupQuery which emits it as a single shell-quoted positional arg on the claude command line. This is the core v1.7.67 contract — never split on spaces here (#725).
func (*ClaudeOptionsPanel) IsFocused ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) IsFocused() bool
IsFocused returns true if any element in the panel has focus
func (*ClaudeOptionsPanel) ResetStartQuery ¶ added in v1.7.70
func (p *ClaudeOptionsPanel) ResetStartQuery()
ResetStartQuery clears the start-query input. Called by NewDialog on each open so the per-session StartupQuery (Instance.StartupQuery, json:"-") does not leak across dialog invocations (#741).
func (*ClaudeOptionsPanel) SetDefaults ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) SetDefaults(config *session.UserConfig)
SetDefaults applies default values from config
func (*ClaudeOptionsPanel) SetExtraArgs ¶ added in v1.7.21
func (p *ClaudeOptionsPanel) SetExtraArgs(tokens []string)
SetExtraArgs pre-fills the input from a persisted slice.
func (*ClaudeOptionsPanel) SetFromOptions ¶ added in v0.20.0
func (p *ClaudeOptionsPanel) SetFromOptions(opts *session.ClaudeOptions)
SetFromOptions applies persisted ClaudeOptions to the panel fields.
func (*ClaudeOptionsPanel) SetStartQuery ¶ added in v1.7.67
func (p *ClaudeOptionsPanel) SetStartQuery(query string)
SetStartQuery pre-fills the input (used by tests; the field is not persisted, so there is no production "restore" path).
func (*ClaudeOptionsPanel) Update ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) Update(msg tea.Msg) tea.Cmd
Update handles key events
func (*ClaudeOptionsPanel) View ¶ added in v0.8.39
func (p *ClaudeOptionsPanel) View() string
View renders the options panel
type ConfirmDialog ¶
type ConfirmDialog struct {
// contains filtered or unexported fields
}
ConfirmDialog handles confirmation for destructive actions
func NewConfirmDialog ¶
func NewConfirmDialog() *ConfirmDialog
NewConfirmDialog creates a new confirmation dialog
func (*ConfirmDialog) GetConfirmType ¶
func (c *ConfirmDialog) GetConfirmType() ConfirmType
GetConfirmType returns the type of confirmation
func (*ConfirmDialog) GetFocusedButton ¶ added in v1.5.1
func (c *ConfirmDialog) GetFocusedButton() int
GetFocusedButton returns the currently focused button index.
func (*ConfirmDialog) GetPendingSession ¶ added in v0.8.99
func (c *ConfirmDialog) GetPendingSession() (name, path, command, groupPath string, toolOptionsJSON json.RawMessage, claudeExtraArgs []string, claudeStartQuery, launchModelID string, parentSessionID, parentProjectPath string)
GetPendingSession returns the pending session creation data
func (*ConfirmDialog) GetRemoteName ¶ added in v0.25.0
func (c *ConfirmDialog) GetRemoteName() string
GetRemoteName returns the remote name for remote session confirmations.
func (*ConfirmDialog) GetTargetID ¶
func (c *ConfirmDialog) GetTargetID() string
GetTargetID returns the session ID or group path being confirmed
func (*ConfirmDialog) IsVisible ¶
func (c *ConfirmDialog) IsVisible() bool
IsVisible returns whether the dialog is visible
func (*ConfirmDialog) SetSize ¶
func (c *ConfirmDialog) SetSize(width, height int)
SetSize updates dialog dimensions
func (*ConfirmDialog) ShowBulkRemoveErrored ¶ added in v1.7.61
func (c *ConfirmDialog) ShowBulkRemoveErrored(count int)
ShowBulkRemoveErrored shows confirmation for removing all errored sessions (TUI Ctrl+X). count is the number of errored sessions that will be removed.
func (*ConfirmDialog) ShowCloseRemoteSession ¶ added in v0.25.0
func (c *ConfirmDialog) ShowCloseRemoteSession(remoteName, sessionID, sessionName string)
ShowCloseRemoteSession shows confirmation for closing a remote session.
func (*ConfirmDialog) ShowCloseSession ¶ added in v0.21.0
func (c *ConfirmDialog) ShowCloseSession(sessionID string, sessionName string, sandboxed bool)
ShowCloseSession shows confirmation for non-destructive session close.
func (*ConfirmDialog) ShowCreateDirectory ¶ added in v0.8.99
func (c *ConfirmDialog) ShowCreateDirectory( path string, sessionName string, command string, groupPath string, toolOptionsJSON json.RawMessage, claudeExtraArgs []string, claudeStartQuery string, launchModelID string, parentSessionID string, parentProjectPath string, )
ShowCreateDirectory shows confirmation for creating a missing directory.
func (*ConfirmDialog) ShowDeleteGroup ¶
func (c *ConfirmDialog) ShowDeleteGroup(groupPath, groupName string)
ShowDeleteGroup shows confirmation for group deletion
func (*ConfirmDialog) ShowDeleteRemoteSession ¶ added in v0.25.0
func (c *ConfirmDialog) ShowDeleteRemoteSession(remoteName, sessionID, sessionName string)
ShowDeleteRemoteSession shows confirmation for deleting a remote session.
func (*ConfirmDialog) ShowDeleteSession ¶
func (c *ConfirmDialog) ShowDeleteSession(sessionID string, sessionName string, sandboxed, worktree bool)
ShowDeleteSession shows confirmation for session deletion.
func (*ConfirmDialog) ShowInstallHooks ¶ added in v0.16.0
func (c *ConfirmDialog) ShowInstallHooks()
ShowInstallHooks shows confirmation for installing Claude Code hooks
func (*ConfirmDialog) ShowQuitWithPool ¶ added in v0.8.70
func (c *ConfirmDialog) ShowQuitWithPool(mcpCount int)
ShowQuitWithPool shows confirmation for quitting with MCP pool running
func (*ConfirmDialog) ShowRemoveSession ¶ added in v1.7.61
func (c *ConfirmDialog) ShowRemoveSession(sessionID string, sessionName string)
ShowRemoveSession shows confirmation for status-gated registry removal (TUI 'X'). Safer than ConfirmDeleteSession: the caller has already verified the session is stopped or errored, and the dialog wording reflects the registry-only intent (transcripts + worktrees are preserved).
func (*ConfirmDialog) Update ¶
func (c *ConfirmDialog) Update(msg tea.KeyMsg) (*ConfirmDialog, tea.Cmd)
Update handles key events for arrow-key navigation between buttons.
func (*ConfirmDialog) View ¶
func (c *ConfirmDialog) View() string
View renders the confirmation dialog
type ConfirmType ¶
type ConfirmType int
ConfirmType indicates what action is being confirmed
const ( ConfirmDeleteSession ConfirmType = iota ConfirmCloseSession ConfirmDeleteGroup ConfirmQuitWithPool ConfirmCreateDirectory ConfirmInstallHooks ConfirmDeleteRemoteSession ConfirmCloseRemoteSession ConfirmRemoveSession // status-gated registry-only remove (TUI 'X') ConfirmBulkRemoveErrored // bulk remove of all errored sessions (TUI Ctrl+X) )
type CreatingSession ¶ added in v1.3.1
type CreatingSession struct {
ID string // Temporary ID for tracking
Title string
Tool string
GroupPath string
StartTime time.Time
}
CreatingSession is a lightweight placeholder shown in the UI while a worktree + session is being created asynchronously. It is NOT a real session.Instance — it is excluded from save, polling, and search.
type EditPathsDialog ¶ added in v1.7.21
type EditPathsDialog struct {
// contains filtered or unexported fields
}
EditPathsDialog allows editing the repo paths of an existing multi-repo session.
func NewEditPathsDialog ¶ added in v1.7.21
func NewEditPathsDialog() *EditPathsDialog
func (*EditPathsDialog) GetPaths ¶ added in v1.7.21
func (d *EditPathsDialog) GetPaths() []string
GetPaths returns the validated, expanded, non-empty path list.
func (*EditPathsDialog) GetSessionID ¶ added in v1.7.21
func (d *EditPathsDialog) GetSessionID() string
func (*EditPathsDialog) HasChanged ¶ added in v1.7.21
func (d *EditPathsDialog) HasChanged() bool
HasChanged returns true if paths differ from the original set.
func (*EditPathsDialog) Hide ¶ added in v1.7.21
func (d *EditPathsDialog) Hide()
func (*EditPathsDialog) IsEditing ¶ added in v1.7.21
func (d *EditPathsDialog) IsEditing() bool
func (*EditPathsDialog) IsVisible ¶ added in v1.7.21
func (d *EditPathsDialog) IsVisible() bool
func (*EditPathsDialog) SetSize ¶ added in v1.7.21
func (d *EditPathsDialog) SetSize(w, h int)
func (*EditPathsDialog) Show ¶ added in v1.7.21
func (d *EditPathsDialog) Show(inst *session.Instance, pathSuggestions []string)
func (*EditPathsDialog) Update ¶ added in v1.7.21
func (d *EditPathsDialog) Update(msg tea.Msg) (*EditPathsDialog, tea.Cmd)
func (*EditPathsDialog) Validate ¶ added in v1.7.21
func (d *EditPathsDialog) Validate() string
Validate checks the current paths. Returns error string or "".
func (*EditPathsDialog) View ¶ added in v1.7.21
func (d *EditPathsDialog) View() string
type EditSessionDialog ¶ added in v1.7.70
type EditSessionDialog struct {
// contains filtered or unexported fields
}
EditSessionDialog edits the slim set of session fields users iterate on at runtime. Rare flags (TitleLocked, NoTransitionNotify, Wrapper, Channels, etc.) stay accessible via `agent-deck session set <field>`.
func NewEditSessionDialog ¶ added in v1.7.70
func NewEditSessionDialog() *EditSessionDialog
func (*EditSessionDialog) ClearError ¶ added in v1.7.70
func (d *EditSessionDialog) ClearError()
func (*EditSessionDialog) GetChanges ¶ added in v1.7.70
func (d *EditSessionDialog) GetChanges(inst *session.Instance) []Change
GetChanges returns only fields whose value differs from `inst`. The shape lets home.go batch saves and decide on the restart hint without the dialog touching persistence.
func (*EditSessionDialog) HasRestartRequiredChanges ¶ added in v1.7.70
func (d *EditSessionDialog) HasRestartRequiredChanges(inst *session.Instance) bool
func (*EditSessionDialog) Hide ¶ added in v1.7.70
func (d *EditSessionDialog) Hide()
func (*EditSessionDialog) IsVisible ¶ added in v1.7.70
func (d *EditSessionDialog) IsVisible() bool
IsVisible is nil-safe — some unit tests build a Home literal without NewHome, so d may be nil when the main key router runs.
func (*EditSessionDialog) SessionID ¶ added in v1.7.70
func (d *EditSessionDialog) SessionID() string
func (*EditSessionDialog) SetError ¶ added in v1.7.70
func (d *EditSessionDialog) SetError(msg string)
func (*EditSessionDialog) SetSize ¶ added in v1.7.70
func (d *EditSessionDialog) SetSize(w, h int)
func (*EditSessionDialog) Show ¶ added in v1.7.70
func (d *EditSessionDialog) Show(inst *session.Instance)
Show rebuilds the field slice. Claude-only rows are hidden for non-claude tools — friendlier than letting SetField reject the submit.
func (*EditSessionDialog) Update ¶ added in v1.7.70
func (d *EditSessionDialog) Update(msg tea.Msg) (*EditSessionDialog, tea.Cmd)
Update returns nil cmd on esc/enter so the outer key router can decide commit vs cancel.
func (*EditSessionDialog) Validate ¶ added in v1.7.70
func (d *EditSessionDialog) Validate() string
Validate is best-effort pre-flight feedback; SetField re-validates authoritatively at commit time.
func (*EditSessionDialog) View ¶ added in v1.7.70
func (d *EditSessionDialog) View() string
type EmptyStateConfig ¶ added in v0.5.8
type EmptyStateConfig struct {
Icon string
Title string
Subtitle string
Hints []string // Full list of hints (will be reduced based on space)
}
EmptyStateConfig holds content for responsive empty state rendering
type FeedbackDialog ¶ added in v1.5.4
type FeedbackDialog struct {
// contains filtered or unexported fields
}
FeedbackDialog is a self-contained in-app feedback popup.
func NewFeedbackDialog ¶ added in v1.5.4
func NewFeedbackDialog() *FeedbackDialog
NewFeedbackDialog creates a new FeedbackDialog in hidden state.
func (*FeedbackDialog) Hide ¶ added in v1.5.4
func (d *FeedbackDialog) Hide()
Hide hides the dialog and resets internal state.
func (*FeedbackDialog) IsVisible ¶ added in v1.5.4
func (d *FeedbackDialog) IsVisible() bool
IsVisible returns true when the dialog is shown.
func (*FeedbackDialog) OnSent ¶ added in v1.7.37
func (d *FeedbackDialog) OnSent(msg feedbackSentMsg)
OnSent records the result of a send attempt so stepSent can render success or an explicit error message. Called by the TUI runtime on feedbackSentMsg.
func (*FeedbackDialog) SetSize ¶ added in v1.5.4
func (d *FeedbackDialog) SetSize(width, height int)
SetSize updates the dialog dimensions so it can center itself.
func (*FeedbackDialog) Show ¶ added in v1.5.4
Show displays the dialog for the given version, state, and sender.
v1.7.38: when the state is opted-out (FeedbackEnabled=false), Show() is a silent no-op. Every auto-prompt caller is gated on ShouldShow already, which checks FeedbackEnabled — this is belt-and-braces so a new caller that forgets the ShouldShow gate cannot accidentally re-prompt an opted-out user. Explicit "open on demand" paths (e.g. ctrl+e) must re-enable the state BEFORE calling Show(); the dialog itself does not carry a re-enable UI.
func (*FeedbackDialog) Update ¶ added in v1.5.4
func (d *FeedbackDialog) Update(msg tea.KeyMsg) (*FeedbackDialog, tea.Cmd)
Update handles key events for the dialog.
func (*FeedbackDialog) View ¶ added in v1.5.4
func (d *FeedbackDialog) View() string
View renders the dialog. Returns "" when hidden.
type ForkDialog ¶ added in v0.4.1
type ForkDialog struct {
// contains filtered or unexported fields
}
ForkDialog handles the fork session dialog
func NewForkDialog ¶ added in v0.4.1
func NewForkDialog() *ForkDialog
NewForkDialog creates a new fork dialog
func (*ForkDialog) ClearError ¶ added in v0.8.80
func (d *ForkDialog) ClearError()
ClearError clears the inline validation error
func (*ForkDialog) GetOptions ¶ added in v0.8.39
func (d *ForkDialog) GetOptions() *session.ClaudeOptions
GetOptions returns the current Claude options
func (*ForkDialog) GetParentProjectPath ¶ added in v1.3.1
func (d *ForkDialog) GetParentProjectPath() string
GetParentProjectPath returns the project path of the selected conductor.
func (*ForkDialog) GetParentSessionID ¶ added in v1.3.1
func (d *ForkDialog) GetParentSessionID() string
GetParentSessionID returns the conductor ID selected in the dialog (empty = None).
func (*ForkDialog) GetValues ¶ added in v0.4.1
func (d *ForkDialog) GetValues() (name, group string)
GetValues returns the current input values
func (*ForkDialog) GetValuesWithWorktree ¶ added in v0.9.0
func (d *ForkDialog) GetValuesWithWorktree() (name, group, branch string, worktreeEnabled bool)
GetValuesWithWorktree returns all values including worktree settings
func (*ForkDialog) IsBranchPickerOpen ¶ added in v1.3.1
func (d *ForkDialog) IsBranchPickerOpen() bool
IsBranchPickerOpen returns whether the inline branch result list is visible.
func (*ForkDialog) IsSandboxEnabled ¶ added in v0.19.17
func (d *ForkDialog) IsSandboxEnabled() bool
IsSandboxEnabled returns whether Docker sandbox mode is enabled.
func (*ForkDialog) IsVisible ¶ added in v0.4.1
func (d *ForkDialog) IsVisible() bool
IsVisible returns whether the dialog is visible
func (*ForkDialog) IsWorktreeEnabled ¶ added in v0.9.0
func (d *ForkDialog) IsWorktreeEnabled() bool
IsWorktreeEnabled returns whether worktree mode is enabled
func (*ForkDialog) SetError ¶ added in v0.8.80
func (d *ForkDialog) SetError(msg string)
SetError sets an inline validation error displayed inside the dialog
func (*ForkDialog) SetSize ¶ added in v0.4.1
func (d *ForkDialog) SetSize(width, height int)
SetSize sets the dialog dimensions
func (*ForkDialog) Show ¶ added in v0.4.1
func (d *ForkDialog) Show(originalName, projectPath, groupPath string, conductors []*session.Instance, suggestedParentID string)
Show displays the dialog with pre-filled values
func (*ForkDialog) ToggleSandbox ¶ added in v0.19.17
func (d *ForkDialog) ToggleSandbox()
ToggleSandbox toggles Docker sandbox mode.
func (*ForkDialog) ToggleWorktree ¶ added in v0.9.0
func (d *ForkDialog) ToggleWorktree()
ToggleWorktree toggles the worktree checkbox
func (*ForkDialog) Update ¶ added in v0.4.1
func (d *ForkDialog) Update(msg tea.Msg) (*ForkDialog, tea.Cmd)
Update handles input events
func (*ForkDialog) Validate ¶ added in v0.8.80
func (d *ForkDialog) Validate() string
Validate checks if the dialog values are valid and returns an error message if not
func (*ForkDialog) View ¶ added in v0.4.1
func (d *ForkDialog) View() string
View renders the dialog
type GeminiModelDialog ¶ added in v0.8.79
type GeminiModelDialog struct {
// contains filtered or unexported fields
}
GeminiModelDialog allows selecting a Gemini model for the current session
func NewGeminiModelDialog ¶ added in v0.8.79
func NewGeminiModelDialog() *GeminiModelDialog
NewGeminiModelDialog creates a new model selection dialog
func (*GeminiModelDialog) HandleModelsFetched ¶ added in v0.8.79
func (d *GeminiModelDialog) HandleModelsFetched(msg modelsFetchedMsg)
HandleModelsFetched processes the async model fetch result
func (*GeminiModelDialog) Hide ¶ added in v0.8.79
func (d *GeminiModelDialog) Hide()
Hide closes the dialog
func (*GeminiModelDialog) IsVisible ¶ added in v0.8.79
func (d *GeminiModelDialog) IsVisible() bool
IsVisible returns whether the dialog is visible
func (*GeminiModelDialog) SetSize ¶ added in v0.8.79
func (d *GeminiModelDialog) SetSize(width, height int)
SetSize updates the dialog dimensions
func (*GeminiModelDialog) Show ¶ added in v0.8.79
func (d *GeminiModelDialog) Show(instanceID, currentModel string) tea.Cmd
Show opens the dialog and triggers async model fetching
func (*GeminiModelDialog) Update ¶ added in v0.8.79
func (d *GeminiModelDialog) Update(msg tea.KeyMsg) (*GeminiModelDialog, tea.Cmd)
Update handles input for the dialog
func (*GeminiModelDialog) View ¶ added in v0.8.79
func (d *GeminiModelDialog) View() string
View renders the dialog
type GlobalSearch ¶ added in v0.5.3
type GlobalSearch struct {
// contains filtered or unexported fields
}
GlobalSearch represents the global session search overlay
func NewGlobalSearch ¶ added in v0.5.3
func NewGlobalSearch() *GlobalSearch
NewGlobalSearch creates a new global search overlay
func (*GlobalSearch) IsVisible ¶ added in v0.5.3
func (gs *GlobalSearch) IsVisible() bool
IsVisible returns whether the overlay is visible
func (*GlobalSearch) MarkInAgentDeck ¶ added in v0.5.3
func (gs *GlobalSearch) MarkInAgentDeck(instances []*session.Instance)
MarkInAgentDeck marks which results are already in Agent Deck
func (*GlobalSearch) RefreshStats ¶ added in v0.5.3
func (gs *GlobalSearch) RefreshStats()
RefreshStats updates the stats from the index
func (*GlobalSearch) Selected ¶ added in v0.5.3
func (gs *GlobalSearch) Selected() *GlobalSearchResult
Selected returns the currently selected result
func (*GlobalSearch) SetIndex ¶ added in v0.5.3
func (gs *GlobalSearch) SetIndex(index *session.GlobalSearchIndex)
SetIndex sets the search index reference
func (*GlobalSearch) SetSize ¶ added in v0.5.3
func (gs *GlobalSearch) SetSize(width, height int)
SetSize sets the dimensions of the overlay
func (*GlobalSearch) Show ¶ added in v0.5.3
func (gs *GlobalSearch) Show()
Show makes the overlay visible
func (*GlobalSearch) Update ¶ added in v0.5.3
func (gs *GlobalSearch) Update(msg tea.Msg) (*GlobalSearch, tea.Cmd)
Update handles messages for the overlay
func (*GlobalSearch) View ¶ added in v0.5.3
func (gs *GlobalSearch) View() string
View renders the overlay with split-pane layout
func (*GlobalSearch) WantsSwitchToLocal ¶ added in v0.5.3
func (gs *GlobalSearch) WantsSwitchToLocal() bool
WantsSwitchToLocal returns true if user pressed Tab to switch to local search
type GlobalSearchResult ¶ added in v0.5.3
type GlobalSearchResult struct {
SessionID string
Summary string
Snippet string
Content string // Full conversation content for preview
CWD string
ModTime time.Time // Last modified time
Score int // Fuzzy match score (higher = better match)
MatchCount int // Number of query matches in content
InAgentDeck bool // True if this session is already in Agent Deck
InstanceID string // Agent Deck instance ID if exists
}
GlobalSearchResult wraps a search result for UI display
type GroupDialog ¶
type GroupDialog struct {
// contains filtered or unexported fields
}
GroupDialog handles group creation, renaming, and moving sessions
func (*GroupDialog) CanToggle ¶ added in v0.8.93
func (g *GroupDialog) CanToggle() bool
CanToggle returns true when the Tab toggle between Root and Subgroup is available. Only applies in Create mode when the cursor was on a group context.
func (*GroupDialog) ClearError ¶ added in v0.8.80
func (g *GroupDialog) ClearError()
ClearError clears the inline validation error
func (*GroupDialog) GetDefaultPath ¶ added in v1.9.7
func (g *GroupDialog) GetDefaultPath() string
GetDefaultPath returns the default-path input value for the group being created (Issue #918). Empty when the user left the field blank or when the dialog is in a mode that does not expose the field.
func (*GroupDialog) GetGroupPath ¶
func (g *GroupDialog) GetGroupPath() string
GetGroupPath returns the group path being edited (or parent path for subgroup creation)
func (*GroupDialog) GetParentPath ¶
func (g *GroupDialog) GetParentPath() string
GetParentPath returns the parent path for subgroup creation
func (*GroupDialog) GetSelectedGroup ¶
func (g *GroupDialog) GetSelectedGroup() string
GetSelectedGroup returns the selected group for move mode
func (*GroupDialog) GetSessionID ¶
func (g *GroupDialog) GetSessionID() string
GetSessionID returns the session ID being renamed
func (*GroupDialog) GetValue ¶
func (g *GroupDialog) GetValue() string
GetValue returns the input value
func (*GroupDialog) HasParent ¶
func (g *GroupDialog) HasParent() bool
HasParent returns true if creating a subgroup under a parent
func (*GroupDialog) IsVisible ¶
func (g *GroupDialog) IsVisible() bool
IsVisible returns whether the dialog is visible
func (*GroupDialog) Mode ¶
func (g *GroupDialog) Mode() GroupDialogMode
Mode returns the current dialog mode
func (*GroupDialog) SetError ¶ added in v0.8.80
func (g *GroupDialog) SetError(msg string)
SetError sets an inline validation error displayed inside the dialog
func (*GroupDialog) SetSize ¶
func (g *GroupDialog) SetSize(width, height int)
SetSize sets the dialog size
func (*GroupDialog) Show ¶
func (g *GroupDialog) Show()
Show shows the dialog in create mode (root level group)
func (*GroupDialog) ShowCreateSubgroup ¶
func (g *GroupDialog) ShowCreateSubgroup(parentPath, parentName string)
ShowCreateSubgroup shows the dialog for creating a subgroup under a parent
func (*GroupDialog) ShowCreateWithContext ¶ added in v0.8.93
func (g *GroupDialog) ShowCreateWithContext(parentPath, parentName string)
ShowCreateWithContext opens the create dialog with cursor context for Tab toggling. If parentPath is non-empty, defaults to subgroup mode with Tab toggle available. If parentPath is empty, opens as root-level group with no toggle.
func (*GroupDialog) ShowCreateWithContextDefaultRoot ¶ added in v0.10.0
func (g *GroupDialog) ShowCreateWithContextDefaultRoot(parentPath, parentName string)
ShowCreateWithContextDefaultRoot opens the create dialog defaulting to root mode, but stores the cursor context so Tab toggle can switch to subgroup mode. Used when the cursor is on a session inside a group (not on the group header itself).
func (*GroupDialog) ShowMove ¶
func (g *GroupDialog) ShowMove(groupPaths []string)
ShowMove shows the dialog for moving a session to a group path.
func (*GroupDialog) ShowRename ¶
func (g *GroupDialog) ShowRename(currentPath, currentName string)
ShowRename shows the dialog in rename mode
func (*GroupDialog) ShowRenameSession ¶
func (g *GroupDialog) ShowRenameSession(sessionID, currentName string)
ShowRenameSession shows the dialog for renaming a session
func (*GroupDialog) ToggleRootSubgroup ¶ added in v0.8.93
func (g *GroupDialog) ToggleRootSubgroup()
ToggleRootSubgroup swaps between root-level and subgroup creation modes.
func (*GroupDialog) Update ¶
func (g *GroupDialog) Update(msg tea.KeyMsg) (*GroupDialog, tea.Cmd)
Update handles input
func (*GroupDialog) Validate ¶
func (g *GroupDialog) Validate() string
Validate checks if the dialog values are valid and returns an error message if not
type GroupDialogMode ¶
type GroupDialogMode int
GroupDialogMode represents the dialog mode
const ( GroupDialogCreate GroupDialogMode = iota GroupDialogRename GroupDialogMove GroupDialogRenameSession )
type HelpOverlay ¶ added in v0.3.0
type HelpOverlay struct {
// contains filtered or unexported fields
}
HelpOverlay shows keyboard shortcuts in a modal
func NewHelpOverlay ¶ added in v0.3.0
func NewHelpOverlay() *HelpOverlay
NewHelpOverlay creates a new help overlay
func (*HelpOverlay) IsVisible ¶ added in v0.3.0
func (h *HelpOverlay) IsVisible() bool
IsVisible returns whether the help overlay is visible
func (*HelpOverlay) SetHotkeys ¶ added in v0.21.0
func (h *HelpOverlay) SetHotkeys(bindings map[string]string)
SetHotkeys updates displayed hotkeys for dynamic help rendering.
func (*HelpOverlay) SetSize ¶ added in v0.3.0
func (h *HelpOverlay) SetSize(width, height int)
SetSize sets the dimensions for centering
func (*HelpOverlay) Show ¶ added in v0.3.0
func (h *HelpOverlay) Show()
Show makes the help overlay visible
func (*HelpOverlay) Update ¶ added in v0.3.0
func (h *HelpOverlay) Update(msg tea.Msg) (*HelpOverlay, tea.Cmd)
Update handles messages for the help overlay
func (*HelpOverlay) View ¶ added in v0.3.0
func (h *HelpOverlay) View() string
View renders the help overlay
type Home ¶
type Home struct {
// contains filtered or unexported fields
}
Home is the main application model
func NewHomeWithProfile ¶ added in v0.3.0
NewHomeWithProfile creates a new home model with the specified profile.
func NewHomeWithProfileAndMode ¶ added in v0.8.74
NewHomeWithProfileAndMode creates a new Home with the specified profile. All instances manage the notification bar equally via shared SQLite state.
func (*Home) SetCostBudget ¶ added in v0.26.4
func (h *Home) SetCostBudget(budget *costs.BudgetChecker)
SetCostBudget sets the budget checker for cost limits.
func (*Home) SetCostPricer ¶ added in v0.26.4
SetCostPricer sets the pricer for cost calculations.
func (*Home) SetCostStore ¶ added in v0.26.4
SetCostStore sets the cost store for cost tracking display.
func (*Home) SetGroupScope ¶ added in v1.3.3
SetGroupScope limits the TUI to sessions within the given group path. The path is normalized: lowercased and spaces replaced with hyphens.
func (*Home) SetInitialSelection ¶ added in v1.7.53
SetInitialSelection queues a session to preselect on first render (#709). The value may be a session ID or a title. Preselection runs AFTER rebuildFlatItems so it respects any active group scope: if the session is outside the scope, applyInitialSelection returns false and the caller may warn. Crucially, SetInitialSelection does NOT hide any groups — every group configured by the user stays visible in the sidebar.
func (*Home) SetWebMenuData ¶ added in v0.19.0
func (h *Home) SetWebMenuData(menuData *web.MemoryMenuData)
SetWebMenuData configures an optional in-memory menu sink for web mode.
func (*Home) Update ¶
Update implements tea.Model. It delegates to updateInner and, when fullRepaint is enabled, appends tea.ClearScreen on KeyMsg and mouse-wheel MouseMsg events to prevent incremental-redraw drift between the tick-based clears (issue #607). Under the default (full_repaint = false) this wrapper is a pass-through — no regression for users who never opt in.
type List ¶
type List struct {
// contains filtered or unexported fields
}
List manages session list display
func (*List) ToggleFolder ¶
ToggleFolder toggles the current folder
type MCPColumn ¶ added in v0.5.3
type MCPColumn int
MCPColumn represents Attached or Available column
type MCPDialog ¶ added in v0.5.3
type MCPDialog struct {
// contains filtered or unexported fields
}
MCPDialog handles MCP management for Claude and Gemini sessions
func NewMCPDialog ¶ added in v0.5.3
func NewMCPDialog() *MCPDialog
NewMCPDialog creates a new MCP management dialog
func (*MCPDialog) Apply ¶ added in v0.5.3
Apply saves the changes to LOCAL (.mcp.json), GLOBAL (Claude/Gemini config), and USER (~/.claude.json)
func (*MCPDialog) GetProjectPath ¶ added in v0.5.3
GetProjectPath returns the project path being managed
func (*MCPDialog) GetSessionID ¶ added in v0.5.4
GetSessionID returns the session ID being managed
func (*MCPDialog) HasChanged ¶ added in v0.5.3
HasChanged returns true if any MCPs were changed (any scope)
func (*MCPDialog) Move ¶ added in v0.5.3
func (m *MCPDialog) Move()
Move moves the selected item between Attached <-> Available
func (*MCPDialog) ScrollDown ¶ added in v0.26.0
func (m *MCPDialog) ScrollDown()
ScrollDown moves the active list cursor down by one (mouse wheel support).
func (*MCPDialog) ScrollUp ¶ added in v0.26.0
func (m *MCPDialog) ScrollUp()
ScrollUp moves the active list cursor up by one (mouse wheel support).
type MCPItem ¶ added in v0.5.3
type MCPItem struct {
Name string
Description string
IsOrphan bool // True if MCP is attached but not in config.toml pool
IsPooled bool // True if this MCP uses socket pool
Transport string // "stdio", "http", or "sse"
HTTPStatus string // For HTTP MCPs: "running", "stopped", "external", etc.
HasServerCfg bool // True if HTTP MCP has [mcps.X.server] config
}
MCPItem represents an MCP in the dialog list
type MaintenanceCompleteMsg ¶ added in v0.8.79
type MaintenanceCompleteMsg struct {
Result session.MaintenanceResult
}
MaintenanceCompleteMsg is the exported type for sending from main.go via p.Send()
type Menu ¶
type Menu struct {
// contains filtered or unexported fields
}
Menu shows bottom menu bar
type NewDialog ¶
type NewDialog struct {
// contains filtered or unexported fields
}
NewDialog represents the new session creation dialog.
func (*NewDialog) ApplyHighlightedModelSuggestion ¶ added in v1.9.14
func (d *NewDialog) ApplyHighlightedModelSuggestion()
func (*NewDialog) ApplyHighlightedSuggestion ¶ added in v1.7.72
func (d *NewDialog) ApplyHighlightedSuggestion()
ApplyHighlightedSuggestion applies the currently highlighted real suggestion to the path input and exits the active dropdown mode (dropdown remains visible). Has no effect on the input when "Type custom" is highlighted — only the active mode is exited.
func (*NewDialog) ClearError ¶ added in v0.8.80
func (d *NewDialog) ClearError()
ClearError clears the inline validation error
func (*NewDialog) DismissModelSuggestions ¶ added in v1.9.14
func (d *NewDialog) DismissModelSuggestions()
func (*NewDialog) DismissSuggestions ¶ added in v1.7.72
func (d *NewDialog) DismissSuggestions()
DismissSuggestions hides the dropdown until the user types in the input or focus changes. Used after Enter so the dropdown disappears even when the form fails to submit due to validation errors.
func (*NewDialog) GetClaudeExtraArgs ¶ added in v1.7.21
GetClaudeExtraArgs returns the user-supplied claude CLI tokens from the options panel. Returns nil for non-claude tools. Tokens are whitespace-split; for values with embedded spaces, use `ad-fork add --extra-arg`.
func (*NewDialog) GetClaudeOptions ¶ added in v0.8.39
func (d *NewDialog) GetClaudeOptions() *session.ClaudeOptions
GetClaudeOptions returns the Claude-specific options (only relevant if command is "claude")
func (*NewDialog) GetClaudeStartQuery ¶ added in v1.7.67
GetClaudeStartQuery returns the user-supplied claude startup query from the options panel (v1.7.67, #725). Returns "" for non-claude tools. The value is a single string — NEVER split on spaces — and is assigned by the caller to Instance.StartupQuery for single-shot emission on the new-session command line.
func (*NewDialog) GetCodexYoloMode ¶ added in v0.10.18
GetCodexYoloMode returns the Codex YOLO mode state
func (*NewDialog) GetLaunchModelID ¶ added in v1.9.14
GetLaunchModelID returns the optional model/version override for supported tools.
func (*NewDialog) GetMultiRepoPaths ¶ added in v0.26.2
GetMultiRepoPaths returns the multi-repo paths and enabled state.
func (*NewDialog) GetParentProjectPath ¶ added in v1.3.1
GetParentProjectPath returns the selected conductor's project path, or "".
func (*NewDialog) GetParentSessionID ¶ added in v1.3.1
GetParentSessionID returns the selected conducting parent session ID, or "" for None.
func (*NewDialog) GetSelectedCommand ¶ added in v0.8.35
GetSelectedCommand returns the currently selected command/tool
func (*NewDialog) GetSelectedGroup ¶
GetSelectedGroup returns the parent group path
func (*NewDialog) GetValuesWithWorktree ¶ added in v0.8.22
func (d *NewDialog) GetValuesWithWorktree() (name, path, command, branch string, worktreeEnabled bool)
GetValuesWithWorktree returns all values including worktree settings
func (*NewDialog) IsBranchPickerOpen ¶ added in v1.3.1
IsBranchPickerOpen returns whether the inline branch result list is visible.
func (*NewDialog) IsGeminiYoloMode ¶ added in v0.8.35
IsGeminiYoloMode returns whether YOLO mode is enabled for Gemini
func (*NewDialog) IsModelSuggestionsActive ¶ added in v1.9.14
func (*NewDialog) IsModelTypeCustomHighlighted ¶ added in v1.9.14
func (*NewDialog) IsMultiRepoEditing ¶ added in v0.26.2
IsMultiRepoEditing returns true when the user is editing a path in the multi-repo list. Used by the parent to prevent enter from submitting the form.
func (*NewDialog) IsRecentPickerOpen ¶ added in v0.20.0
IsRecentPickerOpen returns whether the recent sessions picker is visible.
func (*NewDialog) IsSandboxEnabled ¶ added in v0.19.17
IsSandboxEnabled returns whether Docker sandbox mode is enabled.
func (*NewDialog) IsSuggestionsActive ¶ added in v1.7.72
IsSuggestionsActive returns whether arrow-key focus is inside the path suggestions dropdown. Used by the parent so it can forward keys to the dialog before its own Enter/Esc handlers consume them.
func (*NewDialog) IsTypeCustomHighlighted ¶ added in v1.7.72
IsTypeCustomHighlighted returns true when the synthetic "Type custom" entry is the highlighted item in the active dropdown.
func (*NewDialog) IsWorktreeEnabled ¶ added in v0.8.22
IsWorktreeEnabled returns whether worktree mode is enabled
func (*NewDialog) SetDefaultTool ¶ added in v0.4.3
SetDefaultTool sets the pre-selected command based on tool name Call this before Show/ShowInGroup to apply user's preferred default
func (*NewDialog) SetError ¶ added in v0.8.80
SetError sets an inline validation error displayed inside the dialog
func (*NewDialog) SetPathSuggestions ¶
SetPathSuggestions sets the available path suggestions for autocomplete
func (*NewDialog) SetRecentSessions ¶ added in v0.20.0
func (d *NewDialog) SetRecentSessions(sessions []*statedb.RecentSessionRow)
SetRecentSessions sets the list of recently deleted session configs.
func (*NewDialog) Show ¶
func (d *NewDialog) Show()
Show makes the dialog visible (uses default group)
func (*NewDialog) ShowInGroup ¶
func (d *NewDialog) ShowInGroup(groupPath, groupName, defaultPath string, conductors []*session.Instance, suggestedParentID string)
ShowInGroup shows the dialog with a pre-selected parent group and optional default path. conductors is the list of active conductor sessions available as parent options.
func (*NewDialog) ToggleMultiRepo ¶ added in v0.26.2
func (d *NewDialog) ToggleMultiRepo()
ToggleMultiRepo toggles multi-repo mode. When enabling, initializes multiRepoPaths with the current pathInput value. When disabling, collapses back to the first path.
func (*NewDialog) ToggleSandbox ¶ added in v0.19.17
func (d *NewDialog) ToggleSandbox()
ToggleSandbox toggles Docker sandbox mode.
func (*NewDialog) ToggleWorktree ¶ added in v0.8.22
func (d *NewDialog) ToggleWorktree()
ToggleWorktree toggles the worktree checkbox. When enabling, auto-populates the branch name from the session name.
type OptionsPanel ¶ added in v0.10.18
type OptionsPanel interface {
Focus()
Blur()
IsFocused() bool
AtTop() bool
Update(tea.Msg) tea.Cmd
View() string
}
OptionsPanel is the interface for tool-specific option panels in session dialogs. Implemented by ClaudeOptionsPanel and YoloOptionsPanel.
type PluginDialog ¶ added in v1.9.2
type PluginDialog struct {
// contains filtered or unexported fields
}
func NewPluginDialog ¶ added in v1.9.2
func NewPluginDialog() *PluginDialog
func (*PluginDialog) GetSessionID ¶ added in v1.9.2
func (d *PluginDialog) GetSessionID() string
func (*PluginDialog) HasChanged ¶ added in v1.9.2
func (d *PluginDialog) HasChanged() bool
func (*PluginDialog) Hide ¶ added in v1.9.2
func (d *PluginDialog) Hide()
func (*PluginDialog) IsVisible ¶ added in v1.9.2
func (d *PluginDialog) IsVisible() bool
func (*PluginDialog) SelectedPluginNames ¶ added in v1.9.2
func (d *PluginDialog) SelectedPluginNames() []string
func (*PluginDialog) SetSize ¶ added in v1.9.2
func (d *PluginDialog) SetSize(w, h int)
func (*PluginDialog) Show ¶ added in v1.9.2
func (d *PluginDialog) Show(inst *session.Instance) error
func (*PluginDialog) Update ¶ added in v1.9.2
func (d *PluginDialog) Update(msg tea.KeyMsg) (*PluginDialog, tea.Cmd)
func (*PluginDialog) View ¶ added in v1.9.2
func (d *PluginDialog) View() string
type Preview ¶
type Preview struct {
// contains filtered or unexported fields
}
Preview shows session terminal content
func (*Preview) SetContent ¶
SetContent sets the preview content
type PreviewMode ¶ added in v0.8.61
type PreviewMode int
PreviewMode defines what to show in the preview pane
const ( PreviewModeBoth PreviewMode = iota // Show both analytics and output (default) PreviewModeOutput // Show output only (content preview) PreviewModeAnalytics // Show analytics only )
type Search ¶
type Search struct {
// contains filtered or unexported fields
}
Search represents the search overlay component
func (*Search) Hide ¶
func (s *Search) Hide()
Hide hides the search overlay and clears any group scope.
func (*Search) SetItems ¶
SetItems sets the full list of items to search through. When a group scope has been set via SetScopedGroup, items are filtered to that group before storage so background reloads do not leak out-of-group sessions into a scoped in-group search session.
func (*Search) SetScopedGroup ¶ added in v1.7.60
SetScopedGroup restricts SetItems to a single group path. Pass "" to clear.
func (*Search) Update ¶
Update handles messages for the search overlay Returns the updated Search and any command to execute
func (*Search) WantsSwitchToGlobal ¶ added in v0.5.3
WantsSwitchToGlobal returns true if user pressed Tab to switch to global search
type SessionPickerDialog ¶ added in v0.8.80
type SessionPickerDialog struct {
// contains filtered or unexported fields
}
SessionPickerDialog presents a list of sessions for the user to select from. Used by the "x" (send output) feature to pick a target session.
func NewSessionPickerDialog ¶ added in v0.8.80
func NewSessionPickerDialog() *SessionPickerDialog
NewSessionPickerDialog creates a new session picker dialog.
func (*SessionPickerDialog) GetSelected ¶ added in v0.8.80
func (d *SessionPickerDialog) GetSelected() *session.Instance
GetSelected returns the session at the current cursor position, or nil.
func (*SessionPickerDialog) GetSource ¶ added in v0.8.80
func (d *SessionPickerDialog) GetSource() *session.Instance
GetSource returns the source session.
func (*SessionPickerDialog) Hide ¶ added in v0.8.80
func (d *SessionPickerDialog) Hide()
Hide closes the dialog and resets state.
func (*SessionPickerDialog) IsVisible ¶ added in v0.8.80
func (d *SessionPickerDialog) IsVisible() bool
IsVisible returns whether the dialog is currently shown.
func (*SessionPickerDialog) SetSize ¶ added in v0.8.80
func (d *SessionPickerDialog) SetSize(w, h int)
SetSize updates the dialog dimensions for centering.
func (*SessionPickerDialog) Show ¶ added in v0.8.80
func (d *SessionPickerDialog) Show(source *session.Instance, allInstances []*session.Instance)
Show opens the picker with the source session and all available instances. Filters out the source session and sessions in error status.
func (*SessionPickerDialog) Update ¶ added in v0.8.80
func (d *SessionPickerDialog) Update(msg tea.KeyMsg) (*SessionPickerDialog, tea.Cmd)
Update handles key events for the picker.
func (*SessionPickerDialog) View ¶ added in v0.8.80
func (d *SessionPickerDialog) View() string
View renders the session picker dialog.
type SettingType ¶ added in v0.8.16
type SettingType int
SettingType identifies which setting is being edited
const ( SettingTheme SettingType = iota // Theme must be first (index 0) SettingDefaultTool SettingDangerousMode SettingClaudeConfigDir SettingGeminiYoloMode SettingCodexYoloMode SettingCheckForUpdates SettingAutoUpdate SettingLogMaxSize SettingLogMaxLines SettingRemoveOrphans SettingGlobalSearchEnabled SettingSearchTier SettingRecentDays SettingShowOutput SettingShowAnalytics SettingShowNotes SettingNotesOutputSplit SettingMaintenanceEnabled SettingStatsEnabled SettingStatsRefresh SettingStatsFormat SettingStatsShowCPU SettingStatsShowRAM SettingStatsShowDisk SettingStatsShowNetwork SettingStatsShowGPU SettingStatsShowLoad )
type SettingsPanel ¶ added in v0.8.16
type SettingsPanel struct {
// contains filtered or unexported fields
}
SettingsPanel displays and edits user configuration
func NewSettingsPanel ¶ added in v0.8.16
func NewSettingsPanel() *SettingsPanel
NewSettingsPanel creates a new settings panel
func (*SettingsPanel) GetConfig ¶ added in v0.8.16
func (s *SettingsPanel) GetConfig() *session.UserConfig
GetConfig returns a UserConfig with current panel values
func (*SettingsPanel) Hide ¶ added in v0.8.16
func (s *SettingsPanel) Hide()
Hide hides the settings panel
func (*SettingsPanel) IsVisible ¶ added in v0.8.16
func (s *SettingsPanel) IsVisible() bool
IsVisible returns whether the panel is visible
func (*SettingsPanel) LoadConfig ¶ added in v0.8.16
func (s *SettingsPanel) LoadConfig(config *session.UserConfig)
LoadConfig populates panel values from a UserConfig
func (*SettingsPanel) NeedsRestart ¶ added in v0.8.16
func (s *SettingsPanel) NeedsRestart() bool
NeedsRestart returns true if changes require a restart
func (*SettingsPanel) ScrollDown ¶ added in v0.26.0
func (s *SettingsPanel) ScrollDown()
ScrollDown moves the settings cursor down by one (mouse wheel support).
func (*SettingsPanel) ScrollUp ¶ added in v0.26.0
func (s *SettingsPanel) ScrollUp()
ScrollUp moves the settings cursor up by one (mouse wheel support).
func (*SettingsPanel) SetProfile ¶ added in v0.19.1
func (s *SettingsPanel) SetProfile(profile string)
SetProfile sets the active profile for profile-aware settings.
func (*SettingsPanel) SetSize ¶ added in v0.8.16
func (s *SettingsPanel) SetSize(width, height int)
SetSize sets the panel dimensions
func (*SettingsPanel) Show ¶ added in v0.8.16
func (s *SettingsPanel) Show()
Show displays the settings panel and loads current config
func (*SettingsPanel) Update ¶ added in v0.8.16
func (s *SettingsPanel) Update(msg tea.KeyMsg) (*SettingsPanel, tea.Cmd, bool)
Update handles input and returns (panel, cmd, valueChanged)
func (*SettingsPanel) View ¶ added in v0.8.16
func (s *SettingsPanel) View() string
View renders the settings panel
type SetupWizard ¶ added in v0.8.16
type SetupWizard struct {
// contains filtered or unexported fields
}
SetupWizard represents the first-time setup wizard dialog It guides users through initial configuration when config.toml doesn't exist
func NewSetupWizard ¶ added in v0.8.16
func NewSetupWizard() *SetupWizard
NewSetupWizard creates a new setup wizard
func (*SetupWizard) GetConfig ¶ added in v0.8.16
func (w *SetupWizard) GetConfig() *session.UserConfig
GetConfig returns the user configuration based on wizard selections
func (*SetupWizard) IsComplete ¶ added in v0.8.16
func (w *SetupWizard) IsComplete() bool
IsComplete returns whether the wizard has been completed
func (*SetupWizard) IsVisible ¶ added in v0.8.16
func (w *SetupWizard) IsVisible() bool
IsVisible returns whether the wizard is visible
func (*SetupWizard) SetSize ¶ added in v0.8.16
func (w *SetupWizard) SetSize(width, height int)
SetSize updates the wizard dimensions
func (*SetupWizard) Show ¶ added in v0.8.16
func (w *SetupWizard) Show()
Show makes the wizard visible
func (*SetupWizard) Update ¶ added in v0.8.16
func (w *SetupWizard) Update(msg tea.Msg) (*SetupWizard, tea.Cmd)
Update handles key events for the wizard
func (*SetupWizard) View ¶ added in v0.8.16
func (w *SetupWizard) View() string
View renders the wizard dialog
type SkillColumn ¶ added in v0.19.1
type SkillColumn int
SkillColumn identifies the focused column.
const ( SkillColumnAttached SkillColumn = iota SkillColumnAvailable )
type SkillDialog ¶ added in v0.19.1
type SkillDialog struct {
// contains filtered or unexported fields
}
SkillDialog manages project-scoped skills.
func NewSkillDialog ¶ added in v0.19.1
func NewSkillDialog() *SkillDialog
NewSkillDialog creates a skill manager dialog instance.
func (*SkillDialog) Apply ¶ added in v0.19.1
func (d *SkillDialog) Apply() error
Apply saves project skills according to attached column state.
func (*SkillDialog) GetError ¶ added in v0.19.1
func (d *SkillDialog) GetError() error
GetError returns the latest apply error.
func (*SkillDialog) GetSessionID ¶ added in v0.19.1
func (d *SkillDialog) GetSessionID() string
GetSessionID returns the managed session ID.
func (*SkillDialog) HasChanged ¶ added in v0.19.1
func (d *SkillDialog) HasChanged() bool
HasChanged indicates whether user moved any item.
func (*SkillDialog) IsVisible ¶ added in v0.19.1
func (d *SkillDialog) IsVisible() bool
IsVisible returns whether dialog is shown.
func (*SkillDialog) Move ¶ added in v0.19.1
func (d *SkillDialog) Move()
Move toggles one item between attached and available lists.
func (*SkillDialog) NeedsApply ¶ added in v1.7.32
func (d *SkillDialog) NeedsApply() bool
NeedsApply reports whether Apply should run due to user changes or runtime reconciliation.
func (*SkillDialog) SetSize ¶ added in v0.19.1
func (d *SkillDialog) SetSize(width, height int)
SetSize updates dialog dimensions.
func (*SkillDialog) Show ¶ added in v0.19.1
func (d *SkillDialog) Show(projectPath, sessionID, tool string) error
Show opens the dialog for a specific project/session.
func (*SkillDialog) Update ¶ added in v0.19.1
func (d *SkillDialog) Update(msg tea.KeyMsg) (*SkillDialog, tea.Cmd)
Update handles keyboard input while dialog is visible.
func (*SkillDialog) View ¶ added in v0.19.1
func (d *SkillDialog) View() string
View renders the dialog body.
type SkillDialogItem ¶ added in v0.19.1
type SkillDialogItem struct {
Candidate session.SkillCandidate
}
SkillDialogItem wraps one discovered skill.
type StorageWatcher ¶ added in v0.6.1
type StorageWatcher struct {
// contains filtered or unexported fields
}
StorageWatcher monitors the SQLite database for external changes by polling the metadata.last_modified timestamp. Replaces the previous fsnotify-based watcher which had reliability issues on certain filesystems (9p, NFS, WSL).
func NewStorageWatcher ¶ added in v0.6.1
func NewStorageWatcher(db *statedb.StateDB) (*StorageWatcher, error)
NewStorageWatcher creates a watcher that polls the SQLite metadata for changes.
func (*StorageWatcher) Close ¶ added in v0.6.1
func (sw *StorageWatcher) Close() error
Close stops the watcher and releases resources. Safe to call multiple times.
func (*StorageWatcher) NotifySave ¶ added in v0.7.0
func (sw *StorageWatcher) NotifySave()
NotifySave should be called by the TUI right before it saves to storage. This marks the current time so the watcher can ignore the resulting change.
func (*StorageWatcher) ReloadChannel ¶ added in v0.6.1
func (sw *StorageWatcher) ReloadChannel() <-chan struct{}
ReloadChannel returns the channel that signals when reload is needed.
func (*StorageWatcher) Start ¶ added in v0.6.1
func (sw *StorageWatcher) Start()
Start begins polling for changes (non-blocking).
func (*StorageWatcher) TriggerReload ¶ added in v0.10.15
func (sw *StorageWatcher) TriggerReload()
TriggerReload sends a reload signal. Used as a manual trigger for reload (e.g., after CLI command changes).
func (*StorageWatcher) Warning ¶ added in v0.10.15
func (sw *StorageWatcher) Warning() string
Warning returns empty string. SQLite polling works on all filesystems.
type Theme ¶ added in v0.8.16
type Theme string
Theme represents the current color scheme
func GetCurrentTheme ¶ added in v0.8.16
func GetCurrentTheme() Theme
GetCurrentTheme returns the active theme
type ThemeWatcher ¶ added in v0.15.0
type ThemeWatcher struct {
// contains filtered or unexported fields
}
ThemeWatcher monitors OS dark mode changes and signals the UI to update. Follows the same pattern as StorageWatcher: goroutine + buffered channel + Close().
func NewThemeWatcher ¶ added in v0.15.0
func NewThemeWatcher(parentCtx context.Context) *ThemeWatcher
NewThemeWatcher creates and starts a theme watcher. Returns nil if WatchDarkMode fails (caller should fall back gracefully).
func (*ThemeWatcher) ChangeChannel ¶ added in v0.15.0
func (tw *ThemeWatcher) ChangeChannel() <-chan bool
ChangeChannel returns the channel that receives dark mode changes.
func (*ThemeWatcher) Close ¶ added in v0.15.0
func (tw *ThemeWatcher) Close()
Close stops the watcher goroutine. Safe to call multiple times.
type Tree ¶
type Tree struct {
// contains filtered or unexported fields
}
Tree manages folder structure
func (*Tree) GetFolder ¶
func (t *Tree) GetFolder(name string) *TreeFolder
GetFolder returns a folder by name
func (*Tree) GetFolders ¶
GetFolders returns all folder names in order
func (*Tree) IsFolderExpanded ¶
IsFolderExpanded returns whether a folder is expanded
func (*Tree) SetFolderCount ¶
SetFolderCount sets the session count for a folder
func (*Tree) ToggleFolder ¶
ToggleFolder toggles folder expansion
type TreeFolder ¶
TreeFolder represents a folder in the tree
type WatcherActionMsg ¶ added in v1.5.1
type WatcherActionMsg struct {
Action string // "start", "stop", "test"
WatcherID string
WatcherName string
}
WatcherActionMsg is the tea.Msg returned when the user triggers a quick action.
type WatcherDisplayItem ¶ added in v1.5.1
type WatcherDisplayItem struct {
ID string
Name string
Type string
Status string // "running", "stopped"
HealthStatus string // "healthy", "warning", "error", "stopped"
EventsPerHour float64
Conductor string
}
WatcherDisplayItem is a watcher entry suitable for TUI list rendering.
type WatcherEventDisplay ¶ added in v1.5.1
type WatcherEventDisplay struct {
Timestamp time.Time
Sender string
Subject string
RoutedTo string
SessionID string
}
WatcherEventDisplay is an event row suitable for TUI detail rendering.
type WatcherPanel ¶ added in v1.5.1
type WatcherPanel struct {
// contains filtered or unexported fields
}
WatcherPanel is an overlay panel that shows watcher list and detail views. It follows the same pattern as SettingsPanel: Show/Hide/IsVisible/SetSize/Update/View.
func NewWatcherPanel ¶ added in v1.5.1
func NewWatcherPanel() *WatcherPanel
NewWatcherPanel creates a new WatcherPanel.
func (*WatcherPanel) IsVisible ¶ added in v1.5.1
func (wp *WatcherPanel) IsVisible() bool
IsVisible returns whether the panel is currently shown.
func (*WatcherPanel) SelectedWatcher ¶ added in v1.5.1
func (wp *WatcherPanel) SelectedWatcher() *WatcherDisplayItem
SelectedWatcher returns the currently highlighted watcher or nil when the list is empty.
func (*WatcherPanel) SetEvents ¶ added in v1.5.1
func (wp *WatcherPanel) SetEvents(events []WatcherEventDisplay)
SetEvents replaces the event list shown in detail view.
func (*WatcherPanel) SetSize ¶ added in v1.5.1
func (wp *WatcherPanel) SetSize(w, h int)
SetSize sets the terminal dimensions used for rendering.
func (*WatcherPanel) SetWatchers ¶ added in v1.5.1
func (wp *WatcherPanel) SetWatchers(items []WatcherDisplayItem)
SetWatchers replaces the displayed watcher list.
func (*WatcherPanel) Show ¶ added in v1.5.1
func (wp *WatcherPanel) Show()
Show makes the panel visible and resets navigation state.
func (*WatcherPanel) Update ¶ added in v1.5.1
func (wp *WatcherPanel) Update(msg tea.Msg) (*WatcherPanel, tea.Cmd)
Update processes keyboard input for the watcher panel. Returns the updated panel, an optional tea.Cmd, and (for forward compatibility) true.
func (*WatcherPanel) View ¶ added in v1.5.1
func (wp *WatcherPanel) View() string
View renders the panel as an overlay string. Returns empty string when not visible.
type WebMutator ¶ added in v1.3.4
type WebMutator struct {
// contains filtered or unexported fields
}
WebMutator bridges the web HTTP handlers to the TUI session/group management methods. It wraps the Home model and implements web.SessionMutator.
The undoStack/undoWindow fields support the web's Chrome-style undo of deletes (POST /api/sessions/undelete). The TUI maintains its own in-memory stack in Home; the web stack is kept here so that web deletes/undos don't race with the Tea Update goroutine.
func NewWebMutator ¶ added in v1.3.4
func NewWebMutator(h *Home) *WebMutator
NewWebMutator returns a WebMutator backed by the given Home. The undo window defaults to web.DefaultUndoWindow (30s).
func (*WebMutator) CloseSession ¶ added in v1.9.26
func (m *WebMutator) CloseSession(id string) error
CloseSession stops the session process but keeps its metadata in storage. Mirrors the TUI's Shift+D handler (internal/ui/home.go closeSession). Identical to StopSession at the session.Instance level — both call Kill() — but is kept distinct so the parity matrix and the front-end can express the user-visible intent ("close, but don't delete").
func (*WebMutator) CreateGroup ¶ added in v1.3.4
func (m *WebMutator) CreateGroup(name, parentPath string) (string, error)
CreateGroup creates a new group (or subgroup if parentPath is non-empty) and persists the group tree to storage.
func (*WebMutator) CreateSession ¶ added in v1.3.4
func (m *WebMutator) CreateSession(title, tool, projectPath, groupPath, modelID string) (string, error)
CreateSession creates and starts a new session, persisting it to storage.
func (*WebMutator) DeleteGroup ¶ added in v1.3.4
func (m *WebMutator) DeleteGroup(groupPath string) error
DeleteGroup deletes a group (and its subgroups), moving sessions to the default group. Returns an error if groupPath is the default group.
func (*WebMutator) DeleteSession ¶ added in v1.3.4
func (m *WebMutator) DeleteSession(id string) error
DeleteSession kills a session and removes it from persistent storage. Before removal, the instance is pushed onto the web undo stack so a subsequent UndoDelete (POST /api/sessions/undelete) can restore it.
func (*WebMutator) FinishWorktree ¶ added in v1.9.30
func (m *WebMutator) FinishWorktree(id string, opts web.WorktreeFinishOptions) (web.WorktreeFinishResult, error)
FinishWorktree merges (or skips), removes the worktree, optionally deletes the source branch, kills the tmux session, and removes the session from storage. Mirrors `agent-deck worktree finish` (see cmd/agent-deck/worktree_cmd.go handleWorktreeFinish) — the orchestration is duplicated rather than refactored to keep the fix minimally invasive (issue #1126).
func (*WebMutator) ForkSession ¶ added in v1.3.4
func (m *WebMutator) ForkSession(id string) (string, error)
ForkSession forks an existing session using the proper Claude resume command. It uses CreateForkedInstanceWithOptions which builds "claude --resume <session-id>" via buildClaudeForkCommandForTarget, ensuring the fork resumes the parent conversation.
func (*WebMutator) RenameGroup ¶ added in v1.3.4
func (m *WebMutator) RenameGroup(groupPath, newName string) error
RenameGroup renames a group identified by groupPath to newName and persists.
func (*WebMutator) RestartSession ¶ added in v1.3.4
func (m *WebMutator) RestartSession(id string) error
RestartSession restarts a session by ID.
func (*WebMutator) StartSession ¶ added in v1.3.4
func (m *WebMutator) StartSession(id string) error
StartSession starts a stopped/idle session by ID.
func (*WebMutator) StopSession ¶ added in v1.3.4
func (m *WebMutator) StopSession(id string) error
StopSession kills (stops) a running session by ID.
func (*WebMutator) UndoDelete ¶ added in v1.9.26
func (m *WebMutator) UndoDelete() (string, error)
UndoDelete restores the most-recently deleted session if its delete timestamp is within the configured undo window. Returns the restored session id. Returns web.ErrUndoNothing if the stack is empty, or web.ErrUndoExpired if the most recent entry is older than the window.
func (*WebMutator) WithUndoWindow ¶ added in v1.9.26
func (m *WebMutator) WithUndoWindow(d time.Duration) *WebMutator
WithUndoWindow overrides the undo grace period (useful for tests that need to force expiry without sleeping).
type WorktreeFinishDialog ¶ added in v0.14.0
type WorktreeFinishDialog struct {
// contains filtered or unexported fields
}
WorktreeFinishDialog handles the two-step worktree finish flow: Step 0: Configure options (merge toggle, target branch, keep branch) Step 1: Confirm the destructive actions
func NewWorktreeFinishDialog ¶ added in v0.14.0
func NewWorktreeFinishDialog() *WorktreeFinishDialog
NewWorktreeFinishDialog creates a new worktree finish dialog
func (*WorktreeFinishDialog) GetOptions ¶ added in v0.14.0
func (d *WorktreeFinishDialog) GetOptions() (mergeEnabled bool, targetBranch string, keepBranch bool)
GetOptions returns the current dialog options
func (*WorktreeFinishDialog) GetSessionID ¶ added in v0.14.0
func (d *WorktreeFinishDialog) GetSessionID() string
GetSessionID returns the session ID this dialog is for
func (*WorktreeFinishDialog) HandleKey ¶ added in v0.14.0
func (d *WorktreeFinishDialog) HandleKey(key string) (action string)
HandleKey processes a key event and returns the action to take. Returns: action string ("close", "confirm", ""), and whether the dialog handled the key.
func (*WorktreeFinishDialog) Hide ¶ added in v0.14.0
func (d *WorktreeFinishDialog) Hide()
Hide hides the dialog and resets state
func (*WorktreeFinishDialog) IsVisible ¶ added in v0.14.0
func (d *WorktreeFinishDialog) IsVisible() bool
IsVisible returns whether the dialog is visible
func (*WorktreeFinishDialog) SetDirtyStatus ¶ added in v0.14.0
func (d *WorktreeFinishDialog) SetDirtyStatus(isDirty bool)
SetDirtyStatus updates the dirty check result
func (*WorktreeFinishDialog) SetError ¶ added in v0.14.0
func (d *WorktreeFinishDialog) SetError(msg string)
SetError sets an error message on the dialog
func (*WorktreeFinishDialog) SetExecuting ¶ added in v0.14.0
func (d *WorktreeFinishDialog) SetExecuting(executing bool)
SetExecuting sets the executing state
func (*WorktreeFinishDialog) SetSize ¶ added in v0.14.0
func (d *WorktreeFinishDialog) SetSize(width, height int)
SetSize sets the dialog dimensions for centering
func (*WorktreeFinishDialog) Show ¶ added in v0.14.0
func (d *WorktreeFinishDialog) Show(sessionID, sessionTitle, branchName, repoRoot, worktreePath, defaultBranch string)
Show displays the dialog for the given worktree session
func (*WorktreeFinishDialog) UpdateTargetInput ¶ added in v0.14.0
func (d *WorktreeFinishDialog) UpdateTargetInput(msg interface{})
UpdateTargetInput updates the target branch text input with a message
func (*WorktreeFinishDialog) View ¶ added in v0.14.0
func (d *WorktreeFinishDialog) View() string
View renders the dialog
type YoloOptionsPanel ¶ added in v0.10.18
type YoloOptionsPanel struct {
// contains filtered or unexported fields
}
YoloOptionsPanel is a UI panel for YOLO/dangerous mode options. Used for Gemini and Codex in NewDialog, matching ClaudeOptionsPanel's visual style.
func NewYoloOptionsPanel ¶ added in v0.10.18
func NewYoloOptionsPanel(toolName, label string) *YoloOptionsPanel
NewYoloOptionsPanel creates a new options panel for a tool with a single YOLO checkbox.
func (*YoloOptionsPanel) AtTop ¶ added in v0.10.18
func (p *YoloOptionsPanel) AtTop() bool
AtTop returns true (single element, always at top).
func (*YoloOptionsPanel) Blur ¶ added in v0.10.18
func (p *YoloOptionsPanel) Blur()
Blur removes focus from this panel.
func (*YoloOptionsPanel) Focus ¶ added in v0.10.18
func (p *YoloOptionsPanel) Focus()
Focus sets focus to this panel.
func (*YoloOptionsPanel) GetYoloMode ¶ added in v0.10.18
func (p *YoloOptionsPanel) GetYoloMode() bool
GetYoloMode returns the current YOLO mode state.
func (*YoloOptionsPanel) IsFocused ¶ added in v0.10.18
func (p *YoloOptionsPanel) IsFocused() bool
IsFocused returns true if the panel has focus.
func (*YoloOptionsPanel) SetDefaults ¶ added in v0.10.18
func (p *YoloOptionsPanel) SetDefaults(yoloMode bool)
SetDefaults applies default value from config.
func (*YoloOptionsPanel) Update ¶ added in v0.10.18
func (p *YoloOptionsPanel) Update(msg tea.Msg) tea.Cmd
Update handles key events.
func (*YoloOptionsPanel) View ¶ added in v0.10.18
func (p *YoloOptionsPanel) View() string
View renders the options panel matching ClaudeOptionsPanel's visual style.
type ZoxidePicker ¶ added in v1.7.52
type ZoxidePicker struct {
// contains filtered or unexported fields
}
ZoxidePicker is a minimal overlay that fuzzy-matches directories via zoxide and returns the selected path for quick session creation.
func NewZoxidePicker ¶ added in v1.7.52
func NewZoxidePicker() *ZoxidePicker
NewZoxidePicker constructs a picker wired to the real zoxide binary.
func (*ZoxidePicker) IsVisible ¶ added in v1.7.52
func (z *ZoxidePicker) IsVisible() bool
IsVisible reports whether the picker is currently shown.
func (*ZoxidePicker) Selected ¶ added in v1.7.52
func (z *ZoxidePicker) Selected() string
Selected returns the highlighted path, or empty if nothing is selectable.
func (*ZoxidePicker) SetSize ¶ added in v1.7.52
func (z *ZoxidePicker) SetSize(width, height int)
SetSize updates the dialog viewport for centering.
func (*ZoxidePicker) Show ¶ added in v1.7.52
func (z *ZoxidePicker) Show()
Show opens the picker. If zoxide is missing the picker still renders but displays an install hint and disables selection.
func (*ZoxidePicker) Update ¶ added in v1.7.52
func (z *ZoxidePicker) Update(msg tea.KeyMsg) (*ZoxidePicker, tea.Cmd)
Update processes a key event and refreshes results when the query changes.
func (*ZoxidePicker) View ¶ added in v1.7.52
func (z *ZoxidePicker) View() string
View renders the overlay, centered in the viewport.
Source Files
¶
- analytics_panel.go
- branch_picker.go
- cellwidth.go
- claudeoptions.go
- confirm_dialog.go
- cost_dashboard.go
- edit_session_dialog.go
- editpaths_dialog.go
- feedback_dialog.go
- forkdialog.go
- gemini_model_dialog.go
- global_search.go
- group_dialog.go
- group_nav.go
- help.go
- home.go
- hotkeys.go
- insert_errors.go
- insert_keysender.go
- insert_mode.go
- jump.go
- keyboard_compat.go
- keyboard_compat_poll_posix.go
- list.go
- mcp_dialog.go
- menu.go
- newdialog.go
- options_panel.go
- plugin_dialog.go
- preview.go
- preview_copy.go
- search.go
- session_picker_dialog.go
- settings_panel.go
- setup_wizard.go
- skill_dialog.go
- split_config.go
- storage_watcher.go
- styles.go
- textinput_pathdelete.go
- theme_watcher.go
- transition_tracker.go
- tree.go
- update_nudge.go
- watcher_panel.go
- web_mutator.go
- worktree_finish_dialog.go
- yolooptions.go
- zoxide_picker.go