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'
}
}