export type AppLockSchemaVersion = 1;
export type AppLockEntry = Readonly<{
    id: string;
    package: Readonly<{
        name: string;
        version: string | null;
    }>;
}>;
export type AppLockFile = Readonly<{
    schemaVersion: AppLockSchemaVersion;
    apps: ReadonlyArray<AppLockEntry>;
}>;
export declare const APP_LOCK_REL_PATH: string;
export declare function parseAppLockFile(parsed: unknown, filePathAbs: string): {
    ok: true;
    file: AppLockFile;
} | {
    ok: false;
    errorText: string;
};
export declare function loadAppLockFile(params: {
    rtwsRootAbs: string;
}): Promise<Readonly<{
    kind: 'ok';
    file: AppLockFile;
    filePathAbs: string;
    exists: boolean;
}> | Readonly<{
    kind: 'error';
    errorText: string;
    filePathAbs: string;
}>>;
export declare function findLockedApp(file: AppLockFile, appId: string): AppLockEntry | null;
export declare function upsertLockedApp(params: {
    existing: AppLockFile;
    next: AppLockEntry;
}): AppLockFile;
export declare function removeLockedApp(params: {
    existing: AppLockFile;
    appId: string;
}): AppLockFile;
export declare function writeAppLockFileIfChanged(params: {
    rtwsRootAbs: string;
    file: AppLockFile;
}): Promise<void>;
