/**
 * Funnel routing for catalog selection.
 *
 * A pure pre-filter that narrows the full item catalog down to domain-relevant
 * candidates before the heavier `resolveCatalogVotes` scoring pass runs.
 * This cuts the specialist/skill scorer work from O(N=139) to O(shortlist~15)
 * on typical tasks.
 *
 * Stage events emitted via nexusEventBus allow the dashboard command-bar strip
 * to show live funnel progress: classify → shortlist → vote → compose → execute.
 */
import type { CatalogItem, AutonomyIntent } from './types.js';
/**
 * Narrow `items` to those whose name/body contains at least one keyword from
 * the intent's primary or secondary domain.  Always returns ≥ MIN_SHORTLIST
 * items so the downstream voter never operates on an empty set.
 *
 * @param items   Full catalog for this artifact kind (e.g., all 139 specialists).
 * @param intent  Classified intent from `classifyIntent`.
 * @param kind    Human-readable kind label for event payloads (e.g., 'specialist').
 * @returns       Filtered subset of `items`.
 */
export declare function categoryFilter(items: CatalogItem[], intent: AutonomyIntent, kind: string): CatalogItem[];
export type FunnelStage = 'classify' | 'shortlist' | 'vote' | 'compose' | 'execute';
export interface FunnelStagePayload {
    stage: FunnelStage;
    /** ISO timestamp */
    at: string;
    /** Relevant task goal (first 120 chars) */
    goal?: string;
    /** Artifact kind being processed */
    kind?: string;
    /** Items before filtering */
    beforeCount?: number;
    /** Items after filtering */
    afterCount?: number;
    /** Selections assembled at compose/execute */
    selectionSummary?: Record<string, number>;
    /** Detected intent */
    taskType?: string;
    /** ms elapsed since session start */
    elapsedMs?: number;
}
/**
 * Emit a single funnel stage event on the shared event bus.
 * Dashboard SSE subscribes to `orchestrator.funnel.stage` and renders
 * the command-bar strip progress indicator.
 */
export declare function emitFunnelStage(payload: FunnelStagePayload): void;
