import type { ChoiceAttribution, AttributionUnit, Embedder } from './types.js';
export interface AttributeChoiceArgs {
    /**
     * The chosen tool being explained. `text` is what gets embedded — pass
     * name + description (the name matters: rules that NAME a tool, e.g.
     * "call report_gap", are its strongest citation).
     */
    readonly tool: {
        readonly name: string;
        readonly text: string;
    };
    /** The context units to attribute to — the system-prompt rules, the task, … */
    readonly units: readonly AttributionUnit[];
    /** Injected embedder. Wrap in an `EmbeddingCache` so rule texts embed once. */
    readonly embedder: Embedder;
    /** Abort signal threaded to the embedder (network backends). */
    readonly signal?: AbortSignal;
}
/**
 * Embed the tool text and every unit once (deduplicated batch), rank the
 * units by cosine to the tool, and report the top unit plus the per-channel
 * share of positive similarity mass.
 *
 * Fail-loud validation: empty units or duplicate unit ids throw — those are
 * caller wiring bugs, not runtime conditions.
 */
export declare function attributeChoice(args: AttributeChoiceArgs): Promise<ChoiceAttribution>;
