> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Веб-чат

Статус: интерфейс чата SwiftUI для macOS/iOS подключается напрямую к WebSocket Gateway. Без встроенного браузера и локального сервера статических файлов.

## Что это такое

* Нативный интерфейс чата для Gateway.
* Использует те же сеансы и правила маршрутизации, что и другие каналы.
* Детерминированная маршрутизация: ответы всегда возвращаются в WebChat.
* История всегда загружается из Gateway (без отслеживания локальных файлов). Если Gateway недоступен, WebChat работает только для чтения.

## Быстрый старт

1. Запустите Gateway.
2. Откройте интерфейс WebChat (приложение для macOS/iOS) или вкладку чата Control UI.
3. Убедитесь, что настроен допустимый способ аутентификации в Gateway (по умолчанию используется общий секрет, даже при подключении через loopback).

## Как это работает

* Интерфейс подключается к WebSocket Gateway и использует методы RPC `chat.history`, `chat.send`, `chat.inject` и `chat.message.get`.
* `chat.history` ограничен для обеспечения стабильности: Gateway может обрезать длинные текстовые поля, исключать объёмные метаданные и заменять слишком большие записи на `[chat.history omitted: message too large]`. Клиенты API могут передать `maxChars` для отдельного запроса, чтобы переопределить стандартный лимит для одного вызова.
* Если видимое сообщение ассистента было обрезано в `chat.history`, Control UI может открыть боковую панель чтения и по запросу получить полную нормализованную для отображения запись через `chat.message.get`, не увеличивая стандартный объём данных истории. `chat.message.get` использует ту же ветвь расшифровки и те же правила отображения, что и `chat.history`, но выбирает одну запись по `messageId` и возвращает точную причину недоступности, если полное содержимое больше нельзя получить.
* `chat.history` следует активной ветви расшифровки для файлов сеансов, доступных только для добавления, поэтому заброшенные ветви перезаписи и заменённые копии промптов не отображаются в WebChat.
* Записи Compaction отображаются как разделитель «Сжатая история» с пояснением, что сжатая расшифровка сохранена как контрольная точка, и действием для открытия контрольных точек сеанса (создания ветви или восстановления, если позволяют разрешения).
* Control UI запоминает базовый `sessionId` Gateway, возвращённый методом `chat.history`, и включает его в последующие вызовы `chat.send`, поэтому после переподключения и обновления страницы продолжается тот же сохранённый разговор, если пользователь не создаст или не сбросит сеанс.
* `chat.send` принимает ключ идемпотентности (Control UI использует идентификатор запуска); Gateway устраняет повторные запросы с тем же ключом, поэтому повторные попытки или дублирующиеся одновременно выполняемые отправки для одного и того же сеанса, сообщения и вложений не создают второй запуск.
* Файлы запуска рабочего пространства и ожидающие инструкции `BOOTSTRAP.md` передаются через раздел `# Project Context` системного промпта агента, а не копируются в пользовательское сообщение WebChat. Если содержимое начальной загрузки обрезано, системный промпт вместо него получает краткое «Уведомление о контексте начальной загрузки»; подробные счётчики и параметры конфигурации остаются в диагностических интерфейсах.
* Нормализация отображения в `chat.history` удаляет: контекст OpenClaw, используемый только во время выполнения, оболочки входящих конвертов, встроенные теги директив доставки, такие как `[[reply_to_current]]`, `[[reply_to:<id>]]` и `[[audio_as_voice]]`, текстовые XML-данные вызовов инструментов (`<tool_call>`, `<function_call>`, `<tool_calls>`, `<function_calls>`, включая обрезанные блоки), а также просочившиеся управляющие токены модели в ASCII или полноширинном формате. Записи ассистента, весь видимый текст которых состоит только из токена молчания `NO_REPLY` (без учёта регистра), исключаются.
* Данные ответов с признаком рассуждения (`isReasoning: true`) исключаются из содержимого сообщений ассистента в WebChat, текста при воспроизведении расшифровки и блоков аудиосодержимого, поэтому данные, содержащие только рассуждения, не появляются как видимые сообщения ассистента или воспроизводимое аудио.
* `chat.inject` добавляет примечание ассистента непосредственно в расшифровку и передаёт его интерфейсу (без запуска агента).
* После прерванных запусков частичный вывод ассистента может оставаться видимым в интерфейсе. Если буферизованный вывод существует, Gateway сохраняет этот частичный текст в истории расшифровки и помечает запись метаданными прерывания.

