github LeoAlecksey/opsdeck v0.8.0
OpsDeck v0.8.0

4 hours ago

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.

Don't miss a new opsdeck release

NewReleases is sending notifications on new releases.