/**
 * Presets — 命名的 Agent 配置组合
 *
 * 核心思想: Agent 不分"类型"，只有"配置"。
 * Preset 是 Capability + Strategy + Policy 的命名组合。
 *
 * 这是统一架构的最终体现:
 *
 *   | 使用场景         | Capabilities             | Strategy     | Policies            |
 *   |------------------|--------------------------|--------------|---------------------|
 *   | chat             | Conv + Analysis          | Single       | StandardBudget      |
 *   | insight          | Analysis + Production    | FanOut+Pipe  | DeepBudget+Quality  |
 *   | remote-exec      | Conv + Analysis + System | Single       | ShortBudget+Safety  |
 *
 * 注意:
 *   - "飞书聊天" 用 chat preset，不需要单独的 Agent
 *   - "飞书远程执行" 用 remote-exec preset，Safety 由 Policy 提供
 *   - "冷启动" 和 "扫描" 统一使用 insight preset，仅编排层不同
 *
 * @module presets
 */
import { evolutionGateEvaluator, insightGateEvaluator } from './domain/insight-gate.js';
import { producerRejectionGateEvaluator } from './domain/insight-producer.js';
import { BudgetPolicy, QualityGatePolicy, SafetyPolicy } from './policies.js';
import { type Strategy } from './strategies.js';
/** Policy factory configuration */
interface PolicyFactoryConfig {
    maxIterations?: number;
    maxTokens?: number;
    temperature?: number;
    timeoutMs?: number;
    minEvidenceLength?: number;
    minFileRefs?: number;
    minToolCalls?: number;
}
/** Minimal pipeline stage shape (compatible with PipelineStrategy's PipelineStage) */
interface MinimalStage {
    name: string;
    [key: string]: unknown;
}
/** Strategy-level merge result (structurally matches StrategyResult from strategies.ts) */
interface StrategyMergeResult {
    reply: string;
    toolCalls: Array<Record<string, unknown>>;
    tokenUsage: {
        input: number;
        output: number;
    };
    iterations: number;
    [key: string]: unknown;
}
/** Declarative strategy configuration (resolved by resolveStrategy) */
interface StrategyConfig {
    type: string;
    stages?: MinimalStage[];
    maxRetries?: number;
    itemStrategy?: StrategyConfig;
    tiers?: Record<string, {
        concurrency: number;
    }>;
    merge?: (...args: unknown[]) => StrategyMergeResult;
    single?: StrategyConfig;
    pipeline?: StrategyConfig;
    fanOut?: StrategyConfig;
}
/** 所有内置 Preset */
export declare const PRESETS: Readonly<{
    chat: {
        name: string;
        description: string;
        capabilities: string[];
        strategy: {
            type: string;
        };
        policies: ((config?: PolicyFactoryConfig) => BudgetPolicy)[];
        persona: {
            role: string;
            description: string;
        };
        memory: {
            enabled: boolean;
            mode: string;
            tiers: string[];
        };
    };
    insight: {
        name: string;
        description: string;
        capabilities: string[];
        strategy: {
            type: string;
            maxRetries: number;
            stages: ({
                name: string;
                capabilities: string[];
                budget: {
                    maxIterations: number;
                    temperature: number;
                    timeoutMs: number;
                };
                systemPrompt: string;
                promptBuilder: (ctx: Record<string, unknown>) => Promise<string>;
                retryPromptBuilder: (retryCtx: {
                    reason?: string;
                }, _origPrompt: string, prev: Record<string, unknown>) => string;
                gate?: undefined;
                retryBudget?: undefined;
                skipOnDegrade?: undefined;
            } | {
                name: string;
                gate: {
                    evaluator: typeof insightGateEvaluator;
                    maxRetries: number;
                };
                capabilities?: undefined;
                budget?: undefined;
                systemPrompt?: undefined;
                promptBuilder?: undefined;
                retryPromptBuilder?: undefined;
                retryBudget?: undefined;
                skipOnDegrade?: undefined;
            } | {
                name: string;
                capabilities: string[];
                budget: {
                    temperature: number;
                    timeoutMs: number;
                    maxIterations: number;
                    searchBudget: number;
                    searchBudgetGrace: number;
                    maxSubmits: number;
                    softSubmitLimit: number;
                    idleRoundsToExit: number;
                };
                systemPrompt: string;
                promptBuilder: (ctx: Record<string, unknown>) => string;
                retryBudget: {
                    maxIterations: number;
                    temperature: number;
                    timeoutMs: number;
                };
                retryPromptBuilder: (retryCtx: {
                    reason?: string;
                }, _origPrompt: string, prev: Record<string, unknown>) => string;
                skipOnDegrade: boolean;
                gate?: undefined;
            } | {
                name: string;
                gate: {
                    evaluator: typeof producerRejectionGateEvaluator;
                    maxRetries: number;
                };
                skipOnDegrade: boolean;
                capabilities?: undefined;
                budget?: undefined;
                systemPrompt?: undefined;
                promptBuilder?: undefined;
                retryPromptBuilder?: undefined;
                retryBudget?: undefined;
            })[];
        };
        policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | ((config?: PolicyFactoryConfig) => QualityGatePolicy))[];
        persona: {
            role: string;
            description: string;
        };
        memory: {
            enabled: boolean;
        };
    };
    evolution: {
        name: string;
        description: string;
        capabilities: string[];
        strategy: {
            type: string;
            maxRetries: number;
            stages: ({
                name: string;
                capabilities: string[];
                budget: {
                    temperature: number;
                    timeoutMs: number;
                    maxIterations: number;
                    searchBudget: number;
                    searchBudgetGrace: number;
                    maxSubmits: number;
                    softSubmitLimit: number;
                    idleRoundsToExit: number;
                };
                systemPrompt: string;
                promptBuilder: (ctx: Record<string, unknown>) => string;
                gate?: undefined;
            } | {
                name: string;
                gate: {
                    evaluator: typeof evolutionGateEvaluator;
                    maxRetries: number;
                };
                capabilities?: undefined;
                budget?: undefined;
                systemPrompt?: undefined;
                promptBuilder?: undefined;
            })[];
        };
        policies: ((config?: PolicyFactoryConfig) => BudgetPolicy)[];
        persona: {
            role: string;
            description: string;
        };
        memory: {
            enabled: boolean;
        };
    };
    lark: {
        name: string;
        description: string;
        capabilities: string[];
        strategy: {
            type: string;
        };
        policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | (() => SafetyPolicy))[];
        persona: {
            role: string;
            description: string;
        };
        memory: {
            enabled: boolean;
            mode: string;
            tiers: string[];
        };
    };
    'remote-exec': {
        name: string;
        description: string;
        capabilities: string[];
        strategy: {
            type: string;
        };
        policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | (() => SafetyPolicy))[];
        persona: {
            role: string;
            description: string;
        };
        memory: {
            enabled: boolean;
            mode: string;
            tiers: string[];
        };
    };
}>;
/**
 * 将 Preset 配置中的 strategy 声明式配置转换为实际 Strategy 实例
 *
 * @param strategyConfig { type: 'single'|'pipeline'|'fan_out'|'adaptive', ...opts }
 */
