Перейти к содержимому
OmniRoute source

Traffic Inspector (Русский)

Возможность mitmweb Charles Fiddler OmniRoute Traffic Inspector
Веб-интерфейс ✓ ✗ ✗ ✓
Открытый исходный код ✓ ✗ частично ✓
Учитывает агентов (определяет, поступил ли запрос от Antigravity/Copilot/и т. д.) ✗ ✗ ✗ ✓
Учитывает LLM (распознаёт формат OpenAI/Anthropic/Gemini, токены и модель) ✗ ✗ ✗ ✓
Отображение сопоставления моделей (gemini-3-flash → claude-sonnet-4.7) ✗ ✗ ✗ ✓
Раздельное отображение задержки прокси и вышестоящего сервера частично ✗ ✗ ✓
Интеграция с OmniRoute: маршрутизация, резервные варианты и стоимость ✗ ✗ ✗ ✓
Общесистемная отладка прокси (любое приложение на компьютере) ✓ ✓ ✓ ✓
Захват по пользовательским хостам (перенаправление DNS для отдельных хостов) ✓ ✓ ✓ ✓
Режим переменной окружения HTTP_PROXY ✓ ✓ ✓ ✓
Представление диалога (многоходовые реплики, tool_use/tool_result) ✗ ✗ ✗ ✓
Объединение потока SSE (восстановление из событий с изменениями) ✗ ✗ ✗ ✓
Запись сеансов (именованные сеансы с экспортом в .har/.jsonl) ✗ ✓ ✓ ✓

TrafficBuffer (src/mitm/inspector/buffer.ts) — это общий кольцевой буфер в памяти (по умолчанию 1000 записей, размер настраивается через INSPECTOR_BUFFER_SIZE). Все источники захвата записывают в него данные через push(). Буфер классифицирует каждую запись с помощью kindDetector.ts (определяет, является ли она запросом к LLM), вычисляет contextKey (SHA-256-отпечаток системного промпта) и рассылает данные всем подписчикам WebSocket через globalTrafficBuffer.subscribe(). Панель управления подключается через GET /api/tools/traffic-inspector/ws, при подключении получает снимок состояния, а затем — события new/update/clear.


Traffic Inspector поддерживает 5 одновременных источников захвата. Каждый из них можно включать и отключать независимо. Поле source в каждом InterceptedRequest (src/mitm/inspector/types.ts) содержит одно из следующих значений: "agent-bridge", "custom-host", "http-proxy", "system-proxy" или "tproxy".

Режим 1 — AgentBridge (по умолчанию, всегда включён)

Заголовок раздела «Режим 1 — AgentBridge (по умолчанию, всегда включён)»

Источник: обработчики AgentBridge (src/mitm/handlers/base.ts)
Механизм: каждый вызов intercept() в MitmHandlerBase вызывает hookBufferStart() перед перенаправлением и hookBufferUpdate() после завершения. Дополнительная настройка не требуется — режим работает сразу после запуска AgentBridge.
Охват: 9 IDE-агентов, настроенных в AgentBridge
Примечание: поле source в InterceptedRequest = "agent-bridge"

Режим 2 — Пользовательские хосты (перенаправление DNS)

Заголовок раздела «Режим 2 — Пользовательские хосты (перенаправление DNS)»

Источник: заданный пользователем список хостов (таблица inspector_custom_hosts)
Механизм: добавление хоста через пользовательский интерфейс добавляет 127.0.0.1 <host> в /etc/hosts (требуется sudo). Существующий MITM-сервер AgentBridge (порт 443) динамически генерирует SNI-сертификат для нового хоста.
Охват: любое приложение, использующее добавленный хост; изменять конфигурацию приложения не требуется
Примечание: source = "custom-host"

Примеры использования:

  • Мониторинг api.openai.com из скриптов Python
  • Отладка my-internal-llm.company.com
  • Захват трафика с мобильных устройств в той же сети (посредством ARP-спуфинга — для опытных пользователей)

