/**
 * Flow pipelines — declarative screen sequences for each wizard flow.
 *
 * Owns the Screen and Flow enums (re-exported by router.ts) to avoid
 * circular imports between router ↔ flows.
 *
 * Each entry defines a screen, optional visibility predicate, and
 * optional completion predicate. The router walks the active flow
 * to resolve which screen to show.
 */
import { type WizardSession } from '../../lib/wizard-session.js';
import type { WizardStore } from './store.js';
/** Screens that participate in linear flows */
export declare enum Screen {
    Intro = "intro",
    Setup = "setup",
    Auth = "auth",
    CreateProject = "create-project",
    RegionSelect = "region-select",
    EmailCapture = "email-capture",
    ToS = "tos",
    DataSetup = "data-setup",
    Options = "options",
    ActivationOptions = "activation-options",
    Run = "run",
    Mcp = "mcp",
    DataIngestionCheck = "data-ingestion-check",
    Slack = "slack",
    Outro = "outro",
    McpAdd = "mcp-add",
    McpRemove = "mcp-remove",
    SlackSetup = "slack-setup"
}
/** Named flows the router can run */
export declare enum Flow {
    Wizard = "wizard",
    McpAdd = "mcp-add",
    McpRemove = "mcp-remove",
    SlackSetup = "slack-setup",
    RegionSelect = "region-select"
}
export interface FlowEntry {
    /** Screen to show */
    screen: Screen;
    /** If provided, screen is skipped when this returns false. Omit = always show. */
    show?: (session: WizardSession) => boolean;
    /** If provided, screen is considered complete when this returns true. */
    isComplete?: (session: WizardSession) => boolean;
    /**
     * Back-navigation: undoes whatever made `isComplete` true so the router
     * resolves back to this screen on the next render. Entries without a
     * `revert` act as a wall — back-navigation is blocked past them
     * (e.g. agent Run, which would be destructive to undo).
     *
     * Return `false` when the revert was a no-op (nothing meaningful to undo);
     * the router will keep walking further back. `void` / `true` count as a
     * successful revert.
     */
    revert?: (store: WizardStore) => boolean | void;
}
/** All flow pipelines. Add new screens by appending entries. */
export declare const FLOWS: Record<Flow, FlowEntry[]>;
