import { loadConfig } from '../core/config.js'; import { listTasks } from '../core/services/taskService.js'; import { agentAvatar, designTokensCss, escapeHtml, appHeader, appHeaderCss, taskModalHtml, appHeaderJs } from './ui-shared.js'; import type { IndexEntry } from '../core/index.js'; function compactDuration(ms: number): string { const s = Math.max(0, Math.floor(ms / 1000)); if (s < 60) return `${s}s`; const m = Math.floor(s / 60); if (m < 60) return `${m}m`; const h = Math.floor(m / 60); if (h < 48) return `${h}h`; return `${Math.floor(h / 24)}d`; } function totalTime(t: IndexEntry): string { const start = Date.parse(t.createdAt); const end = Date.parse(t.updatedAt); if (Number.isNaN(start) || Number.isNaN(end)) return ''; return compactDuration(end - start); } export function renderArchiveHtml(cwd: string): string { const config = loadConfig(cwd); const done = listTasks(cwd) .filter((t) => t.status === 'done') .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)); const rows = done.length ? done .map( (t) => ` ${escapeHtml(t.id)} ${escapeHtml(t.title)} ${agentAvatar(t.assignedTo, { size: 24 })} `, ) .join('') : '