Источник: приложения, использующие переменные окружения HTTP_PROXY/HTTPS_PROXY
Механизм: дополнительный слушатель на порту 8080 (src/mitm/inspector/httpProxyServer.ts), работающий как стандартный явный HTTP/HTTPS-прокси. Принимает туннели CONNECT (HTTPS) и прямые HTTP-запросы.
Охват: любое приложение, учитывающее переменную окружения HTTP_PROXY; изменение DNS и sudo не требуются
Примечание: source = "http-proxy"

Окно терминала
# Быстрый захват для одной команды:
HTTPS_PROXY=http://127.0.0.1:8080 curl https://api.openai.com/v1/models
# Постоянный захват в рамках сеанса оболочки:
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080

Ограничение TLS: для HTTPS-туннелей CONNECT по умолчанию захватываются только метаданные (хост, порт, временные характеристики) — тело TLS не расшифровывается. Для полного анализа тела включите переключатель «Расшифровывать HTTPS в режиме прокси» (необходимо явное включение и доверие к сертификату AgentBridge).

Конфликт портов: если порт 8080 занят, AgentBridge возвращает код 409 со структурированной ошибкой. Измените порт с помощью переменной окружения INSPECTOR_HTTP_PROXY_PORT.

Режим 4 — общесистемный прокси (для опытных пользователей, с явным включением)

Заголовок раздела «Режим 4 — общесистемный прокси (для опытных пользователей, с явным включением)»

Источник: настройки прокси на уровне ОС (применяются ко всем приложениям на компьютере)
Механизм: использует API операционной системы для перенаправления всего HTTP/HTTPS-трафика через слушатель HTTP_PROXY:

  • macOS: networksetup -setwebproxy / -setsecurewebproxy
  • Linux: gsettings set org.gnome.system.proxy + /etc/environment
  • Windows: netsh winhttp set proxy 127.0.0.1:8080 Охват: каждое приложение на компьютере, учитывающее системные настройки прокси
    Примечание: source = "system-proxy"

Механизмы безопасности:

  • Таймер автоматического отключения (по умолчанию 30 минут, настраивается через INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES)
  • Предыдущее состояние системного прокси сохраняется в БД и восстанавливается при откате
  • Если пользователь покидает страницу при активном режиме, на панели управления отображается запрос «Восстановление системного прокси»
  • В пользовательском интерфейсе отображается значок ⚠ Для опытных пользователей и флажок явного подтверждения

Режим 5 — прозрачная расшифровка TPROXY (Linux, root, с явным включением)

Заголовок раздела «Режим 5 — прозрачная расшифровка TPROXY (Linux, root, с явным включением)»

Источник: TPROXY ядра + маршрутизация на основе политик (src/mitm/tproxy/)
Механизм: новые локальные исходящие TCP-соединения к целевому порту (по умолчанию 443) помечаются в mangle OUTPUT, правило ip rule перенаправляет отмеченные пакеты на локальную доставку, а цель TPROXY в mangle PREROUTING передаёт их прозрачному слушателю (IP_TRANSPARENT) на порту по умолчанию 8443. Слушатель завершает TLS-соединение с помощью конечного сертификата, который динамический центр сертификации выдаёт по запросу для каждого имени хоста SNI, захватывает расшифрованный обмен и перенаправляет запрос к исходному назначению с повторным шифрованием.
Охват: произвольные хосты назначения на целевом порту — без подмены /etc/hosts, переменной окружения HTTP_PROXY и изменения общесистемного прокси. Перехватываемому процессу не требуется изменение конфигурации, но он должен доверять динамическому центру сертификации.
Примечание: source = "tproxy"

Требования: только Linux (IP_TRANSPARENT доступен исключительно в Linux), возможность CAP_NET_ADMIN (root) и нативное дополнение N-API, которое необходимо собрать с помощью набора инструментов C (npm run build:native:tproxy). Если эти компоненты недоступны, переключатель на панели управления отключается и отображает подсказку «Для расшифровки TPROXY требуются Linux, root и нативное дополнение». Правила брандмауэра применяются и отменяются транзакционно (сбой никогда не оставляет правило mangle) и очищаются при перезагрузке. Механизм предотвращения циклов на основе SO_MARK не позволяет повторно перехватывать собственный пересылаемый трафик прокси с повторным шифрованием.

