import { CLIAgentResponse } from './types/brutalist.js';
import { ModelResolver } from './model-resolver.js';
export type BrutalistPromptType = 'code' | 'codebase' | 'architecture' | 'idea' | 'research' | 'data' | 'security' | 'product' | 'infrastructure' | 'debate' | 'dependencies' | 'fileStructure' | 'gitHistory' | 'testCoverage' | 'design';
export declare const CLAUDE_ALIASES: readonly ["opus", "sonnet", "haiku"];
export interface CLIAgentOptions {
    workingDirectory?: string;
    timeout?: number;
    clis?: ('claude' | 'codex' | 'gemini')[];
    analysisType?: BrutalistPromptType;
    models?: {
        claude?: string;
        codex?: string;
        gemini?: string;
    };
    onStreamingEvent?: (event: StreamingEvent) => void;
    progressToken?: string | number;
    onProgress?: (progress: number, total: number | undefined, message: string) => void;
    sessionId?: string;
    requestId?: string;
    debateMode?: boolean;
    mcpServers?: string[];
}
export interface StreamingEvent {
    type: 'agent_start' | 'agent_progress' | 'agent_complete' | 'agent_error';
    agent: 'claude' | 'codex' | 'gemini' | 'system';
    content?: string;
    timestamp: number;
    sessionId?: string;
    metadata?: Record<string, any>;
}
export interface CLIContext {
    availableCLIs: ('claude' | 'codex' | 'gemini')[];
}
export declare class CLIAgentOrchestrator {
    private defaultTimeout;
    private defaultWorkingDir;
    private cliContext;
    private cliContextCached;
    private cliContextCacheTime;
    private readonly CLI_CACHE_TTL;
    private runningCLIs;
    private readonly MAX_CONCURRENT_CLIS;
    readonly modelResolver: ModelResolver;
    private streamingBuffers;
    private readonly STREAMING_FLUSH_INTERVAL;
    private readonly MAX_CHUNK_SIZE;
    private readonly HEARTBEAT_INTERVAL;
    private lastHeartbeat;
    constructor(modelResolver?: ModelResolver);
    private parseNDJSON;
    private decodeClaudeStreamJson;
    private extractCodexAgentMessage;
    private emitThrottledStreamingEvent;
    private buildCLICommand;
    detectCLIContext(): Promise<CLIContext>;
    selectSingleCLI(preferredCLI?: 'claude' | 'codex' | 'gemini', analysisType?: BrutalistPromptType): 'claude' | 'codex' | 'gemini';
    private _executeCLI;
    executeClaudeCode(userPrompt: string, systemPromptSpec: string, options?: CLIAgentOptions): Promise<CLIAgentResponse>;
    executeCodex(userPrompt: string, systemPromptSpec: string, options?: CLIAgentOptions): Promise<CLIAgentResponse>;
    executeGemini(userPrompt: string, systemPromptSpec: string, options?: CLIAgentOptions): Promise<CLIAgentResponse>;
    executeSingleCLI(cli: 'claude' | 'codex' | 'gemini', userPrompt: string, systemPromptSpec: string, options?: CLIAgentOptions): Promise<CLIAgentResponse>;
    private waitForAvailableSlot;
    executeCLIAgents(cliAgents: string[], systemPrompt: string, userPrompt: string, options?: CLIAgentOptions): Promise<CLIAgentResponse[]>;
    executeCLIAgent(agent: string, systemPrompt: string, userPrompt: string, options?: CLIAgentOptions): Promise<CLIAgentResponse>;
    executeBrutalistAnalysis(analysisType: BrutalistPromptType, primaryContent: string, systemPromptSpec: string, context?: string, options?: CLIAgentOptions): Promise<CLIAgentResponse[]>;
    synthesizeBrutalistFeedback(responses: CLIAgentResponse[], analysisType: string): string;
    private constructUserPrompt;
}
//# sourceMappingURL=cli-agents.d.ts.map