UNPKG

flashbacker

Version:

Claude Code state management with session continuity and AI personas

86 lines 3.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerHooks = registerHooks; exports.checkHooksInstalled = checkHooksInstalled; exports.unregisterHooks = unregisterHooks; const fs_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const claude_config_1 = require("../utils/claude-config"); async function registerHooks(projectDir) { const scriptsDir = path_1.default.join(projectDir, '.claude', 'flashback', 'scripts'); // Write hooks to PROJECT-LEVEL settings to ensure precedence over global const projectSettingsPath = path_1.default.join(projectDir, '.claude', 'settings.json'); let settings = {}; if (await fs_extra_1.default.pathExists(projectSettingsPath)) { try { settings = JSON.parse(await fs_extra_1.default.readFile(projectSettingsPath, 'utf-8')); } catch { settings = {}; } } settings.hooks = settings.hooks || {}; // SessionStart hooks: run session-start.sh and clear statusline cache settings.hooks.SessionStart = [ { hooks: [{ type: 'command', command: `bash "${path_1.default.join(scriptsDir, 'session-start.sh')}"`, }], }, { hooks: [{ type: 'command', command: `bash -lc 'rm -f "$CLAUDE_PROJECT_DIR/.claude/statusline/state.json"'` }], }, ]; await fs_extra_1.default.ensureDir(path_1.default.dirname(projectSettingsPath)); await fs_extra_1.default.writeFile(projectSettingsPath, JSON.stringify(settings, null, 2)); } async function checkHooksInstalled(projectDir) { if (projectDir) { const projectSettingsPath = path_1.default.join(projectDir, '.claude', 'settings.json'); if (!await fs_extra_1.default.pathExists(projectSettingsPath)) return false; try { const settings = JSON.parse(await fs_extra_1.default.readFile(projectSettingsPath, 'utf-8')); return !!(settings.hooks?.SessionStart?.length); } catch { return false; } } const settings = await (0, claude_config_1.getClaudeSettings)(); return !!(settings.hooks?.SessionStart?.length); } async function unregisterHooks(projectDir) { if (projectDir) { const projectSettingsPath = path_1.default.join(projectDir, '.claude', 'settings.json'); if (!await fs_extra_1.default.pathExists(projectSettingsPath)) return; try { const settings = JSON.parse(await fs_extra_1.default.readFile(projectSettingsPath, 'utf-8')); if (!settings.hooks) return; delete settings.hooks.PreCompact; delete settings.hooks.SessionStart; await fs_extra_1.default.writeFile(projectSettingsPath, JSON.stringify(settings, null, 2)); return; } catch { return; } } // Fallback: operate on global if no projectDir specified const settings = await (0, claude_config_1.getClaudeSettings)(); if (!settings.hooks) return; delete settings.hooks.PreCompact; delete settings.hooks.SessionStart; await (0, claude_config_1.updateClaudeSettings)(settings); } //# sourceMappingURL=hooks.js.map