/** * scoreLexicalInfluence — the DETERMINISTIC, zero-dependency influence * scorer: the same four-signal FDL frame as `scoreInfluence` * (fa / avg / persist / depth, adaptive weights, composite, stable desc * sort), with ONE substitution — cosine-over-embeddings becomes set-cosine * over word tokens. Nothing here embeds; nothing here calls the network. * * ## Honest claim (same discipline as `scoreInfluence`, one rung blinder) * * Every returned `InfluenceScore.signals` / `weights` / `adapted` is * GENUINELY computed — nothing is fabricated. But the FA signal here means * "shares words with the final answer", NOT "semantically close" and NOT * "caused". It is cheaper and BLINDER than `'semantic-alignment'`: a * paraphrase (different words, same meaning) is a miss. The claim-ladder * guarantee is unchanged — a scorer only reorders suspects; ablation alone * convicts. So the worst a lexical ranking does is confirm slower, never * wrong. * * English / ASCII by construction (the tokenizer splits on non-alphanumerics * and folds a single trailing plural `s`) — use `'semantic-alignment'` for * other languages. */ import type { Embedder, EvidenceInput, InfluenceScore, InfluenceWeights } from './types.js'; /** * Args for `scoreLexicalInfluence` — a SUPERTYPE of `ScoreInfluenceArgs`: * everything the embedding scorer takes, with `embedder` optional and NEVER * called. That supertype relationship is what makes `scoreLexicalInfluence` * assignable to `InfluenceScorer` (parameter contravariance) while remaining * honestly callable with no embedder at all. */ export interface ScoreLexicalInfluenceArgs { /** Evidence items (tool results / context sources) with ancestors. */ readonly evidence: readonly EvidenceInput[]; /** The final answer text the evidence is scored against. */ readonly finalAnswerText: string; /** Accepted only for `InfluenceScorer` compatibility. IGNORED — this scorer never embeds. */ readonly embedder?: Embedder; /** Composite weights (same frame as `scoreInfluence`). Default 0.40/0.30/0.20/0.10. */ readonly weights?: InfluenceWeights; /** PERSIST threshold on the LEXICAL overlap scale (set-cosine, 0..1). Default 0.30. */ readonly persistenceThreshold?: number; /** Accepted for compatibility; unused (nothing async to abort — resolves immediately). */ readonly signal?: AbortSignal; } /** * Score every evidence item on the four FDL signals — the LEXICAL kernel * (set-cosine over word tokens instead of embedding cosine) — and rank by * composite, descending. Ties keep input order (stable sort). * * Deterministic: same inputs → byte-identical output, every run, every * machine. Zero dependencies, zero network, sync-fast (async only to satisfy * the `InfluenceScorer` seam). Never touches `args.embedder` or `args.signal`. * * Honest claim: ranked WORD-OVERLAP proxies — cheaper and blinder than the * embedding scorer (paraphrase = miss). NOT causal attribution — see module * docs. * * @throws on duplicate evidence ids or invalid weights. */ export declare function scoreLexicalInfluence(args: ScoreLexicalInfluenceArgs): Promise;