agent

package
v0.36.0 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2026 License: MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNeedReLogin = errors.New("all tokens expired, please run 'agentserver' to re-authenticate")

ErrNeedReLogin indicates all tokens have expired and interactive re-auth is needed.

View Source
var Version = "dev"

Version is set at build time via -ldflags.

Functions

func CleanupSession added in v0.35.0

func CleanupSession(session *Session)

CleanupSession clears the PID from the session file.

func DefaultCredentialsPath added in v0.33.0

func DefaultCredentialsPath() string

DefaultCredentialsPath returns ~/.agentserver/.credentials.json.

func DefaultRegistryDir added in v0.20.0

func DefaultRegistryDir() string

DefaultRegistryDir returns the default directory for agentserver config.

func DefaultRegistryPath added in v0.20.0

func DefaultRegistryPath() string

DefaultRegistryPath returns the default path for the registry file.

func DefaultSessionsDir added in v0.35.0

func DefaultSessionsDir() string

DefaultSessionsDir returns ~/.agentserver/sessions.

func EnsureValidToken added in v0.35.0

func EnsureValidToken(serverURL string) (string, error)

EnsureValidToken checks for a valid OAuth access token, refreshing if needed. Returns the access token or ErrNeedReLogin if interactive auth is required.

func IsSessionActive added in v0.35.0

func IsSessionActive(s *Session) bool

IsSessionActive checks if a session's process is still running.

func RegisterDefaultCard added in v0.30.1

func RegisterDefaultCard(serverURL, proxyToken, displayName string) error

RegisterDefaultCard registers a default agent card for a claudecode agent.

func RunClaudeCode added in v0.27.0

func RunClaudeCode(opts ClaudeCodeOptions)

RunClaudeCode executes the headless Claude Code agent. It registers a sandbox, connects a tunnel for heartbeat, and runs a task worker that executes delegated tasks via the CCR v2 bridge API.

func RunLogin added in v0.33.0

func RunLogin(opts LoginOptions) error

RunLogin executes the OAuth Device Flow login and agent registration.

func RunTaskWorker added in v0.30.0

func RunTaskWorker(ctx context.Context, opts TaskWorkerOptions)

RunTaskWorker starts the task worker that polls for tasks. Blocks until ctx is cancelled.

func SaveCredentials added in v0.33.0

func SaveCredentials(path string, creds *Credentials) error

SaveCredentials writes credentials to disk with 0600 permissions.

func SaveRegistry added in v0.20.0

func SaveRegistry(path string, reg *Registry) error

SaveRegistry writes the registry to disk.

func SaveSession added in v0.35.0

func SaveSession(session *Session) error

SaveSession writes a session file and records the current PID.

Types

type AgentInfoData added in v0.16.0

type AgentInfoData struct {
	Hostname        string                 `json:"hostname"`
	OS              string                 `json:"os"`
	Platform        string                 `json:"platform"`
	PlatformVersion string                 `json:"platform_version"`
	KernelArch      string                 `json:"kernel_arch"`
	CPUModelName    string                 `json:"cpu_model_name"`
	CPUCountLogical int                    `json:"cpu_count_logical"`
	MemoryTotal     uint64                 `json:"memory_total"`
	DiskTotal       uint64                 `json:"disk_total"`
	DiskFree        uint64                 `json:"disk_free"`
	AgentVersion    string                 `json:"agent_version"`
	OpencodeVersion string                 `json:"opencode_version"`
	Workdir         string                 `json:"workdir"`
	HostInfo        *host.InfoStat         `json:"host_info,omitempty"`
	CPUInfo         *cpuInfoDetail         `json:"cpu_info,omitempty"`
	MemoryInfo      *mem.VirtualMemoryStat `json:"memory_info,omitempty"`
	DiskInfo        *disk.UsageStat        `json:"disk_info,omitempty"`
}

AgentInfoData is the system info payload sent from agent to server.

type ClaudeCodeOptions added in v0.27.0

type ClaudeCodeOptions struct {
	Server          string
	Name            string
	SkipOpenBrowser bool
	ClaudeBin       string
	WorkDir         string
	Resume          string // sandbox ID to resume
	Continue        bool   // resume most recent session
}

ClaudeCodeOptions holds all flags for the claudecode command.

type Client

type Client struct {
	ServerURL   string
	SandboxID   string
	TunnelToken string
	Workdir     string
	BackendType string // "claudecode"
}

Client is the agent tunnel client that connects to the server and maintains a persistent connection for heartbeat and control.

func NewClient

func NewClient(serverURL, sandboxID, tunnelToken, workdir string) *Client

NewClient creates a new agent tunnel client.

func (*Client) Run

func (c *Client) Run(ctx context.Context) error

Run connects to the server and enters the tunnel event loop. It automatically reconnects with exponential backoff on disconnection.

type Credentials added in v0.33.0

type Credentials struct {
	ServerURL    string    `json:"serverUrl,omitempty"`
	AccessToken  string    `json:"accessToken"`
	RefreshToken string    `json:"refreshToken"`
	ExpiresAt    time.Time `json:"expiresAt"`
	Scopes       []string  `json:"scopes,omitempty"`
}

Credentials holds OAuth tokens for the authenticated user.

func LoadCredentials added in v0.33.0

func LoadCredentials(path string) (*Credentials, error)

LoadCredentials reads credentials from disk. Returns nil if the file does not exist.

type DeviceAuthResponse added in v0.33.0

type DeviceAuthResponse struct {
	DeviceCode              string `json:"device_code"`
	UserCode                string `json:"user_code"`
	VerificationURI         string `json:"verification_uri"`
	VerificationURIComplete string `json:"verification_uri_complete"`
	ExpiresIn               int    `json:"expires_in"`
	Interval                int    `json:"interval"`
}

