idtui

package
v0.20.3 Latest Latest
Warning

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

Go to latest
Published: Mar 19, 2026 License: Apache-2.0 Imports: 60 Imported by: 1

Documentation

Overview

Package idtui provides terminal user interface frontends for Dagger operations. This file contains the dots-style frontend that provides minimal, colorized output with green dots for successful operations and red X's for failures.

Index

Constants

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

	// 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 = "⋈"
)
View Source
const DefaultBPM = 123

DefaultBPM is a sane default of 123 beats per minute.

Variables

View Source
var (
	ErrShellExited = errors.New("shell exited")
	ErrInterrupted = errors.New("interrupted")
)
View Source
var (
	ANSIBlack         = lipgloss.Black
	ANSIRed           = lipgloss.Red
	ANSIGreen         = lipgloss.Green
	ANSIYellow        = lipgloss.Yellow
	ANSIBlue          = lipgloss.Blue
	ANSIMagenta       = lipgloss.Magenta
	ANSICyan          = lipgloss.Cyan
	ANSIWhite         = lipgloss.White
	ANSIBrightBlack   = lipgloss.BrightBlack
	ANSIBrightRed     = lipgloss.BrightRed
	ANSIBrightGreen   = lipgloss.BrightGreen
	ANSIBrightYellow  = lipgloss.BrightYellow
	ANSIBrightBlue    = lipgloss.BrightBlue
	ANSIBrightMagenta = lipgloss.BrightMagenta
	ANSIBrightCyan    = lipgloss.BrightCyan
	ANSIBrightWhite   = lipgloss.BrightWhite
)
View Source
var DotFrames = SpinnerFrames{
	[]string{"⣾", "⣷", "⣧", "⣏", "⡟", "⡿", "⢿", "⢻", "⣹", "⣼"},
	ease.Linear,
}
View Source
var FadeFrames = SpinnerFrames{
	[]string{"█", "█", "▓", "▓", "▒", "▒", "░", "░", " ", " "},
	ease.InCubic,
}
View Source
var Fail = ExitError{OriginalCode: 1}
View Source
var FieldRendererRegistry = map[string]func() FieldRenderer{
	"withExec":             func() FieldRenderer { return &WithExecArgs{} },
	"withWorkdir":          func() FieldRenderer { return &WithWorkdirArgs{} },
	"withEnvVariable":      func() FieldRenderer { return &WithEnvVariableArgs{} },
	"withMountedDirectory": func() FieldRenderer { return &WithMountedDirectoryArgs{} },
	"withMountedFile":      func() FieldRenderer { return &WithMountedFileArgs{} },
	"withDirectory":        func() FieldRenderer { return &WithDirectoryArgs{} },
	"withFile":             func() FieldRenderer { return &WithFileArgs{} },
	"withNewFile":          func() FieldRenderer { return &WithNewFileArgs{} },
	"withUser":             func() FieldRenderer { return &WithUserArgs{} },
	"_contextDirectory":    func() FieldRenderer { return &ContextDirectoryArgs{} },
}

FieldRendererRegistry holds all field renderers. Each entry maps a GraphQL field name to a factory function that creates a new renderer instance.

View Source
var KeymapStyle = lipgloss.NewStyle().
	Foreground(lipgloss.BrightBlack)

KeymapStyle is the default style for keymap text.

View Source
var MarkdownStyle = styles.LightStyleConfig
View Source
var MeterFrames = SpinnerFrames{
	[]string{"█", "█", "▇", "▆", "▅", "▄", "▃", "▂", "▁", " "},
	ease.InOutCubic,
}
View Source
var MiniDotFrames = SpinnerFrames{
	[]string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"},
	ease.Linear,
}
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 NewForm added in v0.18.18

func NewForm(groups ...*huh.Group) *huh.Form

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 PreviewPatch added in v0.19.1

func PreviewPatch(ctx context.Context, changeset *dagger.Changeset) (*patchpreview.PatchPreview, error)

func RegisterFieldRenderer added in v0.19.7

func RegisterFieldRenderer(fieldName string, rendererFactory func() FieldRenderer)

RegisterFieldRenderer adds a new field renderer to the registry

func RenderKeymap added in v0.20.2

func RenderKeymap(out io.Writer, style lipgloss.Style, keys []key.Binding, pressedKey string, pressedKeyAt time.Time) int

