UNPKG

@graphteon/juricode

Version:

We are forging the future with lines of digital steel

253 lines â€ĸ 10.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.deleteTask = exports.completeTask = exports.updateTask = exports.getTaskDetails = exports.listTasks = exports.createNewTask = void 0; const prompts_1 = __importDefault(require("prompts")); const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const boxen_1 = __importDefault(require("boxen")); const task_1 = require("../api/task"); const chat_1 = require("./chat"); const open_hands_types_1 = require("../api/open-hands.types"); const createNewTask = async () => { const answers = await (0, prompts_1.default)([ { 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 = (0, ora_1.default)('Creating task...').start(); try { const taskService = new task_1.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((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(task.conversation_id)} Title: ${chalk_1.default.white(task.title)} Status: ${getStatusColor(task.status)} Repository: ${chalk_1.default.yellow(task.selected_repository || 'N/A')} Created: ${chalk_1.default.gray(new Date(task.created_at).toLocaleString())} Updated: ${chalk_1.default.gray(new Date(task.last_updated_at).toLocaleString())}`, { padding: 1, borderColor: 'green' })); } catch (error) { spinner.fail('Failed to create task'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.createNewTask = createNewTask; const listTasks = async () => { const spinner = (0, ora_1.default)('Fetching tasks...').start(); try { const taskService = new task_1.TaskService(); const tasks = await taskService.getTasks(); spinner.succeed('Tasks fetched successfully!'); if (tasks.length === 0) { console.log(chalk_1.default.yellow('No tasks found')); return; } const taskAnswer = await (0, prompts_1.default)({ 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((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(selectedTask.conversation_id)} Title: ${chalk_1.default.white(selectedTask.title)} Status: ${getStatusColor(selectedTask.status)} Repository: ${chalk_1.default.yellow(selectedTask.selected_repository || 'N/A')} Created: ${chalk_1.default.gray(new Date(selectedTask.created_at).toLocaleString())} Updated: ${chalk_1.default.gray(new Date(selectedTask.last_updated_at).toLocaleString())}`, { padding: 1, margin: { top: 1 }, borderColor: selectedTask.status === open_hands_types_1.ConversationStatus.RUNNING ? 'green' : 'yellow', borderStyle: selectedTask.status === open_hands_types_1.ConversationStatus.RUNNING ? 'double' : 'single' })); const actionAnswer = await (0, prompts_1.default)({ 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 (0, exports.updateTask)(selectedTask.conversation_id); break; case 'chat': await (0, chat_1.runTaskChat)(selectedTask.conversation_id); break; case 'delete': await (0, exports.deleteTask)(selectedTask.conversation_id); break; } } } } catch (error) { spinner.fail('Failed to fetch tasks'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.listTasks = listTasks; const getTaskById = async (message = 'Enter task ID:') => { const answer = await (0, prompts_1.default)({ type: 'text', name: 'taskId', message, validate: (input) => input.length > 0 || 'Task ID is required' }); return answer.taskId; }; const getStatusColor = (status) => { switch (status) { case open_hands_types_1.ConversationStatus.RUNNING: return chalk_1.default.green(status); case open_hands_types_1.ConversationStatus.STOPPED: return chalk_1.default.yellow(status); case open_hands_types_1.ConversationStatus.FINISHED: return chalk_1.default.blue(status); case open_hands_types_1.ConversationStatus.ERROR: return chalk_1.default.red(status); case open_hands_types_1.ConversationStatus.AWAITING_USER_INPUT: return chalk_1.default.cyan(status); case open_hands_types_1.ConversationStatus.AWAITING_USER_CONFIRMATION: return chalk_1.default.magenta(status); case open_hands_types_1.ConversationStatus.REJECTED: return chalk_1.default.red(status); default: return chalk_1.default.white(status); } }; const getTaskDetails = async (taskId) => { if (!taskId) { taskId = await getTaskById(); } const spinner = (0, ora_1.default)('Fetching task details...').start(); try { const taskService = new task_1.TaskService(); if (!taskId) { throw new Error('Task ID is required'); } const task = await taskService.getTask(taskId); spinner.succeed('Task details fetched successfully!'); console.log((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(task.conversation_id)} Title: ${chalk_1.default.white(task.title)} Status: ${getStatusColor(task.status)} Repository: ${chalk_1.default.yellow(task.selected_repository || 'N/A')} Created: ${chalk_1.default.gray(new Date(task.created_at).toLocaleString())} Updated: ${chalk_1.default.gray(new Date(task.last_updated_at).toLocaleString())}`, { padding: 1, borderColor: 'cyan' })); } catch (error) { spinner.fail('Failed to fetch task details'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.getTaskDetails = getTaskDetails; const updateTask = async (taskId) => { if (!taskId) { taskId = await getTaskById('Enter the ID of the task to update:'); } const spinner = (0, ora_1.default)('Fetching task details...').start(); try { const taskService = new task_1.TaskService(); const task = await taskService.getTask(taskId); spinner.succeed('Task found!'); const answers = await (0, prompts_1.default)([ { 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 = (0, ora_1.default)('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 (0, exports.getTaskDetails)(taskId); } catch (error) { spinner.fail('Failed to update task'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.updateTask = updateTask; const completeTask = async () => { const taskId = await getTaskById('Enter the ID of the task to mark as complete:'); const spinner = (0, ora_1.default)('Marking task as complete...').start(); try { const taskService = new task_1.TaskService(); await taskService.updateTask(taskId, { initial_user_msg: 'Task completed' }); spinner.succeed('Task marked as complete!'); await (0, exports.getTaskDetails)(taskId); } catch (error) { spinner.fail('Failed to complete task'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.completeTask = completeTask; const deleteTask = async (taskId) => { if (!taskId) { taskId = await getTaskById('Enter the ID of the task to delete:'); } const confirmation = await (0, prompts_1.default)({ type: 'confirm', name: 'confirm', message: chalk_1.default.red('Are you sure you want to delete this task? This action cannot be undone.'), initial: false }); if (!confirmation.confirm) { console.log(chalk_1.default.yellow('Task deletion cancelled.')); return; } const spinner = (0, ora_1.default)('Deleting task...').start(); try { const taskService = new task_1.TaskService(); await taskService.deleteTask(taskId); spinner.succeed('Task deleted successfully!'); } catch (error) { spinner.fail('Failed to delete task'); console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error')); } }; exports.deleteTask = deleteTask; //# sourceMappingURL=task.js.map