diff --git a/apps/studio/src/components/RunEvalModal.tsx b/apps/studio/src/components/RunEvalModal.tsx index 5a17fc85e..db7bd0d13 100644 --- a/apps/studio/src/components/RunEvalModal.tsx +++ b/apps/studio/src/components/RunEvalModal.tsx @@ -14,6 +14,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useNavigate } from '@tanstack/react-router'; import { launchEvalRun, previewEvalCommand, @@ -40,6 +41,7 @@ export interface RunEvalModalProps { export function RunEvalModal({ open, onClose, benchmarkId, prefill }: RunEvalModalProps) { const queryClient = useQueryClient(); + const navigate = useNavigate(); // Form state const [suiteFilter, setSuiteFilter] = useState(prefill?.suiteFilter ?? ''); @@ -148,9 +150,18 @@ export function RunEvalModal({ open, onClose, benchmarkId, prefill }: RunEvalMod // ── Active run view ──────────────────────────────────────────────────── if (activeRunId && runStatus) { + function handleRunInBackground() { + onClose(); + navigate({ to: '/', search: { tab: 'runs' } as Record }); + } return ( - + ); } @@ -392,9 +403,13 @@ function ModalShell({ function RunStatusView({ status, onClose, + onRunInBackground, + runId, }: { status: import('~/lib/types').EvalRunStatus; onClose: () => void; + onRunInBackground?: () => void; + runId?: string; }) { const isTerminal = status.status === 'finished' || status.status === 'failed'; @@ -437,12 +452,26 @@ function RunStatusView({ )} - {isTerminal && ( -
- - Exit code: {status.exit_code} - {status.finished_at && ` · ${new Date(status.finished_at).toLocaleTimeString()}`} - +
+ + {isTerminal ? ( + <> + Exit code: {status.exit_code} + {status.finished_at && ` · ${new Date(status.finished_at).toLocaleTimeString()}`} + + ) : ( + runId && ( + + ) + )} + + {isTerminal && ( -
- )} + )} +
); } diff --git a/apps/studio/src/components/Sidebar.tsx b/apps/studio/src/components/Sidebar.tsx index a0886eba7..3bc35f0fd 100644 --- a/apps/studio/src/components/Sidebar.tsx +++ b/apps/studio/src/components/Sidebar.tsx @@ -23,6 +23,7 @@ import { useBenchmarkRunDetail, useBenchmarkRunList, useCategorySuites, + useEvalRuns, useExperiments, useRunDetail, useRunList, @@ -166,12 +167,23 @@ function RunSidebar() { const { data: aggregatedData } = useAllBenchmarkRuns(); const data = useAggregated ? aggregatedData : localData; + const { data: evalRunsData } = useEvalRuns(); + const activeRunCount = (evalRunsData?.runs ?? []).filter( + (r) => r.status === 'starting' || r.status === 'running', + ).length; + return (
AgentV Studio + {activeRunCount > 0 && ( + + + {activeRunCount} + + )}