/**
 * MCP root landing page.
 *
 * Replaces Express's default 404 at `GET /` with a content-negotiated, mode-
 * aware landing surface:
 *
 * - HTML for browsers: identity card, harness connect snippets pre-filled with
 *   the resolved host URL, and a mirrored `DOC_NAV_CATEGORIES` index linking
 *   every relevant page on the marketing site.
 * - JSON for agents / curl: same content in a structured shape.
 *
 * The rendering is fully deterministic from `buildLandingContext(req)` output;
 * all env reads happen in `resolveLandingMode` and `buildLandingContext`.
 */
import type express from "express";
import { type SandboxPack } from "../sandbox/pack_registry.js";
import { type HarnessSnippetResult, type LandingMode } from "./harness_snippets.js";
import { type RootLandingNavCategory } from "./site_nav.js";
export type { LandingMode } from "./harness_snippets.js";
export interface RootLandingContext {
    mode: LandingMode;
    configEnvironment: string;
    base: string;
    mcpUrl: string;
    version: string;
    gitSha: string | null;
    inspectorUrl: string | null;
    publicDocsUrl: string;
    /** Resolved stdio launcher path for local mode; null when unknown. */
    stdioMcpScriptPath: string | null;
    harnesses: HarnessSnippetResult[];
    index: RootLandingNavCategory[];
    /**
     * Footer navigation columns. Populated when bundled-docs nav is active so
     * the personal/MCP landing surfaces a footer that mirrors the docs site.
     */
    footerNav?: RootLandingNavCategory[];
    /**
     * True when `index` was derived from the bundled docs tree instead of the
     * static marketing nav. Disabled by `NEOTOMA_ROOT_LANDING_MARKETING_NAV=1`.
     */
    bundledDocsNav: boolean;
    endpoints: Record<string, string>;
    sandboxPacks: SandboxPack[];
    sandboxDefaultPackId: string;
    activeSessionBearer: string | null;
}
/**
 * Same resolution as `src/config.ts` (`NEOTOMA_ENV` or `development`), trimmed for display.
 * Orthogonal to landing {@link LandingMode}: e.g. loopback `local` with `production` config.
 */
export declare function readNeotomaConfigEnvironment(env?: NodeJS.ProcessEnv): string;
/**
 * Resolve the landing mode for a given request. Precedence:
 *
 *   1. Explicit `NEOTOMA_ROOT_LANDING_MODE` env.
 *   2. `isSandboxMode()` → `sandbox`.
 *   3. Loopback request → `local`.
 *   4. Default → `personal`.
 */
export declare function resolveLandingMode(req: express.Request, env?: NodeJS.ProcessEnv): LandingMode;
export declare function parseCookieBearer(req: express.Request): string | null;
export declare function buildLandingContext(req: express.Request, env?: NodeJS.ProcessEnv): RootLandingContext;
export declare function buildRootLandingHtml(ctx: RootLandingContext): string;
export declare function buildRootLandingMarkdown(ctx: RootLandingContext): string;
export declare function buildRootLandingJson(ctx: RootLandingContext): Record<string, unknown>;
export declare function buildRobotsTxt(mode: LandingMode, publicDocsUrl: string): string;
/**
 * True when the `Accept` header indicates the caller wants HTML. Defaults to
 * false (JSON) so tools like `curl` without an explicit `Accept` get the
 * structured payload.
 */
export declare function wantsHtml(acceptHeader: string | undefined): boolean;
/**
 * True when `Accept` asks for Markdown and not HTML (HTML wins when both are
 * present; callers should check {@link wantsHtml} first).
 */
export declare function wantsMarkdown(acceptHeader: string | undefined): boolean;
//# sourceMappingURL=index.d.ts.map