@every-env/cli
Version:
Multi-agent orchestrator for AI-powered development workflows
92 lines • 4.25 kB
JavaScript
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