fix(tui): help overlay crash + Main header staying rendered

* HelpOverlay used `key={key}` on each shortcut row, but several keys
  legitimately repeat across contexts (`[t]` for Git view AND
  Toggle engine pause; `[r]` for Refresh stats AND Refresh agent
  detail). React threw "Encountered two children with the same
  key" and the overlay crashed. Switch to index-based keys with a
  comment explaining each row is unique by position.

* Refresh the help text: unified header tabs, Settings/Files/
  Agents ←/→ pane swap, Git push/fetch shortcuts, Files hidden-
  files toggle, Logs G jump-to-end.

* Main (status mode) header sometimes vanished after a tmux pane
  switch and only resize fixed it. Two fixes:
  - Remove the `rows < 10` auto-hide in MainHeader. tmux pane
    switches can briefly report stale or zero dimensions, and the
    transient `return null` orphaned the header.
  - Wrap MainHeader and StatusBar in flexShrink={0} boxes inside
    StatusModeGrid/StatusModeSingle (matching the prior
    InteractiveMode fix) so Yoga can't squeeze them to 0 rows.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-04-25 00:42:24 -07:00
parent 1059f48ce1
commit 88b4ecb391
2 changed files with 52 additions and 27 deletions

View File

@@ -0,0 +1,10 @@
---
"@runfusion/fusion": patch
"runfusion.ai": patch
---
TUI fixes: help overlay no longer crashes, header stays rendered
- Help overlay (`?` / `h`) crashed with "Encountered two children with the same key" because several shortcut entries share the same display key (`[t]` for Git view AND for Toggle engine pause; `[r]` for Refresh stats AND Refresh agent detail). Switch to index-based keys — each row is unique by position, not by character.
- Refresh the help text to reflect the unified header (`[m]` Main, `[b/a/g/t/e]` views), the Settings/Files/Agents `←/→` pane swap, the Git push/fetch shortcuts, the Files hidden-files toggle, and the Logs `G` jump-to-end.
- Main view (status mode) header sometimes vanished after a tmux pane switch and stayed missing until a terminal resize. Two fixes: (a) drop the `rows < 10` auto-hide in `MainHeader` — tmux pane switches can briefly report stale or zero dimensions, and a transient `return null` was orphaning the header. (b) Wrap `MainHeader` and `StatusBar` in `flexShrink={0}` boxes inside `StatusModeGrid` and `StatusModeSingle` (matching the prior fix in `InteractiveMode`), so Yoga can't squeeze them to 0 rows when content pressures the row budget.