import { type DeploymentInfo } from "#setup/project-resolution.js";
import { type Prompter } from "#setup/prompter.js";
import { type ArgsHeadlessAiGateway, type ArgsHeadlessProject, type ChannelKind, type ChatPreference, type SetupMode } from "#setup/state.js";
export interface SetupCliLogger {
    error(message: string): void;
    log(message: string): void;
}
/**
 * Preset answers for a headless `eve setup` run. They mirror the create flow's
 * preset options so a headless onboarding run is fully determined by its
 * inputs; each field is threaded into the matching onboarding box option.
 */
export interface SetupCommandPresets {
    presetName?: string;
    presetMode?: SetupMode;
    presetModel?: string;
    presetChannels?: ChannelKind[];
    presetCreateSlackbot?: boolean;
    presetNoDeploy?: boolean;
    overwriteExisting?: boolean;
    presetConnections?: string[];
    presetChatPreference?: ChatPreference;
}
export interface SetupCommandOptions {
    /**
     * Programmatic-only for now: the `eve setup` CLI registers no headless flags,
     * so a headless run is only reachable through this API with presets that
     * answer every decision. The CLI fails fast on a non-interactive terminal
     * instead of silently entering a headless run that cannot succeed.
     */
    headless?: boolean;
    /** Override for the scaffolded `eve` dependency version. Defaults to "beta",
     *  matching the create flow; ai/zod/tsgo come from build-stamped defaults. */
    evePackageVersion?: string;
    presets?: SetupCommandPresets;
    /** Headless-only Vercel provisioning flags, mirroring the create flow. */
    provisioning?: {
        project: ArgsHeadlessProject;
        aiGateway: ArgsHeadlessAiGateway;
    };
}
export interface SetupCommandDependencies {
    createPrompter: () => Prompter;
    detectDeployment(projectPath: string): Promise<DeploymentInfo>;
    isEveProject(projectPath: string): Promise<boolean>;
    hasInteractiveTerminal(): boolean;
}
/**
 * The unified `eve setup` entry. In a directory that is not yet an Eve project
 * it runs the SAME onboarding composition as `pnpm create eve`: an interactive
 * run asks the name and where the agent should live (a `./<name>` child or the
 * current directory), while a headless run scaffolds in place. Inside an
 * existing project it runs in-project setup: the channel
 * interview, then channel scaffolding, then deploy, against the detected
 * on-disk project link. Both compose the shared boxes through the shared
 * runner.
 */
export declare function runSetupCommand(logger: SetupCliLogger, appRoot: string, options: SetupCommandOptions, dependencies?: SetupCommandDependencies): Promise<void>;
