| 22-agent-streaming |
03 |
ui |
| react |
| streaming |
| chat |
| edit |
| retry |
| stop-button |
| tooltips |
|
| phase |
provides |
| 22-02 |
ChatMessage with agentName/identity bar, ChatStreamingCursor, group-hover div wrapper |
|
|
| ChatStopButton component (centered outline button with Square icon) |
| ChatMessageActions component (edit Pencil for user, retry RefreshCw for assistant) |
| ChatMessage extended with inline edit mode, isAnyStreaming, onEdit/onRetry callbacks |
|
| 22-04 (ChatPanel integration — will wire onEdit/onRetry/stop callbacks) |
| Any component that renders ChatMessage |
|
| added |
patterns |
|
|
| group-hover pattern for hover-triggered action buttons on chat bubbles |
| isAnyStreaming gate — passes to ChatMessageActions to globally disable edit/retry during streaming |
| inline edit mode with useState(isEditing) + useState(editValue) in ChatMessage |
|
|
| created |
modified |
| ui/src/components/ChatStopButton.tsx |
| ui/src/components/ChatMessageActions.tsx |
|
| ui/src/components/ChatMessage.tsx |
| ui/src/components/ChatMessage.test.tsx |
|
|
| isAnyStreaming prop added to ChatMessage (not isStreaming) — distinguishes 'this msg is streaming' from 'any msg is streaming' for disabling global edit/retry |
| ChatMessageActions returns null when isStreaming — clean conditional render, no CSS toggling |
|
| Pattern: group-hover action buttons — parent div has 'group' class, action buttons use 'hidden group-hover:flex' to show on hover |
| Pattern: inline edit mode — useState(isEditing) in ChatMessage; textarea pre-filled with content; Save calls onEdit(id, newContent) |
|
|
3min |
2026-04-01 |