Web interfaces

WebChat

ステータス: macOS/iOS SwiftUI チャット UI は Gateway WebSocket と直接通信します。

概要

  • ゲートウェイ向けのネイティブチャット UI です (埋め込みブラウザーもローカル静的サーバーも使いません)。
  • 他のチャネルと同じセッションとルーティングルールを使用します。
  • 決定的ルーティング: 返信は常に WebChat に戻ります。

クイックスタート

  1. ゲートウェイを起動します。
  2. WebChat UI (macOS/iOS アプリ) または Control UI のチャットタブを開きます。
  3. 有効なゲートウェイ認証パスが構成されていることを確認します (デフォルトは共有シークレットで、 ループバック上でも同様です)。

仕組み (動作)

  • UI は Gateway WebSocket に接続し、chat.historychat.sendchat.inject を使用します。
  • chat.history は安定性のために制限されます。Gateway は長いテキストフィールドを切り詰め、重いメタデータを省略し、サイズが大きすぎるエントリを [chat.history omitted: message too large] に置き換えることがあります。
  • 表示可能なアシスタントメッセージが chat.history で切り詰められた場合、Control UI はサイドリーダーを開き、デフォルトの履歴ペイロードを増やさずに chat.message.get を通じて完全な表示正規化済みエントリをオンデマンドで取得できます。
  • chat.history は、現代的な追記専用セッションファイルではアクティブなトランスクリプトブランチに従うため、放棄された書き換えブランチや置き換え済みのプロンプトコピーは WebChat に描画されません。
  • Compaction エントリは、明示的な圧縮済み履歴の区切りとして描画されます。この区切りは、圧縮済みトランスクリプトがチェックポイントとして保持されることを説明し、権限が許す場合にオペレーターがその圧縮済みビューからブランチ作成や復元を行える Sessions のチェックポイント操作へリンクします。
  • Control UI は chat.history が返す背後の Gateway sessionId を記憶し、後続の chat.send 呼び出しに含めます。そのため、ユーザーがセッションを開始またはリセットしない限り、再接続やページ更新後も同じ保存済み会話が継続されます。
  • Control UI は、新しい chat.send 実行 ID を生成する前に、同じセッション、メッセージ、添付ファイルに対する重複した送信中リクエストを集約します。Gateway は同じ冪等性キーを再利用する反復リクエストも引き続き重複排除します。
  • ワークスペース起動ファイルと保留中の BOOTSTRAP.md 指示は、WebChat のユーザーメッセージにコピーされるのではなく、エージェントシステムプロンプトの Project Context を通じて提供されます。ブートストラップの切り詰めでは簡潔なシステムプロンプト復旧通知だけが追加され、詳細な件数と構成ノブは診断サーフェスに残ります。
  • chat.history も表示正規化されます。ランタイム専用の OpenClaw コンテキスト、 受信エンベロープラッパー、[[reply_to_*]][[audio_as_voice]] などのインライン配信ディレクティブタグ、プレーンテキストのツール呼び出し XML ペイロード (<tool_call>...</tool_call><function_call>...</function_call><tool_calls>...</tool_calls><function_calls>...</function_calls>、および切り詰められたツール呼び出しブロックを含む)、および 漏出した ASCII/全角のモデル制御トークンは表示テキストから除去され、 表示テキスト全体が正確なサイレントトークン NO_REPLY / no_reply のみであるアシスタントエントリは省略されます。
  • 推論フラグ付きの返信ペイロード (isReasoning: true) は、WebChat のアシスタントコンテンツ、トランスクリプト再生テキスト、音声コンテンツブロックから除外されるため、思考のみのペイロードが表示可能なアシスタントメッセージや再生可能な音声として表面化することはありません。
  • chat.inject は、アシスタントノートをトランスクリプトに直接追加し、UI にブロードキャストします (エージェント実行はありません)。
  • 中止された実行では、部分的なアシスタント出力が UI に表示されたままになることがあります。
  • Gateway は、バッファされた出力が存在する場合、中止された部分的なアシスタントテキストをトランスクリプト履歴に永続化し、それらのエントリに中止メタデータを付与します。
  • 履歴は常にゲートウェイから取得されます (ローカルファイル監視はありません)。
  • ゲートウェイに到達できない場合、WebChat は読み取り専用になります。

トランスクリプトと配信モデル

