/**
 * Diff Ownership — 追踪文件变更归属，支持写前 CAS 校验。
 * CAP-011 实验性: 只做状态模型和 CAS 校验，不替换现有写入流程，不新增 hard block。
 *
 * Diff 归属分类:
 * - baseline:    任务开始前已存在的工作区变更
 * - task_owned:  本任务通过合法写入产生的变更
 * - human_external: 任务期间人类或其他进程的修改
 * - unknown:     无法归因的变更，保守处理
 *
 * CAS (Compare-And-Swap) 校验:
 * - 写前比较目标文件当前 hash 与上次记录的 hash
 * - 不一致 → 校验失败，返回冲突信息
 * - 一致或文件不存在 → 校验通过
 */
export type DiffOwnership = "baseline" | "task_owned" | "human_external" | "unknown";
export interface FileSnapshot {
    /** 文件绝对路径 */
    file_path: string;
    /** SHA-256 hex of file content at snapshot time; null if file did not exist */
    content_hash: string | null;
    /** 归属分类 */
    ownership: DiffOwnership;
    /** 哪个任务写的（task_owned 时非空） */
    task_id: string | null;
    /** 快照时间 ISO */
    captured_at: string;
}
export interface CasCheckResult {
    file_path: string;
    /** true = 文件内容与预期一致，可以写入 */
    cas_ok: boolean;
    /** 当前文件 hash（null 表示文件不存在） */
    current_hash: string | null;
    /** 预期的文件 hash（null 表示预期文件不存在） */
    expected_hash: string | null;
    /** 冲突描述 */
    conflict_reason: string | null;
    /** 根据冲突推断的归属 */
    inferred_ownership: DiffOwnership;
}
export interface DiffOwnershipState {
    /** 哪个任务持有这个状态 */
    task_id: string;
    /** 快照录时间 */
    baseline_captured_at: string;
    /** baseline 快照 */
    file_snapshots: FileSnapshot[];
}
/**
 * 捕获一组文件的 baseline 快照。
 * 文件不存在时 content_hash=null，ownership=baseline。
 */
export declare function captureBaseline(filePaths: string[], taskId: string, now?: Date): FileSnapshot[];
/**
 * 写前 CAS 校验: 比较文件当前 hash 与期望 hash。
 * - expected=null 且文件不存在 → ok（新文件）
 * - expected=hash 且文件当前 hash 一致 → ok
 * - 不一致 → 校验失败，推断归属
 */
export declare function casCheck(filePath: string, expectedHash: string | null, taskId: string, snapshots: FileSnapshot[]): CasCheckResult;
/**
 * 记录一次任务写入，返回新的 snapshot。
 */
export declare function recordTaskWrite(filePath: string, taskId: string, now?: Date): FileSnapshot;
/**
 * 根据文件路径查找最新快照（反向遍历，兼容 ES2022）。
 */
export declare function findLatestSnapshot(filePath: string, snapshots: readonly FileSnapshot[]): FileSnapshot | undefined;
/**
 * 统计各归属的文件数。
 */
export declare function summarizeOwnership(snapshots: readonly FileSnapshot[]): Record<DiffOwnership, number>;
//# sourceMappingURL=diff_ownership.d.ts.map