OpsDeck 0.8.0 — файлы между хостами, Yandex Cloud, справочник для ИИ и много мелочей по вашим отзывам
Большой релиз: два новых раздела, локальный ИИ стал заметно полезнее, Kubernetes и IDE подтянулись по вашим просьбам, а ещё — несколько находок из ваших журналов, которые портили жизнь незаметно. Спасибо всем, кто пишет! 🙌
✨ Новое
-
Файлы на хостах — две панели, как в MobaXterm: слева и справа либо эта машина, либо хост по SSH. Выделяете файлы и перетаскиваете в соседнюю панель или жмёте стрелку. Вход в папки, создание, переименование, удаление, сортировка по имени, размеру и дате (папки всегда сверху), а перенесённое сразу выделено в панели-приёмнике. Хост → хост идёт через
scp -3: оба соединения ведёт OpsDeck, хостам не нужно видеть друг друга. Работает системнымиsftpиscp, то есть с вашими~/.ssh/config, ProxyJump и ключами; вход только по ключу — парольsftpв пакетном режиме взять негде. (#78, @RouR) -
Yandex Cloud — машины (состояние, зона, платформа с долей ядра и «прерываемостью», адреса; включить, выключить, перезагрузить с подтверждением, SSH в один клик), сети с подсетями, группы безопасности с правилами по-человечески, публичные и внутренние адреса, сервисные аккаунты и права на каталог, платёжные аккаунты. Работает через CLI
ycи её профили (yc init) — ни токенов, ни ключей сервисных аккаунтов OpsDeck не хранит. CLI ищется и там, куда её кладёт установщик, а если лежит иначе — путь можно указать кнопкой. -
База знаний локального ИИ. Модель понимала запрос, но выдумывала флаги. Теперь к запросу подбираются темы из встроенного справочника — 23 темы и больше 250 проверенных команд: kubectl, helm, docker, systemd, terraform, git, ssh, jq, текстовые фильтры, диски, сеть и DNS, процессы, nginx, PostgreSQL, MySQL, ClickHouse, Kafka, Redis, Vault, PromQL, ansible, Yandex Cloud, сертификаты — и их строки идут в подсказку рядом с командами из ваших заметок. Свои команды дописываются в
knowledge.mdрядом с настройками и идут первыми (⚙ → Локальный ИИ → «Открыть папку»). -
«Открыть папку в web» в терминале — забрать файлы с сервера без sftp: в сессию уходит
python3 -m http.serverна 127.0.0.1 хоста (в сеть папка не светится), OpsDeck поднимает к немуssh -Lи открывает ссылку в браузере. Проверяет, что раздача ответила, и объясняет, если нет.
🤖 Локальный ИИ
- Загрузка модели в четыре соединения — у CDN обычно ограничение на одно, а модели весят от 1 до 22 ГБ. Сервер без поддержки диапазонов — прежний одиночный поток.
- Докачка: оборвалась загрузка (сеть, выход из приложения) — продолжится с того же места, а не начнётся заново. В состояние попадает только то, что реально дошло до диска, иначе файл собрался бы битым.
- Несколько ИИ рядом, до трёх. Выбор агента больше не перезапускает панель: открытый получает фокус, новый добавляется рядом, переписка не теряется.
☸ Kubernetes
- Мультивыбор и массовое удаление с подтверждением по количеству; действия прямо в строке — копировать имя, логи, shell, удалить. (#71, #74, @RouR)
- Поды объекта: у Deployment, StatefulSet, DaemonSet, Job и CronJob — вкладка с их подами. (#72, @RouR)
- График над логами пода: столбики по времени, красным ошибки, жёлтым предупреждения; клик по столбику оставляет только его строки. (#73, @RouR)
- Логи в файл — кнопка «В файл» сохраняет показанные строки. (#75, @RouR)
- Код выхода прошлого запуска и requests/limits рядом с потреблением в таблице подов. (#79, @psvolkov)
- Несколько namespace плашками: выбранный становится плашкой под панелью, между ними переключаетесь одним кликом; запоминаются для каждого контекста. (#79)
- С клавиатуры: ↑/↓ — строка, Enter — подробности, Пробел — отметить, Alt+↑/↓ — предыдущий и следующий раздел слева, Ctrl+Shift+1…9 — модуль по номеру. (#79)
- Shell на узле через
kubectl debugи мультивыбор namespace в «Проблемах». - Сортировка узлов по доле занятого, а не по гигабайтам: узел на 100% важнее того, где занято больше байт, но есть запас. Стрелка в шапке теперь совпадает с порядком.
- Обрыв связи виден: таблица гаснет, сверху причина и время, на которое показаны данные. После «Применить» в YAML объект перечитывается, и если перечитать не удалось — так и сказано, а не молчаливый показ прежнего текста. (из отчёта: правку приняли за откат, а это рвалась связь с API)
💻 IDE
- Поиск по всему проекту (⌘ слева вверху или
Ctrl+Shift+F): текст или регулярное выражение, результаты по файлам, клик открывает строку; мимо.git,node_modules,target,dist, бинарных и всего тяжелее 2 МБ. - Несколько проектов плашками: у каждого свои вкладки, раскрытые папки и выбранный файл. (#79)
- Строки, не отправленные в удалённую ветку, помечены жёлтой полосой слева.
Ctrl+Z,Ctrl+Shift+Z,Ctrl+Y,Ctrl+A,Ctrl+D,Ctrl+/работают на любой раскладке,Ctrl+Wзакрывает вкладку, а не окно приложения. (#79)
🖥 Терминал, SSH и мониторинг
- Двойной клик по строке в SSH подключает — как в Termius.
- Права на ключ: ssh молча отвергает ключ, доступный не только владельцу. Теперь под полем «Ключ (-i)» видно, что ssh его не возьмёт и кто ещё имеет доступ, а кнопка сужает права (
icaclsна Windows,chmod 600на остальных). (#86, @RouR) - Мониторинг: имя и адрес на разных строках, переключатель «%» для RAM и диска, перетаскивание карточек мышью с запоминанием порядка.
🛠 Исправления
- Настройки больше не теряются.
fs::writeсначала обрезает файл: приложение, убитое посреди записи (обновление, перезагрузка), оставляло пустойsettings.json, и дальше всё молча уходило в значения по умолчанию — приходилось заново указывать путь к заметкам, базе KeePass и WinBox. Теперь запись атомарная, рядом лежит предыдущая копия, а нечитаемый файл не затирается молча. Касается всех файлов в~/.config/opsdeck. - Полоса вкладок веб-панелей на macOS в оконном режиме больше не перекрывается сайтом: высота рабочей области считается без системного заголовка. (#68, @DuraCHYo; исправление — @artp1ay)
- Закрытая вкладка терминала не держит память и не оставляет shell: утёкший обработчик держал панель вместе со всем буфером (~50 МБ на вкладку с 20 000 строк), а вкладка, закрытая до старта, оставляла живой процесс. (#88, @LockerWarUA)
- Журнал больше не забивается ошибками xterm:
fit()доходил до уже выброшенного терминала — сотни одинаковых строк за сессию. Проверка добавлена в e2e на настоящем WebKitGTK, где это и воспроизводится. - Алерты не подвешивают интерфейс. Раздел перечитывал 300 записей истории на каждый опрос источников — даже закрытым. Теперь скрытый раздел молчит, события сводятся в одну перезагрузку, а в истории хранится только то, что видно в таблице (файл у одного из вас похудел с 1,2 МБ до ~0,3 МБ).
- Enter в диалогах и другие исправления 0.7.1 — для тех, кто ставит через архив.
- rustls 0.23.46: закрыты четыре свежие уязвимости (данные после отказа ECH, распаковка сертификата до проверки подлинности, понижение обмена ключами, секреты TLS в
Debug).
👥 Участники релиза
- @LockerWarUA — PR #88: закрытая вкладка терминала не держит память и не оставляет shell.
- @artp1ay — PR #89: позиционирование веб-панели на macOS.
- @RouR, @psvolkov, @DuraCHYo — отчёты и запросы, по которым сделана большая часть релиза.
Хотите поучаствовать? PR принимаются в ветку dev, подробности в CONTRIBUTING.md.