Действующий публичный мониторинг

Codex Monitor

Что где лежит в коде, как запускается и что проверялось.
Версия 72fb980fa7d1 · подготовлено 8 сентября 2026

О проекте

Нужно наблюдать работу Codex на отдельном поддомене без вмешательства в запросы модели. Мониторинг должен переживать недоступность NATS, восстанавливать поток по cursor и отделять закрытые сессии владельца от явно опубликованных трансляций.

Codex Monitor показывает реальные события, которые Codex Gateway копирует из HTTP, SSE и WebSocket потока. Неблокирующий outbox отправляет очищенные события в NATS JetStream, projector сохраняет проекцию в SQLite, а Bun/Vue выводит сессии, reasoning, инструменты, usage, ошибки и публичные эфиры.

Что отличает реализацию

События приходят из реального proxy, а не из симулятора интерфейса. eventId и sequence обеспечивают идемпотентную проекцию, durable consumer подтверждает сообщение после записи, usage учитывается по попыткам без повторного сложения snapshots. Временная ссылка немедленно отзывается; старый YouTrack-контур сохранён как отдельная часть системы.

Состав прикладного кода

Vue / TypeScript 42%Node.js / YouTrack worker 27.8%Bun / NATS monitor API 16.5%SQLite / TypeScript projector 9.6%Bun / HTTP server 2.8%TypeScript event contracts 1.3%

Доли по размеру прикладных файлов Git в закреплённой версии. Каждый файл отнесён к одной подсистеме по правилам scripts/generate-stack-share.mjs; тесты, ассеты, зависимости и generated-файлы исключены. Округление — до 0,1%. Это состав кода, а не уровень владения технологиями.

  • Источник данных — только Codex Gateway; локальные файлы Codex Desktop и App Server не читаются.
  • Зашифрованный reasoning не восстанавливается, скрытые system/developer инструкции не сохраняются, отсутствие трафика означает только отсутствие новых событий.
  • Иерархия агентов показывается лишь при явных идентификаторах в proxy-трафике; система не запускает, не останавливает и не перенастраивает модели.
  • Автоматическая очистка покрывает известные секреты, но владелец всё равно проверяет полный предварительный просмотр перед публикацией.

Скриншоты, схемы и исходные материалы сохранены на языке оригинала; подписи и описание переведены.

Архитектура и схемы

  • Proxy копирует события после очистки и пишет их в ограниченный outbox; недоступность NATS не останавливает запрос Codex.
  • JetStream consumer подтверждает событие после транзакционной записи проекции; eventId и sequence защищают историю от повторной доставки.
  • Usage хранится по попыткам и revision snapshot: cached входит во входные, reasoning входит в выходные, старые агрегаты показаны отдельно.
  • По умолчанию заголовок берётся из первого пользовательского сообщения. Ручное название в Codex Monitor имеет приоритет; имя чата в Codex не изменяется.
  • Публичная ссылка содержит только разрешённую историю выбранной сессии, действует до семи дней и перестаёт работать сразу после отзыва.
  • Прежний YouTrack/NATS worker сохранён отдельным контуром и не смешан с пассивным мониторингом Codex.
  • Монитор и YouTrack gateway используют NATS напрямую. Synadia Agents SDK, discovery и универсальный prompt bridge удалены; очередь заданий и результатов сохранена.
Поток наблюдаемых событий Codex
Поток наблюдаемых событий Codex · Mermaid ↓
Публикация и отзыв выбранной сессии
Публикация и отзыв выбранной сессии · Mermaid ↓

Code-map: файлы и связи

Карта привязана к версии 72fb980fa7d1. В таблице — экран или API, связанный модуль и данные.

ФункцияЭкран / APIМодульДанные / проверка
Копия потокаCodex Gatewaydocker/monitor/proxy.rb; observer.rbHTTP/SSE/WS, split UTF-8, gzip, limits; observer tests
ДоставкаCODEX_TRACEserver/monitor/ingest.ts; setup.tsoutbox, PubAck, stream 1 GiB / 24 h
Проекция/api/v1/monitorserver/monitor/store.ts; service.tsevents, sessions, attempts, usage; idempotence tests
Лента/console/MonitorApp.vue; MonitorTimelineItem.vuecursor, long-text pages, folded service context
Публикация/live/:tokenservice.ts; public routesshare token hash, range, TTL, revoke and audit
YouTrack/console/youtrackyoutrack-gateway.js; codex-worker.jsотдельный прежний JetStream-контур

