Skip to content

feat: goose2 message bubble + action tray#8720

Merged
tellaho merged 3 commits intomainfrom
codex/chat-bubble-actions-tray
Apr 21, 2026
Merged

feat: goose2 message bubble + action tray#8720
tellaho merged 3 commits intomainfrom
codex/chat-bubble-actions-tray

Conversation

@tellaho
Copy link
Copy Markdown
Collaborator

@tellaho tellaho commented Apr 21, 2026

Category: improvement
User Impact: Goose 2 chat messages now show a bubble-scoped actions tray with a small downward reveal, and copy confirmation stays visible until it clears.

Problem: Message actions were tied to the full message row, so the hover target felt broader than the visible bubble. Copy confirmation was also easy to miss because the tray disappeared as soon as hover ended.

Solution: This update mostly refreshes the message presentation: the actions tray is visually attached to each bubble, reveals just beneath the message, and uses a subtle motion treatment that keeps the layout steady. It also keeps copy confirmation visible for the full timeout so the feedback reads clearly.

File changes

ui/goose2/src/features/chat/ui/MessageBubble.tsx
Reworked the message actions presentation from a row-level hover treatment into a bubble-scoped tray with reserved space below each message. The copy action now uses the shared clipboard hook so the tray stays visible while the copied checkmark is active.

ui/goose2/src/features/chat/ui/tests/MessageBubble.test.tsx
Expanded the focused UI coverage to assert the muted user bubble shell, the reserved actions tray structure, and the copy confirmation lifecycle. Added clipboard mocking and timer control so the new behavior is exercised deterministically.

Reproduction Steps

  1. Open Goose 2 and load any chat with at least one assistant response.
  2. Hover directly over a message bubble and confirm the actions tray appears for that bubble, animating down beneath it.
  3. Move the pointer away and confirm the tray fades out while the message layout stays steady.
  4. Click the copy action on a message and confirm the icon switches to a checkmark.
  5. Move the pointer away and confirm the tray remains visible while the copied state is active, then disappears once the confirmation timeout ends.

Demo

image
hover button active assistant
image image image image

@tellaho tellaho changed the title refine goose2 message bubble action tray feat: goose2 message bubble action tray Apr 21, 2026
tellaho added 3 commits April 21, 2026 00:44
Move the message actions into a reserved tray under each bubble so the\nhover target matches the bubble width and the controls no longer rely\non a portaled hover card or full-row hover state.\n\nKeep the copied checkmark visible until the clipboard confirmation\nexpires, and extend the MessageBubble tests to cover the muted user\nbubble shell, the reserved action tray, and the copy confirmation\nlifecycle.

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Tighten the visual details of the message action row in Goose 2.

Switch the tray actions to the shared ghost-light pill buttons, keep
the copy action highlighted while the confirmation checkmark is shown,
and pin the timestamp to the inside edge of each row. This also trims
the reserved gutter so the tray sits closer to the bubble.

Add focused assertions for timestamp wrapping, per-side action order,
and the copied-state styling so these presentation details stay stable.

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Fix the action-row DOM assertion after rebasing the message bubble tray work onto main.

The tray structure is unchanged for users, but the test now needs to inspect
the inner row wrapper rather than the outer positioning container. Add a
narrow MessageBubble file-size exception as well so the repo's Goose 2
pre-commit checks continue to pass while this presenter still owns the
bubble, attachments, tool output, and action tray markup.

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho changed the title feat: goose2 message bubble action tray feat: goose2 message bubble + action tray Apr 21, 2026
@tellaho tellaho force-pushed the codex/chat-bubble-actions-tray branch from f7e21f4 to b976ed0 Compare April 21, 2026 07:48
@tellaho tellaho marked this pull request as ready for review April 21, 2026 07:49
Copy link
Copy Markdown
Collaborator

@aharvard aharvard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice

@tellaho tellaho added this pull request to the merge queue Apr 21, 2026
Merged via the queue into main with commit 8f73ef9 Apr 21, 2026
25 checks passed
@tellaho tellaho deleted the codex/chat-bubble-actions-tray branch April 21, 2026 16:40
spikewang pushed a commit to spikewang/goose that referenced this pull request Apr 22, 2026
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
lifeizhou-ap added a commit that referenced this pull request Apr 22, 2026
* main:
  feat: extend goose2 context window ux with auto-compaction (#8721)
  improve goose2 agent management flows (#8737)
  alexhancock/tui-improvements (#8736)
  fix: add strict:false to Responses API tools and gpt-5.4 to known models (#8636)
  persist and reliably apply chat model selection (#8734)
  merge goose-acp crate into goose (#8726)
  docs: AGENTS.md section on goose2 desktop backend architecture (#8732)
  feat: goose2 message bubble + action tray (#8720)
  consolidate provider ACP methods onto inventory (#8710)
  ci: declare and enforce MSRV of 1.91.1 (#8670)
  fix(ui): correct grammar in apps view description (#8668) (#8679)
  Stop load openai fast model for openapi compatible custom endpoint (#8644)
lifeizhou-ap added a commit that referenced this pull request Apr 22, 2026
* main: (41 commits)
  removed the specific code owner for documentation change (#8749)
  fix(providers): handle missing delta field in streaming chunks (#8700)
  refactor(providers): extract http_status module and rename handle_status_openai_compat (#8620)
  fix(providers/openai): accept streaming chunks with both reasoning fields (#8715)
  feat: associate threads with projects (#8745)
  upgrade goose sdk and tui to be compatible with the latest agentclientprotocol/sdk package (#8667)
  feat: extend goose2 context window ux with auto-compaction (#8721)
  improve goose2 agent management flows (#8737)
  alexhancock/tui-improvements (#8736)
  fix: add strict:false to Responses API tools and gpt-5.4 to known models (#8636)
  persist and reliably apply chat model selection (#8734)
  merge goose-acp crate into goose (#8726)
  docs: AGENTS.md section on goose2 desktop backend architecture (#8732)
  feat: goose2 message bubble + action tray (#8720)
  consolidate provider ACP methods onto inventory (#8710)
  ci: declare and enforce MSRV of 1.91.1 (#8670)
  fix(ui): correct grammar in apps view description (#8668) (#8679)
  Stop load openai fast model for openapi compatible custom endpoint (#8644)
  feat(hooks): add Husky git hooks for ui/goose2 (#8577)
  fix: links in chat could not be opened (#8544)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants