| ... | @@ -388,6 +388,9 @@ export function ThreadRelationshipsPanel(props: { | ... | @@ -388,6 +388,9 @@ export function ThreadRelationshipsPanel(props: { |
| 388 | agent?.origin === "app_owned" && | 388 | agent?.origin === "app_owned" && |
| 389 | agent.startedAt && | 389 | agent.startedAt && |
| 390 | ["pending", "running", "waiting"].includes(agent.status); | 390 | ["pending", "running", "waiting"].includes(agent.status); |
| | 391 | const trailingVisibilityClass = canStop |
| | 392 | ? "group-hover:opacity-0 group-focus-within:opacity-0 pointer-coarse:opacity-0 [@media(hover:none)]:opacity-0" |
| | 393 | : ""; |
| 391 | const threadTitle = relationshipThreadTitle({ | 394 | const threadTitle = relationshipThreadTitle({ |
| 392 | title: node?.thread?.title ?? agent?.title ?? threadId, | 395 | title: node?.thread?.title ?? agent?.title ?? threadId, |
| 393 | isSubagent, | 396 | isSubagent, |
| ... | @@ -444,13 +447,13 @@ export function ThreadRelationshipsPanel(props: { | ... | @@ -444,13 +447,13 @@ export function ThreadRelationshipsPanel(props: { |
| 444 | carries status, so an agent with a known time shows only that. */} | 447 | carries status, so an agent with a known time shows only that. */} |
| 445 | {agent && !failed && deriveSubagentElapsedMs(agent, 0) !== null ? ( | 448 | {agent && !failed && deriveSubagentElapsedMs(agent, 0) !== null ? ( |
| 446 | <span | 449 | <span |
| 447 | className={`shrink-0 text-2xs font-normal tabular-nums text-muted-foreground ${canStop ? "group-hover:opacity-0 group-focus-within:opacity-0 pointer-coarse:opacity-0 [@media(hover:none)]:opacity-0" : ""}`} | 450 | className={`shrink-0 text-2xs font-normal tabular-nums text-muted-foreground ${trailingVisibilityClass}`} |
| 448 | > | 451 | > |
| 449 | <AgentElapsed agent={agent} compact /> | 452 | <AgentElapsed agent={agent} compact /> |
| 450 | </span> | 453 | </span> |
| 451 | ) : !isMergeTarget ? ( | 454 | ) : !isMergeTarget ? ( |
| 452 | <span | 455 | <span |
| 453 | className={`shrink-0 text-2xs ${failed ? "text-destructive" : "text-muted-foreground"}`} | 456 | className={`shrink-0 text-2xs ${failed ? "text-destructive" : "text-muted-foreground"} ${trailingVisibilityClass}`} |
| 454 | > | 457 | > |
| 455 | {threadRelationshipStatusLabel(status)} | 458 | {threadRelationshipStatusLabel(status)} |
| 456 | </span> | 459 | </span> |
| ... | @@ -458,7 +461,10 @@ export function ThreadRelationshipsPanel(props: { | ... | @@ -458,7 +461,10 @@ export function ThreadRelationshipsPanel(props: { |
| 458 | </> | 461 | </> |
| 459 | ); | 462 | ); |
| 460 | return ( | 463 | return ( |
| 461 | <li key={threadId} className="group relative flex h-8 items-center rounded-lg"> | 464 | <li |
| | 465 | key={threadId} |
| | 466 | className={`group relative flex h-8 items-center rounded-lg ${canStop ? THREAD_DETAILS_PANEL_LINK_SPLIT_GROUP_CLASS : ""}`} |
| | 467 | > |
| 462 | {isMergeTarget ? ( | 468 | {isMergeTarget ? ( |
| 463 | <div className={THREAD_DETAILS_PANEL_LINK_SPLIT_GROUP_CLASS}> | 469 | <div className={THREAD_DETAILS_PANEL_LINK_SPLIT_GROUP_CLASS}> |
| 464 | <Tooltip> | 470 | <Tooltip> |
| ... | @@ -528,7 +534,7 @@ export function ThreadRelationshipsPanel(props: { | ... | @@ -528,7 +534,7 @@ export function ThreadRelationshipsPanel(props: { |
| 528 | variant="ghost" | 534 | variant="ghost" |
| 529 | disabled={node?.missing === true} | 535 | disabled={node?.missing === true} |
| 530 | onClick={() => openThread(threadId)} | 536 | onClick={() => openThread(threadId)} |
| 531 | part="row" | 537 | part={canStop ? "group-row" : "row"} |
| 532 | /> | 538 | /> |
| 533 | } | 539 | } |
| 534 | > | 540 | > |