/** * adversarial_review 差量工具 — 重审时计算「自上次审查以来产物内容的真实 diff」。 * * 职责边界: * - 负责:解析产物文件集(path_pattern glob 展开 + companion_files)、读写基线快照、 * 用 `git diff --no-index` 算 unified diff(git 不可用时回退到「变更文件清单」) * - 不负责:组装审查 prompt(handler)、存审查记录(adversarial_review_store 业务语义)、 * 决定 K 值与门禁判定 * * 被谁调用:core/adversarial_review/handler(差量重审取 diff + 写本次基线)、 * core/adversarial_review_store(基线 sidecar 读写委托本模块) * 调用谁:core/adversarial_review/collect.resolveArtifactPaths、shared/logger、git CLI * * 数据流:产物声明 + projectRoot → 当前文件内容快照 → 写入 baselineDir; * 重审时 baselineDir + projectRoot → unified diff 文本(注入审查 prompt 的「聚焦变更区」) * 持久化:基线快照写 baselineDir(由 store 指向 .soloforge/reviews//baseline/) * * 为何用 `git diff --no-index`:不需 git 仓库、不需文件被跟踪,直接比两个文件路径; * 光靠审查记录里的 artifact_git_hash(git hash-object 只算 hash 不写对象库)取不回基线内容, * 故审查创建时必须落一份基线内容快照,才能在重审时算「真 diff」。 */ import type { ArtifactDeclaration } from "../types.js"; /** 单文件基线快照:相对 projectRoot 的路径 + 当时内容 */ export interface FileSnapshot { relPath: string; content: string; } /** 解析产物需要快照的文件 relPath 集合:path_pattern glob 展开 + companion_files。 * 不含 references(references 是承接对照素材,非产物交付内容)。去重保序。 */ export declare function resolveSnapshotPaths(projectRoot: string, artifact: ArtifactDeclaration, overrides?: Record): string[]; /** 读取产物当前文件内容快照(仅含现存文件;缺失不列入)。 */ export declare function snapshotArtifactFiles(projectRoot: string, artifact: ArtifactDeclaration, overrides?: Record): Promise; /** 把基线快照写入 baselineDir(镜像 relPath 结构)。跳过不安全 relPath。 */ export declare function writeBaselineSnapshots(baselineDir: string, snapshots: FileSnapshot[]): Promise; /** 递归读取 baselineDir 下全部快照(relPath = 相对 baselineDir)。空目录/不存在返回 []。 */ export declare function readBaselineSnapshots(baselineDir: string): Promise; /** 删除 baselineDir(任务归档/审查删除时连带清理 sidecar)。不存在不报错。 */ export declare function removeBaselineSnapshots(baselineDir: string): Promise; /** 计算基线快照(baselineDir)与当前产物文件(projectRoot + artifact)的 unified diff 文本。 * 覆盖新增 / 删除 / 修改三类变更。 * 变更判定用「基线内容 vs 当前内容」纯文本比对(不依赖 git 仓库,项目未 git init 也能判); * git 可用时再补 unified diff 行级细节,git 不可用则降级为「已变更文件清单」(无行级 diff)。 * `git diff --no-index` 专为非 git 仓库设计,项目未 `git init` 仍可用;只有 git 二进制缺失才降级。 * 无变更返回 ""。累计超 MAX_DIFF_TOTAL 截断。 */ export declare function computeArtifactDiff(projectRoot: string, artifact: ArtifactDeclaration, baselineDir: string, overrides?: Record): Promise;