# Chat Agent 2.5.0 — поставка и проверка 06.11.2026

MR [!60](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/60>) одобрен пользователем и влит. Main: `90ca99b6385a448382d1d1ca8bbd6c2464c3a7c0`. Reviewed source: `cdaa1a1c871ee2a7abe9787973b5f503da47ac5d`. Изолированный checkout: `локальный источник Пользовательская основная копия не менялась. Repowise обновлён на новый main.

## Что удалено и упрощено

- Удалены отдельный `src_llm`, его Dockerfile, debug-профиль, конфигурация сервиса и ветви сборки. Удалён `src_agent/model_capture.py` и обратный RPC capture. Работающий provider перенесён в Agent без повторной реализации; исчез внутренний сетевой вызов Agent → LLM.
- Сохранены диагностический `nats.llm.user123`, health, единая очередь 1 выполняющийся / 3 ожидающих, токенизация и ограничения контекста. HTTP/SSE в новом журнале принадлежит Agent.
- Удалены транспорт v3, проигрывание исторических PCM-архивов и специальные Core-преобразования. Opus, PCM после декодирования, ASR, waveform и временный WAV работают. Исторические записи физически не удалялись.
- Убрана повторная сериализация ради размера диагностического сообщения; объединена очистка ресурсов Gateway. Схема Monitor переиспользует элементы, JSON и подробные пакеты загружаются при раскрытии.
- Добавлена ручная очистка с preview, фиксированной выборкой, ограниченными порциями, защитой активности/replay и сохранением связанных payload. Production-удаление не запускалось.
- Шесть диагностических вкладок заменены последовательной страницей одного шага. Генерации/инструменты связаны ID; отсутствующее публичное пояснение обозначается честно.

Рабочий код: **+805 / −807, итог −2 строки** (20 433 → 20 431). Тесты: **+567 / −457, итог +110**. Подсчёт учитывает переносы; неизменённый перенос провайдера не засчитан как сокращение. Новые очистка и диагностика почти компенсировали удалённый код. Сокращение состава runtime — один сервис и внутренние RPC.

## CI и образы

[Pipeline #5773](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5773>), точный SHA main:

| Job | Результат |
|---|---|
| 30070 Python | 246 passed, 136 skipped, 10 subtests passed |
| 30071 Browser NATS | 3 passed |
| 30072 Frontend | 586 passed; типизация и audit прошли |
| 30073 Ruby | 62 tests, 390 assertions, без ошибок |
| 30074 Integration | 111 tests в 16 группах |
| 30075 Четыре приложения | Сборка и публикация успешны, теги с полным SHA |
| 30092 Preflight | Успех |
| 30119 Consolidation | Успех, адресный переход выполнен |
| 30076 / 30120 ZIP | Сборка прошла; upload артефакта не прошёл |

Pipeline отображается `manual` из-за остальных необязательных ручных jobs; это не утверждение, что все его jobs выполнены. Публикация ZIP заблокирована resolver runner: внутреннее имя `gitlab` возвращает `server misbehaving` при загрузке artifacts. Один точечный повтор дал тот же результат. CI, DNS и общий runner ради обхода не менялись.

## Работающий результат

Agent, Gateway, Audio Ingress и Front: **1/1 running**, OCI revision `90ca99b6…`, build label `1.0.1181`. Job проверил точный image ID, health и завершённый rollout каждого компонента; Insight независимо подтвердил digest и replicas. Прежний LLM остановлен, после проверки единственного Agent-owned ответчика удалён. Допуск открыт. Остальные сервисы прошли guard без изменения; `nats_box`, `nats_ui`, `pgweb_mcp`, ASR, модели и GPU сохранены.

Полные новые digest находятся в [runtime-after.json](</experiments/voice-ai/archive/v/11/05/chat-agent-250/runtime-after.json>), прежние — в [runtime-before.json](</experiments/voice-ai/archive/v/11/05/chat-agent-250/runtime-before.json>). Адресный порядок отката сохранён в `DOCS/CHAT_AGENT_2_5.md`.

Пакет **2.5.0** собран штатным `extension:build` из main локально, проверен и установлен по прежнему пути `локальный источник; резервная копия 2.4.6 сохранена. ID `dbcdiabfkimnhbkkhkikgfapnabifmjf`, permissions и CSP прежние. ZIP SHA-256: `85d703cb881a2c0fd22822364258017cba925565a68bb23067aaee2202f129c2`. Пользователь подтвердил перезагрузку; новая панель проверена фактически.

