From 0dd1396d44cd1a01e3da8056e7a7cbc10aee5d2e Mon Sep 17 00:00:00 2001
From: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
Date: Mon, 27 Jul 2026 17:05:05 +0530
Subject: [PATCH] fix(chat): wrap long URLs in message bubbles so they don't
overflow (#5210)
---
.../components/AgentMessageBubble.test.tsx | 12 ++++++++++++
.../conversations/components/AgentMessageBubble.tsx | 2 +-
.../conversations/components/ChatThreadView.tsx | 2 +-
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/app/src/features/conversations/components/AgentMessageBubble.test.tsx b/app/src/features/conversations/components/AgentMessageBubble.test.tsx
index f7d8f2af0..86b02af8f 100644
--- a/app/src/features/conversations/components/AgentMessageBubble.test.tsx
+++ b/app/src/features/conversations/components/AgentMessageBubble.test.tsx
@@ -41,6 +41,18 @@ describe('AgentMessageBubble markdown links', () => {
expect(mocks.openWorkspacePath).not.toHaveBeenCalled();
});
+ test('wraps a long auto-linked URL so it cannot overflow the bubble', () => {
+ // A bare URL is auto-linked by GFM; without an overflow-wrap rule the long
+ // unbreakable token expands past the bubble edge and gets clipped.
+ render(
+
+ );
+
+ const link = screen.getByRole('link');
+ expect(link.className).toContain('[overflow-wrap:anywhere]');
+ expect(link.className).toContain('break-words');
+ });
+
test('opens workspace links through the Tauri workspace path command', async () => {
render();
diff --git a/app/src/features/conversations/components/AgentMessageBubble.tsx b/app/src/features/conversations/components/AgentMessageBubble.tsx
index 22f55b72e..0abebe4b0 100644
--- a/app/src/features/conversations/components/AgentMessageBubble.tsx
+++ b/app/src/features/conversations/components/AgentMessageBubble.tsx
@@ -76,7 +76,7 @@ function MarkdownAnchor({ href, children }: { href?: string; children?: ReactNod
// Ignore launcher errors from OS URL handler failures.
});
}}
- className="cursor-pointer underline">
+ className="cursor-pointer underline break-words [overflow-wrap:anywhere]">
{children}
);
diff --git a/app/src/features/conversations/components/ChatThreadView.tsx b/app/src/features/conversations/components/ChatThreadView.tsx
index ea5579545..da6d5a892 100644
--- a/app/src/features/conversations/components/ChatThreadView.tsx
+++ b/app/src/features/conversations/components/ChatThreadView.tsx
@@ -877,7 +877,7 @@ export const ChatThreadView = forwardRef
)}
{(displayText || showTime) && (
-