import './serialization/registerAll.js';
export interface StartOptions {
    cwd: string;
    port?: number;
    mode?: 'dev' | 'prod';
    pagesDir?: string;
    name?: string;
    /** M27: bootstrap-time clone of this published remote project slug, before app.listen. */
    clone?: string;
    /**
     * M01 (0.1.36): resolved `--remote-url` value (flag > config.json). `null`/
     * absent ⇒ fall back to `bootConfig.remoteApiUrl`, then the M24 prod constant
     * (applied inside RemoteHttpClient). Drives both the M24 auth client and the
     * M27 clone-fetch base URL.
     */
    remoteApiUrl?: string | null;
    /** M27 (0.1.37): did THIS bootstrap run write config.json? Drives clone rollback. */
    configCreated?: boolean;
    /** M27 (0.1.37): did THIS bootstrap run create .claude4spec/? Drives clone rollback. */
    claudeDirCreated?: boolean;
    /** M27 (0.1.37): did THIS bootstrap run create .gitignore (vs append to a user's)? Drives clone rollback. */
    gitignoreCreated?: boolean;
}
export interface ServerHandle {
    url: string;
    port: number;
    writingStyle: {
        slug: string;
        title: string;
    } | null;
    shutdown: () => Promise<void>;
}
export declare function startServer(opts: StartOptions): Promise<ServerHandle>;
