import { SourceHit } from './ContextSource';
export interface ComposeOptions {
    budgetTokens?: number;
    sources?: Array<'story' | 'rag' | 'graph'>;
    topKPerSource?: number;
    /** Provided for tests — pass deterministic source impls. */
    storyHits?: (q: string) => Promise<SourceHit[]>;
    ragHits?: (q: string) => Promise<SourceHit[]>;
    graphHits?: (q: string) => Promise<SourceHit[]>;
}
export interface ComposeResult {
    /** Markdown block to drop into a systemPrompt. Empty if no hits. */
    block: string;
    usedTokens: number;
    hits: SourceHit[];
    trace: {
        source: string;
        n: number;
    }[];
}
/** Exposed for tests + callers that need to drop singleton+cache state. */
export declare function _resetComposerCache(): void;
export declare class ContextComposer {
    compose(query: string, opts?: ComposeOptions): Promise<ComposeResult>;
}
