import { type Manifest, type ManifestEntry, type SourceDiff } from './types.js';
/**
 * 读 manifest 文件。
 * 文件不存在 / 损坏 / schema 不合法 → 返 EMPTY_MANIFEST（同时调 onWarn 报告）。
 *
 * 不 throw —— manifest 只是性能优化，损坏时退化为全量重 ingest 即可。
 */
export declare function readManifest(manifestPath: string, onWarn?: (msg: string) => void): Manifest;
/**
 * 写 manifest 文件。原子替换（temp + rename），避免读到半截。
 */
export declare function writeManifest(manifestPath: string, manifest: Manifest): void;
/**
 * 计算文件 sha256 hex。文件不存在或读失败 → throw（调用方决定是否兜底）。
 *
 * 大文件友好：用 buffer reads 而不是一次性读到内存——但 wiki 源文件
 * 一般 < 1 MB，readFileSync 已经够。如果将来要 ingest 大 PDF，再换 streaming。
 */
export declare function hashFile(filePath: string): string;
/**
 * 同上但是宽松：失败时返 null（用于 lint / 增量扫描）。
 */
export declare function tryHashFile(filePath: string): string | null;
export interface DiffInputSource {
    /** Path relative to repo root (e.g. "src/X.ts" 或 ".raw/y.pdf") */
    readonly path: string;
    /** Pre-computed hash (caller responsibility) */
    readonly hash: string;
}
/**
 * 比较"当前发现的源 + 它们的 hash"和 manifest 里记录的状态。
 *
 * - added：current 里有，manifest 里没
 * - changed：两边都有但 hash 不同
 * - removed：manifest 里有，current 里没（源被删了）
 * - unchanged：两边都有且 hash 相同
 *
 * 纯函数，无 I/O。
 */
export declare function diffSources(current: readonly DiffInputSource[], manifest: Manifest): SourceDiff;
/**
 * 标记一个 source 已 ingest 过。返回新 manifest（不修改原对象）。
 *
 * 用途：每次 ingest 一个 source 后调一次。如果 path 已存在，覆盖；否则添加。
 */
export declare function recordIngest(manifest: Manifest, path: string, entry: ManifestEntry): Manifest;
/**
 * 删除一个 source 的记录（被删除时用）。返回新 manifest。
 */
export declare function removeFromManifest(manifest: Manifest, path: string): Manifest;
/**
 * 检查 source 文件 mtime > 它所派生的 page 中任何一个的 updated 字段。
 * 用于 lint：标 stale page。
 *
 * 这是 best-effort —— 跨文件系统 mtime 精度不一致（macOS HFS+ 1s，
 * Linux ext4 ns）。差几秒不算 stale。
 */
export declare function isSourceStale(sourcePath: string, pageMtime: Date | null): boolean;
//# sourceMappingURL=manifest.d.ts.map