`, ``, ``. 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