app

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: Sep 1, 2026 License: MIT Imports: 30 Imported by: 0

Documentation

Overview

Package app implements the main Bubbletea application for the interactive workflow dispatcher TUI.

Index

Constants

View Source
const (
	MaxHistoryEntries = 10
	MinTerminalHeight = 20
	MinTerminalWidth  = 80
	TableHeaderHeight = 14
)

UI layout and history limits.

Variables

View Source
var ErrLogManagerNotInitialized = errors.New("log manager not initialized")

ErrLogManagerNotInitialized indicates logs were requested before the log manager was set up.

View Source
var ErrNoChainStateOrRunID = errors.New("no chain state or run ID provided")

ErrNoChainStateOrRunID indicates a log fetch request lacked both chain state and a run ID.

Functions

This section is empty.

Types

type Candidate added in v1.4.0

type Candidate struct {
	Name        string
	Description string
}

Candidate is one completion paired with the line explaining it, so the command bar shows both without a second lookup.

type ChainUpdateMsg

type ChainUpdateMsg struct {
	Update chain.ChainUpdate
}

ChainUpdateMsg is sent when a chain execution state changes.

type Command added in v1.4.0

type Command struct {
	// Run applies the command. Args are the whitespace-separated words after
	// the command's own name.
	Run func(Model, []string) (Model, tea.Cmd)
	// Complete offers the candidates for the argument being typed, which is
	// the last element of args and may be empty. A nil Complete means the
	// command takes no arguments worth completing.
	Complete    func(Model, []string) []Candidate
	Name        string
	Description string
}

Command is one named `:command` the command bar can run. A command exists so an action has a name a reader can guess, which is what a key cannot offer once the letters run out.

type FetchLogsMsg

type FetchLogsMsg struct {
	ChainState *chain.ChainState
	Workflow   string
	Branch     string
	RunID      int64
	ErrorsOnly bool
}

FetchLogsMsg requests fetching logs for a chain or run.

type FetchTimelineMsg added in v1.5.0

type FetchTimelineMsg struct {
	Title string
	RunID int64
}

FetchTimelineMsg asks for a run's jobs so the Timeline tab can draw them.

type FocusedPane

type FocusedPane int

FocusedPane represents which pane currently has focus.

const (
	PaneWorkflows FocusedPane = iota
	PaneHistory
	PaneConfig
)

Panes available in the TUI, in tab order.

type KeyMap

type KeyMap struct {
	Actions  key.Binding
	Branch   key.Binding
	Command  key.Binding
	Chain    key.Binding
	Clear    key.Binding
	ClearAll key.Binding
	Copy     key.Binding
	Down     key.Binding
	Edit     key.Binding
	Enter    key.Binding
	Escape   key.Binding
	Filter   key.Binding
	Help     key.Binding
	LiveView key.Binding
	Quit     key.Binding
	Reset    key.Binding
	ShiftTab key.Binding
	Space    key.Binding
	Tab      key.Binding
	TabNext  key.Binding
	TabPrev  key.Binding
	Up       key.Binding
	ViewLogs key.Binding
	Watch    key.Binding

	Input0 key.Binding
	Input1 key.Binding
	Input2 key.Binding
	Input3 key.Binding
	Input4 key.Binding
	Input5 key.Binding
	Input6 key.Binding
	Input7 key.Binding
	Input8 key.Binding
	Input9 key.Binding

	Workflow0 key.Binding
	Workflow1 key.Binding
	Workflow2 key.Binding
	Workflow3 key.Binding
	Workflow4 key.Binding
	Workflow5 key.Binding
	Workflow6 key.Binding
	Workflow7 key.Binding
	Workflow8 key.Binding
	Workflow9 key.Binding
}

KeyMap defines all keyboard shortcuts for the application.

func DefaultKeyMap

func DefaultKeyMap() KeyMap

DefaultKeyMap returns the default keyboard shortcuts.

func (KeyMap) FullHelp

func (k KeyMap) FullHelp() [][]key.Binding

FullHelp returns the full list of key bindings for the help view.

func (KeyMap) InputKeys

