bookworm-smart-assistant/scripts/patches/patch-r3-fallback-session-id.js
Bookworm Admin b7a8e29d21 release: v6.7.0 - OTA E2E test release
- VERSION file as authoritative version source
- export.mjs reads VERSION with package.json fallback
- bw-ota.ps1 DryRun mode for safe testing
- auto-setup.ps1 bumped to v3.2.0 (Phase 8 OTA)
2026-04-27 17:59:44 +08:00

35 lines
1.4 KiB
JavaScript

#!/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);
}