bookworm-smart-assistant/scripts/archive/patch-interceptor-p1b.js

61 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
/**
* P1-B 补丁 — 将 rerankTopK 接入 route-interceptor.js 的 runRouteEngine()
*
* 用法: node scripts/patch-interceptor-p1b.js
* node scripts/patch-interceptor-p1b.js --dry-run
*/
const fs = require('fs');
const path = require('path');
const dryRun = process.argv.includes('--dry-run');
const HOOK_FILE = path.join(__dirname, '..', 'hooks', 'route-interceptor.js');
if (!fs.existsSync(HOOK_FILE)) {
console.error('错误: 找不到 route-interceptor.js');
process.exit(1);
}
let code = fs.readFileSync(HOOK_FILE, 'utf8');
let patchCount = 0;
// === 补丁: 归一化之前插入 reranking ===
// 匹配兼容 \r\n
const ANCHOR_RE = /( +\/\/ 归一化\r?\n const normalized = routeAnalyzer\.normalizeScores\(disambiguated\)\.slice\(0, 5\);)/;
const REPLACEMENT = ` // v5.8 P1-B: top-k reranking 精排
let reranked = disambiguated;
if (routeAnalyzer.rerankTopK) {
try {
reranked = routeAnalyzer.rerankTopK(disambiguated, queryTokens, index, 10);
} catch {}
}
// 归一化
const normalized = routeAnalyzer.normalizeScores(reranked).slice(0, 5);`;
if (ANCHOR_RE.test(code)) {
code = code.replace(ANCHOR_RE, REPLACEMENT);
patchCount++;
console.log('✓ reranking 已插入 runRouteEngine() (归一化之前)');
} else if (code.includes('P1-B: top-k reranking')) {
console.log('⊘ 已存在,跳过');
} else {
console.error('✗ 找不到锚点 (归一化行)');
}
if (patchCount === 0) {
console.log('\n无需变更。');
process.exit(0);
}
if (dryRun) {
console.log(`\n[dry-run] 将应用 ${patchCount} 个补丁,但未写入。`);
process.exit(0);
}
fs.writeFileSync(HOOK_FILE, code);
console.log(`已写入 ${patchCount} 个补丁到 route-interceptor.js`);
console.log('完成 ✓');