Голосовые системы

run_js и упрощение chat-agent — 29 октября 2026

Рабочая основа: 7032f4aa. Итоговый исходный код: f87b428d1c1036db5051d420e97041cc1f85e3da. Работа выполнена одним writer в codex/chat-agent-run-js. Независимые изменения Silero/batch и основной пользовательский checkout сохранены. Версия основного расширения — 2.1.0: после согласования исходного плана соседняя работа уже выпустила 2.0.0, поэтому номер 1.10.0 не использован.

Что реализовано

  • Один публичный инструмент страницы run_js({code}); локальные message/cancel сохранены. Существующая доставка Agent → LocalMcp → Background → USER_SCRIPT, без нового сервиса или NATS-соединения.
  • dom.find/get/set/act используют один collector и один ограниченный реестр. Сохранены формы, native setters, constraints, SEO, фон, текст, click/scroll, ручной сбор, доступные iframe и open/closed Shadow DOM.
  • Исполнение привязано к точному документу и владельцу. Сохранены дедупликация, отмена и бюджеты; неизвестный исход блокирует следующий запуск до перезагрузки документа.
  • Строгий JSON проверяется до сериализации Chrome. Код/результат раскрываются в панели; история и Monitor не исполняют сохранённый код.
  • Удалены прежние PageTools, DomCommands, отдельный реестр, серверные read-tool cache ветки. Между независимыми вопросами результаты инструментов не пересылаются и не обновляются в кэше.
  • Отдельный аудит охватил приложение, расширение, Monitor, SQL, тесты, зависимости и CI. Выполнены доказанные небольшие удаления и пакетное чтение метаданных каталога.

Полный перечень кандидатов, потребителей и причин сохранения находится в аудите. Авторитетные файлы исходников: DOCS/RUN_JS.md и DOCS/RUN_JS_AUDIT_2026-10-28.md итогового SHA.

Проверки

Этап / сценарий Результат и граница доказательства
P0: основной Chrome, USER_SCRIPT, Promise, точный документ, CSP PASS; разрешение включено пользователем, основной пакет, не вспомогательный P0
P1: реальная модель меняет h1 и читает результат PASS; запрос f30a0703-0dd1-42cc-b47e-a459898479a7, три run_js: find → set → get. «Исходный заголовок» → «run_js работает», document.title и поля не изменены
P2: обычный DOM, open/closed Shadow DOM, доступный iframe PASS в основном Chrome; запрос 33497771-95b0-4674-af79-e96dd63e1aea, найдены и прочитаны все четыре пустых поля; записи не было
P2: строгий JSON, дубликаты, контекст, timeout/cancel, restart marker PASS автоматических тестов исполнителя; это не отдельные ручные прогоны каждого отказа Chrome
P2: native setters, constraints, предварительная проверка пакета, частичный результат, ленивый поиск, реестр PASS автоматических тестов DOM runtime и сохранённых collector tests
P3: новый каталог, причинные связи событий, запись истории, без старого results в Core-конверте PASS: 21 адресный интеграционный тест на отдельных NATS и PostgreSQL 16
Пять обязательных CI checks итогового SHA PASS — pipeline 5504; Python 229 passed + 8 subtests / 107 skipped в этой job; отдельно прошёл интеграционный контур. Frontend: 467 tests / 64 files; browser NATS, Ruby, dialog integration — PASS
Итоговая адресная поставка PASS; backend job 26547, Frontend job 26551, все шесть сервисов на f87b428d
Живой запрос после окончательной поставки PASS; f5b3f130-d1b6-4a1a-b45c-a7d8776420f1: один run_js объединяет find и несколько get, возвращает JSON-объект с верными h1/title
Monitor после поставки PASS; открывает новый запрос и сохранённую цепочку прежнего изменения h1: все 97 наблюдений, model call → run_js → result → final

Цепочки фактических вызовов и ID: native-checks.json. По последней просьбе владельца живые проверки ограничены необходимыми сценариями run_js. Микрофон и физическая речь не проверялись. Полный набор T01–T70 не объявляется прошедшим вручную.

Измерения

Одинаковые синтетические данные: PostgreSQL 16, 16 таблиц, 10 000 событий; один процесс/pool, 3 прогрева и 20 чередующихся учитываемых повторов. Старый модуль benchmark побайтно совпадает с 7032f4aa:src_api_gateway/monitor.py. Ответы совпали во всех 23 парах.

Метрика каталога Monitor Было → стало Абсолютная разница Изменение
SQL-запросы 32 → 17 −15 −46,88%
Медиана 9,8115 → 5,063 мс −4,7485 мс −48,40%
p95, nearest rank, n=20 11,261 → 5,630 мс −5,631 мс −50,00%
Ошибки 0 → 0 0 —

Это локальное ускорение чтения каталога, не измерение времени всего production Monitor или модели. Производственные CPU/RAM, сетевой объём, размер БД, LLM-токены, задержки ASR и физическая речь повторно не измерялись. Для изменения произвольного h1 старый специализированный каталог не предоставлял аналогичной команды. Ускорение LLM-цикла не заявляется: в проверке h1 модель выбрала три вызова, хотя API допускает их объединение в одном скрипте.

Сокращение интерфейса: модельные инструменты 5 → 1 (−4, −80%); локальные команды 10 → 3 (−7, −70%); реестры DOM-ссылок 2 → 1 (−1, −50%). Это структурные показатели, не замеры скорости.

Код и сущности

Подсчёт git diff --numstat 7032f4aa HEAD, без vendor/generated/build артефактов; машинный отчёт.

Область Добавлено Удалено Чистое изменение
Реализация 684 607 +77
Тесты 447 531 −84
Документация 234 8 +226

Удалены семь файлов: три заменённых слоя DOM (domCommands.ts, fieldProjection.ts, pageTools.ts), прежние тесты PageTools, неиспользуемый NatsPublisher и два Dockerfile для отсутствующих старых компонентов.

Дополнительно удалены три неиспользуемых метода Database, три невостребованные функции, лишние локальные импорты; два экспорта сделаны локальными. Старый серверный путь cache_result/PageCachePart и его передача между вопросами удалены. Существующие динамические входы, реэкспорты, очереди, owner/receipt-защиты и ASR сохранены после проверки потребителей.

Таблицы, поля, индексы, триггеры, зависимости и накопленные данные не удалялись. widget_cache.results физически сохранён. Повторная подготовка timestamp-схемы отложена до отдельного решения о владельце миграции. Новых таблиц, сервисов, библиотек и постоянных журналов нет.

Поставка

Итоговый pipeline: 5504.

Пять обязательных jobs: Python 26501, browser NATS 26502, frontend 26503, Ruby 26504, dialog integration 26505. Все PASS; машинный снимок — ci-checks.json.

Сборка шести адресных приложений 26521 и preflight 26524 — PASS. PostgreSQL, DNS, SSH и stack-файлы не менялись.

Локальный пакет Chat Agent 2.1.0 проверен: все 25 файлов архива побайтно совпадают с установленным каталогом локальный источник IDdbcdiabfkimnhbkkhkikgfapnabifmjf, Chrome 138+, согласованное разрешение userScripts. SHA-256 ZIP:1a176f1ca4fe22e6ad538e634d60a63f5f21a2d4b421362a95a39c1e9da5997d`. Проверка пакета.

BLOCKED — публикация ZIP: штатная job 26507 успешно собрала пакет, но загрузка артефакта в GitLab завершилась ошибкой lookup gitlab on 172.17.0.1:53: server misbehaving. Точный штатный повтор 26552 дал ту же ошибку после успешной сборки. Инфраструктура не перенастраивалась. В GitLab ZIP не опубликован; доступен локальный проверенный пакет выше. GitLab показывает общий статус pipeline manual; пять обязательных checks и адресные deployment jobs прошли, а публикация ZIP осталась неуспешной.

PASS — runtime: backend 26547 завершён 28.10.2026 23:07:47 UTC; Frontend 26551 — 23:09:17 UTC. Это адресное обновление приложений, без полного stack deploy. Штатный release проверяет точный OCI revision, фактический Image контейнера, одну реплику, завершённый UpdateStatus, Running/healthy и сохранность остальных service specs; приём Core восстановлен. Полные имена образов, SHA и времена jobs: runtime-evidence.json.

Все строки ниже относятся к f87b428d1c1036db5051d420e97041cc1f85e3da; версия приложения взята из .version этого проверенного исходного SHA.

Сервис Версия Проверенный digest Runtime
API Gateway 9.0 sha256:35364f17bfc99e602640d523477dd7b0412e79a51ce20ccd74ed3a91ced4b110 PASS
LLM 5.0 sha256:bb2a73c351d3b388c8f90c84b24dae8cd767d906e1a4f0cf5be77fb5cf314d9a PASS
Audio WS ingress 5.0 sha256:b60814c421d835434b09576e5691202effa34c837f6c83aad50cafb046663fdb PASS
Agent 9.0 sha256:3e5b420557e658e062237e2bf6e932842fa958d1f836b4ca568666e415b1217b PASS
Core 10.0 sha256:9fb4a3ca4f86b59ff804fdf184db96e2466cc51744ebd4109b8d67b8734f6427 PASS
Frontend 7.1 sha256:bdce54497566701710c2b2cdc91f2208f8037ac536669b5a91992f8c1fad196f PASS

После обновления открытая панель получила ожидаемый timeout выдачи доступа во время паузы приёма. Кнопка «Повторить» восстановила соединение. Новый запрос через окончательный backend завершился успешно: Monitor показывает 3,54 с серверного времени, 3,11 с удалённых вызовов модели и 3,69 с до показа в панели. Это одиночное контрольное наблюдение, не сравнение производительности с предыдущим запросом.

Временные локальные NATS/PostgreSQL с вымышленными fixtures остановлены. Основной пакет перезагружен пользователем и проверен; новых файлов для повторной перезагрузки после этой проверки не добавлялось.

Ограничения

  • Кросс-доменные iframe остаются отдельной задачей; доступные iframe проверены.
  • Тайм-аут/отмена прекращают ожидание и следующие шаги Agent; уже выполняющийся произвольный JS и сделанные изменения не откатываются автоматически.
  • Обновление Chrome и новые разрешения выполнил пользователь. Основной ID и путь установки сохранены.
  • Автоматические и живые проверки указаны раздельно; запуск каждой из 70 проверок в реальном Chrome не заявляется.

Исходник

Скачать Markdown · К материалам исследования