Это крупная подсистема с отдельным руководством для операторов — полный набор правил брандмауэра, динамический центр сертификации для каждого SNI и установщик хранилища доверия, локальный маршрут, сведения о предотвращении циклов и схему конфигурации см. в docs/security/MITM-TPROXY-DECRYPT.md (git; не компилируется в /docs). Переключатель управляется через GET / POST / DELETE /api/tools/agent-bridge/tproxy (обратите внимание: маршрут находится под префиксом AgentBridge, а не Traffic Inspector).

Режим Настройка Sudo? Охват Примечания
1. AgentBridge Автоматическая Один раз (сертификат+hosts) 9 IDE-агентов Включено по умолчанию
2. Пользовательские хосты Ввод для каждого хоста Да (файл hosts) Любое приложение, использующее этот хост Сохраняется в БД
3. HTTP_PROXY export HTTPS_PROXY=... Нет Приложения, учитывающие переменные окружения Порт 8080, по умолчанию без расшифровки TLS
4. Системный Переключатель + подтверждение Да Все приложения на компьютере Автоматическое отключение через 30 мин
5. Расшифровка TPROXY Переключатель (Linux + нативное дополнение) Да (root + установка CA) Любой хост на целевом порту Расшифровывает произвольные хосты; по умолчанию отключено — см. docs/security/MITM-TPROXY-DECRYPT.md (git; не включается в сборку /docs)

┌─ Инспектор трафика ────────────────────────────────────────────────────┐
│ ┌─ Панель источников захвата ──────────────────────────────────────┐ │
│ │ [✓ AgentBridge] [✓ Пользовательские хосты (3)] [○ HTTP_PROXY] │ │
│ │ [○ Системный] │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ ┌─ Панель фильтров/управления ────────────────────────────────────┐ │
│ │ Профиль: (●) Только LLM (○) Пользовательский (○) Все │ │
│ │ [⎉ Пауза] [🗑 Очистить] [⬇ .har] [● ЗАПИСЬ сеанса] ● в эфире 482/1k│ │
│ └─────────────────────────────────────────────────────────────────────┘ │
├══◀▶══════════════════════════════╬══════════════════════════════════════╤╡
│ СПИСОК ЗАПРОСОВ (изменяемый) ║ ПАНЕЛЬ СВЕДЕНИЙ ▲ │
│ ────────────────────────────── │ ║ [Диалог][Заголовки][Запрос] │ │
│ ▎ 14:32 POST 200 12k AG openai ║ [Ответ][Время][LLM][Статистика] │ │
│ ▎ 14:31 POST 200 8k CP openai ║ ▼ │
│ ▎ 14:31 POST 503 ⚠ KR ... ║ │
│ ▎ 14:30 GET 200 3k 🌐 свой ║ │
└══════════════════════════════════╝══════════════════════════════════════╝
  • Виртуализированный (useVirtualList + ResizeObserver): обрабатывает 1000 элементов без зависаний
  • Автопрокрутка с переключателем для приостановки во время просмотра
  • Цветовая кодировка статуса: зелёный (2xx), жёлтый (3xx), красный (4xx/5xx), серый (выполняется)
  • Эмодзи агента: 🔵 Antigravity, 🟢 Copilot, 🟠 Kiro, 🟣 Codex, 🔷 Cursor, 🟤 Zed, 🟡 Claude Code, ⚫ Open Code, 🌐 пользовательский хост
  • Цветная полоса контекста: левая граница шириной 1px, окрашенная на основе contextKey (SHA-256 системного промпта), — визуально группирует связанные диалоги
  • Ленивая загрузка тела: только тело выбранного запроса материализуется на вкладках панели сведений (это позволяет избежать рендеринга 1000 тел размером по 1 МБ)