### Модель расшифровки и доставки

WebChat использует два отдельных пути данных:

* Строки расшифровки в SQLite представляют собой долговечную расшифровку модели и среды выполнения. При обычных запусках агента встроенная среда выполнения OpenClaw сохраняет видимые модели сообщения `user`, `assistant` и `toolResult` через средство доступа к сеансу. WebChat не записывает в эту расшифровку произвольный текст доставки, состояния или вспомогательных сообщений.
* События Gateway `ReplyPayload` представляют собой оперативную проекцию доставки: они нормализуются для отображения в WebChat или канале с учётом потоковой передачи блоков, тегов директив, внедрения медиафайлов, флагов TTS/аудио и резервного поведения интерфейса. Сами по себе они не являются каноническим журналом сеанса.
* Среды тестирования, которым требуются видимые ответы через `tools.message`, по-прежнему используют WebChat как внутренний приёмник исходных ответов текущего запуска. `message.send` без указанного назначения из этого активного запуска WebChat проецируется в тот же чат и дублируется в расшифровку сеанса; WebChat не становится повторно используемым исходящим каналом и никогда не наследует `lastChannel`.
* WebChat добавляет записи ассистента в расшифровку только тогда, когда Gateway управляет отображаемым сообщением вне обычного встроенного хода агента: `chat.inject`, ответы команд без участия агента, прерванный частичный вывод и управляемые WebChat дополнения расшифровки для медиафайлов.
* Если во время запуска отображается текст ассистента, но после перезагрузки истории он исчезает, проверьте по порядку: содержит ли расшифровка SQLite текст ассистента, не удалила ли его проекция отображения `chat.history`, а затем не заменила ли логика объединения оптимистичного хвоста Control UI локальное состояние доставки сохранённым снимком.

Итоговые ответы обычного запуска агента должны сохраняться, поскольку встроенная среда выполнения записывает `message_end` ассистента. Любой резервный механизм, дублирующий доставленные итоговые данные в расшифровку, сначала должен убедиться, что ход ассистента, уже записанный встроенной средой выполнения, не будет продублирован.

## Панель инструментов агентов в Control UI

* Панель Tools раздела `/agents` в Control UI содержит представление "Available Right Now", использующее `tools.effective(sessionKey=...)`: сформированную сервером проекцию доступного только для чтения текущего набора инструментов сеанса, включая основные инструменты, инструменты плагинов и каналов, а также уже обнаруженные инструменты серверов MCP.
* Отдельное представление для редактирования конфигурации (использующее `tools.catalog`) охватывает профили, переопределения для отдельных агентов и семантику каталога.
* Доступность во время выполнения определяется на уровне сеанса. При переключении между сеансами одного и того же агента список "Available Right Now" может измениться. Если соединение с настроенными серверами MCP ещё не устанавливалось или их конфигурация изменилась после последнего обнаружения, панель показывает уведомление, а не запускает незаметно транспорты MCP из пути чтения.
* Редактор конфигурации не подразумевает доступность во время выполнения; фактический доступ по-прежнему определяется приоритетом политик (`allow`/`deny`, переопределениями для отдельных агентов, провайдеров и каналов).

## Удалённое использование

* В удалённом режиме WebSocket Gateway туннелируется через SSH/Tailscale.
* Запускать отдельный сервер WebChat не требуется.

## Справочник по конфигурации (WebChat)

Полная конфигурация: [Конфигурация](https://docs2.openclaw.ai/ru/gateway/configuration.md)

У WebChat нет сохраняемого раздела конфигурации. Gateway использует встроенный лимит отображения `chat.history`; клиенты API могут передать `maxChars` для отдельного запроса, чтобы переопределить его для одного вызова. Устаревшие конфигурации `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, если они включены.
* `gateway.auth.mode: "trusted-proxy"`: аутентификация через обратный прокси для браузерных клиентов за учитывающим идентификацию источником прокси **не из loopback** (см. [Аутентификация доверенного прокси](https://docs2.openclaw.ai/ru/gateway/trusted-proxy-auth.md)).
* `gateway.remote.url`, `gateway.remote.token`, `gateway.remote.password`: целевой удалённый Gateway.
* `session.*`: хранилище сеансов и стандартные значения основного ключа.

## См. также

* [Control UI](https://docs2.openclaw.ai/ru/web/control-ui.md)
* [Панель управления](https://docs2.openclaw.ai/ru/web/dashboard.md)
