/**
 * ProfileManager — runtime profile manager.
 *
 * Story 5.2 — OpenLife v1.3 Agent OS Integration.
 *
 * Wraps the existing InstallStateStore + AgentManager surface with a
 * per-profile namespace concept. A Profile carries:
 *   - id, name, description
 *   - memoryNamespace (passed through to OmniMemory)
 *   - catalogScope[]  (limits which .catalog/ subtrees are visible)
 *   - toolsetAllowed[] (controls ToolsetRegistry — Story 5.3)
 *   - modelChain (optional override of ModelManager primary+fallbacks)
 *   - gatewaySettings (Telegram allowlist, /health metadata)
 *
 * Storage: `.openlife/profiles/<id>.json` + `.openlife/active-profile.json`
 *
 * Profiles default to global scope (catalogScope=[], toolsetAllowed=[*])
 * for backwards compatibility with existing AgentProfile entries.
 *
 * Lifecycle is fully append-only: create/update produce a new file
 * (atomic write); use(<id>) just updates the active-profile pointer.
 * No deletion in v1.3 — call use(<other>) and ignore the old file.
 */
export interface ProfileGatewaySettings {
    telegramAllowedUserId?: string;
    telegramBotTokenEnvVar?: string;
    healthEndpointPath?: string;
}
export interface ProfileModelChain {
    primary?: string;
    fallbacks?: string[];
}
export interface Profile {
    id: string;
    name: string;
    description?: string;
    memoryNamespace: string;
    catalogScope: string[];
    toolsetAllowed: string[];
    modelChain?: ProfileModelChain;
    gatewaySettings?: ProfileGatewaySettings;
    createdAt: string;
    updatedAt: string;
}
export interface ProfileManagerOptions {
    stateDir?: string;
}
export declare class ProfileManager {
    private readonly profilesDir;
    private readonly activeFile;
    constructor(opts?: ProfileManagerOptions);
    private profilePath;
    list(): Profile[];
    show(id: string): Profile | null;
    create(opts: {
        id: string;
        name: string;
        description?: string;
        memoryNamespace?: string;
        catalogScope?: string[];
        toolsetAllowed?: string[];
        modelChain?: ProfileModelChain;
        gatewaySettings?: ProfileGatewaySettings;
    }): Profile;
    /** Set the active profile pointer. The profile must already exist. */
    use(id: string): {
        ok: boolean;
        error?: string;
    };
    /** Return the active profile id, or null if none set. */
    active(): {
        profileId: string | null;
        profile: Profile | null;
    };
    /** Export a profile as plain JSON (for import on another machine). */
    export(id: string): Profile | null;
    /** Import a profile from a JSON object. Idempotent — overwrites on id collision. */
    import(profile: Profile): {
        ok: boolean;
        error?: string;
    };
}
