From 20f32f5a4b8add314b3dca66ba41e68f49366c7e Mon Sep 17 00:00:00 2001 From: Rizz <302abe414ca6e3134763d2539bfcf145aea2a63fe5f8455204ed602fd40cf381@buzz.block.builderlab.xyz> Date: Tue, 25 Aug 2026 16:11:03 -0700 Subject: [PATCH] fix(desktop): anchor activity message hover cues Co-authored-by: Rizz <302abe414ca6e3134763d2539bfcf145aea2a63fe5f8455204ed602fd40cf381@buzz.block.builderlab.xyz> Signed-off-by: Rizz <302abe414ca6e3134763d2539bfcf145aea2a63fe5f8455204ed602fd40cf381@buzz.block.builderlab.xyz> --- .../AgentSessionToolItem/CompactMessageSummary.tsx | 1 + ...AgentSessionTranscriptList.conversation.test.mjs | 13 +++++++++++++ .../ui/AgentSessionWorkBlock.orphaned.test.mjs | 1 + .../ui/activityRenderClasses/UserMessageBubble.tsx | 8 ++------ 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/desktop/src/features/agents/ui/AgentSessionToolItem/CompactMessageSummary.tsx b/desktop/src/features/agents/ui/AgentSessionToolItem/CompactMessageSummary.tsx index 33fd1e4416..4013f9d01c 100644 --- a/desktop/src/features/agents/ui/AgentSessionToolItem/CompactMessageSummary.tsx +++ b/desktop/src/features/agents/ui/AgentSessionToolItem/CompactMessageSummary.tsx @@ -151,6 +151,7 @@ export function CompactMessageSummary({ ? "text-xs leading-4" : "text-sm leading-relaxed", shouldClampBubble && "relative max-h-36 overflow-hidden", + isConversation && "relative", canOpenMessage && "group/bubble cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", isCompactPreview diff --git a/desktop/src/features/agents/ui/AgentSessionTranscriptList.conversation.test.mjs b/desktop/src/features/agents/ui/AgentSessionTranscriptList.conversation.test.mjs index f5a4511d67..f58f27ea14 100644 --- a/desktop/src/features/agents/ui/AgentSessionTranscriptList.conversation.test.mjs +++ b/desktop/src/features/agents/ui/AgentSessionTranscriptList.conversation.test.mjs @@ -64,7 +64,20 @@ test("conversation renders the prompt as a filled right-aligned bubble with an a // soft tint, borderless surface, and `px-4 py-2` spacing. const bubble = row.querySelector(".rounded-2xl"); assert.ok(bubble, "the prompt should match Buzz's chat-bubble radius"); + assert.match(bubble.className, /relative/); assert.match(bubble.className, /bg-muted\/60/); + const openInChatCue = bubble.querySelector('[aria-hidden="true"]'); + assert.ok(openInChatCue, "linked prompts should retain the hover cue"); + assert.match( + openInChatCue.className, + /top-1\.5/, + "the sender hover cue uses its native inset once the bubble is its containing block", + ); + assert.doesNotMatch( + openInChatCue.className, + /top-3/, + "the cue should not be pushed into the prompt text to compensate for the old containing-block bug", + ); assert.doesNotMatch( bubble.className, /(? ) : null} - {messageLink ? ( - - ) : null} + {messageLink ? : null} {isConversation && footer ? ( // Timestamp/context row is chrome, not content: focus mode keeps it