import { Constructor } from "../utils/mixins.js";
import { ModulesMap } from "../agent/AgentModules.js";
import { AgentContext } from "../agent/context/AgentContext.js";
import { DependencyContainer, InjectionToken } from "tsyringe";

//#region src/plugins/DependencyManager.d.ts
declare class DependencyManager {
  readonly container: DependencyContainer;
  readonly registeredModules: ModulesMap;
  /**
   * @internal
   */
  constructor(container?: DependencyContainer, registeredModules?: ModulesMap);
  /**
   * @internal
   */
  registerModules(modules: ModulesMap): void;
  /**
   * @internal
   */
  initializeModules(agentContext: AgentContext): Promise<void>;
  /**
   * @internal
   */
  shutdownModules(agentContext: AgentContext): Promise<void>;
  /**
   * @internal
   */
  initializeAgentContext(agentContext: AgentContext): Promise<void>;
  /**
   * @internal
   */
  deleteAgentContext(agentContext: AgentContext): Promise<void>;
  /**
   * @internal
   */
  provisionAgentContext(agentContext: AgentContext): Promise<AgentContext>;
  /**
   * @internal
   */
  closeAgentContext(agentContext: AgentContext): Promise<void>;
  registerSingleton<T>(from: InjectionToken<T>, to: InjectionToken<T>): void;
  registerSingleton<T>(token: Constructor<T>): void;
  resolve<T>(token: InjectionToken<T>): T;
  registerInstance<T>(token: InjectionToken<T>, instance: T): void;
  isRegistered<T>(token: InjectionToken<T>, recursive?: boolean): boolean;
  registerContextScoped<T = any>(token: Constructor<T>): void;
  registerContextScoped<T = any>(token: InjectionToken<T>, provider: Constructor<T>): void;
  /**
   * @internal
   */
  createChild(): DependencyManager;
}
//#endregion
export { DependencyManager, type InjectionToken };
//# sourceMappingURL=DependencyManager.d.ts.map