import type { AgentDefinition } from '../agents/agentLoader';
export interface TriageResult {
    delegateTo: string | null;
    reason: string;
    matchedKeyword?: string;
    /**
     * 0.0–1.0 estimate of how confident the classifier is. Direct markers and
     * explicit keyword matches score high; token-fallback and long-input
     * heuristics score lower so callers can gate auto-route behind a threshold.
     */
    confidence: number;
}
export interface TriageOptions {
    /** When set, never delegate (useful when the user explicitly asked the main agent). */
    forceDirect?: boolean;
    /** Skip delegation when the message is shorter than this many characters. Defaults to 16. */
    shortMessageThreshold?: number;
    /** Hard ceiling on delegation: messages above this size still flow through (no extra penalty). */
    longMessageThreshold?: number;
    /** Optional keyword overrides per agent id. Replaces (not merges) the built-in defaults. */
    keywordOverrides?: Record<string, string[]>;
}
export declare function classifyIntent(message: string, agents: AgentDefinition[], options?: TriageOptions): TriageResult;
export interface ConciergeLogEntry {
    timestamp: string;
    messagePreview: string;
    delegateTo: string | null;
    reason: string;
    matchedKeyword?: string;
    confidence: number;
    /** Set when the chat path actually executed the suggestion (auto-route mode). */
    autoRouted?: boolean;
}
export declare function logConciergeDecision(projectDir: string, entry: Omit<ConciergeLogEntry, 'timestamp'> & {
    timestamp?: string;
}): Promise<void>;
export declare function readConciergeLog(projectDir: string, limit?: number): Promise<ConciergeLogEntry[]>;
//# sourceMappingURL=concierge.d.ts.map