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) && ( -
+
{displayText && ( )}