Skip to content

Shellit v0.9.4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Oct 22:37
· 2 commits to main since this 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-окружениях:

  1. Устранение зависания 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 при перестроении макета.
  2. Дедупликация и чистое обнаружение Linux-оболочек:
    • В LocalShellDetector внедрено разрешение символических ссылок через resolveSymbolicLinksSync(). На дистрибутивах Linux с объединенным каталогом /usr-merge пути /bin/zsh и /usr/bin/zsh теперь распознаются как единый исполняемый файл, исключая дубликаты ZSH в выпадающих списках.
    • Оболочка из переменной окружения $SHELL гарантированно выставляется приоритетной в списке доступных терминалов.
  3. Прямая интеграция с 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:

  1. Resolution of Linux OpenGL Frame Timeout & Split Hang (BUG-056 / GitHub Issue #1):
    • Single-shot Action Guard: Added _isExecutingAction in OmniSearchModal to instantly reject keyboard spam or auto-repeat Enter events.
    • Post-frame State Dispatch: Separated route pop (Navigator.pop) from Riverpod state modifications (setSplitLayout), scheduling state updates via WidgetsBinding.instance.addPostFrameCallback to avert OpenGL fence timeouts during GTK surface tearing.
    • Stabilized Split Matrix Widget Key: Changed SplitMatrixView key to ValueKey('split-${tab.id}'), allowing smooth transitions via didUpdateWidget rather than destroying and recreating live terminal widgets.
    • Terminal Resize Memoization: Introduced _safeResizeTerminal in TerminalScreen with column/row caching to eliminate redundant PTY socket resize storms during layout changes.
  2. Linux Shell Deduplication via Symlink Resolution:
    • LocalShellDetector now resolves symlinks using resolveSymbolicLinksSync(), cleanly consolidating merged /bin and /usr/bin paths (e.g. on Arch Linux) and removing duplicate entries.
    • The user's preferred $SHELL is guaranteed top priority upon startup.
  3. 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