/** * Tier-0 of the content-moderation cascade: deterministic, sub-millisecond * blocklist matching. This is the "hard stop, never probabilistic" layer — for * the gravest categories (CSAM, sexualization of minors, terrorism) a match is a * binary block, not a score. * * IMPORTANT — this module ships the STRUCTURE and a conservative starter set, not * a production corpus. The authoritative Tier-0 detectors are external feeds that * are deliberately NOT embedded in the repo: * - CSAM / sexual_minors -> perceptual-hash feeds (PhotoDNA / NCMEC); text * heuristics here are a backstop only, never the primary detector. * - terrorism -> GIFCT-style hash sharing. * Wire those feeds in via {@link ContentPolicyConfig.blocklist} at deploy time. * The bulk of nuanced text classification is intentionally left to the Tier-2 LLM; * Tier-0 only catches unambiguous, evasion-normalized signals. */ import type { BlocklistEntry, Classification } from './types'; /** * Normalize text for matching: lower-case, strip diacritics, fold common * homoglyph/leetspeak/separator evasion (e.g. "b.o.m.b", "h4te"), collapse * whitespace. Used so blocklist terms survive trivial obfuscation. */ export declare function normalizeText(input: string): string; /** * Run the Tier-0 blocklist over `text`. Returns the highest-severity match, or * `null` if nothing matched. Hard-stop matches are returned with severity 1. */ export declare function matchBlocklist(text: string, entries: BlocklistEntry[]): (Classification & { entryId: string; hardStop: boolean; }) | null; //# sourceMappingURL=blocklist.d.ts.map