diff --git a/apps/agent/components/ai-elements/run-result-dialog.tsx b/apps/agent/components/ai-elements/run-result-dialog.tsx index f9c870af..e8258f60 100644 --- a/apps/agent/components/ai-elements/run-result-dialog.tsx +++ b/apps/agent/components/ai-elements/run-result-dialog.tsx @@ -6,6 +6,7 @@ import { CheckCircle2, Copy, Loader2, + Play, XCircle, } from 'lucide-react' import { type FC, useState } from 'react' @@ -27,6 +28,7 @@ interface RunResultDialogProps { run: ScheduledJobRun | null jobName?: string onOpenChange: (open: boolean) => void + onRetry?: () => void } const formatDateTime = (dateStr: string) => @@ -46,6 +48,7 @@ export const RunResultDialog: FC = ({ run, jobName, onOpenChange, + onRetry, }) => { const [copied, setCopied] = useState(false) @@ -56,6 +59,11 @@ export const RunResultDialog: FC = ({ setTimeout(() => setCopied(false), 2000) } + const handleRetry = () => { + onRetry?.() + onOpenChange(false) + } + if (!run) return null return ( @@ -118,6 +126,12 @@ export const RunResultDialog: FC = ({ )} )} + {run.status === 'failed' && onRetry && ( + + )} diff --git a/apps/agent/entrypoints/newtab/index/ScheduleResults.tsx b/apps/agent/entrypoints/newtab/index/ScheduleResults.tsx index 5a2744b6..521a415e 100644 --- a/apps/agent/entrypoints/newtab/index/ScheduleResults.tsx +++ b/apps/agent/entrypoints/newtab/index/ScheduleResults.tsx @@ -19,6 +19,7 @@ import { CollapsibleTrigger, } from '@/components/ui/collapsible' import { + SCHEDULED_TASK_TESTED_EVENT, SCHEDULED_TASK_VIEW_MORE_IN_NEWTAB_EVENT, SCHEDULED_TASK_VIEW_RESULTS_IN_NEWTAB_EVENT, } from '@/lib/constants/analyticsEvents' @@ -58,7 +59,7 @@ export const ScheduleResults: FC = () => { const [viewingRun, setViewingRun] = useState(null) const { jobRuns } = useScheduledJobRuns() - const { jobs } = useScheduledJobs() + const { jobs, runJob } = useScheduledJobs() const runningCount = jobRuns.filter((r) => r.status === 'running').length @@ -93,6 +94,11 @@ export const ScheduleResults: FC = () => { setViewingRun(run) } + const handleRetry = async (jobId: string) => { + await runJob(jobId) + track(SCHEDULED_TASK_TESTED_EVENT) + } + return ( { run={viewingRun} jobName={viewingRun?.job?.name} onOpenChange={(open) => !open && setViewingRun(null)} + onRetry={viewingRun ? () => handleRetry(viewingRun.jobId) : undefined} /> ) diff --git a/apps/agent/entrypoints/options/scheduled-tasks/ScheduledTasksPage.tsx b/apps/agent/entrypoints/options/scheduled-tasks/ScheduledTasksPage.tsx index 8b5d632c..05c11303 100644 --- a/apps/agent/entrypoints/options/scheduled-tasks/ScheduledTasksPage.tsx +++ b/apps/agent/entrypoints/options/scheduled-tasks/ScheduledTasksPage.tsx @@ -126,6 +126,7 @@ export const ScheduledTasksPage: FC = () => { : undefined } onOpenChange={(open) => !open && setViewingRun(null)} + onRetry={viewingRun ? () => handleRun(viewingRun.jobId) : undefined} />