Documentation
¶
Overview ¶
Package app implements the root Bubble Tea application model, orchestrating plugins, modals, project switching, themes, and global keyboard bindings.
Index ¶
- Variables
- func CheckCurrentWorktree(workDir string) (exists bool, mainPath string)
- func FocusPlugin(pluginID string) tea.Cmd
- func GetAllRelatedPaths(workDir string) []string
- func GetMainWorktreePath(workDir string) string
- func GetRepoName(workDir string) string
- func IntroTick() tea.Cmd
- func PluginFocused() tea.Cmd
- func Refresh() tea.Cmd
- func ReportError(err error) tea.Cmd
- func SwitchToMainWorktree(mainPath string) tea.Cmd
- func SwitchWorktree(path string) tea.Cmd
- func Tick(d time.Duration, tag string) tea.Cmd
- func WorktreeExists(worktreePath string) bool
- func WorktreeNameForPath(workDir, targetPath string) string
- type ChangelogLoadedMsg
- type EditorReturnedMsg
- type ErrorMsg
- type FocusPluginByIDMsg
- type IntroLetter
- type IntroModel
- type IntroTickMsg
- type IssuePreviewData
- type IssuePreviewResultMsg
- type IssueSearchResult
- type IssueSearchResultMsg
- type ModalKind
- type Model
- func (m Model) ActivePlugin() plugin.Plugin
- func (m *Model) ClearToast()
- func (m *Model) FocusPluginByID(id string) tea.Cmd
- func (m Model) Init() tea.Cmd
- func (m *Model) NextPlugin() tea.Cmd
- func (m *Model) PrevPlugin() tea.Cmd
- func (m *Model) SetActivePlugin(idx int) tea.Cmd
- func (m *Model) ShowToast(msg string, duration time.Duration)
- func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)
- func (m Model) View() string
- type OpenFullIssueMsg
- type PluginFocusedMsg
- type RGB
- type RefreshMsg
- type SwitchToMainWorktreeMsg
- type SwitchWorktreeMsg
- type TabBounds
- type TaggedTickMsg
- type TickMsg
- type ToastMsg
- type UIState
- type UpdateElapsedTickMsg
- type UpdateErrorMsg
- type UpdateInstallDoneMsg
- type UpdateModalState
- type UpdatePhase
- type UpdatePhaseChangeMsg
- type UpdatePrereqsPassedMsg
- type UpdateSpinnerTickMsg
- type UpdateSuccessMsg
- type WorktreeDeletedMsg
- type WorktreeInfo
Constants ¶
This section is empty.
Variables ¶
var ShowToast = msg.ShowToast
ShowToast is re-exported from msg package for backward compatibility.
Functions ¶
func CheckCurrentWorktree ¶
CheckCurrentWorktree checks if the current working directory is still a valid worktree. Returns (exists, mainPath) where mainPath is the path to switch to if worktree was deleted.
func FocusPlugin ¶
FocusPlugin returns a command that requests focusing a plugin by ID.
func GetAllRelatedPaths ¶
GetAllRelatedPaths returns all paths that share the same git repository: the main worktree and all linked worktrees. Each path is absolute. Returns nil if workDir is not in a git repository.
func GetMainWorktreePath ¶
GetMainWorktreePath returns the path to the main worktree for the repository. Returns empty string if not in a git repo or no main worktree found.
func GetRepoName ¶
GetRepoName returns the git repository name for the given directory. It tries to extract the name from the remote URL first, falling back to the directory name if no remote is configured. Returns empty string if the directory is not a git repository.
func PluginFocused ¶
PluginFocused returns a command that sends PluginFocusedMsg.
func ReportError ¶
ReportError returns a command to report an error.
func SwitchToMainWorktree ¶
SwitchToMainWorktree returns a command that requests switching to the main worktree.
func SwitchWorktree ¶
SwitchWorktree returns a command that requests switching to a worktree by path.
func WorktreeExists ¶
WorktreeExists checks if the given worktree path still exists and is valid. Returns false if the directory doesn't exist or is not a valid git worktree.
func WorktreeNameForPath ¶
WorktreeNameForPath returns the worktree name for a given absolute path. Returns empty string if the path is the main worktree or not found.
Types ¶
type ChangelogLoadedMsg ¶
ChangelogLoadedMsg signals that changelog content has been loaded.
type EditorReturnedMsg ¶
type EditorReturnedMsg struct {
Err error
}
EditorReturnedMsg signals that an external editor process has exited. Used to restore terminal state (mouse support) after returning from vim/etc.
type FocusPluginByIDMsg ¶
type FocusPluginByIDMsg struct {
PluginID string
}
FocusPluginByIDMsg requests focusing a specific plugin by ID. Used for cross-plugin navigation (e.g., opening file in file browser from git).
type IntroLetter ¶
type IntroModel ¶
type IntroModel struct {
Active bool
StartTime time.Time
Letters []*IntroLetter
Done bool // Set to true when animation is finished
// Repo name fade-in (starts after logo animation completes)
RepoName string
RepoOpacity float64 // 0.0 to 1.0
RepoFadeStart time.Time // When the fade began
}
IntroModel handles the intro animation state.
func NewIntroModel ¶
func NewIntroModel(repoName string) IntroModel
func (IntroModel) RepoNameView ¶
func (m IntroModel) RepoNameView() string
RepoNameView returns the repo name with current fade opacity applied. Returns empty string if no repo name or opacity is 0.
func (*IntroModel) Update ¶
func (m *IntroModel) Update(dt time.Duration)
Update progresses the animation
func (IntroModel) View ¶
func (m IntroModel) View() string
type IssuePreviewData ¶
type IssuePreviewData struct {
ID string `json:"id"`
Title string `json:"title"`
Status string `json:"status"`
Type string `json:"type"`
Priority string `json:"priority"`
Points int `json:"points"`
Description string `json:"description"`
ParentID string `json:"parent_id"`
Labels []string `json:"labels"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
IssuePreviewData holds lightweight issue data fetched via CLI.
type IssuePreviewResultMsg ¶
type IssuePreviewResultMsg struct {
Data *IssuePreviewData
Error error
}
IssuePreviewResultMsg carries fetched issue data back to the app.
type IssueSearchResult ¶
type IssueSearchResult struct {
ID string `json:"id"`
Title string `json:"title"`
Status string `json:"status"`
Type string `json:"type"`
Priority string `json:"priority"`
}
IssueSearchResult holds a single search result from td search.
type IssueSearchResultMsg ¶
type IssueSearchResultMsg struct {
Query string
Results []IssueSearchResult
Error error
}
IssueSearchResultMsg carries search results back to the app.
type ModalKind ¶
type ModalKind int
ModalKind identifies an app-level modal with explicit priority ordering. Lower values = higher priority (checked first for rendering and input routing).
const ( ModalNone ModalKind = iota // No modal open ModalPalette // Command palette (highest priority) ModalHelp // Help overlay ModalUpdate // Update modal ModalDiagnostics // Diagnostics/version info ModalQuitConfirm // Quit confirmation dialog ModalProjectSwitcher // Project switcher ModalWorktreeSwitcher // Worktree switcher ModalThemeSwitcher // Theme switcher ModalIssueInput // Issue ID text input ModalIssuePreview // Issue preview display (lowest priority) )
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Model is the root Bubble Tea model for the sidecar application.
func New ¶
func New(reg *plugin.Registry, km *keymap.Registry, cfg *config.Config, currentVersion, workDir, projectRoot, initialPluginID string) Model
New creates a new application model. initialPluginID optionally specifies which plugin to focus on startup (empty = first plugin).
func (Model) ActivePlugin ¶
ActivePlugin returns the currently active plugin.
func (*Model) ClearToast ¶
func (m *Model) ClearToast()
ClearToast clears any expired toast message.
func (*Model) FocusPluginByID ¶
FocusPluginByID switches to a plugin by its ID.
func (*Model) NextPlugin ¶
NextPlugin switches to the next plugin.
func (*Model) PrevPlugin ¶
PrevPlugin switches to the previous plugin.
func (*Model) SetActivePlugin ¶
SetActivePlugin sets the active plugin by index and returns a command to notify the plugin it has been focused.
type OpenFullIssueMsg ¶
type OpenFullIssueMsg struct {
IssueID string
}
OpenFullIssueMsg is broadcast to plugins to open the full rich issue view. Currently handled by the TD monitor plugin via monitor.OpenIssueByIDMsg.
type PluginFocusedMsg ¶
type PluginFocusedMsg = plugin.PluginFocusedMsg
PluginFocusedMsg is sent to a plugin when it becomes the active plugin. Plugins can use this to refresh data or update their state on focus. Re-exported from plugin package for backward compatibility.
type SwitchToMainWorktreeMsg ¶
type SwitchToMainWorktreeMsg struct {
MainWorktreePath string // Path to the main worktree to switch to
}
SwitchToMainWorktreeMsg requests switching to the main worktree. Sent when the current WorkDir (a worktree) has been deleted and sidecar should gracefully switch to the main repository.
type SwitchWorktreeMsg ¶
type SwitchWorktreeMsg struct {
WorktreePath string // Absolute path to the worktree
}
SwitchWorktreeMsg requests switching to a different worktree. Used by the worktree switcher modal and workspace plugin "Open in Git Tab" command.
type TabBounds ¶
type TabBounds struct {
Start, End int
}
TabBounds represents the X position range of a tab for mouse hit testing.
type TaggedTickMsg ¶
TaggedTickMsg is a tick with an identifying tag.
type UIState ¶
type UIState struct {
Clock time.Time
LastRefresh time.Time
ToastMessage string
ToastExpiry time.Time
WorkDir string
ProjectRoot string // Main repo root for shared state (same as WorkDir for non-worktrees)
}
UIState holds header/footer state information.
func (*UIState) ClearExpiredToast ¶
func (u *UIState) ClearExpiredToast()
ClearExpiredToast clears toast if it has expired.
func (*UIState) MarkRefresh ¶
func (u *UIState) MarkRefresh()
MarkRefresh updates the last refresh timestamp.
func (*UIState) UpdateClock ¶
func (u *UIState) UpdateClock()
UpdateClock updates the current clock time.
type UpdateElapsedTickMsg ¶
type UpdateElapsedTickMsg struct{}
UpdateElapsedTickMsg triggers elapsed time update during update.
type UpdateErrorMsg ¶
UpdateErrorMsg signals that an update failed.
type UpdateInstallDoneMsg ¶
type UpdateInstallDoneMsg struct {
SidecarUpdated bool
TdUpdated bool
NewSidecarVersion string
NewTdVersion string
}
UpdateInstallDoneMsg signals install completed, triggers verify phase.
type UpdateModalState ¶
type UpdateModalState int
UpdateModalState represents the current state of the update modal.
const ( UpdateModalClosed UpdateModalState = iota // Modal not visible UpdateModalPreview // Show release notes before update UpdateModalProgress // Show multi-phase progress during update UpdateModalComplete // Show completion message UpdateModalError // Show error details )
type UpdatePhase ¶
type UpdatePhase int
UpdatePhase represents a phase of the update process.
const ( PhaseCheckPrereqs UpdatePhase = iota // Checking prerequisites (go installed) PhaseInstalling // Installing via go install PhaseVerifying // Verifying installation )
func (UpdatePhase) String ¶
func (p UpdatePhase) String() string
String returns the display name for an update phase.
func (UpdatePhase) StringForMethod ¶
func (p UpdatePhase) StringForMethod(method string) string
StringForMethod returns the display name for an update phase, customized for the install method.
type UpdatePhaseChangeMsg ¶
type UpdatePhaseChangeMsg struct {
Phase UpdatePhase
Status string // "pending", "running", "done", "error"
}
UpdatePhaseChangeMsg signals a change in update phase status.
type UpdatePrereqsPassedMsg ¶
type UpdatePrereqsPassedMsg struct{}
UpdatePrereqsPassedMsg signals prerequisites check passed, triggers install phase.
type UpdateSpinnerTickMsg ¶
type UpdateSpinnerTickMsg struct{}
UpdateSpinnerTickMsg triggers spinner animation during update.
type UpdateSuccessMsg ¶
type UpdateSuccessMsg struct {
SidecarUpdated bool
TdUpdated bool
NewSidecarVersion string
NewTdVersion string
}
UpdateSuccessMsg signals that an update completed successfully.
type WorktreeDeletedMsg ¶
type WorktreeDeletedMsg struct {
DeletedPath string // Path of the deleted worktree
MainPath string // Path to switch to (main worktree)
}
WorktreeDeletedMsg is sent when the current worktree has been deleted.
type WorktreeInfo ¶
type WorktreeInfo struct {
Path string // Absolute path to the worktree
Branch string // Branch name (e.g., "feature-auth")
IsMain bool // True if this is the main worktree
}
WorktreeInfo contains information about a git worktree.
func GetWorktrees ¶
func GetWorktrees(workDir string) []WorktreeInfo
GetWorktrees returns all worktrees for the repository containing workDir. Returns nil if workDir is not in a git repository.