OpenClawSkills
GitHub
コア概念 • 5分で読める

プレゼンス

OpenClaw プレゼンスエントリがどのように生成、マージ、および表示されるか

OpenClaw "プレゼンス"は、以下の軽量でベストエフォートなビューです:

- ゲートウェイ自体、および

- ゲートウェイに接続されたクライアント(Mac アプリ、WebChat、CLI など)

プレゼンスは主に、macOS アプリの Instances タブに入力し、迅速なオペレーター可視性を提供するために使用されます。

Tutorial.step

プレゼンスフィールド(表示される内容)

プレゼンスエントリは、以下のフィールドを持つ構造化オブジェクトです:

- ''instanceId''(オプションですが強く推奨):安定したクライアント ID(通常は ''connect.client.instanceId'')

- ''host'':人間に優しいホスト名

- ''ip'':ベストエフォートの IP アドレス

- ''version'':クライアントバージョン文字列

- ''deviceFamily'' / ''modelIdentifier'':ハードウェアのヒント

- ''mode'':''ui''、''webchat''、''cli''、''backend''、''probe''、''test''、''node''、...

- ''lastInputSeconds'':"最後のユーザー入力からの秒数"(わかっている場合)

- ''reason'':''self''、''connect''、''node-connected''、''periodic''、...

Tutorial.step

プロデューサー(プレゼンスのソース)

プレゼンスエントリは複数のソースから生成され、マージされます。

Tutorial.step

1) ゲートウェイの自己エントリ

ゲートウェイは常に起動時に "self" エントリをシードするため、UI はゲートウェイホストを表示します

クライアントが接続する前でも。

Tutorial.step

2) WebSocket connect

すべての WS クライアントは ''connect'' リクエストから始まります。ハンドシェイクが成功した後

ゲートウェイはその接続のプレゼンスエントリを挿入します。

Tutorial.step

ワンショット CLI コマンドが表示されない理由

CLI は通常、短いワンショットコマンドのために接続します。スパムを避けるために

インスタンスリスト、''client.mode === "cli"'' はプレゼンスエントリに''変換されません''。

Tutorial.step

3) `system-event` ビーコン

クライアントは ''system-event'' メソッドを介してより豊富な定期的ビーコンを送信できます。Mac

アプリはこれを使用して、ホスト名、IP、および ''lastInputSeconds'' を報告します。

Tutorial.step

4) ノード接続(ロール:ノード)

ノードが ''role: node'' を使用してゲートウェイ WebSocket 経由で接続すると、ゲートウェイは

そのノードのプレゼンスエントリを更新挿入します(他の WS クライアントと同じフロー)。

Tutorial.step

マージ + 重複排除ルール(`instanceId` が重要な理由)

プレゼンスエントリは単一のインメモリマップに保存されます:

- エントリはプレゼンスキーによってキー付けされます。

- 最良のキーは、再起動後も持続できる安定した ''instanceId''(''connect.client.instanceId'' から)です。

- キーは大文字と小文字を区別しません。

クライアントが安定した ''instanceId'' なしで再接続すると、''重複''行として表示される場合があります。

Tutorial.step

TTL とバウンドサイズ

プレゼンスは意図的に一時的なものです:

- TTL: 5 分を超えるエントリは削除されます

- 最大エントリ数: 200(最も古いものから)

これにより、リストが新鮮に保たれ、メモリの無制限の成長が回避されます。

Tutorial.step

リモート/トンネルの注意点(ループバック IP)

クライアントが SSH トンネル/ローカルポート転送経由で接続すると、ゲートウェイは

リモートアドレスを ''127.0.0.1'' として認識する場合があります。良いクライアント報告を上書きしないようにするために

IP、ループバックリモートアドレスは無視されます。

Tutorial.step

コンシューマー

Tutorial.step

macOS インスタンスタブ

macOS アプリは ''system-presence'' の出力をレンダリングし、最後の更新時間に基づいて小さなステータス

インジケーター(アクティブ/アイドル/古い)を適用します。

Tutorial.step

デバッグのヒント

- 生のリストを表示するには、ゲートウェイに対して ''system-presence'' を呼び出します。

- 重複が表示される場合:

- クライアントがハンドシェイクで安定した ''client.instanceId'' を送信することを確認します

- 定期的なビーコンが同じ ''instanceId'' を使用することを確認します

- 接続派生エントリが ''instanceId'' がないかどうかを確認します(重複が予想されます)