nodes

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AgentInfo

type AgentInfo struct {
	ID            string `json:"id"`
	DisplayName   string `json:"display_name,omitempty"`
	Role          string `json:"role,omitempty"`
	Type          string `json:"type,omitempty"`
	Transport     string `json:"transport,omitempty"`
	ParentAgentID string `json:"parent_agent_id,omitempty"`
}

AgentInfo describes an enabled agent exposed by a remote clawgo node.

type Artifact

type Artifact struct {
	ID          string `json:"id,omitempty"`
	Name        string `json:"name,omitempty"`
	Kind        string `json:"kind,omitempty"`
	MIMEType    string `json:"mime_type,omitempty"`
	Storage     string `json:"storage,omitempty"`
	Path        string `json:"path,omitempty"`
	URL         string `json:"url,omitempty"`
	ContentText string `json:"content_text,omitempty"`
	ContentB64  string `json:"content_base64,omitempty"`
	SizeBytes   int64  `json:"size_bytes,omitempty"`
	SourcePath  string `json:"source_path,omitempty"`
}

Artifact describes a file/media payload returned from a node action.

type Capabilities

type Capabilities struct {
	Run      bool `json:"run"`
	Invoke   bool `json:"invoke"`
	Model    bool `json:"model"`
	Camera   bool `json:"camera"`
	Screen   bool `json:"screen"`
	Location bool `json:"location"`
	Canvas   bool `json:"canvas"`
}

Capability matrix reported by each node agent.

type DispatchPolicy

type DispatchPolicy struct {
	PreferLocal        bool
	PreferP2P          bool
	AllowRelayFallback bool
	ActionTags         map[string][]string
	AgentTags          map[string][]string
	AllowActions       map[string][]string
	DenyActions        map[string][]string
	AllowAgents        map[string][]string
	DenyAgents         map[string][]string
}

type HTTPRelayTransport

type HTTPRelayTransport struct {
	Manager *Manager
	Client  *http.Client
}

HTTPRelayTransport dispatches requests to node-agent endpoints over HTTP.

func (*HTTPRelayTransport) Name

func (s *HTTPRelayTransport) Name() string

func (*HTTPRelayTransport) Send

func (s *HTTPRelayTransport) Send(ctx context.Context, req Request) (Response, error)

type Handler

type Handler func(req Request) Response

Manager keeps paired node metadata and basic routing helpers.

type Manager

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

func DefaultManager

func DefaultManager() *Manager

func NewManager

func NewManager() *Manager

func (*Manager) DispatchPolicy

func (m *Manager) DispatchPolicy() DispatchPolicy

func (*Manager) Get

func (m *Manager) Get(id string) (NodeInfo, bool)

func (*Manager) HandleWireMessage

func (m *Manager) HandleWireMessage(msg WireMessage) bool

func (*Manager) Invoke

func (m *Manager) Invoke(req Request) (Response, bool)

func (*Manager) List

func (m *Manager) List() []NodeInfo

func (*Manager) MarkOffline

func (m *Manager) MarkOffline(id string)

func (*Manager) PickFor

func (m *Manager) PickFor(action string) (NodeInfo, bool)

func (*Manager) PickRequest

func (m *Manager) PickRequest(req Request, mode string) (NodeInfo, bool)

func (*Manager) RegisterHandler

func (m *Manager) RegisterHandler(nodeID string, h Handler)

func (*Manager) RegisterWireSender

func (m *Manager) RegisterWireSender(nodeID string, sender WireSender)

func (*Manager) Remove

func (m *Manager) Remove(id string) bool

func (*Manager) SendWireRequest

func (m *Manager) SendWireRequest(ctx context.Context, nodeID string, req Request) (Response, error)

func (*Manager) SetAuditPath

func (m *Manager) SetAuditPath(path string)

func (*Manager) SetDispatchPolicy

func (m *Manager) SetDispatchPolicy(policy DispatchPolicy)

func (*Manager) SetStatePath

func (m *Manager) SetStatePath(path string)

func (*Manager) SupportsAction

func (m *Manager) SupportsAction(nodeID, action string) bool

func (*Manager) SupportsRequest

func (m *Manager) SupportsRequest(nodeID string, req Request) bool

func (*Manager) Upsert

func (m *Manager) Upsert(info NodeInfo)

type NodeInfo

type NodeInfo struct {
	ID           string       `json:"id"`
	Name         string       `json:"name,omitempty"`
	Tags         []string     `json:"tags,omitempty"`
	OS           string       `json:"os,omitempty"`
	Arch         string       `json:"arch,omitempty"`
	Version      string       `json:"version,omitempty"`
	Endpoint     string       `json:"endpoint,omitempty"`
	Token        string       `json:"token,omitempty"`
	Capabilities Capabilities `json:"capabilities"`
	Actions      []string     `json:"actions,omitempty"`
	Models       []string     `json:"models,omitempty"`
	Agents       []AgentInfo  `json:"agents,omitempty"`
	RegisteredAt time.Time    `json:"registered_at,omitempty"`
	LastSeenAt   time.Time    `json:"last_seen_at"`
	Online       bool         `json:"online"`
}

NodeInfo is the runtime descriptor for cross-device scheduling.

type Request

type Request struct {
	Action string                 `json:"action"`
	Node   string                 `json:"node,omitempty"`
	Task   string                 `json:"task,omitempty"`
	Model  string                 `json:"model,omitempty"`
	Args   map[string]interface{} `json:"args,omitempty"`
}

Envelope for node commands.

type Response

type Response struct {
	OK      bool                   `json:"ok"`
	Code    string                 `json:"code,omitempty"`
	Error   string                 `json:"error,omitempty"`
	Node    string                 `json:"node,omitempty"`
	Action  string                 `json:"action,omitempty"`
	Payload map[string]interface{} `json:"payload,omitempty"`
}

Envelope for node responses.

func DoEndpointRequest

func DoEndpointRequest(ctx context.Context, client *http.Client, endpoint, token string, req Request) (Response, error)

type Router

type Router struct {
	P2P    Transport
	Relay  Transport
	Policy DispatchPolicy
}

Router prefers p2p transport and falls back to relay.

func (*Router) Dispatch

func (r *Router) Dispatch(ctx context.Context, req Request, mode string) (Response, error)

type Transport

type Transport interface {
	Name() string
	Send(ctx context.Context, req Request) (Response, error)
}

Transport abstracts node data-plane delivery.

type WebRTCTransport

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

func NewWebRTCTransport

func NewWebRTCTransport(stunServers []string, extraICEServers ...webrtc.ICEServer) *WebRTCTransport

func (*WebRTCTransport) BindSignaler

func (t *WebRTCTransport) BindSignaler(nodeID string, sender WireSender)

func (*WebRTCTransport) HandleSignal

func (t *WebRTCTransport) HandleSignal(msg WireMessage) error

func (*WebRTCTransport) Name

func (t *WebRTCTransport) Name() string

func (*WebRTCTransport) Send

func (t *WebRTCTransport) Send(ctx context.Context, req Request) (Response, error)

func (*WebRTCTransport) Snapshot

func (t *WebRTCTransport) Snapshot() map[string]interface{}

func (*WebRTCTransport) UnbindSignaler

func (t *WebRTCTransport) UnbindSignaler(nodeID string)

type WebsocketP2PTransport

type WebsocketP2PTransport struct {
	Manager *Manager
}

WebsocketP2PTransport uses the persistent node websocket as a request/response tunnel while the project evolves toward a true peer data channel.

func (*WebsocketP2PTransport) Name

func (s *WebsocketP2PTransport) Name() string

func (*WebsocketP2PTransport) Send

type WireAck

type WireAck struct {
	OK    bool   `json:"ok"`
	Type  string `json:"type"`
	ID    string `json:"id,omitempty"`
	Error string `json:"error,omitempty"`
}

WireAck is the websocket response envelope for node lifecycle messages.

type WireMessage

type WireMessage struct {
	Type     string                 `json:"type"`
	ID       string                 `json:"id,omitempty"`
	From     string                 `json:"from,omitempty"`
	To       string                 `json:"to,omitempty"`
	Session  string                 `json:"session,omitempty"`
	Node     *NodeInfo              `json:"node,omitempty"`
	Request  *Request               `json:"request,omitempty"`
	Response *Response              `json:"response,omitempty"`
	Payload  map[string]interface{} `json:"payload,omitempty"`
}

WireMessage is the websocket envelope for node lifecycle messages.

type WireSender

type WireSender interface {
	Send(msg WireMessage) error
}

Jump to

Keyboard shortcuts

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