mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 11:30:15 +00:00
- Add persistent volume mounts for Go/npm caches (faster rebuilds) - Add shell config with helpful aliases and custom prompt - Add comprehensive devcontainer documentation - Add pre-commit hooks for Go formatting and linting - Use go-version-file in CI workflows instead of hardcoded versions - Simplify docker compose commands with --wait flag - Add gitignore entries for devcontainer auth files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
84 lines
2.7 KiB
Go
84 lines
2.7 KiB
Go
package agentexec
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// MessageType identifies the type of WebSocket message
|
|
type MessageType string
|
|
|
|
const (
|
|
// Agent -> Server messages
|
|
MsgTypeAgentRegister MessageType = "agent_register"
|
|
MsgTypeAgentPing MessageType = "agent_ping"
|
|
MsgTypeCommandResult MessageType = "command_result"
|
|
|
|
// Server -> Agent messages
|
|
MsgTypeRegistered MessageType = "registered"
|
|
MsgTypePong MessageType = "pong"
|
|
MsgTypeExecuteCmd MessageType = "execute_command"
|
|
MsgTypeReadFile MessageType = "read_file"
|
|
)
|
|
|
|
// Message is the envelope for all WebSocket messages
|
|
type Message struct {
|
|
Type MessageType `json:"type"`
|
|
ID string `json:"id,omitempty"` // Unique message ID for request/response correlation
|
|
Timestamp time.Time `json:"timestamp"`
|
|
Payload interface{} `json:"payload,omitempty"`
|
|
}
|
|
|
|
// AgentRegisterPayload is sent by agent on connection
|
|
type AgentRegisterPayload struct {
|
|
AgentID string `json:"agent_id"`
|
|
Hostname string `json:"hostname"`
|
|
Version string `json:"version"`
|
|
Platform string `json:"platform"` // "linux", "windows", "darwin"
|
|
Tags []string `json:"tags,omitempty"`
|
|
Token string `json:"token"` // API token for authentication
|
|
}
|
|
|
|
// RegisteredPayload is sent by server after successful registration
|
|
type RegisteredPayload struct {
|
|
Success bool `json:"success"`
|
|
Message string `json:"message,omitempty"`
|
|
}
|
|
|
|
// ExecuteCommandPayload is sent by server to request command execution
|
|
type ExecuteCommandPayload struct {
|
|
RequestID string `json:"request_id"`
|
|
Command string `json:"command"`
|
|
TargetType string `json:"target_type"` // "host", "container", "vm"
|
|
TargetID string `json:"target_id,omitempty"` // VMID for container/VM
|
|
Timeout int `json:"timeout,omitempty"` // seconds, 0 = default
|
|
}
|
|
|
|
// ReadFilePayload is sent by server to request file content
|
|
type ReadFilePayload struct {
|
|
RequestID string `json:"request_id"`
|
|
Path string `json:"path"`
|
|
TargetType string `json:"target_type"`
|
|
TargetID string `json:"target_id,omitempty"`
|
|
MaxBytes int64 `json:"max_bytes,omitempty"` // 0 = default (1MB)
|
|
}
|
|
|
|
// CommandResultPayload is sent by agent with command execution result
|
|
type CommandResultPayload struct {
|
|
RequestID string `json:"request_id"`
|
|
Success bool `json:"success"`
|
|
Stdout string `json:"stdout,omitempty"`
|
|
Stderr string `json:"stderr,omitempty"`
|
|
ExitCode int `json:"exit_code"`
|
|
Error string `json:"error,omitempty"`
|
|
Duration int64 `json:"duration_ms"`
|
|
}
|
|
|
|
// ConnectedAgent represents an agent connected via WebSocket
|
|
type ConnectedAgent struct {
|
|
AgentID string
|
|
Hostname string
|
|
Version string
|
|
Platform string
|
|
Tags []string
|
|
ConnectedAt time.Time
|
|
}
|