Documentation
¶
Overview ¶
Package ui provides the terminal user interface for beads_viewer. This file implements the BackgroundWorker for off-thread data processing.
Package ui provides the history view for displaying bead-to-commit correlations.
Package ui provides the terminal user interface for beads_viewer. This file implements the DataSnapshot type for thread-safe UI rendering.
tree.go - Hierarchical tree view for epic/task/subtask relationships (bv-gllx)
Index ¶
- Constants
- Variables
- func BuildHybridMetricsCmd(issues []model.Issue) tea.Cmd
- func BuildSemanticIndexCmd(issues []model.Issue) tea.Cmd
- func CheckAgentFileCmd(workDir string) tea.Cmd
- func CheckUpdateCmd() tea.Cmd
- func ComputeAttentionView(issues []model.Issue, width int) (string, error)
- func ComputeSemanticFilterCmd(s *SemanticSearch, term string) tea.Cmd
- func ContextFromFocus(f focus) string
- func ExtractRepoPrefix(id string) string
- func FlowMatrixView(flow analysis.CrossLabelFlow, width int) string
- func FormatAgeBadge(t time.Time) string
- func FormatRecipeInfo(r *recipe.Recipe) string
- func FormatTimeRel(t time.Time) string
- func GetAgeColor(t time.Time) lipgloss.AdaptiveColor
- func GetAgeDays(t time.Time) int
- func GetContextHelp(ctx Context) string
- func GetHeatGradientColor(intensity float64, t Theme) lipgloss.Color
- func GetHeatGradientColorBg(intensity float64) (bg lipgloss.Color, fg lipgloss.Color)
- func GetHeatmapColor(score float64, t Theme) lipgloss.TerminalColor
- func GetPriorityIcon(priority int) string
- func GetPriorityLabel(priority int) string
- func GetRepoColor(prefix string) lipgloss.AdaptiveColor
- func GetStatusIcon(s string) string
- func GetTriggerKeyHint() string
- func GetTutorialProgressManager() *tutorialProgressManager
- func GetTypeIconMD(t string) string
- func IsCapsLock(msg tea.KeyMsg) bool
- func IsContextHelpTrigger(msg tea.KeyMsg) bool
- func IsTutorialTrigger(msg tea.KeyMsg) bool
- func LoadHistoryCmd(issues []model.Issue, beadsPath string) tea.Cmd
- func PerformUpdateCmd() tea.Cmd
- func ReadyTimeoutCmd() tea.Cmd
- func RenderContextHelp(ctx Context, theme Theme, width, height int) string
- func RenderDependencyTree(node *DependencyNode) string
- func RenderDivider(width int) string
- func RenderMiniBar(value float64, width int, t Theme) string
- func RenderPriorityBadge(priority int) string
- func RenderRankBadge(rank, total int) string
- func RenderRepoBadge(prefix string) string
- func RenderSparkline(val float64, width int) string
- func RenderStatusBadge(status string) string
- func RenderStructuredPage(page StructuredTutorialPage, theme Theme, width int) string
- func RenderSubtleDivider(width int) string
- func StartBackgroundWorkerCmd(w *BackgroundWorker) tea.Cmd
- func TreeStatePath(beadsDir string) string
- func TutorialProgressPath() string
- func WaitForBackgroundWorkerMsgCmd(w *BackgroundWorker) tea.Cmd
- func WaitForPhase2Cmd(stats *analysis.GraphStats) tea.Cmd
- func WatchFileCmd(w *watcher.Watcher) tea.Cmd
- type ActionableModel
- type AgentFileCheckMsg
- type AgentPromptModal
- func (m AgentPromptModal) CenterModal(termWidth, termHeight int) string
- func (m AgentPromptModal) FilePath() string
- func (m AgentPromptModal) Result() AgentPromptResult
- func (m *AgentPromptModal) SetSize(width, height int)
- func (m AgentPromptModal) Update(msg tea.Msg) (AgentPromptModal, tea.Cmd)
- func (m AgentPromptModal) View() string
- type AgentPromptResult
- type BackgroundWorker
- func (w *BackgroundWorker) Done() <-chan struct{}
- func (w *BackgroundWorker) ForceRefresh()
- func (w *BackgroundWorker) GetSnapshot() *DataSnapshot
- func (w *BackgroundWorker) Health() WorkerHealth
- func (w *BackgroundWorker) LastError() *WorkerError
- func (w *BackgroundWorker) LastHash() string
- func (w *BackgroundWorker) Messages() <-chan tea.Msg
- func (w *BackgroundWorker) Metrics() WorkerMetrics
- func (w *BackgroundWorker) ProcessingDuration() time.Duration
- func (w *BackgroundWorker) ResetHash()
- func (w *BackgroundWorker) SetRecipe(r *recipe.Recipe)
- func (w *BackgroundWorker) Start() error
- func (w *BackgroundWorker) State() WorkerState
- func (w *BackgroundWorker) Stop()
- func (w *BackgroundWorker) TriggerRefresh()
- func (w *BackgroundWorker) WatcherChanged() <-chan struct{}
- func (w *BackgroundWorker) WatcherInfo() (polling bool, fsType watcher.FilesystemType, pollInterval time.Duration)
- type BoardModel
- func (b *BoardModel) AppendSearchChar(ch rune)
- func (b *BoardModel) BackspaceSearch()
- func (b *BoardModel) CancelSearch()
- func (b *BoardModel) ClearWaitingForG()
- func (b *BoardModel) CollapseExpanded()
- func (b *BoardModel) ColumnCount(col int) int
- func (b *BoardModel) CycleSwimLaneMode()
- func (b *BoardModel) DetailScrollDown(lines int)
- func (b *BoardModel) DetailScrollUp(lines int)
- func (b *BoardModel) FinishSearch()
- func (b *BoardModel) GetEmptyColumnVisibilityMode() string
- func (b *BoardModel) GetExpandedID() string
- func (b *BoardModel) GetSwimLaneMode() SwimLaneMode
- func (b *BoardModel) GetSwimLaneModeName() string
- func (b *BoardModel) HasExpandedCard() bool
- func (b *BoardModel) HiddenColumnCount() int
- func (b *BoardModel) HideDetail()
- func (b *BoardModel) IsCardExpanded(id string) bool
- func (b *BoardModel) IsDetailShown() bool
- func (b *BoardModel) IsMatchHighlighted(colIdx, rowIdx int) bool
- func (b *BoardModel) IsSearchMatch(colIdx, rowIdx int) bool
- func (b *BoardModel) IsSearchMode() bool
- func (b *BoardModel) IsWaitingForG() bool
- func (b *BoardModel) JumpToColumn(colIdx int)
- func (b *BoardModel) JumpToFirstColumn()
- func (b *BoardModel) JumpToLastColumn()
- func (b *BoardModel) MoveDown()
- func (b *BoardModel) MoveLeft()
- func (b *BoardModel) MoveRight()
- func (b *BoardModel) MoveToBottom()
- func (b *BoardModel) MoveToTop()
- func (b *BoardModel) MoveUp()
- func (b *BoardModel) NextMatch()
- func (b *BoardModel) PageDown(visibleRows int)
- func (b *BoardModel) PageUp(visibleRows int)
- func (b *BoardModel) PrevMatch()
- func (b *BoardModel) SearchCursorPos() int
- func (b *BoardModel) SearchMatchCount() int
- func (b *BoardModel) SearchQuery() string
- func (b *BoardModel) SelectIssueByID(id string) bool
- func (b *BoardModel) SelectedIssue() *model.Issue
- func (b *BoardModel) SetIssues(issues []model.Issue)
- func (b *BoardModel) SetSnapshot(s *DataSnapshot)
- func (b *BoardModel) SetWaitingForG()
- func (b *BoardModel) ShowDetail()
- func (b *BoardModel) StartSearch()
- func (b *BoardModel) ToggleDetail()
- func (b *BoardModel) ToggleEmptyColumns()
- func (b *BoardModel) ToggleExpand()
- func (b *BoardModel) TotalCount() int
- func (b BoardModel) View(width, height int) string
- type BoardState
- type Bullet
- type CapsLockTimerExpiredMsg
- type CapsLockTracker
- type CassSessionModal
- type Code
- type ColumnStats
- type CommitListEntry
- type Context
- type DataSnapshot
- type DependencyNode
- type DiffStatus
- type Divider
- type FileChangedMsg
- type FileTreeNode
- type FlowMatrixModel
- func (m *FlowMatrixModel) GoToEnd()
- func (m *FlowMatrixModel) GoToStart()
- func (m *FlowMatrixModel) MoveDown()
- func (m *FlowMatrixModel) MoveUp()
- func (m *FlowMatrixModel) OpenDrilldown()
- func (m *FlowMatrixModel) SelectedDrilldownIssue() *model.Issue
- func (m *FlowMatrixModel) SelectedLabel() string
- func (m *FlowMatrixModel) SetData(flow *analysis.CrossLabelFlow, issues []model.Issue)
- func (m *FlowMatrixModel) SetSize(width, height int)
- func (m *FlowMatrixModel) TogglePanel()
- func (m *FlowMatrixModel) Update(msg tea.KeyMsg) tea.Cmd
- func (m FlowMatrixModel) View() string
- type FlowStep
- type GraphLayout
- type GraphModel
- func (g *GraphModel) MoveDown()
- func (g *GraphModel) MoveLeft()
- func (g *GraphModel) MoveRight()
- func (g *GraphModel) MoveUp()
- func (g *GraphModel) PageDown()
- func (g *GraphModel) PageUp()
- func (g *GraphModel) ScrollLeft()
- func (g *GraphModel) ScrollRight()
- func (g *GraphModel) SelectByID(id string) bool
- func (g *GraphModel) SelectedIssue() *model.Issue
- func (g *GraphModel) SetIssues(issues []model.Issue, insights *analysis.Insights)
- func (g *GraphModel) SetSnapshot(snapshot *DataSnapshot)
- func (g *GraphModel) TotalCount() int
- func (g *GraphModel) View(width, height int) string
- type Highlight
- type HistoryLoadedMsg
- type HistoryModel
- func (h *HistoryModel) CancelSearch()
- func (h *HistoryModel) ClearFileFilter()
- func (h *HistoryModel) ClearSearch()
- func (h *HistoryModel) ClearSessionCache()
- func (h *HistoryModel) CollapseFileNode()
- func (h *HistoryModel) CycleConfidence()
- func (h *HistoryModel) FileTreeHasFocus() bool
- func (h *HistoryModel) GetFileFilter() string
- func (h *HistoryModel) GetFilteredCommitList() []CommitListEntry
- func (h *HistoryModel) GetHistoryForBead(beadID string) *correlation.BeadHistory
- func (h *HistoryModel) GetMinConfidence() float64
- func (h *HistoryModel) GetSearchModeName() string
- func (h *HistoryModel) GetSessionsForBead(beadID string) []cass.ScoredResult
- func (h *HistoryModel) HasReport() bool
- func (h *HistoryModel) HasSessionsForBead(beadID string) bool
- func (h *HistoryModel) IsDetailFocused() bool
- func (h *HistoryModel) IsFileTreeVisible() bool
- func (h *HistoryModel) IsGitMode() bool
- func (h *HistoryModel) IsSearchActive() bool
- func (h *HistoryModel) MoveDown()
- func (h *HistoryModel) MoveDownFileTree()
- func (h *HistoryModel) MoveDownGit()
- func (h *HistoryModel) MoveUp()
- func (h *HistoryModel) MoveUpFileTree()
- func (h *HistoryModel) MoveUpGit()
- func (h *HistoryModel) NextCommit()
- func (h *HistoryModel) NextRelatedBead()
- func (h *HistoryModel) PrevCommit()
- func (h *HistoryModel) PrevRelatedBead()
- func (h *HistoryModel) SearchQuery() string
- func (h *HistoryModel) SelectFile()
- func (h *HistoryModel) SelectedBeadID() string
- func (h *HistoryModel) SelectedCommit() *correlation.CorrelatedCommit
- func (h *HistoryModel) SelectedFileName() string
- func (h *HistoryModel) SelectedFileNode() *FileTreeNode
- func (h *HistoryModel) SelectedGitCommit() *CommitListEntry
- func (h *HistoryModel) SelectedHistory() *correlation.BeadHistory
- func (h *HistoryModel) SelectedRelatedBeadID() string
- func (h *HistoryModel) SetAuthorFilter(author string)
- func (h *HistoryModel) SetFileTreeFocus(focus bool)
- func (h *HistoryModel) SetMinConfidence(conf float64)
- func (h *HistoryModel) SetReport(report *correlation.HistoryReport)
- func (h *HistoryModel) SetSessionsForBead(beadID string, sessions []cass.ScoredResult)
- func (h *HistoryModel) SetSize(width, height int)
- func (h *HistoryModel) StartSearch()
- func (h *HistoryModel) StartSearchWithMode(mode historySearchMode)
- func (h *HistoryModel) ToggleExpand()
- func (h *HistoryModel) ToggleExpandFile()
- func (h *HistoryModel) ToggleFileTree()
- func (h *HistoryModel) ToggleFocus()
- func (h *HistoryModel) ToggleViewMode()
- func (h *HistoryModel) UpdateSearchInput(msg interface{})
- func (h *HistoryModel) View() string
- type HybridMetricsReadyMsg
- type IdleGCConfig
- type InfoBox
- type InsightsModel
- func (m *InsightsModel) HeatmapBack()
- func (m *InsightsModel) HeatmapCellCount() int
- func (m *InsightsModel) HeatmapEnter()
- func (m *InsightsModel) HeatmapMoveDown()
- func (m *InsightsModel) HeatmapMoveLeft()
- func (m *InsightsModel) HeatmapMoveRight()
- func (m *InsightsModel) HeatmapMoveUp()
- func (m *InsightsModel) HeatmapSelectedIssueID() string
- func (m *InsightsModel) IsHeatmapDrillDown() bool
- func (m *InsightsModel) MoveDown()
- func (m *InsightsModel) MoveUp()
- func (m *InsightsModel) NextPanel()
- func (m *InsightsModel) PrevPanel()
- func (m *InsightsModel) ScrollDetailDown()
- func (m *InsightsModel) ScrollDetailUp()
- func (m *InsightsModel) SelectedIssueID() string
- func (m *InsightsModel) SetInsights(ins analysis.Insights)
- func (m *InsightsModel) SetRecommendations(recs []analysis.Recommendation, dataHash string)
- func (m *InsightsModel) SetSize(w, h int)
- func (m *InsightsModel) SetTopPicks(picks []analysis.TopPick)
- func (m *InsightsModel) ToggleCalculation()
- func (m *InsightsModel) ToggleExplanations()
- func (m *InsightsModel) ToggleHeatmap()
- func (m *InsightsModel) View() string
- type IssueDelegate
- type IssueDiffStats
- type IssueItem
- type IssueTreeNode
- type KeyBinding
- type KeyTable
- type LabelDashboardModel
- type LabelGraphAnalysisResult
- type LabelPickerModel
- func (m *LabelPickerModel) FilteredCount() int
- func (m *LabelPickerModel) InputValue() string
- func (m *LabelPickerModel) MoveDown()
- func (m *LabelPickerModel) MoveUp()
- func (m *LabelPickerModel) Reset()
- func (m *LabelPickerModel) SelectedLabel() string
- func (m *LabelPickerModel) SetLabels(labels []string, counts map[string]int)
- func (m *LabelPickerModel) SetSize(width, height int)
- func (m *LabelPickerModel) UpdateInput(msg interface{})
- func (m *LabelPickerModel) View() string
- type MarkdownRenderer
- type MetricInfo
- type MetricPanel
- type Model
- func (m Model) CurrentContext() Context
- func (m *Model) EnableWorkspaceMode(info WorkspaceInfo)
- func (m Model) FilteredIssues() []model.Issue
- func (m Model) FocusState() string
- func (m Model) Init() tea.Cmd
- func (m Model) IsActionableView() bool
- func (m Model) IsBoardView() bool
- func (m Model) IsGraphView() bool
- func (m Model) IsHistoryView() bool
- func (m Model) IsTimeTravelMode() bool
- func (m Model) IsWorkspaceMode() bool
- func (m *Model) RenderDebugView(viewName string, width, height int) string
- func (m *Model) SetFilter(f string)
- func (m *Model) Stop()
- func (m Model) TimeTravelDiff() *analysis.SnapshotDiff
- func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)
- func (m Model) View() string
- type Note
- type Paragraph
- type Phase2ReadyMsg
- type Phase2UpdateMsg
- type ProgressIndicator
- type ReadyTimeoutMsg
- type RecipePickerModel
- func (m *RecipePickerModel) MoveDown()
- func (m *RecipePickerModel) MoveUp()
- func (m *RecipePickerModel) RecipeCount() int
- func (m *RecipePickerModel) SelectedIndex() int
- func (m *RecipePickerModel) SelectedRecipe() *recipe.Recipe
- func (m *RecipePickerModel) SetSize(width, height int)
- func (m *RecipePickerModel) View() string
- type RepoPickerModel
- func (m *RepoPickerModel) MoveDown()
- func (m *RepoPickerModel) MoveUp()
- func (m *RepoPickerModel) SelectAll()
- func (m RepoPickerModel) SelectedRepos() map[string]bool
- func (m *RepoPickerModel) SetActiveRepos(active map[string]bool)
- func (m *RepoPickerModel) SetSize(width, height int)
- func (m *RepoPickerModel) ToggleSelected()
- func (m *RepoPickerModel) View() string
- type Section
- type SemanticFilterResultMsg
- type SemanticIndexReadyMsg
- type SemanticScore
- type SemanticSearch
- func (s *SemanticSearch) ClearPending()
- func (s *SemanticSearch) ClearScores()
- func (s *SemanticSearch) ComputeSemanticResults(term string) []list.Rank
- func (s *SemanticSearch) Filter(term string, targets []string) []list.Rank
- func (s *SemanticSearch) GetLastQueryTime() time.Time
- func (s *SemanticSearch) GetPendingTerm() string
- func (s *SemanticSearch) ResetCache()
- func (s *SemanticSearch) Scores(term string) (map[string]SemanticScore, bool)
- func (s *SemanticSearch) SetCachedResults(term string, results []list.Rank)
- func (s *SemanticSearch) SetDocs(docs map[string]string)
- func (s *SemanticSearch) SetHybridConfig(enabled bool, preset search.PresetName)
- func (s *SemanticSearch) SetIDs(ids []string)
- func (s *SemanticSearch) SetIndex(idx *search.VectorIndex, embedder search.Embedder)
- func (s *SemanticSearch) SetMetricsCache(cache search.MetricsCache)
- func (s *SemanticSearch) SetScores(term string, scores map[string]SemanticScore)
- func (s *SemanticSearch) Snapshot() semanticSearchSnapshot
- type ShortcutsSidebar
- func (s *ShortcutsSidebar) ResetScroll()
- func (s *ShortcutsSidebar) ScrollDown()
- func (s *ShortcutsSidebar) ScrollPageDown()
- func (s *ShortcutsSidebar) ScrollPageUp()
- func (s *ShortcutsSidebar) ScrollUp()
- func (s *ShortcutsSidebar) SetContext(ctx string)
- func (s *ShortcutsSidebar) SetSize(width, height int)
- func (s *ShortcutsSidebar) View() string
- func (s *ShortcutsSidebar) Width() int
- type ShowTutorialMsg
- type SnapshotBuilder
- func (b *SnapshotBuilder) Build() *DataSnapshot
- func (b *SnapshotBuilder) WithAnalysis(a *analysis.GraphStats) *SnapshotBuilder
- func (b *SnapshotBuilder) WithBuildConfig(cfg snapshotBuildConfig) *SnapshotBuilder
- func (b *SnapshotBuilder) WithPreviousSnapshot(prev *DataSnapshot, diff *analysis.IssueDiff) *SnapshotBuilder
- func (b *SnapshotBuilder) WithRecipe(r *recipe.Recipe) *SnapshotBuilder
- type SnapshotErrorMsg
- type SnapshotReadyMsg
- type SortMode
- type Spacer
- type StatusFlow
- type StructuredTutorialPage
- type StyledTable
- type SwimLaneMode
- type Theme
- type TimelineEntry
- type Tip
- type Tree
- type TreeModel
- func (t *TreeModel) Build(issues []model.Issue)
- func (t *TreeModel) BuildFromSnapshot(snapshot *DataSnapshot)
- func (t *TreeModel) CollapseAll()
- func (t *TreeModel) CollapseOrJumpToParent()
- func (t *TreeModel) ExpandAll()
- func (t *TreeModel) ExpandOrMoveToChild()
- func (t *TreeModel) GetPriorityColor(priority int) lipgloss.AdaptiveColor
- func (t *TreeModel) GetSelectedID() string
- func (t *TreeModel) GetViewportOffset() int
- func (t *TreeModel) IsBuilt() bool
- func (t *TreeModel) JumpToBottom()
- func (t *TreeModel) JumpToParent()
- func (t *TreeModel) JumpToTop()
- func (t *TreeModel) MoveDown()
- func (t *TreeModel) MoveUp()
- func (t *TreeModel) NodeCount() int
- func (t *TreeModel) PageDown()
- func (t *TreeModel) PageUp()
- func (t *TreeModel) RootCount() int
- func (t *TreeModel) SelectByID(id string) bool
- func (t *TreeModel) SelectedIssue() *model.Issue
- func (t *TreeModel) SelectedNode() *IssueTreeNode
- func (t *TreeModel) SetBeadsDir(dir string)
- func (t *TreeModel) SetSize(width, height int)
- func (t *TreeModel) ToggleExpand()
- func (t *TreeModel) View() string
- type TreeState
- type TreeViewMode
- type TutorialElement
- type TutorialKeyBindings
- type TutorialModel
- func (m TutorialModel) CenterTutorial(termWidth, termHeight int) string
- func (m TutorialModel) CurrentPageID() string
- func (m *TutorialModel) HasViewedPage(pageID string) bool
- func (m TutorialModel) Init() tea.Cmd
- func (m TutorialModel) IsComplete() bool
- func (m *TutorialModel) JumpToPage(index int)
- func (m *TutorialModel) JumpToSection(sectionID string)
- func (m *TutorialModel) LoadProgress()
- func (m *TutorialModel) MarkViewed(pageID string)
- func (m *TutorialModel) NextPage()
- func (m *TutorialModel) PrevPage()
- func (m TutorialModel) Progress() map[string]bool
- func (m *TutorialModel) ResetClose()
- func (m *TutorialModel) SaveProgress() error
- func (m *TutorialModel) SetContext(ctx string)
- func (m *TutorialModel) SetContextMode(enabled bool)
- func (m *TutorialModel) SetProgress(progress map[string]bool)
- func (m *TutorialModel) SetSize(width, height int)
- func (m TutorialModel) ShouldClose() bool
- func (m TutorialModel) Update(msg tea.Msg) (TutorialModel, tea.Cmd)
- func (m TutorialModel) View() string
- type TutorialPage
- type TutorialProgress
- type TutorialTreeNode
- type TutorialTrigger
- type UpdateCompleteMsg
- type UpdateModal
- func (m UpdateModal) CenterModal(termWidth, termHeight int) string
- func (m UpdateModal) IsCancelled() bool
- func (m UpdateModal) IsComplete() bool
- func (m UpdateModal) IsConfirming() bool
- func (m UpdateModal) IsInProgress() bool
- func (m *UpdateModal) SetSize(width, height int)
- func (m UpdateModal) Update(msg tea.Msg) (UpdateModal, tea.Cmd)
- func (m UpdateModal) View() string
- type UpdateMsg
- type UpdateProgress
- type UpdateProgressMsg
- type UpdateState
- type ValueProp
- type VelocityComparisonModel
- func (m *VelocityComparisonModel) DataCount() int
- func (m *VelocityComparisonModel) MoveDown()
- func (m *VelocityComparisonModel) MoveUp()
- func (m *VelocityComparisonModel) SelectedLabel() string
- func (m *VelocityComparisonModel) SetData(issues []model.Issue)
- func (m *VelocityComparisonModel) SetSize(width, height int)
- func (m *VelocityComparisonModel) View() string
- type Warning
- type WorkerConfig
- type WorkerError
- type WorkerHealth
- type WorkerLogLevel
- type WorkerMetrics
- type WorkerState
- type WorkspaceInfo
Constants ¶
const ( ColOpen = 0 ColInProgress = 1 ColBlocked = 2 ColClosed = 3 )
Column indices for the Kanban board
const ( SplitViewThreshold = 100 WideViewThreshold = 140 UltraWideViewThreshold = 180 )
View width thresholds for adaptive layout
const ( SpaceXS = 1 SpaceSM = 2 SpaceMD = 3 SpaceLG = 4 SpaceXL = 6 )
Spacing constants for consistent layout (in characters)
const ContextHelpTriggerKey = "~"
ContextHelpTriggerKey defines the key for context-specific help. Default is tilde (~) as it's Shift+backtick, easy to remember.
const SwimLaneModeCount = 3
SwimLaneModeCount is the total number of swimlane modes for cycling
const TreeStateVersion = 1
TreeStateVersion is the current schema version for tree persistence
const TutorialTriggerKey = "`"
TutorialTriggerKey defines the key used to trigger the tutorial directly. Default is backtick (`) since CapsLock is unreliable.
Variables ¶
var ( // Base colors - Light mode uses darker colors for contrast on white backgrounds ColorBg = lipgloss.AdaptiveColor{Light: "#FFFFFF", Dark: "#282A36"} ColorBgDark = lipgloss.AdaptiveColor{Light: "#F5F5F5", Dark: "#1E1F29"} ColorBgSubtle = lipgloss.AdaptiveColor{Light: "#E8E8E8", Dark: "#363949"} ColorBgHighlight = lipgloss.AdaptiveColor{Light: "#D0D0D0", Dark: "#44475A"} ColorText = lipgloss.AdaptiveColor{Light: "#1A1A1A", Dark: "#F8F8F2"} ColorSubtext = lipgloss.AdaptiveColor{Light: "#555555", Dark: "#BFBFBF"} ColorMuted = lipgloss.AdaptiveColor{Light: "#666666", Dark: "#6272A4"} // Primary accent colors ColorPrimary = lipgloss.AdaptiveColor{Light: "#6B47D9", Dark: "#BD93F9"} ColorSecondary = lipgloss.AdaptiveColor{Light: "#555555", Dark: "#6272A4"} ColorInfo = lipgloss.AdaptiveColor{Light: "#006080", Dark: "#8BE9FD"} ColorSuccess = lipgloss.AdaptiveColor{Light: "#007700", Dark: "#50FA7B"} ColorWarning = lipgloss.AdaptiveColor{Light: "#B06800", Dark: "#FFB86C"} ColorDanger = lipgloss.AdaptiveColor{Light: "#CC0000", Dark: "#FF5555"} // Status colors ColorStatusOpen = lipgloss.AdaptiveColor{Light: "#007700", Dark: "#50FA7B"} ColorStatusInProgress = lipgloss.AdaptiveColor{Light: "#006080", Dark: "#8BE9FD"} ColorStatusBlocked = lipgloss.AdaptiveColor{Light: "#CC0000", Dark: "#FF5555"} ColorStatusDeferred = lipgloss.AdaptiveColor{Light: "#B06800", Dark: "#FFB86C"} // Orange - on ice ColorStatusPinned = lipgloss.AdaptiveColor{Light: "#0066CC", Dark: "#6699FF"} // Blue - persistent ColorStatusHooked = lipgloss.AdaptiveColor{Light: "#008080", Dark: "#00CED1"} // Teal - agent-attached ColorStatusReview = lipgloss.AdaptiveColor{Light: "#6B47D9", Dark: "#BD93F9"} // Purple - awaiting review ColorStatusClosed = lipgloss.AdaptiveColor{Light: "#555555", Dark: "#6272A4"} ColorStatusTombstone = lipgloss.AdaptiveColor{Light: "#888888", Dark: "#44475A"} // Muted gray - deleted // Status background colors (for badges) - subtle backgrounds ColorStatusOpenBg = lipgloss.AdaptiveColor{Light: "#D4EDDA", Dark: "#1A3D2A"} ColorStatusInProgressBg = lipgloss.AdaptiveColor{Light: "#D1ECF1", Dark: "#1A3344"} ColorStatusBlockedBg = lipgloss.AdaptiveColor{Light: "#F8D7DA", Dark: "#3D1A1A"} ColorStatusDeferredBg = lipgloss.AdaptiveColor{Light: "#FFE8CC", Dark: "#3D2A1A"} // Orange bg ColorStatusPinnedBg = lipgloss.AdaptiveColor{Light: "#CCE5FF", Dark: "#1A2A44"} // Blue bg ColorStatusHookedBg = lipgloss.AdaptiveColor{Light: "#CCFFFF", Dark: "#1A3D3D"} // Teal bg ColorStatusReviewBg = lipgloss.AdaptiveColor{Light: "#E8DDFF", Dark: "#2A1A44"} // Purple bg ColorStatusClosedBg = lipgloss.AdaptiveColor{Light: "#E2E3E5", Dark: "#2A2A3D"} ColorStatusTombstoneBg = lipgloss.AdaptiveColor{Light: "#D0D0D0", Dark: "#1E1F29"} // Dark bg // Priority colors ColorPrioCritical = lipgloss.AdaptiveColor{Light: "#CC0000", Dark: "#FF5555"} ColorPrioHigh = lipgloss.AdaptiveColor{Light: "#B06800", Dark: "#FFB86C"} ColorPrioMedium = lipgloss.AdaptiveColor{Light: "#808000", Dark: "#F1FA8C"} ColorPrioLow = lipgloss.AdaptiveColor{Light: "#007700", Dark: "#50FA7B"} // Priority background colors ColorPrioCriticalBg = lipgloss.AdaptiveColor{Light: "#F8D7DA", Dark: "#3D1A1A"} ColorPrioHighBg = lipgloss.AdaptiveColor{Light: "#FFE8CC", Dark: "#3D2A1A"} ColorPrioMediumBg = lipgloss.AdaptiveColor{Light: "#FFF3CD", Dark: "#3D3D1A"} ColorPrioLowBg = lipgloss.AdaptiveColor{Light: "#D4EDDA", Dark: "#1A3D2A"} // Type colors ColorTypeBug = lipgloss.AdaptiveColor{Light: "#CC0000", Dark: "#FF5555"} ColorTypeFeature = lipgloss.AdaptiveColor{Light: "#B06800", Dark: "#FFB86C"} ColorTypeTask = lipgloss.AdaptiveColor{Light: "#808000", Dark: "#F1FA8C"} ColorTypeEpic = lipgloss.AdaptiveColor{Light: "#6B47D9", Dark: "#BD93F9"} ColorTypeChore = lipgloss.AdaptiveColor{Light: "#006080", Dark: "#8BE9FD"} )
var ( // PanelStyle is the default style for unfocused panels PanelStyle = lipgloss.NewStyle(). Border(lipgloss.RoundedBorder()). BorderForeground(ColorBgHighlight) // FocusedPanelStyle is the style for focused panels FocusedPanelStyle = lipgloss.NewStyle(). Border(lipgloss.RoundedBorder()). BorderForeground(ColorPrimary) )
var ContextHelpContent = map[Context]string{
ContextList: contextHelpList,
ContextGraph: contextHelpGraph,
ContextBoard: contextHelpBoard,
ContextInsights: contextHelpInsights,
ContextHistory: contextHelpHistory,
ContextDetail: contextHelpDetail,
ContextSplit: contextHelpSplit,
ContextFilter: contextHelpFilter,
ContextLabelPicker: contextHelpLabelPicker,
ContextRecipePicker: contextHelpRecipePicker,
ContextHelp: contextHelpHelp,
ContextTimeTravel: contextHelpTimeTravel,
ContextLabelDashboard: contextHelpLabelDashboard,
ContextAttention: contextHelpAttention,
ContextAgentPrompt: contextHelpAgentPrompt,
ContextCassSession: contextHelpCassSession,
}
ContextHelpContent contains compact help content for each context. This is used when user triggers context-specific help (e.g., double-tap backtick). Content should fit on one screen (~20 lines) without scrolling.
var HeatmapGradientColors = []lipgloss.Color{ lipgloss.Color("#1a1a2e"), lipgloss.Color("#16213e"), lipgloss.Color("#0f4c75"), lipgloss.Color("#3282b8"), lipgloss.Color("#bbe1fa"), lipgloss.Color("#f7dc6f"), lipgloss.Color("#e94560"), lipgloss.Color("#ff2e63"), }
HeatmapGradientColors defines the color gradient for enhanced heatmap (bv-t4yg) Ordered from cold (low count) to hot (high count)
var RepoColors = []lipgloss.AdaptiveColor{
{Light: "#CC5555", Dark: "#FF6B6B"},
{Light: "#3BA89E", Dark: "#4ECDC4"},
{Light: "#3891A6", Dark: "#45B7D1"},
{Light: "#6B9E87", Dark: "#96CEB4"},
{Light: "#AA7AAA", Dark: "#DDA0DD"},
{Light: "#C4A93D", Dark: "#F7DC6F"},
{Light: "#9370A8", Dark: "#BB8FCE"},
{Light: "#5A9BC2", Dark: "#85C1E9"},
}
RepoColors maps repo prefixes to distinctive colors for visual differentiation These colors are designed to be visible on both light and dark backgrounds
Functions ¶
func BuildHybridMetricsCmd ¶ added in v0.11.0
BuildHybridMetricsCmd computes metrics for hybrid scoring asynchronously.
func BuildSemanticIndexCmd ¶ added in v0.10.3
BuildSemanticIndexCmd builds or updates the semantic index for the given issues.
func CheckAgentFileCmd ¶ added in v0.10.3
CheckAgentFileCmd returns a command that checks if we should prompt for AGENTS.md
func CheckUpdateCmd ¶
CheckUpdateCmd returns a command that checks for updates
func ComputeAttentionView ¶ added in v0.10.3
ComputeAttentionView builds a pre-rendered table for label attention This keeps the TUI layer simple and deterministic for tests.
func ComputeSemanticFilterCmd ¶ added in v0.10.3
func ComputeSemanticFilterCmd(s *SemanticSearch, term string) tea.Cmd
ComputeSemanticFilterCmd computes semantic filter results asynchronously.
func ContextFromFocus ¶ added in v0.10.3
func ContextFromFocus(f focus) string
contextFromFocus returns the context string for the current focus
func ExtractRepoPrefix ¶
ExtractRepoPrefix extracts the repository prefix from a namespaced issue ID. For example, "api-AUTH-123" returns "api", "web-UI-1" returns "web". If no prefix is detected (no separator), returns empty string.
func FlowMatrixView ¶ added in v0.10.3
func FlowMatrixView(flow analysis.CrossLabelFlow, width int) string
FlowMatrixView is the legacy function for backward compatibility It now returns a simple text summary pointing to the interactive view
func FormatAgeBadge ¶ added in v0.10.3
FormatAgeBadge returns a compact age string with timer emoji (e.g., "3d ⏱")
func FormatRecipeInfo ¶
FormatRecipeInfo returns a formatted string for the active recipe display
func FormatTimeRel ¶
FormatTimeRel returns a relative time string (e.g., "2h ago", "3d ago")
func GetAgeColor ¶ added in v0.10.3
func GetAgeColor(t time.Time) lipgloss.AdaptiveColor
GetAgeColor returns a color based on staleness: green (<7 days), yellow (7-30 days), red (>30 days)
func GetAgeDays ¶ added in v0.10.3
GetAgeDays returns the number of days since the given time
func GetContextHelp ¶ added in v0.10.3
GetContextHelp returns the help content for a given context. Falls back to generic help if the context has no specific content.
func GetHeatGradientColor ¶ added in v0.10.3
GetHeatGradientColor returns an interpolated color for heatmap intensity (0-1) (bv-t4yg)
func GetHeatGradientColorBg ¶ added in v0.10.3
GetHeatGradientColorBg returns a background-friendly color for heatmap cell (bv-t4yg) Returns both the background color and appropriate foreground for contrast
func GetHeatmapColor ¶
func GetHeatmapColor(score float64, t Theme) lipgloss.TerminalColor
GetHeatmapColor returns a color based on score (0-1)
func GetPriorityIcon ¶
GetPriorityIcon returns the emoji for a priority level
func GetPriorityLabel ¶ added in v0.10.3
GetPriorityLabel returns a compact text label for priority (P0, P1, etc.)
func GetRepoColor ¶
func GetRepoColor(prefix string) lipgloss.AdaptiveColor
GetRepoColor returns a consistent color for a repo prefix based on hash
func GetStatusIcon ¶
GetStatusIcon returns a colored icon for a status
func GetTriggerKeyHint ¶ added in v0.10.3
func GetTriggerKeyHint() string
GetTriggerKeyHint returns a user-friendly hint for the trigger keys.
func GetTutorialProgressManager ¶ added in v0.10.3
func GetTutorialProgressManager() *tutorialProgressManager
GetTutorialProgressManager returns the singleton progress manager.
func GetTypeIconMD ¶
GetTypeIconMD returns the emoji icon for an issue type (for markdown)
func IsCapsLock ¶ added in v0.10.3
IsCapsLock attempts to detect if a key message is CapsLock. This is best-effort and may not work on all terminals.
Returns false if uncertain - users should use the alternative trigger key.
func IsContextHelpTrigger ¶ added in v0.10.3
IsContextHelpTrigger checks if the key message is the context help trigger. This provides direct access to context help without double-tap.
func IsTutorialTrigger ¶ added in v0.10.3
IsTutorialTrigger checks if the key message is the tutorial trigger key. This is the reliable way to trigger the tutorial.
func LoadHistoryCmd ¶ added in v0.10.3
LoadHistoryCmd returns a command that loads history data in the background
func PerformUpdateCmd ¶ added in v0.11.3
PerformUpdateCmd returns a command that performs the update in the background.
func ReadyTimeoutCmd ¶ added in v0.10.3
ReadyTimeoutCmd returns a command that sends ReadyTimeoutMsg after 100ms. This ensures the TUI doesn't hang on "Initializing..." if the terminal is slow to report its size (common in tmux, SSH, some terminal emulators).
func RenderContextHelp ¶ added in v0.10.3
RenderContextHelp renders the context-specific help modal. This is a compact modal (~60 chars wide) that shows quick reference info.
func RenderDependencyTree ¶
func RenderDependencyTree(node *DependencyNode) string
RenderDependencyTree renders a dependency tree as a formatted string
func RenderDivider ¶
RenderDivider renders a horizontal divider line
func RenderMiniBar ¶
RenderMiniBar renders a mini horizontal bar for a value between 0 and 1
func RenderPriorityBadge ¶
RenderPriorityBadge returns a styled priority badge Priority values: 0=Critical, 1=High, 2=Medium, 3=Low, 4=Backlog
func RenderRankBadge ¶
RenderRankBadge renders a rank badge like "#1" with color based on percentile
func RenderRepoBadge ¶
RenderRepoBadge creates a compact colored badge for a repository prefix Example: "api" -> "[API]" with distinctive color
func RenderSparkline ¶
RenderSparkline creates a textual bar chart of value (0.0 - 1.0)
func RenderStatusBadge ¶
RenderStatusBadge returns a styled status badge
func RenderStructuredPage ¶ added in v0.10.4
func RenderStructuredPage(page StructuredTutorialPage, theme Theme, width int) string
RenderStructuredPage renders a structured tutorial page
func RenderSubtleDivider ¶
RenderSubtleDivider renders a more subtle divider using dots
func StartBackgroundWorkerCmd ¶ added in v0.13.0
func StartBackgroundWorkerCmd(w *BackgroundWorker) tea.Cmd
StartBackgroundWorkerCmd starts the background worker and triggers an initial refresh.
func TreeStatePath ¶ added in v0.12.0
TreeStatePath returns the path to the tree state file. By default this is .beads/tree-state.json in the current directory. The beadsDir parameter allows overriding the .beads directory location (e.g., from BEADS_DIR environment variable).
func TutorialProgressPath ¶ added in v0.10.3
func TutorialProgressPath() string
TutorialProgressPath returns the path to the tutorial progress config file.
func WaitForBackgroundWorkerMsgCmd ¶ added in v0.13.0
func WaitForBackgroundWorkerMsgCmd(w *BackgroundWorker) tea.Cmd
WaitForBackgroundWorkerMsgCmd waits for the next BackgroundWorker message.
func WaitForPhase2Cmd ¶
func WaitForPhase2Cmd(stats *analysis.GraphStats) tea.Cmd
WaitForPhase2Cmd returns a command that waits for Phase 2 and sends Phase2ReadyMsg
Types ¶
type ActionableModel ¶
type ActionableModel struct {
// contains filtered or unexported fields
}
ActionableModel represents the actionable items view grouped by tracks
func NewActionableModel ¶
func NewActionableModel(plan analysis.ExecutionPlan, theme Theme) ActionableModel
NewActionableModel creates a new actionable view from execution plan
func (*ActionableModel) MoveDown ¶
func (m *ActionableModel) MoveDown()
MoveDown moves selection down
func (*ActionableModel) PageDown ¶ added in v0.10.3
func (m *ActionableModel) PageDown()
PageDown moves selection down by a page
func (*ActionableModel) PageUp ¶ added in v0.10.3
func (m *ActionableModel) PageUp()
PageUp moves selection up by a page
func (*ActionableModel) Render ¶
func (m *ActionableModel) Render() string
Render renders the actionable view with polished card-based layout
func (*ActionableModel) SelectedIssueID ¶
func (m *ActionableModel) SelectedIssueID() string
SelectedIssueID returns the ID of the currently selected issue
func (*ActionableModel) SetSize ¶
func (m *ActionableModel) SetSize(width, height int)
SetSize updates the view dimensions
type AgentFileCheckMsg ¶ added in v0.10.3
AgentFileCheckMsg is sent after checking for AGENTS.md integration (bv-i8dk)
type AgentPromptModal ¶ added in v0.10.3
type AgentPromptModal struct {
// contains filtered or unexported fields
}
AgentPromptModal is a modal dialog for the AGENTS.md prompt.
func NewAgentPromptModal ¶ added in v0.10.3
func NewAgentPromptModal(filePath, fileType string, theme Theme) AgentPromptModal
NewAgentPromptModal creates a new AGENTS.md prompt modal.
func (AgentPromptModal) CenterModal ¶ added in v0.10.3
func (m AgentPromptModal) CenterModal(termWidth, termHeight int) string
CenterModal returns the modal view centered in the given dimensions.
func (AgentPromptModal) FilePath ¶ added in v0.10.3
func (m AgentPromptModal) FilePath() string
FilePath returns the path of the file to modify.
func (AgentPromptModal) Result ¶ added in v0.10.3
func (m AgentPromptModal) Result() AgentPromptResult
Result returns the user's choice, or AgentPromptPending if still deciding.
func (*AgentPromptModal) SetSize ¶ added in v0.10.3
func (m *AgentPromptModal) SetSize(width, height int)
SetSize sets the modal dimensions.
func (AgentPromptModal) Update ¶ added in v0.10.3
func (m AgentPromptModal) Update(msg tea.Msg) (AgentPromptModal, tea.Cmd)
Update handles input for the modal.
func (AgentPromptModal) View ¶ added in v0.10.3
func (m AgentPromptModal) View() string
View renders the modal.
type AgentPromptResult ¶ added in v0.10.3
type AgentPromptResult int
AgentPromptResult represents the user's choice on the AGENTS.md prompt.
const ( AgentPromptPending AgentPromptResult = iota AgentPromptAccept AgentPromptDecline AgentPromptNeverAsk )
type BackgroundWorker ¶ added in v0.12.1
type BackgroundWorker struct {
// contains filtered or unexported fields
}
BackgroundWorker manages background processing of beads data. It owns the file watcher, implements coalescing, and builds snapshots off the UI thread.
func NewBackgroundWorker ¶ added in v0.12.1
func NewBackgroundWorker(cfg WorkerConfig) (*BackgroundWorker, error)
NewBackgroundWorker creates a new background worker.
func (*BackgroundWorker) Done ¶ added in v0.13.0
func (w *BackgroundWorker) Done() <-chan struct{}
Done is closed when the worker is stopped.
func (*BackgroundWorker) ForceRefresh ¶ added in v0.13.0
func (w *BackgroundWorker) ForceRefresh()
ForceRefresh triggers immediate processing, bypassing debounce and content-hash dedup so the UI can deterministically refresh even when the data is "fresh".
func (*BackgroundWorker) GetSnapshot ¶ added in v0.12.1
func (w *BackgroundWorker) GetSnapshot() *DataSnapshot
GetSnapshot returns the current snapshot (may be nil).
func (*BackgroundWorker) Health ¶ added in v0.13.0
func (w *BackgroundWorker) Health() WorkerHealth
func (*BackgroundWorker) LastError ¶ added in v0.12.1
func (w *BackgroundWorker) LastError() *WorkerError
LastError returns the most recent error (nil if last operation succeeded).
func (*BackgroundWorker) LastHash ¶ added in v0.12.1
func (w *BackgroundWorker) LastHash() string
LastHash returns the content hash from the last successful snapshot build. Useful for testing and debugging.
func (*BackgroundWorker) Messages ¶ added in v0.13.0
func (w *BackgroundWorker) Messages() <-chan tea.Msg
Messages returns a channel of Bubble Tea messages emitted by the worker. The channel is owned by the worker and is never closed; use Done() to stop waiting.
func (*BackgroundWorker) Metrics ¶ added in v0.13.0
func (w *BackgroundWorker) Metrics() WorkerMetrics
Metrics returns the latest metrics snapshot.
func (*BackgroundWorker) ProcessingDuration ¶ added in v0.14.0
func (w *BackgroundWorker) ProcessingDuration() time.Duration
ProcessingDuration returns how long the worker has been in the processing state. Returns 0 if not currently processing.
func (*BackgroundWorker) ResetHash ¶ added in v0.12.1
func (w *BackgroundWorker) ResetHash()
ResetHash clears the stored content hash, forcing the next buildSnapshot to process even if content is unchanged. Useful for testing.
func (*BackgroundWorker) SetRecipe ¶ added in v0.13.0
func (w *BackgroundWorker) SetRecipe(r *recipe.Recipe)
SetRecipe updates the worker's current recipe and triggers a refresh (bv-2h40). This allows Phase 3 view builders to incorporate recipe/filter state off-thread.
func (*BackgroundWorker) Start ¶ added in v0.12.1
func (w *BackgroundWorker) Start() error
Start begins watching for file changes and processing in the background. Start is idempotent - calling it multiple times has no effect. Returns error if the worker has been stopped.
func (*BackgroundWorker) State ¶ added in v0.12.1
func (w *BackgroundWorker) State() WorkerState
State returns the current worker state.
func (*BackgroundWorker) Stop ¶ added in v0.12.1
func (w *BackgroundWorker) Stop()
Stop halts the background worker and cleans up resources. Stop is idempotent - calling it multiple times has no effect.
func (*BackgroundWorker) TriggerRefresh ¶ added in v0.12.1
func (w *BackgroundWorker) TriggerRefresh()
TriggerRefresh manually triggers a refresh of the data. Has no effect if the worker is stopped or already processing.
func (*BackgroundWorker) WatcherChanged ¶ added in v0.12.1
func (w *BackgroundWorker) WatcherChanged() <-chan struct{}
WatcherChanged returns the watcher's change notification channel. This is useful for integration with existing code.
func (*BackgroundWorker) WatcherInfo ¶ added in v0.13.0
func (w *BackgroundWorker) WatcherInfo() (polling bool, fsType watcher.FilesystemType, pollInterval time.Duration)
type BoardModel ¶
type BoardModel struct {
// contains filtered or unexported fields
}
BoardModel represents the Kanban board view with adaptive columns
func NewBoardModel ¶
func NewBoardModel(issues []model.Issue, theme Theme) BoardModel
NewBoardModel creates a new Kanban board from the given issues
func (*BoardModel) AppendSearchChar ¶ added in v0.10.3
func (b *BoardModel) AppendSearchChar(ch rune)
AppendSearchChar adds a character to the search query
func (*BoardModel) BackspaceSearch ¶ added in v0.10.3
func (b *BoardModel) BackspaceSearch()
BackspaceSearch removes the last character from search query
func (*BoardModel) CancelSearch ¶ added in v0.10.3
func (b *BoardModel) CancelSearch()
CancelSearch exits search mode and clears results
func (*BoardModel) ClearWaitingForG ¶ added in v0.10.3
func (b *BoardModel) ClearWaitingForG()
ClearWaitingForG clears the gg combo state
func (*BoardModel) CollapseExpanded ¶ added in v0.10.3
func (b *BoardModel) CollapseExpanded()
CollapseExpanded collapses any currently expanded card
func (*BoardModel) ColumnCount ¶
func (b *BoardModel) ColumnCount(col int) int
ColumnCount returns the number of issues in a column
func (*BoardModel) CycleSwimLaneMode ¶ added in v0.10.3
func (b *BoardModel) CycleSwimLaneMode()
CycleSwimLaneMode cycles to the next swimlane mode and regroups issues (bv-wjs0)
func (*BoardModel) DetailScrollDown ¶ added in v0.10.3
func (b *BoardModel) DetailScrollDown(lines int)
DetailScrollDown scrolls the detail panel down
func (*BoardModel) DetailScrollUp ¶ added in v0.10.3
func (b *BoardModel) DetailScrollUp(lines int)
DetailScrollUp scrolls the detail panel up
func (*BoardModel) FinishSearch ¶ added in v0.10.3
func (b *BoardModel) FinishSearch()
FinishSearch exits search mode but keeps results for n/N navigation
func (*BoardModel) GetEmptyColumnVisibilityMode ¶ added in v0.10.3
func (b *BoardModel) GetEmptyColumnVisibilityMode() string
GetEmptyColumnVisibilityMode returns the current visibility mode name (bv-tf6j)
func (*BoardModel) GetExpandedID ¶ added in v0.10.3
func (b *BoardModel) GetExpandedID() string
GetExpandedID returns the ID of the currently expanded card (empty if none)
func (*BoardModel) GetSwimLaneMode ¶ added in v0.10.3
func (b *BoardModel) GetSwimLaneMode() SwimLaneMode
GetSwimLaneMode returns the current swimlane mode (bv-wjs0)
func (*BoardModel) GetSwimLaneModeName ¶ added in v0.10.3
func (b *BoardModel) GetSwimLaneModeName() string
GetSwimLaneModeName returns the display name for the current swimlane mode (bv-wjs0)
func (*BoardModel) HasExpandedCard ¶ added in v0.10.3
func (b *BoardModel) HasExpandedCard() bool
HasExpandedCard returns true if any card is currently expanded
func (*BoardModel) HiddenColumnCount ¶ added in v0.10.3
func (b *BoardModel) HiddenColumnCount() int
HiddenColumnCount returns the number of empty columns currently hidden (bv-tf6j)
func (*BoardModel) HideDetail ¶ added in v0.10.3
func (b *BoardModel) HideDetail()
HideDetail hides the detail panel
func (*BoardModel) IsCardExpanded ¶ added in v0.10.3
func (b *BoardModel) IsCardExpanded(id string) bool
IsCardExpanded returns true if the specified card is currently expanded
func (*BoardModel) IsDetailShown ¶ added in v0.10.3
func (b *BoardModel) IsDetailShown() bool
IsDetailShown returns whether detail panel is visible
func (*BoardModel) IsMatchHighlighted ¶ added in v0.10.3
func (b *BoardModel) IsMatchHighlighted(colIdx, rowIdx int) bool
IsMatchHighlighted returns true if position is current search match
func (*BoardModel) IsSearchMatch ¶ added in v0.10.3
func (b *BoardModel) IsSearchMatch(colIdx, rowIdx int) bool
IsSearchMatch returns true if position matches the search query
func (*BoardModel) IsSearchMode ¶ added in v0.10.3
func (b *BoardModel) IsSearchMode() bool
IsSearchMode returns whether search mode is active
func (*BoardModel) IsWaitingForG ¶ added in v0.10.3
func (b *BoardModel) IsWaitingForG() bool
IsWaitingForG returns whether we're waiting for second g
func (*BoardModel) JumpToColumn ¶ added in v0.10.3
func (b *BoardModel) JumpToColumn(colIdx int)
JumpToColumn jumps directly to a specific column (1-4 maps to 0-3)
func (*BoardModel) JumpToFirstColumn ¶ added in v0.10.3
func (b *BoardModel) JumpToFirstColumn()
JumpToFirstColumn jumps to the first non-empty column (H key)
func (*BoardModel) JumpToLastColumn ¶ added in v0.10.3
func (b *BoardModel) JumpToLastColumn()
JumpToLastColumn jumps to the last non-empty column (L key)
func (*BoardModel) MoveLeft ¶
func (b *BoardModel) MoveLeft()
func (*BoardModel) MoveRight ¶
func (b *BoardModel) MoveRight()
func (*BoardModel) MoveToBottom ¶
func (b *BoardModel) MoveToBottom()
func (*BoardModel) MoveToTop ¶
func (b *BoardModel) MoveToTop()
func (*BoardModel) MoveUp ¶
func (b *BoardModel) MoveUp()
func (*BoardModel) NextMatch ¶ added in v0.10.3
func (b *BoardModel) NextMatch()
NextMatch jumps to the next search match (n key)
func (*BoardModel) PageDown ¶
func (b *BoardModel) PageDown(visibleRows int)
func (*BoardModel) PageUp ¶
func (b *BoardModel) PageUp(visibleRows int)
func (*BoardModel) PrevMatch ¶ added in v0.10.3
func (b *BoardModel) PrevMatch()
PrevMatch jumps to the previous search match (N key)
func (*BoardModel) SearchCursorPos ¶ added in v0.10.3
func (b *BoardModel) SearchCursorPos() int
SearchCursorPos returns current match position (1-indexed for display)
func (*BoardModel) SearchMatchCount ¶ added in v0.10.3
func (b *BoardModel) SearchMatchCount() int
SearchMatchCount returns the number of matches
func (*BoardModel) SearchQuery ¶ added in v0.10.3
func (b *BoardModel) SearchQuery() string
SearchQuery returns the current search query
func (*BoardModel) SelectIssueByID ¶ added in v0.13.0
func (b *BoardModel) SelectIssueByID(id string) bool
SelectIssueByID attempts to focus and select the given issue ID on the board. Returns true if the issue was found in the current board columns.
func (*BoardModel) SelectedIssue ¶
func (b *BoardModel) SelectedIssue() *model.Issue
SelectedIssue returns the currently selected issue, or nil if none
func (*BoardModel) SetIssues ¶
func (b *BoardModel) SetIssues(issues []model.Issue)
SetIssues updates the board data, typically after filtering
func (*BoardModel) SetSnapshot ¶ added in v0.13.0
func (b *BoardModel) SetSnapshot(s *DataSnapshot)
SetSnapshot updates the board data directly from a DataSnapshot (bv-guxz). This avoids UI-thread grouping/sorting work when the full dataset is shown.
func (*BoardModel) SetWaitingForG ¶ added in v0.10.3
func (b *BoardModel) SetWaitingForG()
SetWaitingForG sets the gg combo state
func (*BoardModel) ShowDetail ¶ added in v0.10.3
func (b *BoardModel) ShowDetail()
ShowDetail shows the detail panel
func (*BoardModel) StartSearch ¶ added in v0.10.3
func (b *BoardModel) StartSearch()
StartSearch enters search mode
func (*BoardModel) ToggleDetail ¶ added in v0.10.3
func (b *BoardModel) ToggleDetail()
ToggleDetail toggles the detail panel visibility
func (*BoardModel) ToggleEmptyColumns ¶ added in v0.10.3
func (b *BoardModel) ToggleEmptyColumns()
ToggleEmptyColumns cycles through empty column visibility modes (bv-tf6j) nil (auto) -> true (show all) -> false (hide empty) -> nil (auto)
func (*BoardModel) ToggleExpand ¶ added in v0.10.3
func (b *BoardModel) ToggleExpand()
ToggleExpand toggles inline expansion for the selected card If a different card is expanded, it collapses that and expands the new one
func (*BoardModel) TotalCount ¶
func (b *BoardModel) TotalCount() int
TotalCount returns the total number of issues across all columns
func (BoardModel) View ¶
func (b BoardModel) View(width, height int) string
View renders the Kanban board with adaptive columns
type BoardState ¶ added in v0.13.0
type BoardState struct {
ByStatus [4][]model.Issue
ByPriority [4][]model.Issue
ByType [4][]model.Issue
}
BoardState contains precomputed Kanban columns for each swimlane mode. This lets the UI swap board data in O(1) when the full dataset is shown.
func (*BoardState) ColumnsForMode ¶ added in v0.13.0
func (s *BoardState) ColumnsForMode(mode SwimLaneMode) [4][]model.Issue
type Bullet ¶ added in v0.10.4
type Bullet struct {
Items []string
}
Bullet renders a bulleted list with elegant bullet characters
type CapsLockTimerExpiredMsg ¶ added in v0.10.3
type CapsLockTimerExpiredMsg struct{}
CapsLockTimerExpiredMsg is sent when the single-tap timer expires. This signals that the user intended a single tap (full tutorial) rather than a double-tap (context help).
type CapsLockTracker ¶ added in v0.10.3
type CapsLockTracker struct {
// contains filtered or unexported fields
}
CapsLockTracker tracks CapsLock-style key presses for double-tap detection. It works with any configured trigger key, not just CapsLock.
func NewCapsLockTracker ¶ added in v0.10.3
func NewCapsLockTracker() *CapsLockTracker
NewCapsLockTracker creates a new tracker with the default 300ms threshold.
func NewCapsLockTrackerWithThreshold ¶ added in v0.10.3
func NewCapsLockTrackerWithThreshold(threshold time.Duration) *CapsLockTracker
NewCapsLockTrackerWithThreshold creates a tracker with a custom threshold.
func (*CapsLockTracker) HandlePress ¶ added in v0.10.3
func (c *CapsLockTracker) HandlePress() (TutorialTrigger, tea.Cmd)
HandlePress processes a trigger key press and returns the appropriate command. Call this when the tutorial trigger key is detected.
Returns: - TriggerContextHelp if this is a double-tap (< threshold since last) - TriggerNone with a timer command if this might be a single tap
func (*CapsLockTracker) HandleTimerExpired ¶ added in v0.10.3
func (c *CapsLockTracker) HandleTimerExpired() TutorialTrigger
HandleTimerExpired processes the timer expiration message. Call this when CapsLockTimerExpiredMsg is received.
Returns TriggerFullTutorial if we were waiting for potential double-tap.
func (*CapsLockTracker) IsPending ¶ added in v0.10.3
func (c *CapsLockTracker) IsPending() bool
IsPending returns true if waiting for potential double-tap.
func (*CapsLockTracker) Reset ¶ added in v0.10.3
func (c *CapsLockTracker) Reset()
Reset clears the tracker state.
type CassSessionModal ¶ added in v0.10.3
type CassSessionModal struct {
// contains filtered or unexported fields
}
CassSessionModal displays correlated cass sessions for a bead. It shows session previews with agent name, timestamp, match reason, and snippet.
func NewCassSessionModal ¶ added in v0.10.3
func NewCassSessionModal(beadID string, result cass.CorrelationResult, theme Theme) CassSessionModal
NewCassSessionModal creates a modal from correlation results.
func (CassSessionModal) CenterModal ¶ added in v0.10.3
func (m CassSessionModal) CenterModal(termWidth, termHeight int) string
CenterModal returns the modal view centered in the given dimensions.
func (CassSessionModal) HasSessions ¶ added in v0.10.3
func (m CassSessionModal) HasSessions() bool
HasSessions returns true if there are sessions to display.
func (*CassSessionModal) SetSize ¶ added in v0.10.3
func (m *CassSessionModal) SetSize(width, height int)
SetSize sets the modal dimensions based on terminal size.
func (CassSessionModal) Update ¶ added in v0.10.3
func (m CassSessionModal) Update(msg tea.Msg) (CassSessionModal, tea.Cmd)
Update handles input for the modal.
func (CassSessionModal) View ¶ added in v0.10.3
func (m CassSessionModal) View() string
View renders the modal.
type Code ¶ added in v0.10.4
type Code struct {
Text string
}
Code renders a code block with left accent border
type ColumnStats ¶ added in v0.10.3
type ColumnStats struct {
Total int // Total issues in column
P0Count int // Critical priority count
P1Count int // High priority count
BlockedCount int // Issues with blocking dependencies
OldestAge time.Duration // Age of oldest item
}
ColumnStats holds computed statistics for a board column (bv-nl8a)
type CommitListEntry ¶ added in v0.10.3
type CommitListEntry struct {
SHA string
ShortSHA string
Message string
Author string
Timestamp string
FileCount int
BeadIDs []string // Beads related to this commit
}
CommitListEntry represents a commit in git-centric mode (bv-tl3n)
type Context ¶ added in v0.10.3
type Context string
Context represents the current UI context for context-sensitive help
const ( // Overlays (highest priority) ContextLabelPicker Context = "label-picker" ContextRecipePicker Context = "recipe-picker" ContextHelp Context = "help" ContextQuitConfirm Context = "quit-confirm" ContextLabelHealthDetail Context = "label-health-detail" ContextLabelDrilldown Context = "label-drilldown" ContextLabelGraphAnalysis Context = "label-graph-analysis" ContextTimeTravelInput Context = "time-travel-input" ContextAlerts Context = "alerts" ContextRepoPicker Context = "repo-picker" ContextAgentPrompt Context = "agent-prompt" ContextCassSession Context = "cass-session" // Views ContextInsights Context = "insights" ContextFlowMatrix Context = "flow-matrix" ContextGraph Context = "graph" ContextBoard Context = "board" ContextActionable Context = "actionable" ContextHistory Context = "history" ContextSprint Context = "sprint" ContextLabelDashboard Context = "label-dashboard" ContextAttention Context = "attention" // Detail states ContextSplit Context = "split" ContextDetail Context = "detail" ContextTimeTravel Context = "time-travel" // Filter state ContextFilter Context = "filter" // Default ContextList Context = "list" )
func (Context) Description ¶ added in v0.10.3
ContextDescription returns a human-readable description of the context. Useful for status messages or debugging.
func (Context) IsOverlay ¶ added in v0.10.3
IsOverlay returns true if the context is an overlay (modal/popup)
func (Context) IsView ¶ added in v0.10.3
IsView returns true if the context is a full view (not overlay or default list)
func (Context) TutorialPages ¶ added in v0.10.3
TutorialPages returns the recommended tutorial page IDs for this context. Used to provide context-sensitive help.
type DataSnapshot ¶ added in v0.12.1
type DataSnapshot struct {
// Core data
Issues []model.Issue // All issues (sorted)
IssueMap map[string]*model.Issue // Lookup by ID
// ViewIssues are the issues included in the current view context (e.g. recipe).
// When empty, callers should fall back to Issues.
ViewIssues []model.Issue
// Graph analysis
Analyzer *analysis.Analyzer
Analysis *analysis.GraphStats
Insights analysis.Insights
// Computed statistics
CountOpen int
CountReady int
CountBlocked int
CountClosed int
// Pre-computed UI data (Phase 3 will populate these)
// For now, they're nil and the UI computes on demand
ListItems []IssueItem // Pre-built list items with scores
TriageScores map[string]float64
TriageReasons map[string]analysis.TriageReasons
QuickWinSet map[string]bool
BlockerSet map[string]bool
UnblocksMap map[string][]string
// TreeRoots and TreeNodeMap contain a pre-built parent/child tree for the Tree view.
// These are computed off-thread by SnapshotBuilder to avoid UI-thread work when
// entering the tree view for large datasets.
TreeRoots []*IssueTreeNode
TreeNodeMap map[string]*IssueTreeNode
// BoardState contains pre-built Kanban board columns for each swimlane mode (bv-guxz).
BoardState *BoardState
// GraphLayout contains pre-built graph view data (blockers/dependents, sorted IDs, ranks)
// to avoid rebuilding graph structures on the UI thread (bv-za8z).
GraphLayout *GraphLayout
// Metadata
CreatedAt time.Time // When this snapshot was built
DataHash string // Hash of source data for cache validation
RecipeName string // Active recipe name for this snapshot (bv-2h40)
RecipeHash string // Fingerprint of active recipe for this snapshot (bv-4ilb)
// DatasetTier is a tiered performance mode for large datasets (bv-9thm).
// When unknown, normal behavior applies.
DatasetTier datasetTier
// SourceIssueCountHint is an approximate total issue count from the source file
// (e.g., JSONL line count). This may be 0 if unavailable.
SourceIssueCountHint int
// LoadedOpenOnly indicates the snapshot intentionally excluded closed/tombstone
// issues for performance (huge tier).
LoadedOpenOnly bool
// TruncatedCount is an approximate count of issues excluded by load policy.
// This may include invalid/empty lines when computed from a line count hint.
TruncatedCount int
// LargeDatasetWarning is a short, user-facing warning to show in the footer.
LargeDatasetWarning string
// LoadWarningCount is the number of non-fatal parse warnings encountered while loading.
// In TUI mode, warnings must not be printed to stderr during render.
LoadWarningCount int
// Phase 2 analysis status
// Phase2Ready is true when expensive metrics (PageRank, Betweenness, etc.) are computed
// UI can render immediately with Phase 1 data, then refresh when Phase 2 completes
Phase2Ready bool
// Incremental update metadata (bv-5mzz).
IssueDiff *analysis.IssueDiff
IssueDiffStats IssueDiffStats
// IncrementalListUsed reports whether list items were rebuilt incrementally.
IncrementalListUsed bool
// Error state (for graceful degradation)
LoadError error // Non-nil if last load had recoverable errors
ErrorTime time.Time // When error occurred
StaleWarning bool // True if data is from previous successful load
// contains filtered or unexported fields
}
DataSnapshot is an immutable, self-contained representation of all data the UI needs to render. Once created, it never changes - this is critical for thread safety when the background worker is building the next snapshot.
The UI thread reads exclusively from its current snapshot pointer. When a new snapshot is ready, the UI swaps the pointer atomically.
func (*DataSnapshot) Age ¶ added in v0.12.1
func (s *DataSnapshot) Age() time.Duration
Age returns how long ago this snapshot was created.
func (*DataSnapshot) GetGraphStats ¶ added in v0.12.1
func (s *DataSnapshot) GetGraphStats() *analysis.GraphStats
GetGraphStats returns the GraphStats pointer for Phase 2 waiting. Callers can use stats.WaitForPhase2() to block until Phase 2 completes.
func (*DataSnapshot) GetIssue ¶ added in v0.12.1
func (s *DataSnapshot) GetIssue(id string) *model.Issue
GetIssue returns an issue by ID, or nil if not found.
func (*DataSnapshot) IsEmpty ¶ added in v0.12.1
func (s *DataSnapshot) IsEmpty() bool
IsEmpty returns true if the snapshot has no issues.
type DependencyNode ¶
type DependencyNode struct {
ID string
Title string
Status string
Type string // "root", "blocks", "related", etc.
Children []*DependencyNode
}
DependencyNode represents a visual node in the dependency tree
func BuildDependencyTree ¶
func BuildDependencyTree(rootID string, issueMap map[string]*model.Issue, maxDepth int) *DependencyNode
BuildDependencyTree constructs a tree from dependencies for visualization. maxDepth limits recursion to prevent infinite loops and performance issues. Set maxDepth to 0 for unlimited depth (use with caution).
type DiffStatus ¶
type DiffStatus int
DiffStatus represents the diff state of an issue in time-travel mode
const ( DiffStatusNone DiffStatus = iota // No diff or not in time-travel mode DiffStatusNew // Issue was added since comparison point DiffStatusClosed // Issue was closed since comparison point DiffStatusModified // Issue was modified since comparison point )
func (DiffStatus) Badge ¶
func (s DiffStatus) Badge() string
DiffBadge returns the badge string for a diff status
type Divider ¶ added in v0.10.4
type Divider struct{}
Divider renders a horizontal divider line for visual separation
type FileChangedMsg ¶
type FileChangedMsg struct{}
FileChangedMsg is sent when the beads file changes on disk
type FileTreeNode ¶ added in v0.10.3
type FileTreeNode struct {
Name string // File or directory name
Path string // Full path
IsDir bool // True if directory
Children []*FileTreeNode // Child nodes (for directories)
ChangeCount int // Number of commits touching this path
Expanded bool // True if directory is expanded
Level int // Nesting depth for indentation
}
FileTreeNode represents a node in the file tree (bv-190l)
type FlowMatrixModel ¶ added in v0.10.3
type FlowMatrixModel struct {
// contains filtered or unexported fields
}
FlowMatrixModel renders an interactive dependency flow dashboard showing how labels block each other with visual impact indicators
func NewFlowMatrixModel ¶ added in v0.10.3
func NewFlowMatrixModel(theme Theme) FlowMatrixModel
NewFlowMatrixModel creates a new flow matrix dashboard
func (*FlowMatrixModel) GoToEnd ¶ added in v0.10.3
func (m *FlowMatrixModel) GoToEnd()
GoToEnd moves cursor to the last item
func (*FlowMatrixModel) GoToStart ¶ added in v0.10.3
func (m *FlowMatrixModel) GoToStart()
GoToStart moves cursor to the first item
func (*FlowMatrixModel) MoveDown ¶ added in v0.10.3
func (m *FlowMatrixModel) MoveDown()
MoveDown moves the cursor down by one
func (*FlowMatrixModel) MoveUp ¶ added in v0.10.3
func (m *FlowMatrixModel) MoveUp()
MoveUp moves the cursor up by one
func (*FlowMatrixModel) OpenDrilldown ¶ added in v0.10.3
func (m *FlowMatrixModel) OpenDrilldown()
OpenDrilldown opens the drill-down view for the selected label
func (*FlowMatrixModel) SelectedDrilldownIssue ¶ added in v0.10.3
func (m *FlowMatrixModel) SelectedDrilldownIssue() *model.Issue
SelectedDrilldownIssue returns the currently selected issue in drilldown mode
func (*FlowMatrixModel) SelectedLabel ¶ added in v0.10.3
func (m *FlowMatrixModel) SelectedLabel() string
SelectedLabel returns the currently selected label (for drill-down from parent)
func (*FlowMatrixModel) SetData ¶ added in v0.10.3
func (m *FlowMatrixModel) SetData(flow *analysis.CrossLabelFlow, issues []model.Issue)
SetData initializes the model with flow data
func (*FlowMatrixModel) SetSize ¶ added in v0.10.3
func (m *FlowMatrixModel) SetSize(width, height int)
SetSize sets the available rendering dimensions
func (*FlowMatrixModel) TogglePanel ¶ added in v0.10.3
func (m *FlowMatrixModel) TogglePanel()
TogglePanel switches focus between the labels list and detail panel
func (*FlowMatrixModel) Update ¶ added in v0.10.3
func (m *FlowMatrixModel) Update(msg tea.KeyMsg) tea.Cmd
Update handles keyboard input
func (FlowMatrixModel) View ¶ added in v0.10.3
func (m FlowMatrixModel) View() string
View renders the flow matrix dashboard
type FlowStep ¶ added in v0.10.4
type FlowStep struct {
Label string
Color lipgloss.AdaptiveColor
}
type GraphLayout ¶ added in v0.13.0
type GraphLayout struct {
// Relationships (blocks/dependents)
Blockers map[string][]string // What each issue depends on (blocks this issue)
Dependents map[string][]string // What depends on each issue (this issue blocks)
// Navigation order (all IDs in the snapshot)
SortedIDs []string
// Metric ranks (1 = best, higher = worse). Missing ranks imply "unknown".
RankPageRank map[string]int
RankBetweenness map[string]int
RankEigenvector map[string]int
RankHubs map[string]int
RankAuthorities map[string]int
RankCriticalPath map[string]int
RankInDegree map[string]int
RankOutDegree map[string]int
}
GraphLayout contains precomputed data used by the graph view. This intentionally focuses on the current ASCII graph view needs (relationships + ranks), not geometric coordinates.
func (*GraphLayout) UpdatePhase2Ranks ¶ added in v0.13.0
func (l *GraphLayout) UpdatePhase2Ranks(stats *analysis.GraphStats)
type GraphModel ¶
type GraphModel struct {
// contains filtered or unexported fields
}
GraphModel represents the dependency graph view with visual ASCII art visualization
func NewGraphModel ¶
NewGraphModel creates a new graph view from issues
func (*GraphModel) MoveDown ¶
func (g *GraphModel) MoveDown()
func (*GraphModel) MoveLeft ¶
func (g *GraphModel) MoveLeft()
func (*GraphModel) MoveRight ¶
func (g *GraphModel) MoveRight()
func (*GraphModel) PageDown ¶
func (g *GraphModel) PageDown()
func (*GraphModel) PageUp ¶
func (g *GraphModel) PageUp()
func (*GraphModel) ScrollLeft ¶
func (g *GraphModel) ScrollLeft()
func (*GraphModel) ScrollRight ¶
func (g *GraphModel) ScrollRight()
func (*GraphModel) SelectByID ¶ added in v0.10.3
func (g *GraphModel) SelectByID(id string) bool
SelectByID selects an issue by its ID (bv-xf4p)
func (*GraphModel) SelectedIssue ¶
func (g *GraphModel) SelectedIssue() *model.Issue
func (*GraphModel) SetIssues ¶
func (g *GraphModel) SetIssues(issues []model.Issue, insights *analysis.Insights)
SetIssues updates the graph data preserving the selected issue if possible
func (*GraphModel) SetSnapshot ¶ added in v0.13.0
func (g *GraphModel) SetSnapshot(snapshot *DataSnapshot)
SetSnapshot updates the graph data from a pre-built DataSnapshot (bv-za8z). This avoids rebuilding blockers/dependents and metric ranks on the UI thread.
func (*GraphModel) TotalCount ¶
func (g *GraphModel) TotalCount() int
func (*GraphModel) View ¶
func (g *GraphModel) View(width, height int) string
View renders the visual graph view
type Highlight ¶ added in v0.10.4
type Highlight struct {
Text string
Color lipgloss.AdaptiveColor
}
Highlight renders inline highlighted/emphasized text
type HistoryLoadedMsg ¶ added in v0.10.3
type HistoryLoadedMsg struct {
Report *correlation.HistoryReport
Error error
}
HistoryLoadedMsg is sent when background history loading completes
type HistoryModel ¶ added in v0.10.3
type HistoryModel struct {
// contains filtered or unexported fields
}
HistoryModel represents the TUI view for bead history and code correlations
func NewHistoryModel ¶ added in v0.10.3
func NewHistoryModel(report *correlation.HistoryReport, theme Theme) HistoryModel
NewHistoryModel creates a new history view from a correlation report
func (*HistoryModel) CancelSearch ¶ added in v0.10.3
func (h *HistoryModel) CancelSearch()
CancelSearch cancels the search and clears the query
func (*HistoryModel) ClearFileFilter ¶ added in v0.10.3
func (h *HistoryModel) ClearFileFilter()
ClearFileFilter clears the file filter
func (*HistoryModel) ClearSearch ¶ added in v0.10.3
func (h *HistoryModel) ClearSearch()
ClearSearch clears the search query but keeps search mode active
func (*HistoryModel) ClearSessionCache ¶ added in v0.10.3
func (h *HistoryModel) ClearSessionCache()
ClearSessionCache clears all cached sessions (bv-pr1l)
func (*HistoryModel) CollapseFileNode ¶ added in v0.10.3
func (h *HistoryModel) CollapseFileNode()
CollapseFileNode collapses the selected node if it's an expanded directory
func (*HistoryModel) CycleConfidence ¶ added in v0.10.3
func (h *HistoryModel) CycleConfidence()
CycleConfidence cycles through common confidence thresholds (0, 0.5, 0.75, 0.9)
func (*HistoryModel) FileTreeHasFocus ¶ added in v0.10.3
func (h *HistoryModel) FileTreeHasFocus() bool
FileTreeHasFocus returns whether the file tree has focus
func (*HistoryModel) GetFileFilter ¶ added in v0.10.3
func (h *HistoryModel) GetFileFilter() string
GetFileFilter returns the current file filter
func (*HistoryModel) GetFilteredCommitList ¶ added in v0.10.3
func (h *HistoryModel) GetFilteredCommitList() []CommitListEntry
GetFilteredCommitList returns the filtered commit list for git mode
func (*HistoryModel) GetHistoryForBead ¶ added in v0.10.3
func (h *HistoryModel) GetHistoryForBead(beadID string) *correlation.BeadHistory
GetHistoryForBead returns the history for a specific bead ID
func (*HistoryModel) GetMinConfidence ¶ added in v0.10.3
func (h *HistoryModel) GetMinConfidence() float64
GetMinConfidence returns the current minimum confidence threshold
func (*HistoryModel) GetSearchModeName ¶ added in v0.10.3
func (h *HistoryModel) GetSearchModeName() string
GetSearchModeName returns a human-readable name for the current search mode
func (*HistoryModel) GetSessionsForBead ¶ added in v0.10.3
func (h *HistoryModel) GetSessionsForBead(beadID string) []cass.ScoredResult
GetSessionsForBead returns cached sessions for a bead (bv-pr1l)
func (*HistoryModel) HasReport ¶ added in v0.10.3
func (h *HistoryModel) HasReport() bool
HasReport returns true if history data is loaded
func (*HistoryModel) HasSessionsForBead ¶ added in v0.10.3
func (h *HistoryModel) HasSessionsForBead(beadID string) bool
HasSessionsForBead returns true if sessions are cached for the given bead (bv-pr1l)
func (*HistoryModel) IsDetailFocused ¶ added in v0.10.3
func (h *HistoryModel) IsDetailFocused() bool
IsDetailFocused returns true if the detail pane has focus (bv-190l)
func (*HistoryModel) IsFileTreeVisible ¶ added in v0.10.3
func (h *HistoryModel) IsFileTreeVisible() bool
IsFileTreeVisible returns whether the file tree panel is visible
func (*HistoryModel) IsGitMode ¶ added in v0.10.3
func (h *HistoryModel) IsGitMode() bool
IsGitMode returns true if in git-centric view mode
func (*HistoryModel) IsSearchActive ¶ added in v0.10.3
func (h *HistoryModel) IsSearchActive() bool
IsSearchActive returns whether search input is active
func (*HistoryModel) MoveDown ¶ added in v0.10.3
func (h *HistoryModel) MoveDown()
MoveDown moves selection down in the current focus pane
func (*HistoryModel) MoveDownFileTree ¶ added in v0.10.3
func (h *HistoryModel) MoveDownFileTree()
MoveDownFileTree moves selection down in the file tree
func (*HistoryModel) MoveDownGit ¶ added in v0.10.3
func (h *HistoryModel) MoveDownGit()
MoveDownGit moves selection down in git mode
func (*HistoryModel) MoveUp ¶ added in v0.10.3
func (h *HistoryModel) MoveUp()
MoveUp moves selection up in the current focus pane
func (*HistoryModel) MoveUpFileTree ¶ added in v0.10.3
func (h *HistoryModel) MoveUpFileTree()
MoveUpFileTree moves selection up in the file tree
func (*HistoryModel) MoveUpGit ¶ added in v0.10.3
func (h *HistoryModel) MoveUpGit()
MoveUpGit moves selection up in git mode
func (*HistoryModel) NextCommit ¶ added in v0.10.3
func (h *HistoryModel) NextCommit()
NextCommit moves to the next commit within the selected bead (J key)
func (*HistoryModel) NextRelatedBead ¶ added in v0.10.3
func (h *HistoryModel) NextRelatedBead()
NextRelatedBead moves to the next related bead in git mode (J key)
func (*HistoryModel) PrevCommit ¶ added in v0.10.3
func (h *HistoryModel) PrevCommit()
PrevCommit moves to the previous commit within the selected bead (K key)
func (*HistoryModel) PrevRelatedBead ¶ added in v0.10.3
func (h *HistoryModel) PrevRelatedBead()
PrevRelatedBead moves to the previous related bead in git mode (K key)
func (*HistoryModel) SearchQuery ¶ added in v0.10.3
func (h *HistoryModel) SearchQuery() string
SearchQuery returns the current search query
func (*HistoryModel) SelectFile ¶ added in v0.10.3
func (h *HistoryModel) SelectFile()
SelectFile sets the file filter to the selected file
func (*HistoryModel) SelectedBeadID ¶ added in v0.10.3
func (h *HistoryModel) SelectedBeadID() string
SelectedBeadID returns the currently selected bead ID
func (*HistoryModel) SelectedCommit ¶ added in v0.10.3
func (h *HistoryModel) SelectedCommit() *correlation.CorrelatedCommit
SelectedCommit returns the currently selected commit
func (*HistoryModel) SelectedFileName ¶ added in v0.10.3
func (h *HistoryModel) SelectedFileName() string
SelectedFileName returns the name of the selected file/directory
func (*HistoryModel) SelectedFileNode ¶ added in v0.10.3
func (h *HistoryModel) SelectedFileNode() *FileTreeNode
SelectedFileNode returns the currently selected file tree node
func (*HistoryModel) SelectedGitCommit ¶ added in v0.10.3
func (h *HistoryModel) SelectedGitCommit() *CommitListEntry
SelectedGitCommit returns the selected commit in git mode
func (*HistoryModel) SelectedHistory ¶ added in v0.10.3
func (h *HistoryModel) SelectedHistory() *correlation.BeadHistory
SelectedHistory returns the currently selected bead history
func (*HistoryModel) SelectedRelatedBeadID ¶ added in v0.10.3
func (h *HistoryModel) SelectedRelatedBeadID() string
SelectedRelatedBeadID returns the currently selected related bead ID in git mode
func (*HistoryModel) SetAuthorFilter ¶ added in v0.10.3
func (h *HistoryModel) SetAuthorFilter(author string)
SetAuthorFilter sets the author filter and rebuilds the list
func (*HistoryModel) SetFileTreeFocus ¶ added in v0.10.3
func (h *HistoryModel) SetFileTreeFocus(focus bool)
SetFileTreeFocus sets the file tree focus state
func (*HistoryModel) SetMinConfidence ¶ added in v0.10.3
func (h *HistoryModel) SetMinConfidence(conf float64)
SetMinConfidence sets the minimum confidence threshold and rebuilds the list
func (*HistoryModel) SetReport ¶ added in v0.10.3
func (h *HistoryModel) SetReport(report *correlation.HistoryReport)
SetReport updates the history data
func (*HistoryModel) SetSessionsForBead ¶ added in v0.10.3
func (h *HistoryModel) SetSessionsForBead(beadID string, sessions []cass.ScoredResult)
SetSessionsForBead stores correlated sessions for a bead in the cache (bv-pr1l) This is called when sessions are loaded asynchronously from the main model.
func (*HistoryModel) SetSize ¶ added in v0.10.3
func (h *HistoryModel) SetSize(width, height int)
SetSize updates the view dimensions
func (*HistoryModel) StartSearch ¶ added in v0.10.3
func (h *HistoryModel) StartSearch()
StartSearch activates the search input
func (*HistoryModel) StartSearchWithMode ¶ added in v0.10.3
func (h *HistoryModel) StartSearchWithMode(mode historySearchMode)
StartSearchWithMode activates search with a specific mode
func (*HistoryModel) ToggleExpand ¶ added in v0.10.3
func (h *HistoryModel) ToggleExpand()
ToggleExpand expands/collapses the commits for the selected bead
func (*HistoryModel) ToggleExpandFile ¶ added in v0.10.3
func (h *HistoryModel) ToggleExpandFile()
ToggleExpandFile expands or collapses the selected directory
func (*HistoryModel) ToggleFileTree ¶ added in v0.10.3
func (h *HistoryModel) ToggleFileTree()
ToggleFileTree toggles the file tree panel visibility
func (*HistoryModel) ToggleFocus ¶ added in v0.10.3
func (h *HistoryModel) ToggleFocus()
ToggleFocus cycles through panes based on current layout (bv-xrfh)
func (*HistoryModel) ToggleViewMode ¶ added in v0.10.3
func (h *HistoryModel) ToggleViewMode()
ToggleViewMode switches between Bead mode and Git mode
func (*HistoryModel) UpdateSearchInput ¶ added in v0.10.3
func (h *HistoryModel) UpdateSearchInput(msg interface{})
UpdateSearchInput updates the search input model (call from Update)
func (*HistoryModel) View ¶ added in v0.10.3
func (h *HistoryModel) View() string
View renders the history view
type HybridMetricsReadyMsg ¶ added in v0.11.0
type HybridMetricsReadyMsg struct {
Cache search.MetricsCache
Error error
}
HybridMetricsReadyMsg is emitted when hybrid metrics are ready for scoring.
type IdleGCConfig ¶ added in v0.13.0
type InfoBox ¶ added in v0.10.4
type InfoBox struct {
Title string
Content string
Color lipgloss.AdaptiveColor
}
InfoBox renders a highlighted info box with title and content
type InsightsModel ¶
type InsightsModel struct {
// contains filtered or unexported fields
}
InsightsModel is an interactive insights dashboard
func NewInsightsModel ¶
func NewInsightsModel(ins analysis.Insights, issueMap map[string]*model.Issue, theme Theme) InsightsModel
NewInsightsModel creates a new interactive insights model
func (*InsightsModel) HeatmapBack ¶ added in v0.10.3
func (m *InsightsModel) HeatmapBack()
HeatmapBack exits drill-down mode
func (*InsightsModel) HeatmapCellCount ¶ added in v0.10.3
func (m *InsightsModel) HeatmapCellCount() int
HeatmapCellCount returns the count in the currently selected cell
func (*InsightsModel) HeatmapEnter ¶ added in v0.10.3
func (m *InsightsModel) HeatmapEnter()
HeatmapEnter enters drill-down mode for the selected cell
func (*InsightsModel) HeatmapMoveDown ¶ added in v0.10.3
func (m *InsightsModel) HeatmapMoveDown()
HeatmapMoveDown moves selection down in heatmap (to higher depth)
func (*InsightsModel) HeatmapMoveLeft ¶ added in v0.10.3
func (m *InsightsModel) HeatmapMoveLeft()
HeatmapMoveLeft moves selection left in heatmap (to lower score)
func (*InsightsModel) HeatmapMoveRight ¶ added in v0.10.3
func (m *InsightsModel) HeatmapMoveRight()
HeatmapMoveRight moves selection right in heatmap (to higher score)
func (*InsightsModel) HeatmapMoveUp ¶ added in v0.10.3
func (m *InsightsModel) HeatmapMoveUp()
HeatmapMoveUp moves selection up in heatmap (to lower depth)
func (*InsightsModel) HeatmapSelectedIssueID ¶ added in v0.10.3
func (m *InsightsModel) HeatmapSelectedIssueID() string
HeatmapSelectedIssueID returns the currently selected issue ID in heatmap mode
func (*InsightsModel) IsHeatmapDrillDown ¶ added in v0.10.3
func (m *InsightsModel) IsHeatmapDrillDown() bool
IsHeatmapDrillDown returns whether we're in drill-down mode
func (*InsightsModel) MoveDown ¶
func (m *InsightsModel) MoveDown()
func (*InsightsModel) NextPanel ¶
func (m *InsightsModel) NextPanel()
func (*InsightsModel) PrevPanel ¶
func (m *InsightsModel) PrevPanel()
func (*InsightsModel) ScrollDetailDown ¶ added in v0.10.3
func (m *InsightsModel) ScrollDetailDown()
ScrollDetailDown scrolls the detail panel viewport down
func (*InsightsModel) ScrollDetailUp ¶ added in v0.10.3
func (m *InsightsModel) ScrollDetailUp()
ScrollDetailUp scrolls the detail panel viewport up
func (*InsightsModel) SelectedIssueID ¶
func (m *InsightsModel) SelectedIssueID() string
SelectedIssueID returns the currently selected issue ID
func (*InsightsModel) SetInsights ¶
func (m *InsightsModel) SetInsights(ins analysis.Insights)
func (*InsightsModel) SetRecommendations ¶ added in v0.10.3
func (m *InsightsModel) SetRecommendations(recs []analysis.Recommendation, dataHash string)
SetRecommendations sets the full recommendations with breakdown data (bv-93)
func (*InsightsModel) SetSize ¶
func (m *InsightsModel) SetSize(w, h int)
func (*InsightsModel) SetTopPicks ¶ added in v0.10.3
func (m *InsightsModel) SetTopPicks(picks []analysis.TopPick)
SetTopPicks sets the priority triage recommendations (bv-91)
func (*InsightsModel) ToggleCalculation ¶
func (m *InsightsModel) ToggleCalculation()
func (*InsightsModel) ToggleExplanations ¶
func (m *InsightsModel) ToggleExplanations()
func (*InsightsModel) ToggleHeatmap ¶ added in v0.10.3
func (m *InsightsModel) ToggleHeatmap()
ToggleHeatmap toggles between priority list and heatmap view (bv-95)
func (*InsightsModel) View ¶
func (m *InsightsModel) View() string
View renders the insights dashboard (pointer receiver to persist scroll state)
type IssueDelegate ¶
type IssueDelegate struct {
Theme Theme
ShowPriorityHints bool
PriorityHints map[string]*analysis.PriorityRecommendation
WorkspaceMode bool // When true, shows repo prefix badges
ShowSearchScores bool // Show semantic/hybrid score badge when search is active
}
IssueDelegate renders issue items in the list
func (IssueDelegate) Height ¶
func (d IssueDelegate) Height() int
func (IssueDelegate) Spacing ¶
func (d IssueDelegate) Spacing() int
type IssueDiffStats ¶ added in v0.13.0
IssueDiffStats summarizes the change volume between snapshots.
type IssueItem ¶
type IssueItem struct {
Issue model.Issue
GraphScore float64
Impact float64
DiffStatus DiffStatus // Diff state for time-travel mode
RepoPrefix string // Repository prefix for workspace mode (e.g., "api", "web")
// Semantic/hybrid search scores (set when search is active)
SearchScore float64
SearchTextScore float64
SearchComponents map[string]float64
SearchScoreSet bool
// Triage insights (bv-151)
TriageScore float64 // Unified triage score (0-1)
TriageReason string // Primary reason for recommendation
TriageReasons []string // All triage reasons
IsQuickWin bool // True if identified as a quick win
IsBlocker bool // True if this item blocks significant downstream work
UnblocksCount int // Number of items this unblocks
}
IssueItem wraps model.Issue to implement list.Item
func (IssueItem) Description ¶
func (IssueItem) FilterValue ¶
type IssueTreeNode ¶ added in v0.12.0
type IssueTreeNode struct {
Issue *model.Issue // Reference to the actual issue
Children []*IssueTreeNode // Child nodes
Expanded bool // Is this node expanded?
Depth int // Nesting level (0 = root)
Parent *IssueTreeNode // Back-reference for navigation
}
IssueTreeNode represents a node in the hierarchical issue tree
type KeyBinding ¶ added in v0.10.4
KeyBinding represents a single key binding
type KeyTable ¶ added in v0.10.4
type KeyTable struct {
Bindings []KeyBinding
}
KeyTable renders a table of key bindings using lipgloss/table for proper alignment
type LabelDashboardModel ¶ added in v0.10.3
type LabelDashboardModel struct {
// contains filtered or unexported fields
}
LabelDashboardModel renders a lightweight table of label health
func NewLabelDashboardModel ¶ added in v0.10.3
func NewLabelDashboardModel(theme Theme) LabelDashboardModel
func (*LabelDashboardModel) SetData ¶ added in v0.10.3
func (m *LabelDashboardModel) SetData(labels []analysis.LabelHealth)
func (*LabelDashboardModel) SetSize ¶ added in v0.10.3
func (m *LabelDashboardModel) SetSize(width, height int)
func (*LabelDashboardModel) Update ¶ added in v0.10.3
Update handles navigation keys; returns selected label on enter
func (LabelDashboardModel) View ¶ added in v0.10.3
func (m LabelDashboardModel) View() string
type LabelGraphAnalysisResult ¶ added in v0.10.3
type LabelGraphAnalysisResult struct {
Label string
Subgraph analysis.LabelSubgraph
PageRank analysis.LabelPageRankResult
CriticalPath analysis.LabelCriticalPathResult
}
LabelGraphAnalysisResult holds label-specific graph analysis results (bv-109)
type LabelPickerModel ¶ added in v0.10.3
type LabelPickerModel struct {
// contains filtered or unexported fields
}
LabelPickerModel provides a fuzzy search popup for quick label filtering
func NewLabelPickerModel ¶ added in v0.10.3
func NewLabelPickerModel(labels []string, counts map[string]int, theme Theme) LabelPickerModel
NewLabelPickerModel creates a new label picker with fuzzy search labels should be pre-sorted by count descending (from LabelExtractionResult.TopLabels)
func (*LabelPickerModel) FilteredCount ¶ added in v0.10.3
func (m *LabelPickerModel) FilteredCount() int
FilteredCount returns the number of filtered labels
func (*LabelPickerModel) InputValue ¶ added in v0.10.3
func (m *LabelPickerModel) InputValue() string
InputValue returns the current input value
func (*LabelPickerModel) MoveDown ¶ added in v0.10.3
func (m *LabelPickerModel) MoveDown()
MoveDown moves selection down
func (*LabelPickerModel) MoveUp ¶ added in v0.10.3
func (m *LabelPickerModel) MoveUp()
MoveUp moves selection up
func (*LabelPickerModel) Reset ¶ added in v0.10.3
func (m *LabelPickerModel) Reset()
Reset clears the input and resets selection
func (*LabelPickerModel) SelectedLabel ¶ added in v0.10.3
func (m *LabelPickerModel) SelectedLabel() string
SelectedLabel returns the currently selected label
func (*LabelPickerModel) SetLabels ¶ added in v0.10.3
func (m *LabelPickerModel) SetLabels(labels []string, counts map[string]int)
SetLabels updates the available labels with their counts
func (*LabelPickerModel) SetSize ¶ added in v0.10.3
func (m *LabelPickerModel) SetSize(width, height int)
SetSize updates the picker dimensions
func (*LabelPickerModel) UpdateInput ¶ added in v0.10.3
func (m *LabelPickerModel) UpdateInput(msg interface{})
UpdateInput processes a key message for the text input
func (*LabelPickerModel) View ¶ added in v0.10.3
func (m *LabelPickerModel) View() string
View renders the label picker overlay
type MarkdownRenderer ¶ added in v0.10.3
type MarkdownRenderer struct {
// contains filtered or unexported fields
}
MarkdownRenderer provides theme-aware markdown rendering using glamour. It detects the terminal's color scheme and uses appropriate styles.
func NewMarkdownRenderer ¶ added in v0.10.3
func NewMarkdownRenderer(width int) *MarkdownRenderer
NewMarkdownRenderer creates a new markdown renderer using built-in styles. It uses Dracula style for dark terminals and a light style for light terminals. Prefer NewMarkdownRendererWithTheme for consistent styling with the bv Theme.
func NewMarkdownRendererWithTheme ¶ added in v0.10.3
func NewMarkdownRendererWithTheme(width int, theme Theme) *MarkdownRenderer
NewMarkdownRendererWithTheme creates a markdown renderer using custom colors that match the provided Theme for visual consistency.
func (*MarkdownRenderer) IsDarkMode ¶ added in v0.10.3
func (mr *MarkdownRenderer) IsDarkMode() bool
IsDarkMode returns whether the renderer is using dark mode styling.
func (*MarkdownRenderer) Render ¶ added in v0.10.3
func (mr *MarkdownRenderer) Render(markdown string) (string, error)
Render converts markdown content to styled terminal output.
func (*MarkdownRenderer) SetWidth ¶ added in v0.10.3
func (mr *MarkdownRenderer) SetWidth(width int)
SetWidth updates the word wrap width and recreates the renderer. If the renderer was created with a theme, the theme is preserved. Width is only updated if the new renderer is created successfully.
func (*MarkdownRenderer) SetWidthWithTheme ¶ added in v0.10.3
func (mr *MarkdownRenderer) SetWidthWithTheme(width int, theme Theme)
SetWidthWithTheme updates width and recreates renderer with theme colors. This also updates the stored theme for future SetWidth calls. If width is the same but theme differs, the renderer is still recreated with the new theme. Falls back to built-in styles if custom theme fails.
type MetricInfo ¶
type MetricInfo struct {
Icon string
Title string
ShortDesc string
WhatIs string
WhyUseful string
HowToUse string
FormulaHint string
}
MetricInfo contains explanation for each metric
type MetricPanel ¶
type MetricPanel int
MetricPanel represents each panel type in the insights view
const ( PanelBottlenecks MetricPanel = iota PanelKeystones PanelInfluencers PanelHubs PanelAuthorities PanelCores PanelArticulation PanelSlack PanelCycles PanelPriority // Agent-first priority recommendations PanelCount // Sentinel for wrapping )
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Model is the main Bubble Tea model for the beads viewer
func NewModel ¶
NewModel creates a new Model from the given issues beadsPath is the path to the beads.jsonl file for live reload support
func (Model) CurrentContext ¶ added in v0.10.3
CurrentContext returns the current UI context identifier. This is used for context-sensitive help (e.g., double-tap CapsLock). Priority order: overlays → views → detail states → filter → default
func (*Model) EnableWorkspaceMode ¶
func (m *Model) EnableWorkspaceMode(info WorkspaceInfo)
EnableWorkspaceMode configures the model for workspace (multi-repo) view
func (Model) FilteredIssues ¶
FilteredIssues returns the currently visible issues (exposed for testing)
func (Model) FocusState ¶ added in v0.12.0
FocusState returns the current focus state as a string for testing (bv-5e5q). This enables testing focus transitions without exposing the internal focus type.
func (Model) IsActionableView ¶ added in v0.12.0
IsActionableView returns true if the actionable view is active (bv-5e5q).
func (Model) IsBoardView ¶ added in v0.12.0
IsBoardView returns true if the board view is active (bv-5e5q).
func (Model) IsGraphView ¶ added in v0.12.0
IsGraphView returns true if the graph view is active (bv-5e5q).
func (Model) IsHistoryView ¶ added in v0.12.0
IsHistoryView returns true if the history view is active (bv-5e5q).
func (Model) IsTimeTravelMode ¶
IsTimeTravelMode returns whether time-travel mode is active
func (Model) IsWorkspaceMode ¶
IsWorkspaceMode returns whether workspace mode is active
func (*Model) RenderDebugView ¶ added in v0.10.3
RenderDebugView renders a specific view for debugging purposes. This is used by --debug-render to capture TUI output without running interactively.
func (*Model) Stop ¶
func (m *Model) Stop()
Stop cleans up resources (file watcher, instance lock, background worker, etc.) Should be called when the program exits
func (Model) TimeTravelDiff ¶
func (m Model) TimeTravelDiff() *analysis.SnapshotDiff
TimeTravelDiff returns the current diff (nil if not in time-travel mode)
type Paragraph ¶ added in v0.10.4
type Paragraph struct {
Text string
}
Paragraph is a simple text paragraph
type Phase2ReadyMsg ¶
type Phase2ReadyMsg struct {
Stats *analysis.GraphStats // The stats that completed, to detect stale messages
Insights analysis.Insights // Precomputed insights for Phase 2 metrics
}
Phase2ReadyMsg is sent when async graph analysis Phase 2 completes
type Phase2UpdateMsg ¶ added in v0.12.1
type Phase2UpdateMsg struct {
DataHash string // Content hash to verify this matches current snapshot
}
Phase2UpdateMsg is sent when Phase 2 analysis completes. This allows the UI to update without waiting for full rebuild. The UI should check DataHash matches current snapshot before using.
type ProgressIndicator ¶ added in v0.10.4
ProgressIndicator shows a visual progress indicator (dots or bar style)
type ReadyTimeoutMsg ¶ added in v0.10.3
type ReadyTimeoutMsg struct{}
ReadyTimeoutMsg is sent after a short delay to ensure the UI becomes ready even if the terminal doesn't send WindowSizeMsg promptly (bv-7wl7)
type RecipePickerModel ¶
type RecipePickerModel struct {
// contains filtered or unexported fields
}
RecipePickerModel represents the recipe picker overlay
func NewRecipePickerModel ¶
func NewRecipePickerModel(recipes []recipe.Recipe, theme Theme) RecipePickerModel
NewRecipePickerModel creates a new recipe picker
func (*RecipePickerModel) MoveDown ¶
func (m *RecipePickerModel) MoveDown()
MoveDown moves selection down
func (*RecipePickerModel) RecipeCount ¶
func (m *RecipePickerModel) RecipeCount() int
RecipeCount returns the number of recipes
func (*RecipePickerModel) SelectedIndex ¶
func (m *RecipePickerModel) SelectedIndex() int
SelectedIndex returns the current selection index
func (*RecipePickerModel) SelectedRecipe ¶
func (m *RecipePickerModel) SelectedRecipe() *recipe.Recipe
SelectedRecipe returns the currently selected recipe
func (*RecipePickerModel) SetSize ¶
func (m *RecipePickerModel) SetSize(width, height int)
SetSize updates the picker dimensions
func (*RecipePickerModel) View ¶
func (m *RecipePickerModel) View() string
View renders the recipe picker overlay
type RepoPickerModel ¶ added in v0.10.3
type RepoPickerModel struct {
// contains filtered or unexported fields
}
RepoPickerModel represents the repository filter picker overlay (workspace mode).
func NewRepoPickerModel ¶ added in v0.10.3
func NewRepoPickerModel(repos []string, theme Theme) RepoPickerModel
NewRepoPickerModel creates a new repo picker. By default, all repos are selected.
func (*RepoPickerModel) MoveDown ¶ added in v0.10.3
func (m *RepoPickerModel) MoveDown()
MoveDown moves selection down.
func (*RepoPickerModel) MoveUp ¶ added in v0.10.3
func (m *RepoPickerModel) MoveUp()
MoveUp moves selection up.
func (*RepoPickerModel) SelectAll ¶ added in v0.10.3
func (m *RepoPickerModel) SelectAll()
SelectAll selects all repos.
func (RepoPickerModel) SelectedRepos ¶ added in v0.10.3
func (m RepoPickerModel) SelectedRepos() map[string]bool
SelectedRepos returns the selected repos as a map (repo -> true).
func (*RepoPickerModel) SetActiveRepos ¶ added in v0.10.3
func (m *RepoPickerModel) SetActiveRepos(active map[string]bool)
SetActiveRepos initializes selection from the currently active repo filter (nil = all).
func (*RepoPickerModel) SetSize ¶ added in v0.10.3
func (m *RepoPickerModel) SetSize(width, height int)
SetSize updates the picker dimensions.
func (*RepoPickerModel) ToggleSelected ¶ added in v0.10.3
func (m *RepoPickerModel) ToggleSelected()
ToggleSelected toggles the selected state of the current repo.
func (*RepoPickerModel) View ¶ added in v0.10.3
func (m *RepoPickerModel) View() string
View renders the repo picker overlay.
type Section ¶ added in v0.10.4
type Section struct {
Title string
}
Section is a styled section header with subtle underline decoration
type SemanticFilterResultMsg ¶ added in v0.10.3
SemanticFilterResultMsg is emitted when async semantic filter results are ready.
type SemanticIndexReadyMsg ¶ added in v0.10.3
type SemanticIndexReadyMsg struct {
Embedder search.Embedder
Index *search.VectorIndex
IndexPath string
Loaded bool
Stats search.IndexSyncStats
Error error
}
SemanticIndexReadyMsg is emitted when the semantic index build/update completes.
type SemanticScore ¶ added in v0.11.0
SemanticScore captures semantic/hybrid scoring details for a single issue.
type SemanticSearch ¶ added in v0.10.3
type SemanticSearch struct {
// contains filtered or unexported fields
}
func NewSemanticSearch ¶ added in v0.10.3
func NewSemanticSearch() *SemanticSearch
func (*SemanticSearch) ClearPending ¶ added in v0.10.3
func (s *SemanticSearch) ClearPending()
ClearPending clears the pending term (e.g., when user stops filtering)
func (*SemanticSearch) ClearScores ¶ added in v0.11.0
func (s *SemanticSearch) ClearScores()
ClearScores clears cached scores.
func (*SemanticSearch) ComputeSemanticResults ¶ added in v0.10.3
func (s *SemanticSearch) ComputeSemanticResults(term string) []list.Rank
ComputeSemanticResults computes semantic similarity results synchronously. This should be called from an async tea.Cmd, not from Filter.
func (*SemanticSearch) Filter ¶ added in v0.10.3
func (s *SemanticSearch) Filter(term string, targets []string) []list.Rank
Filter implements list.FilterFunc, returning ranks sorted by semantic similarity. This is non-blocking: returns cached results or fuzzy fallback immediately, and marks the term as pending for async computation.
func (*SemanticSearch) GetLastQueryTime ¶ added in v0.10.3
func (s *SemanticSearch) GetLastQueryTime() time.Time
GetLastQueryTime returns when the last filter query was made (for debouncing)
func (*SemanticSearch) GetPendingTerm ¶ added in v0.10.3
func (s *SemanticSearch) GetPendingTerm() string
GetPendingTerm returns the term awaiting async semantic computation, if any
func (*SemanticSearch) ResetCache ¶ added in v0.11.0
func (s *SemanticSearch) ResetCache()
ResetCache clears cached semantic results and scores.
func (*SemanticSearch) Scores ¶ added in v0.11.0
func (s *SemanticSearch) Scores(term string) (map[string]SemanticScore, bool)
Scores returns scores for a specific term if available.
func (*SemanticSearch) SetCachedResults ¶ added in v0.10.3
func (s *SemanticSearch) SetCachedResults(term string, results []list.Rank)
SetCachedResults stores semantic filter results and clears pending state if matching
func (*SemanticSearch) SetDocs ¶ added in v0.11.0
func (s *SemanticSearch) SetDocs(docs map[string]string)
func (*SemanticSearch) SetHybridConfig ¶ added in v0.11.0
func (s *SemanticSearch) SetHybridConfig(enabled bool, preset search.PresetName)
SetHybridConfig updates hybrid scoring configuration.
func (*SemanticSearch) SetIDs ¶ added in v0.10.3
func (s *SemanticSearch) SetIDs(ids []string)
func (*SemanticSearch) SetIndex ¶ added in v0.10.3
func (s *SemanticSearch) SetIndex(idx *search.VectorIndex, embedder search.Embedder)
func (*SemanticSearch) SetMetricsCache ¶ added in v0.11.0
func (s *SemanticSearch) SetMetricsCache(cache search.MetricsCache)
SetMetricsCache sets the metrics cache used for hybrid scoring.
func (*SemanticSearch) SetScores ¶ added in v0.11.0
func (s *SemanticSearch) SetScores(term string, scores map[string]SemanticScore)
SetScores stores the latest scores for a given term.
func (*SemanticSearch) Snapshot ¶ added in v0.10.3
func (s *SemanticSearch) Snapshot() semanticSearchSnapshot
type ShortcutsSidebar ¶ added in v0.10.3
type ShortcutsSidebar struct {
// contains filtered or unexported fields
}
ShortcutsSidebar provides a toggleable panel showing context-aware keyboard shortcuts Unlike the help overlay, this can remain visible while working (bv-3qi5)
func NewShortcutsSidebar ¶ added in v0.10.3
func NewShortcutsSidebar(theme Theme) ShortcutsSidebar
NewShortcutsSidebar creates a new shortcuts sidebar
func (*ShortcutsSidebar) ResetScroll ¶ added in v0.10.3
func (s *ShortcutsSidebar) ResetScroll()
ResetScroll resets scroll position to top
func (*ShortcutsSidebar) ScrollDown ¶ added in v0.10.3
func (s *ShortcutsSidebar) ScrollDown()
ScrollDown scrolls the sidebar content down
func (*ShortcutsSidebar) ScrollPageDown ¶ added in v0.10.3
func (s *ShortcutsSidebar) ScrollPageDown()
ScrollPageDown scrolls down by a page
func (*ShortcutsSidebar) ScrollPageUp ¶ added in v0.10.3
func (s *ShortcutsSidebar) ScrollPageUp()
ScrollPageUp scrolls up by a page
func (*ShortcutsSidebar) ScrollUp ¶ added in v0.10.3
func (s *ShortcutsSidebar) ScrollUp()
ScrollUp scrolls the sidebar content up
func (*ShortcutsSidebar) SetContext ¶ added in v0.10.3
func (s *ShortcutsSidebar) SetContext(ctx string)
SetContext updates the current context for filtering shortcuts
func (*ShortcutsSidebar) SetSize ¶ added in v0.10.3
func (s *ShortcutsSidebar) SetSize(width, height int)
SetSize updates the sidebar dimensions
func (*ShortcutsSidebar) View ¶ added in v0.10.3
func (s *ShortcutsSidebar) View() string
View renders the sidebar
func (*ShortcutsSidebar) Width ¶ added in v0.10.3
func (s *ShortcutsSidebar) Width() int
Width returns the fixed width of the sidebar
type ShowTutorialMsg ¶ added in v0.10.3
type ShowTutorialMsg struct {
ContextOnly bool // If true, show context-specific help only
Context string // Current context identifier (used when ContextOnly is true)
}
ShowTutorialMsg signals the main model to show the tutorial.
type SnapshotBuilder ¶ added in v0.12.1
type SnapshotBuilder struct {
// contains filtered or unexported fields
}
SnapshotBuilder constructs DataSnapshots from raw data. This is used by the BackgroundWorker to build new snapshots.
func NewSnapshotBuilder ¶ added in v0.12.1
func NewSnapshotBuilder(issues []model.Issue) *SnapshotBuilder
NewSnapshotBuilder creates a builder for constructing a DataSnapshot.
func (*SnapshotBuilder) Build ¶ added in v0.12.1
func (b *SnapshotBuilder) Build() *DataSnapshot
Build constructs the final immutable DataSnapshot. This performs all necessary computations that should happen in the background. Uses AnalyzeAsync() so Phase 2 metrics compute in background - check Phase2Ready or call GetGraphStats().WaitForPhase2() if you need Phase 2 data immediately.
func (*SnapshotBuilder) WithAnalysis ¶ added in v0.12.1
func (b *SnapshotBuilder) WithAnalysis(a *analysis.GraphStats) *SnapshotBuilder
WithAnalysis sets the pre-computed analysis (for when we have cached results).
func (*SnapshotBuilder) WithBuildConfig ¶ added in v0.13.0
func (b *SnapshotBuilder) WithBuildConfig(cfg snapshotBuildConfig) *SnapshotBuilder
func (*SnapshotBuilder) WithPreviousSnapshot ¶ added in v0.13.0
func (b *SnapshotBuilder) WithPreviousSnapshot(prev *DataSnapshot, diff *analysis.IssueDiff) *SnapshotBuilder
WithPreviousSnapshot enables incremental list-item rebuilds when possible.
func (*SnapshotBuilder) WithRecipe ¶ added in v0.13.0
func (b *SnapshotBuilder) WithRecipe(r *recipe.Recipe) *SnapshotBuilder
type SnapshotErrorMsg ¶ added in v0.12.1
type SnapshotErrorMsg struct {
Err error
Recoverable bool // True if we expect to recover on next file change
}
SnapshotErrorMsg is sent to the UI when snapshot building fails.
type SnapshotReadyMsg ¶ added in v0.12.1
type SnapshotReadyMsg struct {
Snapshot *DataSnapshot
FileChangeAt time.Time
SentAt time.Time
SnapshotVer uint64
QueueDepth int64
CoalesceCount int64
}
SnapshotReadyMsg is sent to the UI when a new snapshot is ready.
type SortMode ¶ added in v0.10.3
type SortMode int
SortMode represents the current list sorting mode (bv-3ita)
type StatusFlow ¶ added in v0.10.4
type StatusFlow struct {
Steps []FlowStep
}
StatusFlow renders a status flow diagram using lipgloss boxes with elegant arrows
type StructuredTutorialPage ¶ added in v0.10.4
type StructuredTutorialPage struct {
ID string
Title string
Section string
Elements []TutorialElement
Contexts []string // Which view contexts this page applies to (empty = all)
}
StructuredTutorialPage represents a tutorial page with typed elements
type StyledTable ¶ added in v0.10.4
StyledTable renders a full table with headers using lipgloss/table
type SwimLaneMode ¶ added in v0.10.3
type SwimLaneMode int
SwimLaneMode determines how cards are grouped into columns (bv-wjs0)
const ( SwimByStatus SwimLaneMode = iota // Default: Open | In Progress | Blocked | Closed SwimByPriority // P0 Critical | P1 High | P2 Medium | P3+ Other SwimByType // Bug | Feature | Task | Epic )
type Theme ¶
type Theme struct {
Renderer *lipgloss.Renderer
// Colors
Primary lipgloss.AdaptiveColor
Secondary lipgloss.AdaptiveColor
Subtext lipgloss.AdaptiveColor
// Status
Open lipgloss.AdaptiveColor
InProgress lipgloss.AdaptiveColor
Blocked lipgloss.AdaptiveColor
Deferred lipgloss.AdaptiveColor
Pinned lipgloss.AdaptiveColor
Hooked lipgloss.AdaptiveColor
Closed lipgloss.AdaptiveColor
Tombstone lipgloss.AdaptiveColor
// Types
Bug lipgloss.AdaptiveColor
Feature lipgloss.AdaptiveColor
Task lipgloss.AdaptiveColor
Epic lipgloss.AdaptiveColor
Chore lipgloss.AdaptiveColor
// UI Elements
Border lipgloss.AdaptiveColor
Highlight lipgloss.AdaptiveColor
Muted lipgloss.AdaptiveColor
// Styles
Base lipgloss.Style
Selected lipgloss.Style
Column lipgloss.Style
Header lipgloss.Style
// Pre-computed delegate styles (bv-o4cj optimization)
// These are created once at startup instead of per-frame
MutedText lipgloss.Style // Age, muted info
InfoText lipgloss.Style // Comments
InfoBold lipgloss.Style // Search scores
SecondaryText lipgloss.Style // ID, assignee
PrimaryBold lipgloss.Style // Selection indicator
PriorityUpArrow lipgloss.Style // Priority hint ↑
PriorityDownArrow lipgloss.Style // Priority hint ↓
TriageStar lipgloss.Style // Top pick ⭐
TriageUnblocks lipgloss.Style // Unblocks indicator 🔓
TriageUnblocksAlt lipgloss.Style // Secondary unblocks ↪
}
func DefaultTheme ¶
DefaultTheme returns the standard Dracula-inspired theme (adaptive)
func (Theme) GetStatusColor ¶
func (t Theme) GetStatusColor(s string) lipgloss.AdaptiveColor
func (Theme) GetTypeIcon ¶
func (t Theme) GetTypeIcon(typ string) (string, lipgloss.AdaptiveColor)
type TimelineEntry ¶ added in v0.10.3
type TimelineEntry struct {
Timestamp time.Time
EntryType timelineEntryType
Label string // Event type name or commit SHA
Detail string // Full message or event detail
Confidence float64 // For commits: correlation confidence (0-1)
EventType string // For events: "created", "claimed", "closed", etc.
// Session fields (bv-pr1l)
SessionAgent string // For sessions: "claude", "cursor", etc.
SessionMessageCount int // For sessions: number of messages in session
SessionPath string // For sessions: path to session file
SessionScore float64 // For sessions: correlation score
}
TimelineEntry represents a single entry in the timeline visualization (bv-1x6o)
type Tip ¶ added in v0.10.4
type Tip struct {
Text string
}
Tip renders a highlighted tip/note box with lightbulb icon
type Tree ¶ added in v0.10.4
type Tree struct {
Root string
Children []TutorialTreeNode
}
Tree renders a hierarchical tree structure using lipgloss/tree
type TreeModel ¶ added in v0.12.0
type TreeModel struct {
// contains filtered or unexported fields
}
TreeModel manages the hierarchical tree view state
func NewTreeModel ¶ added in v0.12.0
NewTreeModel creates an empty tree model
func (*TreeModel) Build ¶ added in v0.12.0
Build constructs the tree from issues using parent-child dependencies. Implementation for bv-j3ck.
func (*TreeModel) BuildFromSnapshot ¶ added in v0.13.0
func (t *TreeModel) BuildFromSnapshot(snapshot *DataSnapshot)
BuildFromSnapshot wires the tree view to precomputed tree data from a DataSnapshot. This avoids building the parent/child structure on the UI thread when the snapshot already contains it (bv-t435).
func (*TreeModel) CollapseAll ¶ added in v0.12.0
func (t *TreeModel) CollapseAll()
CollapseAll collapses all nodes in the tree.
func (*TreeModel) CollapseOrJumpToParent ¶ added in v0.12.0
func (t *TreeModel) CollapseOrJumpToParent()
CollapseOrJumpToParent handles the ← / h key: - If node has children and is expanded: collapse it - If node is collapsed or is a leaf: jump to parent
func (*TreeModel) ExpandAll ¶ added in v0.12.0
func (t *TreeModel) ExpandAll()
ExpandAll expands all nodes in the tree.
func (*TreeModel) ExpandOrMoveToChild ¶ added in v0.12.0
func (t *TreeModel) ExpandOrMoveToChild()
ExpandOrMoveToChild handles the → / l key: - If node has children and is collapsed: expand it - If node has children and is expanded: move to first child - If node is a leaf: do nothing
func (*TreeModel) GetPriorityColor ¶ added in v0.12.0
func (t *TreeModel) GetPriorityColor(priority int) lipgloss.AdaptiveColor
GetPriorityColor returns the color for a priority level.
func (*TreeModel) GetSelectedID ¶ added in v0.12.0
GetSelectedID returns the ID of the currently selected issue, or empty string.
func (*TreeModel) GetViewportOffset ¶ added in v0.12.0
GetViewportOffset returns the current viewport offset (for testing/debugging).
func (*TreeModel) JumpToBottom ¶ added in v0.12.0
func (t *TreeModel) JumpToBottom()
JumpToBottom moves cursor to the last node.
func (*TreeModel) JumpToParent ¶ added in v0.12.0
func (t *TreeModel) JumpToParent()
JumpToParent moves cursor to the parent of the currently selected node. If already at a root node, does nothing.
func (*TreeModel) JumpToTop ¶ added in v0.12.0
func (t *TreeModel) JumpToTop()
JumpToTop moves cursor to the first node.
func (*TreeModel) MoveDown ¶ added in v0.12.0
func (t *TreeModel) MoveDown()
MoveDown moves the cursor down in the flat list.
func (*TreeModel) MoveUp ¶ added in v0.12.0
func (t *TreeModel) MoveUp()
MoveUp moves the cursor up in the flat list.
func (*TreeModel) PageDown ¶ added in v0.12.0
func (t *TreeModel) PageDown()
PageDown moves cursor down by half a viewport.
func (*TreeModel) PageUp ¶ added in v0.12.0
func (t *TreeModel) PageUp()
PageUp moves cursor up by half a viewport.
func (*TreeModel) SelectByID ¶ added in v0.12.0
SelectByID moves cursor to the node with the given issue ID. Returns true if found, false otherwise. Useful for preserving cursor position after rebuild.
func (*TreeModel) SelectedIssue ¶ added in v0.12.0
SelectedIssue returns the currently selected issue, or nil if none.
func (*TreeModel) SelectedNode ¶ added in v0.12.0
func (t *TreeModel) SelectedNode() *IssueTreeNode
SelectedNode returns the currently selected tree node, or nil if none.
func (*TreeModel) SetBeadsDir ¶ added in v0.12.0
SetBeadsDir sets the beads directory for persistence (bv-19vz). This should be called before any expand/collapse operations if a custom beads directory is desired. If not called, defaults to ".beads" in cwd.
func (*TreeModel) SetSize ¶ added in v0.12.0
SetSize updates the available dimensions for the tree view
func (*TreeModel) ToggleExpand ¶ added in v0.12.0
func (t *TreeModel) ToggleExpand()
ToggleExpand expands or collapses the currently selected node.
type TreeState ¶ added in v0.12.0
type TreeState struct {
Version int `json:"version"` // Schema version (currently 1)
Expanded map[string]bool `json:"expanded"` // Issue ID -> explicitly set state
}
TreeState represents the persistent state of the tree view (bv-zv7p). This is saved to .beads/tree-state.json to preserve expand/collapse state across sessions.
File format (JSON):
{
"version": 1,
"expanded": {
"bv-123": true, // explicitly expanded
"bv-456": false // explicitly collapsed
}
}
Design notes:
- Only stores explicit user changes; nodes not in the map use default behavior
- Default: expanded for depth < 2, collapsed otherwise
- Version field enables future schema migrations
- Corrupted/missing file = use defaults (graceful degradation)
func DefaultTreeState ¶ added in v0.12.0
func DefaultTreeState() *TreeState
DefaultTreeState returns a new TreeState with sensible defaults
type TreeViewMode ¶ added in v0.12.0
type TreeViewMode int
TreeViewMode determines what relationships are displayed
const ( TreeModeHierarchy TreeViewMode = iota // parent-child deps (default) TreeModeBlocking // blocking deps (future) )
type TutorialElement ¶ added in v0.10.4
TutorialElement is the interface for renderable tutorial content
type TutorialKeyBindings ¶ added in v0.10.3
type TutorialKeyBindings struct {
DirectTutorial string // Key for direct tutorial access (default: `)
ContextHelp string // Key for direct context help (default: ~)
HelpModalSpace bool // Whether Space in help modal opens tutorial
DoubleTapEnable bool // Whether double-tap detection is enabled
}
TutorialKeyBindings holds configurable key bindings for tutorial access.
func DefaultTutorialKeyBindings ¶ added in v0.10.3
func DefaultTutorialKeyBindings() TutorialKeyBindings
DefaultTutorialKeyBindings returns the default key binding configuration.
func (TutorialKeyBindings) IsContextHelp ¶ added in v0.10.3
func (b TutorialKeyBindings) IsContextHelp(msg tea.KeyMsg) bool
IsContextHelp checks if the key matches the context help binding.
func (TutorialKeyBindings) IsDirectTutorial ¶ added in v0.10.3
func (b TutorialKeyBindings) IsDirectTutorial(msg tea.KeyMsg) bool
IsDirectTutorial checks if the key matches the direct tutorial binding.
type TutorialModel ¶ added in v0.10.3
type TutorialModel struct {
// contains filtered or unexported fields
}
TutorialModel manages the tutorial overlay state.
func NewTutorialModel ¶ added in v0.10.3
func NewTutorialModel(theme Theme) TutorialModel
NewTutorialModel creates a new tutorial model with default pages.
func (TutorialModel) CenterTutorial ¶ added in v0.10.3
func (m TutorialModel) CenterTutorial(termWidth, termHeight int) string
CenterTutorial returns the tutorial view centered in the terminal.
func (TutorialModel) CurrentPageID ¶ added in v0.10.3
func (m TutorialModel) CurrentPageID() string
CurrentPageID returns the ID of the current page.
func (*TutorialModel) HasViewedPage ¶ added in v0.10.3
func (m *TutorialModel) HasViewedPage(pageID string) bool
HasViewedPage returns whether a page has been viewed (from persisted data).
func (TutorialModel) Init ¶ added in v0.10.3
func (m TutorialModel) Init() tea.Cmd
Init initializes the tutorial model.
func (TutorialModel) IsComplete ¶ added in v0.10.3
func (m TutorialModel) IsComplete() bool
IsComplete returns true if all pages have been viewed.
func (*TutorialModel) JumpToPage ¶ added in v0.10.3
func (m *TutorialModel) JumpToPage(index int)
JumpToPage jumps to a specific page index.
func (*TutorialModel) JumpToSection ¶ added in v0.10.3
func (m *TutorialModel) JumpToSection(sectionID string)
JumpToSection jumps to the first page in a section.
func (*TutorialModel) LoadProgress ¶ added in v0.10.3
func (m *TutorialModel) LoadProgress()
LoadProgress loads saved progress into the tutorial model.
func (*TutorialModel) MarkViewed ¶ added in v0.10.3
func (m *TutorialModel) MarkViewed(pageID string)
MarkViewed marks a page as viewed.
func (*TutorialModel) NextPage ¶ added in v0.10.3
func (m *TutorialModel) NextPage()
NextPage advances to the next page.
func (*TutorialModel) PrevPage ¶ added in v0.10.3
func (m *TutorialModel) PrevPage()
PrevPage goes to the previous page.
func (TutorialModel) Progress ¶ added in v0.10.3
func (m TutorialModel) Progress() map[string]bool
Progress returns the progress map for persistence.
func (*TutorialModel) ResetClose ¶ added in v0.10.3
func (m *TutorialModel) ResetClose()
ResetClose resets the close flag (call after handling close) (bv-wdsd).
func (*TutorialModel) SaveProgress ¶ added in v0.10.3
func (m *TutorialModel) SaveProgress() error
SaveProgress saves current tutorial progress (call on exit).
func (*TutorialModel) SetContext ¶ added in v0.10.3
func (m *TutorialModel) SetContext(ctx string)
SetContext sets the current view context for filtering.
func (*TutorialModel) SetContextMode ¶ added in v0.10.3
func (m *TutorialModel) SetContextMode(enabled bool)
SetContextMode enables or disables context-based filtering.
func (*TutorialModel) SetProgress ¶ added in v0.10.3
func (m *TutorialModel) SetProgress(progress map[string]bool)
SetProgress restores progress from persistence.
func (*TutorialModel) SetSize ¶ added in v0.10.3
func (m *TutorialModel) SetSize(width, height int)
SetSize sets the tutorial dimensions and updates the markdown renderer.
func (TutorialModel) ShouldClose ¶ added in v0.10.3
func (m TutorialModel) ShouldClose() bool
ShouldClose returns true if user requested to close the tutorial (bv-wdsd).
func (TutorialModel) Update ¶ added in v0.10.3
func (m TutorialModel) Update(msg tea.Msg) (TutorialModel, tea.Cmd)
Update handles keyboard input for the tutorial with focus management (bv-wdsd).
func (TutorialModel) View ¶ added in v0.10.3
func (m TutorialModel) View() string
View renders the tutorial overlay.
type TutorialPage ¶ added in v0.10.3
type TutorialPage struct {
ID string // Unique identifier (e.g., "intro", "navigation")
Title string // Page title displayed in header
Content string // Markdown content
Section string // Parent section for TOC grouping
Contexts []string // Which view contexts this page applies to (empty = all)
}
TutorialPage represents a single page of tutorial content.
type TutorialProgress ¶ added in v0.10.3
type TutorialProgress struct {
ViewedPages map[string]bool `json:"viewed_pages"` // page ID → viewed
LastPageID string `json:"last_page_id"` // Resume point
LastViewedTime time.Time `json:"last_viewed_time"` // When last viewed
CompletedOnce bool `json:"completed_once"` // Has seen all pages at least once
}
TutorialProgress tracks which tutorial pages have been viewed. This persists across sessions so users can see their progress.
type TutorialTreeNode ¶ added in v0.12.0
type TutorialTreeNode struct {
Label string
Children []TutorialTreeNode
}
TutorialTreeNode is a simple tree node for tutorial rendering. Named to avoid collision with TreeNode in tree.go (bv-gllx feature).
type TutorialTrigger ¶ added in v0.10.3
type TutorialTrigger int
TutorialTrigger represents what action to take when tutorial key is pressed.
const ( TriggerNone TutorialTrigger = iota TriggerFullTutorial TriggerContextHelp )
func (TutorialTrigger) String ¶ added in v0.10.3
func (t TutorialTrigger) String() string
String returns a human-readable description of the trigger.
type UpdateCompleteMsg ¶ added in v0.11.3
type UpdateCompleteMsg struct {
Success bool
Message string
NewVersion string
BackupPath string
RequireRoot bool
}
UpdateCompleteMsg is sent when the update completes
type UpdateModal ¶ added in v0.11.3
type UpdateModal struct {
// contains filtered or unexported fields
}
UpdateModal displays the update confirmation and progress.
func NewUpdateModal ¶ added in v0.11.3
func NewUpdateModal(newVersion, releaseURL string, theme Theme) UpdateModal
NewUpdateModal creates a new update modal.
func (UpdateModal) CenterModal ¶ added in v0.11.3
func (m UpdateModal) CenterModal(termWidth, termHeight int) string
CenterModal returns the modal view centered in the given dimensions.
func (UpdateModal) IsCancelled ¶ added in v0.11.3
func (m UpdateModal) IsCancelled() bool
IsCancelled returns true if user selected Cancel
func (UpdateModal) IsComplete ¶ added in v0.11.3
func (m UpdateModal) IsComplete() bool
IsComplete returns true if the update is done (success or error)
func (UpdateModal) IsConfirming ¶ added in v0.11.3
func (m UpdateModal) IsConfirming() bool
IsConfirming returns true if the modal is in confirm state
func (UpdateModal) IsInProgress ¶ added in v0.11.3
func (m UpdateModal) IsInProgress() bool
IsInProgress returns true if the update is in progress
func (*UpdateModal) SetSize ¶ added in v0.11.3
func (m *UpdateModal) SetSize(width, height int)
SetSize sets the modal dimensions based on terminal size.
func (UpdateModal) Update ¶ added in v0.11.3
func (m UpdateModal) Update(msg tea.Msg) (UpdateModal, tea.Cmd)
Update handles input for the modal.
func (UpdateModal) View ¶ added in v0.11.3
func (m UpdateModal) View() string
View renders the modal.
type UpdateProgress ¶ added in v0.11.3
UpdateProgress represents progress during download
type UpdateProgressMsg ¶ added in v0.11.3
type UpdateProgressMsg struct {
Progress UpdateProgress
}
UpdateProgressMsg is sent during the update process
type UpdateState ¶ added in v0.11.3
type UpdateState int
UpdateState represents the current state of the update process
const ( UpdateStateIdle UpdateState = iota UpdateStateConfirm UpdateStateDownloading UpdateStateVerifying UpdateStateInstalling UpdateStateSuccess UpdateStateError )
type VelocityComparisonModel ¶ added in v0.10.3
type VelocityComparisonModel struct {
// contains filtered or unexported fields
}
VelocityComparisonModel shows side-by-side velocity comparison for all labels
func NewVelocityComparisonModel ¶ added in v0.10.3
func NewVelocityComparisonModel(theme Theme) VelocityComparisonModel
NewVelocityComparisonModel creates a new velocity comparison view
func (*VelocityComparisonModel) DataCount ¶ added in v0.10.3
func (m *VelocityComparisonModel) DataCount() int
DataCount returns the number of labels
func (*VelocityComparisonModel) MoveDown ¶ added in v0.10.3
func (m *VelocityComparisonModel) MoveDown()
MoveDown moves cursor down
func (*VelocityComparisonModel) MoveUp ¶ added in v0.10.3
func (m *VelocityComparisonModel) MoveUp()
MoveUp moves cursor up
func (*VelocityComparisonModel) SelectedLabel ¶ added in v0.10.3
func (m *VelocityComparisonModel) SelectedLabel() string
SelectedLabel returns the currently selected label
func (*VelocityComparisonModel) SetData ¶ added in v0.10.3
func (m *VelocityComparisonModel) SetData(issues []model.Issue)
SetData updates the view with computed velocity data
func (*VelocityComparisonModel) SetSize ¶ added in v0.10.3
func (m *VelocityComparisonModel) SetSize(width, height int)
SetSize updates the view dimensions
func (*VelocityComparisonModel) View ¶ added in v0.10.3
func (m *VelocityComparisonModel) View() string
View renders the velocity comparison table
type Warning ¶ added in v0.10.4
type Warning struct {
Text string
}
Warning renders a warning box with alert styling
type WorkerConfig ¶ added in v0.12.1
type WorkerConfig struct {
BeadsPath string
DebounceDelay time.Duration
MessageBuffer int // Buffer size for worker -> UI messages (default: 8)
IdleGC *IdleGCConfig
// Watchdog configuration (bv-03h1). Zero values use defaults.
HeartbeatInterval time.Duration // default: 5s
WatchdogInterval time.Duration // default: 10s
HeartbeatTimeout time.Duration // default: 30s
ProcessingTimeout time.Duration // default: 30s
MaxRecoveries int // default: 3
}
WorkerConfig configures the BackgroundWorker.
type WorkerError ¶ added in v0.12.1
type WorkerError struct {
Phase string // "load", "parse", "analyze_phase1", "analyze_phase2"
Cause error // The underlying error
Time time.Time // When the error occurred
Retries int // Number of retry attempts
}
WorkerError wraps errors with phase and retry context.
func (WorkerError) Error ¶ added in v0.12.1
func (e WorkerError) Error() string
func (WorkerError) Unwrap ¶ added in v0.12.1
func (e WorkerError) Unwrap() error
type WorkerHealth ¶ added in v0.13.0
type WorkerLogLevel ¶ added in v0.13.0
type WorkerLogLevel int
WorkerLogLevel controls background worker log verbosity.
const ( LogLevelNone WorkerLogLevel = iota LogLevelError LogLevelWarn LogLevelInfo LogLevelDebug LogLevelTrace )
func (WorkerLogLevel) String ¶ added in v0.13.0
func (l WorkerLogLevel) String() string
type WorkerMetrics ¶ added in v0.13.0
type WorkerMetrics struct {
ProcessingCount uint64
ProcessingDuration time.Duration
Phase1Duration time.Duration
Phase2Duration time.Duration
CoalesceCount int64
QueueDepth int64
SnapshotVersion uint64
SnapshotSizeBytes int64
PoolHits uint64
PoolMisses uint64
GCPauseDelta time.Duration
SwapLatency time.Duration
UIUpdateLatency time.Duration
LastFileChangeAt time.Time
LastSnapshotReadyAt time.Time
IncrementalListCount uint64
FullListCount uint64
IncrementalListRatio float64
}
WorkerMetrics captures the most recent metrics snapshot.
type WorkerState ¶ added in v0.12.1
type WorkerState int
WorkerState represents the current state of the background worker.
const ( // WorkerIdle means the worker is waiting for file changes. WorkerIdle WorkerState = iota // WorkerProcessing means the worker is building a new snapshot. WorkerProcessing // WorkerStopped means the worker has been stopped. WorkerStopped )
Source Files
¶
- actionable.go
- agent_prompt_modal.go
- attention.go
- background_worker.go
- board.go
- capslock.go
- cass_session_modal.go
- context.go
- context_help.go
- delegate.go
- flow_matrix.go
- graph.go
- helpers.go
- history.go
- insights.go
- item.go
- label_dashboard.go
- label_picker.go
- markdown.go
- model.go
- recipe_picker.go
- repo_picker.go
- semantic_search.go
- shortcuts_sidebar.go
- snapshot.go
- sprint_view.go
- styles.go
- theme.go
- tree.go
- tutorial.go
- tutorial_components.go
- tutorial_content.go
- tutorial_progress.go
- update_modal.go
- velocity_comparison.go
- visuals.go
- workspace_repos.go