import type { CollectNode, FlowState, SlotSource } from '../types/flow.js'; export interface DeterministicSlotResult { resolved: Record; ambiguous: string[]; slotSources: Record; } export declare function resolveDeterministicSlots(node: CollectNode, args: { userText: string; state: FlowState; missing: readonly string[]; }): DeterministicSlotResult; /** * Drop model-extracted values that cannot be found in the source turn. * * The guard applies ONLY to fields the node declares in `verbatimFields`. It compares the * extracted value against the raw turn text, so it can only judge slots the user is * expected to quote — an account id, an order number, a name. Extraction otherwise * normalises: "next Friday" becomes an ISO date, "four" becomes 4, a spoken complaint * becomes a written summary, and a list-reply payload never appears in the turn text at * all. Guarding those by containment drops correct values, and a dropped required field * stalls the collect node until it exhausts maxTurns. Declaring the guarded fields keeps * the anti-fabrication property where lexical evidence means something. * * No source text (undefined or blank) skips the guard — scripted merges with empty * history still accept values. */ export declare function filterByProvenance(incoming: Record, sourceText: string | undefined, guardedFields: readonly string[] | undefined): { accepted: Record; dropped: string[]; }; export declare function valueHasProvenance(value: unknown, sourceText: string): boolean; export declare function extractNumbers(text: string): number[];