RenderKeymap renders key bindings into a writer and returns the visible width.

func TTYStyle added in v0.19.0

func TTYStyle() *chroma.Style
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 ContextDirectoryArgs added in v0.19.7

type ContextDirectoryArgs struct {
	Path    string   `json:"path"`
	Exclude []string `json:"exclude"`
	Module  string   `json:"module"`
	Digest  string   `json:"digest"`
}

ContextDirectoryArgs represents the arguments for withUser calls

func (ContextDirectoryArgs) Render added in v0.19.7

func (a ContextDirectoryArgs) Render(out TermOutput) (string, []string, bool)

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 ErrorLabel added in v0.20.2

type ErrorLabel struct {
	tuist.Compo
	// contains filtered or unexported fields
}

ErrorLabel is a simple component that displays an error message. When the error is nil, it renders nothing (zero lines). Long error messages are word-wrapped to fit the available width.

func NewErrorLabel added in v0.20.2

func NewErrorLabel() *ErrorLabel

NewErrorLabel creates a new ErrorLabel.

func (*ErrorLabel) Render added in v0.20.2

func (e *ErrorLabel) Render(ctx tuist.Context) tuist.RenderResult

func (*ErrorLabel) SetError added in v0.20.2

func (e *ErrorLabel) SetError(err error)

SetError sets the error to display. Pass nil to clear it.

type ExecCommand added in v0.20.2

type ExecCommand interface {
	Run() error
	SetStdin(io.Reader)
	SetStdout(io.Writer)
	SetStderr(io.Writer)
}

ExecCommand is a command that can be executed in a blocking fashion, taking over the terminal. Replaces tea.ExecCommand.

type ExitError added in v0.19.7

type ExitError struct {
	// OriginalCode is the raw exit code that was reported by the caller.
	// Code() should be used when deciding the actual process exit status.
	OriginalCode int

	// An optional originating error, for any code paths that go looking for it,
	// e.g. telemetry.EndWithCause which looks for and applies error origins.
	Original error
}

ExitError is an error that indicates a command should exit with a specific status code, without printing an error message, assuming a human readable message has been printed already.

It is basically a shortcut for `os.Exit` while giving the TUI a chance to exit gracefully and flush output.

func (ExitError) Code added in v0.19.7

func (e ExitError) Code() int

Code returns the exit status to use for this error.

func (ExitError) Error added in v0.19.7

func (e ExitError) Error() string

func (ExitError) Unwrap added in v0.19.7

func (e ExitError) Unwrap() error

type FieldRenderer added in v0.19.7

type FieldRenderer interface {
	// Render processes the call and returns title text and args to elide from normal rendering
	Render(out TermOutput) (title string, elidedArgs []string, specialTitle bool)
}

FieldRenderer defines how to render a specific GraphQL field call

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) (cleanups.CleanupF, error)) error

	// Opts returns the opts of the currently running frontend.
	Opts() *dagui.FrontendOpts
	SetVerbosity(n int)
	// SetTelemetryError records an error from the OTel telemetry pipeline.
	SetTelemetryError(error)

	// 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 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

	// SetCloudURL is called after the CLI checks auth and sets the cloud URL.
	SetCloudURL(ctx context.Context, url string, msg string, logged bool)

	// SetClient is called to notify the frontend of a created dagger client.
	// This can be used to make requests to the engine for more information.
	SetClient(*dagger.Client)

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

	// Populate the sidebar with content.
	SetSidebarContent(SidebarSection)

	prompt.PromptHandler
}

func NewDots added in v0.18.11

func NewDots(output io.Writer) Frontend

NewDots creates a new dots-style frontend that outputs green dots for successful spans and red X's for failed spans. This frontend is ideal for console/non-TTY environments where you want minimal, clear feedback about operation progress without verbose output.

Output format:

  • Green dots (.) for successful operations
  • Red X's (X) for failed operations
  • Newline printed at the end when shutting down

This frontend does not support interactive features like shell or prompts.

func NewLogs added in v0.20.0

func NewLogs(output io.Writer) Frontend

NewLogs creates a new logs-style frontend that only prints logs from spans, as they arrive, prefixed by span name.

This frontend does not support interactive features like shell or prompts.

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 ExecCommand, raw bool) error

