UNPKG

@every-env/cli

Version:

Multi-agent orchestrator for AI-powered development workflows

92 lines 4.25 kB
import React from 'react'; import { Box, Text } from 'ink'; export function TaskList({ tasks, selectedIndex, phase }) { if (tasks.length === 0) { if (phase === 1) { return (React.createElement(Box, { marginY: 1 }, React.createElement(Text, { color: "gray" }, "Start typing to create your first plan."))); } return null; } return (React.createElement(Box, { flexDirection: "column", marginY: 1 }, tasks.map((task, i) => (React.createElement(TaskRow, { key: task.id, task: task, index: i + 1, selected: selectedIndex === i, phase: phase }))))); } function TaskRow({ task, index, selected, phase }) { const getStatusDisplay = () => { switch (phase) { case 1: // Plan switch (task.status) { case 'ready': return React.createElement(Text, { color: "green" }, "Ready"); case 'revised': return React.createElement(Text, { color: "yellow" }, "Revised"); case 'new': return React.createElement(Text, { color: "cyan" }, "New"); default: return null; } case 2: // Delegate if (task.status === 'active' || task.status === 'running') { return (React.createElement(React.Fragment, null, React.createElement(Text, { color: "yellow" }, task.status === 'active' ? '⚡' : '🔄'), React.createElement(Text, null, " ", task.elapsed || '0m'), task.progress !== undefined && (React.createElement(React.Fragment, null, React.createElement(Text, null, " "), React.createElement(ProgressBar, { percent: task.progress }))), task.stats && (React.createElement(Text, { color: "gray" }, ' ', "+", task.stats.added, "/-", task.stats.removed)))); } return null; case 3: // Assess switch (task.status) { case 'approved': return React.createElement(Text, { color: "green" }, "\u2713 Approved"); case 'in-review': return React.createElement(Text, { color: "yellow" }, "\uD83D\uDC40 In review"); case 'needs-work': return React.createElement(Text, { color: "red" }, "\u23F8 Needs work"); case 'testing': return React.createElement(Text, { color: "cyan" }, "\uD83D\uDD04 Testing"); default: return null; } case 4: // Codify const timeAgo = getTimeAgo(task.createdAt); return (React.createElement(Text, { color: "gray" }, timeAgo, task.patterns && ` +${task.patterns} patterns`)); default: return null; } }; return (React.createElement(Box, null, React.createElement(Text, { color: selected ? 'white' : 'gray' }, selected ? '▶ ' : ' '), React.createElement(Text, { color: selected ? 'white' : 'gray' }, "[", index, "] "), React.createElement(Text, { color: selected ? 'white' : undefined }, task.title), React.createElement(Text, null, ' '), getStatusDisplay())); } function ProgressBar({ percent, width = 20 }) { const filled = Math.floor(width * percent / 100); const empty = width - filled; return (React.createElement(Text, null, '▓'.repeat(filled), '░'.repeat(empty), ` ${percent}%`)); } function getTimeAgo(date) { const now = new Date(); const diff = now.getTime() - date.getTime(); const hours = Math.floor(diff / (1000 * 60 * 60)); const days = Math.floor(hours / 24); if (days > 0) { return `${days}d ago`; } else if (hours > 0) { return `${hours}h ago`; } else { const minutes = Math.floor(diff / (1000 * 60)); return `${minutes}m ago`; } } //# sourceMappingURL=TaskList.js.map