agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
160 lines (132 loc) • 5.56 kB
JavaScript
/**
* @file Comprehensive problem scope analyzer orchestrating multi-dimensional code analysis
* @description Single responsibility: Provide unified CLI for complete codebase problem assessment
*
* This master CLI tool serves as the comprehensive analysis orchestrator for the AgentSqripts
* platform, combining all analysis types (complexity, security, performance, WET code, etc.)
* into unified problem scope identification. It provides AI agents and developers with
* complete visibility into codebase health, technical debt, and optimization opportunities
* through coordinated multi-analyzer execution and consolidated reporting.
*
* Design rationale:
* - Unified analysis interface eliminates need to run multiple tools separately
* - Comprehensive scope assessment enables holistic code quality understanding
* - Severity-based filtering focuses attention on most critical issues across all domains
* - Quick mode option provides rapid assessment for time-constrained scenarios
* - Consolidated reporting enables cross-cutting issue identification and prioritization
* - Export capabilities support integration with project management and CI/CD workflows
*/
const path = require('path');
const fs = require('fs');
const { parseCommandLineArgs, showUsage } = require('./lib/commandLineParser');
const { outputResults } = require('./lib/outputFormatter');
const {
runDependencyAnalysis,
runComplexityAnalysis,
runSecurityAnalysis,
runDebtAnalysis,
runRefactoringAnalysis,
runSRPAnalysis,
runCleanupAnalysis
} = require('./lib/analysisRunner');
const { generateComprehensiveSummary } = require('./lib/scopeAssessmentGenerator');
const { exportReport } = require('./lib/reportExporter');
// Individual analysis functions for direct access if needed
// const { analyzeSRPViolations } = require('../lib/srp-violations/analyzeSRPViolations');
// const { analyzeProjectCleanup } = require('../lib/cleanup/analyzeCleanup');
// Removed qerrors dependency for qtests compatibility
// const qerrors = require('qerrors');
async function main() {
const { getProcessArgs } = require('../lib/utils/processHelpers');
const args = getProcessArgs();
if (args.includes('--help') || args.length === 0) {
showUsage();
process.exit(0);
}
try {
// Parse command line arguments
const { options, projectPath: parsedPath } = parseCommandLineArgs(args);
const projectPath = path.resolve(parsedPath);
// Determine which analyses to run
const analysisTypes = options.analysis.includes('all') ?
['dependencies', 'complexity', 'security', 'debt', 'srp', 'comments', 'cleanup', 'refactoring'] :
options.analysis;
console.log(`🔍 Problem Scope Analysis for: ${projectPath}`);
console.log(`📊 Analysis Types: ${analysisTypes.join(', ')}`);
console.log(`⚠️ Minimum Severity: ${options.severity}`);
console.log(`⚡ Quick Mode: ${options.quick ? 'Yes' : 'No'}\n`);
const startTime = Date.now();
const results = {
metadata: {
projectPath,
analysisTypes,
severity: options.severity,
quickMode: options.quick,
timestamp: new Date().toISOString(),
executionTime: 0
},
summary: {
overallRiskLevel: 'LOW',
totalIssues: 0,
criticalIssues: 0,
recommendationsCount: 0,
scopeAssessment: {}
},
analyses: {}
};
// Run analyses
await runAnalyses(projectPath, analysisTypes, options, results);
// Calculate execution time
results.metadata.executionTime = Date.now() - startTime;
// Generate comprehensive summary
generateComprehensiveSummary(results);
// Output results
outputResults(results, options.outputFormat);
// Export report if requested
if (options.exportReport) {
await exportReport(results, options.exportReport);
}
// Set exit code based on overall risk
const hasHighRisk = results.summary.overallRiskLevel === 'HIGH' ||
results.summary.overallRiskLevel === 'CRITICAL';
process.exit(hasHighRisk ? 1 : 0);
} catch (error) {
qerrors.default(error, 'CLI problem scope analysis failed', { args });
console.error(`❌ Error: ${error.message}`);
process.exit(1);
}
}
async function runAnalyses(projectPath, analysisTypes, options, results) {
const promises = [];
if (analysisTypes.includes('dependencies')) {
promises.push(runDependencyAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('complexity')) {
promises.push(runComplexityAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('security')) {
promises.push(runSecurityAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('debt')) {
promises.push(runDebtAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('srp')) {
promises.push(runSRPAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('cleanup')) {
promises.push(runCleanupAnalysis(projectPath, options, results));
}
if (analysisTypes.includes('refactoring')) {
promises.push(runRefactoringAnalysis(projectPath, options, results));
}
await Promise.all(promises);
}
if (require.main === module) {
main();
}
// Main orchestration completed, all functions moved to separate modules
if (require.main === module) {
main().catch(error => { console.error("Fatal error:", error); process.exit(1); });
}
module.exports = { main };