func (FrontendMetricExporter) Close added in v0.13.6

func (fe FrontendMetricExporter) Close() error

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) HandleForm added in v0.18.18

func (fe FrontendMetricExporter) HandleForm(ctx context.Context, form *huh.Form) error

func (FrontendMetricExporter) HandleKeyPress added in v0.20.2

func (fe FrontendMetricExporter) HandleKeyPress(_ tuist.Context, ev uv.KeyPressEvent) bool

HandleKeyPress implements tuist.Interactive. It dispatches key events to the nav handler. When the TextInput or formWrap is focused, keys go directly to them via tuist's focus routing.

func (FrontendMetricExporter) HandlePrompt added in v0.17.0

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

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) OnMount added in v0.20.2

func (fe FrontendMetricExporter) OnMount(ctx tuist.Context)

OnMount is called by tuist when the component is mounted into the TUI tree. It starts the frame ticker and, on the first mount, spawns the run function.

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(ctx tuist.Context) tuist.RenderResult

Render implements tuist.Component. It produces the full TUI output as lines.

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) (cleanups.CleanupF, 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) SetClient added in v0.18.17

func (fe FrontendMetricExporter) SetClient(client *dagger.Client)

func (FrontendMetricExporter) SetCloudURL added in v0.13.6

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

func (FrontendMetricExporter) SetPrimary added in v0.13.6

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

func (FrontendMetricExporter) SetSidebarContent added in v0.19.0

func (fe FrontendMetricExporter) SetSidebarContent(section SidebarSection)

func (FrontendMetricExporter) SetTelemetryError added in v0.20.2

func (fe FrontendMetricExporter) SetTelemetryError(err error)

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

type FrontendMock added in v0.19.4

type FrontendMock struct {
	// BackgroundFunc mocks the Background method.
	BackgroundFunc func(cmd ExecCommand, raw bool) error

	// HandleFormFunc mocks the HandleForm method.
	HandleFormFunc func(ctx context.Context, form *huh.Form) error

	// HandlePromptFunc mocks the HandlePrompt method.
	HandlePromptFunc func(ctx context.Context, title string, prompt string, dest any) error

	// LogExporterFunc mocks the LogExporter method.
	LogExporterFunc func() sdklog.Exporter

	// MetricExporterFunc mocks the MetricExporter method.
	MetricExporterFunc func() sdkmetric.Exporter

	// OptsFunc mocks the Opts method.
	OptsFunc func() *dagui.FrontendOpts

	// RevealAllSpansFunc mocks the RevealAllSpans method.
	RevealAllSpansFunc func()

	// RunFunc mocks the Run method.
	RunFunc func(ctx context.Context, opts dagui.FrontendOpts, f func(context.Context) (cleanups.CleanupF, error)) error

	// SetClientFunc mocks the SetClient method.
	SetClientFunc func(client *dagger.Client)

	// SetCloudURLFunc mocks the SetCloudURL method.
	SetCloudURLFunc func(ctx context.Context, url string, msg string, logged bool)

	// SetPrimaryFunc mocks the SetPrimary method.
	SetPrimaryFunc func(spanID dagui.SpanID)

	// SetSidebarContentFunc mocks the SetSidebarContent method.
	SetSidebarContentFunc func(sidebarSection SidebarSection)

	// SetTelemetryErrorFunc mocks the SetTelemetryError method.
	SetTelemetryErrorFunc func(err error)

	// SetVerbosityFunc mocks the SetVerbosity method.
	SetVerbosityFunc func(n int)

	// ShellFunc mocks the Shell method.
	ShellFunc func(ctx context.Context, handler ShellHandler)

	// SpanExporterFunc mocks the SpanExporter method.
	SpanExporterFunc func() sdktrace.SpanExporter
	// contains filtered or unexported fields
}

FrontendMock is a mock implementation of Frontend.

