import type { Effect, Scope } from "effect";
import type { PluginContext } from "./context.js";
export interface Plugin<R = Scope.Scope> {
    readonly id: string;
    readonly effect: (context: PluginContext) => Effect.Effect<void, never, R>;
}
export declare function define<R = Scope.Scope>(plugin: Plugin<R>): Plugin<R>;
export interface PluginDomain {
    readonly add: (plugin: Plugin) => Effect.Effect<void>;
    readonly remove: (id: string) => Effect.Effect<void>;
}