Вкладка Содержимое Примечания
Диалог Реплики многоходового диалога (system/user/assistant + tool_use/tool_result) Нормализуются из формата любого провайдера; отображается только при detectedKind === "llm"
Заголовки Таблицы заголовков запроса и ответа Конфиденциальные заголовки (Authorization, Cookie, api-key) по умолчанию маскируются; переключатель «Показать секреты»
Запрос Исходное тело, древовидное представление JSON, значок поля модели Форматированный JSON или исходный текст
Ответ Исходное тело или список событий SSE; переключатель «Исходный ↔ Объединённый» Средство объединения SSE восстанавливает итоговое сообщение из событий с приращениями
Время Временная диаграмма: накладные расходы прокси и задержка вышестоящего сервера Общее время, TTFB и размер
Сведения LLM Провайдер, модель, число сообщений, входные/выходные токены, оценка стоимости, сопоставленная цель Отображается только для запросов LLM
Статистика Recharts: временная шкала задержки, столбчатая диаграмма токенов, диаграмма рассеяния вызовов инструментов Отображается только при загрузке записанного сеанса

3.4 Элементы управления панели инструментов

Заголовок раздела «3.4 Элементы управления панели инструментов»
Элемент управления Действие
⎉ Пауза Останавливает отображение новых запросов; на значке накапливается «X новых»
🗑 Очистить Очищает список в интерфейсе (буфер сервера не затрагивается)
⬇ Экспорт .har Скачивает текущий отфильтрованный список в виде файла HAR
● Записать сеанс Запускает именованный сеанс записи
Выбор профиля Только LLM / Пользовательские хосты / Все
Фильтр хостов Поиск подстроки в поле host
Фильтр агентов Выпадающий список: Все / по отдельным агентам
Фильтр статуса Все / 2xx / 3xx / 4xx / 5xx / ошибка
Фильтр источника Все / agent-bridge / custom-host / http-proxy / system-proxy / tproxy
Фильтр в эфире Показывать только выполняющиеся (открытые) запросы — переключатель liveOnly (см. §4.6)
  • Список и панель сведений разделены перетаскиваемым разделителем
  • Ширина списка: минимум 280px, максимум 720px, сохраняется в localStorage (inspector.listWidth)
  • Можно свернуть до панели шириной 48px (только значки); щелчок по строке на свёрнутой панели разворачивает её

Классифицирует каждый запрос как "llm", "app" или "unknown" с использованием 4 сигналов:

  1. Реестр хостов — около 18 известных имён хостов API LLM (OpenAI, Anthropic, Gemini, Groq, Mistral, Together, Fireworks, Cohere, Perplexity, Hugging Face, OpenRouter, xAI, Moonshot и т. д.)
  2. Шаблоны путей — /v1/chat/completions, /v1/messages, /generateContent, /v1/responses и т. д.
  3. Структура тела — обнаруживает поля messages[] (OpenAI/Claude), contents[] (Gemini), prompt, input
  4. Подсказки в user-agent — codex, claude, gemini, antigravity, kiro, copilot, cursor в строке UA

Пользовательские хосты, добавленные через режим 2, наследуют свой kind из данных формы (по умолчанию — "custom").

Независимая реализация с нуля. Разбор событий соответствует алгоритму server-sent events WHATWG, а реконструкция — общедоступным потоковым схемам OpenAI, Anthropic и Gemini.

Реконструирует итоговое сообщение ассистента из необработанных дельта-событий SSE:

  • Anthropic: накапливает content_block_delta по индексу; обрабатывает text_delta, input_json_delta (вызовы инструментов), thinking_delta
  • OpenAI: накапливает варианты Chat Completions/вызовы инструментов и выходные элементы Responses API по индексу
  • Gemini: накапливает candidates[i].content.parts
  • Неизвестный формат: возвращает необработанные события без изменений

На вкладке Response отображается переключатель: «Необработанные события ↔ Объединённый результат».

4.3 Нормализатор диалогов (src/mitm/inspector/conversationNormalizer.ts)

Заголовок раздела «4.3 Нормализатор диалогов (src/mitm/inspector/conversationNormalizer.ts)»

Независимая реализация с нуля. Нормализация определяется локальными контрактами чёрного ящика и общедоступными схемами сообщений OpenAI, Anthropic и Gemini; исходный код сторонних реализаций не используется.

