UNPKG

ctrlshiftleft

Version:

AI-powered toolkit for embedding QA and security testing into development workflows

68 lines (58 loc) 2.81 kB
import { Command } from 'commander'; import chalk from 'chalk'; import ora from 'ora'; import path from 'path'; import fs from 'fs/promises'; import { ChecklistGenerator } from '../core/checklistGenerator'; import { isValidSourcePath, ensureDirectoryExists } from '../utils/fileUtils'; export function checklistCommand(program: Command): void { program .command('checklist') .description('Generate QA and security checklists from source code') .argument('<source>', 'Source file or directory to analyze') .option('-o, --output <file>', 'Output JSON file for generated checklist', './checklist.json') .option('-t, --type <type>', 'Type of checklist to generate (qa, security, all)', 'all') .option('--format <format>', 'Output format (json, markdown)', 'json') .action(async (source: string, options) => { const spinner = ora('Analyzing source code for checklist generation...').start(); try { // Validate source path if (!await isValidSourcePath(source)) { spinner.fail(`Invalid source path: ${source}`); return; } const absoluteSourcePath = path.resolve(process.cwd(), source); const outputFile = path.resolve(process.cwd(), options.output); const outputDir = path.dirname(outputFile); // Ensure output directory exists await ensureDirectoryExists(outputDir); // Initialize checklist generator const generator = new ChecklistGenerator({ type: options.type, format: options.format }); spinner.text = 'Generating checklist...'; const checklist = await generator.generateChecklist(absoluteSourcePath); // Write to output file await fs.writeFile(outputFile, JSON.stringify(checklist, null, 2), 'utf8'); spinner.succeed(`Successfully generated checklist in ${outputFile}`); console.log(`\n${chalk.green('✓')} Checklist contains ${checklist.items.length} items`); console.log(`${chalk.blue('Categories:')} ${checklist.categories.join(', ')}`); // Display sample items if (checklist.items.length > 0) { console.log(chalk.yellow('\nSample checklist items:')); const sampleItems = checklist.items.slice(0, 3); for (const item of sampleItems) { console.log(`${chalk.green('•')} ${item.title}`); } if (checklist.items.length > 3) { console.log(chalk.gray(`... and ${checklist.items.length - 3} more items`)); } } } catch (error) { spinner.fail(`Checklist generation failed: ${(error as Error).message}`); console.error(chalk.red((error as Error).stack)); process.exit(1); } }); }