cerberus-claude-cli
Version:
CLI tool for preparing files and projects for Claude AI. Collect, organize, and analyze source code files to create comprehensive project contexts.
70 lines (58 loc) • 1.97 kB
JavaScript
const inquirer = require('inquirer');
// const chalk = require('chalk'); // TODO: Use if needed
// const path = require('path'); // TODO: Use if needed
const Project = require('../../models/Project');
const { projectPrompts } = require('../../cli/prompts');
const logger = require('../../utils/logger');
/**
* Create a new project for Claude AI preparation
*/
async function createProject() {
logger.info('=== Create New Project ===');
try {
// Get project name
const projectName = await projectPrompts.projectName();
// Validate project name
if (!/^[a-zA-Z0-9_-]+$/.test(projectName)) {
logger.error('Project name can only contain letters, numbers, hyphens and underscores');
return;
}
// Check if project already exists
const existingProjects = await Project.listAll();
if (existingProjects.includes(projectName)) {
const { overwrite } = await inquirer.prompt([
{
type: 'confirm',
name: 'overwrite',
message: `Project "${projectName}" already exists. Do you want to overwrite it?`,
default: false,
},
]);
if (!overwrite) {
logger.warn('Project creation cancelled.');
return;
}
}
// Create the project
logger.info(`Creating project: ${projectName}`);
const project = await Project.create(projectName);
logger.success(`Project "${projectName}" created successfully.`);
// Ask if user wants to collect files now
const { collectNow } = await inquirer.prompt([
{
type: 'confirm',
name: 'collectNow',
message: 'Do you want to collect files for this project now?',
default: true,
},
]);
if (collectNow) {
const collectFiles = require('./collectFiles');
await collectFiles(projectName);
}
return project;
} catch (error) {
logger.error('Error creating project:', error);
}
}
module.exports = createProject;