UNPKG

@graphteon/juricode

Version:

We are forging the future with lines of digital steel

241 lines â€ĸ 9.47 kB
import prompts from 'prompts'; import chalk from 'chalk'; import ora from 'ora'; import boxen from 'boxen'; import { TaskService } from '../api/task'; import { runTaskChat } from './chat'; import { ConversationStatus } from '../api/open-hands.types'; export const createNewTask = async () => { const answers = await prompts([ { type: 'text', name: 'title', message: 'Enter task title:', validate: (input) => input.length > 0 || 'Title is required' }, { type: 'text', name: 'repository', message: 'Enter repository (format: owner/repo):', }, { type: 'text', name: 'initial_user_msg', message: 'Enter initial message (optional):', } ]); const spinner = ora('Creating task...').start(); try { const taskService = new TaskService(); const task = await taskService.createTask({ title: answers.title, repository: answers.repository || undefined, initial_user_msg: answers.initial_user_msg || undefined }); spinner.succeed('Task created successfully!'); console.log(boxen(`ID: ${chalk.cyan(task.conversation_id)} Title: ${chalk.white(task.title)} Status: ${getStatusColor(task.status)} Repository: ${chalk.yellow(task.selected_repository || 'N/A')} Created: ${chalk.gray(new Date(task.created_at).toLocaleString())} Updated: ${chalk.gray(new Date(task.last_updated_at).toLocaleString())}`, { padding: 1, borderColor: 'green' })); } catch (error) { spinner.fail('Failed to create task'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; export const listTasks = async () => { const spinner = ora('Fetching tasks...').start(); try { const taskService = new TaskService(); const tasks = await taskService.getTasks(); spinner.succeed('Tasks fetched successfully!'); if (tasks.length === 0) { console.log(chalk.yellow('No tasks found')); return; } const taskAnswer = await prompts({ type: 'select', name: 'taskId', message: 'Select a task:', choices: tasks.map((task, index) => ({ title: `[${index + 1}] ${task.title} (${getStatusColor(task.status)})`, value: task.conversation_id, description: `Repository: ${task.selected_repository || 'N/A'}` })) }); if (taskAnswer.taskId) { const selectedTask = tasks.find(t => t.conversation_id === taskAnswer.taskId); if (selectedTask) { console.log(boxen(`ID: ${chalk.cyan(selectedTask.conversation_id)} Title: ${chalk.white(selectedTask.title)} Status: ${getStatusColor(selectedTask.status)} Repository: ${chalk.yellow(selectedTask.selected_repository || 'N/A')} Created: ${chalk.gray(new Date(selectedTask.created_at).toLocaleString())} Updated: ${chalk.gray(new Date(selectedTask.last_updated_at).toLocaleString())}`, { padding: 1, margin: { top: 1 }, borderColor: selectedTask.status === ConversationStatus.RUNNING ? 'green' : 'yellow', borderStyle: selectedTask.status === ConversationStatus.RUNNING ? 'double' : 'single' })); const actionAnswer = await prompts({ type: 'select', name: 'action', message: 'What would you like to do with this task?', choices: [ { title: 'âœī¸ Update Task', value: 'update' }, { title: 'đŸ’Ŧ Run Task Chat', value: 'chat' }, { title: 'đŸ—‘ī¸ Delete Task', value: 'delete' }, { title: 'â†Šī¸ Back', value: 'back' } ] }); switch (actionAnswer.action) { case 'update': await updateTask(selectedTask.conversation_id); break; case 'chat': await runTaskChat(selectedTask.conversation_id); break; case 'delete': await deleteTask(selectedTask.conversation_id); break; } } } } catch (error) { spinner.fail('Failed to fetch tasks'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; const getTaskById = async (message = 'Enter task ID:') => { const answer = await prompts({ type: 'text', name: 'taskId', message, validate: (input) => input.length > 0 || 'Task ID is required' }); return answer.taskId; }; const getStatusColor = (status) => { switch (status) { case ConversationStatus.RUNNING: return chalk.green(status); case ConversationStatus.STOPPED: return chalk.yellow(status); case ConversationStatus.FINISHED: return chalk.blue(status); case ConversationStatus.ERROR: return chalk.red(status); case ConversationStatus.AWAITING_USER_INPUT: return chalk.cyan(status); case ConversationStatus.AWAITING_USER_CONFIRMATION: return chalk.magenta(status); case ConversationStatus.REJECTED: return chalk.red(status); default: return chalk.white(status); } }; export const getTaskDetails = async (taskId) => { if (!taskId) { taskId = await getTaskById(); } const spinner = ora('Fetching task details...').start(); try { const taskService = new TaskService(); if (!taskId) { throw new Error('Task ID is required'); } const task = await taskService.getTask(taskId); spinner.succeed('Task details fetched successfully!'); console.log(boxen(`ID: ${chalk.cyan(task.conversation_id)} Title: ${chalk.white(task.title)} Status: ${getStatusColor(task.status)} Repository: ${chalk.yellow(task.selected_repository || 'N/A')} Created: ${chalk.gray(new Date(task.created_at).toLocaleString())} Updated: ${chalk.gray(new Date(task.last_updated_at).toLocaleString())}`, { padding: 1, borderColor: 'cyan' })); } catch (error) { spinner.fail('Failed to fetch task details'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; export const updateTask = async (taskId) => { if (!taskId) { taskId = await getTaskById('Enter the ID of the task to update:'); } const spinner = ora('Fetching task details...').start(); try { const taskService = new TaskService(); const task = await taskService.getTask(taskId); spinner.succeed('Task found!'); const answers = await prompts([ { type: 'text', name: 'title', message: 'Enter new title (leave empty to keep current):', initial: task.title }, { type: 'text', name: 'initial_user_msg', message: 'Enter new message (optional):', } ]); const updateSpinner = ora('Updating task...').start(); const updatedTask = await taskService.updateTask(taskId, { title: answers.title, initial_user_msg: answers.initial_user_msg || undefined }); updateSpinner.succeed('Task updated successfully!'); await getTaskDetails(taskId); } catch (error) { spinner.fail('Failed to update task'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; export const completeTask = async () => { const taskId = await getTaskById('Enter the ID of the task to mark as complete:'); const spinner = ora('Marking task as complete...').start(); try { const taskService = new TaskService(); await taskService.updateTask(taskId, { initial_user_msg: 'Task completed' }); spinner.succeed('Task marked as complete!'); await getTaskDetails(taskId); } catch (error) { spinner.fail('Failed to complete task'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; export const deleteTask = async (taskId) => { if (!taskId) { taskId = await getTaskById('Enter the ID of the task to delete:'); } const confirmation = await prompts({ type: 'confirm', name: 'confirm', message: chalk.red('Are you sure you want to delete this task? This action cannot be undone.'), initial: false }); if (!confirmation.confirm) { console.log(chalk.yellow('Task deletion cancelled.')); return; } const spinner = ora('Deleting task...').start(); try { const taskService = new TaskService(); await taskService.deleteTask(taskId); spinner.succeed('Task deleted successfully!'); } catch (error) { spinner.fail('Failed to delete task'); console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error')); } }; //# sourceMappingURL=task.js.map