UNPKG

ccguard

Version:

Automated enforcement of net-negative LOC, complexity constraints, and quality standards for Claude code

77 lines 2.73 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = run; const processHookData_1 = require("../hooks/processHookData"); const fs_1 = require("fs"); const path_1 = require("path"); const os_1 = require("os"); // Debug logging const debugLog = (message) => { const logPath = (0, path_1.join)((0, os_1.homedir)(), '.guard', 'debug.log'); (0, fs_1.appendFileSync)(logPath, `${new Date().toISOString()} - ${JSON.stringify(message)}\n`); }; const FileStorage_1 = require("../storage/FileStorage"); const validator_1 = require("../validation/validator"); const ConfigLoader_1 = require("../config/ConfigLoader"); async function run(input, sessionId) { const storage = new FileStorage_1.FileStorage(sessionId); const configLoader = new ConfigLoader_1.ConfigLoader(); const validator = await (0, validator_1.createValidator)(storage, configLoader); return (0, processHookData_1.processHookData)(input, { storage, validator, configLoader, }); } // Only run if this is the main module if (require.main === module) { // Handle command line arguments if (process.argv.length > 2) { console.error('guard: Claude Code hook - no arguments expected'); process.exit(1); } let inputData = ''; process.stdin.setEncoding('utf8'); // Start reading immediately process.stdin.resume(); // Set a timeout to prevent hanging const timeout = setTimeout(() => { console.error('guard: timeout waiting for input'); process.exit(1); }, 5000); process.stdin.on('data', (chunk) => { inputData += chunk; debugLog({ event: 'data_chunk', chunk }); }); process.stdin.on('end', async () => { clearTimeout(timeout); debugLog({ event: 'stdin_end', inputData }); try { // Extract session ID from input if available let sessionId; try { const parsed = JSON.parse(inputData); sessionId = parsed.session_id; } catch { // Ignore parse errors } const result = await run(inputData, sessionId); debugLog({ event: 'result', result }); console.log(JSON.stringify(result)); } catch (error) { console.error('Failed to process hook data:', error); const errorResult = { decision: 'block', reason: 'Error processing request. Please try again.', }; console.log(JSON.stringify(errorResult)); } finally { process.exit(0); } }); } //# sourceMappingURL=guard.js.map