idtui

package
v0.18.9 Latest Latest
Warning

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

Go to latest
Published: May 27, 2025 License: Apache-2.0 Imports: 45 Imported by: 1

Documentation

Index

Constants

View Source
const (
	Block               = "█"
	Block75             = "▓"
	Block50             = "▒"
	Block25             = "░"
	CaretDownEmpty      = "▽"
	CaretDownFilled     = "▼"
	CaretLeftFilled     = "◀" // "<"
	CaretRightEmpty     = "▷" // ">"
	CaretRightFilled    = "▶" // ">"
	CornerBottomLeft    = "╰"
	CornerBottomRight   = "╯"
	CornerTopLeft       = "╭"
	CornerTopRight      = "╮"
	CrossBar            = "┼"
	DotEmpty            = "○"
	DotFilled           = "●"
	HorizBar            = "─"
	HorizBottomBar      = "┬"
	HorizHalfLeftBar    = "╴"
	HorizHalfRightBar   = "╶"
	HorizTopBar         = "┴"
	HorizTopBoldBar     = "┻"
	InactiveGroupSymbol = VertBar
	TaskSymbol          = VertRightBoldBar
	VertBar             = "│"
	VertBoldBar         = "┃"
	VertDottedBar       = "┊" // ┊┆┇┋╎
	VertLeftBar         = "┤"
	VertLeftBoldBar     = "┫"
	VertRightBar        = "├"
	VertRightBoldBar    = "┣"
	IconSkipped         = "∅"
	IconSuccess         = "✔"
	IconFailure         = "✘"
	IconCached          = "$" // cache money
	Diamond             = "◆"
	LLMPrompt           = "❯"

	// We need a prompt that conveys the unique nature of the Dagger shell. Per gpt4:
	// The ⋈ symbol, known as the bowtie, has deep roots in relational databases and set theory,
	// where it denotes a join operation. This makes it especially fitting for a DAG environment,
	// as it suggests the idea of dependencies, intersections, and points where separate paths
	// or data sets come together.
	ShellPrompt = "⋈"
)

Variables

View Source
var (
	ANSIBlack         = lipgloss.Color("0")
	ANSIRed           = lipgloss.Color("1")
	ANSIGreen         = lipgloss.Color("2")
	ANSIYellow        = lipgloss.Color("3")
	ANSIBlue          = lipgloss.Color("4")
	ANSIMagenta       = lipgloss.Color("5")
	ANSICyan          = lipgloss.Color("6")
	ANSIWhite         = lipgloss.Color("7")
	ANSIBrightBlack   = lipgloss.Color("8")
	ANSIBrightRed     = lipgloss.Color("9")
	ANSIBrightGreen   = lipgloss.Color("10")
	ANSIBrightYellow  = lipgloss.Color("11")
	ANSIBrightBlue    = lipgloss.Color("12")
	ANSIBrightMagenta = lipgloss.Color("13")
	ANSIBrightCyan    = lipgloss.Color("14")
	ANSIBrightWhite   = lipgloss.Color("15")
)
View Source
var ErrInterrupted = errors.New("interrupted")
View Source
var ErrShellExited = errors.New("shell exited")
View Source
var MarkdownStyle = styles.LightStyleConfig
View Source
var SkipLoggedOutTraceMsgEnvs = []string{
	"DAGGER_NO_NAG",

	"NOTHANKS", "SHUTUP", "GOAWAY", "STOPIT",
}

Functions

func ColorProfile added in v0.11.1

func ColorProfile() termenv.Profile

ColorProfile returns Ascii if, and only if, NO_COLOR or similar is set. Otherwise it returns termenv.ANSI, allowing colors to be used.

Note that color profiles beyond simple ANSI are not used by Progrock. 16 colors is all you need. Anything else disrespects the user's color scheme preferences.

func FromCmdContext added in v0.13.0

func FromCmdContext(ctx context.Context) (*cmdContext, bool)

func HasDarkBackground added in v0.17.0

func HasDarkBackground() bool

func KeyEnabled added in v0.17.0

func KeyEnabled(enabled bool) key.BindingOpt

func NewOutput added in v0.11.1

func NewOutput(w io.Writer, opts ...termenv.OutputOption) *termenv.Output

NewOutput returns a termenv.Output that will always use color, regardless of whether w is a TTY, unless NO_COLOR is explicitly set.

