import type { FileSystem } from "../utils/file-system.js";
import { type SecretStore } from "../../packages/auth-store/dist/index.js";
import { createCliEnvironment } from "./environment.js";
import { createServiceRegistry, type ProviderService } from "./service-registry.js";
import { type CommandContextFactory } from "./context.js";
import { createPromptLibrary } from "./prompts.js";
import { type OptionResolvers } from "./options.js";
import { type LoggerFactory } from "./logger.js";
import { ErrorLogger } from "./error-logger.js";
import type { PromptFn, LoggerFn } from "./types.js";
import type { HttpClient } from "./http.js";
import type { CommandRunner } from "../utils/command-checks.js";
import { ProviderRegistry } from "../../packages/providers/dist/index.js";
export interface CliDependencies {
    fs: FileSystem;
    prompts: PromptFn;
    env: {
        cwd: string;
        homeDir: string;
        platform?: NodeJS.Platform;
        variables?: Record<string, string | undefined>;
    };
    logger?: LoggerFn;
    exitOverride?: boolean;
    suppressCommanderOutput?: boolean;
    httpClient?: HttpClient;
    commandRunner?: CommandRunner;
}
export interface CliContainer {
    readonly env: ReturnType<typeof createCliEnvironment>;
    readonly fs: FileSystem;
    readonly prompts: PromptFn;
    readonly promptLibrary: ReturnType<typeof createPromptLibrary>;
    readonly loggerFactory: LoggerFactory;
    readonly errorLogger: ErrorLogger;
    readonly options: OptionResolvers;
    readonly contextFactory: CommandContextFactory;
    readonly registry: ReturnType<typeof createServiceRegistry>;
    readonly providerRegistry: ProviderRegistry;
    readonly httpClient: HttpClient;
    readonly commandRunner: CommandRunner;
    readonly providers: ProviderService[];
    readonly dependencies: CliDependencies;
    readonly readApiKey: (options?: {
        readOnly?: boolean;
    }) => Promise<string | null>;
    readonly writeApiKey: (apiKey: string) => Promise<void>;
    readonly deleteApiKey: () => Promise<void>;
    readonly createPreviewProviderStore: (providerId: string, fs: FileSystem) => SecretStore | undefined;
}
export declare function createCliContainer(dependencies: CliDependencies): CliContainer;
