ui

package
v0.3.6 Latest Latest
Warning

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

Go to latest
Published: Jul 5, 2026 License: MIT Imports: 55 Imported by: 0

Documentation

Overview

Package ui implements the bubbletea TUI, SSH helpers, and CUE recipe execution for honey.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultLocalFilesRoot added in v0.2.8

func DefaultLocalFilesRoot() string

DefaultLocalFilesRoot returns the configured or home-directory root for local file browser paths.

func DialSSHLeafForRecord added in v0.2.7

func DialSSHLeafForRecord(user string, r hosts.Record) (*ssh.Client, func(), error)

DialSSHLeafForRecord returns a leaf *ssh.Client for SSH to hosts.Record.PrimaryIP (same transport as the TUI). Kubernetes pod records are not supported for raw SSH in this helper.

func LoadAISystemPromptFromConfigPath added in v0.2.8

func LoadAISystemPromptFromConfigPath(configPath string) string

LoadAISystemPromptFromConfigPath returns defaults.ai_system_prompt from the honey YAML at path, if loadable.

func RemoteCopyLocalToRemote added in v0.2.8

func RemoteCopyLocalToRemote(user string, record hosts.Record, localPath, remotePath string, cache *engine.ClientCache) error

RemoteCopyLocalToRemote uploads a local file to the remote path.

func RemoteCopyRemoteToLocal added in v0.2.8

func RemoteCopyRemoteToLocal(user string, record hosts.Record, remotePath, localPath string, cache *engine.ClientCache) error

RemoteCopyRemoteToLocal downloads a remote file to a local path.

func RemoteListDir added in v0.2.8

func RemoteListDir(user string, record hosts.Record, remotePath string, cache *engine.ClientCache) ([]engine.RemoteFileEntry, error)

RemoteListDir lists a directory on the remote host using a cached SSH/k8s client.

func RemoteMkdirAll added in v0.3.6

func RemoteMkdirAll(user string, record hosts.Record, remotePath string, cache *engine.ClientCache) error

RemoteMkdirAll creates a directory on the remote host using a cached client.

func RemoteRemove added in v0.3.6

func RemoteRemove(user string, record hosts.Record, remotePath string, recursive bool, cache *engine.ClientCache) error

RemoteRemove deletes a file or directory on the remote host using a cached client.

func RemoteStat added in v0.3.6

func RemoteStat(user string, record hosts.Record, remotePath string, cache *engine.ClientCache) (hostexec.RemoteFileEntry, error)

RemoteStat queries a file stat on the remote host using a cached client.

func ResizeFromColsRows added in v0.2.7

func ResizeFromColsRows(cols, rows int) *remotecommand.TerminalSize

ResizeFromColsRows returns a terminal size for k8s remotecommand, or nil if cols or rows are non-positive.

func ResolveLocalAbsUnderRoot added in v0.3.6

func ResolveLocalAbsUnderRoot(root, requested string) (string, error)

ResolveLocalAbsUnderRoot resolves requested against root and ensures the result stays under root.

func RunDockerWebTTY added in v0.3.0

func RunDockerWebTTY(
	ctx context.Context,
	user string,
	r hosts.Record,
	stdin io.Reader,
	stdout io.Writer,
	cols, rows int,
	resizeCh <-chan DockerTerminalSize,
	reg hostexec.Registry,
) error

RunDockerWebTTY runs an interactive shell in a container with TTY over stdin/stdout.

func RunK8sPodWebTTY added in v0.2.7

func RunK8sPodWebTTY(
	ctx context.Context,
	r hosts.Record,
	stdin io.Reader,
	stdout, stderr io.Writer,
	cols, rows int,
	resizeCh <-chan *remotecommand.TerminalSize,
) error

RunK8sPodWebTTY runs an interactive shell in a Kubernetes pod with TTY over stdin/stdout/stderr, using the same dial path as the CLI (ephemeral debug container). Resize events are consumed from resizeCh.

func RunLogTUI added in v0.3.1

func RunLogTUI(ctx context.Context, user string, records []hosts.Record, opts LogOptions, cache *engine.ClientCache) error

RunLogTUI starts the interactive log viewer.

func RunRecordingReplay added in v0.2.8

func RunRecordingReplay(recordDir, baseName string) error

RunRecordingReplay plays one .hrec.jsonl in a nested full-screen Bubble Tea view.

func RunTable

func RunTable(records []hosts.Record, sshUser string, opts RunTableOptions) error

RunTable shows an interactive table and optionally execs ssh. After SSH/Tunnel disconnects, it returns to the UI.

