Skip to content

Shellit v0.9.3

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Oct 07:44
· 5 commits to main since this release

🚀 Shellit v0.9.3 — Высокопроизводительный кадровый рендеринг, VSync-коалесцинг и вытеснение истории (High-Performance Rendering & Buffer Coalescing)

📌 О релизе / Release Overview

Релиз v0.9.3 реализует глубокую модернизацию графического конвейера терминала и устраняет узкие места производительности, обнаруженные в ходе независимого архитектурного аудита с помощью Gemini 3.8 Flash в Google AI Studio, а также решает фундаментальную проблему рассинхронизации командных меток при вытеснении истории терминала:

  1. Кадровый троттлинг и VSync-коалесцинг (BUG-053): Входящие сетевые байты SSH-сокета больше не бомбардируют главный UI Isolate сотнями разрозненных пакетов в секунду. Модуль TerminalStreamCoalescer агрегирует чанки и сбрасывает их строго синхронно с частотой обновления дисплея через SchedulerBinding.scheduleFrameCallback. Внедрен алгоритм _getIncompleteUtf8TrailingByteCount, предотвращающий появление ромбиков U+FFFD при разрезании многобайтовых символов UTF-8, а также защита от переполнения памяти OOM Guard (>512 КБ).
  2. Векторный рендерер псевдографики Box Drawing (BUG-054): Все 128 символов псевдографики Unicode (U+2500..U+257F) переведены со шрифтового рендеринга на прямое математическое черчение векторами canvas.drawLine по субпиксельному центру знакоместа без антиалиасинга. Рамки в htop, mc и lazygit смыкаются монолитно без ступенек и зазоров при любом масштабе экрана.
  3. Холодный режим ожидания и изоляция каретки (BUG-052): Мигающий курсор терминала вынесен в изолированный оверлей TerminalCursorOverlay с собственным RepaintBoundary и пассивным IgnorePointer. Таймер 550 мс переведен на ValueNotifier<bool> без инвалидации основного холста текста. Потребление CPU терминалом в режиме ожидания сведено к абсолютному 0%.
  4. Синхронное вытеснение истории и защита маркеров OSC 133: При генерации сверхдлинных простыней вывода строки вытесняются из кольцевого буфера истории. Командные блоки ShellCommandBlock теперь привязаны к живым объектам строк BufferLine with IndexedItem. При вытеснении строки метки команд синхронно скрываются как на левом поле, так и на полосе прокрутки, предотвращая скачки к неверному тексту. Вверху скроллбара появился индикатор [▲ N] с тултипом о количестве вытесненных команд.

Release v0.9.3 introduces a comprehensive overhaul of the terminal rendering pipeline, addressing architectural bottlenecks diagnosed by Gemini 3.8 Flash in Google AI Studio, and solving semantic shell marker desynchronization during scrollback buffer eviction:

  1. VSync Stream Coalescing & UTF-8 Protection (BUG-053): SSH socket chunks no longer flood the UI Isolate with hundreds of unscheduled dispatches. TerminalStreamCoalescer accumulates byte packets and delivers them in sync with display refresh cycles using SchedulerBinding.scheduleFrameCallback. Integrated trailing byte analyzer preserves split multi-byte UTF-8 sequences, complemented by an active OOM Guard (>512 KB).
  2. Precision Vector Box Drawing (BUG-054): All 128 Unicode Box Drawing glyphs (U+2500..U+257F) are drawn via direct mathematical vectors (canvas.drawLine) anchored to subpixel cell centers with antialiasing disabled, eliminating visual seam gaps in htop, mc, and lazygit across high-DPI scaling.
  3. Cold Idle State & Isolated Cursor Layer (BUG-052): The blinking cursor is decoupled into an isolated TerminalCursorOverlay wrapped with RepaintBoundary and pass-through IgnorePointer. The 550 ms timer toggles a lightweight ValueNotifier<bool> without invalidating the text canvas, dropping idle CPU utilization to zero.
  4. Resilient Command Marker Scrollback Eviction (OSC 133): Bound ShellCommandBlock to underlying BufferLine with IndexedItem instances. Evicted historical lines dynamically hide associated gutter dots and scrollbar ticks in tandem. Added a top scrollbar badge [▲ N] detailing evicted command history, and updated keyboard navigation (Alt+Up / Alt+Down) to cleanly bypass pruned blocks.

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

1. Архитектура рендеринга терминала (BUG-052, BUG-053, BUG-054)

  • Компонент TerminalStreamCoalescer (terminal_stream_coalescer.dart):
    Обеспечивает агрегацию сетевых байт и сброс в Terminal.write() синхронно с VSync. Снабжен защитой _getIncompleteUtf8TrailingByteCount, fallback-таймером на 16 мс для фонового режима и аварийным сбросом при превышении буфера в 512 КБ.
  • Векторный движок BoxDrawingVectorRenderer (box_drawing_vector_renderer.dart):
    Поддерживает тонкие, жирные, двойные, пунктирные линии, диагонали и скругленные углы Bezier (╭ ╮ ╯ ╰).
  • Слой каретки TerminalCursorOverlay (terminal_cursor_overlay.dart):
    Изолирует отрисовку каретки от текстового буфера. Предотвращает перерисовку сорока строк консоли каждые 550 мс. Слоты матричных сплитов в SplitMatrixView обернуты в индивидуальные RepaintBoundary.

2. Целостность шелл-интеграции и вытеснение буфера

  • Динамический статус isEvicted:
    ShellCommandBlock хранит ссылку promptBufferLine. Если строка вытеснена из кольцевого буфера, блок помечается как вытесненный.
  • Синхронное скрытие маркеров:
    ShellGutterMarkersOverlay и ShellCommandMarkersOverlay фильтруют вытесненные блоки, исключая отображение призрачных меток.
  • Индикатор вытесненных команд [▲ N]:
    На полосе прокрутки отображается аккуратный бейдж с количеством скрытых команд и информативным тултипом.
  • Безопасная навигация:
    Горячие клавиши Alt+Up и Alt+Down переходят только между живыми командами в пределах доступного буфера.

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

  • Flutter & Dart Analysis: dart analyze --fatal-infos — 0 ошибок, 0 предупреждений, 0 инфо (All clear).
  • Unit & Widget Tests: 100% прохождение всех тестов монорепозитория:
    • packages/terminal_ui: 202 теста (включая тесты коалесцера, векторных линий, каретки и вытеснения буфера);
    • packages/storage_vault: 63 теста;
    • apps/shellit: 61 тест;
    • Всего: 460+ зеленых тестов.
  • Сборка Windows Dev: Собран и проверен нативный исполняемый файл shellit.exe (Debug x64).
  • Сайт и документация: Актуализирован StatsHUD.astro (54 разобранных инцидента, статус v0.9.3 Alpha Preview), опубликованы главы Хроники (Акт XIV: ru & en).

📦 Git Commits & Changes

🚀 Features & Enhancements

  • feat(release): v0.9.3 - high-performance terminal rendering, VSync coalescing & buffer eviction (e5d76ba)

Full Changelog: v0.9.2...v0.9.3