Presence(在線狀態)
OpenClaw 的「在線狀態 (presence)」是一個輕量化、盡力而為的視圖,顯示:- Gateway 本身,以及
- 連接到 Gateway 的客戶端 (Mac 應用程式、WebChat、CLI 等)
在線狀態欄位(顯示內容)
在線狀態條目是具有以下欄位的結構化對象:instanceId(選填但強烈建議):穩定的客戶端身份(通常為connect.client.instanceId)host:易於理解的主機名稱ip:盡力而為取得的 IP 位址version:客戶端版本字串deviceFamily/modelIdentifier:硬體提示mode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds:「距上次使用者輸入的秒數」(若已知)reason:self,connect,node-connected,periodic, …ts:上次更新時間戳記(自 Epoch 起算的毫秒數)
生產者(在線狀態來源)
在線狀態條目由多個來源產生並進行合併。1) Gateway 本身條目
Gateway 始終在啟動時植入一個「self」條目,以便 UI 甚至在任何客戶端連接之前就能顯示 Gateway 主機。2) WebSocket 連接
每個 WS 客戶端都從connect 請求開始。握手成功後,Gateway 會為該連接新增或更新 (upsert) 一個在線狀態條目。
為什麼一次性的 CLI 命令不會顯示
CLI 通常是為了執行短暫的一次性命令而連接。為了避免 Instances 列表過於雜亂,client.mode === "cli" 不會被轉換為在線狀態條目。
3) system-event 信標 (Beacons)
客戶端可以透過 system-event 方法發送更豐富的定期信標。Mac 應用程式使用此方法來報告主機名稱、IP 和 lastInputSeconds。
4) 節點連接 (role: node)
當節點以role: node 透過 Gateway WebSocket 連接時,Gateway 會為該節點新增或更新在線狀態條目(流程與其他 WS 客戶端相同)。
合併與去重規則(為什麼 instanceId 很重要)
在線狀態條目儲存在單一的記憶體映射 (map) 中:
- 條目以 在線狀態鍵 (presence key) 為鍵。
- 最好的鍵是從重新啟動中留存下來的穩定
instanceId(來自connect.client.instanceId)。 - 鍵不區分大小寫。
instanceId,它可能會顯示為重複的一行。
TTL 與容量限制
在線狀態刻意設計為臨時性的:- TTL:超過 5 分鐘未更新的條目會被修剪。
- 最大容量:200 個條目(最舊的會先被丟棄)。
遠端/隧道注意事項(環回 IP)
當客戶端透過 SSH 隧道 / 本地連接埠轉發連接時,Gateway 可能會將遠端位址判定為127.0.0.1。為了避免覆蓋客戶端報告的有效 IP,環回遠端位址會被忽略。
消費者
macOS Instances 標籤頁
macOS 應用程式會渲染system-presence 的輸出,並根據上次更新的時間長短套用一個小的狀態指示燈(Active 動態 / Idle 閒置 / Stale 陳舊)。
除錯提示
- 若要查看原始列表,請針對 Gateway 呼叫
system-presence。 - 如果您看到重複項:
- 確認客戶端在握手時發送了穩定的
client.instanceId。 - 確認定期信標使用的是同一個
instanceId。 - 檢查從連接衍生出的條目是否缺少
instanceId(出現重複是預期的)。
- 確認客戶端在握手時發送了穩定的