import { AnyPlugin, InferRegistryFromEntries, InitializedPlugin, LoadedPlugin, PluginConfigInput, PluginInstance, PluginRegistry, PluginRegistryEntry, PluginRuntimeConfig, RegisteredPlugin, RegisteredPlugins, UsePluginResult } from "../types.mjs";
import { PluginService } from "./services/plugin.service.mjs";
import { ManagedRuntime } from "effect";

//#region src/runtime/index.d.ts
declare class PluginRuntime<R = RegisteredPlugins> {
  private runtime;
  private registry;
  readonly __registryType?: R;
  private pluginCache;
  constructor(runtime: ManagedRuntime.ManagedRuntime<PluginService, never>, registry: PluginRegistry);
  private generateCacheKey;
  private validatePluginId;
  private runPromise;
  usePlugin<K extends keyof R & string>(pluginId: K, config: PluginConfigInput<R[K]>, plugins?: Record<string, unknown>): Promise<UsePluginResult<K, R>>;
  loadPlugin<K extends keyof R & string>(pluginId: K): Promise<LoadedPlugin<RegisteredPlugin<K, R>>>;
  instantiatePlugin<K extends keyof R & string>(pluginId: K, loadedPlugin: LoadedPlugin<RegisteredPlugin<K, R>>): Promise<PluginInstance<RegisteredPlugin<K, R>>>;
  initializePlugin<T extends AnyPlugin>(instance: PluginInstance<T>, config: any, plugins?: Record<string, unknown>): Promise<InitializedPlugin<T>>;
  shutdown(): Promise<void>;
  evictPlugin<K extends keyof R & string>(pluginId: K, config: PluginConfigInput<R[K]>): Promise<void>;
}
/**
 * Creates a plugin runtime with support for both module and remote plugin entries.
 *
 * @example
 * ```typescript
 * // With module entries (types inferred automatically)
 * const runtime = createPluginRuntime({
 *   registry: {
 *     telegram: { module: TelegramPlugin },
 *     gopher: { remote: "https://cdn.example.com/gopher/remoteEntry.js" }
 *   },
 *   secrets: { API_KEY: "..." }
 * });
 *
 * // Types are automatically inferred from module entries!
 * const { router } = await runtime.usePlugin("telegram", config);
 * ```
 */
declare function createPluginRuntime<TRegistry extends Record<string, PluginRegistryEntry>>(config: PluginRuntimeConfig<TRegistry>): PluginRuntime<InferRegistryFromEntries<TRegistry>>;
//#endregion
export { PluginRuntime, createPluginRuntime };
//# sourceMappingURL=index.d.mts.map