func TestSomethingThatUsesFrontend(t *testing.T) {

	// make and configure a mocked Frontend
	mockedFrontend := &FrontendMock{
		BackgroundFunc: func(cmd ExecCommand, raw bool) error {
			panic("mock out the Background method")
		},
		HandleFormFunc: func(ctx context.Context, form *huh.Form) error {
			panic("mock out the HandleForm method")
		},
		HandlePromptFunc: func(ctx context.Context, title string, prompt string, dest any) error {
			panic("mock out the HandlePrompt method")
		},
		LogExporterFunc: func() sdklog.Exporter {
			panic("mock out the LogExporter method")
		},
		MetricExporterFunc: func() sdkmetric.Exporter {
			panic("mock out the MetricExporter method")
		},
		OptsFunc: func() *dagui.FrontendOpts {
			panic("mock out the Opts method")
		},
		RevealAllSpansFunc: func()  {
			panic("mock out the RevealAllSpans method")
		},
		RunFunc: func(ctx context.Context, opts dagui.FrontendOpts, f func(context.Context) (cleanups.CleanupF, error)) error {
			panic("mock out the Run method")
		},
		SetClientFunc: func(client *dagger.Client)  {
			panic("mock out the SetClient method")
		},
		SetCloudURLFunc: func(ctx context.Context, url string, msg string, logged bool)  {
			panic("mock out the SetCloudURL method")
		},
		SetPrimaryFunc: func(spanID dagui.SpanID)  {
			panic("mock out the SetPrimary method")
		},
		SetSidebarContentFunc: func(sidebarSection SidebarSection)  {
			panic("mock out the SetSidebarContent method")
		},
		SetTelemetryErrorFunc: func(err error)  {
			panic("mock out the SetTelemetryError method")
		},
		SetVerbosityFunc: func(n int)  {
			panic("mock out the SetVerbosity method")
		},
		ShellFunc: func(ctx context.Context, handler ShellHandler)  {
			panic("mock out the Shell method")
		},
		SpanExporterFunc: func() sdktrace.SpanExporter {
			panic("mock out the SpanExporter method")
		},
	}

	// use mockedFrontend in code that requires Frontend
	// and then make assertions.

}

func (*FrontendMock) Background added in v0.19.4

func (mock *FrontendMock) Background(cmd ExecCommand, raw bool) error

Background calls BackgroundFunc.

func (*FrontendMock) BackgroundCalls added in v0.19.4

func (mock *FrontendMock) BackgroundCalls() []struct {
	Cmd ExecCommand
	Raw bool
}

BackgroundCalls gets all the calls that were made to Background. Check the length with:

len(mockedFrontend.BackgroundCalls())

func (*FrontendMock) HandleForm added in v0.19.4

func (mock *FrontendMock) HandleForm(ctx context.Context, form *huh.Form) error

HandleForm calls HandleFormFunc.

func (*FrontendMock) HandleFormCalls added in v0.19.4

func (mock *FrontendMock) HandleFormCalls() []struct {
	Ctx  context.Context
	Form *huh.Form
}

HandleFormCalls gets all the calls that were made to HandleForm. Check the length with:

len(mockedFrontend.HandleFormCalls())

func (*FrontendMock) HandlePrompt added in v0.19.4

func (mock *FrontendMock) HandlePrompt(ctx context.Context, title string, prompt string, dest any) error

HandlePrompt calls HandlePromptFunc.

func (*FrontendMock) HandlePromptCalls added in v0.19.4

func (mock *FrontendMock) HandlePromptCalls() []struct {
	Ctx    context.Context
	Title  string
	Prompt string
	Dest   any
}

HandlePromptCalls gets all the calls that were made to HandlePrompt. Check the length with:

len(mockedFrontend.HandlePromptCalls())

func (*FrontendMock) LogExporter added in v0.19.4

func (mock *FrontendMock) LogExporter() sdklog.Exporter

LogExporter calls LogExporterFunc.

func (*FrontendMock) LogExporterCalls added in v0.19.4

func (mock *FrontendMock) LogExporterCalls() []struct {
}

LogExporterCalls gets all the calls that were made to LogExporter. Check the length with:

len(mockedFrontend.LogExporterCalls())

func (*FrontendMock) MetricExporter added in v0.19.4

func (mock *FrontendMock) MetricExporter() sdkmetric.Exporter

MetricExporter calls MetricExporterFunc.

func (*FrontendMock) MetricExporterCalls added in v0.19.4

func (mock *FrontendMock) MetricExporterCalls() []struct {
}

MetricExporterCalls gets all the calls that were made to MetricExporter. Check the length with:

len(mockedFrontend.MetricExporterCalls())

func (*FrontendMock) Opts added in v0.19.4

