agentterminal

package
v0.0.0-...-1d32ed5 Latest Latest
Warning

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

Go to latest
Published: May 8, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StatusStarting = "starting"
	StatusRunning  = "running"
	StatusReady    = "ready"
	StatusExited   = "exited"
	StatusFailed   = "failed"
	StatusKilled   = "killed"

	ReadinessUnknown  = "unknown"
	ReadinessWaiting  = "waiting"
	ReadinessReady    = "ready"
	ReadinessTimedOut = "timed_out"
	ReadinessFailed   = "failed"
)

Variables

View Source
var (
	ErrJobNotFound      = errors.New("job not found")
	ErrTerminalNotFound = errors.New("terminal not found")
	ErrTerminalClosed   = errors.New("terminal is closed")
)

Functions

func ShouldRunInBackground

func ShouldRunInBackground(command string) bool

Types

type ControlServer

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

func NewControlServer

func NewControlServer(manager *Manager, baseDir string) *ControlServer

func (*ControlServer) StartTask

func (s *ControlServer) StartTask(ctx context.Context, scope TaskScope) (TaskControl, error)

func (*ControlServer) StopTask

func (s *ControlServer) StopTask(taskID string)

type EventSender

type EventSender interface {
	SendAgentTerminalStarted(job Job) error
	SendAgentTerminalUpdated(job Job) error
	SendTerminalOutput(terminalID, sessionID, channelID string, seq int64, data []byte) error
	SendTerminalSnapshot(terminalID, sessionID, channelID string, seq int64, data []byte) error
	SendTerminalExit(terminalID, sessionID, channelID, reason string, exitCode int, signal string, endedAt time.Time) error
	SendTerminalError(requestID, terminalID, sessionID, channelID, message string) error
	SendLocalServerDetected(sessionID, channelID, taskID, toolCallID, host string, port int, url, command, source string) error
}

type Job

type Job struct {
	JobID          string
	TerminalID     string
	SessionID      string
	ChannelID      string
	TaskID         string
	ToolCallID     string
	ProjectID      string
	MachineID      string
	Command        string
	CommandPreview string
	Title          string
	CWD            string
	Status         string
	Readiness      Readiness
	Ports          []Port
	URLs           []string
	Seq            int64
	StartedAt      time.Time
	UpdatedAt      time.Time
	EndedAt        time.Time
	ExitCode       *int
	Signal         string
	Reason         string
}

type JobSummary

type JobSummary struct {
	JobID          string    `json:"jobId"`
	TerminalID     string    `json:"terminalId"`
	Title          string    `json:"title"`
	CommandPreview string    `json:"commandPreview"`
	CWD            string    `json:"cwd"`
	Status         string    `json:"status"`
	Readiness      Readiness `json:"readiness"`
	Ports          []Port    `json:"ports"`
	URLs           []string  `json:"urls"`
	StartedAt      string    `json:"startedAt"`
	EndedAt        string    `json:"endedAt,omitempty"`
}

type KillRequest

type KillRequest struct {
	JobID  string `json:"jobId"`
	Signal string `json:"signal,omitempty"`
	Reason string `json:"reason,omitempty"`
}

type KillResult

type KillResult struct {
	JobID    string `json:"jobId"`
	Status   string `json:"status"`
	ExitCode *int   `json:"exitCode,omitempty"`
	Signal   string `json:"signal,omitempty"`
	EndedAt  string `json:"endedAt"`
}

type Limits

type Limits struct {
	MaxSessionJobs         int
	MaxDaemonJobs          int
	ScrollbackBytes        int
	OutputChunkBytes       int
	ToolOutputBytes        int
	DefaultReadyTimeout    time.Duration
	MaxWaitTimeout         time.Duration
	MaxLifetime            time.Duration
	IdleTimeout            time.Duration
	TerminationGracePeriod time.Duration
}

func DefaultLimits

func DefaultLimits() Limits

type ListRequest

type ListRequest struct {
	Status string `json:"status,omitempty"`
}

type ListResult

type ListResult struct {
	Jobs []JobSummary `json:"jobs"`
}

type Manager

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

func NewManager

func NewManager(events EventSender, limits Limits) *Manager

func (*Manager) Close

func (m *Manager) Close(terminalID string, reason string)

func (*Manager) CloseAll

func (m *Manager) CloseAll(ctx context.Context, reason string)

func (*Manager) HasTerminal

func (m *Manager) HasTerminal(terminalID string) bool

func (*Manager) Input

func (m *Manager) Input(terminalID string, data []byte) error

func (*Manager) Kill

func (m *Manager) Kill(req KillRequest) (KillResult, error)

func (*Manager) List

func (m *Manager) List(sessionID string, req ListRequest) (ListResult, error)

func (*Manager) Output

func (m *Manager) Output(req OutputRequest) (OutputResult, error)

func (*Manager) Resize

func (m *Manager) Resize(terminalID string, cols, rows int) error

func (*Manager) Send

func (m *Manager) Send(req SendRequest) (SendResult, error)

func (*Manager) Snapshot

func (m *Manager) Snapshot(terminalID string) error

func (*Manager) Start

func (m *Manager) Start(ctx context.Context, req StartRequest) (StartResult, error)

func (*Manager) Wait

func (m *Manager) Wait(ctx context.Context, req WaitRequest) (WaitResult, error)

