Repository navigation
Shellit v0.9.4
Pre-release
Pre-release
🚀 Shellit v0.9.4 — Стабилизация Linux Wayland & GTK OpenGL и дедупликация оболочек (Linux Wayland & OpenGL Stability)
📌 О релизе / Release Overview
Релиз v0.9.4 устраняет критический сбой графического конвейера в среде Linux (Wayland / Hyprland / GTK), обнаруженный в ходе первого публичного краш-теста (GitHub Issue #1 / BUG-056), а также решает проблему дублирования системных шеллов и неоптимального определения дефолтной оболочки в Unix-окружениях:
- Устранение зависания UI и OpenGL Frame Timeout (
BUG-056/ GitHub Issue #1):- Однократный шлюз (Single-shot guard): В
OmniSearchModalдобавлен флаг_isExecutingAction. По первому нажатиюEnterили клику мыши модальное окно немедленно блокирует повторный ввод и автоповтор клавиш клавиатуры. - Post-frame диспетчеризация мутаций: Закрытие модального диалога (
Navigator.pop) разделено с обновлением состояния Riverpod (setSplitLayout). Мутации состояния вынесены вWidgetsBinding.instance.addPostFrameCallback, исключая одновременную пересборку соседних поддеревьев в момент синхронизации кадровых буферов GTK/OpenGL. - Стабильный ключ
SplitMatrixView: Ключ виджета зафиксирован какValueKey('split-${tab.id}')вместо включения имени раскладки, что позволило Flutter плавно адаптировать сплит через естественный вызовdidUpdateWidgetбез деструктивного уничтожения и повторного создания терминальных слотов. - Мемоизация размеров терминала: В
TerminalScreenвнедрена мемоизация_lastSyncedCols/_lastSyncedRowsи метод_safeResizeTerminal, отсекающий холостые вызовы сетевого ресайза PTY при перестроении макета.
- Однократный шлюз (Single-shot guard): В
- Дедупликация и чистое обнаружение Linux-оболочек:
- В
LocalShellDetectorвнедрено разрешение символических ссылок черезresolveSymbolicLinksSync(). На дистрибутивах Linux с объединенным каталогом/usr-mergeпути/bin/zshи/usr/bin/zshтеперь распознаются как единый исполняемый файл, исключая дубликатыZSHв выпадающих списках. - Оболочка из переменной окружения
$SHELLгарантированно выставляется приоритетной в списке доступных терминалов.
- В
- Прямая интеграция с GitHub через Model Context Protocol (MCP):
- Среда разработки подключена к GitHub MCP Server для мониторинга баг-репортов, отслеживания прогресса и оперативного взаимодействия с сообществом.
Release v0.9.4 resolves a critical graphics pipeline freeze in Linux desktop environments (Wayland / Hyprland / GTK) reported in our first public bug report (GitHub Issue #1 / BUG-056), while streamlining Unix local shell detection and eliminating path duplicates:
- Resolution of Linux OpenGL Frame Timeout & Split Hang (
BUG-056/ GitHub Issue #1):- Single-shot Action Guard: Added
_isExecutingActioninOmniSearchModalto instantly reject keyboard spam or auto-repeatEnterevents. - Post-frame State Dispatch: Separated route pop (
Navigator.pop) from Riverpod state modifications (setSplitLayout), scheduling state updates viaWidgetsBinding.instance.addPostFrameCallbackto avert OpenGL fence timeouts during GTK surface tearing. - Stabilized Split Matrix Widget Key: Changed
SplitMatrixViewkey toValueKey('split-${tab.id}'), allowing smooth transitions viadidUpdateWidgetrather than destroying and recreating live terminal widgets. - Terminal Resize Memoization: Introduced
_safeResizeTerminalinTerminalScreenwith column/row caching to eliminate redundant PTY socket resize storms during layout changes.
- Single-shot Action Guard: Added
- Linux Shell Deduplication via Symlink Resolution:
LocalShellDetectornow resolves symlinks usingresolveSymbolicLinksSync(), cleanly consolidating merged/binand/usr/binpaths (e.g. on Arch Linux) and removing duplicate entries.- The user's preferred
$SHELLis guaranteed top priority upon startup.
- GitHub MCP Integration:
- Development workflow synchronized with GitHub via Model Context Protocol for real-time issue triage and verified post-mortems.
🔒 Ключевые изменения / Key Changes
1. Терминальный интерфейс (packages/terminal_ui)
lib/src/widgets/omni_bar/omni_search_modal.dart: внедрен барьер_isExecutingAction,WidgetsBinding.instance.addPostFrameCallbackдля действий.lib/src/widgets/app_shell/shellit_app_shell.dart: стабилизирован ключValueKey('split-${tab.id}').lib/src/widgets/terminal/terminal_screen.dart: добавлен_safeResizeTerminalс кэшированием колонок и строк.lib/src/services/local_shell_detector.dart: поддержкаresolveSymbolicLinksSync()и дедупликация оболочек.test/omni_bar_shortcut_test.dart: добавлены регрессионные тесты защиты от дребезга и post-frame вызова.
2. Сайт и документация (apps/website, docs/)
- Добавлен Акт XV в Хронику проекта (
docs/CHRONICLE.md,docs/CHRONICLE.en.md,apps/website/src/content/chronicle/). - Обновлен
StatsHUD.astro(56+ разобранных дефектов, статусv0.9.4 Alpha Preview). - Актуализирован
BUGS_AND_ISSUES.mdс подробным постмортемом инцидентаBUG-056.
📦 Сборка и верификация / Verification
- Flutter & Dart Analysis:
dart analyze --fatal-infos— 0 ошибок, 0 предупреждений, 0 инфо (All clear). - Unit & Widget Tests:
packages/terminal_ui: 203 теста (100% успешно);apps/shellit: 61 тест (100% успешно);packages/storage_vault: 63 теста (100% успешно);- Всего: 460+ зеленых тестов.
- Issue Validation: Протестирована защита от спама
Enterи быстрой смены сплитов в Omni-search.
📦 Git Commits & Changes
🚀 Features & Enhancements
- feat(release): v0.9.4 - Linux Wayland & GTK OpenGL stability, Omni-search split guard & shell deduplication (BUG-056, #1) (cc96532)
- feat(website): add localized 40s demo videos, hero background loop with sound toggle, and demo modal (be494bd)
🐛 Bug Fixes & Stability
- fix(website): resolve indexing issues in Google Search Console, enforce trailing slash policy, and guard bots against client-side redirects (BUG-055) (e5b1333)
Full Changelog: v0.9.3...v0.9.4