UAT: TUI missing spec-required widgets — no SessionTabs, Throbber, Sidebar, ConversationStream, or PromptTextArea widgets implemented #3659

Open
opened 2026-04-05 21:11:53 +00:00 by freemo · 0 comments
Owner

Metadata

  • Branch: fix/tui-missing-spec-widgets
  • Commit Message: fix(tui): implement spec-required widgets SessionTabs, Throbber, Sidebar, ConversationStream, and PromptTextArea
  • Milestone: None (Backlog)
  • Parent Epic: #868

Backlog note: This issue was discovered during autonomous operation
on milestone v3.7.0. It does not block milestone completion and has been
placed in the backlog for human review and future milestone assignment.

Background and Context

The TUI implementation in src/cleveragents/tui/app.py is fundamentally incomplete relative to the layout requirements described in docs/specification.md (MainScreen Layout sections). The spec defines a rich multi-panel interface with six distinct widget types, none of which are currently implemented. Users currently see a single static text area instead of the full interactive interface.

Current Behavior

The TUI (src/cleveragents/tui/app.py) only implements:

  • A plain _Static widget as the conversation panel (no block types, no streaming, no cursor navigation)
  • A single-line PromptInput (wraps Textual Input, not TextArea)
  • A PersonaBar (partial footer)
  • Textual's built-in _Header and _Footer (not the spec-required custom footer with hotkey reference)
  • No Throbber, no SessionTabs, no Sidebar at all
  • The tui/screens/ directory is empty (no main_screen.py)
  • The tui/widgets/ directory has no session_tabs.py, sidebar.py, throbber.py, conversation.py, prompt_area.py, or footer_bar.py

Affected locations:

  • src/cleveragents/tui/app.pycompose() method
  • src/cleveragents/tui/widgets/ — missing widget modules
  • src/cleveragents/tui/screens/ — empty directory (no main_screen.py)

Expected Behavior

Per docs/specification.md MainScreen Layout requirements, the following widgets must be implemented:

  1. Throbber — rainbow gradient bar at top, visible when actor is processing, collapses to zero height when idle
  2. SessionTabs — tab bar below throbber with underline indicator on active session, state icons ( working, ❯ awaiting input, plain idle), hidden when only one session exists
  3. Sidebar — right-side collapsible panel (3 states: hidden/visible/fullscreen) with Plans and Projects panels in collapsible containers
  4. ConversationStream — proper scrollable message stream with typed block types (UserInput, ActorResponse, ActorThought, ToolCall, PlanProgress, DiffView, TerminalEmbed, ShellResult, Note) with 2-column grid layout (cursor column + content)
  5. PromptTextArea — multi-line capable prompt with mode-dependent symbol (❯ normal, $ shell, ☰ multi-line), NOT just a single-line Input widget
  6. FooterBar — context-sensitive hotkey reference (always visible), showing: F1 Help │ shift+tab Sidebar │ tab Persona │ ctrl+tab Preset │ ctrl+s Sessions │ ctrl+q Quit

Subtasks

  • Create src/cleveragents/tui/screens/main_screen.py with MainScreen layout
  • Implement src/cleveragents/tui/widgets/throbber.py — rainbow gradient bar, collapses when idle
  • Implement src/cleveragents/tui/widgets/session_tabs.py — tab bar with state icons, hidden when single session
  • Implement src/cleveragents/tui/widgets/sidebar.py — collapsible right panel (hidden/visible/fullscreen) with Plans and Projects containers
  • Implement src/cleveragents/tui/widgets/conversation.pyConversationStream with all typed block types and 2-column grid layout
  • Implement src/cleveragents/tui/widgets/prompt_area.pyPromptTextArea with multi-line support and mode-dependent symbol
  • Implement src/cleveragents/tui/widgets/footer_bar.pyFooterBar with spec-required hotkey reference
  • Refactor src/cleveragents/tui/app.py compose() to use MainScreen and all new widgets
  • Tests (Behave): Add BDD scenarios for each widget's spec-required behaviour
  • Tests (Robot): Add integration tests for TUI layout and widget interactions
  • Verify coverage ≥ 97% via nox -s coverage_report
  • Run nox (all default sessions), fix any errors

Definition of Done

This issue is complete when:

  • All subtasks above are completed and checked off.
  • All six spec-required widgets (Throbber, SessionTabs, Sidebar, ConversationStream, PromptTextArea, FooterBar) are implemented and visible in the running TUI.
  • ConversationStream renders all nine typed block types with the 2-column grid layout.
  • PromptTextArea supports multi-line input and displays the correct mode symbol.
  • Sidebar correctly transitions between hidden, visible, and fullscreen states.
  • SessionTabs is hidden when only one session exists and shows correct state icons.
  • Throbber collapses to zero height when the actor is idle.
  • FooterBar displays the full spec-required hotkey reference string.
  • A Git commit is created where the first line of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation.
  • The commit is pushed to the remote on the branch matching the Branch in Metadata exactly.
  • The commit is submitted as a pull request to master, reviewed, and merged before this issue is marked done.
  • All nox stages pass
  • Coverage >= 97%

Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: ca-uat-tester