## Production-проверки

- RoboForm: безопасное чтение только h1. Request `2a68332d-6dc5-415d-90c7-0bc08f37bdc5`, session `e553d21f-3e16-4891-9321-65b73fed9cee`. Три генерации / два успешных run_js; ответ `Form Filler: Test Form - All Fields`. По клиентскому измерению ответ показан через **4,17 с**. Поля формы и микрофон не использовались.
- Модалка: выбранный инструмент открывает свой шаг и выделяется; последующий шаг содержит его результат; финальный ответ только в шаге 3. Проверены обе темы, переходы, Escape, возврат фокуса и сохранение выбора. В последней генерации: очередь 0,00 с, подготовка 0,10 с, вызов провайдера 0,30 с, 1820 входных / 10 выходных токенов. Интервалы не суммируются с полным временем.
- Monitor: 53 сохранённых наблюдения → 38 передач, 9 запросов / 15 ответов / 14 событий, ошибок 0. HTTP Agent → provider, ответ обратно, разбор локально. Старого LLM-узла в новом запросе нет. Журнал → выбранная стрелка → журнал сохраняет event ID; JSON загрузился при раскрытии. Обе темы проверены на HTTPS.
- Ручная очистка: production preview выбранной сессии успешно вернул количества; удаление не подтверждалось. Защита активности, повтор, отмена, ссылки и порции проверены в изолированных интеграционных тестах.
- Opus 48 кГц: повтор сохранённой фразы `9c603781-fccd-5e05-80ba-538599e1e394`, диапазон **0,408–2,688 с**, длительность **2,28 с**. GigaAM Large: текст совпал, вход совпал по SHA-256, **один вызов**, чистое распознавание **37,38 мс**, весь повтор около **0,7 с**. Waveform и временный WAV доступны. Команда чата не создавалась.
- При открытии одной новой вкладки Monitor был единичный сбой подключения. После повторной загрузки auth/nats вернул 200, страница и replay отработали; причина первого сбоя не доказана. Первичное подключение расширения во время поставки также потребовало кнопки «Повторить», после чего NATS подключился и контрольный запрос прошёл.

## Короткие замеры и ограничения

Предыдущие сопоставимые локальные замеры этого MR: подготовка диагностического тела 65 558 байт — 0,199 → 0,039 мс (5×500); запрос Monitor на одинаковом наборе — медиана 224 → 134 мс (3 повтора). Это не production p95. Разницу старого и нового ASR-времени нельзя считать ускорением релиза: модель/прогрев не сравнивались в одинаковых условиях.

Compare прошёл изменённые тесты и сборку общего кода. Отдельный production-захват Compare не запускался, поскольку микрофон исключён из проверки; живая проверка аудио выполнена серверным replay сохранённой записи. Длительные прогоны не выполнялись. Остаётся инфраструктурный блокер публикации ZIP в GitLab; установленный пакет и работающие серверы ему не зависят.

Скриншоты действующего интерфейса: [шаг, светлая тема](</experiments/voice-ai/archive/v/11/05/chat-agent-250/production-step-tool-light.jpg>), [шаг, тёмная тема](</experiments/voice-ai/archive/v/11/05/chat-agent-250/production-step-tool-dark.jpg>), [схема, светлая тема](</experiments/voice-ai/archive/v/11/05/chat-agent-250/production-sequence-light.jpg>), [схема, тёмная тема](</experiments/voice-ai/archive/v/11/05/chat-agent-250/production-sequence-dark.jpg>), [preview очистки](</experiments/voice-ai/archive/v/11/05/chat-agent-250/production-cleanup-preview-dark.jpg>).
