import Logger from '../infrastructure/logging/Logger.js';
import type { ServiceMap } from './ServiceMap.js';
/**
 * DependencyInjection 容器
 * 管理所有应用层的仓储、服务和基础设施依赖的创建和注入
 */
export declare class ServiceContainer {
    #private;
    logger: ReturnType<typeof Logger.getInstance>;
    _aiDependentSingletons: string[];
    services: Record<string, () => unknown>;
    singletons: Record<string, unknown>;
    constructor();
    /**
     * 注册一个惰性单例服务 — 消除 `if (!this.singletons.xxx)` 样板代码
     *
     * @param name 服务名称
     * @param factory 工厂函数（首次 get 时执行）
     * @param [options] 选项
     *   - aiDependent: 标记为 AI Provider 依赖项，热重载时自动清除缓存
     */
    singleton(name: string, factory: (container: ServiceContainer) => unknown, options?: {
        aiDependent?: boolean;
    }): void;
    /** 静态单例获取（路由层使用） */
    static getInstance(): ServiceContainer;
    /**
     * 初始化所有服务和仓储
     * @param bootstrapComponents Bootstrap 初始化的组件（db, auditLogger, gateway 等）
     */
    initialize(bootstrapComponents?: Record<string, unknown>): Promise<void>;
    /**
     * 热重载 AI Provider（API Key 变更后调用，无需重启进程）
     *
     * 委托给 AiProviderManager.switchProvider() — 原子操作:
     *  1. 替换 provider 引用 + DI 数据管道同步
     *  2. Token 追踪 AOP 重新挂载
     *  3. Embedding fallback 重建
     *  4. 清除已缓存的依赖 AI 的 singleton（SearchEngine 等）
     *  5. 监听器回调通知
     */
    reloadAiProvider(newProvider: Record<string, unknown> | null): void;
    /** 获取当前默认 UI 语言偏好 */
    getLang(): {} | null;
    /** 设置默认 UI 语言偏好（影响 Agent 回复语言） */
    setLang(lang: 'zh' | 'en' | null): void;
    /**
     * 构建 ToolRegistry.execute() 所需的上下文对象。
     *
     * 工具执行上下文构建
     * 迁移后: 所有直接调用 ToolRegistry 的站点都使用此方法
     *
     * @param [extras] 合并到上下文的额外字段
     * @returns 工具执行上下文
     */
    buildToolContext(extras?: Record<string, unknown>): Record<string, unknown>;
    /** 注册服务或工厂函数 */
    register(name: string, factory: () => unknown): void;
    /**
     * 获取服务（类型安全版本）
     *
     * 当传入 ServiceMap 中已知的 key 时，自动推导返回类型：
     * ```ts
     * const search = container.get('searchEngine'); // SearchEngine
     * const guard = container.get('guardService');   // GuardService
     * ```
     *
     * 对于非 ServiceMap 中的 key，返回 unknown（向后兼容）。
     */
    get<K extends keyof ServiceMap>(name: K): ServiceMap[K];
    get(name: string): unknown;
    /** 清除所有单例（用于测试） */
    reset(): void;
    /** 获取所有已注册的服务名 */
    getServiceNames(): string[];
    /**
     * 构建 ProjectGraph (v3.0 AST 结构图)
     * 优先从磁盘缓存加载，支持 per-file hash 增量更新
     * @param projectRoot 项目根目录
     * @param [options] 传递给 ProjectGraph.build() 的选项
     */
    buildProjectGraph(projectRoot: string, options?: Record<string, unknown>): Promise<{} | null>;
}
/** 获取全局服务容器实例 */
export declare function getServiceContainer(): ServiceContainer;
/** 重置全局服务容器（主要用于测试） */
export declare function resetServiceContainer(): void;
export default ServiceContainer;