Как работать с картой

  1. Перед изменением найти функцию и пройти связи до API, состояния и хранилища.
  2. Проверить входы, ошибки, повторные события и зависимые сценарии.
  3. После изменения обновить карту и затронутые схемы вместе с кодом.
  4. Выполнить связанные проверки и привязать новые материалы к версии исходников.

Сценарии и API

  1. В консоли выбрать сессию, задать понятное название и просмотреть поручение, reasoning, сообщения и инструменты в хронологическом порядке.
  2. Открыть трафик и сопоставить request, attempt, transport, длительность и очищенное событие по идентификаторам корреляции.
  3. Сверить usage по попыткам и проверить состояние proxy, NATS, projector, cursor и заполнение outbox.
  4. Проверить разрешённый диапазон истории, опубликовать временную ссылку, открыть её как посетитель и немедленно отозвать.

Проверка опубликованной версии

CI: Proxy monitoring checks ↗ · 9da19ee0 · исторический запуск другой версии · 2026-09-07T22:55:40Z

CI: Native NATS / Codex Monitor checks ↗ · 72fb980f · версия этого демо · 2026-09-08

  • CI: Ruby observer tests, Bun projector tests, TypeScript checks и production-сборка Vue для SHA 9da19ee.
  • На VPS проверены реальные SSE и WebSocket, reasoning и ответы, точный прирост usage, восстановление после refresh и перезапуска projector.
  • Десять одновременных публичных WebSocket-зрителей получили 100 обновлений; p95 доставки составил 172 мс, отзыв десяти соединений — 83 мс.
  • Проверены очистка фрагментированных секретов, изоляция закрытых сессий, безопасный текст Markdown/JSON, desktop и mobile без horizontal overflow.

Эти проверки относятся к указанной версии. Коммерческие показатели и качество моделей на независимой выборке здесь не измерялись.

Измерения

Память контейнеров: три снимка без внешней обработки
Память контейнеров: три снимка без внешней обработки · Исходные данные ↓
  • В реальном нагрузочном снимке p50 доставки события составил 128 мс, p95 — 172 мс; время ответа модели в этот замер не входит.
  • Ledger одной проверочной сессии вырос на 272 токена и сохранил тот же итог после перезапуска projector.
  • Во время проверки outbox был пуст, NATS не имел pending и ackPending, OOM-событий не обнаружено.

Запуск и эксплуатация

Мониторинг включается независимо для разрешённых proxy-пользователей. Обычная raw-трассировка остаётся выключенной.

Текстовая история хранится 24 часа, usage ledger — 90 дней, stream ограничен 1 GiB, файловый outbox — 256 MiB.

Перед изменением нужно пройти связь экран → API → SQLite projection → JetStream event → proxy observer, обновить контракт и проверить повторную доставку.

Для отключения достаточно MONITOR_ENABLED=false и пересоздания proxy; данные SQLite, JetStream и outbox при откате не удаляются.

Текущая панель называется Codex Monitor. На /console/youtrack доступно состояние gateway, NATS и очередей. Архивные скриншоты могут показывать прежнее оформление. Лицензионные сведения о производных стилях сохранены в репозитории.

Стек

Vue 3 / TypeScriptЗакрытая консоль, публичный эфир, timeline и восстановление интерфейса по cursor.
BunЗакрытый и публичный HTTP/WebSocket API, preview, публикация и отзыв ссылок.
NATS JetStreamПоток CODEX_TRACE, лимиты хранения, durable delivery и раздельные credentials.
SQLite WALИдемпотентная проекция событий, попыток, usage, названий и публикаций.
Ruby Codex proxyНаблюдение HTTP/SSE/WebSocket, очистка и неблокирующий файловый outbox.

Материалы и исходники

Интеграция с Codex Gateway и выпуск мониторинга: 7–8 сентября 2026.

Архив материалов на языке оригинала.