import type { ChorusProgress, ChorusResult, ChorusRunConfig, ModelInfo, VoiceResult } from "../types.js"; import type { RunBudget } from "../runtime/budget.js"; export interface StrategyContext { runConfig: ChorusRunConfig; prompt: string; registry: ModelInfo[]; signal: AbortSignal; executeRound: (voices: ChorusRunConfig["voices"], prompt: string, roundName: string) => Promise; budget?: RunBudget; emit?: (updates: ChorusProgress[]) => void; persist?: (result: ChorusResult) => Promise; synthesize?: (voices: VoiceResult[], prompt: string) => Promise; } export interface StrategyResult { voices: VoiceResult[]; synthesisVoices: VoiceResult[]; rounds: Array<{ name: string; voices: VoiceResult[]; }>; metadata?: Record; } export interface StrategyRunner { id: string; validate?: (runConfig: ChorusRunConfig) => void; run: (context: StrategyContext) => Promise; } export declare class StrategyRegistry { private readonly runners; register(runner: StrategyRunner): void; get(id: string): StrategyRunner; } export declare const defaultStrategyRegistry: StrategyRegistry; export declare function registerBuiltinStrategies(): void; export declare function registerStrategy(runner: StrategyRunner): void; export declare function getStrategyRunner(id: string): StrategyRunner;