/** * Extract plain text from HTML for verification. This must include all * user-facing content: regular text, ``, `
`, `
`. We * use `textContent` on the document body — it gives us the same content a * reader would see, minus tags but including code/quote spans. * * Cached at the call boundary; re-computing per field would be O(N*HTML). */ export declare function getSourceText(html: string): string; /** * Verify a single LLM-sourced field value against the source text. * * Returns `true` when: * - the value (case- and whitespace-normalized) appears as a substring of * the source text; * - the value is a number AND the same number (as a string) appears in * the source text; * - the value is `null` / `undefined` (nothing to verify). * * Returns `false` when the value is not derivable from source — meaning the * LLM hallucinated and the caller should null the field. * * This is a thin wrapper that normalizes `sourceText` once and delegates to * `verifyAgainstNormalizedSource`. Hot-path callers that verify many fields * against the same source MUST normalize once at the call boundary and use * `verifyAgainstNormalizedSource` directly — see `applyEvidenceFilter`. */ export declare function verifyAgainstSource(value: unknown, sourceText: string): boolean; export interface ApplyEvidenceFilterInput { values: Record; provenance: Record; sourceText: string; /** Only verify these fields — typically the LLM-sourced subset. */ fields: string[]; } export interface ApplyEvidenceFilterResult { values: Record; rejectedFields: string[]; } /** * Apply the evidence-only filter to a subset of fields. Returns a new * `values` object where every rejected field is set to `null`, plus the * list of fields that were rejected (so callers can emit a warning). * * Non-listed fields are passed through untouched — heuristic / * structured-data values do not go through the verifier. */ export declare function applyEvidenceFilter(input: ApplyEvidenceFilterInput): ApplyEvidenceFilterResult; //# sourceMappingURL=schema-truth.d.ts.map