DeviceAuthResponse is the response from Hydra's device authorization endpoint.

type LockedRegistryFile added in v0.20.0

type LockedRegistryFile struct {
	Path string
	Reg  *Registry
	// contains filtered or unexported fields
}

LockedRegistryFile holds an exclusive lock on the registry for safe read-modify-write operations. Call Close() when done.

func LockRegistry added in v0.20.0

func LockRegistry(path string) (*LockedRegistryFile, error)

LockRegistry acquires an exclusive file lock and loads the registry. The caller must call Close() when done to release the lock and optionally save changes via Save() before Close().

func (*LockedRegistryFile) Close added in v0.20.0

func (l *LockedRegistryFile) Close()

Close releases the file lock.

func (*LockedRegistryFile) Save added in v0.20.0

func (l *LockedRegistryFile) Save() error

Save writes the registry to disk while the lock is held.

type LoginOptions added in v0.33.0

type LoginOptions struct {
	ServerURL       string
	SkipOpenBrowser bool
}

LoginOptions holds flags for the login command.

type RegisterResponse added in v0.33.0

type RegisterResponse struct {
	SandboxID   string `json:"sandbox_id"`
	TunnelToken string `json:"tunnel_token"`
	ProxyToken  string `json:"proxy_token"`
	WorkspaceID string `json:"workspace_id"`
	ShortID     string `json:"short_id"`
}

RegisterResponse is the response from the agent registration endpoint.

type Registry added in v0.20.0

type Registry struct {
	Entries []*RegistryEntry `json:"entries"`
}

Registry holds all agent registrations on this machine.

func LoadRegistry added in v0.20.0

func LoadRegistry(path string) (*Registry, error)

LoadRegistry reads the registry from disk. Returns an empty registry if the file does not exist.

func (*Registry) Find added in v0.20.0

func (r *Registry) Find(dir, workspaceID string) *RegistryEntry

Find returns the entry matching (dir, workspaceID), or nil if not found.

func (*Registry) FindByDir added in v0.20.0

func (r *Registry) FindByDir(dir string) []*RegistryEntry

FindByDir returns all entries for the given directory.

func (*Registry) Put added in v0.20.0

func (r *Registry) Put(entry *RegistryEntry)

Put adds or replaces an entry keyed by (Dir, WorkspaceID).

func (*Registry) Remove added in v0.20.0

func (r *Registry) Remove(dir, workspaceID string) bool

Remove deletes the entry matching (dir, workspaceID). Returns true if an entry was removed, false if not found.

type RegistryEntry added in v0.20.0

type RegistryEntry struct {
	Dir         string `json:"dir"`
	Server      string `json:"server"`
	SandboxID   string `json:"sandbox_id"`
	TunnelToken string `json:"tunnel_token"`
	WorkspaceID string `json:"workspace_id"`
	Name        string `json:"name"`
	Type        string `json:"type,omitempty"`
}

RegistryEntry represents a single agent registration keyed by (Dir, WorkspaceID).

type Session added in v0.35.0

type Session struct {
	SandboxID   string    `json:"sandboxId"`
	TunnelToken string    `json:"tunnelToken"`
	ProxyToken  string    `json:"proxyToken"`
	WorkspaceID string    `json:"workspaceId"`
	Name        string    `json:"name"`
	Type        string    `json:"type"` // "opencode" or "claudecode"
	ServerURL   string    `json:"serverUrl"`
	Dir         string    `json:"dir"`
	CreatedAt   time.Time `json:"createdAt"`
	PID         int       `json:"pid,omitempty"`
}

Session represents a sandbox session created by a single agent process. Stored in ~/.agentserver/sessions/{sandbox-id}.json.

func FindLatestSession added in v0.35.0

func FindLatestSession(dir, sessionType string) (*Session, error)

FindLatestSession finds the most recent inactive session for the given directory and type. If dir is empty, matches any directory. If sessionType is empty, matches any type.

func ListSessions added in v0.35.0

func ListSessions() ([]*Session, error)

ListSessions reads all session files.

func LoadSession added in v0.35.0

func LoadSession(sandboxID string) (*Session, error)

LoadSession reads a session by sandbox ID.

type TaskWorker added in v0.30.0

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

TaskWorker receives and executes delegated tasks using the Go Agent SDK.

func NewTaskWorker added in v0.30.0

func NewTaskWorker(opts TaskWorkerOptions) *TaskWorker

func (*TaskWorker) ExecuteTask added in v0.30.0

func (w *TaskWorker) ExecuteTask(ctx context.Context, taskID, sessionID, prompt, systemContext string, maxTurns int, maxBudgetUSD float64) (*agentsdk.ResultMessage, error)

ExecuteTask runs a single task: connects bridge, executes via Agent SDK.

type TaskWorkerOptions added in v0.30.0

type TaskWorkerOptions struct {
	ServerURL  string // agentserver base URL (e.g. https://agentserver.example.com)
	ProxyToken string // sandbox proxy_token for auth
	SandboxID  string // this agent's sandbox ID
	Workdir    string // working directory for claude CLI
	CLIPath    string // path to claude binary (default: "claude")
}

TaskWorkerOptions configures the task worker.

type TokenResponse added in v0.33.0

type TokenResponse struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	TokenType    string `json:"token_type"`
	ExpiresIn    int    `json:"expires_in"`
	Scope        string `json:"scope"`
}

TokenResponse is the response from the token endpoint.

Jump to

Keyboard shortcuts

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