import type { StudioTask } from '../protocol/studio-agent-types' import { translateTaskStatus, translateTaskType } from '../labels' import { formatStudioTime } from '../theme' import { useI18n } from '../../i18n' interface StudioTaskTimelineProps { tasks: StudioTask[] } export function StudioTaskTimeline({ tasks }: StudioTaskTimelineProps) { const { t } = useI18n() if (!tasks.length) { return
{t('studio.timeline.empty')}
} return (
{tasks.map((task, index) => (
0 ? 'mt-4' : ''}`}>
{task.title}
{translateTaskType(task.type, t)} · {translateTaskStatus(task.status, t)} · {formatStudioTime(task.updatedAt)}
{task.detail &&
{task.detail}
}
))}
) } function taskDotColor(status: string) { switch (status) { case 'running': return 'bg-emerald-500' case 'completed': return 'bg-sky-500' case 'failed': return 'bg-rose-500' case 'queued': case 'pending_confirmation': return 'bg-amber-500' default: return 'bg-text-secondary/30' } }