Hiện diện
“Presence” của OpenClaw là một góc nhìn nhẹ, theo kiểu best‑effort về:- chính Gateway, và
- các client kết nối tới Gateway (ứng dụng mac, WebChat, CLI, v.v.)
Các trường presence (những gì được hiển thị)
Các mục presence là các đối tượng có cấu trúc với các trường như:instanceId(tùy chọn nhưng rất khuyến nghị): định danh client ổn định (thường làconnect.client.instanceId)host: tên máy chủ thân thiện với người dùngip: địa chỉ IP theo kiểu best‑effortversion: chuỗi phiên bản clientdeviceFamily/modelIdentifier: gợi ý phần cứngmode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: “số giây kể từ lần có thao tác người dùng gần nhất” (nếu biết)reason:self,connect,node-connected,periodic, …ts: dấu thời gian cập nhật lần cuối (ms kể từ epoch)
Nguồn tạo (presence đến từ đâu)
Các mục presence được tạo bởi nhiều nguồn và được hợp nhất.1. Mục tự thân của Gateway
Gateway luôn khởi tạo một mục “self” khi khởi động để các UI hiển thị máy chủ gateway ngay cả trước khi có client nào kết nối.2. Kết nối WebSocket
Mỗi WS client đều bắt đầu bằng một yêu cầuconnect. 17. Khi bắt tay thành công, the
Gateway upsert một bản ghi presence cho kết nối đó.
Vì sao các lệnh CLI một‑lần không xuất hiện
- CLI thường kết nối cho các lệnh ngắn, dùng một lần. Để tránh spam danh sách Instances,
client.mode === "cli"sẽ không được chuyển thành một mục presence.
3. Beacon system-event
- Client có thể gửi các beacon định kỳ phong phú hơn qua phương thức
system-event. Ứng dụng mac sử dụng điều này để báo cáo tên máy chủ, IP vàlastInputSeconds.
4. Node kết nối (vai trò: node)
Khi một node kết nối qua Gateway WebSocket vớirole: node, Gateway sẽ upsert
một mục presence cho node đó (luồng giống các client WS khác).
Quy tắc hợp nhất + khử trùng lặp (vì sao instanceId quan trọng)
Các mục presence được lưu trong một map trong bộ nhớ duy nhất:
- Các mục được khóa theo một presence key.
- Khóa tốt nhất là một
instanceIdổn định (từconnect.client.instanceId) có thể tồn tại qua các lần khởi động lại. - Khóa không phân biệt chữ hoa/chữ thường.
instanceId ổn định, nó có thể xuất hiện
thành một dòng trùng lặp.
TTL và kích thước giới hạn
Presence được thiết kế là tạm thời:- TTL: các mục cũ hơn 5 phút sẽ bị loại bỏ
- Số mục tối đa: 200 (loại bỏ mục cũ nhất trước)
Lưu ý về kết nối từ xa/đường hầm (IP loopback)
- Khi một client kết nối qua đường hầm SSH / chuyển tiếp cổng cục bộ, Gateway có thể
thấy địa chỉ từ xa là
127.0.0.1. 23. Để tránh ghi đè một IP tốt do client báo cáo, địa chỉ loopback từ xa sẽ bị bỏ qua.
Bên sử dụng
Tab Instances trên macOS
Ứng dụng macOS hiển thị đầu ra củasystem-presence và áp dụng một chỉ báo trạng thái nhỏ
(Active/Idle/Stale) dựa trên tuổi của lần cập nhật gần nhất.
Mẹo gỡ lỗi
- Để xem danh sách thô, hãy gọi
system-presencetới Gateway. - Nếu bạn thấy trùng lặp:
- xác nhận client gửi một
client.instanceIdổn định trong quá trình bắt tay - xác nhận các beacon định kỳ dùng cùng
instanceId - kiểm tra xem mục phát sinh từ kết nối có thiếu
instanceIdhay không (trùng lặp là điều được dự đoán)
- xác nhận client gửi một