/** * normalize — one spelling for one value, on BOTH sides of the comparison. * * Pattern: a pure leaf module (no imports), shared by the extractor and the * evidence index so the two can never disagree about what "the same * value" means. * Role: core/ layer, `namesAndNumbersFromEvidence` only. * Emits: N/A. * * ## Why this file exists at all * * The answer is prose and the evidence is JSON. The same fact is spelled * differently in each: a tool returns the NUMBER `41200`, and the model writes * `41,200 IOPS.` — with a thousands separator, a unit and a full stop. A naive * matcher calls that fabricated, which is the worst failure this feature can * have: a false accusation costs a real turn under `guard` and refuses a good * answer under `rails`. * * So every value passes through {@link normalizeToken} before it is compared, * on the answer side AND on the evidence side. The rules are deliberately few * and each is here because a real spelling difference needed it. */ /** * Reduce one raw token to the form both sides compare on. * * Returns `''` for a token that is nothing but decoration — callers drop those. */ export declare function normalizeToken(raw: string): string; /** How many digit characters a string carries. */ export declare function countDigits(v: string): number; /** * Split free text into candidate tokens. * * Used on the answer (to find values to ground) and on any tool-result text * that is not JSON. Token boundaries are the whole point: a value that appears * only as a SUBSTRING of an unrelated field must not read as grounded, so * matching is always token-exact and never substring. */ export declare function tokenize(text: string): string[]; /** * The spellings of one normalized value that count as the SAME value when * looking it up. * * Only one rule so far, and it is a real one: an FCID is read off a switch as * `0xef0101` and quoted back sometimes as `ef0101`. Both sides expand, so the * prefix can be dropped by either the tool or the model without either being * accused of inventing it. */ export declare function lookupForms(normalized: string): readonly string[];