type OutputRequest

type OutputRequest struct {
	JobID     string `json:"jobId"`
	SinceSeq  int64  `json:"sinceSeq,omitempty"`
	TailBytes int    `json:"tailBytes,omitempty"`
	TailLines int    `json:"tailLines,omitempty"`
}

type OutputResult

type OutputResult struct {
	JobID      string    `json:"jobId"`
	TerminalID string    `json:"terminalId"`
	Status     string    `json:"status"`
	Seq        int64     `json:"seq"`
	Output     string    `json:"output"`
	Truncated  bool      `json:"truncated"`
	Readiness  Readiness `json:"readiness"`
	Ports      []Port    `json:"ports"`
	URLs       []string  `json:"urls"`
	ExitCode   *int      `json:"exitCode,omitempty"`
	Signal     string    `json:"signal,omitempty"`
	EndedAt    string    `json:"endedAt,omitempty"`
}

type Port

type Port struct {
	Host string `json:"host"`
	Port int    `json:"port"`
	URL  string `json:"url"`
}

type Readiness

type Readiness struct {
	State       string `json:"state"`
	Source      string `json:"source,omitempty"`
	MatchedText string `json:"matchedText,omitempty"`
	ReadyAt     string `json:"readyAt,omitempty"`
	TimeoutMs   int    `json:"timeoutMs,omitempty"`
}

type ReadinessDetector

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

func NewReadinessDetector

func NewReadinessDetector(req StartRequest, limits Limits) (*ReadinessDetector, error)

func (*ReadinessDetector) MarkExit

func (d *ReadinessDetector) MarkExit(exitCode int) (Readiness, bool)

func (*ReadinessDetector) Observe

func (d *ReadinessDetector) Observe(output string) (Readiness, []Port, []string, bool)

type SendRequest

type SendRequest struct {
	JobID         string `json:"jobId"`
	Input         string `json:"input"`
	AppendNewline bool   `json:"appendNewline,omitempty"`
}

type SendResult

type SendResult struct {
	JobID  string `json:"jobId"`
	Sent   bool   `json:"sent"`
	Seq    int64  `json:"seq"`
	Status string `json:"status"`
}

type ShellExecRequest

type ShellExecRequest struct {
	Command    string `json:"command"`
	CWD        string `json:"cwd,omitempty"`
	TimeoutMs  int    `json:"timeoutMs,omitempty"`
	Mode       string `json:"mode,omitempty"`
	ToolCallID string `json:"toolCallId,omitempty"`
}

type ShellExecResult

type ShellExecResult struct {
	Mode       string       `json:"mode"`
	Background bool         `json:"background"`
	Started    *StartResult `json:"started,omitempty"`
	Stdout     string       `json:"stdout,omitempty"`
	Stderr     string       `json:"stderr,omitempty"`
	ExitCode   int          `json:"exitCode"`
	TimedOut   bool         `json:"timedOut"`
	Truncated  bool         `json:"truncated,omitempty"`
}

type StartRequest

type StartRequest struct {
	Command         string            `json:"command"`
	CWD             string            `json:"cwd,omitempty"`
	Title           string            `json:"title,omitempty"`
	Env             map[string]string `json:"env,omitempty"`
	ReadyPattern    string            `json:"readyPattern,omitempty"`
	ReadyURL        string            `json:"readyUrl,omitempty"`
	ReadyPort       int               `json:"readyPort,omitempty"`
	ReadyTimeoutMs  int               `json:"readyTimeoutMs,omitempty"`
	OutputTailBytes int               `json:"outputTailBytes,omitempty"`
	SessionID       string
	ChannelID       string
	TaskID          string
	ToolCallID      string
	ProjectID       string
	MachineID       string
	ProjectCWD      string
}

type StartResult

type StartResult struct {
	JobID       string    `json:"jobId"`
	TerminalID  string    `json:"terminalId"`
	Status      string    `json:"status"`
	Title       string    `json:"title"`
	CWD         string    `json:"cwd"`
	StartedAt   string    `json:"startedAt"`
	Readiness   Readiness `json:"readiness"`
	Ports       []Port    `json:"ports"`
	URLs        []string  `json:"urls"`
	OutputTail  string    `json:"outputTail"`
	NextActions []string  `json:"nextActions"`
}

type TaskControl

type TaskControl struct {
	SocketPath string
	Token      string
	Env        []string
}

type TaskScope

type TaskScope struct {
	SessionID  string
	ChannelID  string
	TaskID     string
	ProjectID  string
	MachineID  string
	ProjectCWD string
}

type WaitRequest

type WaitRequest struct {
	JobID     string `json:"jobId"`
	Condition string `json:"condition"`
	Pattern   string `json:"pattern,omitempty"`
	TimeoutMs int    `json:"timeoutMs"`
	SinceSeq  int64  `json:"sinceSeq,omitempty"`
}

type WaitResult

type WaitResult struct {
	JobID      string    `json:"jobId"`
	Matched    bool      `json:"matched"`
	Condition  string    `json:"condition"`
	Status     string    `json:"status"`
	Seq        int64     `json:"seq"`
	OutputTail string    `json:"outputTail"`
	Readiness  Readiness `json:"readiness"`
	TimedOut   bool      `json:"timedOut"`
}

Jump to

Keyboard shortcuts

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