trace.ai-cli
Version:
A powerful AI-powered CLI tool
126 lines (114 loc) ⢠4.6 kB
JavaScript
const TraceAI = require('./cli/traceAI');
const { analyzeFile } = require('./services/fileAnalyzer');
const { analyzeFolderStructure } = require('./services/folderAnalyzer');
const { extractTextFromImage } = require('./services/imageService');
const { processWithAI } = require('./services/aiService');
// Handle CLI arguments
async function handleCliArgs() {
const args = process.argv.slice(2);
if (args.length === 0) {
const traceAI = new TraceAI();
await traceAI.start();
return;
}
const command = args[0];
if (command === 'file' && args[1]) {
const filePath = args[1];
const query = args.slice(2).join(' ');
try {
console.log('š Analyzing file...');
const result = await analyzeFile(filePath, query);
console.log('\nš File Analysis:');
console.log('=' .repeat(50));
console.log(result.text || result);
console.log('=' .repeat(50));
} catch (error) {
console.error('ā Error:', error.message);
process.exit(1);
}
} else if (command === 'folder' && args[1]) {
const folderPath = args[1];
const query = args.slice(2).join(' ');
try {
console.log('š Analyzing folder...');
const result = await analyzeFolderStructure(folderPath, query);
console.log('\nš Folder Analysis:');
console.log('=' .repeat(50));
console.log(result.text);
console.log('=' .repeat(50));
} catch (error) {
console.error('ā Error:', error.message);
process.exit(1);
}
} else if (command === 'image' && args[1]) {
try {
const imagePath = args[1];
const question = args.slice(2).join(' ');
console.log('š¼ļø Analysing Image...');
const result = await extractTextFromImage(imagePath, question);
console.log('\nš¼ļø Image Analysis:');
console.log('=' .repeat(50));
console.log(result);
console.log('=' .repeat(50));
} catch (error) {
console.error('ā Error:', error.message);
process.exit(1);
}
} else if (command === 'ask') {
const query = args.slice(1).join(' ');
if (!query) {
console.error('ā Please provide a question after "ask"');
process.exit(1);
}
try {
console.log('Processing your question...');
const result = await processWithAI(query);
console.log('\nTrace.Ai Response:');
console.log('=' .repeat(50));
console.log(result);
console.log('=' .repeat(50));
} catch (error) {
console.error('ā Error:', error.message);
if (error.code === 'ENOENT') {
console.error('File not found. Please check the path and try again.');
}
process.exit(1);
}
} else {
console.log('Trace.Ai - AI powered CLI tool ');
console.log('\nUsage:');
console.log(' trace-ai - Start interactive mode');
console.log(' trace-ai file "path" question - Analyze a file');
console.log(' trace-ai folder "path" question - Analyze a folder');
console.log(' trace-ai image "path" - Analyze a image');
console.log(' trace-ai ask question - Ask a question');
console.log('\nExamples:');
console.log(' trace-ai file ./app.js');
console.log(' trace-ai file ./app.js explain this code"');
console.log(' trace-ai file ./app.js find security vulnerabilities');
console.log(' trace-ai folder ./project');
console.log(' trace-ai folder ./src what is the architecture?');
console.log(' trace-ai image screenshot.png');
console.log(' trace-ai ask Explain quantum computing');
}
}
// Error handling
process.on('unhandledRejection', (reason, promise) => {
console.error('ā Unhandled Rejection at:', promise, 'reason:', reason);
});
process.on('uncaughtException', (error) => {
console.error('ā Uncaught Exception:', error);
process.exit(1);
});
// Start the application
if (require.main === module) {
handleCliArgs().catch(console.error);
}
module.exports = {
TraceAI,
processWithAI,
extractTextFromImage,
analyzeFile,
analyzeFolderStructure
};