/**
 * AgentProvider + SessionProvider factory — resolves provider instances
 * for the process.
 *
 * AgentProvider handles execution (query, tool registration).
 * SessionProvider handles discovery (listing, reading, parsing old sessions).
 *
 * Both registries default to Claude Code implementations. When a second
 * adapter arrives (e.g. Codex), register it here and callers iterate
 * all providers for merged results.
 *
 * No DI container — manual construction is sufficient at this scale.
 *
 * @see plans/agent-abstraction-layer.md
 */
import type { AgentProvider, AgentProviderKind } from "./ports/AgentProvider.js";
import type { SessionProvider } from "./ports/SessionProvider.js";
export declare function getAgentProvider(): AgentProvider;
/**
 * Test-only injection hook. Replaces the process-wide provider with a test
 * double (e.g. `MockAgentProvider`). Pass `null` to reset to lazy default.
 *
 * Not intended for production use — kept intentionally undocumented in
 * user-facing places. Phase 4 (plan) uses this to prove the seam with tests.
 */
export declare function setAgentProviderForTesting(provider: AgentProvider | null): void;
/**
 * All registered session providers. Callers that list or search sessions
 * iterate over this array to merge results from all providers.
 *
 * Defaults to a single ClaudeCodeSessionProvider on first access.
 */
export declare function getSessionProviders(): readonly SessionProvider[];
/**
 * Find a specific session provider by kind.
 * Returns undefined if no provider of that kind is registered.
 */
export declare function getSessionProvider(kind: AgentProviderKind): SessionProvider | undefined;
/**
 * Test-only injection hook. Pass `null` to reset to lazy default.
 */
export declare function setSessionProvidersForTesting(providers: SessionProvider[] | null): void;
//# sourceMappingURL=factory.d.ts.map