UAT: TUI TuiMaterializer not implemented — conversation stream shows static placeholder #4392

Closed
opened 2026-04-08 12:03:53 +00:00 by HAL9000 · 1 comment
Owner

Bug Report

Feature Area: TUI — Conversation Stream / TuiMaterializer

What Was Tested

The spec (§ "TUI Architecture Overview") defines that the TUI communicates with the Application layer via A2A and uses a TuiMaterializer that maps ElementHandle events to Textual widget operations. The conversation stream should display typed message blocks (UserInput, ActorResponse, ToolCall, etc.).

Expected Behavior (from spec)

The conversation stream should display a chronological stream of typed message blocks:

  • Welcome — ASCII art + instructions at startup
  • UserInput — Left border $secondary, 15% background tint, Markdown
  • ActorResponse — Streaming Markdown with syntax-highlighted code fences
  • ActorThought — Muted container, max 10 lines (expandable), italic
  • ToolCall — Expandable: icon + status pill header, collapsible content
  • PlanProgress — Grid layout with status icons per step
  • DiffView — Unified or side-by-side diff, syntax highlighting
  • TerminalEmbed — Bordered terminal output
  • ShellResult — Left border $primary, 4% foreground bg
  • Note — Semantic: info/warning/error

The TuiMaterializer should subscribe to A2A events and route ElementHandle events to Textual widgets.

Actual Behavior

The conversation area in src/cleveragents/tui/app.py is a single static widget:

yield _Static("CleverAgents TUI", id="conversation")

When a user submits a prompt, the conversation is updated with a plain text string:

conversation.update(preview)  # or result.command_result or shell output

There is no TuiMaterializer class, no A2A event subscription, no typed message blocks, no streaming, and no block cursor navigation. The conversation is a single Static widget that gets replaced entirely on each interaction.

Steps to Reproduce

  1. Run agents tui
  2. Type any message and press Enter
  3. The conversation area shows a plain text string instead of a properly formatted message block

Code Location

  • src/cleveragents/tui/app.py_Static("CleverAgents TUI", id="conversation") placeholder
  • No TuiMaterializer class exists anywhere in the codebase
  • Spec reference: §"Conversation Stream" (line ~29825 in docs/specification.md) and §"Integration with Future TUI" (line ~27720)

Impact

The conversation stream is non-functional. Users see plain text instead of:

  • Properly formatted user/actor message blocks
  • Streaming actor responses
  • Expandable tool call blocks
  • Plan progress indicators
  • Syntax-highlighted code

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

## Bug Report **Feature Area:** TUI — Conversation Stream / TuiMaterializer ### What Was Tested The spec (§ "TUI Architecture Overview") defines that the TUI communicates with the Application layer via A2A and uses a `TuiMaterializer` that maps `ElementHandle` events to Textual widget operations. The conversation stream should display typed message blocks (UserInput, ActorResponse, ToolCall, etc.). ### Expected Behavior (from spec) The conversation stream should display a chronological stream of typed message blocks: - `Welcome` — ASCII art + instructions at startup - `UserInput` — Left border `$secondary`, 15% background tint, Markdown - `ActorResponse` — Streaming Markdown with syntax-highlighted code fences - `ActorThought` — Muted container, max 10 lines (expandable), italic - `ToolCall` — Expandable: icon + status pill header, collapsible content - `PlanProgress` — Grid layout with status icons per step - `DiffView` — Unified or side-by-side diff, syntax highlighting - `TerminalEmbed` — Bordered terminal output - `ShellResult` — Left border `$primary`, 4% foreground bg - `Note` — Semantic: info/warning/error The `TuiMaterializer` should subscribe to A2A events and route `ElementHandle` events to Textual widgets. ### Actual Behavior The conversation area in `src/cleveragents/tui/app.py` is a single static widget: ```python yield _Static("CleverAgents TUI", id="conversation") ``` When a user submits a prompt, the conversation is updated with a plain text string: ```python conversation.update(preview) # or result.command_result or shell output ``` There is no `TuiMaterializer` class, no A2A event subscription, no typed message blocks, no streaming, and no block cursor navigation. The conversation is a single `Static` widget that gets replaced entirely on each interaction. ### Steps to Reproduce 1. Run `agents tui` 2. Type any message and press Enter 3. The conversation area shows a plain text string instead of a properly formatted message block ### Code Location - `src/cleveragents/tui/app.py` — `_Static("CleverAgents TUI", id="conversation")` placeholder - No `TuiMaterializer` class exists anywhere in the codebase - Spec reference: §"Conversation Stream" (line ~29825 in docs/specification.md) and §"Integration with Future TUI" (line ~27720) ### Impact The conversation stream is non-functional. Users see plain text instead of: - Properly formatted user/actor message blocks - Streaming actor responses - Expandable tool call blocks - Plan progress indicators - Syntax-highlighted code --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.7.0 milestone 2026-04-08 17:42:38 +00:00
Author
Owner

Closing as duplicate of #4641 — TUI has no A2A event subscription or TuiMaterializer.


Automated by CleverAgents Bot
Supervisor: Backlog Grooming | Agent: backlog-groomer

Closing as duplicate of #4641 — TUI has no A2A event subscription or TuiMaterializer. --- **Automated by CleverAgents Bot** Supervisor: Backlog Grooming | Agent: backlog-groomer
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#4392
No description provided.