Documentation
¶
Index ¶
- Constants
- type ActivityItem
- type IssueDetailsMsg
- type MarkdownRenderedMsg
- type ModalEntry
- type Model
- func (m *Model) Close() error
- func (m *Model) CurrentModal() *ModalEntry
- func (m Model) Init() tea.Cmd
- func (m Model) ModalBreadcrumb() string
- func (m Model) ModalDepth() int
- func (m Model) ModalOpen() bool
- func (m Model) ModalSourcePanel() Panel
- func (m Model) SelectedIssueID(panel Panel) string
- func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)
- func (m Model) View() string
- type Panel
- type RecentHandoff
- type RefreshDataMsg
- type SortMode
- type StatsData
- type StatsDataMsg
- type TaskListCategory
- type TaskListData
- type TaskListRow
- type TickMsg
Constants ¶
const MinHeight = 15
MinHeight is the minimum terminal height for proper display
const MinWidth = 40
MinWidth is the minimum terminal width for proper display
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActivityItem ¶
type ActivityItem struct {
Timestamp time.Time
SessionID string
Type string // "log", "action", "comment"
IssueID string
Message string
LogType models.LogType // for logs
Action models.ActionType // for actions
}
ActivityItem represents a unified activity item (log, action, or comment)
type IssueDetailsMsg ¶
type IssueDetailsMsg struct {
IssueID string
Issue *models.Issue
Handoff *models.Handoff
Logs []models.Log
BlockedBy []models.Issue // Dependencies (issues blocking this one)
Blocks []models.Issue // Dependents (issues blocked by this one)
EpicTasks []models.Issue // Child tasks (when issue is an epic)
ParentEpic *models.Issue // Parent epic (when issue.ParentID is set)
Error error
}
IssueDetailsMsg carries fetched issue details for the modal
type MarkdownRenderedMsg ¶
MarkdownRenderedMsg carries pre-rendered markdown for the modal
type ModalEntry ¶ added in v0.4.9
type ModalEntry struct {
// Core
IssueID string
SourcePanel Panel // Only meaningful for base entry (depth 1)
// Display
Scroll int
// Async data
Loading bool
Error error
Issue *models.Issue
Handoff *models.Handoff
Logs []models.Log
BlockedBy []models.Issue
Blocks []models.Issue
DescRender string
AcceptRender string
// Epic-specific (when Issue.Type == "epic")
EpicTasks []models.Issue
EpicTasksCursor int
TaskSectionFocused bool
// Parent epic (when issue has ParentID pointing to an epic)
ParentEpic *models.Issue
ParentEpicFocused bool
}
ModalEntry represents a single modal in the stack
type Model ¶
type Model struct {
// Database and session
DB *db.DB
SessionID string
// Window dimensions
Width int
Height int
// Panel data
FocusedIssue *models.Issue
InProgress []models.Issue
Activity []ActivityItem
TaskList TaskListData
RecentHandoffs []RecentHandoff // Handoffs since monitor started
ActiveSessions []string // Sessions with recent activity
// UI state
ActivePanel Panel
ScrollOffset map[Panel]int
Cursor map[Panel]int // Per-panel cursor position (selected row)
SelectedID map[Panel]string // Per-panel selected issue ID (preserved across refresh)
ShowHelp bool
ShowTDQHelp bool // Show TDQ query syntax help (when in search mode)
LastRefresh time.Time
StartedAt time.Time // When monitor started, to track new handoffs
Err error // Last error, if any
Embedded bool // When true, skip footer (embedded in sidecar)
// Flattened rows for selection
TaskListRows []TaskListRow // Flattened task list for selection
CurrentWorkRows []string // Issue IDs for current work panel (focused + in-progress)
// Modal stack for stacking modals (empty = no modal open)
ModalStack []ModalEntry
// Search state
SearchMode bool // Whether search mode is active
SearchQuery string // Current search query
IncludeClosed bool // Whether to include closed tasks
SortMode SortMode // Task list sort order
// Confirmation dialog state
ConfirmOpen bool
ConfirmAction string // "delete"
ConfirmIssueID string
ConfirmTitle string
// Stats modal state
StatsOpen bool
StatsLoading bool
StatsData *StatsData
StatsScroll int
StatsError error
// Configuration
RefreshInterval time.Duration
// Keymap registry for keyboard shortcuts
Keymap *keymap.Registry
}
Model is the main Bubble Tea model for the monitor TUI
func NewEmbedded ¶
NewEmbedded creates a monitor model for embedding in external applications. It opens the database and creates/gets a session automatically. The caller must call Close() when done to release resources.
func (*Model) Close ¶
Close releases resources held by an embedded monitor. Only call this if the model was created with NewEmbedded.
func (*Model) CurrentModal ¶ added in v0.4.9
func (m *Model) CurrentModal() *ModalEntry
CurrentModal returns a pointer to the current (top) modal entry, or nil if none
func (Model) ModalBreadcrumb ¶ added in v0.4.9
ModalBreadcrumb returns a breadcrumb string for the modal stack
func (Model) ModalDepth ¶ added in v0.4.9
ModalDepth returns the current modal stack depth (0 = no modal)
func (Model) ModalSourcePanel ¶
ModalSourcePanel returns the source panel of the base modal (depth 1)
func (Model) SelectedIssueID ¶
SelectedIssueID returns the issue ID of the currently selected row in a panel
type RecentHandoff ¶
RecentHandoff represents a recent handoff for display
type RefreshDataMsg ¶
type RefreshDataMsg struct {
FocusedIssue *models.Issue
InProgress []models.Issue
Activity []ActivityItem
TaskList TaskListData
RecentHandoffs []RecentHandoff
ActiveSessions []string
Timestamp time.Time
}
RefreshDataMsg carries refreshed data
type SortMode ¶ added in v0.4.9
type SortMode int
SortMode represents task list sorting
func (SortMode) ToDBOptions ¶ added in v0.4.9
ToDBOptions returns SortBy and SortDesc for ListIssuesOptions
type StatsData ¶
type StatsData struct {
ExtendedStats *models.ExtendedStats
Error error
}
StatsData holds statistics for the stats modal
type StatsDataMsg ¶
StatsDataMsg carries fetched stats data
func FetchStats ¶
func FetchStats(database *db.DB) StatsDataMsg
FetchStats retrieves extended statistics for the stats modal
type TaskListCategory ¶
type TaskListCategory string
TaskListCategory represents the category of a task list row
const ( CategoryReviewable TaskListCategory = "REVIEW" CategoryReady TaskListCategory = "READY" CategoryBlocked TaskListCategory = "BLOCKED" CategoryClosed TaskListCategory = "CLOSED" )
type TaskListData ¶
type TaskListData struct {
Ready []models.Issue
Reviewable []models.Issue
Blocked []models.Issue
Closed []models.Issue
}
TaskListData holds categorized issues for the task list panel
type TaskListRow ¶
type TaskListRow struct {
Issue models.Issue
Category TaskListCategory
}
TaskListRow represents a single selectable row in the task list panel