Общий аудит и упрощение Chat Agent
Исходная задача восстановлена из чата «chat-agent sound simplified», согласованный
план от 28.10: отдельная очистка приложения, расширения, Monitor, БД, тестов,
зависимостей и CI после внедрения run_js. Основа этой итерации — a1bfae91.
Один writer, изолированный checkout; dirty основная копия сохранена.
Уже выполнено до этой итерации
В main присутствуют единый run_js, один реестр DOM, ограниченный dom.find,
удаление прежних PageTools/DomCommands и чтения результатов инструментов между
вопросами. Это не новые результаты. Детали: предыдущий аудит.
Новые изменения
| Участок | Доказанный излишек | Изменение и проверка |
|---|---|---|
| Каталог Monitor | Отдельный count(*) на каждую таблицу |
Один UNION ALL, параметры окна/имён и quoting идентификаторов; сохранены динамические таблицы, NULL дат, OR по датам и счётчики. PostgreSQL regression проверяет имя с кавычкой, view и не-timestamptz поля |
| TrafficStore | Повтор одного event_id не пишет строку, но снова уведомляет клиентов |
Уведомление только после INSERT 0 1; без дополнительного SQL. Дубль не создаёт повторное обновление Monitor, новый event по-прежнему уведомляет |
| Ручной Form Collector | Сначала материализовал все элементы, затем применял maxFields |
Использует существующий ленивый walker. Сам collector сохраняет владение обходом frames/shadow, метаданные и порядок; тест на 5000 хвостовых элементов, стабильные ссылки, frames и element-root |
Пагинация dom.find |
Повторно собирала полные метаданные пропускаемых элементов каждой страницы | Без текстового фильтра метаданные читаются только для возвращаемой страницы. Текстовый фильтр по-прежнему проверяется до пагинации; отдельный тест проверяет оба случая |
| Monitor JSON | Невостребованные messageText и его helper |
Удалены после поиска импортов/вызовов. jsonView сохраняет точные числовые литералы и безопасный показ JSON |
| Front/расширение | Четыре неиспользуемых поля экземпляров, устаревший embedded, лишние локальные привязки/параметры |
Удалены; побочные действия и вызовы сохранены. TypeScript с noUnusedLocals/noUnusedParameters проходит |
| Audio Ingress | Две одинаковые ветки закрытия/повторного выброса исключения | Отдельная ветка AudioFailure удалена: её полностью покрывает существующий BaseException, включая отмену; действующий browser-media тест |
| BatchCapture | Неиспользуемый импорт time |
Удалён. Модуль использует Audio Ingress; batch/media тесты сохранены |
| Входная документация | README/quickstart/inventory предлагали удалённые Ruby и WebRTC компоненты | Сокращены и сверены с текущими source/Compose/DRS. Датированные отчёты C1–C4 и Trickle ICE сохранены как история |
| Описание таблиц | Каталог называл пакеты только PCM и обещал старый кэш инструментов | Указаны PCM/Opus и фактическое назначение widget_cache |
Расширение получает patch-пакет 2.4.1; ID, разрешения и CSP сохраняются. Front использует общий код расширения; поставляемые потребители — Gateway, Audio Ingress и Front. ASR worker, веса, алгоритмы, GPU, внешние сервисы, инфраструктура и корневой CI не меняются.
Все таблицы: владельцы и решение
Проверены схемы и SQL-потребители, включая динамический Monitor. Идентификаторы session/context/client/request/tool_call не объединяются: они задают разные границы владения.
| Таблица | Реальные потребители / зачем сохраняется |
|---|---|
audio_recordings |
AudioStore, Monitor, проигрывание и replay: формат, настройки, полнота и владелец |
audio_chunks |
AudioStore/AudioReader: PCM либо принятые Opus-пакеты, координаты, байты и хеши |
audio_phrases |
AudioStore/Monitor/replay: границы фразы, результат, request ID и подтверждение отображения |
audio_recording_events |
AudioStore/проекция Monitor: настройки, клиентские наблюдения и ещё не привязанные receipts |
nats_log |
TrafficStore, Monitor и история Agent: передачи, фактические входы/выходы, связи payload_ref |
widget_cache |
WidgetStore/Agent: каталог страницы по (session_id,context_id); старый results текущий Agent не читает |
browser_command_receipts |
WidgetStore, AviationStore, ChatNotes: идемпотентность, завершение и неизвестный результат |
browser_access |
BrowserApi/bootstrap/auth/maintain: клиент, session, профиль и сроки доступа |
browser_connect_tickets |
BrowserApi.redeem/maintain: одноразовые билеты подключения |
chat_agent_owner |
Database/Agent recovery: эпоха и fencing единственного владельца |
chat_notes |
ChatNotes/UI: текст заметки и optimistic version |
aviation_demo |
AviationStore/карта: каталог аэропортов и revision |
aviation_positions |
AviationStore/карта: положение и revision по сессии |
aviation_plans |
AviationStore/Agent: сохранённые планы и revision |
aviation_weather |
AviationStore/weather: последние данные, попытка обновления и ошибка |
spatial_ref_sys |
PostGIS: системные определения координат; не мусор приложения |
Новые таблицы, поля, индексы, кэши, фоновые задачи и второй граф не добавлены.
Накопленные данные не удалены. Триггер chat_agent_touch_times меняет timestamp
при фактическом изменении; его удаление нарушит фильтры Monitor.
Индексы нельзя объявить бесполезными без production-планов и статистики использования.
Чтение полной истории и архивные проекции не упрощаются временной близостью: это потеряет
достоверную принадлежность фраз и изоляцию запросов.
Проверенные кандидаты, оставленные в коде
- Repowise:
domain_api, егоstart/stopиbrowser_api.start/stopвызываются через модуль из lifespan. VAD worker создаётся через Worker URL. Weather/archive probes вызываются delivery-скриптами. Статическийin_degree=0не доказывает ненужность. - Повторная инициализация timestamp-схемы Agent/Gateway: таблицы создаются в разном порядке. Простое удаление вызова оставит поздние таблицы без дат/триггеров. Изменение требует отдельного решения владельца схемы; новый менеджер миграций не вводится.
- Manifest, хеши и receipts обеспечивают полноту архива, точный replay и защиту от повторного действия. PCM-совместимость и исторические streaming-данные используются.
FairPool, budgets, deadlines, cancellation и ограниченные буферы сохраняют изоляцию сессий и предельную память; объединять их только ради числа строк нельзя.- Прямые frontend dependencies имеют потребителей: ONNX/Silero, libsamplerate, MCP client/server, NATS, MapLibre, Buffer и MarkdownIt. Python runtime/telemetry зависимости используются приложениями и startup; зависимость не удаляется по отсутствию текстового совпадения имени package. Зависимости и lock-файлы не меняются.
- Корневой CI и manual release jobs имеют штатных/recovery потребителей. CI не упрощается обходом gates; generated OpenWiki не редактируется вручную.
Отдельный кандидат на согласование удаления данных — физический widget_cache.results:
прикладное чтение уже удалено, но старые значения доступны в Monitor. Здесь колонка
и значения сохранены. Массовая очистка nats_log/архива не является оптимизацией кода.
Адресные проверки и измерение
- Front: 96 тестов в 7 затронутых файлах; типизация с дополнительным поиском неиспользуемых переменных/параметров. Сборки Front и ZIP расширения прошли. После исправления ссылки на исходник и оптимизации пагинации — 56 адресных тестов DOM/run_js/аудиодиагностики; общий CI выполняется штатным отбором.
- PostgreSQL 16: 12 тестов WidgetStore/catalog и TrafficStore, включая повторную
доставку, точные счётчики и сохранение старых
results. - Python: 20 browser batch/media/Monitor тестов. Ruff F401/F841 по всем шести Python-областям проходит без находок. Недостающие зависимости тестового venv установлены отдельно от репозитория; runtime pins не менялись.
Каталог: отдельная PostgreSQL, 16 таблиц (15 приложения и недатированная fixture), 10 000 синтетических событий, 3 прогрева и 20 учитываемых пар с чередованием порядка. Все 23 пары ответов совпали, кроме отдельно исправленных описаний, нормализованных одинаково перед сравнением. BEGIN/SET/COMMIT одинаковы и в число SQL не включены.
| Показатель | До | После |
|---|---|---|
| SQL | 17 | 3 |
| Медиана | 4,136 мс | 2,590 мс |
| p95 nearest rank, n=20 | 5,487 мс | 2,982 мс |
| Ошибки / несовпадения | 0 | 0 |
Это локальная проверка, не production p95 и не ускорение ASR/модели. Сырые результаты и разовый benchmark сохранены в артефактах текущей задачи вне поставляемого кода. CI/образы, фактический rollout и активация расширения фиксируются отдельно в итоговом отчёте; локальная сборка их не доказывает.