/**
 * Shared content comparison for the resource-diff engine.
 *
 * `agents doctor` (and the plugin-drift describer) reconcile a version home's
 * copy of a resource against its resolved source by comparing bytes. Two shapes
 * of resource need it: a single file (a command, a rule, a transformed subagent)
 * and a whole directory tree (a skill, a plugin mirror, a copied workflow).
 * Both live here so every kind's differ shares ONE normalize rule, ONE ignore
 * set, and ONE symlink-skip policy instead of re-deriving them (the duplication
 * `doctor-diff.ts`'s `dirsContentMatch` had before PHNX-3504; the parallel
 * `skillDirsMatch` copies in `versions.ts` / `detectors/skills.ts` are a separate
 * follow-up cleanup so this change stays inside the fast-lane CI impact budget).
 *
 * Normalize: CRLF → LF and trim, so a trailing-newline / line-ending difference
 * between two independently-written trees is not reported as content drift. This
 * mirrors the byte compare `diffCommands` / `diffRules` already apply per file.
 */
/** OS metadata / local tooling that is never synced into a version home. */
export declare const RESOURCE_CONTENT_IGNORE: Set<string>;
/** CRLF → LF and trim, so line-ending / trailing-newline skew is not drift. */
export declare function normalizeResourceContent(content: string): string;
/**
 * True when two files exist and their normalized content is identical. A missing
 * or unreadable file on either side is a mismatch (never a silent match).
 */
export declare function filesContentMatch(a: string, b: string): boolean;
/**
 * True when two directory trees hold the same set of names and every file under
 * them matches by normalized content. Symlinks and ignored entries are skipped
 * on both sides; a name present on one side only, or a file/dir type mismatch,
 * is a mismatch. An unreadable directory on either side is a mismatch.
 */
export declare function dirsContentMatch(src: string, dst: string): boolean;
