Перейти к основному содержимому

Новый инспектор с API для ИИ-агентов

· 5 мин

Инспектор — страница на http://127.0.0.1:4040, где видно всё, что пришло в туннель. В tuna-cli 0.40 мы переписали его целиком и добавили то, чего не хватало: запросы, которые раньше терялись, сессии баз данных и API для ИИ-агентов.

Новый инспектор на широком мониторе: список запросов, вебхук Stripe, запрос и ответ в две колонки
Коротко
  • Видны отклонённые запросы. Запрос, который отбили --basic-auth, --cidr-allow или политика трафика, теперь попадает в инспектор вместе с причиной.
  • Базы данных. Сессии PostgreSQL, MySQL и Redis с длительностью, результатом, ошибками и транзакциями. Туннель MySQL — новый.
  • ИИ-агенты. llms.txt и HTTP API: агент сам найдёт упавший запрос, повторит его и дождётся вебхука.
  • Порт инспектора задаётся флагом --inspect-port. В Docker инспектор теперь выключен по умолчанию.
  • Всё остальное — в документации.

HTTP: всё на одном экране​

Список и детали запроса занимают всю высоту окна. На широком мониторе запрос и ответ стоят в две колонки, на ноутбуке между ними переключатель, на телефоне список и детали открываются отдельными экранами. Появились тёмная тема и английский интерфейс.

Поиск понимает фильтры-токены: method:POST, status:500, заголовок, IP, правило политики. Клик по статусу или пути в деталях добавляет фильтр, клик с Alt — исключающий фильтр.

Из заголовка Authorization токен открывается в разборщике JWT в один клик, временная метка — в конвертере времени. Мы переписали эти инструменты на Go и покрыли тестами: они больше не округляют большие числа, не ломают кириллицу в Base64 и не сдвигают часовой пояс.

Отклонённые запросы​

Раньше запрос, который отбил --basic-auth, --key-auth, --cidr-*, политика трафика или проверка подписи вебхука, в инспектор не попадал. Клиент получал 401 или 403, а инспектор оставался пустым, и было непонятно, дошёл ли запрос вообще.

Теперь такие запросы видны в списке с меткой «Политика». В деталях видно, кто ответил вместо приложения и какие правила сработали.

Запрос к /wp-login.php отклонён правилом политики Block scanners

Изменить и повторить​

«Изменить» открывает редактор прямо на месте запроса: метод, путь, заголовки таблицей и тело, рядом — исходный ответ. Обычный повтор отправляет тело байт в байт, поэтому подпись вебхука сходится и событие Stripe можно ещё раз прогнать через обработчик.

Редактор повтора с исходным ответом рядом

Базы данных​

У tuna postgres, tuna redis и нового tuna mysql инспектор показывает сессии и их запросы: длительность, результат, ошибки с кодом и ссылкой на описание. Транзакции отмечены полосой, откат — красной. Вкладки «Ошибки» и «Медленные» фильтруют лог.

Сессия Postgres: ошибка 42P01 и ссылка на описание кода

У Postgres видны командные теги (UPDATE 1) и параметры prepared statements. У Redis — номер базы в имени сессии, бинарные значения в кавычках, как в redis-cli, и MULTI/EXEC. Через туннель работают RESP3 и redis-cli --pipe.

Сессия Redis: бинарное значение PNG в кавычках

У MySQL видны запросы, транзакции и PREPARE/EXECUTE, но не результаты и ошибки: ответы сервера инспектор не разбирает.

То же видно и в терминале:

ИИ-агенты​

Claude Code, Cursor и другие агенты читают инспектор через HTTP API. Дайте агенту ссылку http://127.0.0.1:4040/llms.txt — там инструкция с живыми адресами и готовыми командами curl.

I=http://127.0.0.1:4040
curl -s "$I/v1/events?status=5xx&since=15m" # что упало за 15 минут
curl -s "$I/v1/events?path=~hook&wait=60s" # дождаться следующего вебхука
curl -s -X POST "$I/v1/events/<id>/replay" # повторить через туннель

wait закрывает частую просьбу «дождись вебхука»: запрос висит, пока не придёт подходящее событие. Кнопка «Скопировать для ИИ» в деталях запроса копирует ссылку на событие: человек по ней увидит экран инспектора, агент получит Markdown.

Предупреждение при копировании события для ИИ-агента

Инспектор ничего не маскирует: токены, cookie и тела запросов попадут в контекст агента и к провайдеру модели. При копировании он об этом предупреждает, а llms.txt просит агента не повторять секреты. С боевыми данными будьте осторожны.

Что изменилось при обновлении​

  • Порт. Первый туннель занимает 4040, следующие — 4041, 4042 и дальше. Фиксированный порт — --inspect-port или TUNA_INSPECT_PORT. Если он занят, туннель не запустится и назовёт, кто его занял.
  • inspectAddr в tuna.yml больше не читается. Адрес задаётся переменной TUNA_INSPECT_ADDR, порт в ней устарел.
  • Docker. В образе yuccastream/tuna инспектор tuna http, tuna 1c и tuna kubernetes выключен. Если вы задавали только TUNA_INSPECT_ADDR, добавьте TUNA_INSPECT=true.
  • Доступ из сети. При TUNA_INSPECT_ADDR=0.0.0.0 CLI предупреждает в логе, а инспектор показывает баннер, что открыт без авторизации.

Как обновить CLI — в инструкции. Подробности — на странице инспектора. Нашли ошибку или не хватает функции — напишите в поддержку.

Оставьте отзыв​

Если вам нравится пользоваться Tuna, или наоборот вы недовольны чем-либо, то пожалуйста оставьте отзыв.

Новости​

Анонсы новых функций и статей публикуем в Telegram-канале. Подписывайтесь, чтобы ничего не пропустить.

Помощь​

Мы ценим наших пользователей и детально изучаем все обращения, если у вас возникли проблемы с tuna – обязательно свяжитесь с нами одним из способов: