/**
 * Agent Executor Factory Service
 *
 * Infrastructure implementation of the IAgentExecutorFactory port.
 * Creates and caches agent executor instances based on agent type.
 *
 * Uses constructor dependency injection for the spawn function
 * to enable testability without mocking node:child_process directly.
 */
import type { AgentType, AgentConfig } from '../../../../domain/generated/output.js';
import type { IAgentExecutor } from '../../../../application/ports/output/agents/agent-executor.interface.js';
import type { IInteractiveAgentExecutor } from '../../../../application/ports/output/agents/interactive-agent-executor.interface.js';
import type { IAgentExecutorFactory, AgentCliInfo, AgentModelListing } from '../../../../application/ports/output/agents/agent-executor-factory.interface.js';
import { OpenRouterModelCatalogService } from './model-catalogs/openrouter-model-catalog.service.js';
import { TogetherAiModelCatalogService } from './model-catalogs/together-ai-model-catalog.service.js';
import type { SpawnFunction } from './types.js';
/**
 * Factory that creates and caches agent executor instances.
 *
 * Executor instances are cached per agent type (singleton per type)
 * to avoid unnecessary re-creation of stateless executors.
 */
export declare class AgentExecutorFactory implements IAgentExecutorFactory {
    private readonly spawn;
    private readonly cache;
    private readonly openRouterCatalog;
    private readonly togetherAiCatalog;
    /**
     * @param spawn - Spawn function for creating subprocesses (injectable for testing).
     * @param openRouterCatalog - Optional OpenRouter catalog (defaults to new instance).
     * @param togetherAiCatalog - Optional Together AI catalog (defaults to new instance).
     */
    constructor(spawn: SpawnFunction, openRouterCatalog?: OpenRouterModelCatalogService, togetherAiCatalog?: TogetherAiModelCatalogService);
    /**
     * Create (or return cached) executor for the specified agent type.
     *
     * @param agentType - The type of agent to create an executor for
     * @param _authConfig - Agent authentication and configuration
     * @returns A configured agent executor
     * @throws Error if the agent type is not supported
     */
    createExecutor(agentType: AgentType, _authConfig: AgentConfig): IAgentExecutor;
    /**
     * Get the list of agent types this factory can create executors for.
     *
     * @returns Array of supported agent types
     */
    getSupportedAgents(): AgentType[];
    getCliInfo(): AgentCliInfo[];
    /**
     * Get the model identifiers supported by the given agent executor.
     * Returns synchronously with no I/O — lists are static data embedded here.
     *
     * @param agentType - The agent type to query
     * @returns Array of model identifier strings, or empty array for unknown/dev agents
     */
    getSupportedModels(agentType: AgentType): string[];
    /**
     * List models available for the given agent type. For OpenRouter and
     * Together AI this hits the provider's catalog API (cached). For all other
     * agents it wraps the static list returned by {@link getSupportedModels}.
     */
    listAvailableModels(agentType: AgentType, authConfig?: AgentConfig): Promise<AgentModelListing[]>;
    /**
     * Create an interactive executor for multi-turn agent sessions.
     * Currently only Claude Code supports interactive sessions via the SDK.
     *
     * @param agentType - The type of agent to create an interactive executor for
     * @param _authConfig - Agent authentication and configuration
     * @returns A configured interactive agent executor
     * @throws Error if the agent type does not support interactive sessions
     */
    createInteractiveExecutor(agentType: AgentType, _authConfig: AgentConfig): IInteractiveAgentExecutor;
    /**
     * Check whether the given agent type supports interactive sessions.
     *
     * @param agentType - The agent type to query
     * @returns true if createInteractiveExecutor can be called for this type
     */
    supportsInteractive(agentType: AgentType): boolean;
}
//# sourceMappingURL=agent-executor-factory.service.d.ts.map