export interface Contribution { readonly id: string; readonly label: string; } export interface PluginDefinition { readonly id: string; readonly version: string; readonly requires?: ReadonlyArray; readonly provides?: Readonly>; readonly activate: (context: PluginActivationContext) => void | Promise; } export interface PluginActivationContext { readonly resolve: (capability: string) => Service; readonly register: (slot: string, contribution: Contribution) => void; readonly onDispose: (finalizer: () => void | Promise) => void; } export interface PluginRuntimeSnapshot { readonly active: ReadonlyArray; readonly blocked: Readonly>>; readonly contributions: Readonly>>>; } export interface PluginRuntime { readonly reconcile: ( definitions: ReadonlyArray, ) => Promise; readonly snapshot: () => PluginRuntimeSnapshot; readonly dispose: () => Promise; } export interface PluginRuntimeOptions { readonly onLifecycle?: (event: { readonly phase: "activate" | "deactivate"; readonly pluginId: string; }) => void; readonly onLifecycleError?: (event: { readonly phase: "activate" | "deactivate"; readonly pluginId: string; readonly error: unknown; }) => void; readonly onCleanupError?: (event: { readonly phase: "retire" | "rollback"; readonly error: unknown; }) => void; } export type PluginRuntimeFactory = (options?: PluginRuntimeOptions) => PluginRuntime;