feat/glasspane-attention-tiers #194

Closed
clawdie wants to merge 2 commits from feat/glasspane-attention-tiers into main

2 commits

Author SHA1 Message Date
de933fdf69 test(tui): add coverage for attention navigation + cross-session isolation
Some checks are pending
CI / rust (pull_request) Waiting to run
CI / markdown (pull_request) Waiting to run
CI / port (pull_request) Waiting to run
CI / agent-jail-pkgs (pull_request) Waiting to run
Four new tests closing the last attention-tier coverage gaps:

- jump_next_attention_skips_healthy_panes:
  Panes [ok, err, ok, stalled, ok] — proves n jumps 0→1→3→wrap→1,
  skipping healthy panes. Forward wrapping.

- jump_prev_attention_wraps_backwards:
  Same layout — proves N jumps 4→3→1→wrap→3.
  Backward wrapping.

- attention_bar_ignores_other_session_panes:
  Error pane in session s2, viewing session s1 — bar must NOT
  appear. Proves the filtered_panes()-based has_attention fix
  from commit 4d95f11.

- jump_next_attention_reports_when_no_attention_panes:
  All healthy panes — status message set to 'no attention',
  selection unchanged.

18 tests, workspace green (0 failures).
2026-06-25 21:18:36 +02:00
4d95f1113f feat(tui): glasspane attention tiers 1-4 — bar, jump, filter, row highlight
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)
2026-06-25 21:08:15 +02:00