Самостоятельный Chat Agent — поставка 12 ноября 2026
Опубликован один скрипт для сайта Chat Agent, отдельного Forms и Forms внутри iframe. Текст, потоковые фрагменты, вызов инструмента страницы и автоматическая озвучка проверены в браузере. Сохранённая фраза прошла распознавание. Обнаруженная ошибка последующей обработки бытовой фразы Agent описана ниже и не считается успешной проверкой команды.
Подключение
<script type="module"
src="https://chat-agent.gis-master.ru/widget/chat-agent.js"></script>
session_id и контейнер для подключения не нужны. После загрузки появляется кнопка Chat Agent справа внизу. Виджет не читает UUID из адреса /chat/<UUID>.
- Контрольная страница Chat Agent.
- Отдельный Forms.
- На контрольной странице тот же Forms содержит самостоятельный экземпляр внутри iframe.
История разделена по origin и ключам chat-agent.widget.session.top / chat-agent.widget.session.frame. Открытые экземпляры имеют собственные client/context/document ID. Повторное подключение модуля не создаёт вторую панель. При недоступном localStorage ID остаётся в памяти документа, панель предупреждает об отсутствии восстановления истории после перезагрузки.
Исходники и CI
| Репозиторий | MR | Поставленная ревизия | Проверки и поставка |
|---|---|---|---|
| Chat Agent | !81, merged | e64a7abfb135a4eac1fd5770ef7073293c24b010 |
5970 — Gateway, 5971 — Front; обязательные группы прошли |
| Forms | !1, merged | 47a312907518e54b649592abf1732d38b1c42ad6 |
5973, success; registry-listener применил образ |
Gateway: build 31767, preflight 31771, refresh 31797. Front: build 31818, preflight 31822, refresh 31848. Forms: tests 31853, build/push 31852. Для Forms устранён отказ Trivy обновлением Nginx 1.30.5 → 1.30.6; сканирование не ослаблялось.
Локально: 628 frontend-тестов и типизация; 29 адресных backend-тестов; 3 теста с настоящим тестовым NATS; сборки Front/widget/extension; проверки Nginx и DRS. Forms: типизация, lint, 20 тестов и сборка. Manifest, ID, permissions и CSP пакета расширения сохранены. Установленное расширение не переустанавливалось, отдельный production-прогон старого расширения в этой поставке не выполнялся.
Registry и работающие сервисы
Все три latest проверены в Registry Explorer, их pipeline и commit совпадают с выпуском. Gateway и Front подтверждены в обновлённом Insight как 1/1 running. Для Forms Inspect подтвердил running/healthy, фактический Image ID и OCI revision. Наличие тега в registry отдельно не использовалось как доказательство поставки.
| Компонент | Версия | Registry manifest digest |
|---|---|---|
chat-agent_src_api_gateway |
7.3.1257 |
sha256:f5283b50f8a4ff43fa66de45fb67166974997259998d8536f08b15025c62a9ea |
chat-agent_src_front |
1.0.1258 |
sha256:e3214b799dc4dfb547d0904d8375a2761177dabac2072744d65e572a24f783fd |
forms-stack_frontend |
0.4.8 |
sha256:a512eb6d12cf6beb131009d100a6189f23f470344d88b7a59bd3d441c23e6355 |
Forms работает с Image ID sha256:d50cb9b5ba4d9403c1f422e0e9df3a9b9a749e4193332c565841c29db48ba556 и OCI revision 47a31290…. Image ID отличается от registry manifest digest — это разные идентификаторы.
Поставка Chat Agent ограничена Gateway и Front. Agent, Ingress, ASR, TTS, GPU/MIG и административные сервисы не обновлялись. Общий redeploy/prune не выполнялся. Прежние digest и параметры сохранены в rollback.json рядом с отчётом.
Подтверждённые браузерные сценарии
| Сценарий | Результат и связь |
|---|---|
| Chat Agent top | Сессия 574b0f36-9b9b-492d-9f05-4c80a7006219, не UUID маршрута. Запрос 8c32e033-3f5a-439e-b400-c45f11713ce1: потоковый текст → финал → Qwen TTS → playing → ended, панель «Воспроизведено» |
| Forms top: действие страницы | Сессия fa575b25-8629-4179-82c7-a7f279231df9. Запрос cc2cce4d-72a0-4074-9ded-fecd9785987a: список инструментов, затем native select_pet_product с product_id=dog-ball; товар выбран, ответ озвучен. Monitor: команда выполнена, ошибок 0 |
| Диагностика шага | В модалке показаны page_action, источник native, аргументы выбора товара и подтверждённый результат selection_revision=1 |
| Перезагрузка Forms | Сессия top и история восстановлены; новый client/context. История не запустила повторный выбор товара или озвучку |
| Forms внутри iframe | Отдельная сессия 5fd23bab-74c1-4e94-b16f-ea17ebb382eb. Запрос 493fc183-9ac2-4b8c-9f87-3b11613ca913: ответ, потоковые фрагменты и TTS ended подтверждены. Панель ограничена областью iframe |
| ASR на сохранённой записи | Файл ordinary/03-clean.flac, 1,97 с. Подан через временный синтетический MediaStream, физический микрофон не использовался. Получено «давай выйдем немного раньше». Monitor: транскрипция распознана, ошибок 0 |
| Закрытие панели | Оба тестовых MediaStream перешли в ended, AudioContext закрыты, оригинальный getUserMedia восстановлен. В Monitor активных аудиоподключений 0 |
| Публичные ресурсы | Анонимные HEAD entry/worklet/WASM/ONNX: HTTP 200, корректный MIME, ACAO *. Entry no-cache; хешированные ресурсы immutable |
| Авторизация | Forms реально получил bootstrap 200 и продление 200; технический OPTIONS 204. POST без входа перенаправляется в Slim Auth |
В первом коротком TTS worker сообщил first_block_ms=283, 23 блока и 2160 мс аудио. Это время worker до первого блока, не измеренная задержка от запроса пользователя до слышимого звука. Новый сравнительный benchmark не выполнялся.
На Forms первый запуск VAD потребовал загрузки ресурсов; запрос worker-модуля занял около 7,9 с, повторный — около 10 мс. Это отдельное наблюдение холодного браузерного запуска, не время распознавания модели.
Обнаруженные ограничения
- Agent на бытовой фразе. После корректного ASR «давай выйдем немного раньше» Agent вызвал инструменты и достиг лимита 10 действий. Запрос
1e420f8a-2697-585f-900f-dfc92367de3b: транскрипция успешна, связанная команда завершилась ошибкой. В этой поставке Agent не менялся; исправление выбора инструментов осталось отдельной задачей. Выбор товара через настоящий инструмент ранее прошёл успешно. - Разовый сетевой сбой продления. После успешного продления 200 следующий bootstrap завершился
net::ERR_CONNECTION_CLOSED. Панель показалаaccess_expired; видимая кнопка «Повторить» восстановила соединение без повторного входа. Это не наблюдавшийся отказ CORS/профиля; текст ошибки интерфейса не различает причины обновления доступа. - Чужие сайты. Публичного script-тега достаточно для загрузки пакета, но cookies Slim Auth, CSP, HTTPS, sandbox и Permissions Policy принимающей страницы продолжают определять возможность подключения и голоса. Проверены Chat Agent, Forms и вложенный Forms, не все сторонние браузеры/домены.
Объём изменений
| Область | Добавлено | Удалено | Чистое изменение |
|---|---|---|---|
| Рабочий код и конфигурация Chat Agent | 117 | 54 | +63 |
| Рабочий код и конфигурация Forms | 5 | 4 | +1 |
| Тесты | 133 | 13 | +120 |
| Документация | 46 | 9 | +37 |
Итого рабочий код/конфигурация +64 строки, не сокращение общего объёма. Удалены зависимость от маршрута сессии и прежний фиксированный origin, ресурсы сведены в одну сборку. Новые сервисы не добавлены, панель и аудиотракт переиспользуются.
Свидетельства
registry-proof.json,runtime-chat-agent.json,frontend-delivery.json,gateway-delivery.json— registry, revision и поставка.chat-agent-wire.json— отфильтрованные поля тестового обмена без токенов доступа и аудиотел.monitor-session.txt,monitor-live.png— команды, успешная транскрипция и отдельная ошибка Agent.public-assets-check.json,published-resources.json— опубликованные ресурсы и заголовки.chat-agent-live.png,forms-live.png,forms-tool-step.png,forms-iframe-live.png— проверка интерфейса.- Локальные логи проверок, patch и
source-stats.jsonнаходятся в той же папке.