export type ManifestEntry = { sourceHash: string; /** Transitive agency-import paths, manifest-dir-relative, sorted. */ deps: string[]; depsHash: string; stdlibHash: string; hasPkgImports: boolean; configKey: string; compilerStamp: string; /** Manifest-dir-relative output path. */ outputPath: string; }; export type BuildManifest = { version: 1; /** Keyed by manifest-dir-relative module path. */ entries: Record; }; export declare const MANIFEST_DIR_NAME = ".agency-build"; export declare function manifestDirFor(entryFile: string): string; export declare function loadManifest(manifestDir: string): BuildManifest; export declare function saveManifest(manifestDir: string, manifest: BuildManifest): void; export declare function hashBytes(data: string | Buffer): string; export declare function hashFile(absPath: string): string | null; /** THE construction of depsHash. Writer (manifestTracker) and checker * (isEntryFresh) both call this; never inline the expression. */ export declare function computeDepsHash(depHashes: string[]): string; /** Canonical config identity. JSON.stringify is order-stable here because * every config passes through AgencyConfigSchema.safeParse (loadConfigSafe * returns result.data), and zod rebuilds objects in SCHEMA shape order — * guarded by the key-order test in lib/cli/precompile.test.ts. */ export declare function deriveConfigKey(config: unknown): string; export declare function computeStdlibHash(stdlibDir: string): string; export declare function computeCompilerStamp(distLibDir: string): string; export type FreshnessContext = { manifestDir: string; stdlibHash: string; compilerStamp: string; configKey: string; }; export declare function isEntryFresh(moduleRel: string, manifest: BuildManifest, ctx: FreshnessContext): boolean;