tuna-cli 0.39 — интерфейс в терминале у всех команд
В tuna-cli 0.36 у туннелей появился полноэкранный интерфейс в терминале. В 0.39 он есть почти у всех команд: у tuna start и tuna run — сводный экран всех туннелей, у tuna trigger — лента срабатываний, у tuna domain, tuna monitor и других команд управления — таблица, в которой можно создавать, смотреть и удалять ресурсы. Инспектор теперь включается и выключается клавишей, без перезапуска туннеля.
Общие правила
- Интерфейс включается сам, когда команда запущена в терминале. Без терминала, с
--log=stdout, в CI и у ИИ-агентов вывод прежний, текстовый, поэтому скрипты не ломаются. Выключить интерфейс вручную — переменнойTUNA_TUI=0. - Выход — только
Ctrl+C.qиEscвозвращают назад из деталей и карточек. - Подсказки внизу экрана показывают только клавиши, которые работают на текущем экране и для текущей строки.
- Команды управления —
tuna domain,endpoint,tunnel,api-key,monitorиssh-session— без подкоманды открывают таблицу в терминале, а без терминала печатают справку. Подкоманды вродеtuna domain listработают как раньше и теперь выводят в stdout таблицу, которую удобно передавать по пайпу.
Туннели
HTTP: инспектор по клавише
Лента запросов и метрики — rpm, p50 и p90, число ответов 4xx и 5xx — остались на месте. Enter открывает детали запроса, r повторяет его, / фильтрует ленту. Новое — клавиша I: она включает и выключает инспектор, как флаг --inspect, но без перезапуска туннеля. Когда инспектор выключен, веб-инспектор останавливается, история запросов очищается, а главным экраном становится лог.
TCP: соединения и трафик
У tuna tcp инспектора нет, поэтому главный экран — лог туннеля. Над ним строка со счётчиками: активные и все соединения, входящий и исходящий трафик.
Postgres и Redis
Слева сессии, справа — запросы и ответы выбранной сессии, включая ошибки. Tab переключает панели, Esc возвращает к списку сессий, y копирует запрос. l переключает между сессиями и логом. Инспектор у Postgres и Redis включён всегда: ради разбора запросов эти туннели и нужны, а без него есть tuna tcp. tuna redis устроен так же.
SSH: запись сессий по клавише
tuna ssh показывает инструкцию для подключения и ленту сессий. Enter на активной сессии открывает её просмотр в реальном времени, Ctrl+C возвращает к ленте. R включает и выключает запись новых сессий, как флаг --record-session. k копирует строку для known_hosts, c — команду ssh.
Protected App
tuna app подключает локальный сервис к защищённому приложению. На экране — аккаунт, адрес и сервис, куда идут запросы, ниже — лог. c копирует адрес, o открывает его в браузере, Q показывает QR-код.
Триггеры
tuna trigger запускает команду на входящий вебхук или письмо. Теперь каждое срабатывание видно в ленте: время, источник, код выхода и длительность. Enter открывает детали со stdout и stderr команды — сразу видно, почему деплой упал.
У tuna trigger smtp источник в ленте — от кого → кому · тема письма.
Несколько туннелей: start и run
tuna start
tuna start запускает туннели из конфига и показывает их на сводном экране: тип, статус, адрес и инспектор. Внизу — лента запросов выбранного туннеля, у Postgres и Redis — его лог. I включает и выключает инспектор HTTP-туннеля прямо со сводного экрана. Enter открывает полноценный интерфейс туннеля со всеми его клавишами, Ctrl+C возвращает к списку. Если tuna есть что сказать, например при ошибке, L открывает его собственный лог. Упавший туннель перезапускается сам, как раньше.
tuna run
tuna run запускает приложение и сам открывает туннель на каждый порт, который оно начинает слушать. Приложение — первая строка таблицы, ниже — его вывод. Enter открывает живой терминал приложения со вводом: горячие клавиши Vite и других dev-серверов работают. R перезапускает приложение, не трогая туннели. У туннеля внизу — его лента запросов. L показывает лог самого tuna: в нём видно, какие порты нашлись и какие туннели открылись.
Флаги --http и --tcp у tuna run удалены: тип туннеля определяется сам. Порт, который не отвечает по HTTP за 10 секунд, получает TCP-туннель.
Управление ресурсами
Домены
tuna domain открывает таблицу доменов. n резервирует поддомен или добавляет свой домен: для поддомена сразу подставлено случайное имя, после резерва открывается карточка с подсказкой, что делать дальше — DNS-запись для своего домена и команда туннеля. Enter открывает карточку домена со статусом и историей проверки, t запускает туннель на выбранном домене прямо из таблицы.
Для скриптов появились подкоманды tuna domain get, revalidate и redirect, а tuna domain reserve example.com добавляет свой домен.
TCP-порты
tuna endpoint работает так же: n резервирует порт, карточка показывает команду туннеля, c копирует host:port, t запускает туннель на порту. Локальный порт в команде подставляется по имени порта: для postgres — 5432, для redis — 6379, для mysql — 3306.
Активные туннели
tuna tunnel показывает все запущенные туннели команды, список обновляется раз в 5 секунд. Enter открывает карточку туннеля, d останавливает его.
API-ключи
tuna api-key показывает ключи команды. e меняет описание ключа, d удаляет ключ. Если удаляется ключ, под которым работает сам CLI, клиент предупредит об этом. Новые ключи по-прежнему выпускаются в личном кабинете.
Мониторы
tuna monitor показывает мониторы со статусами, они обновляются раз в 10 секунд. Enter открывает карточку с последними событиями, p ставит монитор на паузу и возобновляет его. Для скриптов появились подкоманды get, events, pause, resume и delete.
Записанные SSH-сессии
tuna ssh-session показывает записанные сессии. Enter проигрывает запись, x экспортирует её в GIF.
Фоновые сервисы
tuna service показывает туннели, установленные как фоновые сервисы. n создаёт сервис, e меняет его команду, s, x и R запускают, останавливают и перезапускают, d удаляет сервис и отзывает его ключ, Enter открывает логи.
Сам tuna service тоже переделан. На Linux без sudo он ставит пользовательский сервис systemd --user и включает linger, чтобы туннель пережил выход из SSH и перезагрузку. Кроме systemd, поддерживается OpenRC (Alpine, Gentoo). Для скриптов появились tuna service list, tuna service logs -f и tuna service edit: последняя меняет аргументы туннеля без переустановки. Каждый сервис получает свой ключ, привязанный к адресу туннеля, если адрес задан, а uninstall отзывает этот ключ.
Что проверить при обновлении
- Флаг
--locationустарел. Новые поддомены и порты живут в общей зоне, и сервер находит их безlocation. Если флаг задан, CLI предупредит. Для имён, зарезервированных в зонахruиnl, флаг пока нужен. - Списки выводятся в stdout.
tuna domain list,endpoint list,tunnel list,api-key listиmonitor statusпечатают таблицу в stdout, а не строки лога в stderr. Если скрипт разбирал старый формат, переведите его на флаг--json: с нимlistуdomain,endpoint,tunnel,api-key,session,ssh-sessionиbastion lsпечатают массив JSON, а пустой список —[]. tuna service installсразу запускает сервис и выключает инспектор. Отдельныйtuna service startпосле установки не нужен. Инспектор в сервисе выключен (--inspect=false), если его не включили явно.tuna startсервисом не ставится — создайте по сервису на каждый туннель.- На Linux без sudo сервис ставится пользовательским. Раньше
installтребовал root и создавал системный юнит. Если нужен системный сервис, запускайтеinstallчерезsudo. - Токен заменили сессия и API-ключи.
tuna loginтеперь входит через браузер, а на серверах и в CI используется API-ключ:TUNA_API_KEYи--api-keyвместоTUNA_TOKENи--token. Старый токен пока работает, но CLI предупреждает о замене. Что поменялось и что сделать — в отдельном посте. tuna runбез--httpи--tcp. Уберите эти флаги из скриптов.- У
tuna postgresиtuna redisнет флага--inspect. Инспектор у них включён всегда, переменнаяTUNA_INSPECTна них не влияет. Если скрипт запускал их с--inspect=false, переведите его наtuna tcp.
Вместе с CLI вышел Tuna Desktop 0.3 с входом через сессию и полем «Домен» в форме туннеля, про него — отдельный пост.
Подробнее про клавиши каждого экрана — в разделе Интерфейс в терминале, полный список изменений — в журнале изменений.
Leave feedback
If you enjoy using Tuna, or on the contrary you are not happy with something, please leave feedback.
News
We announce new features and posts on our Telegram channel. Subscribe so you don't miss anything.
Help
We value our users and carefully review every request. If you have any problems with tuna, please contact us in one of the following ways: