protocol

package
v0.22.0 Latest Latest
Warning

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

Go to latest
Published: May 7, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ChannelControl = byte(0x00)
	ChannelData    = byte(0x01)
	MaxPayload     = 4 * 1024 * 1024
)
View Source
const Version = "1.0"

Variables

This section is empty.

Functions

func DecodePayload

func DecodePayload(m Envelope, target any) error

func EncodeControl

func EncodeControl(msgType string, payload any) ([]byte, error)

Types

type ApprovalDecisionMsg added in v0.13.0

type ApprovalDecisionMsg struct {
	Decision string `json:"decision"`
	Reason   string `json:"reason,omitempty"`
}

type ApprovalInfo added in v0.13.0

type ApprovalInfo struct {
	RequestID   string `json:"request_id"`
	SessionID   string `json:"session_id"`
	SessionName string `json:"session_name"`
	ToolName    string `json:"tool_name"`
	ToolInput   string `json:"tool_input,omitempty"`
	Agent       string `json:"agent"`
	RepoName    string `json:"repo_name"`
	RequestedAt string `json:"requested_at"`
}

type ApprovalNotificationMsg added in v0.13.0

type ApprovalNotificationMsg struct {
	Pending []ApprovalInfo `json:"pending"`
}

type ApprovalRequestMsg added in v0.13.0

type ApprovalRequestMsg struct {
	RequestID string `json:"request_id"`
	SessionID string `json:"session_id"`
	ToolName  string `json:"tool_name"`
	ToolInput string `json:"tool_input,omitempty"`
}

ApprovalRequestMsg is sent by the hook CLI (gr approve-request) to the daemon. The handler blocks until a decision is made.

type ApprovalRespondMsg added in v0.13.0

type ApprovalRespondMsg struct {
	RequestID string `json:"request_id"`
	Decision  string `json:"decision"`
	Reason    string `json:"reason,omitempty"`
}

type AttachMsg

type AttachMsg struct {
	SessionID string `json:"session_id"`
}

type ContextReport added in v0.11.0

type ContextReport struct {
	UsedTokens *int64   `json:"used_tokens,omitempty"`
	MaxTokens  *int64   `json:"max_tokens,omitempty"`
	Percent    *float64 `json:"percent,omitempty"`
}

type CreateMsg

type CreateMsg struct {
	Name            string `json:"name"`
	ParentID        string `json:"parent_id,omitempty"`
	Agent           string `json:"agent"`
	RepoPath        string `json:"repo_path"`
	Base            string `json:"base,omitempty"`
	Prompt          string `json:"prompt,omitempty"`
	NoRepo          bool   `json:"no_repo,omitempty"`
	ShareWorktree   string `json:"share_worktree,omitempty"`
	AgentHooks      bool   `json:"agent_hooks,omitempty"`
	InPlace         bool   `json:"in_place,omitempty"`
	AllowConcurrent bool   `json:"allow_concurrent,omitempty"`
}

type DeleteMsg

type DeleteMsg struct {
	SessionID string `json:"session_id"`
	Children  bool   `json:"children,omitempty"`
}

type DetachedMsg

type DetachedMsg struct {
	Reason string `json:"reason"`
}

type Envelope

type Envelope struct {
	Type    string          `json:"type"`
	Payload json.RawMessage `json:"payload,omitempty"`
}

func DecodeControl

func DecodeControl(raw []byte) (Envelope, error)

type ErrorMsg

type ErrorMsg struct {
	Message string `json:"message"`
}

type FleetSummary added in v0.7.0

type FleetSummary struct {
	Total    int `json:"total"`
	Active   int `json:"active"`
	Approval int `json:"approval"`
	Ready    int `json:"ready"`
	Errored  int `json:"errored"`
	Stopped  int `json:"stopped"`
}

type ForkMsg added in v0.10.0

type ForkMsg struct {
	Name            string `json:"name"`
	SourceSessionID string `json:"source_session_id"`
}

type Frame

type Frame struct {
	Channel byte
	Payload []byte
}

type FrameReader

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

func NewFrameReader

func NewFrameReader(r io.Reader) *FrameReader

func (*FrameReader) ReadFrame

func (fr *FrameReader) ReadFrame() (Frame, error)

type FrameWriter

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

func NewFrameWriter

func NewFrameWriter(w io.Writer) *FrameWriter

func (*FrameWriter) WriteFrame

func (fw *FrameWriter) WriteFrame(channel byte, payload []byte) error

type HandshakeErrMsg

type HandshakeErrMsg struct {
	Reason string `json:"reason"`
}

type HandshakeMsg

type HandshakeMsg struct {
	Version      string    `json:"version"`
	ClientID     string    `json:"client_id"`
	TerminalSize [2]uint16 `json:"terminal_size"`
	Cwd          string    `json:"cwd"`
	Profile      string    `json:"profile,omitempty"`
}

Client -> Daemon

type HandshakeOkMsg

type HandshakeOkMsg struct {
	Version       string `json:"version"`
	DaemonVersion string `json:"daemon_version"`
}

Daemon -> Client

type IncludedRepoInfo added in v0.19.0

type IncludedRepoInfo struct {
	RepoName     string `json:"repo_name"`
	WorktreePath string `json:"worktree_path"`
	Branch       string `json:"branch"`
	BaseBranch   string `json:"base_branch"`
	Dirty        bool   `json:"dirty,omitempty"`
	Unpushed     int    `json:"unpushed,omitempty"`
}

type LogsMsg

type LogsMsg struct {
	SessionID string `json:"session_id"`
	Lines     int    `json:"lines"`
	Follow    bool   `json:"follow"`
}

type MsgAckMsg

type MsgAckMsg struct {
	Stream     string `json:"stream"`
	Subscriber string `json:"subscriber"`
}

type MsgPubMsg

type MsgPubMsg struct {
	Stream     string `json:"stream"`
	Body       string `json:"body"`
	SenderID   string `json:"sender_id,omitempty"`
	SenderName string `json:"sender_name,omitempty"`
	ThreadID   string `json:"thread_id,omitempty"`
	ReplyTo    string `json:"reply_to,omitempty"`
}

type MsgSubMsg

type MsgSubMsg struct {
	Stream     string `json:"stream"`
	Subscriber string `json:"subscriber"`
	OnlyUnread bool   `json:"only_unread"`
	ThreadID   string `json:"thread_id,omitempty"`
	Wait       bool   `json:"wait"`
	Follow     bool   `json:"follow"`
	Ack        bool   `json:"ack"`
}

type MsgTopicsMsg

type MsgTopicsMsg struct {
	Subscriber    string `json:"subscriber"`
	IncludeSystem bool   `json:"include_system,omitempty"`
}

type RenameMsg

type RenameMsg struct {
	SessionID string `json:"session_id"`
	NewName   string `json:"new_name"`
}

type ResizeMsg

type ResizeMsg struct {
	Cols uint16 `json:"cols"`
	Rows uint16 `json:"rows"`
}

type ResumeMsg

type ResumeMsg struct {
	SessionID string `json:"session_id"`
}

type ScreenPreviewMsg added in v0.2.0

type ScreenPreviewMsg struct {
	SessionID string `json:"session_id"`
}

type ScreenPreviewResponseMsg added in v0.2.0

type ScreenPreviewResponseMsg struct {
	SessionID string `json:"session_id"`
	Preview   string `json:"preview"`
}

type ScreenSnapshotMsg added in v0.2.0

type ScreenSnapshotMsg struct {
	SessionID string `json:"session_id"`
}

type ScreenSnapshotResponseMsg added in v0.2.0

type ScreenSnapshotResponseMsg struct {
	SessionID     string `json:"session_id"`
	Frame         string `json:"frame"`
	CursorX       int    `json:"cursor_x"`
	CursorY       int    `json:"cursor_y"`
	CursorVisible bool   `json:"cursor_visible"`
	Cols          int    `json:"cols"`
	Rows          int    `json:"rows"`
}

type SessionInfo

type SessionInfo struct {
	ID             string             `json:"id"`
	ParentID       string             `json:"parent_id,omitempty"`
	Name           string             `json:"name"`
	RepoPath       string             `json:"repo_path"`
	RepoName       string             `json:"repo_name"`
	WorktreePath   string             `json:"worktree_path"`
	Branch         string             `json:"branch"`
	BaseBranch     string             `json:"base_branch"`
	Agent          string             `json:"agent"`
	AgentSessionID string             `json:"agent_session_id,omitempty"`
	Status         string             `json:"status"`
	AgentStatus    string             `json:"agent_status,omitempty"`
	ExitCode       *int               `json:"exit_code,omitempty"`
	CreatedAt      string             `json:"created_at"`
	LastAttachedAt string             `json:"last_attached_at,omitempty"`
	Dirty          bool               `json:"dirty,omitempty"`
	UnpushedCount  int                `json:"unpushed_count,omitempty"`
	Sandboxed      bool               `json:"sandboxed,omitempty"`
	SharedWorktree bool               `json:"shared_worktree,omitempty"`
	InPlace        bool               `json:"in_place,omitempty"`
	Model          string             `json:"model,omitempty"`
	ToolName       string             `json:"tool_name,omitempty"`
	CostUSD        *float64           `json:"cost_usd,omitempty"`
	ContextPercent *float64           `json:"context_percent,omitempty"`
	Includes       []IncludedRepoInfo `json:"includes,omitempty"`
}

type SessionListMsg

type SessionListMsg struct {
	Sessions []SessionInfo `json:"sessions"`
}

type StatusReportMsg added in v0.11.0

type StatusReportMsg struct {
	SessionID string         `json:"session_id"`
	Event     string         `json:"event"`
	Status    string         `json:"status,omitempty"`
	ToolName  string         `json:"tool_name,omitempty"`
	Model     string         `json:"model,omitempty"`
	Usage     *UsageReport   `json:"usage,omitempty"`
	Context   *ContextReport `json:"context,omitempty"`
}

Client -> Daemon (hook reporting)

type StatusRequestMsg added in v0.3.0

type StatusRequestMsg struct {
	SessionID string `json:"session_id"`
}

type StatusResponseMsg added in v0.3.0

type StatusResponseMsg struct {
	Session     SessionInfo  `json:"session"`
	UnreadCount int          `json:"unread_count"`
	Fleet       FleetSummary `json:"fleet"`
}

type StopMsg

type StopMsg struct {
	SessionID string `json:"session_id"`
}

type TypeMsg

type TypeMsg struct {
	SessionID string `json:"session_id"`
	Input     string `json:"input"`
	NoNewline bool   `json:"no_newline,omitempty"`
}

type UpgradeMsg added in v0.16.3

type UpgradeMsg struct {
	ExecPath string `json:"exec_path,omitempty"`
}

type UsageReport added in v0.11.0

type UsageReport struct {
	InputTokens  *int64   `json:"input_tokens,omitempty"`
	OutputTokens *int64   `json:"output_tokens,omitempty"`
	CostUSD      *float64 `json:"cost_usd,omitempty"`
}

Jump to

Keyboard shortcuts

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