Files
claude-mem/hooks/pre-compact.js
T
thedotmack 598369e894 Initial release v3.3.8
- Hook system for customization
- Documentation and installation scripts
- Multi-platform support via GitHub releases
- Binaries available for Windows, Linux (x64/ARM64), macOS (Intel/Apple Silicon)

Generated with Claude Code via Happy
2025-09-06 19:34:53 +00:00

81 lines
2.6 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Pre-Compact Hook for Claude Memory System
*
* Updated to use the centralized PromptOrchestrator and HookTemplates system.
* This hook validates the pre-compact request and executes compression using
* standardized response templates for consistent Claude Code integration.
*/
import { loadCliCommand } from './shared/config-loader.js';
import {
createHookResponse,
executeCliCommand,
validateHookPayload,
debugLog
} from './shared/hook-helpers.js';
const cliCommand = loadCliCommand();
// Read input from stdin
let input = '';
process.stdin.on('data', chunk => {
input += chunk;
});
process.stdin.on('end', async () => {
try {
const payload = JSON.parse(input);
debugLog('Pre-compact hook started', { payload });
// Validate payload using centralized validation
const validation = validateHookPayload(payload, 'PreCompact');
if (!validation.valid) {
const response = createHookResponse('PreCompact', false, { reason: validation.error });
console.log(JSON.stringify(response));
process.exit(0);
}
// Check for environment-based blocking conditions
if (payload.trigger === 'auto' && process.env.DISABLE_AUTO_COMPRESSION === 'true') {
debugLog('Auto-compression disabled by configuration');
const response = createHookResponse('PreCompact', false, {
reason: 'Auto-compression disabled by configuration'
});
console.log(JSON.stringify(response));
process.exit(0);
}
// Execute compression using standardized CLI execution helper
debugLog('Executing compression command', {
command: cliCommand,
args: ['compress', payload.transcript_path]
});
const result = await executeCliCommand(cliCommand, ['compress', payload.transcript_path]);
if (!result.success) {
debugLog('Compression command failed', { stderr: result.stderr });
const response = createHookResponse('PreCompact', false, {
reason: `Compression failed: ${result.stderr || 'Unknown error'}`
});
console.log(JSON.stringify(response));
process.exit(0);
}
// Success - create standardized approval response using HookTemplates
debugLog('Compression completed successfully');
const response = createHookResponse('PreCompact', true);
console.log(JSON.stringify(response));
process.exit(0);
} catch (error) {
debugLog('Pre-compact hook error', { error: error.message });
const response = createHookResponse('PreCompact', false, {
reason: `Hook execution error: ${error.message}`
});
console.log(JSON.stringify(response));
process.exit(1);
}
});