diff --git a/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimeline.tsx b/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimeline.tsx
index 4a3ca154..eeb4dc69 100644
--- a/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimeline.tsx
+++ b/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimeline.tsx
@@ -17,6 +17,7 @@ import {
WorkflowRunOverviewActiveElement,
} from "@/routes/workflows/workflowRun/WorkflowRunOverview";
import { WorkflowRunTimelineBlockItem } from "@/routes/workflows/workflowRun/WorkflowRunTimelineBlockItem";
+import { cn } from "@/util/utils";
type Props = {
activeItem: WorkflowRunOverviewActiveElement;
@@ -54,8 +55,15 @@ function DebuggerRunTimeline({
return total + 0;
}, 0);
+ const firstActionOrThoughtIsPending =
+ !workflowRunIsFinalized && workflowRunTimeline.length === 0;
+
return (
-
+
Actions: {numberOfActions}
@@ -64,40 +72,55 @@ function DebuggerRunTimeline({
Steps: {workflowRun.total_steps ?? 0}
- {!workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
-
- )}
{workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
Workflow timeline is empty
)}
- {workflowRunTimeline?.map((timelineItem) => {
+ {!workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
+
+ Formulating actions...
+
+ )}
+ {workflowRunTimeline?.map((timelineItem, i) => {
if (isBlockItem(timelineItem)) {
return (
-
+ >
+
+
);
}
if (isThoughtItem(timelineItem)) {
return (
-
+ >
+
+
);
}
})}
diff --git a/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimelineMinimal.tsx b/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimelineMinimal.tsx
index 274fe826..b18822ed 100644
--- a/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimelineMinimal.tsx
+++ b/skyvern-frontend/src/routes/workflows/debugger/DebuggerRunTimelineMinimal.tsx
@@ -6,6 +6,7 @@ import { useWorkflowRunTimelineQuery } from "../hooks/useWorkflowRunTimelineQuer
import { isBlockItem, isThoughtItem } from "../types/workflowRunTypes";
import { ThoughtCardMinimal } from "@/routes/workflows/workflowRun/ThoughtCardMinimal";
import { WorkflowRunTimelineBlockItemMinimal } from "@/routes/workflows/workflowRun/WorkflowRunTimelineBlockItemMinimal";
+import { cn } from "@/util/utils";
function DebuggerRunTimelineMinimal() {
const { data: workflowRun, isLoading: workflowRunIsLoading } =
@@ -27,7 +28,15 @@ function DebuggerRunTimelineMinimal() {
return (
{!workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
-
+
+ {/* rotate this by 90 degrees */}
+
+ formulating actions...
+
+
)}
@@ -35,22 +44,35 @@ function DebuggerRunTimelineMinimal() {
{workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
-
)}
- {workflowRunTimeline?.map((timelineItem) => {
+ {workflowRunTimeline?.map((timelineItem, i) => {
if (isBlockItem(timelineItem)) {
return (
-
+ className={cn({
+ "animate-pulse": !workflowRunIsFinalized && i === 0,
+ })}
+ >
+
+
);
}
if (isThoughtItem(timelineItem)) {
return (
-
+ className={cn({
+ "animate-pulse": !workflowRunIsFinalized && i === 0,
+ })}
+ >
+
+
);
}
})}
diff --git a/skyvern-frontend/src/routes/workflows/editor/workspace-styles.css b/skyvern-frontend/src/routes/workflows/editor/workspace-styles.css
index d00bfab4..27796413 100644
--- a/skyvern-frontend/src/routes/workflows/editor/workspace-styles.css
+++ b/skyvern-frontend/src/routes/workflows/editor/workspace-styles.css
@@ -1,3 +1,14 @@
+.vertical-line-gradient-soft {
+ background: linear-gradient(
+ to bottom,
+ transparent 0%,
+ rgba(51, 65, 85, 0.1) 20%,
+ rgba(51, 65, 85, 0.5) 50%,
+ rgba(51, 65, 85, 0.1) 80%,
+ transparent 100%
+ );
+}
+
.vertical-line-gradient {
background: linear-gradient(
to bottom,
diff --git a/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCard.tsx b/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCard.tsx
index f98adc3a..1291494b 100644
--- a/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCard.tsx
+++ b/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCard.tsx
@@ -38,16 +38,19 @@ function ThoughtCard({ thought, onClick, active }: Props) {
- Thought
+ {(thought.answer || thought.thought) && Thought}
+ {!thought.answer && !thought.thought && Thinking}
Decision
-
- {thought.answer || thought.thought}
-
+ {(thought.answer || thought.thought) && (
+
+ {thought.answer || thought.thought}
+
+ )}
);
}
diff --git a/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCardMinimal.tsx b/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCardMinimal.tsx
index c9f91ee9..62358296 100644
--- a/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCardMinimal.tsx
+++ b/skyvern-frontend/src/routes/workflows/workflowRun/ThoughtCardMinimal.tsx
@@ -8,7 +8,7 @@ type Props = {
function ThoughtCardMinimal({ thought }: Props) {
return (
-
+
);
diff --git a/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItemMinimal.tsx b/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItemMinimal.tsx
index 8d3b3dce..060a6422 100644
--- a/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItemMinimal.tsx
+++ b/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItemMinimal.tsx
@@ -11,6 +11,7 @@ import { ActionCardMinimal } from "./ActionCardMinimal";
import { Status } from "@/api/types";
import { ThoughtCardMinimal } from "./ThoughtCardMinimal";
import { ItemStatusIndicator } from "./ItemStatusIndicator";
+import { cn } from "@/util/utils";
type Props = {
block: WorkflowRunBlock;
@@ -30,7 +31,11 @@ function WorkflowRunTimelineBlockItemMinimal({ block, subItems }: Props) {
block.status === Status.Canceled);
return (
-