#!/usr/bin/env node // 幂等补丁: 注册 session-continuity MCP 的 5 个生命周期 Hook // 使用 node 直跑 npx 缓存路径 (快 ~50ms vs npx ~3s) const fs = require('fs'); const path = require('path'); const SENTINEL = 'session-continuity-hooks-v1'; const SETTINGS = path.join(require('os').homedir(), '.claude', 'settings.json'); const HOOKS_BASE = 'C:/Users/leesu/AppData/Local/npm-cache/_npx/41147f6a3b3ef0bb/node_modules/claude-session-continuity-mcp/dist/hooks'; // 验证 hook 文件存在 const hookFiles = ['session-start.js', 'user-prompt-submit.js', 'post-tool-use.js', 'pre-compact.js', 'session-end.js']; for (const f of hookFiles) { if (!fs.existsSync(path.join(HOOKS_BASE.replace(/\//g, path.sep), f))) { console.error(`[patch] ABORT: hook file not found: ${f}`); process.exit(1); } } // 读取 settings.json const raw = fs.readFileSync(SETTINGS, 'utf8'); const settings = JSON.parse(raw); // 幂等检查 const allCmds = JSON.stringify(settings.hooks || {}); if (allCmds.includes(SENTINEL) || allCmds.includes('claude-hook-session-start') || allCmds.includes('session-continuity-mcp/dist/hooks')) { console.log('[patch] session-continuity hooks already registered, skipping'); process.exit(0); } // 备份 fs.writeFileSync(SETTINGS + '.bak.pre-sc-hooks', raw); // 确保 hooks 对象存在 if (!settings.hooks) settings.hooks = {}; const hooks = settings.hooks; function appendHook(event, entry) { if (!hooks[event]) hooks[event] = []; hooks[event].push(entry); } // 1. SessionStart — 会话开始自动加载上下文 appendHook('SessionStart', { hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/session-start.js` }] }); // 2. UserPromptSubmit — 每次提示搜索相关记忆 appendHook('UserPromptSubmit', { hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/user-prompt-submit.js` }] }); // 3. PostToolUse — Edit/Write 后追踪文件热路径 + Bash 错��检测 appendHook('PostToolUse', { matcher: 'Edit', hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/post-tool-use.js` }] }); appendHook('PostToolUse', { matcher: 'Write', hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/post-tool-use.js` }] }); appendHook('PostToolUse', { matcher: 'Bash', hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/post-tool-use.js` }] }); // 4. PreCompact — 压缩前保存结构化交接 appendHook('PreCompact', { hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/pre-compact.js` }] }); // 5. Stop — 会话结束自动提取 commit/决策/错误修复对 appendHook('Stop', { hooks: [{ type: 'command', command: `node ${HOOKS_BASE}/session-end.js` }] }); // 写入 fs.writeFileSync(SETTINGS, JSON.stringify(settings, null, 2)); console.log('[patch] session-continuity hooks registered:'); console.log(' + SessionStart → 自动加载项目���下文'); console.log(' + UserPromptSubmit → 搜索相关记忆'); console.log(' + PostToolUse (Edit/Write/Bash) → 文件追踪+错误检测'); console.log(' + PreCompact → 压缩前保存交接'); console.log(' + Stop → 会话结束自动保存'); console.log('[patch] backup: settings.json.bak.pre-sc-hooks'); console.log('[patch] 重启 Claude Code 生效');