diff --git a/ui-tui-opentui-v2/src/view/messageLine.tsx b/ui-tui-opentui-v2/src/view/messageLine.tsx
index 0fa345506e8..612f2b92706 100644
--- a/ui-tui-opentui-v2/src/view/messageLine.tsx
+++ b/ui-tui-opentui-v2/src/view/messageLine.tsx
@@ -56,7 +56,10 @@ export function MessageLine(props: { message: Message }) {
+ // themed selection: a solid muted/accent bar that preserves the
+ // text fg (no selectionFg → the original color shows through, so a
+ // highlight over content reads as a clean bar, not SGR-inverse).
+
{m().text}
}
diff --git a/ui-tui-opentui-v2/src/view/toolPart.tsx b/ui-tui-opentui-v2/src/view/toolPart.tsx
index 6f44d1b25b3..5dc1a4c4d6f 100644
--- a/ui-tui-opentui-v2/src/view/toolPart.tsx
+++ b/ui-tui-opentui-v2/src/view/toolPart.tsx
@@ -148,7 +148,7 @@ export function ToolPart(props: { part: ToolPartState }) {
fallback={
{line => (
-
+
{truncate(line, bodyWidth() - 2)}
)}
@@ -157,7 +157,7 @@ export function ToolPart(props: { part: ToolPartState }) {
>
{([k, v]) => (
-
+
{truncate(argLine(k, v), bodyWidth() - 2)}
)}
@@ -176,9 +176,11 @@ export function ToolPart(props: { part: ToolPartState }) {
output
+ {/* output body lines are the copyable content → themed selection bar
+ (preserves fg; same token as message text) (item: theme highlight). */}
{line => (
-
+
{line}
)}