3.2 KiB
3.2 KiB
HarborForge OpenClaw Server Connector Plugin — Project Plan
1) Goal
Provide a secure, lightweight plugin/agent that connects servers to HarborForge Monitor, streams telemetry in real time, and falls back to HTTP heartbeat when WebSocket is unavailable.
2) Scope
- Handshake + auth using backend-issued challenge + RSA-OAEP encrypted payload.
- WebSocket telemetry to
/monitor/server/ws. - HTTP heartbeat to
/monitor/server/heartbeatas fallback. - System metrics: CPU/Mem/Disk/Swap/Uptime/OpenClaw version/Agents list.
- Retry & backoff, offline handling, and minimal local state.
3) Non-Goals
- No UI in the plugin.
- No provider billing calls from plugin.
- No multi-tenant auth beyond challenge + server identifier.
4) Architecture
plugin/
config/ # load config & secrets
crypto/ # RSA-OAEP encrypt/decrypt helpers
collector/ # system + openclaw metrics
transport/ # ws + http heartbeat
state/ # retry/backoff, last sent, cache
main.ts|py # entry
4.1 Config
backend_urlidentifierchallenge_uuidreport_interval_sec(default: 20-30s)http_fallback_interval_sec(default: 60s)log_level
4.2 Security
- Fetch public key:
GET /monitor/public/server-public-key - Encrypt payload with RSA-OAEP
- Include
nonce+ts(UTC) to prevent replay - Challenge valid: 10 minutes
- Offline threshold: 7 minutes
5) Communication Flow
5.1 Handshake (WS)
- Plugin reads
identifier + challenge_uuid. - Fetch RSA public key.
- Encrypt payload:
{identifier, challenge_uuid, nonce, ts}. - Connect WS
/monitor/server/wsand sendencrypted_payload. - On success: begin periodic telemetry push.
5.2 Fallback (HTTP)
If WS fails:
- POST telemetry to
/monitor/server/heartbeatwith same payload fields. - Retry with exponential backoff (cap 5–10 min).
6) Telemetry Schema (example)
{
identifier: "vps.t1",
openclaw_version: "x.y.z",
cpu_pct: 12.5,
mem_pct: 41.2,
disk_pct: 62.0,
swap_pct: 0.0,
agents: [ { id: "a1", name: "agent", status: "running" } ],
last_seen_at: "2026-03-11T21:00:00Z"
}
7) Reliability
- Automatic reconnect on WS drop
- HTTP fallback if WS unavailable > 2 intervals
- Exponential backoff on failures
- Local cache for last successful payload
8) Deployment Options
- Systemd service (preferred for VPS)
- Docker container (optional)
- Single-binary build if using Go/Rust
9) Milestones
M1 – POC (2–3 days)
- CLI config loader + HTTP heartbeat
- See online + metrics in Monitor
M2 – WS realtime (2–3 days)
- Full handshake + WS streaming
- Reconnect & fallback logic
M3 – Packaging (1–2 days)
- systemd unit + sample config
- installation script
M4 – Hardening & Docs (1–2 days)
- logging, metrics, docs
- troubleshooting guide
10) Deliverables
- Plugin source
- Config template + systemd unit
- Integration docs
- Test script + example payloads
11) Open Questions
- Preferred language (Go/Python/Node/Rust)?
- How to read OpenClaw agent list (API vs local state)?
- Required log format / retention?
Next step: confirm preferred runtime (Go/Python/Node) and I will scaffold the project structure + first heartbeat implementation.