/**
 * Content-addressing for a project directory, shared by the distributed-render
 * adapters' `deploySite` verbs.
 *
 * Each adapter uploads a project tarball to `…/sites/<siteId>/project.tar.gz`
 * and short-circuits the upload when the object already exists. `siteId` is a
 * SHA-256 over the project's files so identical content always maps to the
 * same key — that contract has to be byte-identical across adapters, which is
 * exactly why it lives here rather than being copy-pasted per adapter.
 */
/**
 * SHA-256 over every regular file under `projectDir` (sorted by relative
 * path) → 16-character hex prefix. The prefix is the `siteId`.
 *
 * The hash includes the relative path plus every byte of each file, so a
 * same-bytes rename still yields a fresh id. We trim to 16 chars because the
 * full 64 isn't useful in an object key for legibility. Top-level segments in
 * {@link PLAN_PROJECT_DIR_SKIP_SEGMENTS} (e.g. `node_modules`) are skipped to
 * match what the plan stage copies.
 *
 * Reads are synchronous: project trees are typically tens of MB at most
 * (HTML/CSS/JS plus a few composition assets), so the simpler shape wins over
 * a streaming pipeline.
 */
export declare function hashProjectDir(projectDir: string): string;
//# sourceMappingURL=projectHash.d.ts.map