func (mock *FrontendMock) Opts() *dagui.FrontendOpts

Opts calls OptsFunc.

func (*FrontendMock) OptsCalls added in v0.19.4

func (mock *FrontendMock) OptsCalls() []struct {
}

OptsCalls gets all the calls that were made to Opts. Check the length with:

len(mockedFrontend.OptsCalls())

func (*FrontendMock) RevealAllSpans added in v0.19.4

func (mock *FrontendMock) RevealAllSpans()

RevealAllSpans calls RevealAllSpansFunc.

func (*FrontendMock) RevealAllSpansCalls added in v0.19.4

func (mock *FrontendMock) RevealAllSpansCalls() []struct {
}

RevealAllSpansCalls gets all the calls that were made to RevealAllSpans. Check the length with:

len(mockedFrontend.RevealAllSpansCalls())

func (*FrontendMock) Run added in v0.19.4

Run calls RunFunc.

func (*FrontendMock) RunCalls added in v0.19.4

func (mock *FrontendMock) RunCalls() []struct {
	Ctx  context.Context
	Opts dagui.FrontendOpts
	F    func(context.Context) (cleanups.CleanupF, error)
}

RunCalls gets all the calls that were made to Run. Check the length with:

len(mockedFrontend.RunCalls())

func (*FrontendMock) SetClient added in v0.19.4

func (mock *FrontendMock) SetClient(client *dagger.Client)

SetClient calls SetClientFunc.

func (*FrontendMock) SetClientCalls added in v0.19.4

func (mock *FrontendMock) SetClientCalls() []struct {
	Client *dagger.Client
}

SetClientCalls gets all the calls that were made to SetClient. Check the length with:

len(mockedFrontend.SetClientCalls())

func (*FrontendMock) SetCloudURL added in v0.19.4

func (mock *FrontendMock) SetCloudURL(ctx context.Context, url string, msg string, logged bool)

SetCloudURL calls SetCloudURLFunc.

func (*FrontendMock) SetCloudURLCalls added in v0.19.4

func (mock *FrontendMock) SetCloudURLCalls() []struct {
	Ctx    context.Context
	URL    string
	Msg    string
	Logged bool
}

SetCloudURLCalls gets all the calls that were made to SetCloudURL. Check the length with:

len(mockedFrontend.SetCloudURLCalls())

func (*FrontendMock) SetPrimary added in v0.19.4

func (mock *FrontendMock) SetPrimary(spanID dagui.SpanID)

SetPrimary calls SetPrimaryFunc.

func (*FrontendMock) SetPrimaryCalls added in v0.19.4

func (mock *FrontendMock) SetPrimaryCalls() []struct {
	SpanID dagui.SpanID
}

SetPrimaryCalls gets all the calls that were made to SetPrimary. Check the length with:

len(mockedFrontend.SetPrimaryCalls())

func (*FrontendMock) SetSidebarContent added in v0.19.4

func (mock *FrontendMock) SetSidebarContent(sidebarSection SidebarSection)

SetSidebarContent calls SetSidebarContentFunc.

func (*FrontendMock) SetSidebarContentCalls added in v0.19.4

func (mock *FrontendMock) SetSidebarContentCalls() []struct {
	SidebarSection SidebarSection
}

SetSidebarContentCalls gets all the calls that were made to SetSidebarContent. Check the length with:

len(mockedFrontend.SetSidebarContentCalls())

func (*FrontendMock) SetTelemetryError added in v0.20.2

func (mock *FrontendMock) SetTelemetryError(err error)

SetTelemetryError calls SetTelemetryErrorFunc.

func (*FrontendMock) SetTelemetryErrorCalls added in v0.20.2

func (mock *FrontendMock) SetTelemetryErrorCalls() []struct {
	Err error
}

SetTelemetryErrorCalls gets all the calls that were made to SetTelemetryError. Check the length with:

len(mockedFrontend.SetTelemetryErrorCalls())

func (*FrontendMock) SetVerbosity added in v0.19.4

func (mock *FrontendMock) SetVerbosity(n int)

SetVerbosity calls SetVerbosityFunc.

func (*FrontendMock) SetVerbosityCalls added in v0.19.4

func (mock *FrontendMock) SetVerbosityCalls() []struct {
	N int
}

SetVerbosityCalls gets all the calls that were made to SetVerbosity. Check the length with:

len(mockedFrontend.SetVerbosityCalls())

func (*FrontendMock) Shell added in v0.19.4

func (mock *FrontendMock) Shell(ctx context.Context, handler ShellHandler)

Shell calls ShellFunc.

func (*FrontendMock) ShellCalls added in v0.19.4

func (mock *FrontendMock) ShellCalls() []struct {
	Ctx     context.Context
	Handler ShellHandler
}

ShellCalls gets all the calls that were made to Shell. Check the length with:

len(mockedFrontend.ShellCalls())

func (*FrontendMock) SpanExporter added in v0.19.4

func (mock *FrontendMock) SpanExporter() sdktrace.SpanExporter

SpanExporter calls SpanExporterFunc.

func (*FrontendMock) SpanExporterCalls added in v0.19.4

func (mock *FrontendMock) SpanExporterCalls() []struct {
}

SpanExporterCalls gets all the calls that were made to SpanExporter. Check the length with:

len(mockedFrontend.SpanExporterCalls())

type KeymapBar added in v0.20.2

type KeymapBar struct {
	tuist.Compo

	// Profile is the termenv color profile.
	Profile termenv.Profile

	// UsingCloudEngine shows the cloud icon prefix.
	UsingCloudEngine bool

	// Keys returns the current set of key bindings to display.
	Keys func(out *termenv.Output) []key.Binding

	// PressedKey is the key string that was most recently pressed.
	PressedKey string

	// PressedKeyAt is when the key was pressed.
	PressedKeyAt time.Time
}

KeymapBar is a component that renders a horizontal key binding bar.

func (*KeymapBar) Render added in v0.20.2

func (kb *KeymapBar) Render(ctx tuist.Context) tuist.RenderResult

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 NotificationBubble added in v0.20.2

type NotificationBubble struct {
	tuist.Compo
	// contains filtered or unexported fields
}

NotificationBubble renders a bordered notification box with a title embedded in the top border and optional keymap in the border.

╭─ Title ─── q quit ─╮
│ content here        │
│ more content        │
╰─────────────────────╯

func (*NotificationBubble) Render added in v0.20.2

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 ExecCommand, raw bool) error

func (PlainFrontendMetricExporter) Export added in v0.13.6

func (PlainFrontendMetricExporter) ForceFlush added in v0.13.6

func (PlainFrontendMetricExporter) HandleForm added in v0.18.18

func (fe PlainFrontendMetricExporter) HandleForm(ctx context.Context, form *huh.Form) error

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) (cleanups.CleanupF, error)) error

func (PlainFrontendMetricExporter) SetClient added in v0.18.17

func (fe PlainFrontendMetricExporter) SetClient(client *dagger.Client)

func (PlainFrontendMetricExporter) SetCloudURL added in v0.13.6

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

func (PlainFrontendMetricExporter) SetPrimary added in v0.13.6

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

func (PlainFrontendMetricExporter) SetSidebarContent added in v0.19.0

func (fe PlainFrontendMetricExporter) SetSidebarContent(SidebarSection)

func (PlainFrontendMetricExporter) SetTelemetryError added in v0.20.2

func (fe PlainFrontendMetricExporter) SetTelemetryError(err error)

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 Rave added in v0.19.7

type Rave struct {
	// Show extra details useful for debugging a desynced rave.
	ShowDetails bool

	// The animation to display.
	Frames SpinnerFrames
	// contains filtered or unexported fields
}

func NewRave added in v0.19.7

func NewRave() *Rave

func (*Rave) Init added in v0.19.7

func (rave *Rave) Init() tea.Cmd

func (*Rave) Progress added in v0.19.7

func (rave *Rave) Progress(now time.Time) (int, float64)

func (*Rave) Update added in v0.19.7

func (rave *Rave) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Rave) View added in v0.19.7

func (rave *Rave) View() string

func (*Rave) ViewFancy added in v0.19.7

func (rave *Rave) ViewFancy(now time.Time) string

func (*Rave) ViewFrame added in v0.19.7

func (rave *Rave) ViewFrame(now time.Time, frames SpinnerFrames) (string, int)

