UAT: TUI MainScreen missing multi-session tab bar (Session Tabs widget) #1332

Open
opened 2026-04-02 16:52:44 +00:00 by freemo · 0 comments
Owner

Bug Report: [tui] — Multi-session tab bar is not implemented in MainScreen

Severity Assessment

  • Impact: High. Users cannot manage multiple concurrent sessions in the TUI. The spec defines multi-session support as a core TUI capability.
  • Likelihood: 100% reproducible — the session tab bar does not exist.
  • Priority: High

Location

  • File: src/cleveragents/tui/app.pycompose() method (lines 107–120) and SessionView dataclass (lines 54–57)

Description

The specification defines Session Tabs as a required element in the MainScreen layout:

"Session Tabs (below throbber): tab bar with underline indicator on the active session. Hidden when only one session exists. Session labels show state icons: (actor working), (awaiting input), plain (idle)."

The spec ASCII mockup shows:

│ Session 1  ┃ Session 2 ┃  Session 3                                                          │
│              ┗━━━━━━━━━━━━┛                                                                  │

The spec also requires:

  • ctrl+n — Create new session tab
  • ctrl+w — Close current session tab
  • ctrl+[ / ctrl+] — Switch to previous/next session tab
  • ctrl+s — Open Sessions screen (for saved sessions)
  • Each session has its own independent persona, conversation, and A2A binding

Actual Behavior

The implementation is hardcoded to a single session:

@dataclass(slots=True)
class SessionView:
    """Minimal per-session TUI view model."""
    session_id: str
    transcript: list[str]

# In __init__:
self._session = SessionView(session_id="default", transcript=[])

The compose() method yields no session tab bar widget. There is no TabbedContent, Tabs, or custom session tab widget.

Expected Behavior (from spec)

The MainScreen should include a session tab bar that:

  1. Shows tabs for each open session (hidden when only one session exists)
  2. Displays state icons: (actor working), (awaiting input), plain (idle)
  3. Uses underline indicator on the active session
  4. Supports ctrl+n to create new session, ctrl+w to close, ctrl+[/ctrl+] to navigate
  5. Each session maintains independent persona, conversation history, and A2A connection

Steps to Reproduce

  1. Run the TUI
  2. Observe: no session tab bar is visible
  3. Press ctrl+n — no new session tab is created
  4. Press ctrl+s — no Sessions screen opens
  • #694 (feat(tui): Textual MainScreen with sidebar states and Dracula theme)
  • #998 (feat(tui): implement SessionsScreen with active/saved session listing)
  • #1315 (Refactor TUI to Align with ADR-44 and ADR-45)

References

  • Spec §MainScreen Layout — Sidebar Hidden (key elements list)
  • Spec §MainScreen Layout — Sidebar Visible (key elements list)
  • Spec §Keyboard Reference — Global (ctrl+n, ctrl+w, ctrl+[, ctrl+], ctrl+s)
## Bug Report: [tui] — Multi-session tab bar is not implemented in MainScreen ### Severity Assessment - **Impact**: High. Users cannot manage multiple concurrent sessions in the TUI. The spec defines multi-session support as a core TUI capability. - **Likelihood**: 100% reproducible — the session tab bar does not exist. - **Priority**: High ### Location - **File**: `src/cleveragents/tui/app.py` — `compose()` method (lines 107–120) and `SessionView` dataclass (lines 54–57) ### Description The specification defines **Session Tabs** as a required element in the MainScreen layout: > "**Session Tabs** (below throbber): tab bar with underline indicator on the active session. Hidden when only one session exists. Session labels show state icons: `⌛` (actor working), `❯` (awaiting input), plain (idle)." The spec ASCII mockup shows: ``` │ Session 1 ┃ Session 2 ┃ Session 3 │ │ ┗━━━━━━━━━━━━┛ │ ``` The spec also requires: - `ctrl+n` — Create new session tab - `ctrl+w` — Close current session tab - `ctrl+[` / `ctrl+]` — Switch to previous/next session tab - `ctrl+s` — Open Sessions screen (for saved sessions) - Each session has its own independent persona, conversation, and A2A binding ### Actual Behavior The implementation is hardcoded to a single session: ```python @dataclass(slots=True) class SessionView: """Minimal per-session TUI view model.""" session_id: str transcript: list[str] # In __init__: self._session = SessionView(session_id="default", transcript=[]) ``` The `compose()` method yields no session tab bar widget. There is no `TabbedContent`, `Tabs`, or custom session tab widget. ### Expected Behavior (from spec) The MainScreen should include a session tab bar that: 1. Shows tabs for each open session (hidden when only one session exists) 2. Displays state icons: `⌛` (actor working), `❯` (awaiting input), plain (idle) 3. Uses underline indicator on the active session 4. Supports `ctrl+n` to create new session, `ctrl+w` to close, `ctrl+[`/`ctrl+]` to navigate 5. Each session maintains independent persona, conversation history, and A2A connection ### Steps to Reproduce 1. Run the TUI 2. Observe: no session tab bar is visible 3. Press `ctrl+n` — no new session tab is created 4. Press `ctrl+s` — no Sessions screen opens ### Related Issues - #694 (feat(tui): Textual MainScreen with sidebar states and Dracula theme) - #998 (feat(tui): implement SessionsScreen with active/saved session listing) - #1315 (Refactor TUI to Align with ADR-44 and ADR-45) ### References - Spec §MainScreen Layout — Sidebar Hidden (key elements list) - Spec §MainScreen Layout — Sidebar Visible (key elements list) - Spec §Keyboard Reference — Global (`ctrl+n`, `ctrl+w`, `ctrl+[`, `ctrl+]`, `ctrl+s`)
freemo self-assigned this 2026-04-02 18:45:22 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core#1332
No description provided.