/**
 * Command Executor - Base class for all AI-powered CLI commands
 *
 * Provides a unified template for command execution with:
 * - Cache management
 * - LLM interaction via AI SDK
 * - Code cleaning
 * - Prompt building
 *
 * Uses Template Method pattern - subclasses implement specific logic
 * for their command type while sharing common infrastructure.
 */
import { LLMClient, type LLMOptions, type LLMContext } from "./llm-client.js";
import { CodeCleaner } from "./code-cleaner.js";
import { PromptBuilder } from "./prompt-builder.js";
export interface ExecutorOptions {
    /** LLM options */
    llm?: LLMOptions;
}
/**
 * Base class for command executors
 *
 * Type parameters:
 * - TInput: The input type for the command (e.g., a prompt string or config object)
 * - TOutput: The output type for the command (e.g., generated code)
 */
export declare abstract class CommandExecutor<TInput, TOutput> {
    protected llmClient: LLMClient;
    protected codeCleaner: CodeCleaner;
    protected promptBuilder: PromptBuilder;
    protected defaultLLMOptions: LLMOptions;
    constructor(options?: ExecutorOptions);
    /**
     * Main execution method - Template Method pattern
     *
     * Defines the algorithm structure, calling abstract methods
     * that subclasses must implement.
     */
    execute(input: TInput, options?: LLMOptions): Promise<TOutput>;
    /**
     * Validate the input before processing
     * Throw an error if input is invalid
     */
    protected abstract validateInput(input: TInput): void;
    /**
     * Prepare the LLM context from the input
     * This includes building prompts, gathering component info, etc.
     */
    protected abstract prepareContext(input: TInput): Promise<LLMContext>;
    /**
     * Process the raw LLM result into the final output
     * This includes cleaning code, parsing responses, etc.
     */
    protected abstract processResult(rawResult: string, input: TInput): Promise<TOutput>;
    /**
     * Generate a cache key from the input
     * Used to check if result is already cached
     */
    protected abstract getCacheKey(input: TInput): string;
}
//# sourceMappingURL=command-executor.d.ts.map