/** * robots.txt parsing and the AI-crawler access table (M3). * * The bot list is a checked-in constant so new crawlers are one line to add. * Access is evaluated for the site root ("/") only - that is what determines * whether an AI crawler may read the site at all. */ /** The AI crawlers we report on. Extend by adding a row. */ export declare const AI_BOTS: readonly [{ readonly id: "GPTBot"; readonly vendor: "OpenAI"; }, { readonly id: "OAI-SearchBot"; readonly vendor: "OpenAI"; }, { readonly id: "ClaudeBot"; readonly vendor: "Anthropic"; }, { readonly id: "anthropic-ai"; readonly vendor: "Anthropic"; }, { readonly id: "PerplexityBot"; readonly vendor: "Perplexity"; }, { readonly id: "Google-Extended"; readonly vendor: "Google"; }, { readonly id: "GoogleOther"; readonly vendor: "Google"; }, { readonly id: "CCBot"; readonly vendor: "Common Crawl"; }, { readonly id: "meta-externalagent"; readonly vendor: "Meta"; }]; export type BotAccessStatus = 'allowed' | 'blocked'; export type BotAccessVia = 'specific' | 'wildcard' | 'default'; export interface BotAccess { bot: string; vendor: string; access: BotAccessStatus; via: BotAccessVia; } interface RobotsGroup { agents: string[]; disallow: string[]; allow: string[]; } /** Parse robots.txt into user-agent groups (comments/blank lines ignored). */ export declare function parseRobots(text: string): RobotsGroup[]; /** * Per-bot access to the site root. A null/absent robots.txt means everything is * allowed by default. */ export declare function botAccessTable(robotsTxt: string | null): BotAccess[]; export {};