agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
125 lines (105 loc) • 3.41 kB
JavaScript
/**
* @file Scope assessment generator for problem-scope CLI
* @description Generates comprehensive summaries and assessments
*/
/**
* Generate comprehensive summary from analysis results
* @param {Object} results - Analysis results object
*/
function generateComprehensiveSummary(results) {
// Calculate overall metrics
let totalIssues = 0;
let criticalIssues = 0;
const severityLevels = [];
// Aggregate issues from all analyses
Object.values(results.analyses).forEach(analysis => {
if (analysis.error) return;
if (analysis.vulnerabilities) {
totalIssues += analysis.vulnerabilities.length;
criticalIssues += analysis.vulnerabilities.filter(v => v.severity === 'CRITICAL').length;
}
if (analysis.violations) {
totalIssues += analysis.violations.length;
criticalIssues += analysis.violations.filter(v => v.severity === 'CRITICAL').length;
}
if (analysis.opportunities) {
totalIssues += analysis.opportunities.length;
}
if (analysis.severity) {
severityLevels.push(analysis.severity);
}
});
// Determine overall risk level
const overallRiskLevel = calculateOverallRisk(severityLevels);
// Update summary
results.summary = {
overallRiskLevel,
totalIssues,
criticalIssues,
recommendationsCount: generateRecommendationCount(results),
scopeAssessment: generateScopeAssessment(results)
};
}
/**
* Calculate overall risk level
* @param {Array} severityLevels - Array of severity levels
* @returns {string} Overall risk level
*/
function calculateOverallRisk(severityLevels) {
if (severityLevels.includes('CRITICAL')) return 'CRITICAL';
if (severityLevels.includes('HIGH')) return 'HIGH';
if (severityLevels.includes('MEDIUM')) return 'MEDIUM';
return 'LOW';
}
/**
* Generate recommendation count
* @param {Object} results - Analysis results
* @returns {number} Number of recommendations
*/
function generateRecommendationCount(results) {
let count = 0;
Object.values(results.analyses).forEach(analysis => {
if (analysis.recommendations) {
count += analysis.recommendations.length;
}
if (analysis.vulnerabilities) {
count += analysis.vulnerabilities.length;
}
if (analysis.violations) {
count += analysis.violations.length;
}
});
return count;
}
/**
* Generate scope assessment
* @param {Object} results - Analysis results
* @returns {Object} Scope assessment object
*/
function generateScopeAssessment(results) {
const assessment = {
riskDistribution: {},
analysisCompletion: {},
priorityAreas: []
};
// Calculate risk distribution
const riskCounts = { LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0 };
Object.entries(results.analyses).forEach(([type, analysis]) => {
if (analysis.severity) {
riskCounts[analysis.severity]++;
}
assessment.analysisCompletion[type] = analysis.error ? 'failed' : 'completed';
});
assessment.riskDistribution = riskCounts;
// Identify priority areas
assessment.priorityAreas = Object.entries(results.analyses)
.filter(([_, analysis]) => analysis.severity === 'HIGH' || analysis.severity === 'CRITICAL')
.map(([type, _]) => type);
return assessment;
}
module.exports = {
generateComprehensiveSummary,
calculateOverallRisk,
generateRecommendationCount,
generateScopeAssessment
};