ccguard
Version:
Automated enforcement of net-negative LOC, complexity constraints, and quality standards for Claude code
76 lines • 4.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiagnoseCommand = void 0;
const ConfigLoader_1 = require("../config/ConfigLoader");
exports.DiagnoseCommand = {
name: 'diagnose',
description: 'Diagnose potential issues with line counting and statistics',
execute: async (guardManager) => {
const isEnabled = await guardManager.isEnabled();
const stats = await guardManager.getSessionStats();
const baselineInfo = await guardManager.getBaselineInfo();
const configLoader = new ConfigLoader_1.ConfigLoader();
const config = configLoader.getConfig();
let message = 'CCGuard Diagnostic Report\n';
message += '========================\n\n';
// Status
message += `Status: ${isEnabled ? 'ENABLED' : 'DISABLED'}\n`;
message += `Mode: ${config.enforcement.mode}\n`;
message += `Strategy: ${config.enforcement.strategy}\n`;
message += `Ignore Empty Lines: ${config.enforcement.ignoreEmptyLines}\n\n`;
// Baseline Info
if (baselineInfo) {
message += `Baseline Information:\n`;
message += ` Total LOC: ${baselineInfo.totalLoc}\n`;
message += ` File count: ${baselineInfo.fileCount}\n`;
message += ` Established: ${new Date(baselineInfo.timestamp).toLocaleString()}\n\n`;
}
else {
message += `Baseline: Not initialized\n\n`;
}
// Session Stats
if (stats) {
message += `Current Session Statistics:\n`;
message += ` Lines added: ${stats.totalLinesAdded}\n`;
message += ` Lines removed: ${stats.totalLinesRemoved}\n`;
message += ` Net change: ${stats.netChange > 0 ? '+' : ''}${stats.netChange}\n`;
message += ` Operations: ${stats.operationCount}\n`;
message += ` Last updated: ${stats.lastUpdated}\n\n`;
// Analysis
if (stats.totalLinesAdded === 0 && stats.totalLinesRemoved > 0) {
message += `⚠️ ISSUE DETECTED: Lines added is 0\n\n`;
message += `Possible explanations:\n`;
message += ` • Your operations only removed code (deletions/replacements with empty strings)\n`;
message += ` • New content contains only empty lines (ignored when ignoreEmptyLines=true)\n`;
message += ` • You're making edits that replace code with whitespace-only content\n`;
message += ` • Operations are blocked before statistics are updated\n\n`;
message += `Debugging steps:\n`;
message += ` 1. Check if your recent edits actually added content\n`;
message += ` 2. Verify new content isn't just whitespace/empty lines\n`;
message += ` 3. Try setting ignoreEmptyLines=false in config if working with whitespace\n`;
message += ` 4. Use 'ccguard reset' to clear stats and start fresh\n\n`;
}
if (stats.operationCount === 0) {
message += `ℹ️ No operations tracked yet. Statistics will appear after file modifications.\n\n`;
}
}
else {
message += `No session statistics found.\n`;
message += `This is normal for new sessions or after running 'ccguard reset'.\n\n`;
}
// Configuration
message += `Configuration:\n`;
message += ` Whitelist patterns: ${config.whitelist.patterns.length > 0 ? config.whitelist.patterns.join(', ') : 'none'}\n`;
message += ` Whitelist extensions: ${config.whitelist.extensions.length > 0 ? config.whitelist.extensions.join(', ') : 'none'}\n`;
message += ` Allowed positive lines: ${config.thresholds?.allowedPositiveLines ?? 0}\n\n`;
message += `If issues persist:\n`;
message += ` • Enable debug mode temporarily by modifying the source\n`;
message += ` • Check that files aren't whitelisted unintentionally\n`;
message += ` • Verify CCGuard is processing your operations (not skipped)\n`;
return {
decision: 'block',
reason: message,
};
}
};
//# sourceMappingURL=DiagnoseCommand.js.map