monitor

package
v0.3.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2025 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const MinHeight = 15

MinHeight is the minimum terminal height for proper display

View Source
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)
	Error     error
}

IssueDetailsMsg carries fetched issue details for the modal

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
	LastRefresh  time.Time
	StartedAt    time.Time // When monitor started, to track new handoffs
	Err          error     // Last error, if any

	// Flattened rows for selection
	TaskListRows    []TaskListRow // Flattened task list for selection
	CurrentWorkRows []string      // Issue IDs for current work panel (focused + in-progress)

	// Modal state for issue details
	ModalOpen        bool
	ModalIssueID     string
	ModalSourcePanel Panel // Panel the modal was opened from (for navigation)
	ModalScroll      int
	ModalLoading     bool
	ModalError       error
	ModalIssue       *models.Issue
	ModalHandoff     *models.Handoff
	ModalLogs        []models.Log
	ModalBlockedBy   []models.Issue // Dependencies (issues blocking this one)
	ModalBlocks      []models.Issue // Dependents (issues blocked by this one)

	// Search state
	SearchMode    bool   // Whether search mode is active
	SearchQuery   string // Current search query
	IncludeClosed bool   // Whether to include closed tasks

	// Confirmation dialog state
	ConfirmOpen    bool
	ConfirmAction  string // "delete"
	ConfirmIssueID string
	ConfirmTitle   string

	// Configuration
	RefreshInterval time.Duration
}

Model is the main Bubble Tea model for the monitor TUI

func NewModel

func NewModel(database *db.DB, sessionID string, interval time.Duration) Model

NewModel creates a new monitor model

func (Model) Init

func (m Model) Init() tea.Cmd

Init implements tea.Model

func (Model) SelectedIssueID

func (m Model) SelectedIssueID(panel Panel) string

SelectedIssueID returns the issue ID of the currently selected row in a panel

func (Model) Update

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)

Update implements tea.Model

func (Model) View

func (m Model) View() string

View implements tea.Model

type Panel

type Panel int

Panel represents which panel is active

const (
	PanelCurrentWork Panel = iota
	PanelTaskList
	PanelActivity
)

type RecentHandoff

type RecentHandoff struct {
	IssueID   string
	SessionID string
	Timestamp time.Time
}

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

func FetchData

func FetchData(database *db.DB, sessionID string, startedAt time.Time, searchQuery string, includeClosed bool) RefreshDataMsg

FetchData retrieves all data needed for the monitor display

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

type TickMsg

type TickMsg time.Time

TickMsg triggers a data refresh

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL