import { PluginRuntimeError } from "../errors.mjs";
import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.mjs";
import { PluginLifecycleService } from "./plugin-lifecycle.service.mjs";
import { PluginLoaderService } from "./plugin-loader.service.mjs";
import * as _$_orpc_contract0 from "@orpc/contract";
import { Effect, Layer, Scope } from "effect";

//#region src/runtime/services/plugin.service.d.ts
declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
  readonly scoped: Effect.Effect<{
    loadPlugin: (pluginId: string) => Effect.Effect<{
      ctor: any;
      metadata: PluginMetadata;
    }, PluginRuntimeError, never>;
    instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
      plugin: T;
      metadata: PluginMetadata;
    }, PluginRuntimeError, never>;
    initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
      variables: _$_orpc_contract0.InferSchemaInput<T["configSchema"]["variables"]>;
      secrets: _$_orpc_contract0.InferSchemaInput<T["configSchema"]["secrets"]>;
    }, plugins?: Record<string, unknown>) => Effect.Effect<{
      plugin: T;
      metadata: PluginMetadata;
      config: {
        variables: _$_orpc_contract0.InferSchemaOutput<T["configSchema"]["variables"]>;
        secrets: _$_orpc_contract0.InferSchemaOutput<T["configSchema"]["secrets"]>;
      };
      context: any;
      scope: Scope.CloseableScope;
    }, PluginRuntimeError, never>;
    shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
    cleanup: () => Effect.Effect<void, never, never>;
  }, never, PluginLoaderService | PluginLifecycleService>;
}>;
declare class PluginService extends PluginService_base {
  static Live: (registry: PluginRegistry, secrets: SecretsConfig, pluginMap?: Record<string, AnyPluginConstructor>) => Layer.Layer<PluginService, never, never>;
}
//#endregion
export { PluginService };
//# sourceMappingURL=plugin.service.d.mts.map