О проекте
Нужно наблюдать работу 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-контур сохранён как отдельная часть системы.
Состав прикладного кода
Доли по размеру прикладных файлов 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 удалены; очередь заданий и результатов сохранена.
Code-map: файлы и связи
Карта привязана к версии 72fb980fa7d1. В таблице — экран или API, связанный модуль и данные.
| Функция | Экран / API | Модуль | Данные / проверка |
|---|---|---|---|
| Копия потока | Codex Gateway | docker/monitor/proxy.rb; observer.rb | HTTP/SSE/WS, split UTF-8, gzip, limits; observer tests |
| Доставка | CODEX_TRACE | server/monitor/ingest.ts; setup.ts | outbox, PubAck, stream 1 GiB / 24 h |
| Проекция | /api/v1/monitor | server/monitor/store.ts; service.ts | events, sessions, attempts, usage; idempotence tests |
| Лента | /console/ | MonitorApp.vue; MonitorTimelineItem.vue | cursor, long-text pages, folded service context |
| Публикация | /live/:token | service.ts; public routes | share token hash, range, TTL, revoke and audit |
| YouTrack | /console/youtrack | youtrack-gateway.js; codex-worker.js | отдельный прежний JetStream-контур |
Как работать с картой
- Перед изменением найти функцию и пройти связи до API, состояния и хранилища.
- Проверить входы, ошибки, повторные события и зависимые сценарии.
- После изменения обновить карту и затронутые схемы вместе с кодом.
- Выполнить связанные проверки и привязать новые материалы к версии исходников.
Сценарии и API
- В консоли выбрать сессию, задать понятное название и просмотреть поручение, reasoning, сообщения и инструменты в хронологическом порядке.
- Открыть трафик и сопоставить request, attempt, transport, длительность и очищенное событие по идентификаторам корреляции.
- Сверить usage по попыткам и проверить состояние proxy, NATS, projector, cursor и заполнение outbox.
- Проверить разрешённый диапазон истории, опубликовать временную ссылку, открыть её как посетитель и немедленно отозвать.
Проверка опубликованной версии
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.
Архив материалов на языке оригинала.