import type { ExecutionEnv } from "../../internal/harness.js"; import { type FileSnapshotBounds, type FileSnapshotResult, type FileSnapshotStore } from "../../core/file-snapshot-store.js"; /** * design/101 §E19 — file-backed {@link FileSnapshotStore} for the local (TOC) backend: content-addressed blobs * on disk + ONE manifest file per `(scope, key)`. Semantics **byte-for-byte identical to * `InMemoryFileSnapshotStore`** (the cross-backend equivalence contract) — it REUSES core's `captureManifest`/ * `applyManifest`, so the security-critical convergence (symlink-ancestor neutralization, remove-before-write, * fail-closed) can NEVER drift from the InMemory reference. * * On-disk layout under `/file-snapshots/`: * - `blobs/` — write-ONCE content-addressed blob (an EEXIST is a dedup no-op; shared across all keys). * - `manifests//.json` — a JSON array of `[relPath, sha256]` pairs. * * Atomicity: single-process (the `FileStorageBackend` boot lock); an `inFlight` set guards create-once against * two concurrent `snapshot()`s for the same key. A blob is published atomically (write-then-link); a manifest is * written ONLY after the full capture succeeds (fail-closed — never a partial manifest). Cross-replica durable * snapshots are the Pg/TiDB/object-store backend's job. */ export declare class FileFileSnapshotStore implements FileSnapshotStore { private readonly base; private readonly blobsDir; private readonly manifestsDir; private readonly inFlight; private readonly bounds; constructor(root: string, bounds?: Partial); private scopeDir; private manifestPath; /** manifestPath, but a key that fails the strict path-component guard → null (so the seam's NEVER-throw * contract holds for a direct SDK caller; engine keys are uuidv7 so this never fires in practice). */ private tryManifestPath; private blobPath; private readManifest; snapshot(scope: string, key: string, env: ExecutionEnv, root: string, signal?: AbortSignal): Promise; restore(scope: string, key: string, env: ExecutionEnv, root: string, signal?: AbortSignal): Promise; listKeys(scope: string): Promise; has(scope: string, key: string): Promise; exportManifest(scope: string, key: string): Promise | null>; getBlob(hash: string): Promise; putBlob(hash: string, bytes: Uint8Array): Promise; importManifest(scope: string, key: string, manifest: Map, srcGetBlob: (hash: string) => Promise): Promise; reap(scope: string, keepKeys: string[]): Promise; } //# sourceMappingURL=file-snapshot-store.d.ts.map