Skip to content

Shellit v0.9.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Oct 14:16
· 6 commits to main since this release

🚀 Shellit v0.9.2 — Мобильная зрелость, чистота интерфейса и криптографическая гигиена (Mobile Resilience & Pure UX)

📌 О релизе / Release Overview

Релиз v0.9.2 концентрируется на мобильной экосистеме, криптографической устойчивости кросс-платформенной синхронизации и эргономике Android-клиента:

  1. Криптографическая гигиена и исправление синхронизации паролей (BUG-051): Устранен критический сбой авторизации на мобильных устройствах после E2EE-синхронизации. Экспорт паролей серверов в SyncManager полностью изолирован от дешифрования пустых приватных ключей, предотвращая сбой AES-GCM. Добавлена безопасная очистка памяти rawPassBytes, защита от дубликатов хост-ключей в findKnownHost (..limit(1)) и явная информативная диагностика при сбоях расшифровки реквизитов в SessionConnectController.
  2. Бережное отношение к сети и защита от Fail2ban: Отключен 15-секундный фоновый TCP-опрос сокетов на Android, вызывавший срабатывание защитных систем серверов. Добавлен нативный жест Pull-to-refresh (RefreshIndicator) для обновления доступности хостов по запросу пользователя.
  3. Очистка мобильного интерфейса и адаптивность: Из мобильного экрана настроек полностью скрыты неиспользуемые компоненты ИИ (Gemini Assistant). Добавлены горизонтальные фильтры сред (PROD, STAGE, DEV) и папок в MobileHostsView, полноэкранный адаптивный диалог добавления хостов, расширенная панель вспомогательных клавиш терминала (:, _, $, &, PgUp, PgDn, ENTER) и компактная шапка консоли в горизонтальной ориентации.

Release v0.9.2 focuses on mobile ecosystem stability, cryptographic integrity in cross-device E2EE sync, and refined Android ergonomics:

  1. Cryptographic Hygiene & Vault Sync Resilience (BUG-051): Fixed an issue where server passwords failed to decrypt on Android following vault synchronization. In SyncManager, passphrase export is cleanly decoupled from private key handling, preventing AES-GCM errors on empty keys. Added secure memory zeroization for passphrase buffers, duplicate tolerance in findKnownHost (..limit(1)), and explicit UI diagnostic feedback upon decryption failures.
  2. Network Politeness & Fail2ban Prevention: Removed aggressive 15-second background TCP pings on mobile devices to prevent triggering brute-force and port-scan defenses on sensitive hosts. Replaced with single initial probe and user-driven Pull-to-refresh (RefreshIndicator).
  3. Streamlined Mobile UX & Responsive Touch Layout: Removed desktop-only AI and Gemini configuration cards from the mobile settings view. Introduced environment (PROD, STAGE, DEV) and folder filter chips in MobileHostsView, responsive full-width HostFormDialog, essential Unix terminal keys (:, _, $, &, PgUp, PgDn, ENTER), and compact landscape header metrics.

🔒 Ключевые изменения / Key Changes

1. Криптографическая устойчивость E2EE-синхронизации (BUG-051)

  • Изоляция дешифрования в SyncManager: Для серверов с парольной аутентификацией encryptedPrivateKey имеет нулевой размер. Ранее вызов decryptBytes падал с ArgumentError, прерывая экспорт пароля encryptedPassphrase. Теперь пустые ключи безопасно пропускаются (k.encryptedPrivateKey.isNotEmpty), а временный буфер пароля гарантированно зануляется в оперативной памяти (rawPassBytes.fillRange(0, length, 0)).
  • Безопасный поиск отпечатков хостов: В findKnownHost добавлен оператор ..limit(1), исключающий падение StateError: Too many elements при наличии дублирующихся записей known_hosts.
  • Информативные ошибки аутентификации: В SessionConnectController при сбое расшифровки пароля или ключа клиент не пытается подключаться с password = null, а мгновенно возвращает четкое уведомление с рекомендацией перепроверить пароль или повторить синхронизацию.
  • Отказ от навязчивого сокетного пинга: Фоновый периодический опрос портов отключен на Android, защищая узлы от блокировок брандмауэрами.

2. Чистота и эргономика мобильного интерфейса

  • Скрытие настроек ИИ: Карточка AiSettingsCard и блок интеграции Gemini убраны из мобильного профиля настроек (SettingsScreen), устраняя визуальный шум и неиспользуемые параметры.
  • Интерактивные фильтры каталога хостов: В верхнюю часть MobileHostsView добавлена горизонтальная лента чипов (All, Production, Staging, Development, а также папки), синхронизированная с hostFilterProvider.
  • Полноэкранный адаптивный HostFormDialog: На экранах уже 600dp диалог разворачивается на всю ширину экрана с компактными отступами, обеспечивая удобный ввод учетных данных на сенсорной клавиатуре.
  • Расширенный MobileAccessoryBar: В строку вспомогательных клавиш добавлены необходимые символы для Vim/Bash (:, _, $, &, PgUp, PgDn, ENTER), стрелки навигации сгруппированы рядом с модификаторами Ctrl и Alt.
  • Компактная шапка ландшафтного режима: При повороте устройства в горизонтальное положение высота верхней панели терминала сокращается с 46dp до 36dp, освобождая максимальное количество строк под вывод консоли.
  • Защита от переполнений верстки: Кнопки действий карточек SSH-ключей в KeychainScreen переведены на Wrap, исключая ошибки переполнения RenderFlex на узких смартфонах.

📦 Сборка и верификация / Verification

  • Flutter & Dart Analysis: 0 ошибок, 0 предупреждений (flutter analyze — All clear).
  • Unit & Regression Tests: 100% прохождение тестов по всем пакетам (63 теста storage_vault, 150 тестов terminal_ui, 61 тест apps/shellit).
  • Сборка Android: Собран релизный тестовый APK app-release.apk (~68.8 МБ), готовый к установке и проверке.
  • Сайт и документация: Актуализирован StatsHUD.astro (51 разобранный инцидент, статус v0.9.2), добавлены главы Хроники (Акт XIII).

📦 Git Commits & Changes

🚀 Features & Enhancements

  • feat(mobile): release v0.9.2 - mobile resilience, touch ergonomics, and vault sync fix (9bc79af)

📝 Documentation

  • docs(roadmap): sync website roadmap dataset and PocketBase migration for v0.9.1 (0a67be0)

Full Changelog: v0.9.1...v0.9.2