| ... | ... | @@ -72,6 +72,7 @@ import { |
| 72 | 72 | CircleAlertIcon, |
| 73 | 73 | CircleCheckIcon, |
| 74 | 74 | CircleDashedIcon, |
| 75 | CircleDotDashedIcon, |
| 75 | 76 | ClockIcon, |
| 76 | 77 | EyeIcon, |
| 77 | 78 | FolderIcon, |
| ... | ... | @@ -1313,7 +1314,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: { |
| 1313 | 1314 | // Waiting is calm background presence (post-settle background |
| 1314 | 1315 | // roster), not active progress, so the label keeps full strength. |
| 1315 | 1316 | label: "Waiting", |
| 1316 | | icon: null, |
| 1317 | icon: "waiting" as const, |
| 1317 | 1318 | className: "text-muted-foreground", |
| 1318 | 1319 | } |
| 1319 | 1320 | : status === "approval" |
| ... | ... | @@ -2061,6 +2062,8 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: { |
| 2061 | 2062 | > |
| 2062 | 2063 | {topStatus.icon === "working" ? ( |
| 2063 | 2064 | <CircleDashedIcon aria-hidden className="size-4 shrink-0" /> |
| 2065 | ) : topStatus.icon === "waiting" ? ( |
| 2066 | <CircleDotDashedIcon aria-hidden className="size-4 shrink-0" /> |
| 2064 | 2067 | ) : topStatus.icon === "input" ? ( |
| 2065 | 2068 | <MessageCircleQuestionIcon aria-hidden className="size-4 shrink-0" /> |
| 2066 | 2069 | ) : topStatus.icon === "approval" ? ( |
| ... | ... | @@ -2078,6 +2081,12 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: { |
| 2078 | 2081 | <span aria-hidden> |
| 2079 | 2082 | <WorkingDuration startedAt={resolveWorkingStartedAt(thread)} /> |
| 2080 | 2083 | </span> |
| 2084 | ) : status === "waiting" ? ( |
| 2085 | // Waiting starts when the turn ends and background |
| 2086 | // work keeps the thread held. |
| 2087 | <span aria-hidden> |
| 2088 | <WorkingDuration startedAt={thread.latestRun?.completedAt ?? null} /> |
| 2089 | </span> |
| 2081 | 2090 | ) : null} |
| 2082 | 2091 | </span> |
| 2083 | 2092 | ) |