func StreamLogs added in v0.3.1

func StreamLogs(ctx context.Context, user string, records []hosts.Record, opts LogOptions, cache *engine.ClientCache, out io.Writer) error

StreamLogs streams logs for records to out with stable per-record prefixes.

Types

type DockerTerminalSize added in v0.3.0

type DockerTerminalSize = dockerprovider.DockerTerminalSize

DockerTerminalSize is a cols/rows pair for docker exec resize. It is an alias for dockerprovider.DockerTerminalSize.

type LocalFileEntry added in v0.2.8

type LocalFileEntry struct {
	Name       string    `json:"name"`
	Path       string    `json:"path"`
	IsDir      bool      `json:"is_dir"`
	Size       int64     `json:"size"`
	Mode       string    `json:"mode"`
	ModifiedAt time.Time `json:"modified_at"`
}

LocalFileEntry mirrors engine.RemoteFileEntry for local directories.

func ListLocalDirUnderRoot added in v0.2.8

func ListLocalDirUnderRoot(root, requested string) (string, []LocalFileEntry, error)

ListLocalDirUnderRoot lists a directory under the resolved root path.

type LogOptions added in v0.3.1

type LogOptions struct {
	Target                 string
	Source                 string
	Follow                 bool
	Tail                   int64
	Since                  time.Duration
	Timestamps             bool
	Container              string
	Unit                   string
	Command                string
	RunAs                  string
	MaxConcurrency         int
	Grep                   string
	Labels                 []string
	Highlight              bool
	Anomaly                bool
	AnomalyModel           string
	AnomalyThresh          float64
	AnomalyWindow          int
	AnomalyOnly            bool
	AnomalyStrict          bool
	AnomalyTokPath         string
	AnomalyEndpoint        string
	AnomalyLLMModel        string
	AnomalyContextLines    int
	AnomalyFilterThreshold float64
	AnomalyFreqWindow      int
	AnomalyFreqRatio       float64
	AnomalyFeedbackFile    string
	AnomalyPreprocessor    string
	AlertEnabled           bool
	AlertSuppressDuration  time.Duration
}

LogOptions controls distributed log streaming.

type LogViewModel added in v0.3.1

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

LogViewModel is the Bubble Tea model for the log viewer.

func NewLogViewModel added in v0.3.1

func NewLogViewModel(opts LogOptions) *LogViewModel

NewLogViewModel creates a new log view model.

func (*LogViewModel) Init added in v0.3.1

func (m *LogViewModel) Init() tea.Cmd

Init initializes the log view model.

func (*LogViewModel) Update added in v0.3.1

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

Update handles messages and updates the log view model.

func (*LogViewModel) View added in v0.3.1

func (m *LogViewModel) View() tea.View

View renders the log viewer UI.

type RunTableOptions added in v0.2.8

type RunTableOptions struct {
	RecordDir     string
	RecordEnabled bool
	// Config is the honey YAML already loaded for this session (optional; nil if none / load failed).
	Config *config.File
	// ConfigPath is the resolved honey YAML path (may be empty); CUE agent_transfer steps with cloud_backend_ref need it.
	ConfigPath string
	// engine.ClientCache is an optional shared SSH client cache. If nil, one is created.
	ClientCache *engine.ClientCache
	// ExecRegistry is the host execution registry.
	ExecRegistry hostexec.Registry
	// AlertBanner is an optional one-line banner shown above the table (e.g. from `honey alert investigate`).
	AlertBanner string
}

RunTableOptions configures optional session recording for the TUI table.

type TunnelModel added in v0.3.6

type TunnelModel struct {
	Record hosts.Record
	Width  int
	Height int
	// contains filtered or unexported fields
}

TunnelModel is the BubbleTea sub-model for the tunnel popup.

func NewTunnelModel added in v0.3.6

func NewTunnelModel(r hosts.Record, isK8s bool, width, height int) *TunnelModel

NewTunnelModel initializes the tunnel sub-model.

func (*TunnelModel) Init added in v0.3.6

func (m *TunnelModel) Init() tea.Cmd

Init satisfies tea.Model.

func (*TunnelModel) Update added in v0.3.6

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

Update satisfies tea.Model.

func (*TunnelModel) View added in v0.3.6

func (m *TunnelModel) View() tea.View

View satisfies tea.Model.

type TunnelResult added in v0.3.6

type TunnelResult struct {
	Arg      string
	Canceled bool
}

TunnelResult wraps the tunnel creation outcome.

Jump to

Keyboard shortcuts

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