#!/usr/bin/env node /** * patch-r3-fallback-session-id.js · 2026-04-26 * 修复 project-context-injector.js 的 unknown-session 跨会话污染: * 无 session_id 时直接 exit, 不落缓存 * Idempotent: sentinel 'R3-FALLBACK-V2' */ 'use strict'; const fs = require('fs'); const path = require('path'); const HOOK = path.join(process.env.HOME || process.env.USERPROFILE || 'C:/Users/leesu', '.claude', 'hooks', 'project-context-injector.js'); const SENTINEL = 'R3-FALLBACK-V2'; const OLD = " const sessionId = hookData.session_id || 'unknown-session';\n const cacheKey = sessionId + '::' + cwd;"; const NEW = " // R3-FALLBACK-V2: 无 session_id 直接放弃, 防 'unknown-session' 跨会话缓存污染\n if (!hookData.session_id) process.exit(0);\n const sessionId = hookData.session_id;\n const cacheKey = sessionId + '::' + cwd;"; try { let raw = fs.readFileSync(HOOK, 'utf8'); if (raw.includes(SENTINEL)) { console.log('[r3-fallback] already applied, skip'); process.exit(0); } if (!raw.includes(OLD)) { console.error('[r3-fallback] anchor not found, abort'); process.exit(1); } fs.writeFileSync(HOOK + '.bak.r3fallback.' + Date.now(), raw, 'utf8'); raw = raw.replace(OLD, NEW); fs.writeFileSync(HOOK, raw, 'utf8'); console.log('[r3-fallback] applied'); } catch (e) { console.error('[r3-fallback] error:', e.message); process.exit(1); }