@graphteon/juricode
Version:
We are forging the future with lines of digital steel
262 lines • 11.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteConversation = exports.getConversationDetails = exports.listConversations = exports.createConversation = void 0;
const p = __importStar(require("@clack/prompts"));
const chalk_1 = __importDefault(require("chalk"));
const boxen_1 = __importDefault(require("boxen"));
const conversation_1 = require("../api/conversation");
const git_1 = require("../api/git");
const getStatusColor = (status) => {
switch (status.toLowerCase()) {
case 'completed':
return chalk_1.default.green(status);
case 'active':
return chalk_1.default.yellow(status);
case 'failed':
return chalk_1.default.red(status);
default:
return chalk_1.default.white(status);
}
};
const createConversation = async () => {
const gitService = new git_1.GitService();
p.intro('Create a new conversation');
const s = p.spinner();
s.start('Loading repositories');
try {
const repos = await gitService.getUserRepositories();
s.stop('Repositories loaded');
const repository = await p.select({
message: 'Select a repository',
options: [
{ label: 'No repository (start empty conversation)', value: '' },
...repos.map(repo => ({ label: repo.full_name, value: repo.full_name }))
]
});
if (p.isCancel(repository)) {
p.cancel('Operation cancelled');
return;
}
let selectedBranch;
if (repository) {
s.start('Loading branches');
try {
const branches = await gitService.getRepositoryBranches(repository);
s.stop('Branches loaded');
const branch = await p.select({
message: 'Select a branch',
options: branches.map(branch => ({ label: branch.name, value: branch.name }))
});
if (p.isCancel(branch)) {
p.cancel('Operation cancelled');
return;
}
selectedBranch = branch;
}
catch (error) {
p.log.error('Failed to load branches');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
return;
}
}
const message = await p.text({
message: 'Enter initial message (optional)',
});
if (p.isCancel(message)) {
p.cancel('Operation cancelled');
return;
}
s.start('Creating conversation');
try {
const conversationService = new conversation_1.ConversationService();
const conversation = await conversationService.createConversation({
repository: repository || undefined,
git_provider: 'github',
selected_branch: selectedBranch,
initial_user_msg: message || undefined
});
s.stop('Conversation created successfully');
console.log((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(conversation.conversation_id)}
Title: ${chalk_1.default.white(conversation.title)}
Status: ${getStatusColor(conversation.status)}
Repository: ${chalk_1.default.yellow(conversation.repository || 'N/A')}
Branch: ${chalk_1.default.yellow(conversation.selected_branch || 'N/A')}
Created At: ${chalk_1.default.gray(new Date(conversation.created_at).toLocaleString())}`, { padding: 1, borderColor: 'green' }));
p.outro('Conversation created successfully!');
}
catch (error) {
p.log.error('Failed to create conversation');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
}
catch (error) {
p.log.error('Failed to load repositories');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
};
exports.createConversation = createConversation;
const listConversations = async () => {
p.intro('List conversations');
const s = p.spinner();
s.start('Fetching conversations');
try {
const conversationService = new conversation_1.ConversationService();
const conversations = await conversationService.getConversations();
s.stop('Conversations fetched');
if (conversations.length === 0) {
p.log.warn('No conversations found');
p.outro('No conversations available');
return;
}
console.log((0, boxen_1.default)(chalk_1.default.white(`Found ${conversations.length} conversation(s)`), { padding: 1, margin: { top: 1 }, borderColor: 'blue' }));
conversations.forEach(conversation => {
console.log((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(conversation.conversation_id)}
Title: ${chalk_1.default.white(conversation.title)}
Status: ${getStatusColor(conversation.status)}
Repository: ${chalk_1.default.yellow(conversation.repository || 'N/A')}
Branch: ${chalk_1.default.yellow(conversation.selected_branch || 'N/A')}
Created: ${chalk_1.default.gray(new Date(conversation.created_at).toLocaleString())}`, {
padding: 1,
margin: { top: 0, bottom: 1 },
borderColor: conversation.status === 'completed' ? 'green' : 'blue',
borderStyle: conversation.status === 'completed' ? 'double' : 'single'
}));
});
p.outro('All conversations listed successfully!');
}
catch (error) {
s.stop('Failed to fetch conversations');
p.log.error('Failed to fetch conversations');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
};
exports.listConversations = listConversations;
const getConversationDetails = async () => {
p.intro('Get conversation details');
const conversationId = await p.text({
message: 'Enter conversation ID',
validate: (input) => input.length === 0 ? 'Conversation ID is required' : undefined
});
if (p.isCancel(conversationId)) {
p.cancel('Operation cancelled');
return;
}
const s = p.spinner();
s.start('Fetching conversation details');
try {
const conversationService = new conversation_1.ConversationService();
const conversation = await conversationService.getConversation(conversationId);
if (!conversation) {
s.stop('Conversation not found');
p.log.error('Conversation not found');
return;
}
s.stop('Conversation details fetched');
console.log((0, boxen_1.default)(`ID: ${chalk_1.default.cyan(conversation.conversation_id)}
Title: ${chalk_1.default.white(conversation.title)}
Status: ${getStatusColor(conversation.status)}
Repository: ${chalk_1.default.yellow(conversation.repository || 'N/A')}
Branch: ${chalk_1.default.yellow(conversation.selected_branch || 'N/A')}
Created At: ${chalk_1.default.gray(new Date(conversation.created_at).toLocaleString())}
Updated At: ${chalk_1.default.gray(new Date(conversation.updated_at).toLocaleString())}`, { padding: 1, borderColor: 'cyan' }));
if (conversation.repository) {
s.start('Fetching git changes');
try {
const gitService = new git_1.GitService();
const changes = await gitService.getGitChanges(conversation.conversation_id);
s.stop('Git changes fetched');
if (changes.length > 0) {
console.log((0, boxen_1.default)(chalk_1.default.white('Git Changes:') + '\n' + changes.map(change => `${change.status === 'modified' ? chalk_1.default.yellow('M') :
change.status === 'added' ? chalk_1.default.green('A') :
change.status === 'deleted' ? chalk_1.default.red('D') :
chalk_1.default.white('?')} ${change.path}`).join('\n'), { padding: 1, borderColor: 'yellow', margin: { top: 1 } }));
}
else {
p.log.info('No git changes found');
}
}
catch (error) {
s.stop('Failed to fetch git changes');
p.log.error('Failed to fetch git changes');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
}
p.outro('Details fetched successfully!');
}
catch (error) {
s.stop('Failed to fetch conversation details');
p.log.error('Failed to fetch conversation details');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
};
exports.getConversationDetails = getConversationDetails;
const deleteConversation = async () => {
p.intro('Delete conversation');
const conversationId = await p.text({
message: 'Enter conversation ID to delete',
validate: (input) => input.length === 0 ? 'Conversation ID is required' : undefined
});
if (p.isCancel(conversationId)) {
p.cancel('Operation cancelled');
return;
}
const shouldProceed = await p.confirm({
message: chalk_1.default.red('Are you sure you want to delete this conversation? This action cannot be undone.'),
initialValue: false,
});
if (p.isCancel(shouldProceed) || !shouldProceed) {
p.cancel('Operation cancelled');
return;
}
const s = p.spinner();
s.start('Deleting conversation');
try {
const conversationService = new conversation_1.ConversationService();
await conversationService.deleteConversation(conversationId);
s.stop('Conversation deleted');
p.outro('Conversation deleted successfully!');
}
catch (error) {
s.stop('Failed to delete conversation');
p.log.error('Failed to delete conversation');
p.log.error(error instanceof Error ? error.message : 'Unknown error');
}
};
exports.deleteConversation = deleteConversation;
//# sourceMappingURL=conversation.js.map