Giao thức Gateway (WebSocket)
Giao thức Gateway WS là mặt phẳng điều khiển duy nhất + vận chuyển node cho OpenClaw. Tất cả client (CLI, web UI, ứng dụng macOS, node iOS/Android, node không giao diện) đều kết nối qua WebSocket và khai báo vai trò + phạm vi của họ tại thời điểm bắt tay.Truyền tải
- WebSocket, khung văn bản với payload JSON.
- Khung đầu tiên phải là một yêu cầu
connect.
Handshake (kết nối)
Gateway → Client (thử thách trước khi kết nối):hello-ok cũng bao gồm:
Ví dụ node
Đóng khung
- Request:
{type:"req", id, method, params} - Response:
{type:"res", id, ok, payload|error} - Event:
{type:"event", event, payload, seq?, stateVersion?}
Vai trò + phạm vi
Vai trò
operator= client mặt phẳng điều khiển (CLI/UI/tự động hóa).node= máy chủ năng lực (camera/screen/canvas/system.run).
Phạm vi (operator)
Các phạm vi phổ biến:operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairing
Caps/lệnh/quyền (node)
Các node khai báo các claim về năng lực tại thời điểm kết nối:caps: các danh mục năng lực cấp cao.commands: allowlist lệnh cho invoke.permissions: các bật/tắt chi tiết (ví dụscreen.record,camera.capture).
Hiện diện
system-presencetrả về các mục được khóa theo danh tính thiết bị.- Các mục presence bao gồm
deviceId,rolesvàscopesđể UI có thể hiển thị một hàng duy nhất cho mỗi thiết bị ngay cả khi nó kết nối đồng thời với vai trò operator và node.
Phương thức trợ giúp cho node
- Node có thể gọi
skills.binsđể lấy danh sách hiện tại các skill executable phục vụ kiểm tra auto-allow.
Phê duyệt exec
- Khi một yêu cầu exec cần phê duyệt, gateway phát
exec.approval.requested. - Client operator giải quyết bằng cách gọi
exec.approval.resolve(yêu cầu phạm vioperator.approvals).
Phiên bản hóa
PROTOCOL_VERSIONnằm trongsrc/gateway/protocol/schema.ts.- Client gửi
minProtocol+maxProtocol; máy chủ từ chối nếu không khớp. - Schema + mô hình được tạo từ các định nghĩa TypeBox:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
Xác thực
- Nếu
OPENCLAW_GATEWAY_TOKEN(hoặc--token) được đặt,connect.params.auth.tokenphải khớp nếu không socket sẽ bị đóng. - Sau khi ghép cặp, Gateway phát hành một token thiết bị được giới hạn theo vai trò kết nối + phạm vi. Nó được trả về trong
hello-ok.auth.deviceTokenvà nên được client lưu trữ cho các lần kết nối sau. - Device token có thể được xoay vòng/thu hồi qua
device.token.rotatevàdevice.token.revoke(yêu cầu phạm vioperator.pairing).
Danh tính thiết bị + ghép cặp
- Node nên bao gồm một danh tính thiết bị ổn định (
device.id) được suy ra từ fingerprint của cặp khóa. - Gateway phát hành token theo từng thiết bị + vai trò.
- Cần phê duyệt ghép cặp cho các ID thiết bị mới trừ khi bật auto-approval cục bộ.
- Kết nối Local bao gồm loopback và địa chỉ tailnet của chính máy chủ gateway (để các ràng buộc tailnet cùng máy chủ vẫn có thể auto-approve).
- Tất cả client WS phải bao gồm danh tính
devicetrong quá trìnhconnect(operator + node). Control UI có thể bỏ qua nó chỉ khigateway.controlUi.allowInsecureAuthđược bật (hoặcgateway.controlUi.dangerouslyDisableDeviceAuthcho trường hợp khẩn cấp). - Các kết nối không phải local phải ký nonce
connect.challengedo máy chủ cung cấp.
TLS + pinning
- TLS được hỗ trợ cho các kết nối WS.
- Client có thể tùy chọn pin fingerprint chứng chỉ của gateway (xem cấu hình
gateway.tlscùng vớigateway.remote.tlsFingerprinthoặc CLI--tls-fingerprint).
Phạm vi
Giao thức này cung cấp toàn bộ API gateway (trạng thái, kênh, mô hình, chat, agent, phiên, node, phê duyệt, v.v.). Bề mặt chính xác được xác định bởi các schema TypeBox trongsrc/gateway/protocol/schema.ts.