/**
 * Orchestrator Types - Agent SDK 기반 오케스트레이션 타입 정의
 */
import { ToolResult } from '../types/tool.js';
export type ClaudeModel = 'claude-sonnet-4-5' | 'claude-opus-4' | 'claude-haiku-3-5' | 'claude-haiku-4-5-20251001' | string;
export interface AgentConfig {
    name: string;
    description: string;
    prompt: string;
    model?: ClaudeModel;
    maxTurns?: number;
    allowedTools?: string[];
    systemPrompt?: string;
}
export interface AgentResult {
    agentName: string;
    sessionId: string;
    result: string;
    success: boolean;
    error?: string;
    duration: number;
}
export interface ResearchTask {
    name: string;
    prompt: string;
    category: 'best-practices' | 'framework-docs' | 'codebase-patterns' | 'security-advisory' | 'custom';
}
export interface ParallelResearchArgs {
    tasks: ResearchTask[];
    projectPath?: string;
    maxConcurrency?: number;
    timeout?: number;
}
export interface ParallelResearchResult {
    results: AgentResult[];
    totalDuration: number;
    successCount: number;
    failureCount: number;
    /** Multi-LLM 리서치 결과 */
    multiLlm?: MultiLlmResearchResult;
}
/** Multi-LLM 단일 결과 */
export interface MultiLlmResult {
    provider: 'gpt' | 'antigravity';
    category: 'best-practices' | 'security';
    result: string;
    success: boolean;
    error?: string;
    duration: number;
}
/** Multi-LLM 리서치 전체 결과 */
export interface MultiLlmResearchResult {
    results: MultiLlmResult[];
    totalDuration: number;
    successCount: number;
    failureCount: number;
}
export interface BackgroundAgentArgs {
    prompt: string;
    agentName?: string;
    model?: ClaudeModel;
    maxTurns?: number;
    allowedTools?: string[];
    projectPath?: string;
    onProgress?: (message: string) => void;
}
export interface BackgroundAgentHandle {
    sessionId: string;
    agentName: string;
    status: 'running' | 'completed' | 'failed' | 'cancelled';
    startTime: number;
    getResult: () => Promise<AgentResult>;
    cancel: () => void;
}
export interface DiscoveredAgent {
    name: string;
    path: string;
    category: string;
    description: string;
    content: string;
}
export interface AgentDiscoveryArgs {
    projectPath?: string;
    category?: string;
    pattern?: string;
}
export interface SessionInfo {
    sessionId: string;
    agentName: string;
    status: 'active' | 'completed' | 'failed';
    startTime: number;
    endTime?: number;
    prompt: string;
}
export interface SessionStore {
    sessions: Map<string, SessionInfo>;
    add: (session: SessionInfo) => void;
    get: (sessionId: string) => SessionInfo | undefined;
    list: () => SessionInfo[];
    cleanup: (maxAge: number) => void;
}
export interface OrchestratorOptions {
    projectPath?: string;
    verbose?: boolean;
    saveResults?: boolean;
    resultsPath?: string;
}
export interface AgentMessage {
    type: 'system' | 'assistant' | 'user' | 'result';
    subtype?: 'init' | 'progress' | 'tool_use' | 'tool_result';
    session_id?: string;
    content?: string;
    result?: string;
    message?: {
        content: Array<{
            type: string;
            text?: string;
        }>;
    };
}
export interface OrchestratorToolResult extends ToolResult {
    metadata?: {
        sessionId?: string;
        duration?: number;
        agentName?: string;
    };
}
/** 작업 유형 - LLM 선택에 사용 */
export type TaskType = 'architecture' | 'debugging' | 'uiux' | 'code-analysis' | 'code-gen' | 'web-search' | 'general' | 'code-review' | 'reasoning';
/** LLM 제공자 */
export type LLMProvider = 'gpt' | 'antigravity' | 'claude';
/** 스마트 라우팅 요청 */
export interface SmartRouteRequest {
    type: TaskType;
    prompt: string;
    systemPrompt?: string;
    /** 특정 LLM 강제 지정 (fallback은 여전히 동작) */
    preferredLlm?: LLMProvider;
    /** 재시도 횟수 (기본: 2) */
    maxRetries?: number;
}
/** 스마트 라우팅 결과 */
export interface SmartRouteResult {
    content: string;
    provider: LLMProvider;
    success: boolean;
    /** fallback 발생 여부 */
    usedFallback: boolean;
    /** 시도한 LLM 목록 */
    attemptedProviders: LLMProvider[];
    /** 각 LLM의 에러 (있는 경우) */
    errors?: Record<LLMProvider, string>;
    duration: number;
}
/** LLM 가용성 캐시 */
export interface LLMAvailabilityCache {
    gpt: {
        available: boolean;
        checkedAt: number;
        errorCount: number;
    };
    antigravity: {
        available: boolean;
        checkedAt: number;
        errorCount: number;
    };
}
/**
 * 작업 유형별 LLM 우선순위
 * - GPT/Antigravity → Claude (fallback)
 * - Antigravity: UI/UX, 웹 검색
 */
export declare const TASK_LLM_PRIORITY: Record<TaskType, LLMProvider[]>;
/**
 * 동적 LLM 우선순위 — Codex/Antigravity 활성화 상태에 따라 자동 조정
 *
 * 기본: Claude만 사용
 * +Codex: 추론/코딩/리뷰에 GPT 추가
 * +Antigravity: 리서치/리뷰/UI에 Antigravity 추가
 */
export declare function getTaskLlmPriority(type: TaskType): LLMProvider[];
//# sourceMappingURL=types.d.ts.map