@graphteon/juricode
Version:
We are forging the future with lines of digital steel
253 lines âĸ 10.9 kB
JavaScript
;
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