Преобразует форматы сообщений OpenAI, Anthropic и Gemini в единый NormalizedConversation перед отображением:

interface NormalizedConversation {
request: NormalizedTurn[]; // сообщения / содержимое / запрос из тела запроса
response: NormalizedTurn[]; // ответ ассистента (объединённый через sseMerger)
contextKey: string | null; // отпечаток системного промпта SHA-256
}

Типы блоков: text, tool_use, tool_result. Вкладка Conversation использует эту структуру независимо от провайдера.

4.4 Цветовая маркировка ключа контекста (src/mitm/inspector/contextKey.ts)

Заголовок раздела «4.4 Цветовая маркировка ключа контекста (src/mitm/inspector/contextKey.ts)»
  • Вычисляет SHA-256 системного промпта (первого сообщения role:system, поля system или systemInstruction Gemini)
  • Возвращает 12-символьный шестнадцатеричный префикс ("a3f9c2...")
  • Фронтенд сопоставляет ключу детерминированный цвет HSL для полосы у левой границы
  • Фильтр «тот же контекст»: щелчок по метке ctx #a3f добавляет фильтр, отображающий только запросы с тем же отпечатком

Это позволяет легко визуально различать разные «персоны» или задачи, выполняемые в одном сеансе агента.

Для запросов LLM вкладка LLM Details извлекает:

interface LlmMetadata {
provider: string | null; // "openai" | "anthropic" | "gemini" | ...
apiKind: string | null; // "chat.completions" | "messages" | "embeddings" | ...
model: string | null; // из тела запроса или ответа
messages: number; // количество реплик
tokensIn: number | null; // usage.prompt_tokens / usage.input_tokens
tokensOut: number | null; // usage.completion_tokens / usage.output_tokens
streamed: boolean; // true, если ответ передаётся через SSE
mappedTo: string | null; // заголовок x-omniroute-mapped
costEstimateUsd: number | null; // оценочная стоимость на основе тарифов OmniRoute
}

4.6 Фильтр активных запросов в реальном времени

Заголовок раздела «4.6 Фильтр активных запросов в реальном времени»

Поле status запроса имеет тип number | "in-flight" | "error" — запись добавляется со значением "in-flight" сразу после начала запроса и обновляется на месте при получении ответа (или ошибки). Переключатель «Live» на панели инструментов (liveOnly, ключ i18n trafficInspector.liveOnly) ограничивает список записями, у которых status === "in-flight", позволяя отслеживать открытые соединения в реальном времени.

Фильтр представляет собой чистый предикат на стороне клиента в src/lib/inspector/matchesTrafficFilter.ts:

if (f.liveOnly && req.status !== "in-flight") return false;

Состояние переключателя хранится в useTrafficFilters (хуках панели инспектора) и комбинируется с другими фильтрами (профиль, хост, агент, источник, статус, контекст).

В Linux каждый перехваченный запрос можно связать с локальным процессом-источником. В InterceptedRequest добавляются два необязательных поля:

pid?: number; // идентификатор процесса-источника (только Linux)
processName?: string; // имя процесса-источника (только Linux)

src/mitm/inspector/processAttribution.ts сопоставляет временный порт клиента соединения с PID и именем следующим образом:

  1. Читает /proc/net/tcp и /proc/net/tcp6, чтобы найти inode сокета для порта (parseProcNetTcpForInode — чистый парсер, тестируемый с помощью фикстур).
  2. Сканирует /proc/<pid>/fd/ в поисках символической ссылки на socket:[<inode>].
  3. Читает имя процесса из /proc/<pid>/comm.

Кэш с TTL в 1 секунду ограничивает затраты на сканирование procfs под нагрузкой. Определение выполняется по возможности — любая ошибка приводит к возврату null и никогда не блокирует перехват. В macOS/Windows функция возвращает null (заглушка; поддержка lsof/GetExtendedTcpTable будет добавлена позднее).


  1. Нажмите “● Записать сеанс” на панели инструментов → введите имя (необязательно)
  2. Поток в реальном времени продолжает отображаться как обычно; красный пульсирующий индикатор показывает ◉ ЗАПИСЬ · <имя> · 00:42 · 23 запроса
  3. Нажмите “⏹ Остановить” → снимок сеанса будет сохранён в inspector_sessions + inspector_session_requests