type ShellHandler added in v0.17.0

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

	// AutoComplete provides completions for the current input.
	// Uses tuist's completion types directly.
	AutoComplete(input string, cursorPos int) tuist.CompletionResult

	// IsComplete determines if the current input is a complete command.
	// Used to decide whether Enter submits or inserts a newline.
	IsComplete(input string) bool

	// Prompt generates the shell prompt string based on current state.
	// Returns the prompt string and an optional async function for
	// lazy initialization (e.g. LLM setup). The caller runs the async
	// function in a goroutine and refreshes the prompt when it returns.
	Prompt(ctx context.Context, out TermOutput, fg termenv.Color) (string, func())

	// KeyBindings returns the keys displayed in the keymap when editing.
	KeyBindings(out TermOutput) []key.Binding

	// ReactToInput allows reacting to live input before it's submitted.
	// Returns nil if the key was not handled. If handled, returns a
	// function that performs any async work (may be nil if no async work
	// is needed). The caller runs the async function in a goroutine.
	//
	// inputValue is the current text in the input field. editing is true
	// when the input field is focused (editing mode vs navigation mode).
	ReactToInput(ctx context.Context, ev uv.KeyPressEvent, inputValue string, editing bool) func()

	// EncodeHistory encodes a history entry for persistence.
	EncodeHistory(entry string) string
	// DecodeHistory decodes a persisted history entry.
	// May update internal state (e.g. mode) based on the entry prefix.
	DecodeHistory(entry string) string
	// SaveBeforeHistory saves the current mode before history navigation.
	SaveBeforeHistory()
	// RestoreAfterHistory restores the mode saved before history navigation.
	RestoreAfterHistory()
}

ShellHandler defines the interface for handling shell interactions. All methods are called on the UI goroutine unless noted otherwise.

type SidebarSection added in v0.19.0

type SidebarSection struct {
	// A heading to show for the content, if any. If empty, the content will be
	// placed in the topmost portion of the sidebar.
	Title string
	// The content to display.
	Content string
	// The content to display, for a given width.
	ContentFunc func(int) string
	// Keymap associated with this section
	KeyMap []key.Binding
}

func (SidebarSection) Body added in v0.19.4

func (sec SidebarSection) Body(width int) string

type SpanTreeView added in v0.20.2

type SpanTreeView struct {
	tuist.Compo
	// contains filtered or unexported fields
}

SpanTreeView is a tuist component that renders a TraceTree node and its children recursively. This is the tree-based replacement for SpanRowView.

The parent SpanTreeView computes and sets the prefix strings for each child before calling RenderChild. When a parent's status changes, it re-renders, recomputing child prefixes — so prefixes are always fresh.

Children that haven't changed return cached results from RenderChild. The parent just concatenates cached child lines, which is O(pointers).

func (*SpanTreeView) Render added in v0.20.2

func (s *SpanTreeView) Render(ctx tuist.Context) tuist.RenderResult

Render produces the lines for this span tree node and its children. This method is stateless — all component state (prefix, children, focus, spinner) is synced by syncSpanTreeState() before Render runs.

func (*SpanTreeView) SetFocused added in v0.20.2

func (s *SpanTreeView) SetFocused(_ tuist.Context, focused bool)

SetFocused is called by tuist when this component gains or loses focus. This is O(1) — only the old and new focused components are notified.

type Spinner added in v0.19.7

type Spinner interface {
	tea.Model

	ViewFancy(time.Time) string
	ViewFrame(time.Time, SpinnerFrames) (string, int)
}

type SpinnerFrames added in v0.19.7

type SpinnerFrames struct {
	Frames []string
	Easing ease.Function
}

SpinnerFrames contains animation frames.

type SpinnerView added in v0.20.2

type SpinnerView struct {
	tuist.Compo
	// contains filtered or unexported fields
}

SpinnerView is a self-ticking spinner component. It starts a tick goroutine on mount (via OnMount/ctx.Done()) and stops when dismounted. Only mounted when a span is running, so completed spans have zero per-frame cost.

func (*SpinnerView) OnMount added in v0.20.2

func (s *SpinnerView) OnMount(ctx tuist.Context)

OnMount starts a tick goroutine. ctx.Done() fires on dismount.

func (*SpinnerView) Render added in v0.20.2

func (s *SpinnerView) Render(ctx tuist.Context) tuist.RenderResult

func (*SpinnerView) ViewFancy added in v0.20.2

