Действующий публичный мониторинг
Codex Monitor
Codex Monitor показывает реальные события, которые Codex Gateway копирует из HTTP, SSE и WebSocket потока. Неблокирующий outbox отправляет очищенные события в NATS JetStream, projector сохраняет проекцию в SQLite, а Bun/Vue выводит сессии, reasoning, инструменты, usage, ошибки и публичные эфиры.
Архивный кадр предыдущей версии: Закрытая консоль владельца показывает реальные сессии Codex, активный запрос, доступный текст reasoning, ответы и расход токенов из proxy.
01 / Задача
Живой поток сессий и инструментов Codex
Нужно наблюдать работу Codex на отдельном поддомене без вмешательства в запросы модели. Мониторинг должен переживать недоступность NATS, восстанавливать поток по cursor и отделять закрытые сессии владельца от явно опубликованных трансляций.
Сценарий: Владелец наблюдает работу Codex, а посетитель видит только явно опубликованные сессии в режиме чтения.
Что делал
- Добавил наблюдение HTTP, SSE и WebSocket внутри Ruby proxy без изменения основного relay-потока.
- Реализовал очистку, ограниченный файловый outbox, отдельный JetStream stream и durable projector в SQLite WAL.
- Расширил Vue интерфейс сессиями, лентой reasoning и инструментов, трафиком, usage, состоянием доставки и сравнением.
- Добавил ручные названия чатов, сворачиваемый служебный контекст, предварительный просмотр, временные ссылки и немедленный отзыв эфира.
02 / Реализация
Что отличает реализацию
События приходят из реального proxy, а не из симулятора интерфейса. eventId и sequence обеспечивают идемпотентную проекцию, durable consumer подтверждает сообщение после записи, usage учитывается по попыткам без повторного сложения snapshots. Временная ссылка немедленно отзывается; старый YouTrack-контур сохранён как отдельная часть системы.
Скриншоты
Экраны, формы, ошибкиСкриншоты, схемы и исходные материалы сохранены на языке оригинала; подписи и описание переведены.
03 / Технологии
Что использовано
Доли по размеру прикладных файлов Git в закреплённой версии. Каждый файл отнесён к одной подсистеме по правилам scripts/generate-stack-share.mjs; тесты, ассеты, зависимости и generated-файлы исключены. Округление — до 0,1%. Это состав кода, а не уровень владения технологиями.
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.
04 / Решения
Как устроен проект
- 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 удалены; очередь заданий и результатов сохранена.
05 / Проверка
Сценарии демки
- В консоли выбрать сессию, задать понятное название и просмотреть поручение, reasoning, сообщения и инструменты в хронологическом порядке.
- Открыть трафик и сопоставить request, attempt, transport, длительность и очищенное событие по идентификаторам корреляции.
- Сверить usage по попыткам и проверить состояние proxy, NATS, projector, cursor и заполнение outbox.
- Проверить разрешённый диапазон истории, опубликовать временную ссылку, открыть её как посетитель и немедленно отозвать.
Результаты проверок
- В реальном нагрузочном снимке p50 доставки события составил 128 мс, p95 — 172 мс; время ответа модели в этот замер не входит.
- Ledger одной проверочной сессии вырос на 272 токена и сохранил тот же итог после перезапуска projector.
- Во время проверки outbox был пуст, NATS не имел pending и ackPending, OOM-событий не обнаружено.
Ограничения
- Источник данных — только Codex Gateway; локальные файлы Codex Desktop и App Server не читаются.
- Зашифрованный reasoning не восстанавливается, скрытые system/developer инструкции не сохраняются, отсутствие трафика означает только отсутствие новых событий.
- Иерархия агентов показывается лишь при явных идентификаторах в proxy-трафике; система не запускает, не останавливает и не перенастраивает модели.
- Автоматическая очистка покрывает известные секреты, но владелец всё равно проверяет полный предварительный просмотр перед публикацией.
Технические заметки
Модули, API, схема данных, запуск и результаты проверок.
Документация →Материалы ↓