WebChat には 2 つの別個のデータパスがあります。

  • セッション JSONL ファイルは、永続的なモデル/ランタイムトランスクリプトです。通常のエージェント実行では、埋め込み OpenClaw ランタイムがセッションマネージャーを通じて、モデルから見える userassistanttoolResult メッセージを永続化します。WebChat は任意の配信、ステータス、補助テキストをそのトランスクリプトに書き込みません。
  • Gateway ReplyPayload イベントはライブ配信プロジェクションです。これらは WebChat/チャネル表示、ブロックストリーミング、ディレクティブタグ、メディア埋め込み、TTS/音声フラグ、UI フォールバック動作向けに正規化できます。これら自体は正準のセッションログではありません。
  • tools.message を通じて表示可能な返信を必要とするハーネスは、引き続き WebChat を現在実行中の内部ソース返信シンクとして使用します。そのアクティブな WebChat 実行からのターゲットなしの message.send は同じチャットに投影され、セッショントランスクリプトにミラーされます。WebChat は再利用可能な送信チャネルにはならず、lastChannel を継承することもありません。
  • WebChat は、Gateway が通常の埋め込みエージェントターン外で表示メッセージを所有する場合にのみ、アシスタントトランスクリプトエントリを注入します。対象は chat.inject、非エージェントコマンド返信、中止された部分出力、WebChat 管理のメディアトランスクリプト補足です。
  • chat.history は保存済みセッショントランスクリプトを読み取り、WebChat の表示プロジェクションを適用します。実行中にライブアシスタントテキストが表示されても履歴の再読み込み後に消える場合は、まず生の JSONL にアシスタントテキストが含まれるかを確認し、次に chat.history プロジェクションがそれを除去したかを確認し、その後 Control UI の楽観的テールマージがローカル配信状態を永続化済みスナップショットに置き換えたかを確認してください。
  • chat.message.get は、アクティブエージェントのスコープ設定を含め、chat.history と同じトランスクリプトブランチおよび表示プロジェクションルールを使用します。ただし、messageId によって 1 つのトランスクリプトエントリを対象にし、完全なコンテンツを返せなくなった場合は正直な利用不可理由を返します。

通常のエージェント実行の最終回答は、埋め込みランタイムがアシスタントの message_end を書き込むため、永続的であるべきです。配信済みの最終ペイロードをトランスクリプトにミラーするフォールバックは、埋め込みランタイムがすでに書き込んだアシスタントターンを重複させないことを最初に確認する必要があります。

Control UI エージェントツールパネル

  • Control UI の /agents Tools パネルには 2 つの別個のビューがあります。
    • 現在利用可能tools.effective(sessionKey=...) を使用し、コア、Plugin、チャネル所有、 およびすでに検出済みの MCP サーバーツールを含む、現在のセッションインベントリのサーバー派生の 読み取り専用プロジェクションを表示します。
    • ツール構成tools.catalog を使用し、プロファイル、オーバーライド、 カタログセマンティクスに焦点を合わせます。
  • ランタイム可用性はセッションスコープです。同じエージェントでセッションを切り替えると、 現在利用可能 リストが変わることがあります。構成済みの MCP サーバーが接続されていない、または 最後の検出以降に変更された場合、パネルは読み取りパスから MCP トランスポートを暗黙に開始するのではなく通知を表示します。
  • 構成エディターはランタイム可用性を意味しません。有効なアクセスは引き続きポリシーの 優先順位 (allow/deny、エージェントごと、およびプロバイダー/チャネルのオーバーライド) に従います。

リモート利用

  • リモートモードは、ゲートウェイ WebSocket を SSH/Tailscale 経由でトンネルします。
  • 別の WebChat サーバーを実行する必要はありません。

構成リファレンス (WebChat)

完全な構成: 構成

WebChat には永続化される構成セクションはありません。Gateway は組み込みの chat.history 表示制限を使用します。API クライアントはリクエストごとの maxChars を送信して、単一の chat.history 呼び出しについて上書きできます。レガシーの channels.webchat および gateway.webchat 構成は廃止されました。削除するには openclaw doctor --fix を実行してください。

関連するグローバルオプション:

  • gateway.port, gateway.bind: WebSocket ホスト/ポート。
  • gateway.auth.mode, gateway.auth.token, gateway.auth.password: 共有シークレット WebSocket 認証。
  • gateway.auth.allowTailscale: 有効な場合、ブラウザーの Control UI チャットタブは Tailscale Serve ID ヘッダーを使用できます。
  • gateway.auth.mode: "trusted-proxy": ID 認識型の 非ループバック プロキシソースの背後にあるブラウザークライアント向けのリバースプロキシ認証です (Trusted Proxy Auth を参照)。
  • gateway.remote.url, gateway.remote.token, gateway.remote.password: リモートゲートウェイターゲット。
  • session.*: セッションストレージとメインキーのデフォルト。

関連

Was this useful?
On this page

On this page