/** * The zero-LLM AI-readiness audit (M3) - the first shippable command and the * "why" layer merged into `check`. * * `buildAuditReport` is a PURE, deterministic function over already-fetched * inputs: same input in, same report out (no clock, no network). Each facet is * scored against published weights ({@link AUDIT_WEIGHTS}) and emits findings. */ import type { ExtractedPage } from '../fetcher/index.js'; import { type Finding } from '../types.js'; import { type BotAccess } from './robots.js'; /** Published category weights (sum to 100). Auditable > clever. */ export declare const AUDIT_WEIGHTS: readonly [{ readonly id: "robots"; readonly label: "AI crawler access"; readonly weight: 40; }, { readonly id: "structured"; readonly label: "Structured data"; readonly weight: 25; }, { readonly id: "llms"; readonly label: "llms.txt"; readonly weight: 15; }, { readonly id: "meta"; readonly label: "Meta basics"; readonly weight: 15; }, { readonly id: "sitemap"; readonly label: "Sitemap"; readonly weight: 5; }]; type CategoryId = (typeof AUDIT_WEIGHTS)[number]['id']; /** Inputs the audit scores. Nulls mean "absent or could not be fetched". */ export interface AuditInput { domain: string; robotsTxt: string | null; llmsTxt: string | null; llmsFullTxt: string | null; homepage: ExtractedPage | null; sampledPages: ExtractedPage[]; sitemap: { present: boolean; parseable: boolean; urlCount: number; } | null; } export interface AuditCategoryScore { id: CategoryId; label: string; weight: number; earned: number; } export interface AuditReport { schema_version: string; domain: string; score: number; findings: Finding[]; bots: BotAccess[]; categories: AuditCategoryScore[]; } /** Build the deterministic audit report from fetched inputs. */ export declare function buildAuditReport(input: AuditInput): AuditReport; export {};