authorgravatar for maria@kuuro.netmaria <maria@kuuro.net> 2026-10-15 03:32:02+00:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-15 03:32:02+00:00
loge536bfd33bc3c351997141d93790df75eeded7b9
tree0d0a7fa2429b1eba67e12f8a8fd49943db857327
parent21bedfb175b9eec8652adc35d7882bdc3c3c9d59
signature Signed by PGP key B5690EEEBB952194

feat(web,mobile): waiting status shows a dot-dashed icon and a timer (#19617)


3 files changed, 12 insertions(+), 2 deletions(-)

apps/mobile/src/components/AppSymbol.tsx+1
...@@ -175,6 +175,7 @@ const ANDROID_ICON_BY_SF_SYMBOL = {...@@ -175,6 +175,7 @@ const ANDROID_ICON_BY_SF_SYMBOL = {
175 circle: IconCircle,175 circle: IconCircle,
176 "circle.dashed": IconCircleDashed,176 "circle.dashed": IconCircleDashed,
177 "circle.inset.filled": IconCircleDot,177 "circle.inset.filled": IconCircleDot,
178 "circle.dashed.inset.filled": IconCircleDot,
178 clock: IconClock,179 clock: IconClock,
179 timer: IconClock,180 timer: IconClock,
180 ticket: IconTicket,181 ticket: IconTicket,
apps/mobile/src/features/threads/thread-list-v2-items.tsx+1-1
...@@ -92,7 +92,7 @@ const STATUS_LABEL_BY_STATUS: Partial<Record<ThreadListV2Status, StatusLabel>> =...@@ -92,7 +92,7 @@ const STATUS_LABEL_BY_STATUS: Partial<Record<ThreadListV2Status, StatusLabel>> =
92 },92 },
93 waiting: {93 waiting: {
94 label: "Waiting",94 label: "Waiting",
95 icon: "clock",95 icon: "circle.dashed.inset.filled",
96 className: "text-foreground-muted",96 className: "text-foreground-muted",
97 iconTintClassName: "accent-foreground-muted",97 iconTintClassName: "accent-foreground-muted",
98 },98 },
apps/web/src/components/Sidebar.tsx+10-1
...@@ -72,6 +72,7 @@ import {...@@ -72,6 +72,7 @@ import {
72 CircleAlertIcon,72 CircleAlertIcon,
73 CircleCheckIcon,73 CircleCheckIcon,
74 CircleDashedIcon,74 CircleDashedIcon,
75 CircleDotDashedIcon,
75 ClockIcon,76 ClockIcon,
76 EyeIcon,77 EyeIcon,
77 FolderIcon,78 FolderIcon,
...@@ -1313,7 +1314,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {...@@ -1313,7 +1314,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
1313 // Waiting is calm background presence (post-settle background1314 // Waiting is calm background presence (post-settle background
1314 // roster), not active progress, so the label keeps full strength.1315 // roster), not active progress, so the label keeps full strength.
1315 label: "Waiting",1316 label: "Waiting",
1316 icon: null,1317 icon: "waiting" as const,
1317 className: "text-muted-foreground",1318 className: "text-muted-foreground",
1318 }1319 }
1319 : status === "approval"1320 : status === "approval"
...@@ -2061,6 +2062,8 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {...@@ -2061,6 +2062,8 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
2061 >2062 >
2062 {topStatus.icon === "working" ? (2063 {topStatus.icon === "working" ? (
2063 <CircleDashedIcon aria-hidden className="size-4 shrink-0" />2064 <CircleDashedIcon aria-hidden className="size-4 shrink-0" />
2065 ) : topStatus.icon === "waiting" ? (
2066 <CircleDotDashedIcon aria-hidden className="size-4 shrink-0" />
2064 ) : topStatus.icon === "input" ? (2067 ) : topStatus.icon === "input" ? (
2065 <MessageCircleQuestionIcon aria-hidden className="size-4 shrink-0" />2068 <MessageCircleQuestionIcon aria-hidden className="size-4 shrink-0" />
2066 ) : topStatus.icon === "approval" ? (2069 ) : topStatus.icon === "approval" ? (
...@@ -2078,6 +2081,12 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {...@@ -2078,6 +2081,12 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
2078 <span aria-hidden>2081 <span aria-hidden>
2079 <WorkingDuration startedAt={resolveWorkingStartedAt(thread)} />2082 <WorkingDuration startedAt={resolveWorkingStartedAt(thread)} />
2080 </span>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 ) : null}2090 ) : null}
2082 </span>2091 </span>
2083 )2092 )