func (s *SpinnerView) ViewFancy() string

ViewFancy returns the current spinner frame for inline use.

type TermOutput added in v0.16.3

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

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

type Vterm added in v0.9.9

type Vterm struct {
	Offset int
	Height int
	Width  int

	Prefix string

	Profile termenv.Profile

	// Search highlight state. When SearchQuery is non-empty, matching
	// substrings in rendered lines are highlighted. SearchCurrentRow
	// is the vterm row index of the "current" match (-1 for none),
	// which gets a brighter highlight.
	SearchQuery      string
	SearchCurrentRow int
	// 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)

Render writes the output for the given region of the terminal, with ANSI formatting. Search highlights are rendered natively by midterm.

func (*Vterm) ScrollPercent added in v0.9.9

func (term *Vterm) ScrollPercent() float64

func (*Vterm) ScrollToRow added in v0.20.2

func (term *Vterm) ScrollToRow(row int)

ScrollToRow scrolls the viewport so that the given row is centered (or as close as possible) within the visible area.

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) SetSearchHighlight added in v0.20.2

func (term *Vterm) SetSearchHighlight(query string, currentRow int)

SetSearchHighlight sets the search highlight state using native midterm search. Pass an empty query to clear highlights. currentRow is the vterm row of the "current" match (-1 if none in this vterm).

Always re-runs the search so that new content is picked up.

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)

type WithDirectoryArgs added in v0.19.7

type WithDirectoryArgs struct {
	Path   string `json:"path"`
	Source string `json:"source"`
}

WithDirectoryArgs represents the arguments for withMountedDirectory calls

func (WithDirectoryArgs) Render added in v0.19.7

func (a WithDirectoryArgs) Render(out TermOutput) (string, []string, bool)

type WithEnvVariableArgs added in v0.19.7

type WithEnvVariableArgs struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

WithEnvVariableArgs represents the arguments for withEnvVariable calls

func (WithEnvVariableArgs) Render added in v0.19.7

func (a WithEnvVariableArgs) Render(out TermOutput) (string, []string, bool)

type WithExecArgs added in v0.19.7

type WithExecArgs struct {
	Args []string `json:"args"`
}

WithExecArgs represents the arguments for withExec calls

func (WithExecArgs) Render added in v0.19.7

func (a WithExecArgs) Render(out TermOutput) (string, []string, bool)

type WithFileArgs added in v0.19.7

type WithFileArgs struct {
	Path   string `json:"path"`
	Source string `json:"source"`
}

WithFileArgs represents the arguments for withFile calls

func (WithFileArgs) Render added in v0.19.7

func (a WithFileArgs) Render(out TermOutput) (string, []string, bool)

type WithMountedDirectoryArgs added in v0.19.7

type WithMountedDirectoryArgs struct {
	Path   string `json:"path"`
	Source string `json:"source"`
}

WithMountedDirectoryArgs represents the arguments for withMountedDirectory calls

func (WithMountedDirectoryArgs) Render added in v0.19.7

type WithMountedFileArgs added in v0.19.7

type WithMountedFileArgs struct {
	Path   string `json:"path"`
	Source string `json:"source"`
}

WithMountedFileArgs represents the arguments for withMountedFile calls

func (WithMountedFileArgs) Render added in v0.19.7

func (a WithMountedFileArgs) Render(out TermOutput) (string, []string, bool)

type WithNewFileArgs added in v0.19.7

type WithNewFileArgs struct {
	Path     string `json:"path"`
	Contents string `json:"contents"`
}

func (WithNewFileArgs) Render added in v0.19.7

func (a WithNewFileArgs) Render(out TermOutput) (string, []string, bool)

type WithUserArgs added in v0.19.7

type WithUserArgs struct {
	Name string `json:"name"`
}

WithUserArgs represents the arguments for withUser calls

func (WithUserArgs) Render added in v0.19.7

func (a WithUserArgs) Render(out TermOutput) (string, []string, bool)

type WithWorkdirArgs added in v0.19.7

type WithWorkdirArgs struct {
	Path string `json:"path"`
}

WithWorkdirArgs represents the arguments for withWorkdir calls

func (WithWorkdirArgs) Render added in v0.19.7

func (a WithWorkdirArgs) Render(out TermOutput) (string, []string, bool)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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