Obecność
„Obecność” OpenClaw to lekki, działający w trybie best‑effort widok:- samego Gateway, oraz
- klientów połączonych z Gateway (aplikacja na macOS, WebChat, CLI itp.)
Pola obecności (co się wyświetla)
Wpisy obecności są obiektami o ustrukturyzowanych polach, takich jak:instanceId(opcjonalne, ale zdecydowanie zalecane): stabilna tożsamość klienta (zwykleconnect.client.instanceId)host: przyjazna dla użytkownika nazwa hostaip: adres IP w trybie best‑effortversion: ciąg wersji klientadeviceFamily/modelIdentifier: wskazówki sprzętowemode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: „sekundy od ostatniego wejścia użytkownika” (jeśli znane)reason:self,connect,node-connected,periodic, …ts: znacznik czasu ostatniej aktualizacji (ms od epoki)
Producenci (skąd pochodzi obecność)
Wpisy obecności są generowane przez wiele źródeł i scalane.1. Wpis własny Gateway
Gateway zawsze inicjuje wpis „self” przy uruchomieniu, aby interfejsy użytkownika pokazywały host Gateway nawet zanim połączą się jakiekolwiek klienci.2. Połączenie WebSocket
Każdy klient WS zaczyna od żądaniaconnect. Po pomyślnym uściśnięciu dłoni
Gateway wykonuje upsert wpisu obecności dla tego połączenia.
Dlaczego jednorazowe polecenia CLI się nie wyświetlają
CLI często łączy się na krótkie, jednorazowe polecenia. Aby uniknąć zaśmiecania listy Instances,client.mode === "cli" nie jest zamieniane na wpis obecności.
3. Sygnały (beacons) system-event
Klienci mogą wysyłać bogatsze, okresowe sygnały przez metodę system-event. Aplikacja
na macOS używa tego do raportowania nazwy hosta, adresu IP oraz lastInputSeconds.
4. Połączenia węzłów (rola: node)
Gdy węzeł łączy się przez WebSocket Gateway zrole: node, Gateway wykonuje upsert
wpisu obecności dla tego węzła (ten sam przepływ co dla innych klientów WS).
Zasady scalania i deduplikacji (dlaczego instanceId ma znaczenie)
Wpisy obecności są przechowywane w jednej mapie w pamięci:
- Wpisy są kluczowane przez klucz obecności.
- Najlepszym kluczem jest stabilny
instanceId(zconnect.client.instanceId), który przetrwa restarty. - Klucze nie rozróżniają wielkości liter.
instanceId, może pojawić się
jako zduplikowany wiersz.
TTL i ograniczony rozmiar
Obecność jest celowo efemeryczna:- TTL: wpisy starsze niż 5 minut są usuwane
- Maks. liczba wpisów: 200 (najstarsze są usuwane jako pierwsze)
Zdalny / tunel (adresy IP loopback)
Gdy klient łączy się przez tunel SSH / lokalne przekierowanie portów, Gateway może widzieć adres zdalny jako127.0.0.1. Aby nie nadpisywać poprawnego adresu IP
zgłoszonego przez klienta, zdalne adresy loopback są ignorowane.
Konsumenci
Karta Instances w macOS
Aplikacja na macOS renderuje wyniksystem-presence i stosuje niewielki wskaźnik stanu
(Aktywny/Bezczynny/Nieaktualny) na podstawie wieku ostatniej aktualizacji.
Wskazówki debugowania
- Aby zobaczyć surową listę, wywołaj
system-presencewzględem Gateway. - Jeśli widzisz duplikaty:
- potwierdź, że klienci wysyłają stabilny
client.instanceIdpodczas uściśnięcia dłoni - potwierdź, że okresowe sygnały używają tego samego
instanceId - sprawdź, czy wpis pochodzący z połączenia nie ma
instanceId(duplikaty są wówczas oczekiwane)
- potwierdź, że klienci wysyłają stabilny