Files
clawgo/pkg/nodes/types.go

99 lines
3.7 KiB
Go

package nodes
import "time"
// Capability matrix reported by each node agent.
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"`
}
// AgentInfo describes an enabled agent exposed by a remote clawgo node.
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"`
}
// Artifact describes a file/media payload returned from a node action.
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"`
}
// NodeInfo is the runtime descriptor for cross-device scheduling.
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"`
}
// Envelope for node commands.
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 responses.
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"`
}
// WireMessage is the websocket envelope for node lifecycle messages.
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"`
}
// WireAck is the websocket response envelope for node lifecycle messages.
type WireAck struct {
OK bool `json:"ok"`
Type string `json:"type"`
ID string `json:"id,omitempty"`
Error string `json:"error,omitempty"`
}