import type { TaskSummary, TaskStatus } from "../../lib/api"; interface TaskListProps { tasks: TaskSummary[]; loading: boolean; onSelect: (id: string) => void; onDelete: (id: string) => void; onCreate: () => void; } function formatDate(dateStr: string): string { const date = new Date(dateStr); return date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", hour: "2-digit", minute: "2-digit", }); } function getStatusColor(status: TaskStatus): string { switch (status) { case "pending": return "text-[#9bc3ff]"; case "running": return "text-green-400"; case "paused": return "text-yellow-400"; case "blocked": return "text-orange-400"; case "done": return "text-emerald-400"; case "failed": return "text-red-400"; case "merged": return "text-purple-400"; default: return "text-[#9bc3ff]"; } } function getStatusBgColor(status: TaskStatus): string { switch (status) { case "pending": return "bg-[rgba(117,170,252,0.1)]"; case "running": return "bg-green-400/10"; case "paused": return "bg-yellow-400/10"; case "blocked": return "bg-orange-400/10"; case "done": return "bg-emerald-400/10"; case "failed": return "bg-red-400/10"; case "merged": return "bg-purple-400/10"; default: return "bg-[rgba(117,170,252,0.1)]"; } } export function TaskList({ tasks, loading, onSelect, onDelete, onCreate, }: TaskListProps) { if (loading) { return (
Loading tasks...
); } // Separate root tasks (no parent) from subtasks const rootTasks = tasks.filter((t) => !t.parentTaskId); return (
MESH//TASKS
{rootTasks.length === 0 ? (
No tasks yet. Create one to start orchestrating Claude Code instances.
) : (
{rootTasks.map((task) => (
))}
)}
); }