@@ -229,6 +211,7 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
// active-state pattern) so the lift is symmetric across themes.
'cursor-pointer rounded-sm hover:bg-black/[0.06] dark:hover:bg-accent/30'
)}
+ title={tsParts.length > 0 ? tsParts.join(' • ') : undefined}
>
{/* Why: state indicator lives in the leading gutter so the user's
@@ -240,9 +223,9 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
overpowering the prompt text. */}
-
+
{/* Why: identity (Claude/Codex/Gemini/…) sits inline with the prompt
so the reader gets "state → who → what they said" left-to-right
@@ -251,7 +234,7 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
them — keeping the icon only on the prompt row lets the sub-rows
indent under the prompt text cleanly. */}
{!hideIdentityIcon && (
-
+
)}
@@ -413,7 +396,9 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
{toolName}
{!expanded && toolInput && (
- {toolInput}
+
+ {toolInput}
+
)}
{/* Why: grid-rows [0fr]→[1fr] is the CSS-only height animation
@@ -474,6 +459,7 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
!expanded &&
'truncate whitespace-nowrap [&_*]:inline [&_*]:!whitespace-nowrap [&_*]:!m-0 [&_*]:!p-0 [&_ul]:list-none [&_ol]:list-none [&_br]:hidden'
)}
+ title={!expanded ? lastAssistantMessage : undefined}
/>
) : (
!expanded && (
@@ -482,35 +468,6 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
)}
)
-
- return (
-