feat: right-click and keyboard Reply affordance in Dashboard webchat#86679
feat: right-click and keyboard Reply affordance in Dashboard webchat#86679mvanhorn wants to merge 1 commit into
Conversation
The Dashboard webchat had no Reply UX. Right-clicking a chat bubble opened the browser context menu and the keyboard shortcut (r) did nothing. Filed in openclaw#16896 with screenshots of competitor chat UIs that expose Reply directly on the bubble. Adds a Reply affordance reachable two ways: - right-click (contextmenu event) on a chat bubble opens a small inline action with one option: Reply - pressing 'r' on the currently-focused bubble selects it as the reply target Reply target threads through chat controller state into the input area as a preview ("Replying to user / assistant"), with X to cancel. Submitting prepends the quoted text via prependReplyQuote and clears the target. New types in chat-types.ts (ChatReplyTarget). CSS for the preview/menu lives in styles/chat/grouped.css. Tests cover the right- click, keyboard, cancel, and submit-clears-target paths plus the new grouped-render quote-prepend helper. Fixes openclaw#16896
|
Codex review: needs real behavior proof before merge. Reviewed May 25, 2026, 8:05 PM ET / 00:05 UTC. Summary PR surface: Source +318, Tests +246. Total +564 across 7 files. Reproducibility: not applicable. as a bug reproduction because this PR adds a new Dashboard webchat affordance. Source inspection of current main confirms the outbound reply-selection workflow is absent. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance: Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge Security Review findings
Review detailsBest possible solution: Rebase onto current main, preserve current chat rendering and send behavior, implement or remove the advertised Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction because this PR adds a new Dashboard webchat affordance. Source inspection of current main confirms the outbound reply-selection workflow is absent. Is this the best way to solve the issue? No, not yet. The UI-only quoted Markdown direction is plausible, but the branch still advertises an Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against c59635ae970c. Label changesLabel justifications:
Evidence reviewedPR surface: Source +318, Tests +246. Total +564 across 7 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
|
Closing this one - the branch is in CONFLICTING merge state and the canvas:a2ui build step isn't cooperating in my fork's workspace, so I can't produce the Real behavior proof the way I did for #86674 and #86676. Will resubmit cleanly from a fresh clone once I can get the dogfooding loop working. Apologies for the noise. |
Summary
Right-clicking a Dashboard webchat bubble now shows a small Reply action, and pressing
ron the focused bubble selects it as the reply target. The reply target threads into the input area as a preview that prepends a quoted block when the message is submitted.Why this matters
Filed in #16896: the Dashboard webchat had no Reply UX. Right-click opened the browser context menu and
rdid nothing. The issue includes screenshots from competitor chat UIs (Discord, Slack, iMessage) showing Reply as a first-class affordance on the bubble itself. This brings parity without changing the surrounding chat semantics.Changes
ui/src/ui/views/chat.ts: adds the right-click contextmenu handler, therkeyboard handler, the reply preview band above the input (with an X to cancel), and threadsselectedReplyTarget/onReplyprops through. Submits viaprependReplyQuote()which clears the target afterward.ui/src/ui/controllers/chat.ts: addssetSelectedReplyTarget()andprependReplyQuote(). Reply state lives on the controller so both keyboard and right-click sources converge on the same target.ui/src/ui/types/chat-types.ts: newChatReplyTargettype with the message id, author role, and quote text.ui/src/ui/chat/grouped-render.ts: extracts the quote-prepend helper from the inline render so it's testable from outside.ui/src/styles/chat/grouped.css: small inline-menu and reply-preview styles. ARIA roles on the menu and the preview.ui/src/ui/views/chat.test.ts: covers right-click selection,rkeyboard selection, cancel-clears, submit-clears, and the focus-restoration after submit.ui/src/ui/chat/grouped-render.test.ts(new): isolated tests for the quote-prepend helper.Testing
Vitest in
chat.test.tsandgrouped-render.test.ts. Existing chat tests still pass (rendering unchanged whenselectedReplyTargetis null).Fixes #16896
AI was used for assistance.