func (k KeyMap) InputKeys() []key.Binding

InputKeys returns the input key bindings in row order, so the returned index is the input's own index and `0` reaches the tenth row.

func (KeyMap) ShortHelp

func (k KeyMap) ShortHelp() []key.Binding

ShortHelp returns a short list of key bindings for the help view.

func (KeyMap) WorkflowKeys

func (k KeyMap) WorkflowKeys() []key.Binding

WorkflowKeys returns all workflow key bindings as a slice indexed 0-9.

type LogStreamUpdateMsg

type LogStreamUpdateMsg struct {
	Update logs.StreamUpdate
}

LogStreamUpdateMsg contains new log content from streaming.

type LogsFetchedMsg

type LogsFetchedMsg struct {
	Error      error
	Logs       *logs.RunLogs
	Workflow   string
	RunID      int64
	ErrorsOnly bool
}

LogsFetchedMsg contains fetched logs or an error.

type Model

type Model struct {
	// contains filtered or unexported fields
}

Model is the root bubbletea model for the application.

func New

func New(workflows []workflow.File, history *frecency.Store, repo string) Model

New creates a new application model.

func (Model) Init

func (Model) Init() tea.Cmd

Init implements tea.Model.

func (Model) SelectedWorkflow

func (m Model) SelectedWorkflow() *workflow.File

SelectedWorkflow returns the currently selected workflow.

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() tea.View

View implements tea.Model.

type Registry added in v1.4.0

type Registry struct {
	// contains filtered or unexported fields
}

Registry holds the commands the bar knows, sorted by name.

func DefaultRegistry added in v1.4.0

func DefaultRegistry() Registry

DefaultRegistry builds the commands the `:` bar offers. Every one of them is reachable by a key as well; the bar exists so an action has a name to guess at when its key is not the one you remember.

func NewRegistry added in v1.4.0

func NewRegistry(commands ...Command) Registry

NewRegistry builds a Registry, sorting by name so every listing and completion comes back in one order.

func (Registry) Candidates added in v1.4.0

func (r Registry) Candidates(prefix string) []Candidate

Candidates returns the commands whose names start with prefix.

func (Registry) Commands added in v1.4.0

func (r Registry) Commands() []Command

Commands returns every registered command.

func (Registry) Listing added in v1.4.0

func (r Registry) Listing() string

Listing renders every command as "name<tab>description", one per line, for a caller with no help modal to open.

func (Registry) Lookup added in v1.4.0

func (r Registry) Lookup(name string) (Command, bool)

Lookup resolves a name exactly, or by a prefix that only one command answers to. An ambiguous prefix resolves to nothing rather than to the first match, so `:c` never silently runs whichever command sorts first.

type RunUpdateMsg

type RunUpdateMsg struct {
	Update watcher.RunUpdate
}

RunUpdateMsg is sent when a watched run is updated.

type ShowLogsViewerMsg

type ShowLogsViewerMsg struct {
	Logs       *logs.RunLogs
	Workflow   string
	RunID      int64
	ErrorsOnly bool
}

ShowLogsViewerMsg opens the logs viewer modal.

type StartLogStreamMsg

type StartLogStreamMsg struct {
	Workflow   string
	RunID      int64
	AutoScroll bool
}

StartLogStreamMsg begins streaming logs for an active run.

type StatusMsg added in v1.4.0

type StatusMsg struct {
	Text string
}

StatusMsg carries a one-line result to the footer. A command that answers with text rather than a new view says so here.

type StopLogStreamMsg

type StopLogStreamMsg struct {
	RunID int64
}

StopLogStreamMsg stops streaming logs for a run.

type TimelineFetchedMsg added in v1.5.0

type TimelineFetchedMsg struct {
	Error error
	Title string
	Jobs  []github.Job
}

TimelineFetchedMsg carries the jobs, or why they could not be read.

type ViewMode

type ViewMode int

ViewMode represents the current view mode.

const (
	WorkflowListMode ViewMode = iota
	HistoryPreviewMode
	InputDetailMode
)

View modes for the config pane.

Jump to

Keyboard shortcuts

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