/**
 * Enhanced Orchestration Modes — think, mcp, skills, variant
 *
 * 단일 모델 DAG subagents 알고리즘 고도화:
 *  - think:  CoT/추론 트레이싱 (thinking traces)
 *  - mcp:    Model Context Protocol 서버 라이브 바인딩
 *  - skills: 스킬 자동 할당 + 사용 증거 추적
 *  - variant: 동일 작업에 여러 variant 실행 → 최적 결과 선택
 */
import type { DagNode, DagNodeRouting } from "./dag.js";
export type EnhancedMode = "think" | "mcp" | "skills" | "variant";
export declare const ALL_ENHANCED_MODES: readonly EnhancedMode[];
export interface EnhancedModeConfig {
    /** 활성화된 모드 목록 */
    modes: readonly EnhancedMode[];
    /** variant 모드일 때 실행할 variant 수 (기본 3) */
    variantCount: number;
    /** variant 선택 전략 */
    variantStrategy: "majority-vote" | "best-score" | "first-pass" | "ensemble";
    /** thinking trace verbosity */
    thinkingLevel: "brief" | "normal" | "verbose";
    /** MCP 서버 목록 (빈 배열이면 discovery 자동) */
    mcpServers: readonly string[];
    /** Skills 강제 할당 (빈 배열이면 auto-assign) */
    forcedSkills: readonly string[];
    /** Hooks 강제 할당 (빈 배열이면 auto-assign) */
    forcedHooks: readonly string[];
}
export declare const DEFAULT_ENHANCED_CONFIG: EnhancedModeConfig;
export declare const FULL_ENHANCED_CONFIG: EnhancedModeConfig;
export interface ThinkingTrace {
    nodeId: string;
    runId: string;
    variantIndex?: number;
    timestamp: string;
    content: string;
    step: number;
}
export interface ThinkingSession {
    nodeId: string;
    runId: string;
    variantIndex: number;
    traces: ThinkingTrace[];
    startedAt: string;
    completedAt?: string;
}
export declare function createThinkingSession(nodeId: string, runId: string, variantIndex?: number): ThinkingSession;
export declare function addThinkingTrace(session: ThinkingSession, content: string): ThinkingTrace;
export interface McpServerBinding {
    serverName: string;
    transport: "stdio" | "streamable-http";
    command?: string;
    args?: string[];
    url?: string;
    capabilities: string[];
    status: "connected" | "disconnected" | "error";
    lastActivityAt?: string;
}
export declare function buildMcpBindingsForNode(node: DagNode, availableServers: readonly McpServerBinding[]): McpServerBinding[];
export interface SkillEvidence {
    skillName: string;
    nodeId: string;
    runId: string;
    used: boolean;
    evidenceRef?: string;
    evidenceGate?: string;
    assignedAt: string;
}
export declare function createSkillEvidence(skillName: string, nodeId: string, runId: string): SkillEvidence;
export interface NodeVariant {
    index: number;
    node: DagNode;
    /** variant-specific routing override */
    routingOverride: Partial<DagNodeRouting>;
    priority: number;
    assignedModel?: string;
}
export interface VariantResult {
    variant: NodeVariant;
    success: boolean;
    score: number;
    stdout: string;
    stderr: string;
    thinkingSession?: ThinkingSession;
    skillEvidences: SkillEvidence[];
    metadata?: Record<string, unknown>;
}
export interface VariantSelection {
    selected: VariantResult;
    allResults: VariantResult[];
    strategy: EnhancedModeConfig["variantStrategy"];
    rationale: string;
}
export declare function createNodeVariants(node: DagNode, count: number, modeConfig: EnhancedModeConfig): NodeVariant[];
export declare function selectBestVariant(results: VariantResult[], strategy: EnhancedModeConfig["variantStrategy"]): VariantSelection;
export interface ModeRoutingInjection {
    /** think 모드 추론 프롬프트 확장 */
    reasoningPrompt?: string;
    /** think 모드 생각할 시간 (ms) */
    thinkingBudgetMs?: number;
    /** MCP 서버 목록 */
    mcpServers: string[];
    /** 스킬 목록 */
    skills: string[];
    /** 훅 목록 */
    hooks: string[];
    /** 툴 목록 */
    tools: string[];
    /** MCP 필수 여부 */
    requiresMcp: boolean;
    /** 툴 콜링 필수 여부 */
    requiresToolCalling: boolean;
    /** Evidence 필수 여부 */
    evidenceRequired: boolean;
}
export declare function buildModeRoutingInjection(node: DagNode, modeConfig: EnhancedModeConfig, nodeSkills: string[], nodeMcpServers: string[], nodeHooks: string[], nodeTools: string[]): ModeRoutingInjection;
