export interface AutoSyncContext { realMountDir: string; realProjectDir: string; isExcluded: (relPosix: string) => boolean; /** * Directory-only ignore patterns (ending in `/`) must only match when the * path is a directory. Callers that know the path's type pass `isDirectory`; * callers that don't (chokidar's prune filter) should check both forms. */ isIgnored: (relPosix: string, isDirectory?: boolean) => boolean; isReadonly: (relPosix: string) => boolean; isReservedFile: (relPosix: string) => boolean; } export interface AutoSyncOptions { /** Full-reconcile interval as a safety net. Default: 10_000ms. */ scanIntervalMs?: number; /** chokidar awaitWriteFinish stabilityThreshold in ms. Default: 200. */ writeFinishMs?: number; /** Invoked on errors during sync — logged by default consumer. */ onError?: (err: Error) => void; } export interface AutoSyncHandle { stop(): Promise; /** Force a reconcile now; returns number of files copied/deleted. */ reconcile(): Promise; /** Cumulative files changed (copied or deleted) since autosync started. */ totalChanges(): number; /** Resolves once both watchers have completed their initial scan. */ ready(): Promise; } export declare function startAutoSync(ctx: AutoSyncContext, opts?: AutoSyncOptions): AutoSyncHandle;