needs_attention() = Error + Blocked + Stalled (free function, single
source of truth). Includes Blocked because glasspane doc comments say
Blocked = 'operator attention needed' (queue_update / pending steering).
Tier 1 — Attention bar:
Red-bordered panel with '⚠ ATTENTION (N)' title replaces the header
when any pane needs attention. Shows pane id, reason, and agent.
Tier 2 — Jump keys (n/N):
n = next attention pane, N = previous (wrapping). Respects session
scope via filtered_panes(). Detail pane follows the jump.
Tier 3 — Attention filter (a key):
Toggles attention_only on App. Composes with session filter.
Tier 4 — Row highlight:
Attention rows get red background when unselected, inverted
dark-gray+light-red+bold when selected. Global row_highlight
neutralized.
Also:
- fix(tui): remove hardcoded dark-terminal assumptions — theme-agnostic
- fix(tui): force crossterm color output — override NO_COLOR=1 inherited
from Hermes sessions (crossterm honours no-color.org standard)