import { SystemInstaller } from './SystemInstaller';
import { AutonomousInstaller, AutonomousInstallResult } from './AutonomousInstaller';
import { DoctorCheck, SystemDoctor } from '../orchestrator/SystemDoctor';
import { ModelManager } from '../orchestrator/ModelManager';
import { HostInstallResult } from './HostInstaller';
export type InstallProfile = 'framework' | 'autonomous';
export type Host = 'claude-code' | 'gemini-cli' | 'codex';
export declare const VALID_HOSTS: ReadonlyArray<Host>;
export declare const DEFAULT_HOST: Host;
/**
 * Validates a string is a known host. Throws with a clear message listing valid hosts.
 * Use this at CLI boundary (option parsing) to reject typos early.
 */
export declare function validateHost(value: string | undefined | null): Host;
/**
 * Auto-detects which host CLI invoked OpenLife by inspecting env vars set by each CLI:
 * - claude-code sets CLAUDECODE or CLAUDE_PROJECT_DIR
 * - gemini-cli sets GEMINI_CONFIG_DIR
 * - codex sets CODEX_HOME
 * Returns null if no detection matches — caller falls back to DEFAULT_HOST.
 */
export declare function detectHostFromEnv(env?: NodeJS.ProcessEnv): Host | null;
export interface InstallFlowOptions {
    profile?: InstallProfile;
    host?: string;
    skipDoctor?: boolean;
    modelOrder?: string[];
}
export interface InstallFlowResult {
    installedAt: string;
    profile: InstallProfile;
    host: string;
    root: string;
    manifestPath: string;
    projectFilePath: string;
    doctorSummary?: {
        total: number;
        ok: number;
        failed: number;
        failedChecks: DoctorCheck[];
    };
    autonomous?: AutonomousInstallResult;
    nextCommands: string[];
    reportPath: string;
    modelChain?: string[];
    hostInstall?: HostInstallResult | {
        skipped: true;
        reason: string;
    };
}
export declare class InstallFlow {
    private root;
    private systemInstaller;
    private autonomousInstaller;
    private doctor;
    private modelManager;
    constructor(root?: string, systemInstaller?: SystemInstaller, autonomousInstaller?: AutonomousInstaller, doctor?: SystemDoctor, modelManager?: ModelManager);
    run(options?: InstallFlowOptions): InstallFlowResult;
    renderSummary(result: InstallFlowResult): string[];
    private buildDoctorSummary;
    private applyModelOrder;
    private buildNextCommands;
}
