UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

455 lines (454 loc) 15.7 kB
/** * 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;