用途:处理 sn-deep-research 产出的 stitched.md,从 evidence.json 的 sources[] 收集引用元数据,将正文 [^source_id] 转为 [N] 编号引用,插入 L0/TOC,并追加参考文献。
推荐用法(sn-deep-research v2): python3 scripts/prepare_citations.py --report <report_dir>/stitched.md --evidence <report_dir>/sub_reports/d1.evidence.json <report_dir>/sub_reports/d2.evidence.json --outline <report_dir>/outline.json --output <report_dir>/report.md
参数:--report 输入 markdown(通常为 stitched.md);--evidence 全部 d*.evidence.json,用于收集 source 元数据并修复 claim-id 泄漏;--outline 可选但推荐,提供 L0、TOC 与标题结构;--output 输出 markdown(通常为 report.md);--no-l0 关闭 L0 摘要层渲染;--no-toc 关闭 TOC 渲染。
主要能力与处理逻辑:按 URL 归一化去重,同 URL source 合并为同一编号;检测 [^dN.cM] claim-id 引用泄漏,可映射到 claim evidence 时替换为对应 source_id,不能映射则报告 unresolved;按首次出现顺序分配编号;替换 [^source_id] → [N],移除脚注定义行;按 outline 插入或校准 L0/TOC;追加 ## 参考文献;写出 report.md 和同目录 citations.json;stdout 输出结构化 JSON,包含 orphan citations、claim-id leakage、TOC 和 L0 状态。
限制与控制器要求:orphan_citations 非空时不要交付,应回 writer/stitcher 修正引用或删除 unsupported 内容;claim_id_leakage.unresolved 非空时不要交付,回 writer 修正 [^dN.cM];resolved 非空但 unresolved 为空可继续,但记作警告,writer 后续应直接输出 [^source_id]。旧兼容模式:不传 --outline / --output 时会覆写 --report 文件,仅做引用编号与参考文献追加,sn-deep-research 正常流程不使用。