/**
 * ClassifyIntoLaneUseCase — spec 097, FR-26.
 *
 * Hybrid lane classifier: deterministic rules first (title-prefix, body-
 * keyword, label-hint heuristics), with agent fallback only when the rules
 * report `unknown` or low-confidence multi-lane match. Returns the
 * TypeSpec-defined `ContributorLane` enum end-to-end (NFR-3 — no raw
 * strings for domain concepts).
 *
 * Mirrors the pattern used by `auto-triage-intake-item`: cheap rule
 * cascade for the easy cases, LLM escalation only when judgment is
 * actually needed.
 */
import { ContributorLane } from '../../../domain/generated/output.js';
import type { IAgentExecutorProvider } from '../../ports/output/agents/agent-executor-provider.interface.js';
/**
 * Issue content and label context used to route a contributor task to one lane.
 */
export interface ClassifyIntoLaneInput {
    /** Issue title — usually the strongest signal via prefix conventions. */
    title: string;
    /** Issue body — used by keyword heuristics and as agent context. */
    body: string;
    /** Existing labels on the issue (lowercased). May influence routing. */
    existingLabels?: readonly string[];
}
/**
 * Lane classification result, including how the decision was made.
 */
export interface ClassifyIntoLaneResult {
    /** Single TypeSpec-defined lane selected for the issue. */
    lane: ContributorLane;
    /** Source of the decision — useful for audit, opt-out, and tests. */
    source: 'rules' | 'agent';
    /** Short rationale; safe to surface in PR comments / dashboards. */
    rationale: string;
}
export declare class ClassifyIntoLaneUseCase {
    private readonly agentProvider;
    constructor(agentProvider: IAgentExecutorProvider);
    execute(input: ClassifyIntoLaneInput): Promise<ClassifyIntoLaneResult>;
    private classifyWithAgent;
}
//# sourceMappingURL=classify-into-lane.use-case.d.ts.map