import type { Prompter } from "./prompter.js";
import type { AnySetupBox } from "./runner.js";
import type { EvePackageContract } from "./scaffold/index.js";
import type { ArgsHeadlessAiGateway, ArgsHeadlessProject, ChannelKind, ChatPreference, SetupMode, SetupState } from "./state.js";
/**
 * Options for {@link composeOnboardingBoxes}. These carry exactly what the
 * create flow's options carried: the preset answers that let each box resolve
 * without prompting, plus the directory and headless dispatch decisions.
 */
export interface OnboardingBoxesOptions {
    prompter: Prompter;
    /** Skip the name prompt and use this value. */
    presetName?: string;
    /** Skip the setup-mode prompt and use this value. */
    presetMode?: SetupMode;
    /** Skip the model prompt and use this value. */
    presetModel?: string;
    /** Skip the channels prompt and use these kinds. */
    presetChannels?: ChannelKind[];
    /** Skip the connections picker and scaffold these catalog slugs. */
    presetConnections?: string[];
    /** Skip the "Create slackbot?" prompt inside the add-to-agent step. */
    presetCreateSlackbot?: boolean;
    /** Headless-only Vercel provisioning flags. Ignored on the interactive path. */
    provisioning?: {
        project: ArgsHeadlessProject;
        aiGateway: ArgsHeadlessAiGateway;
    };
    /** Skip the chat-preference prompt and use this value. */
    presetChatPreference?: ChatPreference;
    /** Parent directory the project folder is created inside. Defaults to cwd. */
    targetDirectory?: string;
    /** Scaffold into cwd or targetDirectory instead of creating a child directory. */
    inPlace?: boolean;
    /** Allow the in-place scaffold to replace eve scaffold files that already exist. */
    overwriteExisting?: boolean;
    /** Skip the post-channel Vercel deployment entirely. */
    presetNoDeploy?: boolean;
    /**
     * Headless mode: never prompt or spawn an interactive Vercel command. Boxes
     * needing a human/browser action throw `HumanActionRequiredError`. Slack
     * setup remains an interactive/onboarding handoff, not a headless flow.
     */
    headless?: boolean;
    /** eve package metadata baked into the scaffolded `package.json`. */
    evePackage?: EvePackageContract;
}
/**
 * Composes the full programmatic onboarding flow.
 *
 * 1. The interview phase: name, then the agent itself (model, channels,
 *    connections), then where it runs (the provisioning plans).
 * 2. Input preflight before filesystem writes.
 * 3. The scaffold box writes or reuses the agent template.
 * 4. Project and gateway facts are detected and executed from the plans.
 * 5. Channel setup writes Web/Slack surfaces and returns setup facts.
 * 6. Deploy runs once when Slack was added (the connector needs a public URL).
 * 7. Chat preference is picked from the final channel state.
 */
export declare function composeOnboardingBoxes(options: OnboardingBoxesOptions): AnySetupBox<SetupState>[];
