/**
 * 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. Other adapters
 * (e.g. OpenRouter, Codex) register via the per-kind Map; callers that
 * omit `kind` keep the historical Claude-Code default so unmodified call
 * sites are unaffected.
 *
 * No DI container — manual construction is sufficient at this scale.
 *
 * @see plans/agent-abstraction-layer.md
 * @see plans/openrouter-adapter.md
 */
import type { AgentProvider, AgentProviderKind } from "./ports/AgentProvider.js";
import type { SessionProvider } from "./ports/SessionProvider.js";
/**
 * Lazily construct the adapter for the requested provider kind.
 * Returns the same instance for repeated calls with the same kind.
 *
 * Omitting `kind` is equivalent to passing `"claude-code"` — the
 * historical default, preserved so existing callers continue to work
 * without modification.
 */
export declare function getAgentProvider(kind?: AgentProviderKind): AgentProvider;
/**
 * Test-only injection hook.
 *
 * - `setAgentProviderForTesting(provider)` — inject under the default
 *   `"claude-code"` slot. Matches the historical single-slot semantics so
 *   existing tests work unchanged.
 * - `setAgentProviderForTesting(provider, kind)` — inject under a specific
 *   slot. Used once tests need to mock a non-Claude provider.
 * - `setAgentProviderForTesting(null)` — full reset; clears every slot.
 *   Matches the prior single-slot reset so `afterEach` hooks stay correct
 *   even when a test happens to inject under multiple kinds.
 * - `setAgentProviderForTesting(null, kind)` — clear one specific slot.
 *
 * Not intended for production use — kept intentionally undocumented in
 * user-facing places.
 */
export declare function setAgentProviderForTesting(provider: AgentProvider | null, kind?: AgentProviderKind): 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. Other
 * providers (OpenRouter, Codex) are added here once their adapters land.
 */
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