# Codex Gateway

Авторский проект · доступ владельца

Codex Gateway — Ruby proxy перед модельным API. Он управляет несколькими конфигурациями доступа, выборочно инспектирует только Codex-трафик, проксирует HTTP, SSE и WebSocket и считает usage по пользователям. Копия очищенных событий уходит в ограниченный outbox и NATS, не блокируя основной запрос Codex.

Версия: 5a8e7e332b818df4482e4554fa724f76853741d0

Разработка и эксплуатация: 2026. Снимки подготовлены 8 сентября 2026.

[Кейс](https://portfolio.komaroff-dev.ru/projects/codex/) · [Документация](https://portfolio.komaroff-dev.ru/projects/codex/docs/)

## Задача

Нужно было дать нескольким Codex-клиентам управляемый доступ через один шлюз, видеть сроки конфигураций, ошибки и расход токенов и при этом не превращать мониторинг в новую точку отказа.

Владелец управляет доступом и статистикой в закрытом интерфейсе; Codex-клиенты используют отдельные proxy credentials; Codex Monitor получает только очищенную копию событий.

## Что сделано

- Реализовал Ruby proxy и маршрутизацию CONNECT с выборочной TLS-инспекцией доменов Codex.
- Добавил HTTP, SSE и WebSocket transport, потоковый разбор usage и восстановление соединений.
- Связал конфигурации доступа, proxy-пользователей, лимиты, статистику и административный интерфейс.
- Добавил неблокирующий outbox и отправку очищенных событий в NATS для Codex Monitor.

## Решения

- TLS-инспекция включается только для разрешённых Codex-hostnames; остальной CONNECT остаётся обычным туннелем.
- Основной ответ клиенту не ждёт NATS: при недоступности мониторинга событие попадает в ограниченный outbox, а Codex продолжает работу.
- SSE и WebSocket разбираются по мере поступления с учётом разделённых сообщений, UTF-8 и reconnect.
- Секретные заголовки и токены исключаются до формирования события мониторинга.

## Сценарии

- Открыть закрытую панель и проверить активную конфигурацию, сроки и состояние обновления.
- Сопоставить usage proxy-пользователя с агрегатами за 24 часа и 7 дней.
- Проверить прохождение HTTP, SSE и WebSocket и состояние Ruby proxy.
- Открыть документацию proxy и границы TLS-инспекции.

## Проверки

- Проверка health, HTTP и потоковых transport с сохранением ответа клиенту.
- Проверка очистки секретных заголовков и переполнения ограниченного outbox.
- Browser QA dashboard, sessions, stats and mobile layout after DOM-only masking.

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

- Рабочий Gateway обслуживает Codex-клиентов и показывает агрегированный usage по отдельным proxy-пользователям.
- Восемь снимков получены с действующего экземпляра; серверные данные не изменялись, ошибок страницы не обнаружено.

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

- Административный интерфейс закрыт Basic Auth; публичная страница содержит только обезличенные снимки.
- Снимки показывают реальные агрегаты, но аккаунты и конфигурационные значения заменены в DOM перед кадром.
- Tracing в самом Gateway не является источником публичного эфира: живые события передаются в отдельный Codex Monitor-контур.

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

Gateway запускается как отдельный контейнер на loopback, а Nginx публикует только закрытый административный интерфейс.

Недоступность NATS не останавливает основной proxy-поток. Отключение сбора через MONITOR_ENABLED=false требует пересоздания proxy и краткого переподключения активных соединений.

## Снимки интерфейса

- [Панель Gateway показывает активную конфигурацию, сроки токенов и агрегированный расход по пользователям. Видимые аккаунты заменены только в DOM перед снимком.](https://portfolio.komaroff-dev.ru/evidence/codex/full/01-dashboard.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Раздел сессий отделяет трассировку proxy-запросов от общей статистики и явно показывает отсутствие сохранённых trace-записей.](https://portfolio.komaroff-dev.ru/evidence/codex/full/02-sessions.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Служебная статистика показывает состояние Ruby proxy, transport counters и ошибки без доступа к содержимому секретных заголовков.](https://portfolio.komaroff-dev.ru/evidence/codex/full/03-service-stats.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Встроенная документация описывает границу выборочной TLS-инспекции и прохождение HTTP, SSE и WebSocket.](https://portfolio.komaroff-dev.ru/evidence/codex/full/04-proxy-docs.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Карточка конфигурации показывает жизненный цикл доступа и диагностические состояния; значения аккаунта и конфигурации подменены на снимке.](https://portfolio.komaroff-dev.ru/evidence/codex/full/05-config.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Карточка proxy-пользователя связывает запросы, расход токенов и состояние доступа без раскрытия ключа пользователя.](https://portfolio.komaroff-dev.ru/evidence/codex/full/06-user-usage.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Мобильная панель сохраняет графики, статусы конфигураций и переключатели состава токенов в одной вертикальной колонке.](https://portfolio.komaroff-dev.ru/evidence/codex/full/07-dashboard-mobile.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0

- [Мобильный раздел сессий сохраняет навигацию и явное пустое состояние трассировки.](https://portfolio.komaroff-dev.ru/evidence/codex/full/08-sessions-mobile.png) · 2026-09-08T06:40:00Z · версия 5a8e7e332b818df4482e4554fa724f76853741d0