Выпадающий список Сеансы на панели инструментов содержит сохранённые сеансы. При выборе одного из них:

  • Загружается снимок сеанса (зафиксированное состояние)
  • Отображается баннер: Просмотр записанного сеанса "<имя>" — [Вернуться к данным в реальном времени]
  • Становится доступна вкладка «Статистика» с агрегированными данными Recharts

Каждый сеанс можно экспортировать в следующих форматах:

Формат Применение
HAR (HTTP Archive 1.2) Совместим с Chrome DevTools, Charles, Fiddler — импортируется для автономного анализа
JSONL Один InterceptedRequest на строку — совместим с форматом llm-interceptor

Экспорт выполняется через GET /api/tools/traffic-inspector/sessions/{id}/export.har или с помощью кнопки ⬇ в выпадающем списке «Сеансы».


Traffic Inspector показывает весь перехваченный HTTPS-трафик, включая заголовки авторизации и тела запросов. Реализованы следующие меры защиты:

Мера Подробности
LOCAL_ONLY Все маршруты и конечная точка WebSocket доступны только через loopback-интерфейс (ограничение применяется в routeGuard.ts до аутентификации)
Маскирование секретов Линейный сканер maskSecret() скрывает учётные данные Bearer по RFC 6750, ключи с префиксами провайдеров и длинные непрозрачные токены до вызова TrafficBuffer.push()
Ограничение размера тела Тела размером более INSPECTOR_MAX_BODY_KB (по умолчанию 1024 КБ) усекаются с уведомлением "(усечено для повышения производительности)"
Очистка заголовков Имена переводятся в нижний регистр; заголовки фрейминга, hop-by-hop и прокси-аутентификации удаляются; файлы cookie полностью скрываются; значения учётных данных передаются в maskSecret()
CSP На страницах Traffic Inspector применяется строгая политика безопасности содержимого для предотвращения XSS через внедрённые тела ответов
По умолчанию данные не сохраняются TrafficBuffer хранится в памяти и очищается при перезапуске сервера. Сеансы сохраняются только при явном запуске записи
Правило Применение
#12 sanitizeErrorMessage Все HTTP-ответы с ошибками от маршрутов Traffic Inspector проходят очистку
#15 + #17 isLocalOnlyPath() /api/tools/traffic-inspector/ — LOCAL_ONLY + SPAWN_CAPABLE (команды системного прокси)
  • Режим общесистемного прокси влияет на все приложения на компьютере, включая VPN-клиенты и SSO. Всегда используйте его с таймером автоматического отключения. Не используйте на компьютерах с общим доступом.
  • HTTPS через туннель CONNECT: режим 3 (HTTP_PROXY) перехватывает только метаданные туннеля для HTTPS-адресов, если не включён перехват TLS. Это предусмотренное поведение: прозрачный перехват без доверия приложений к сертификату AgentBridge нарушил бы проверку TLS в этих приложениях.
  • Жёстко заданные строки в некоторых компонентах: некоторые компоненты пользовательского интерфейса (F7/F8) содержат небольшое количество жёстко заданных строк, которые ещё не охвачены ключами i18n. Они описаны как известное ограничение в отчёте о пробелах i18n и будут перенесены в ходе последующей доработки. Затронутые строки представляют собой декоративные метки интерфейса, перевод которых не требуется для функционального использования.

Если в потоке в реальном времени отображается «Отключено»:

  1. Убедитесь, что сервер всё ещё работает: GET /api/tools/traffic-inspector/capture-modes
  2. Перезагрузите страницу — WebSocket повторно подключится и получит новый снимок состояния
  3. Если сервер был перезапущен, буфер в памяти был очищен — старые записи утрачены, если они не были сохранены в сеансе

Если режим HTTP_PROXY не запускается:

Окно терминала
lsof -i :8080 # найти процесс

Измените порт:

.env
INSPECTOR_HTTP_PROXY_PORT=8888

Если OmniRoute аварийно завершает работу при активном режиме общесистемного прокси:

