import type { ReactNode } from "react"; export declare const normalizeBasePath: (basePath: string | undefined) => string; /** Convert an app-local path to the URL exposed by a Next.js base-path app. */ export declare const getPublicPath: (href: string, basePath: string | undefined) => string; /** Convert a public path that may carry the base path back to its app-local form. */ export declare const stripBasePath: (href: string, basePath: string | undefined) => string; /** Keep public paths stable while adding a base path to app-local paths. */ export declare const withBasePath: (href: string, basePath: string | undefined) => string; export interface GeistdocsNavLink { external?: boolean; href: string; label: string; } /** A link inside a navbar dropdown. */ export interface GeistdocsNavDropdownItem { external?: boolean; href: string; label: string; /** * Optional column heading in the desktop panel. Items without one group * under the dropdown's own label. */ section?: string; } /** * A navbar item that opens a full-width panel of links instead of navigating, * following the vercel.com header pattern: columned sections of plain links * on desktop, a collapsible section in the mobile menu. */ export interface GeistdocsNavDropdown { items: GeistdocsNavDropdownItem[]; label: string; } export type GeistdocsNavItem = GeistdocsNavLink | GeistdocsNavDropdown; export interface GeistdocsNavbarOssProduct { description?: string; external?: boolean; featured?: boolean; href: string; /** Stable identifier used to match `navbarActiveProduct`. */ id?: string; label: string; logo?: ReactNode; section?: string; } export interface GeistdocsGithubConfig { branch?: string; editPath?: string; owner: string; repo: string; } export type GeistdocsPageSurface = "chat" | "llms" | "search" | "sitemap"; export interface GeistdocsTranslation { displayName: string; search?: string; } export type GeistdocsTranslations = Record; export interface GeistdocsFeatureConfig { enabled?: boolean; } export interface GeistdocsEveAgentConfig { /** * Start an empty eve session when Ask AI loads so the first message can skip * workflow startup latency. Requires eve 0.59 or newer and the server-only * `GEISTDOCS_CHAT_SECRET` (without it, the chat route refuses prewarm * requests). @default false */ prewarm?: boolean; /** * Base URL of a deployed eve framework agent, such as * `"https://help-eve.vercel.app"`. When set, Ask AI requests are answered * by the agent through eve's session API instead of the default AI * Gateway model. The URL is public configuration; authentication is * handled server-side (Vercel OIDC by default, or the `eveAgent.headers` * option on `createChatRoute`). */ url: string; } /** A suggested Ask AI prompt with an optional icon. */ export interface GeistdocsAISuggestion { /** Icon rendered before the suggestion text. */ icon?: ReactNode; /** Prompt shown on the suggestion and sent when a reader selects it. */ text: string; } /** A suggested Ask AI prompt: plain text, or text with an icon. */ export type GeistdocsAISuggestionInput = string | GeistdocsAISuggestion; export interface GeistdocsAIHistoryConfig { /** * Days a stored conversation is kept after its most recent message. Older * conversations are cleared when Ask AI loads. `0` stores no history, * `Infinity` never expires history, and negative values, `NaN`, and * `-Infinity` use the default. @default 30 */ retentionDays?: number; } export interface GeistdocsAIConfig extends GeistdocsFeatureConfig { /** * App-local path of the chat route the Ask AI client calls, such as * `"/api/ai-chat"`. Must start with a single `/` and carry no query string * or fragment; invalid values throw. `basePath` is added automatically, and * the generated OpenAPI document lists the route at this path. Mount * `createChatRoute` at the matching `app/` route file. * @default "/api/chat" */ endpoint?: string; /** * Answer Ask AI requests with a hosted eve framework agent. * Mutually exclusive with the `proxy` option on `createChatRoute`. */ eveAgent?: GeistdocsEveAgentConfig; /** Content rendered below the chat prompt on desktop and mobile. */ footer?: ReactNode; /** Browser-stored chat history behavior. */ history?: GeistdocsAIHistoryConfig; /** * Show thumbs up and thumbs down buttons on finished Ask AI answers. * A vote sends the question, the answer, its sources, and the current page * URL to the Geistdocs feedback service, labeled with `siteId`. * @default false */ messageFeedback?: boolean; prompt?: string; /** * Documentation retrieval used by Ask AI. Defaults to the local Orama * index. Mixedbread credentials stay server-side in environment variables. */ retrieval?: "local" | "mixedbread"; /** * Suggested prompts shown before the first message. The first four * distinct, non-blank suggestions are shown. Plain strings render without * an icon. */ suggestions?: GeistdocsAISuggestionInput[]; /** * Heading and accessible label of the chat panel. Blank values use the * default. Does not change the "Ask AI" navbar and page action buttons. * @default "Ask AI" */ title?: string; /** * Activity labels shown while a tool runs, keyed by tool name, such as * `{ web_search: "Searching..." }`. Tools without a non-blank label show * "Running ...". */ toolLabels?: Record; } export interface GeistdocsAgentResourceLink { description?: string; href: string; label: string; } export interface GeistdocsAgentProductConfig { audience?: string[]; category?: string; description?: string; name?: string; useCases?: string[]; } export interface GeistdocsAgentApiConfig { authDocsUrl?: string; errorsUrl?: string; openApiSpecs?: GeistdocsAgentOpenApiSpecConfig[]; /** OpenAPI document for the product's own API, hosted anywhere. */ openApiUrl?: string; rateLimitsUrl?: string; scopesDocsUrl?: string; /** * Root-relative path where the site serves the OpenAPI document generated * by `createOpenApiRoute`, which describes the documentation site's own * search, chat, and Markdown endpoints rather than the product API. */ siteOpenApiUrl?: string; } export interface GeistdocsAgentOpenApiSpecConfig { description?: string; label: string; url: string; } export interface GeistdocsAgentMcpServerConfig { description?: string; name: string; url: string; } export interface GeistdocsAgentMcpConfig { manifestUrl?: string; servers?: GeistdocsAgentMcpServerConfig[]; } export interface GeistdocsWebMCPConfig extends GeistdocsFeatureConfig { /** * Register the browser-local `ask_ai` WebMCP tool, which submits a question * to the site's Ask AI chat. Requires `webmcp.enabled` and Ask AI to be * enabled. * @default false */ askAI?: boolean; } export interface GeistdocsAgentReadinessConfig extends GeistdocsFeatureConfig { api?: GeistdocsAgentApiConfig; instructions?: string[]; links?: GeistdocsAgentResourceLink[]; mcp?: GeistdocsAgentMcpConfig; product?: GeistdocsAgentProductConfig; } export interface GeistdocsPageActionsConfig { askAI?: boolean; copyPage?: boolean; editSource?: boolean; openInChat?: boolean; scrollTop?: boolean; } export interface GeistdocsFooterConfig { override?: unknown; } export interface GeistdocsContentSectionConfig { dir?: string; id: string; label: string; route: `/${string}`; } export interface GeistdocsVersionConfig { description?: string; href?: string; icon?: ReactNode; id: string; label: string; routePrefix?: string; } export interface GeistdocsVersionsConfig { current: string; items: GeistdocsVersionConfig[]; } export type GeistdocsNavbarBrand = "vercel" | "labs"; export interface GeistdocsConfig { agent?: GeistdocsAgentReadinessConfig; ai?: GeistdocsAIConfig; basePath?: string; content?: GeistdocsContentSectionConfig[]; defaultLanguage?: string; feedback?: GeistdocsFeatureConfig; footer?: GeistdocsFooterConfig; github?: GeistdocsGithubConfig; language?: GeistdocsFeatureConfig; logo?: ReactNode; /** * Where the navbar wordmark (`logo`) links. Defaults to the site root * (`/`). Like other navbar links, the href is prefixed with the active * non-default language. Point it at a docs page when the site root * redirects elsewhere, so the wordmark keeps visitors on the docs. */ logoHref?: string; nav?: GeistdocsNavItem[]; /** The product this docs site is for. */ navbarActiveProduct?: string; navbarBrand?: GeistdocsNavbarBrand; /** * GitHub icon link in the navbar's action cluster. Rendered when * `github` is configured; set `{ enabled: false }` to hide it. */ navbarGithub?: GeistdocsFeatureConfig; navbarOssProducts?: GeistdocsNavbarOssProduct[]; navbarVariant?: "oss" | "standard"; pageActions?: GeistdocsPageActionsConfig; prompt?: string; search?: GeistdocsFeatureConfig; siteId?: string; /** Absolute production URL used for canonical and structured-data URLs. */ siteUrl?: string; suggestions?: string[]; theme?: GeistdocsFeatureConfig; title: string; translations?: GeistdocsTranslations; versions?: GeistdocsVersionsConfig; webmcp?: GeistdocsWebMCPConfig; } export declare const defineConfig: (config: T) => T; //# sourceMappingURL=config.d.ts.map