# Очистка Chat Agent

MR: https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/59
SHA: `c686800c92f3fb0596d53189d4f069c2b738b97d`; база `12e33db2`. Один writer, изолированный checkout.

## Изменения

1. Удалён особый лимит вывода для старого `set_input_values`. Текущий каталог `run_js` сохраняется.
2. Удалены `tokenizer_assets.py`, вызовы/переменная/кэш из CI, `tokenizers` и `huggingface-hub` из тестовых зависимостей; инструкция интеграционных тестов соответствует Python/NATS/PostgreSQL.
3. Удалены `optional_history` и цикл повторной токенизации. Текущие producer не создают это поле. Один запрос `/tokenize` проверяет полный контекст; превышение лимита остаётся явной ошибкой.
4. Смысл передачи задаётся в процессе производителя. Регистратор и временная диагностика используют один контракт. Monitor и консоль не реконструируют его по JSON/названию. Имена сторон берутся из записанных источника/получателя. `ok: true` не делает запрос ответом.
5. Журнал обновляет строки по event_id; неизменённые узлы и фокус сохраняются. Данные тел не копируются в ключи DOM-кэша. Кэш ограничен отображаемыми строками и очищается при закрытии/смене режима.
6. Идемпотентная инициализация удаляет только `widget_cache.results`. Каталог, session/context owners и квитанции сохраняются. Потеря этой старой колонки разрешена пользователем.

## Проверки

- 117 адресных frontend-тестов; 71 Python-тест.
- 22 интеграционных теста на одноразовых PostgreSQL 16 и NATS 2.11.
- После последних правок: 27 traffic/chain-тестов и 29 causal/traffic-тестов (группы пересекаются, их числа не суммируются).
- NATS-диалог: 2 генерации → 2 `/tokenize`; повтор команды не выполняет инструмент заново. Отмена освобождает выполнение после терминальной квитанции.
- Миграция выполнена дважды в тестовой БД: results отсутствует, каталог и владельцы сохранены.
- TypeScript/Front build и ZIP 2.4.6 прошли. Key, permissions, CSP совпадают с установленной 2.4.5. Пакет установлен по прежнему пути 5 ноября; активация в Chrome и живой контрольный запрос подтверждены ниже.
- Chrome, реальный компонент на 200 контрольных передачах: изменение одной строки сохраняет 199 узлов. Журнал → выбранная стрелка → журнал сохраняет event_id и выделение. Светлая и тёмная темы просмотрены. Это локальная проверка, не production-приёмка.
- Первый CI обнаружил устаревшее ожидание `ok: true` как ответа; исправлено явным направлением квитанции. Итоговый CI фиксируется отдельно.

## Границы

NATS subjects, соединения и DRS не менялись. `nats_box`, `nats_ui`, `pgweb_mcp` сохранены; в свежем Insight все три имеют 1/1 running. ASR, модели, GPU и инфраструктура не затронуты.
Исторические записи не переписываются. При отсутствии сохранённого purpose UI сообщает это явно; старое назначение не угадывается.
MR одобрен пользователем и слит. Все пять затронутых приложений поставлены адресно. Снимок прежних digest — runtime-before.json.

## Измеримый эффект

Рабочий код: +121/-248, нетто −127 строк. Весь diff после двух коммитов: +293/-450, нетто −157 строк. Исключены загрузка файлов токенизатора и две прямые тестовые зависимости. Изменение одной из 200 строк не пересоздаёт остальные 199. Ускорение GPU/LLM или production latency не измерялось и не заявляется.

## CI на итоговом SHA

[Pipeline 5759](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5759>): все пять check jobs success. Python — 253 passed, 138 skipped, 10 subtests; отдельная PostgreSQL/NATS integration — 110 tests; browser NATS — 3 tests. Frontend и Ruby здесь штатно пропущены из-за неизменившихся исходников после первого коммита; на 911818f4 прошли 578 frontend и 60 Ruby tests (pipeline 5758). Pipeline 5758 завершился failed только из-за исправленного старого Python fixture. Этот раздел относится к CI ветки до merge; результаты выпуска ниже.


## Выпуск 5 ноября

