/**
 * 极化工作区锁 — 防止人类在 AI 长耗时推演期间手动修改代码导致静默覆盖。
 *
 * 机制:
 * 1. 长耗时任务开始时生成 .soloforge.lock，记录 Git 工作树 Hash + 文件修改时间
 * 2. 任务完成准备写入前，校验当前 Git 工作树 Hash 和文件 mtime
 * 3. 若检测到外部变更 → 抛出 DirtyWorkspaceError，中断覆盖，要求 Diff 合并
 *
 * 锁文件格式 (JSON):
 * {
 *   "task_id": "task-xxx",
 *   "acquired_at": "ISO timestamp",
 *   "git_tree_hash": "sha256 of git diff HEAD output",
 *   "file_snapshots": { "path": { "mtime_ms": 123, "size": 456, "hash": "sha256" } }
 * }
 */
/** 文件快照 */
interface FileSnapshot {
    mtime_ms: number;
    size: number;
    hash: string;
}
/** 校验结果 */
export interface WorkspaceIntegrityResult {
    /** 是否一致（无外部变更） */
    clean: boolean;
    /** 被外部修改的文件列表 */
    dirty_files: string[];
    /** Git 工作树是否变化 */
    git_changed: boolean;
    /** 诊断消息 */
    message: string;
}
/**
 * 工作区脏数据异常 — 检测到外部修改时抛出。
 * 调用方必须捕获此异常并启动 Diff 合并流程。
 */
export declare class DirtyWorkspaceError extends Error {
    /** 被修改的文件列表 */
    readonly dirtyFiles: string[];
    /** 锁文件中的原始快照 */
    readonly originalSnapshots: Record<string, FileSnapshot>;
    /** 任务 ID */
    readonly taskId: string;
    constructor(dirtyFiles: string[], snapshots: Record<string, FileSnapshot>, taskId: string);
}
export declare class IOController {
    private projectPath;
    private lockPath;
    constructor(projectPath: string);
    /**
     * 获取工作区锁。
     * 扫描目标文件并生成快照，写入锁文件。
     * @param taskId - 任务 ID
     * @param targetFiles - 目标文件列表（将要修改的文件）
     * @param reason - 加锁原因
     */
    acquire(taskId: string, targetFiles: string[], reason: string): Promise<void>;
    /**
     * 校验工作区完整性 — 写入前必须调用。
     * @returns 校验结果
     * @throws DirtyWorkspaceError 当检测到外部修改时
     */
    verify(): Promise<WorkspaceIntegrityResult>;
    /**
     * 写入前强制校验 — 不通过则抛出 DirtyWorkspaceError。
     * @throws DirtyWorkspaceError
     */
    assertClean(): Promise<void>;
    /**
     * 释放工作区锁 — 任务完成或取消后调用。
     */
    release(): Promise<void>;
    /**
     * 检查工作区是否被锁定。
     */
    isLocked(): Promise<{
        locked: boolean;
        task_id?: string;
        reason?: string;
        expired?: boolean;
    }>;
    private readLock;
    private snapshotFiles;
    private computeGitTreeHash;
}
export {};
//# sourceMappingURL=io_controller.d.ts.map