From b5ad775942cb5f04519553f7e371bb98e109bbc2 Mon Sep 17 00:00:00 2001 From: Suchintan Date: Thu, 18 Jun 2026 11:13:00 -0400 Subject: [PATCH] feat(SKY-11150): give terminate actions a distinct terminated visual (amber triangle) (#6693) Co-authored-by: Suchintan Singh --- .../src/components/StatusBadge.tsx | 4 +- .../src/components/terminatedVisual.tsx | 9 ++ .../routes/tasks/detail/ActionCardCompact.tsx | 18 ++- .../routes/tasks/detail/hooks/useActions.ts | 17 ++- .../workflows/components/actionStatus.test.ts | 112 ++++++++++++++++++ .../workflows/components/actionStatus.ts | 39 ++++++ .../workflows/workflowRun/ActionCard.tsx | 21 ++-- .../workflowRun/ActionCardMinimal.tsx | 17 +-- .../workflowRun/ItemStatusIndicator.tsx | 10 ++ .../routes/workflows/workflowRun/RunCard.tsx | 5 +- .../WorkflowRunTimelineBlockItem.tsx | 9 +- .../WorkflowRunTimelineBlockItemMinimal.tsx | 4 +- 12 files changed, 222 insertions(+), 43 deletions(-) create mode 100644 skyvern-frontend/src/components/terminatedVisual.tsx create mode 100644 skyvern-frontend/src/routes/workflows/components/actionStatus.test.ts create mode 100644 skyvern-frontend/src/routes/workflows/components/actionStatus.ts diff --git a/skyvern-frontend/src/components/StatusBadge.tsx b/skyvern-frontend/src/components/StatusBadge.tsx index eaaa5b4d7..1cf0c474f 100644 --- a/skyvern-frontend/src/components/StatusBadge.tsx +++ b/skyvern-frontend/src/components/StatusBadge.tsx @@ -8,7 +8,6 @@ import { CrossCircledIcon, MinusCircledIcon, PauseIcon, - StopIcon, StopwatchIcon, UpdateIcon, } from "@radix-ui/react-icons"; @@ -16,6 +15,7 @@ import { import { Status } from "@/api/types"; import { cn } from "@/util/utils"; +import { TerminatedIcon } from "./terminatedVisual"; import { Badge } from "./ui/badge"; type StatusVariant = @@ -98,7 +98,7 @@ function iconForStatus(status: Status | "pending") { case Status.TimedOut: return ; case Status.Terminated: - return ; + return ; case Status.Skipped: return ; case Status.Paused: diff --git a/skyvern-frontend/src/components/terminatedVisual.tsx b/skyvern-frontend/src/components/terminatedVisual.tsx new file mode 100644 index 000000000..38dbf3524 --- /dev/null +++ b/skyvern-frontend/src/components/terminatedVisual.tsx @@ -0,0 +1,9 @@ +import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; + +// Single source of truth for how a "terminated" outcome looks across the app +// (run timeline, action cards, and the run-history status badge). Swap +// TerminatedIcon / the tone classes here to change it everywhere. +export const TerminatedIcon = ExclamationTriangleIcon; +export const terminatedTone = "text-amber-500"; +export const terminatedBorder = "border-l-amber-500"; +export const terminatedDot = "bg-amber-500"; diff --git a/skyvern-frontend/src/routes/tasks/detail/ActionCardCompact.tsx b/skyvern-frontend/src/routes/tasks/detail/ActionCardCompact.tsx index 4793f220e..6006ffb13 100644 --- a/skyvern-frontend/src/routes/tasks/detail/ActionCardCompact.tsx +++ b/skyvern-frontend/src/routes/tasks/detail/ActionCardCompact.tsx @@ -3,8 +3,9 @@ import { type ActionType, ActionTypes, ReadableActionTypes, - Status, } from "@/api/types"; +import { getActionDisplayKind } from "@/routes/workflows/components/actionStatus"; +import { terminatedDot } from "@/components/terminatedVisual"; import { Collapsible, CollapsibleContent } from "@/components/ui/collapsible"; import { Tooltip, @@ -59,11 +60,7 @@ function ActionCardCompact({ onToggleExpanded, cardClassName, }: Props) { - // wait actions return ActionFailure despite succeeding - const success = - action.action_type === ActionTypes.wait || - action.status === Status.Completed || - action.status === Status.Skipped; + const kind = getActionDisplayKind(action); const reasoningPreview = action.reasoning?.trim() ?? ""; const fromScript = action.created_by === "script"; @@ -88,7 +85,7 @@ function ActionCardCompact({