## Metadata - **Branch**: `fix/tui-missing-spec-widgets` - **Commit Message**: `fix(tui): implement spec-required widgets SessionTabs, Throbber, Sidebar, ConversationStream, and PromptTextArea` - **Milestone**: None (Backlog) - **Parent Epic**: #868 > **Backlog note:** This issue was discovered during autonomous operation > on milestone v3.7.0. It does not block milestone completion and has been > placed in the backlog for human review and future milestone assignment. ## Background and Context The TUI implementation in `src/cleveragents/tui/app.py` is fundamentally incomplete relative to the layout requirements described in `docs/specification.md` (MainScreen Layout sections). The spec defines a rich multi-panel interface with six distinct widget types, none of which are currently implemented. Users currently see a single static text area instead of the full interactive interface. ## Current Behavior The TUI (`src/cleveragents/tui/app.py`) only implements: - A plain `_Static` widget as the conversation panel (no block types, no streaming, no cursor navigation) - A single-line `PromptInput` (wraps Textual `Input`, not `TextArea`) - A `PersonaBar` (partial footer) - Textual's built-in `_Header` and `_Footer` (not the spec-required custom footer with hotkey reference) - No `Throbber`, no `SessionTabs`, no `Sidebar` at all - The `tui/screens/` directory is empty (no `main_screen.py`) - The `tui/widgets/` directory has no `session_tabs.py`, `sidebar.py`, `throbber.py`, `conversation.py`, `prompt_area.py`, or `footer_bar.py` **Affected locations:** - `src/cleveragents/tui/app.py` — `compose()` method - `src/cleveragents/tui/widgets/` — missing widget modules - `src/cleveragents/tui/screens/` — empty directory (no `main_screen.py`) ## Expected Behavior Per `docs/specification.md` MainScreen Layout requirements, the following widgets must be implemented: 1. **Throbber** — rainbow gradient bar at top, visible when actor is processing, collapses to zero height when idle 2. **SessionTabs** — tab bar below throbber with underline indicator on active session, state icons (⌛ working, ❯ awaiting input, plain idle), hidden when only one session exists 3. **Sidebar** — right-side collapsible panel (3 states: hidden/visible/fullscreen) with Plans and Projects panels in collapsible containers 4. **ConversationStream** — proper scrollable message stream with typed block types (`UserInput`, `ActorResponse`, `ActorThought`, `ToolCall`, `PlanProgress`, `DiffView`, `TerminalEmbed`, `ShellResult`, `Note`) with 2-column grid layout (cursor column + content) 5. **PromptTextArea** — multi-line capable prompt with mode-dependent symbol (❯ normal, $ shell, ☰ multi-line), NOT just a single-line `Input` widget 6. **FooterBar** — context-sensitive hotkey reference (always visible), showing: `F1 Help │ shift+tab Sidebar │ tab Persona │ ctrl+tab Preset │ ctrl+s Sessions │ ctrl+q Quit` ## Subtasks - [ ] Create `src/cleveragents/tui/screens/main_screen.py` with `MainScreen` layout - [ ] Implement `src/cleveragents/tui/widgets/throbber.py` — rainbow gradient bar, collapses when idle - [ ] Implement `src/cleveragents/tui/widgets/session_tabs.py` — tab bar with state icons, hidden when single session - [ ] Implement `src/cleveragents/tui/widgets/sidebar.py` — collapsible right panel (hidden/visible/fullscreen) with Plans and Projects containers - [ ] Implement `src/cleveragents/tui/widgets/conversation.py` — `ConversationStream` with all typed block types and 2-column grid layout - [ ] Implement `src/cleveragents/tui/widgets/prompt_area.py` — `PromptTextArea` with multi-line support and mode-dependent symbol - [ ] Implement `src/cleveragents/tui/widgets/footer_bar.py` — `FooterBar` with spec-required hotkey reference - [ ] Refactor `src/cleveragents/tui/app.py` `compose()` to use `MainScreen` and all new widgets - [ ] Tests (Behave): Add BDD scenarios for each widget's spec-required behaviour - [ ] Tests (Robot): Add integration tests for TUI layout and widget interactions - [ ] Verify coverage ≥ 97% via `nox -s coverage_report` - [ ] Run `nox` (all default sessions), fix any errors ## Definition of Done This issue is complete when: - All subtasks above are completed and checked off. - All six spec-required widgets (`Throbber`, `SessionTabs`, `Sidebar`, `ConversationStream`, `PromptTextArea`, `FooterBar`) are implemented and visible in the running TUI. - `ConversationStream` renders all nine typed block types with the 2-column grid layout. - `PromptTextArea` supports multi-line input and displays the correct mode symbol. - `Sidebar` correctly transitions between hidden, visible, and fullscreen states. - `SessionTabs` is hidden when only one session exists and shows correct state icons. - `Throbber` collapses to zero height when the actor is idle. - `FooterBar` displays the full spec-required hotkey reference string. - A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation. - The commit is pushed to the remote on the branch matching the **Branch** in Metadata exactly. - The commit is submitted as a **pull request** to `master`, reviewed, and **merged** before this issue is marked done. - All nox stages pass - Coverage >= 97% --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: ca-uat-tester
freemo added this to the v3.7.0 milestone 2026-04-05 21:13:14 +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.

Blocks
Reference
cleveragents/cleveragents-core#3659
No description provided.