Multi-agent
Присутствие
«Присутствие» OpenClaw — это упрощённое представление, формируемое по мере возможности, о:
- самом Gateway и
- видимых пользователю клиентах, подключённых к Gateway (приложение для Mac, WebChat, узлы и т. д.)
Данные о присутствии отображаются в реальном времени на странице Devices интерфейса управления (в разделе Settings → Devices) и на вкладке Instances приложения для macOS.
На этой странице описан список клиентов Gateway. Чтобы определить компьютер Mac, который вы использовали последним, и направлять на него оповещения узлов, см. Присутствие активного компьютера.
Поля присутствия (что отображается)
Записи присутствия — это структурированные объекты с такими полями:
instanceId(необязательно, но настоятельно рекомендуется): стабильный идентификатор клиента (обычноconnect.client.instanceId)host: понятное человеку имя хостаip: IP-адрес, определённый по мере возможностиversion: строка версии клиентаdeviceFamily/modelIdentifier: сведения об оборудованииmode:ui,webchat,cli,backend,node,probe,testlastInputSeconds: количество секунд с момента последнего действия пользователя, если известноreason: произвольная строка, предоставленная клиентом; сам Gateway выдаёт толькоself,connectиdisconnectdeviceId,roles,scopes: идентификационные данные устройства и сведения о роли и области действия из процедуры установления соединенияts: временная метка последнего обновления (мс с начала эпохи)
Источники (откуда поступают данные о присутствии)
Записи присутствия поступают из нескольких источников и объединяются.
1) Собственная запись Gateway
При запуске Gateway всегда создаёт собственную запись, чтобы интерфейсы показывали хост Gateway ещё до подключения клиентов.
2) Подключение WebSocket
Каждый клиент WS начинает с запроса connect. После успешного установления соединения
Gateway создаёт или обновляет запись присутствия для этого подключения.
Почему кратковременные подключения плоскости управления не отображаются
Команды CLI, серверные клиенты RPC и средства проверки часто подключаются ненадолго. Чтобы не
сохранять эти часто меняющиеся подключения в течение всего срока жизни записей присутствия, клиенты в режиме cli, backend
или probe не преобразуются в записи присутствия. Клиенты в тестовом режиме
продолжают отслеживаться, поскольку наборы тестов используют их вместо реальных клиентов.
3) Сигналы system-event
Клиенты могут отправлять более подробные периодические сигналы с помощью метода system-event. Приложение
для Mac использует его для передачи имени хоста, IP-адреса и lastInputSeconds.
4) Подключения узлов (роль: node)
Когда узел подключается через WebSocket Gateway с role: node, Gateway
создаёт или обновляет запись присутствия этого узла (так же, как для других клиентов WS).
Правила объединения и устранения дубликатов (почему instanceId имеет значение)
Записи присутствия хранятся в единой карте в памяти. Ключи в ней не зависят от регистра
и выбираются по первому доступному значению в следующем порядке: идентификатор сопряжённого устройства, connect.client.instanceId
или, в крайнем случае, идентификатор отдельного подключения.
Кратковременные клиенты плоскости управления полностью исключены из отслеживания (см.
выше), поэтому идентификаторы их подключений никогда не становятся ключами. Для всех остальных клиентов
резервное использование идентификатора подключения означает, что клиент, повторно подключившийся без стабильного
instanceId, отображается дублирующейся строкой.
Срок жизни и ограничение размера
Данные о присутствии намеренно недолговечны:
- Срок жизни: записи старше 5 минут удаляются
- Максимум записей: 200 (сначала удаляются самые старые)
Это позволяет поддерживать актуальность списка и предотвращает неограниченный рост потребления памяти.
Особенность удалённых и туннельных подключений (IP-адреса обратной петли)
Когда клиент подключается через SSH-туннель или локальное перенаправление портов, Gateway
может видеть удалённый адрес как 127.0.0.1. Чтобы не записывать этот адрес туннеля
как IP-адрес клиента, при обработке подключения поле ip полностью исключается
для клиентов, определённых как локальные (обратная петля), вместо сохранения адреса обратной петли
в записи.
Потребители
Страница Devices интерфейса управления
Страница Devices объединяет system-presence с постоянными записями
о сопряжении и узлах. Собственный сигнал Gateway закрепляется первым, а совпадающие идентификаторы устройства или
экземпляра используются для получения актуальных метаданных о платформе, версии, модели и времени с момента последнего ввода.
Вкладка Instances в macOS
Приложение для macOS отображает результат system-presence и применяет небольшой индикатор
состояния (Active/Idle/Stale) в зависимости от времени, прошедшего с последнего обновления.
Советы по отладке
- Чтобы просмотреть необработанный список, вызовите
system-presenceдля Gateway. - Если отображаются дубликаты:
- убедитесь, что клиенты передают стабильный
client.instanceIdпри установлении соединения - убедитесь, что периодические сигналы используют тот же
instanceId - проверьте, отсутствует ли
instanceIdв записи, полученной из подключения (в этом случае дубликаты ожидаемы)
- убедитесь, что клиенты передают стабильный
Связанные материалы
Как физический ввод на Mac выбирает активный узел и направляет оповещения о подключении.
Когда отправляются индикаторы набора текста и как их настроить.
Исходящая потоковая передача, разбиение на фрагменты и форматирование для каждого канала.
Компоненты Gateway и протокол WebSocket, обеспечивающий обновление данных о присутствии.
Сетевой протокол для connect, system-event и system-presence.