@mastra/playground-ui 60.0.0-alpha.1 → 60.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,12 +23,12 @@ function selectUniqueRuns(data) {
23
23
  return true;
24
24
  });
25
25
  }
26
- const useWorkflowRuns = (workflowId, { enabled = true } = {}) => {
26
+ const useWorkflowRuns = (workflowId, { enabled = true, summary = false } = {}) => {
27
27
  const client = react.useMastraClient();
28
28
  const { inView: isEndOfListInView, setRef: setEndOfListElement } = hooks_useInView.useInView();
29
29
  const query = reactQuery.useInfiniteQuery({
30
- queryKey: ["workflow-runs", workflowId],
31
- queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),
30
+ queryKey: ["workflow-runs", workflowId, { summary }],
31
+ queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...summary ? { summary: true } : {} }),
32
32
  initialPageParam: 0,
33
33
  getNextPageParam: getWorkflowRunsNextPageParam,
34
34
  select: selectUniqueRuns,
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-runs.cjs.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\nexport const useWorkflowRuns = (workflowId: string, { enabled = true }: { enabled?: boolean } = {}) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId],\n queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":["useMastraClient","useInView","useInfiniteQuery","useEffect","useQuery","useQueryClient","useMutation","toast"],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-runs.cjs.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\n/**\n * `summary: true` asks the server to reduce each run snapshot to `{ status, timestamp }`,\n * avoiding transfer of full snapshots when only list metadata is displayed.\n */\nexport const useWorkflowRuns = (\n workflowId: string,\n { enabled = true, summary = false }: { enabled?: boolean; summary?: boolean } = {},\n) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId, { summary }],\n queryFn: ({ pageParam }) =>\n client\n .getWorkflow(workflowId)\n .runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...(summary ? { summary: true } : {}) }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":["useMastraClient","useInView","useInfiniteQuery","useEffect","useQuery","useQueryClient","useMutation","toast"],"mappings":"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"}
@@ -19,12 +19,12 @@ function selectUniqueRuns(data) {
19
19
  return true;
20
20
  });
21
21
  }
