export function normalizeRiskScore(input) { if (typeof input === 'number') return Math.min(100, Math.max(0, input)); const level = String(input || 'low').toUpperCase(); return { CRITICAL: 95, HIGH: 75, MEDIUM: 50, LOW: 20 }[level] ?? 20; } export function calculateModuleRisk(file) { const path = typeof file === 'string' ? file : file?.path || ''; const lower = path.toLowerCase(); if (/(auth|security|oauth|permission|token)/.test(lower)) return { level: 'HIGH', score: 82 }; if (/(main|app|server|router|route|api)/.test(lower)) return { level: 'HIGH', score: 74 }; if (/(model|schema|migration|db|database)/.test(lower)) return { level: 'MEDIUM', score: 58 }; if (/(test|spec|docs|readme)/.test(lower)) return { level: 'LOW', score: 22 }; return { level: 'MEDIUM', score: 45 }; } export function topRiskFiles(files = [], count = 8) { return files .map((file) => ({ ...file, risk: calculateModuleRisk(file) })) .sort((a, b) => b.risk.score - a.risk.score || (b.lines || 0) - (a.lines || 0)) .slice(0, count); }