ブリッジプロトコル(レガシーノードトランスポート)
ブリッジプロトコルはレガシーのノードトランスポート(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レコードは認証されていないため、クライアントは明示的なユーザー意図や他の帯域外検証なしに、アドバタイズされたフィンガープリントを権威あるピンとして扱ってはいけません。
ハンドシェイク+ペアリング
- クライアントがノードメタデータ+トークン(ペアリング済みの場合)を含む
helloを送信。 - ペアリング済みでない場合、ゲートウェイは
error(NOT_PAIRED/UNAUTHORIZED)を返信。 - クライアントが
pair-requestを送信。 - ゲートウェイは承認を待ち、
pair-okとhello-okを送信。
hello-okはserverNameを返し、canvasHostUrlを含む場合があります。
フレーム
クライアント → ゲートウェイ:
req/res:スコープ付きゲートウェイRPC(chat、sessions、config、health、voicewake、skills.bins)event:ノードシグナル(音声トランスクリプト、エージェントリクエスト、チャットサブスクライブ、execライフサイクル)
ゲートウェイ → クライアント:
invoke/invoke-res:ノードコマンド(canvas.*、camera.*、screen.record、location.get、sms.send)event:サブスクライブ済みセッションのチャット更新ping/pong:キープアライブ
レガシーの許可リスト制御はsrc/gateway/server-bridge.tsにありました(削除済み)。
Execライフサイクルイベント
ノードはexec.finishedまたはexec.deniedイベントを発行してsystem.runアクティビティを通知できます。これらはゲートウェイ内でシステムイベントにマッピングされます。(レガシーノードはexec.startedを発行する場合があります。)
ペイロードフィールド(特記がない限りすべてオプション):
sessionKey(必須):システムイベントを受け取るエージェントセッション。runId:グルーピング用の一意のexec ID。command:未加工またはフォーマット済みのコマンド文字列。exitCode、timedOut、success、output:完了の詳細(finishedのみ)。reason:拒否理由(deniedのみ)。
Tailnetの使用
~/.openclaw/openclaw.jsonでbridge.bind: "tailnet"を設定してブリッジをTailnet IPにバインド。- クライアントはMagicDNS名またはTailnet IPで接続。
- Bonjourはネットワークをまたげません。必要な場合は手動のhost/portまたはwide-area DNS-SDを使用してください。
バージョニング
ブリッジは現在暗黙のv1です(min/maxのネゴシエーションなし)。後方互換性が期待されます。破壊的変更の前にブリッジプロトコルバージョンフィールドを追加してください。