- MR !59 слит в main: `24e73a2149afabbb98904a26ced724edb0861002`.
- Main pipeline [5760](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5760>): все пять checks success; Front 578 passed, Python 253 passed / 138 skipped / 10 subtests. Интеграционные PostgreSQL/NATS и браузерные проверки прошли. В component pipelines 5761–5764 неизменённые группы штатно skipped.
- Образы пяти приложений собраны единожды job 29812. Использованы неизменяемые digest в репозиториях main, не автопоставка mutable latest. Образы подготовлены до drain.
- Успешные адресные refresh: LLM 29841 → Agent 29890 → Ingress 29939 → Gateway 29988 → Front 30037. Preflight и проверки revision/digest/health прошли. Общего redeploy стека не было.
- Свежий Insight: все пять приложений `6.0.1173`, `1/1 running`, commit «Merge approved NATS cleanup !59». Полные digest записаны в release-state.json.
- Из нового Gateway: Agent/LLM отвечают по NATS, Gateway/Ingress `draining=false`, активных запросов/аудиоподключений/неопределённых допусков нет.
- Production PostgreSQL: `results` отсутствует; `session_id, tools, created_at, updated_at, context_id` сохранены; в каталоге 54 записи. Пользовательские значения не выводились.
- `nats_box`, `nats_ui`, `pgweb_mcp` по-прежнему `1/1 running`.
- Пакет 2.4.6 установлен в `локальный источник; прежний 2.4.5 сохранён рядом в `chrome-extension-2.4.5-before-cleanup-20261105`. Перезагрузка Chrome инструментом не выполнялась.

## HTTPS Monitor после поставки

Исторический запрос `4e4fc102-fe8a-4cb2-81b6-c9dbe7ba1997` загружен новой версией: 41 наблюдение, 27 передач. Журнал → стрелка → журнал сохранили `event_id=39a6f525-6587-417b-8338-221bb2d74186`, выбранную строку и боковые подробности. Проверены светлая и тёмная темы; исходная тёмная тема восстановлена. Ручное обновление сохранило выбранную передачу. Исторические неполные отметки показаны явно и не восстановлены предположениями. Активация расширения и новый сквозной вызов подтверждены следующей проверкой.

Контрольный запрос к рабочему LLM через NATS: request `ffcff6f9-3de2-4fb3-b4ed-8524e132a189`, ответ «готово», ok=true, 0 tool calls, 319 мс целиком на стороне инициатора. Это один короткий замер, не GPU-время и не оценка p95; он не заменяет проверку новой панели.

В консоли Chrome во время перезагрузки Monitor зафиксировано сообщение `A listener indicated an asynchronous response ... message channel closed`. Источник расширения по доступному сообщению не установлен; зафиксированных ошибок загрузки данных Monitor нет, 41 наблюдение и переходы доступны. Консоль не объявляется полностью чистой.

## Приёмка активной панели 2.4.6 — 5 ноября, 12:27 UTC

Пользователь перезагрузил расширение и открыл панель на RoboForm. Выполнен один запрос на чтение h1: `d060c4bf-55ea-4fc6-a9e4-31886df23f4e`, session `e553d21f-3e16-4891-9321-65b73fed9cee`. Агент вернул «Form Filler: Test Form - All Fields», совпадающий с фактическим заголовком.

- Две генерации, один run_js `chatcmpl-tool-88d5b2b9ac137e08`. В коде только dom.find(h1) и dom.get(textContent); поля формы не читались, изменений страницы и повторного выполнения инструмента нет. Микрофон выключен.
- Monitor: 41 наблюдение / 27 передач, 8 запросов, 12 ответов, 7 событий, 0 ошибок доставки и инструмента. Сохранено подтверждение показа ответа.
- Время панели от отправки до показа: 3,412 с; Agent 3,261 с, вложенные удалённые вызовы LLM 2,761 с и инструмент 0,131 с. Интервалы не складывались, GPU-время не утверждается.
- В боковой панели фактические chat-agent_src_agent → chat-agent_src_api_gateway и сохранённое объяснение назначения передачи. Переход журнал → стрелка №11 → журнал сохраняет event_id `ee6c5f73-a307-4ed9-96a9-aa8e5b7e9d56`.
- Для этого request_id в консоли нет error/warn; browser_script_busy не возник. Некоторые отдельные клиентские отметки отправки/приёма всё ещё не сохраняются; UI явно отмечает эти пробелы. Они не подменены выдуманными timestamps.
- Снимки: panel-2.4.6-live.jpg, panel-2.4.6-result.jpg, monitor-2.4.6-live.jpg. Это подтверждение рабочего пути, а не расширенная регрессия или p95.

После поставки дополнительный код не менялся.