macOS:

Окно терминала
networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off

Linux (GNOME):

Окно терминала
gsettings set org.gnome.system.proxy mode 'none'

Windows:

Окно терминала
netsh winhttp reset proxy

При следующей загрузке панель управления также предложит действие «Отключить системный прокси», если обнаружит, что состояние в БД указывает на активный прокси.

Когда количество записей в буфере достигает INSPECTOR_BUFFER_SIZE (по умолчанию 1000), новые записи вытесняют самые старые. Если важные запросы теряются:

  • Увеличьте INSPECTOR_BUFFER_SIZE (например, до 5000) — это повысит расход памяти, но позволит дольше хранить записи
  • Запишите сеанс, чтобы сохранить соответствующий временной интервал в БД

Все маршруты имеют атрибуты LOCAL_ONLY (доступны только через loopback-интерфейс) и SPAWN_CAPABLE (команды системного прокси). См. src/server/authz/routeGuard.ts.

Базовый путь: /api/tools/traffic-inspector/

Метод Путь Описание
GET /requests Список запросов (фильтры: ?profile=llm&host=&agent=&status=&source=&sessionId=)
GET /requests/{id} Подробные сведения об отдельном запросе
DELETE /requests Очистить буфер в памяти
POST /requests/{id}/replay Повторно выполнить тот же запрос через маршрутизатор OmniRoute
PUT /requests/{id}/annotation Сохранить или обновить примечание к запросу
Метод Путь Описание
GET /ws Поток WebSocket в реальном времени. При подключении отправляет snapshot, затем события new/update/clear
Метод Путь Описание
GET /export.har Экспорт текущего отфильтрованного списка в HAR 1.2
Метод Путь Описание
GET /hosts Получить список пользовательских хостов
POST /hosts Добавить хост (автоматически изменяет /etc/hosts)
DELETE /hosts/{host} Удалить хост
PATCH /hosts/{host} Переключить enabled
Метод Путь Описание
GET /capture-modes Состояние режимов AgentBridge / пользовательских хостов / HTTP_PROXY / системного прокси и переключателя tls-intercept
POST /capture-modes/http-proxy Запустить/остановить прослушиватель HTTP_PROXY ({action: "start"|"stop"})
POST /capture-modes/system-proxy Применить/отключить общесистемный прокси ({action: "apply"|"revert"})
POST /capture-modes/tls-intercept Переключить расшифровку тела HTTPS в режиме прокси ({enabled: boolean})

Расшифровка TPROXY (режим перехвата 5) управляется отдельным маршрутом с префиксом AgentBridge — GET / POST / DELETE /api/tools/agent-bridge/tproxy — а не через /api/tools/traffic-inspector/. См. docs/security/MITM-TPROXY-DECRYPT.md (в git; не включается в скомпилированную документацию /docs).

Метод Путь Описание
POST /sessions Начать запись ({name?: string})
PATCH /sessions/{id} Остановить или переименовать ({action: "stop"|"rename", name?: string})
GET /sessions Получить список всех сохранённых сеансов
GET /sessions/{id} Снимок сеанса (все запросы)
DELETE /sessions/{id} Удалить сеанс
GET /sessions/{id}/export.har Экспортировать сеанс в HAR 1.2

Внутренний приём данных (резервный механизм D4)

Заголовок раздела «Внутренний приём данных (резервный механизм D4)»
Метод Путь Описание
POST /internal/ingest Принимает перехваченный запрос из сквозного пути server.cjs; требуется заголовок INSPECTOR_INTERNAL_INGEST_TOKEN

Полные схемы OpenAPI: docs/openapi.yaml → тег Traffic Inspector.


Исходный код OmniRoute (a58000c7685f)

HagiCode

HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.

Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

Главный экран HagiCode в светлой теме
  • SmartСтруктурированные процессы превращают намерение в исполнимый путь от идеи до готового изменения.
  • EfficientМультиагентные процессы параллельно продвигают исследование, реализацию и проверку.
  • FunHero Dungeon делает длительную совместную разработку наглядной и увлекательной.
Перейти на HagiCode