ブリッジプロトコル(レガシーノードトランスポート)

ブリッジプロトコルはレガシーのノードトランスポート(TCP JSONL)です。新規のノードクライアントは、統合されたGateway WebSocketプロトコルを使用してください。

オペレーターまたはノードクライアントを構築する場合は、Gatewayプロトコルを使用してください。

注意: 現在のOpenClawビルドにはTCPブリッジリスナーは含まれていません。このドキュメントは歴史的な参考資料として残されています。 レガシーのbridge.*設定キーは設定スキーマの一部ではなくなりました。

両方が存在する理由

  • セキュリティ境界:ブリッジは完全なゲートウェイAPIサーフェスではなく、小さな許可リストを公開します。
  • ペアリング+ノードID:ノードの受け入れはゲートウェイが管理し、ノードごとのトークンに紐づけられます。
  • ディスカバリーUX:ノードはLAN上のBonjourでゲートウェイを検出するか、Tailnet経由で直接接続できます。
  • ループバックWS:完全なWSコントロールプレーンはSSH経由でトンネルしない限りローカルに留まります。

トランスポート

  • TCP、1行に1つのJSONオブジェクト(JSONL)。
  • オプションのTLS(bridge.tls.enabledがtrueの場合)。
  • レガシーのデフォルトリスナーポートは18790でした(現在のビルドではTCPブリッジは起動しません)。

TLSが有効な場合、ディスカバリーTXTレコードにはbridgeTls=1と非機密ヒントとしてのbridgeTlsSha256が含まれます。Bonjour/mDNS TXTレコードは認証されていないため、クライアントは明示的なユーザー意図や他の帯域外検証なしに、アドバタイズされたフィンガープリントを権威あるピンとして扱ってはいけません。

ハンドシェイク+ペアリング

  1. クライアントがノードメタデータ+トークン(ペアリング済みの場合)を含むhelloを送信。
  2. ペアリング済みでない場合、ゲートウェイはerrorNOT_PAIRED/UNAUTHORIZED)を返信。
  3. クライアントがpair-requestを送信。
  4. ゲートウェイは承認を待ち、pair-okhello-okを送信。

hello-okserverNameを返し、canvasHostUrlを含む場合があります。

フレーム

クライアント → ゲートウェイ:

  • req / res:スコープ付きゲートウェイRPC(chat、sessions、config、health、voicewake、skills.bins)
  • event:ノードシグナル(音声トランスクリプト、エージェントリクエスト、チャットサブスクライブ、execライフサイクル)

ゲートウェイ → クライアント:

  • invoke / invoke-res:ノードコマンド(canvas.*camera.*screen.recordlocation.getsms.send
  • event:サブスクライブ済みセッションのチャット更新
  • ping / pong:キープアライブ

レガシーの許可リスト制御はsrc/gateway/server-bridge.tsにありました(削除済み)。

Execライフサイクルイベント

ノードはexec.finishedまたはexec.deniedイベントを発行してsystem.runアクティビティを通知できます。これらはゲートウェイ内でシステムイベントにマッピングされます。(レガシーノードはexec.startedを発行する場合があります。)

ペイロードフィールド(特記がない限りすべてオプション):

  • sessionKey(必須):システムイベントを受け取るエージェントセッション。
  • runId:グルーピング用の一意のexec ID。
  • command:未加工またはフォーマット済みのコマンド文字列。
  • exitCodetimedOutsuccessoutput:完了の詳細(finishedのみ)。
  • reason:拒否理由(deniedのみ)。

Tailnetの使用

  • ~/.openclaw/openclaw.jsonbridge.bind: "tailnet"を設定してブリッジをTailnet IPにバインド。
  • クライアントはMagicDNS名またはTailnet IPで接続。
  • Bonjourはネットワークをまたげません。必要な場合は手動のhost/portまたはwide-area DNS-SDを使用してください。

バージョニング

ブリッジは現在暗黙のv1です(min/maxのネゴシエーションなし)。後方互換性が期待されます。破壊的変更の前にブリッジプロトコルバージョンフィールドを追加してください。