/**
 * SmartRouter - LLM 스마트 라우팅 및 fallback 관리
 */
import { LLMProvider, SmartRouteRequest, SmartRouteResult, LLMAvailabilityCache } from './types.js';
/**
 * Claude 실행기 — SmartRouter 의 마지막 fallback(Claude)을 담당.
 * 기본 구현은 LLMCluster(claude CLI). 테스트에서는 mock 을 주입한다.
 */
export interface ClaudeRunner {
    claudeOrchestrate(prompt: string, systemPrompt?: string): Promise<string>;
}
/**
 * AllProvidersFailedError - 모든 LLM 프로바이더 실패 시 throw
 */
export declare class AllProvidersFailedError extends Error {
    readonly attemptedProviders: LLMProvider[];
    readonly errors: Record<string, string>;
    readonly duration: number;
    constructor(attemptedProviders: LLMProvider[], errors: Record<string, string>, duration: number);
}
/**
 * SmartRouter 설정
 */
export interface SmartRouterOptions {
    verbose?: boolean;
    /** Claude fallback 실행기 (기본: LLMCluster). 테스트 주입용. */
    claudeRunner?: ClaudeRunner;
}
/**
 * SmartRouter - Task 유형별 최적 LLM 선택 + fallback chain
 * GPT와 Antigravity를 지원
 */
export declare class SmartRouter {
    private cache;
    private verbose;
    private claudeRunner;
    constructor(options?: SmartRouterOptions);
    /**
     * 스마트 라우팅 - 작업 유형에 따라 최적의 LLM 선택 + fallback
     */
    route(request: SmartRouteRequest): Promise<SmartRouteResult>;
    /**
     * LLM 우선순위 결정
     * WHY task-based routing: GPT excels at code/reasoning tasks; Antigravity excels
     * at web search and multimodal (UI/UX). Routing by task type maximizes
     * quality while keeping Claude as the last-resort fallback (expensive).
     */
    private getProviderPriority;
    /**
     * LLM 호출 with timeout (프로바이더당 30초)
     */
    private callLlmWithTimeout;
    /**
     * LLM 호출
     */
    private callLlm;
    /**
     * 재시도 없이 즉시 다음 LLM으로 넘어가야 하는 에러
     */
    private shouldSkipRetry;
    /**
     * LLM 가용성 확인 (캐시 기반)
     */
    private isUnavailable;
    /**
     * LLM 가용 상태로 마킹
     */
    private markAvailable;
    /**
     * LLM 불가용 상태로 마킹
     */
    private markUnavailable;
    private delay;
    webSearch(query: string): Promise<SmartRouteResult>;
    architectureReview(prompt: string): Promise<SmartRouteResult>;
    uiuxReview(prompt: string): Promise<SmartRouteResult>;
    codeAnalysis(prompt: string): Promise<SmartRouteResult>;
    debugging(prompt: string): Promise<SmartRouteResult>;
    codeGen(description: string, context?: string): Promise<SmartRouteResult>;
    /**
     * 캐시 상태 조회 (디버깅용)
     */
    getCacheStatus(): LLMAvailabilityCache;
    /**
     * 캐시 초기화
     */
    resetCache(): void;
}
export declare function getSmartRouter(options?: SmartRouterOptions): SmartRouter;
//# sourceMappingURL=SmartRouter.d.ts.map