Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 8x 8x 8x 8x 8x 8x 8x 8x 8x 7x 7x 7x 7x 7x 1x 8x 2x 2x 3x 3x 2x 8x 2x 2x 4x 4x 4x 2x 8x 7x 7x 5x 7x 3x 3x 3x 4x 7x 8x 8x 8x | import chalk from 'chalk';
import { analyzeContext } from '../orchestrator';
import { generateSummary } from '../summary';
/**
* Display analysis report in console
*/
export function displayConsoleReport(
summary: ReturnType<typeof generateSummary>,
results: Awaited<ReturnType<typeof analyzeContext>>,
maxResults: number = 10
): void {
const divider =
'──────────────────────────────────────────────────────────────────';
const totalIssues =
summary.criticalIssues + summary.majorIssues + summary.minorIssues;
console.log(chalk.bold('📊 Context Analysis Summary:\n'));
console.log(` • Total Files: ${chalk.cyan(summary.totalFiles)}`);
console.log(
` • Total Tokens: ${chalk.cyan(summary.totalTokens.toLocaleString())}`
);
console.log(
` • Avg Budget: ${chalk.cyan(summary.avgContextBudget.toFixed(0))} tokens`
);
console.log(
` • Potential Saving: ${chalk.green(summary.totalPotentialSavings.toLocaleString())} tokens`
);
console.log();
if (totalIssues > 0) {
console.log(chalk.bold('⚠️ Issues Detected:\n'));
console.log(` • ${chalk.red('🔴 Critical:')} ${summary.criticalIssues}`);
console.log(` • ${chalk.yellow('🟡 Major:')} ${summary.majorIssues}`);
console.log(` • ${chalk.blue('🔵 Minor:')} ${summary.minorIssues}`);
console.log();
} else {
console.log(chalk.green('✅ No significant context issues detected!\n'));
}
// Fragmented modules
if (summary.fragmentedModules.length > 0) {
console.log(chalk.bold('🧩 Top Fragmented Modules:\n'));
summary.fragmentedModules.slice(0, maxResults).forEach((mod) => {
const scoreColor =
mod.fragmentationScore > 0.7
? chalk.red
: mod.fragmentationScore > 0.4
? chalk.yellow
: chalk.green;
console.log(
` ${scoreColor('■')} ${chalk.white(mod.domain)} ${chalk.dim(`(${mod.files.length} files, ${(mod.fragmentationScore * 100).toFixed(0)}% frag)`)}`
);
});
console.log();
}
// Top expensive files
if (summary.topExpensiveFiles.length > 0) {
console.log(chalk.bold('💸 Most Expensive Files (Context Budget):\n'));
summary.topExpensiveFiles.slice(0, maxResults).forEach((item) => {
const fileName = item.file.split('/').slice(-2).join('/');
const severityColor =
item.severity === 'critical'
? chalk.red
: item.severity === 'major'
? chalk.yellow
: chalk.blue;
console.log(
` ${severityColor('●')} ${chalk.white(fileName)} ${chalk.dim(`- ${item.contextBudget.toLocaleString()} tokens`)}`
);
});
console.log();
}
// Recommendations
if (totalIssues > 0) {
console.log(chalk.bold('💡 Top Recommendations:\n'));
const topFiles = results
.filter((r) => r.severity === 'critical' || r.severity === 'major')
.slice(0, 3);
topFiles.forEach((result, index) => {
const fileName = result.file.split('/').slice(-2).join('/');
console.log(chalk.cyan(` ${index + 1}. ${fileName}`));
result.recommendations.slice(0, 2).forEach((rec) => {
console.log(chalk.dim(` • ${rec}`));
});
});
console.log();
}
// Footer
console.log(chalk.cyan(divider));
console.log(
chalk.dim(
'\n⭐ Like aiready? Star us on GitHub: https://github.com/caopengau/aiready-context-analyzer'
)
);
console.log(
chalk.dim(
'🐛 Found a bug? Report it: https://github.com/caopengau/aiready-context-analyzer/issues\n'
)
);
}
|