export declare function resolveStrategy(strategyConfig: StrategyConfig | null | undefined): Strategy;
/**
 * 获取 Preset 并展开为可用配置
 *
 * @param [overrides] 覆盖 preset 中的特定字段
 * @returns }
 */
export declare function getPreset(presetName: string, overrides?: Record<string, unknown>): Record<string, unknown>;
declare const _default: {
    PRESETS: Readonly<{
        chat: {
            name: string;
            description: string;
            capabilities: string[];
            strategy: {
                type: string;
            };
            policies: ((config?: PolicyFactoryConfig) => BudgetPolicy)[];
            persona: {
                role: string;
                description: string;
            };
            memory: {
                enabled: boolean;
                mode: string;
                tiers: string[];
            };
        };
        insight: {
            name: string;
            description: string;
            capabilities: string[];
            strategy: {
                type: string;
                maxRetries: number;
                stages: ({
                    name: string;
                    capabilities: string[];
                    budget: {
                        maxIterations: number;
                        temperature: number;
                        timeoutMs: number;
                    };
                    systemPrompt: string;
                    promptBuilder: (ctx: Record<string, unknown>) => Promise<string>;
                    retryPromptBuilder: (retryCtx: {
                        reason?: string;
                    }, _origPrompt: string, prev: Record<string, unknown>) => string;
                    gate?: undefined;
                    retryBudget?: undefined;
                    skipOnDegrade?: undefined;
                } | {
                    name: string;
                    gate: {
                        evaluator: typeof insightGateEvaluator;
                        maxRetries: number;
                    };
                    capabilities?: undefined;
                    budget?: undefined;
                    systemPrompt?: undefined;
                    promptBuilder?: undefined;
                    retryPromptBuilder?: undefined;
                    retryBudget?: undefined;
                    skipOnDegrade?: undefined;
                } | {
                    name: string;
                    capabilities: string[];
                    budget: {
                        temperature: number;
                        timeoutMs: number;
                        maxIterations: number;
                        searchBudget: number;
                        searchBudgetGrace: number;
                        maxSubmits: number;
                        softSubmitLimit: number;
                        idleRoundsToExit: number;
                    };
                    systemPrompt: string;
                    promptBuilder: (ctx: Record<string, unknown>) => string;
                    retryBudget: {
                        maxIterations: number;
                        temperature: number;
                        timeoutMs: number;
                    };
                    retryPromptBuilder: (retryCtx: {
                        reason?: string;
                    }, _origPrompt: string, prev: Record<string, unknown>) => string;
                    skipOnDegrade: boolean;
                    gate?: undefined;
                } | {
                    name: string;
                    gate: {
                        evaluator: typeof producerRejectionGateEvaluator;
                        maxRetries: number;
                    };
                    skipOnDegrade: boolean;
                    capabilities?: undefined;
                    budget?: undefined;
                    systemPrompt?: undefined;
                    promptBuilder?: undefined;
                    retryPromptBuilder?: undefined;
                    retryBudget?: undefined;
                })[];
            };
            policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | ((config?: PolicyFactoryConfig) => QualityGatePolicy))[];
            persona: {
                role: string;
                description: string;
            };
            memory: {
                enabled: boolean;
            };
        };
        evolution: {
            name: string;
            description: string;
            capabilities: string[];
            strategy: {
                type: string;
                maxRetries: number;
                stages: ({
                    name: string;
                    capabilities: string[];
                    budget: {
                        temperature: number;
                        timeoutMs: number;
                        maxIterations: number;
                        searchBudget: number;
                        searchBudgetGrace: number;
                        maxSubmits: number;
                        softSubmitLimit: number;
                        idleRoundsToExit: number;
                    };
                    systemPrompt: string;
                    promptBuilder: (ctx: Record<string, unknown>) => string;
                    gate?: undefined;
                } | {
                    name: string;
                    gate: {
                        evaluator: typeof evolutionGateEvaluator;
                        maxRetries: number;
                    };
                    capabilities?: undefined;
                    budget?: undefined;
                    systemPrompt?: undefined;
                    promptBuilder?: undefined;
                })[];
            };
            policies: ((config?: PolicyFactoryConfig) => BudgetPolicy)[];
            persona: {
                role: string;
                description: string;
            };
            memory: {
                enabled: boolean;
            };
        };
        lark: {
            name: string;
            description: string;
            capabilities: string[];
            strategy: {
                type: string;
            };
            policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | (() => SafetyPolicy))[];
            persona: {
                role: string;
                description: string;
            };
            memory: {
                enabled: boolean;
                mode: string;
                tiers: string[];
            };
        };
        'remote-exec': {
            name: string;
            description: string;
            capabilities: string[];
            strategy: {
                type: string;
            };
            policies: (((config?: PolicyFactoryConfig) => BudgetPolicy) | (() => SafetyPolicy))[];
            persona: {
                role: string;
                description: string;
            };
            memory: {
                enabled: boolean;
                mode: string;
                tiers: string[];
            };
        };
    }>;
    resolveStrategy: typeof resolveStrategy;
    getPreset: typeof getPreset;
};
export default _default;
