Adds a way to copy agent (and user) message text — previously only code blocks and inline code were copyable.
Per-bubble context menu: long-press (touch) / right-click (desktop) on a finalized message opens a menu anchored to the bubble: Copy / Select messages / Delete.
Selection toolbar: gains a Copy button next to Delete; multi-select copy joins the selected messages in display order with a blank line.
Copies the raw markdown (msg.text) so formatting survives pasting into other markdown-aware apps; shows a "Copied" toast.
Streaming/pending/system messages stay menu-less (no final id yet); long-press inside selection mode still toggles selection as before.
Review fixes included
Cancelling a menu-opened delete confirm clears the staged selectedIds (flag deleteConfirmFromMenu) so the bubble doesn't stay highlighted; the toolbar path keeps its selection.
copyText is a no-op for blank text (media-only messages) — no empty clipboard write, no toast.
Testing
:shared:desktopTest passes.
Installed on the phone (:androidApp:installDebug); long-press → Copy / Select / Delete verified manually.
Note: long-press now opens the menu instead of entering selection mode directly (one extra tap via "Select messages") — deliberate UX change.
## What
Adds a way to copy agent (and user) message text — previously only code blocks and inline code were copyable.
- **Per-bubble context menu**: long-press (touch) / right-click (desktop) on a finalized message opens a menu anchored to the bubble: **Copy** / **Select messages** / **Delete**.
- **Selection toolbar**: gains a **Copy** button next to Delete; multi-select copy joins the selected messages in display order with a blank line.
- Copies the **raw markdown** (`msg.text`) so formatting survives pasting into other markdown-aware apps; shows a "Copied" toast.
- Streaming/pending/system messages stay menu-less (no final id yet); long-press inside selection mode still toggles selection as before.
## Review fixes included
- Cancelling a menu-opened delete confirm clears the staged `selectedIds` (flag `deleteConfirmFromMenu`) so the bubble doesn't stay highlighted; the toolbar path keeps its selection.
- `copyText` is a no-op for blank text (media-only messages) — no empty clipboard write, no toast.
## Testing
- `:shared:desktopTest` passes.
- Installed on the phone (`:androidApp:installDebug`); long-press → Copy / Select / Delete verified manually.
Note: long-press now opens the menu instead of entering selection mode directly (one extra tap via "Select messages") — deliberate UX change.
Long-press (touch) / right-click (desktop) on a finalized message now
opens a context menu anchored to the bubble: Copy / Select messages /
Delete. The multi-select toolbar gains a Copy button that joins the
selected messages in display order. Copies raw markdown so formatting
survives pasting into other markdown apps; blank text is a no-op.
Cancelling a menu-opened delete confirm clears the staged selection so
the bubble doesn't stay highlighted.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Adds a way to copy agent (and user) message text — previously only code blocks and inline code were copyable.
msg.text) so formatting survives pasting into other markdown-aware apps; shows a "Copied" toast.Review fixes included
selectedIds(flagdeleteConfirmFromMenu) so the bubble doesn't stay highlighted; the toolbar path keeps its selection.copyTextis a no-op for blank text (media-only messages) — no empty clipboard write, no toast.Testing
:shared:desktopTestpasses.:androidApp:installDebug); long-press → Copy / Select / Delete verified manually.Note: long-press now opens the menu instead of entering selection mode directly (one extra tap via "Select messages") — deliberate UX change.
✅ No issues found — changes look consistent with the stated intent. Ready to be merged.