22
- const useWorkflowRuns = (workflowId, { enabled = true } = {}) => {
22
+ const useWorkflowRuns = (workflowId, { enabled = true, summary = false } = {}) => {
23
23
  const client = useMastraClient();
24
24
  const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();
25
25
  const query = useInfiniteQuery({
26
- queryKey: ["workflow-runs", workflowId],
27
- queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),
26
+ queryKey: ["workflow-runs", workflowId, { summary }],
27
+ queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...summary ? { summary: true } : {} }),
28
28
  initialPageParam: 0,
29
29
  getNextPageParam: getWorkflowRunsNextPageParam,
30
30
  select: selectUniqueRuns,
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-runs.es.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\nexport const useWorkflowRuns = (workflowId: string, { enabled = true }: { enabled?: boolean } = {}) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId],\n queryFn: ({ pageParam }) => client.getWorkflow(workflowId).runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-runs.es.js","sources":["../../../../src/domains/workflows/hooks/use-workflow-runs.ts"],"sourcesContent":["import type { GetWorkflowRunByIdResponse, MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { UseMutationResult, UseQueryOptions } from '@tanstack/react-query';\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useInView } from '@/hooks/use-in-view';\nimport { toast } from '@/utils/toast';\n\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\n\nexport const PER_PAGE = 20;\n\nexport function getWorkflowRunsNextPageParam(lastPage: WorkflowRuns, _allPages: unknown, lastPageParam: number) {\n if (lastPage.runs.length < PER_PAGE) {\n return undefined;\n }\n return lastPageParam + 1;\n}\n\nexport function selectUniqueRuns(data: { pages: WorkflowRuns[] }) {\n const seen = new Set<string>();\n return data.pages\n .flatMap(page => page.runs)\n .filter(run => {\n if (seen.has(run.runId)) return false;\n seen.add(run.runId);\n return true;\n });\n}\n\n/**\n * `summary: true` asks the server to reduce each run snapshot to `{ status, timestamp }`,\n * avoiding transfer of full snapshots when only list metadata is displayed.\n */\nexport const useWorkflowRuns = (\n workflowId: string,\n { enabled = true, summary = false }: { enabled?: boolean; summary?: boolean } = {},\n) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const query = useInfiniteQuery({\n queryKey: ['workflow-runs', workflowId, { summary }],\n queryFn: ({ pageParam }) =>\n client\n .getWorkflow(workflowId)\n .runs({ limit: PER_PAGE, offset: pageParam * PER_PAGE, ...(summary ? { summary: true } : {}) }),\n initialPageParam: 0,\n getNextPageParam: getWorkflowRunsNextPageParam,\n select: selectUniqueRuns,\n retry: false,\n enabled,\n refetchInterval: 5000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { ...query, setEndOfListElement };\n};\n\nexport const workflowRunQueryKey = (workflowId: string, runId: string) => ['workflow-run', workflowId, runId] as const;\n\nexport const useWorkflowRun = (\n workflowId: string,\n runId: string,\n refetchInterval?: UseQueryOptions<GetWorkflowRunByIdResponse>['refetchInterval'],\n) => {\n const client = useMastraClient();\n return useQuery({\n queryKey: workflowRunQueryKey(workflowId, runId),\n queryFn: () => client.getWorkflow(workflowId).runById(runId),\n enabled: Boolean(workflowId && runId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval,\n });\n};\n\nexport const useDeleteWorkflowRun = (workflowId: string): UseMutationResult<unknown, Error, { runId: string }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ runId }: { runId: string }) => client.getWorkflow(workflowId).deleteRunById(runId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['workflow-runs', workflowId] });\n toast.success('Workflow run deleted successfully');\n },\n onError: () => {\n toast.error('Failed to delete workflow run');\n },\n });\n};\n"],"names":[],"mappings":"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"}
@@ -21,17 +21,15 @@ const utils_dateFormat = require('../../../utils/date-format.cjs.js');
21
21
 
22
22
  const runSnapshotSchema = zod.z.object({
23
23
  status: zod.z.enum(["running", "failed", "canceled", "pending", "waiting", "paused", "suspended", "success"]),
24
- timestamp: zod.z.number().optional(),
25
- context: zod.z.object({ input: zod.z.unknown() })
24
+ timestamp: zod.z.number().optional()
26
25
  });
27
26
  const wrappedRunInputSchema = zod.z.object({ output: zod.z.unknown() });
28
27
  function parseRunSnapshot(snapshot) {
29
28
  const result = runSnapshotSchema.safeParse(snapshot);
30
29
  return result.success ? result.data : void 0;
31
30
  }
32
- function formatRunInput(snapshot) {
33
- if (!snapshot || snapshot.context.input == null) return null;
34
- const input = snapshot.context.input;
31
+ function formatRunInput(input) {
32
+ if (input == null) return null;
35
33
  const parsedString = zod.z.string().safeParse(input);
36
34
  if (parsedString.success) return parsedString.data;
37
35
  const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);
@@ -60,7 +58,9 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
60
58
  setEndOfListElement,
61
59
  isFetchingNextPage,
62
60
  hasNextPage
63
- } = domains_workflows_hooks_useWorkflowRuns.useWorkflowRuns(workflowId);
61
+ } = domains_workflows_hooks_useWorkflowRuns.useWorkflowRuns(workflowId, { summary: true });
62
+ const { data: activeRun } = domains_workflows_hooks_useWorkflowRuns.useWorkflowRun(workflowId, runId ?? "");
63
+ const activeRunInput = formatRunInput(activeRun?.payload);
64
64
  const { mutateAsync: deleteRun } = domains_workflows_hooks_useWorkflowRuns.useDeleteWorkflowRun(workflowId);
65
65
  const handleDelete = async (runId2) => {
66
66
  try {
@@ -86,7 +86,7 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
86
86
  runList.map((run) => {
87
87
  const isActiveRun = run.runId === runId;
88
88
  const snapshot = parseRunSnapshot(run.snapshot);
89
- const runInput = isActiveRun ? formatRunInput(snapshot) : null;
89
+ const runInput = isActiveRun ? activeRunInput : null;
90
90
  return /* @__PURE__ */ jsxRuntime.jsx(
91
91
  threadList.ThreadListItem,
92
92
  {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-run-list.cjs.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n context: z.object({ input: z.unknown() }),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(snapshot: RunSnapshot | undefined): string | null {\n if (!snapshot || snapshot.context.input == null) return null;\n\n const input = snapshot.context.input;\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? formatRunInput(snapshot) : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["z","jsxs","jsx","formatDate","useState","useLinkComponent","useWorkflowRuns","useDeleteWorkflowRun","runId","Fragment","Collapsible","CollapsibleTrigger","ChevronRight","CollapsibleContent","ScrollArea","Skeleton","ThreadList","ThreadListEmpty","ThreadListItems","ThreadListItem","WorkflowRunStatusIcon","getRunTimestamp","getRunResourceId","Icon","Spinner","AlertDialog"],"mappings":"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"}
1
+ {"version":3,"file":"workflow-run-list.cjs.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(input: unknown): string | null {\n if (input == null) return null;\n\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId, { summary: true });\n // The list only carries summary snapshots; the active run's input comes from the full run.\n const { data: activeRun } = useWorkflowRun(workflowId, runId ?? '');\n const activeRunInput = formatRunInput(activeRun?.payload);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? activeRunInput : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["z","jsxs","jsx","formatDate","useState","useLinkComponent","useWorkflowRuns","useWorkflowRun","useDeleteWorkflowRun","runId","Fragment","Collapsible","CollapsibleTrigger","ChevronRight","CollapsibleContent","ScrollArea","Skeleton","ThreadList","ThreadListEmpty","ThreadListItems","ThreadListItem","WorkflowRunStatusIcon","getRunTimestamp","getRunResourceId","Icon","Spinner","AlertDialog"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import { z } from 'zod';
5
5
  import { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon.es.js';
6
6
  import { getRunResourceId, getRunTimestamp } from '../utils.es.js';
7
- import { useWorkflowRuns, useDeleteWorkflowRun } from '../hooks/use-workflow-runs.es.js';
7
+ import { useWorkflowRuns, useWorkflowRun, useDeleteWorkflowRun } from '../hooks/use-workflow-runs.es.js';
8
8
  import { A as AlertDialog } from '../../../alert-dialog-C21QCl3B.js';
9
9
  import { C as Collapsible, b as CollapsibleTrigger, a as CollapsibleContent } from '../../../collapsible-DhhP5p1j.js';
10
10
  import { S as ScrollArea } from '../../../scroll-area-DyTZoISq.js';
@@ -17,17 +17,15 @@ import { formatDate } from '../../../utils/date-format.es.js';
17
17
 
18
18
  const runSnapshotSchema = z.object({
19
19
  status: z.enum(["running", "failed", "canceled", "pending", "waiting", "paused", "suspended", "success"]),
20
- timestamp: z.number().optional(),
21
- context: z.object({ input: z.unknown() })
20
+ timestamp: z.number().optional()
22
21
  });
23
22
  const wrappedRunInputSchema = z.object({ output: z.unknown() });
24
23
  function parseRunSnapshot(snapshot) {
25
24
  const result = runSnapshotSchema.safeParse(snapshot);
26
25
  return result.success ? result.data : void 0;
27
26
  }
28
- function formatRunInput(snapshot) {
29
- if (!snapshot || snapshot.context.input == null) return null;
30
- const input = snapshot.context.input;
27
+ function formatRunInput(input) {
28
+ if (input == null) return null;
31
29
  const parsedString = z.string().safeParse(input);
32
30
  if (parsedString.success) return parsedString.data;
33
31
  const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);
@@ -56,7 +54,9 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
56
54
  setEndOfListElement,
57
55
  isFetchingNextPage,
58
56
  hasNextPage
59
- } = useWorkflowRuns(workflowId);
57
+ } = useWorkflowRuns(workflowId, { summary: true });
58
+ const { data: activeRun } = useWorkflowRun(workflowId, runId ?? "");
59
+ const activeRunInput = formatRunInput(activeRun?.payload);
60
60
  const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);
61
61
  const handleDelete = async (runId2) => {
62
62
  try {
@@ -82,7 +82,7 @@ const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }) => {
82
82
  runList.map((run) => {
83
83
  const isActiveRun = run.runId === runId;
84
84
  const snapshot = parseRunSnapshot(run.snapshot);
85
- const runInput = isActiveRun ? formatRunInput(snapshot) : null;
85
+ const runInput = isActiveRun ? activeRunInput : null;
86
86
  return /* @__PURE__ */ jsx(
87
87
  ThreadListItem,
88
88
  {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-run-list.es.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n context: z.object({ input: z.unknown() }),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(snapshot: RunSnapshot | undefined): string | null {\n if (!snapshot || snapshot.context.input == null) return null;\n\n const input = snapshot.context.input;\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? formatRunInput(snapshot) : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["runId"],"mappings":"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"}
1
+ {"version":3,"file":"workflow-run-list.es.js","sources":["../../../../src/domains/workflows/runs/workflow-run-list.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { ChevronRight } from 'lucide-react';\nimport { useContext, useState } from 'react';\nimport { z } from 'zod';\nimport { WorkflowRunStatusIcon } from '../components/workflow-run-status-icon';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { getRunResourceId, getRunTimestamp } from '../utils';\nimport { useDeleteWorkflowRun, useWorkflowRun, useWorkflowRuns } from '@/domains/workflows/hooks/use-workflow-runs';\nimport { AlertDialog } from '@/ds/components/AlertDialog';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems } from '@/ds/components/ThreadList';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useLinkComponent } from '@/lib/framework';\nimport { formatDate } from '@/utils/date-format';\n\nexport interface WorkflowRecentRunsProps {\n workflowId: string;\n runId?: string;\n canDelete: boolean;\n}\n\nconst runSnapshotSchema = z.object({\n status: z.enum(['running', 'failed', 'canceled', 'pending', 'waiting', 'paused', 'suspended', 'success']),\n timestamp: z.number().optional(),\n});\nconst wrappedRunInputSchema = z.object({ output: z.unknown() });\ntype RunSnapshot = z.infer<typeof runSnapshotSchema>;\ntype WorkflowRuns = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['runs']>>;\ntype WorkflowRunSnapshot = WorkflowRuns['runs'][number]['snapshot'];\n\nfunction parseRunSnapshot(snapshot: WorkflowRunSnapshot): RunSnapshot | undefined {\n const result = runSnapshotSchema.safeParse(snapshot);\n return result.success ? result.data : undefined;\n}\n\nfunction formatRunInput(input: unknown): string | null {\n if (input == null) return null;\n\n const parsedString = z.string().safeParse(input);\n if (parsedString.success) return parsedString.data;\n\n const parsedWrappedInput = wrappedRunInputSchema.safeParse(input);\n const inputValue = parsedWrappedInput.success ? parsedWrappedInput.data.output : input;\n\n try {\n return JSON.stringify(inputValue);\n } catch {\n return null;\n }\n}\n\nfunction WorkflowRunMeta({ timestamp, resourceId }: { timestamp?: number; resourceId?: string }) {\n if (timestamp === undefined && !resourceId) return null;\n\n return (\n <span className=\"flex w-full min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n {timestamp !== undefined && (\n <time className=\"shrink-0\" dateTime={new Date(timestamp).toISOString()}>\n {formatDate(timestamp, 'date-time')}\n </time>\n )}\n {resourceId && (\n <span className=\"min-w-0 truncate\" title={`Resource ${resourceId}`}>\n {timestamp === undefined ? resourceId : `· ${resourceId}`}\n </span>\n )}\n </span>\n );\n}\n\nexport const WorkflowRecentRuns = ({ workflowId, runId, canDelete: canDeleteRun }: WorkflowRecentRunsProps) => {\n const [isOpen, setIsOpen] = useState(true);\n const [deleteRunId, setDeleteRunId] = useState<string | null>(null);\n\n const { Link, paths, navigate } = useLinkComponent();\n const {\n isLoading,\n error,\n data: runs,\n setEndOfListElement,\n isFetchingNextPage,\n hasNextPage,\n } = useWorkflowRuns(workflowId, { summary: true });\n // The list only carries summary snapshots; the active run's input comes from the full run.\n const { data: activeRun } = useWorkflowRun(workflowId, runId ?? '');\n const activeRunInput = formatRunInput(activeRun?.payload);\n const { mutateAsync: deleteRun } = useDeleteWorkflowRun(workflowId);\n\n const handleDelete = async (runId: string) => {\n try {\n await deleteRun({ runId });\n setDeleteRunId(null);\n navigate(paths.workflowLink(workflowId));\n } catch {\n setDeleteRunId(null);\n }\n };\n\n const runList = runs || [];\n\n return (\n <>\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"flex min-h-0 flex-col\">\n <CollapsibleTrigger className=\"flex shrink-0 items-center gap-2 px-4 py-3 text-left text-caption text-muted-foreground\">\n <ChevronRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground motion-reduce:transition-none\" />\n <span>Recent runs</span>\n {!isLoading && !error && (\n <span className=\"text-meta text-muted-foreground\">\n {runList.length}\n {hasNextPage ? '+' : ''}\n </span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent keepMounted fill className=\"flex min-h-0 flex-col\">\n <ScrollArea className=\"min-h-0 w-full flex-1\" mask={{ top: false }}>\n {isLoading ? (\n <div className=\"p-4\">\n <Skeleton className=\"h-32\" />\n </div>\n ) : (\n <ThreadList aria-label=\"Workflow runs\" embedded>\n {runList.length === 0 ? (\n <ThreadListEmpty>\n {error\n ? 'Unable to load workflow runs.'\n : 'Your run history will appear here once you run the workflow'}\n </ThreadListEmpty>\n ) : (\n <ThreadListItems>\n {runList.map(run => {\n const isActiveRun = run.runId === runId;\n const snapshot = parseRunSnapshot(run.snapshot);\n const runInput = isActiveRun ? activeRunInput : null;\n\n return (\n <ThreadListItem\n key={`run-${run.runId}`}\n as={Link}\n to={paths.workflowRunLink(workflowId, run.runId)}\n isActive={isActiveRun}\n onDelete={canDeleteRun ? () => setDeleteRunId(run.runId) : undefined}\n deleteLabel=\"delete run\"\n className=\"h-auto min-h-0 items-stretch py-1\"\n >\n <span className=\"flex w-full min-w-0 items-center gap-2.5 px-1 text-left\">\n {snapshot && (\n <span className=\"shrink-0\">\n <WorkflowRunStatusIcon status={snapshot.status} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col items-start gap-0.5\">\n <span className=\"flex w-full min-w-0 items-center gap-2 text-caption\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-foreground\" title={run.runId}>\n {run.runId}\n </span>\n </span>\n <WorkflowRunMeta\n timestamp={getRunTimestamp(snapshot?.timestamp)}\n resourceId={getRunResourceId(run)}\n />\n {runInput && (\n <span className=\"block w-full min-w-0 truncate text-caption text-muted-foreground\">\n {runInput}\n </span>\n )}\n </span>\n </span>\n </ThreadListItem>\n );\n })}\n\n {isFetchingNextPage && (\n <li className=\"flex items-center justify-center py-2\">\n <Icon>\n <Spinner />\n </Icon>\n </li>\n )}\n <li>\n <div ref={setEndOfListElement} />\n </li>\n </ThreadListItems>\n )}\n </ThreadList>\n )}\n </ScrollArea>\n </CollapsibleContent>\n </Collapsible>\n\n <DeleteRunDialog\n open={!!deleteRunId}\n onOpenChange={() => setDeleteRunId(null)}\n onDelete={() => {\n if (deleteRunId) {\n void handleDelete(deleteRunId);\n }\n }}\n />\n </>\n );\n};\n\ninterface DeleteRunDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDelete: () => void;\n}\nconst DeleteRunDialog = ({ open, onOpenChange, onDelete }: DeleteRunDialogProps) => {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content>\n <AlertDialog.Header>\n <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n <AlertDialog.Description>\n This action cannot be undone. This will permanently delete the workflow run and remove it from our servers.\n </AlertDialog.Description>\n </AlertDialog.Header>\n <AlertDialog.Footer>\n <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n <AlertDialog.Action onClick={onDelete}>Continue</AlertDialog.Action>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog>\n );\n};\n"],"names":["runId"],"mappings":"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"}
@@ -17,8 +17,13 @@ export declare function selectUniqueRuns(data: {
17
17
  }, "snapshot"> & {
18
18
  snapshot: string | import('@mastra/core/workflows').WorkflowRunState;
19
19
  })[];
20
- export declare const useWorkflowRuns: (workflowId: string, { enabled }?: {
20
+ /**
21
+ * `summary: true` asks the server to reduce each run snapshot to `{ status, timestamp }`,
22
+ * avoiding transfer of full snapshots when only list metadata is displayed.
23
+ */
24
+ export declare const useWorkflowRuns: (workflowId: string, { enabled, summary }?: {
21
25
  enabled?: boolean;
26
+ summary?: boolean;
22
27
  }) => {
23
28
  setEndOfListElement: import('react').Dispatch<import('react').SetStateAction<HTMLDivElement | null>>;
24
29
  data: (Omit<{
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/playground-ui",
3
3
  "type": "module",
4
- "version": "60.0.0-alpha.1",
4
+ "version": "60.0.0-alpha.3",
5
5
  "description": "Mastra Playground components",
6
6
  "sideEffects": [
7
7
  "**/*.css"
@@ -206,8 +206,8 @@
206
206
  "react": ">=19.0.0",
207
207
  "react-dom": ">=19.0.0",
208
208
  "tailwindcss": "^4.0.0",
209
- "@mastra/react": "1.7.0-alpha.1",
210
- "@mastra/client-js": "^1.51.0-alpha.1"
209
+ "@mastra/client-js": "^1.51.0-alpha.3",
210
+ "@mastra/react": "1.7.0-alpha.3"
211
211
  },
212
212
  "devDependencies": {
213
213
  "@storybook/addon-a11y": "^10.6.0",
@@ -251,11 +251,11 @@
251
251
  "vite-plugin-lib-inject-css": "^2.2.2",
252
252
  "vitest": "4.1.11",
253
253
  "@internal/lint": "0.0.137",
254
- "@mastra/client-js": "^1.51.0-alpha.1",
255
- "@mastra/core": "1.72.0-alpha.1",
256
- "@mastra/memory": "1.32.2-alpha.1",
257
- "@mastra/react": "1.7.0-alpha.1",
258
- "@mastra/schema-compat": "1.3.12-alpha.0"
254
+ "@mastra/memory": "1.33.0-alpha.2",
255
+ "@mastra/schema-compat": "1.3.12-alpha.0",
256
+ "@mastra/react": "1.7.0-alpha.3",
257
+ "@mastra/core": "1.72.0-alpha.3",
258
+ "@mastra/client-js": "^1.51.0-alpha.3"
259
259
  },
260
260
  "homepage": "https://mastra.ai",
261
261
  "repository": {