# Codex Monitor

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

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

Версия исходников: 72fb980fa7d15d106326e0665c662362d0725699

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

## Задача

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

Владелец наблюдает работу Codex, а посетитель видит только явно опубликованные сессии в режиме чтения.

## Выполнено

- Добавил наблюдение HTTP, SSE и WebSocket внутри Ruby proxy без изменения основного relay-потока.
- Реализовал очистку, ограниченный файловый outbox, отдельный JetStream stream и durable projector в SQLite WAL.
- Расширил 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%. Это состав кода, а не уровень владения технологиями.

## Стек

| Технология | Роль |
| --- | --- |
| 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. |

## Архитектура

- 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](https://komaroff-dev.ru/evidence/agents/live/diagrams/event-flow.svg)

[Mermaid](https://komaroff-dev.ru/evidence/agents/live/diagrams/event-flow.mmd)

### Публикация и отзыв выбранной сессии

![Публикация и отзыв выбранной сессии](https://komaroff-dev.ru/evidence/agents/live/diagrams/publication.svg)

[Mermaid](https://komaroff-dev.ru/evidence/agents/live/diagrams/publication.mmd)

## Code-map

| Функция | Экран / 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 → состояние → хранилище. Проверить входы, ошибки и повторные действия. Обновить карту и схемы вместе с кодом, выполнить связанные проверки и привязать материалы к версии.

## Сценарии

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

## Проверки

- 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.

[Proxy monitoring checks](https://github.com/komaroffsergei/nats-synadia-dev/actions/runs/34168312212) — 9da19ee0b1111fa82ca11cebfbd6996864690555, 2026-09-07T22:55:40Z; исторический запуск.

[Native NATS / Codex Monitor checks](https://github.com/komaroffsergei/nats-synadia-dev/actions/runs/34220817632) — 72fb980fa7d15d106326e0665c662362d0725699, 2026-09-08; версия демо.

## Результаты

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

![Память контейнеров: три снимка без внешней обработки](https://komaroff-dev.ru/evidence/agents/revision-d5b786da/metrics/resources.svg)

[Данные](https://komaroff-dev.ru/evidence/agents/revision-d5b786da/metrics/resources.json)

## Ограничения

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

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

Мониторинг включается независимо для разрешённых 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 и очередей. Архивные скриншоты могут показывать прежнее оформление. Лицензионные сведения о производных стилях сохранены в репозитории.

## Скриншоты

[Архивный кадр предыдущей версии: Закрытая консоль владельца показывает реальные сессии Codex, активный запрос, доступный текст reasoning, ответы и расход токенов из proxy.](https://komaroff-dev.ru/evidence/agents/live/full/01-owner-console.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Проверочный сценарий вкладки «Трафик»: попытки запросов, длительность, transport и очищенный JSON события связаны общими идентификаторами.](https://komaroff-dev.ru/evidence/agents/live/full/02-traffic-inspector.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Проверочный сценарий учёта usage разделяет входные, кэшированные, выходные и reasoning-токены и отмечает неполную историю.](https://komaroff-dev.ru/evidence/agents/live/full/03-usage-ledger.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Экран подключения показывает состояние proxy, NATS, projector, cursor, очередь outbox и обнаруженный пропуск доставки.](https://komaroff-dev.ru/evidence/agents/live/full/04-delivery-health.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Предпросмотр публикации раскрывает разрешённый текст выбранной сессии, начало истории и срок ссылки до создания публичного эфира.](https://komaroff-dev.ru/evidence/agents/live/full/05-publication-preview.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Публичный список после отзыва проверочных ссылок не раскрывает закрытые рабочие сессии и служебные идентификаторы владельца.](https://komaroff-dev.ru/evidence/agents/live/full/06-public-index.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Опубликованная проверочная сессия отображает реальный ответ модели, reasoning и сообщения в режиме только для чтения без управляющих действий.](https://komaroff-dev.ru/evidence/agents/live/full/07-public-session.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Архивный кадр предыдущей версии: Мобильная консоль сохраняет выбор сессии, ленту событий и показатели usage в узком viewport без горизонтальной прокрутки.](https://komaroff-dev.ru/evidence/agents/live/full/08-owner-console-mobile.png) — 2026-09-07, abbb6e4328f545dc7a6867bb58efb57b313a931a.

[Материалы](https://komaroff-dev.ru/downloads/agents-evidence.zip)
