import type { SandboxConcurrencyLimits } from '../../client';
import type { Entry, Mount, TypedMount } from '../../entries';
import { Manifest } from '../../manifest';
import type { SandboxPathGrant } from '../../pathGrants';
type MaterializeLocalWorkspaceOptions = {
    concurrencyLimits?: SandboxConcurrencyLimits;
    manifestRoot?: string;
    localSourceBaseDir?: string;
    localSourceGrants?: SandboxPathGrant[];
    allowLocalBindMounts?: boolean;
    allowIdentityMetadata?: boolean;
    supportsMount?: (entry: Mount | TypedMount) => boolean;
    materializeMount?: (args: {
        logicalPath: string;
        entry: Mount | TypedMount;
    }) => Promise<void>;
};
type LocalWorkspaceManifestMetadataOptions = {
    allowLocalBindMounts?: boolean;
    allowIdentityMetadata?: boolean;
    supportsMount?: (entry: Mount | TypedMount) => boolean;
};
export declare function materializeLocalWorkspaceManifest(manifest: Manifest, workspaceRootPath: string, options?: MaterializeLocalWorkspaceOptions): Promise<void>;
export declare function assertLocalWorkspaceManifestMetadataSupported(providerName: string, manifest: Manifest, options?: LocalWorkspaceManifestMetadataOptions): void;
export declare function materializeLocalWorkspaceManifestEntry(workspaceRootPath: string, logicalPath: string, entry: Entry, options?: MaterializeLocalWorkspaceOptions): Promise<void>;
export declare function materializeLocalWorkspaceManifestMounts(manifest: Manifest, workspaceRootPath: string, options?: MaterializeLocalWorkspaceOptions): Promise<void>;
/** Reapply manifest sticky intent without replacing snapshot contents or modes. */
export declare function restoreLocalWorkspaceManifestStickyPermissions(manifest: Manifest, workspaceRootPath: string): Promise<void>;
export declare function applyOwnershipRecursive(targetPath: string, uid: number, gid: number): Promise<void>;
export declare function pathExists(path: string): Promise<boolean>;
export declare function joinSandboxLogicalPath(root: string, logicalPath: string): string;
export type LocalWorkspaceContent = ({
    type: 'dir';
    path: string;
    mustBeEmpty?: boolean;
} | {
    type: 'file';
    path: string;
    content: Uint8Array;
} | {
    type: 'file';
    path: string;
    size: number;
    chunks: AsyncIterable<Uint8Array>;
} | {
    type: 'symlink';
    path: string;
    target: string;
}) & {
    permissions?: number;
};
/** Read configured resources without opening any live workspace destination. */
export declare function readLocalWorkspaceEntry(entry: Entry, localSourceGrants: SandboxPathGrant[], privateGitRoot: string | undefined): AsyncGenerator<LocalWorkspaceContent>;
export {};
