import { z } from "zod";
export declare const DEFAULT_HEARTBEAT_INTERVAL_MS: number;
export declare const NIGHT_HEARTBEAT_INTERVAL_MS: number;
export declare const LEGACY_HEARTBEAT_INTERVAL_MS: number;
export declare const GoogleTokensSchema: z.ZodObject<{
    access_token: z.ZodString;
    refresh_token: z.ZodString;
    token_type: z.ZodDefault<z.ZodString>;
    expiry_date: z.ZodNumber;
    scope: z.ZodString;
}, z.core.$strip>;
export type GoogleTokens = z.infer<typeof GoogleTokensSchema>;
export declare const ChannelConfigSchema: z.ZodObject<{
    telegram: z.ZodOptional<z.ZodObject<{
        enabled: z.ZodDefault<z.ZodBoolean>;
        botToken: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    discord: z.ZodOptional<z.ZodObject<{
        enabled: z.ZodDefault<z.ZodBoolean>;
        botToken: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    weixin: z.ZodOptional<z.ZodObject<{
        enabled: z.ZodDefault<z.ZodBoolean>;
        accountId: z.ZodOptional<z.ZodString>;
        baseUrl: z.ZodDefault<z.ZodString>;
        cdnBaseUrl: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type ChannelConfig = z.infer<typeof ChannelConfigSchema>;
export declare const OBS_TUNNEL_DOMAIN = "visionclawobs.com";
/**
 * Cloudflare zone ID for {@link OBS_TUNNEL_DOMAIN}. Used by setup tooling to
 * verify that a given `cert.pem` was issued for our zone (vs. a developer's
 * personal Cloudflare account) before reusing it for the dev profile.
 *
 * Can be overridden at runtime via the `VISIONCLAW_TUNNEL_ZONE_ID` env var
 * (useful if the domain ever moves to a different zone). In production the
 * default is authoritative — this constant is not user-configurable.
 */
export declare const OBS_TUNNEL_ZONE_ID_DEFAULT = "cbf534f34cd6d335f9df92ec724b0cc4";
export declare function getObsTunnelZoneId(): string;
export declare const ObsConfigSchema: z.ZodObject<{
    enabled: z.ZodDefault<z.ZodBoolean>;
    host: z.ZodDefault<z.ZodString>;
    port: z.ZodDefault<z.ZodNumber>;
    bufferSize: z.ZodDefault<z.ZodNumber>;
    tunnel: z.ZodDefault<z.ZodEnum<{
        cloudflared: "cloudflared";
        ngrok: "ngrok";
        off: "off";
    }>>;
    tunnelName: z.ZodOptional<z.ZodString>;
    tunnelHostname: z.ZodOptional<z.ZodString>;
    tunnelOriginCert: z.ZodOptional<z.ZodString>;
    tunnelConfigPath: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type ObsConfig = z.infer<typeof ObsConfigSchema>;
export declare const ModelSchema: z.ZodDefault<z.ZodEnum<{
    "claude-sonnet-4-6": "claude-sonnet-4-6";
    "claude-opus-4-6": "claude-opus-4-6";
    "claude-opus-4-8": "claude-opus-4-8";
    "gpt-5.5": "gpt-5.5";
}>>;
export type Model = z.infer<typeof ModelSchema>;
export declare const ProviderSchema: z.ZodDefault<z.ZodEnum<{
    anthropic: "anthropic";
    bedrock: "bedrock";
    vertex: "vertex";
    "9router": "9router";
    openai: "openai";
    "azure-openai": "azure-openai";
}>>;
export type Provider = z.infer<typeof ProviderSchema>;
export declare const MODEL_PROVIDER_COMPATIBILITY: {
    readonly "claude-sonnet-4-6": readonly ["anthropic", "bedrock", "vertex", "9router"];
    readonly "claude-opus-4-8": readonly ["anthropic", "bedrock", "vertex", "9router"];
    readonly "claude-opus-4-6": readonly ["anthropic", "bedrock", "vertex", "9router"];
    readonly "gpt-5.5": readonly ["openai", "azure-openai", "9router"];
};
export declare function inferModelFromProvider(provider: Provider): Model;
export declare function getSupportedProvidersForModel(model: Model): readonly Provider[];
export declare function isProviderSupportedForModel(model: Model, provider: Provider): boolean;
export declare function assertSupportedModelProvider(model: Model, provider: Provider): void;
/**
 * Pre-ship manufacturer config.
 * Contains runtime dependencies and infrastructure settings.
 */
export declare const BrowserBackendSchema: z.ZodDefault<z.ZodEnum<{
    playwright: "playwright";
    playwriter: "playwriter";
}>>;
export type BrowserBackend = z.infer<typeof BrowserBackendSchema>;
export declare const VisionClawConfigSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodObject<{
    agentName: z.ZodDefault<z.ZodString>;
    displayName: z.ZodOptional<z.ZodString>;
    gmail: z.ZodEmail;
    gmailPassword: z.ZodOptional<z.ZodString>;
    phoneNumber: z.ZodOptional<z.ZodString>;
    systemPassword: z.ZodOptional<z.ZodString>;
    googleClientId: z.ZodOptional<z.ZodString>;
    googleClientSecret: z.ZodOptional<z.ZodString>;
    model: z.ZodDefault<z.ZodEnum<{
        "claude-sonnet-4-6": "claude-sonnet-4-6";
        "claude-opus-4-6": "claude-opus-4-6";
        "claude-opus-4-8": "claude-opus-4-8";
        "gpt-5.5": "gpt-5.5";
    }>>;
    provider: z.ZodDefault<z.ZodEnum<{
        anthropic: "anthropic";
        bedrock: "bedrock";
        vertex: "vertex";
        "9router": "9router";
        openai: "openai";
        "azure-openai": "azure-openai";
    }>>;
    anthropicApiKey: z.ZodOptional<z.ZodString>;
    anthropicBaseUrl: z.ZodOptional<z.ZodString>;
    openaiApiKey: z.ZodOptional<z.ZodString>;
    azureOpenAIEndpoint: z.ZodOptional<z.ZodString>;
    azureOpenAIApiKey: z.ZodOptional<z.ZodString>;
    azureOpenAIApiVersion: z.ZodOptional<z.ZodString>;
    azureOpenAIDeployment: z.ZodOptional<z.ZodString>;
    ninerouterBaseUrl: z.ZodDefault<z.ZodString>;
    ninerouterApiKey: z.ZodOptional<z.ZodString>;
    awsRegion: z.ZodOptional<z.ZodString>;
    awsBearerToken: z.ZodOptional<z.ZodString>;
    awsAccessKeyId: z.ZodOptional<z.ZodString>;
    awsSecretAccessKey: z.ZodOptional<z.ZodString>;
    awsSessionToken: z.ZodOptional<z.ZodString>;
    vertexProjectId: z.ZodOptional<z.ZodString>;
    vertexRegion: z.ZodDefault<z.ZodString>;
    googleApplicationCredentials: z.ZodOptional<z.ZodString>;
    channels: z.ZodDefault<z.ZodObject<{
        telegram: z.ZodOptional<z.ZodObject<{
            enabled: z.ZodDefault<z.ZodBoolean>;
            botToken: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        discord: z.ZodOptional<z.ZodObject<{
            enabled: z.ZodDefault<z.ZodBoolean>;
            botToken: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        weixin: z.ZodOptional<z.ZodObject<{
            enabled: z.ZodDefault<z.ZodBoolean>;
            accountId: z.ZodOptional<z.ZodString>;
            baseUrl: z.ZodDefault<z.ZodString>;
            cdnBaseUrl: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>>;
    }, z.core.$strip>>;
    obs: z.ZodDefault<z.ZodObject<{
        enabled: z.ZodDefault<z.ZodBoolean>;
        host: z.ZodDefault<z.ZodString>;
        port: z.ZodDefault<z.ZodNumber>;
        bufferSize: z.ZodDefault<z.ZodNumber>;
        tunnel: z.ZodDefault<z.ZodEnum<{
            cloudflared: "cloudflared";
            ngrok: "ngrok";
            off: "off";
        }>>;
        tunnelName: z.ZodOptional<z.ZodString>;
        tunnelHostname: z.ZodOptional<z.ZodString>;
        tunnelOriginCert: z.ZodOptional<z.ZodString>;
        tunnelConfigPath: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    launchAtLoginEnabled: z.ZodDefault<z.ZodBoolean>;
    wallpaperEnabled: z.ZodDefault<z.ZodBoolean>;
    onboardingServiceUrl: z.ZodOptional<z.ZodString>;
    visionclawServiceApiKey: z.ZodOptional<z.ZodString>;
    skillsDir: z.ZodOptional<z.ZodString>;
    serpApiKey: z.ZodOptional<z.ZodString>;
    phonecallApiKey: z.ZodOptional<z.ZodString>;
    financialToolApiKey: z.ZodOptional<z.ZodString>;
    smsApiKey: z.ZodOptional<z.ZodString>;
    smsPhoneNumber: z.ZodOptional<z.ZodString>;
    geminiApiKey: z.ZodOptional<z.ZodString>;
    tosAccessKeyId: z.ZodOptional<z.ZodString>;
    tosAccessKeySecret: z.ZodOptional<z.ZodString>;
    backupProvider: z.ZodDefault<z.ZodEnum<{
        gdrive: "gdrive";
        tos: "tos";
    }>>;
    backupTosBucket: z.ZodDefault<z.ZodString>;
    backupTosRegion: z.ZodDefault<z.ZodString>;
    backupTosEndpoint: z.ZodDefault<z.ZodString>;
    backupTosPublicEndpoint: z.ZodDefault<z.ZodString>;
    backupTosSignedUrlExpiresSeconds: z.ZodDefault<z.ZodNumber>;
    backupDesktopEnabled: z.ZodDefault<z.ZodBoolean>;
    backupDesktopMaxBytes: z.ZodDefault<z.ZodNumber>;
    browserBackend: z.ZodDefault<z.ZodEnum<{
        playwright: "playwright";
        playwriter: "playwriter";
    }>>;
    e2e: z.ZodOptional<z.ZodObject<{
        google: z.ZodOptional<z.ZodObject<{
            meetGuestEmail: z.ZodOptional<z.ZodEmail>;
            meetGuestBrowserProfileDir: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
    }, z.core.$strip>>;
    playwriterRelayPort: z.ZodOptional<z.ZodNumber>;
    playwriterRelayHost: z.ZodOptional<z.ZodString>;
    imageArchive: z.ZodOptional<z.ZodObject<{
        provider: z.ZodEnum<{
            tos: "tos";
            s3: "s3";
        }>;
        bucket: z.ZodString;
        tosAccessKeyId: z.ZodOptional<z.ZodString>;
        tosAccessKeySecret: z.ZodOptional<z.ZodString>;
        tosRegion: z.ZodDefault<z.ZodString>;
        tosEndpoint: z.ZodDefault<z.ZodString>;
        s3AccessKeyId: z.ZodOptional<z.ZodString>;
        s3SecretAccessKey: z.ZodOptional<z.ZodString>;
        s3Region: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>>;
    machineId: z.ZodOptional<z.ZodString>;
    machineSerial: z.ZodOptional<z.ZodString>;
}, z.core.$strip>>;
export type VisionClawConfig = z.infer<typeof VisionClawConfigSchema>;
/**
 * Post-ship owner config.
 * Populated during Telegram onboarding after the agent is delivered.
 */
export declare const OwnerConfigSchema: z.ZodObject<{
    ownerName: z.ZodString;
    ownerEmail: z.ZodString;
    phoneNumber: z.ZodOptional<z.ZodString>;
    telegramChatId: z.ZodOptional<z.ZodNumber>;
    allowedDiscordChannelIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
    heartbeatIntervalMs: z.ZodDefault<z.ZodNumber>;
    dualSessionEnabled: z.ZodDefault<z.ZodBoolean>;
    androidUseEnabled: z.ZodDefault<z.ZodBoolean>;
    chatMonitorEnabled: z.ZodDefault<z.ZodBoolean>;
    onboardingComplete: z.ZodDefault<z.ZodBoolean>;
    onboardingCode: z.ZodOptional<z.ZodString>;
    onboardingCodeVerified: z.ZodDefault<z.ZodBoolean>;
    onboardedAt: z.ZodOptional<z.ZodString>;
    silentCompaction: z.ZodDefault<z.ZodBoolean>;
    language: z.ZodDefault<z.ZodString>;
    timezone: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type OwnerConfig = z.infer<typeof OwnerConfigSchema>;
export declare const TelegramAccessStatusSchema: z.ZodEnum<{
    pending: "pending";
    approved: "approved";
    blocked: "blocked";
}>;
export type TelegramAccessStatus = z.infer<typeof TelegramAccessStatusSchema>;
export declare const TelegramChatKindSchema: z.ZodEnum<{
    dm: "dm";
    group: "group";
    supergroup: "supergroup";
}>;
export type TelegramChatKind = z.infer<typeof TelegramChatKindSchema>;
export declare const TelegramChatAccessEntrySchema: z.ZodObject<{
    id: z.ZodString;
    chatId: z.ZodNumber;
    userId: z.ZodOptional<z.ZodNumber>;
    kind: z.ZodEnum<{
        dm: "dm";
        group: "group";
        supergroup: "supergroup";
    }>;
    title: z.ZodString;
    username: z.ZodOptional<z.ZodString>;
    status: z.ZodEnum<{
        pending: "pending";
        approved: "approved";
        blocked: "blocked";
    }>;
    firstSeenAt: z.ZodString;
    lastSeenAt: z.ZodString;
    pendingMessageCount: z.ZodDefault<z.ZodNumber>;
    lastMessagePreview: z.ZodOptional<z.ZodString>;
    lastOwnerNotifiedAt: z.ZodOptional<z.ZodString>;
    autoReplySentAt: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type TelegramChatAccessEntry = z.infer<typeof TelegramChatAccessEntrySchema>;
export declare const StoredTelegramMessageSchema: z.ZodObject<{
    entryId: z.ZodString;
    message_id: z.ZodNumber;
    date: z.ZodNumber;
    text: z.ZodOptional<z.ZodString>;
    caption: z.ZodOptional<z.ZodString>;
    chat: z.ZodObject<{
        id: z.ZodNumber;
        type: z.ZodEnum<{
            group: "group";
            supergroup: "supergroup";
            private: "private";
        }>;
        title: z.ZodOptional<z.ZodString>;
        first_name: z.ZodOptional<z.ZodString>;
        last_name: z.ZodOptional<z.ZodString>;
        username: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>;
    from: z.ZodOptional<z.ZodObject<{
        id: z.ZodNumber;
        first_name: z.ZodOptional<z.ZodString>;
        last_name: z.ZodOptional<z.ZodString>;
        username: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    photo: z.ZodOptional<z.ZodArray<z.ZodObject<{
        file_id: z.ZodString;
    }, z.core.$strip>>>;
    document: z.ZodOptional<z.ZodObject<{
        file_id: z.ZodString;
        file_name: z.ZodOptional<z.ZodString>;
        mime_type: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    voice: z.ZodOptional<z.ZodObject<{
        file_id: z.ZodString;
        mime_type: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    video: z.ZodOptional<z.ZodObject<{
        file_id: z.ZodString;
        mime_type: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    sticker: z.ZodOptional<z.ZodObject<{
        file_id: z.ZodString;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type StoredTelegramMessage = z.infer<typeof StoredTelegramMessageSchema>;
export declare const TelegramAccessConfigSchema: z.ZodObject<{
    unknownDmPolicy: z.ZodDefault<z.ZodEnum<{
        require_approval: "require_approval";
    }>>;
    unknownGroupPolicy: z.ZodDefault<z.ZodEnum<{
        require_approval: "require_approval";
    }>>;
    entries: z.ZodDefault<z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        chatId: z.ZodNumber;
        userId: z.ZodOptional<z.ZodNumber>;
        kind: z.ZodEnum<{
            dm: "dm";
            group: "group";
            supergroup: "supergroup";
        }>;
        title: z.ZodString;
        username: z.ZodOptional<z.ZodString>;
        status: z.ZodEnum<{
            pending: "pending";
            approved: "approved";
            blocked: "blocked";
        }>;
        firstSeenAt: z.ZodString;
        lastSeenAt: z.ZodString;
        pendingMessageCount: z.ZodDefault<z.ZodNumber>;
        lastMessagePreview: z.ZodOptional<z.ZodString>;
        lastOwnerNotifiedAt: z.ZodOptional<z.ZodString>;
        autoReplySentAt: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>>;
    heldMessages: z.ZodDefault<z.ZodArray<z.ZodObject<{
        entryId: z.ZodString;
        message_id: z.ZodNumber;
        date: z.ZodNumber;
        text: z.ZodOptional<z.ZodString>;
        caption: z.ZodOptional<z.ZodString>;
        chat: z.ZodObject<{
            id: z.ZodNumber;
            type: z.ZodEnum<{
                group: "group";
                supergroup: "supergroup";
                private: "private";
            }>;
            title: z.ZodOptional<z.ZodString>;
            first_name: z.ZodOptional<z.ZodString>;
            last_name: z.ZodOptional<z.ZodString>;
            username: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>;
        from: z.ZodOptional<z.ZodObject<{
            id: z.ZodNumber;
            first_name: z.ZodOptional<z.ZodString>;
            last_name: z.ZodOptional<z.ZodString>;
            username: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        photo: z.ZodOptional<z.ZodArray<z.ZodObject<{
            file_id: z.ZodString;
        }, z.core.$strip>>>;
        document: z.ZodOptional<z.ZodObject<{
            file_id: z.ZodString;
            file_name: z.ZodOptional<z.ZodString>;
            mime_type: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        voice: z.ZodOptional<z.ZodObject<{
            file_id: z.ZodString;
            mime_type: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        video: z.ZodOptional<z.ZodObject<{
            file_id: z.ZodString;
            mime_type: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        sticker: z.ZodOptional<z.ZodObject<{
            file_id: z.ZodString;
        }, z.core.$strip>>;
    }, z.core.$strip>>>;
}, z.core.$strip>;
export type TelegramAccessConfig = z.infer<typeof TelegramAccessConfigSchema>;
//# sourceMappingURL=types.d.ts.map