Progrock is opinionated here. Termenv disables colors by default if stdout is not a TTY or if the CI env var is set. We don't want that, because folks deserve colorful output in CI too.

To disable colors, set NO_COLOR (https://no-color.org/).

func NewWithDB added in v0.15.0

func NewWithDB(w io.Writer, db *dagui.DB) *frontendPretty
func WithPrintTraceLink(ctx context.Context, printTraceLink bool) context.Context

WithPrintTraceLink is used for enabling printing the trace link for the selected commands.

Types

type AdaptiveColor added in v0.17.0

type AdaptiveColor struct {
	Light termenv.Color
	Dark  termenv.Color
}

func (AdaptiveColor) Sequence added in v0.17.0

func (c AdaptiveColor) Sequence(bg bool) string

type Dump added in v0.12.0

type Dump struct {
	Newline string
	Prefix  string
}

func (*Dump) DumpID added in v0.12.0

func (d *Dump) DumpID(out *termenv.Output, id *call.ID) error

type Frontend

type Frontend interface {
	// Run starts a frontend, and runs the target function.
	Run(ctx context.Context, opts dagui.FrontendOpts, f func(context.Context) error) error

	// Opts returns the opts of the currently running frontend.
	Opts() *dagui.FrontendOpts
	SetCustomExit(fn func())
	SetVerbosity(n int)

	// SetPrimary tells the frontend which span should be treated like the focal
	// point of the command. Its output will be displayed at the end, and its
	// children will be promoted to the "top-level" of the TUI.
	SetPrimary(spanID dagui.SpanID)
	Background(cmd tea.ExecCommand, raw bool) error
	// RevealAllSpans tells the frontend to show all spans, not just
	// the spans beneath the primary span.
	RevealAllSpans()

	// Can consume otel spans, logs and metrics.
	SpanExporter() sdktrace.SpanExporter
	LogExporter() sdklog.Exporter
	MetricExporter() sdkmetric.Exporter

	// ConnectedToEngine is called when the CLI connects to an engine.
	ConnectedToEngine(ctx context.Context, name string, version string, clientID string)
	// SetCloudURL is called after the CLI checks auth and sets the cloud URL.
	SetCloudURL(ctx context.Context, url string, msg string, logged bool)

	// Shell is called when the CLI enters interactive mode.
	Shell(ctx context.Context, handler ShellHandler)

	session.PromptHandler
}

func NewPlain added in v0.11.5

func NewPlain(w io.Writer) Frontend

func NewPretty added in v0.15.0

func NewPretty(w io.Writer) Frontend

func NewReporter added in v0.15.0

func NewReporter(w io.Writer) Frontend

type FrontendMetricExporter added in v0.13.6

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

func (FrontendMetricExporter) Aggregation added in v0.13.6

func (FrontendMetricExporter) Background added in v0.13.6

func (fe FrontendMetricExporter) Background(cmd tea.ExecCommand, raw bool) error

func (FrontendMetricExporter) Close added in v0.13.6

func (fe FrontendMetricExporter) Close() error

func (FrontendMetricExporter) ConnectedToEngine added in v0.13.6

func (fe FrontendMetricExporter) ConnectedToEngine(ctx context.Context, name string, version string, clientID string)

func (FrontendMetricExporter) Export added in v0.13.6

func (fe FrontendMetricExporter) Export(ctx context.Context, resourceMetrics *metricdata.ResourceMetrics) error

func (FrontendMetricExporter) FinalRender added in v0.15.0

func (fe FrontendMetricExporter) FinalRender(w io.Writer) error

FinalRender is called after the program has finished running and prints the final output after the TUI has exited.

func (FrontendMetricExporter) ForceFlush added in v0.13.6

func (FrontendMetricExporter) HandlePrompt added in v0.17.0

func (fe FrontendMetricExporter) HandlePrompt(ctx context.Context, prompt string, dest any) error

func (FrontendMetricExporter) Init added in v0.13.6

func (fe FrontendMetricExporter) Init() tea.Cmd

func (FrontendMetricExporter) LogExporter added in v0.13.6

func (fe FrontendMetricExporter) LogExporter() sdklog.Exporter

func (FrontendMetricExporter) MetricExporter added in v0.13.6

func (fe FrontendMetricExporter) MetricExporter() sdkmetric.Exporter

func (FrontendMetricExporter) Opts added in v0.13.6

func (fe FrontendMetricExporter) Opts() *dagui.FrontendOpts

func (FrontendMetricExporter) Render added in v0.13.6

func (fe FrontendMetricExporter) Render(out TermOutput) error

func (FrontendMetricExporter) RevealAllSpans added in v0.15.0

func (fe FrontendMetricExporter) RevealAllSpans()

func (FrontendMetricExporter) Run added in v0.13.6

func (fe FrontendMetricExporter) Run(ctx context.Context, opts dagui.FrontendOpts, run func(context.Context) error) error

Run starts the TUI, calls the run function, stops the TUI, and finally prints the primary output to the appropriate stdout/stderr streams.

func (FrontendMetricExporter) SetCloudURL added in v0.13.6

func (fe FrontendMetricExporter) SetCloudURL(ctx context.Context, url string, msg string, logged bool)

func (FrontendMetricExporter) SetCustomExit added in v0.15.3

func (fe FrontendMetricExporter) SetCustomExit(fn func())

func (FrontendMetricExporter) SetPrimary added in v0.13.6

func (fe FrontendMetricExporter) SetPrimary(spanID dagui.SpanID)

func (FrontendMetricExporter) SetVerbosity added in v0.15.3

func (fe FrontendMetricExporter) SetVerbosity(n int)

func (FrontendMetricExporter) Shell added in v0.16.3

func (fe FrontendMetricExporter) Shell(ctx context.Context, handler ShellHandler)

func (FrontendMetricExporter) Shutdown added in v0.13.6

func (fe FrontendMetricExporter) Shutdown(ctx context.Context) error

func (FrontendMetricExporter) SpanExporter added in v0.13.6

func (fe FrontendMetricExporter) SpanExporter() sdktrace.SpanExporter

func (FrontendMetricExporter) Temporality added in v0.13.6

func (FrontendMetricExporter) Update added in v0.13.6

func (fe FrontendMetricExporter) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (FrontendMetricExporter) View added in v0.13.6

func (fe FrontendMetricExporter) View() string

type Markdown added in v0.17.0

type Markdown struct {
	Content    string
	Background termenv.Color
	Prefix     string
	Width      int
	// contains filtered or unexported fields
}

func (*Markdown) View added in v0.17.0

func (m *Markdown) View() string

type PlainFrontendMetricExporter added in v0.13.6

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

func (PlainFrontendMetricExporter) Aggregation added in v0.13.6

func (PlainFrontendMetricExporter) Background added in v0.13.6

func (fe PlainFrontendMetricExporter) Background(cmd tea.ExecCommand, raw bool) error

func (PlainFrontendMetricExporter) ConnectedToEngine added in v0.13.6

func (fe PlainFrontendMetricExporter) ConnectedToEngine(ctx context.Context, name string, version string, clientID string)

func (PlainFrontendMetricExporter) Export added in v0.13.6

func (PlainFrontendMetricExporter) ForceFlush added in v0.13.6

func (PlainFrontendMetricExporter) HandlePrompt added in v0.17.0

func (fe PlainFrontendMetricExporter) HandlePrompt(ctx context.Context, prompt string, dest any) error

func (PlainFrontendMetricExporter) LogExporter added in v0.13.6

func (fe PlainFrontendMetricExporter) LogExporter() sdklog.Exporter

func (PlainFrontendMetricExporter) MetricExporter added in v0.13.6

func (fe PlainFrontendMetricExporter) MetricExporter() sdkmetric.Exporter

func (PlainFrontendMetricExporter) Opts added in v0.13.6

func (fe PlainFrontendMetricExporter) Opts() *dagui.FrontendOpts

func (PlainFrontendMetricExporter) RevealAllSpans added in v0.15.0

func (fe PlainFrontendMetricExporter) RevealAllSpans()

func (PlainFrontendMetricExporter) Run added in v0.13.6

func (fe PlainFrontendMetricExporter) Run(ctx context.Context, opts dagui.FrontendOpts, run func(context.Context) error) error

func (PlainFrontendMetricExporter) SetCloudURL added in v0.13.6

func (fe PlainFrontendMetricExporter) SetCloudURL(ctx context.Context, url string, msg string, logged bool)

func (PlainFrontendMetricExporter) SetCustomExit added in v0.15.3

func (fe PlainFrontendMetricExporter) SetCustomExit(fn func())

func (PlainFrontendMetricExporter) SetPrimary added in v0.13.6

func (fe PlainFrontendMetricExporter) SetPrimary(spanID dagui.SpanID)

func (PlainFrontendMetricExporter) SetVerbosity added in v0.15.3

func (fe PlainFrontendMetricExporter) SetVerbosity(n int)

func (PlainFrontendMetricExporter) Shell added in v0.16.3

func (fe PlainFrontendMetricExporter) Shell(ctx context.Context, handler ShellHandler)

func (PlainFrontendMetricExporter) Shutdown added in v0.13.6

func (fe PlainFrontendMetricExporter) Shutdown(ctx context.Context) error

func (PlainFrontendMetricExporter) SpanExporter added in v0.13.6

func (fe PlainFrontendMetricExporter) SpanExporter() sdktrace.SpanExporter

func (PlainFrontendMetricExporter) Temporality added in v0.13.6

type ShellHandler added in v0.17.0

type ShellHandler interface {
	// Handle processes shell input
	Handle(ctx context.Context, input string) error

	// AutoComplete provides shell auto-completion functionality
	AutoComplete(entireInput [][]rune, line, col int) (string, editline.Completions)

	// IsComplete determines if the current input is a complete command
	IsComplete(entireInput [][]rune, line int, col int) bool

	// Prompt generates the shell prompt string
	Prompt(ctx context.Context, out TermOutput, fg termenv.Color) (string, tea.Cmd)

	// Keys returns the keys that will be displayed when the input is focused
	KeyBindings() []key.Binding

	// ReactToInput allows reacting to live input before it's submitted
	ReactToInput(ctx context.Context, msg tea.KeyMsg) tea.Cmd

	// Shell handlers can man-in-the-middle history items to preserve per-entry modes etc.
	editline.HistoryEncoder
}

ShellHandler defines the interface for handling shell interactions

type TermOutput added in v0.16.3

type TermOutput interface {
	io.Writer
	String(...string) termenv.Style
}

TermOutput is an interface that captures the methods we need from termenv.Output

type UpdatePromptMsg added in v0.17.0

type UpdatePromptMsg struct{}

type Vterm added in v0.9.9

type Vterm struct {
	Offset int
	Height int
	Width  int

	Prefix string

	Profile termenv.Profile
	// contains filtered or unexported fields
}

func NewVterm added in v0.9.9

func NewVterm(profile termenv.Profile) *Vterm

func (*Vterm) Init added in v0.9.9

func (term *Vterm) Init() tea.Cmd

func (*Vterm) LastLine added in v0.9.9

func (term *Vterm) LastLine() string

LastLine returns the last line of visible text, with ANSI formatting, but without any trailing whitespace.

func (*Vterm) Print added in v0.9.9

func (term *Vterm) Print(w io.Writer) error

Print prints the full log output without any formatting.

func (*Vterm) Render added in v0.9.9

func (term *Vterm) Render(w io.Writer, offset, height int)

Bytes returns the output for the given region of the terminal, with ANSI formatting.

func (*Vterm) ScrollPercent added in v0.9.9

func (term *Vterm) ScrollPercent() float64

func (*Vterm) SetHeight added in v0.9.9

func (term *Vterm) SetHeight(height int)

func (*Vterm) SetPrefix added in v0.9.9

func (term *Vterm) SetPrefix(prefix string)

func (*Vterm) SetWidth added in v0.9.9

func (term *Vterm) SetWidth(width int)

func (*Vterm) Term added in v0.9.9

func (term *Vterm) Term() *midterm.Terminal

func (*Vterm) Update added in v0.9.9

func (term *Vterm) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Vterm) UsedHeight added in v0.9.9

func (term *Vterm) UsedHeight() int

func (*Vterm) View added in v0.9.9

func (term *Vterm) View() string

View returns the output for the current region of the terminal, with ANSI formatting or rendered Markdown if present.

func (*Vterm) Write added in v0.9.9

func (term *Vterm) Write(p []byte) (int, error)

func (*Vterm) WriteMarkdown added in v0.16.2

func (term *Vterm) WriteMarkdown(p []byte) (int, error)

Jump to

Keyboard shortcuts

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