/** * Installs and initializes Plugins while enforcing dependencies, capabilities, permissions, operations, and rollback. * * @module */ import type { CapabilityToken } from './capability-token.js'; import { type PluginEventMap } from './committed-event-bus.js'; import { type Disposable } from './disposable.js'; import { type PluginRef } from './plugin-ref.js'; import type { EditorPlugin, EditorPluginDefinition, PluginPermission, SynchronousEditorPlugin } from './plugin-types.js'; import { type PluginErrorSink, type PluginWarningSink } from './reporting.js'; export type PluginHostState = 'created' | 'initializing' | 'initialized' | 'disposing' | 'disposed'; export interface PluginManagerOptions { readonly warningSink?: PluginWarningSink; readonly errorSink?: PluginErrorSink; readonly hostCapabilities?: readonly PluginHostCapabilityProvider[]; } export interface PluginHostCapabilityProvider { readonly token: CapabilityToken; readonly implementation: unknown; readonly providerId?: string; readonly requiredPermission?: PluginPermission; } export interface PluginBatchInstallOutcome { readonly apisByPluginId: ReadonlyMap; readonly installedPlugins: readonly EditorPluginDefinition[]; } export declare class PluginManager implements Disposable { private readonly options; private readonly capabilityRegistry; private readonly operationRegistry; private readonly toolCoordinator; private readonly eventBus; private readonly stateStore; private readonly installed; private readonly installationOrder; private hostState; private topLevelInstallActive; private disposePromise; constructor(options?: PluginManagerOptions); get state(): PluginHostState; install(plugin: EditorPlugin): Promise; installSync(plugin: SynchronousEditorPlugin): TApi; get(ref: PluginRef): TApi | null; require(ref: PluginRef): TApi; getById(pluginId: string): unknown | null; has(refOrId: PluginRef | string): boolean; initialize(): Promise; initializeSync(): void; notifyImageLoaded(image: unknown, signal?: AbortSignal): Promise; notifyImageCleared(signal?: AbortSignal): Promise; dispose(): Promise; disposeSync(): void; private prepareBatch; private findDependencyCycle; private performPendingInstallSync; private rollbackPendingBatchSync; private createDependencyError; private assertPluginDependenciesInstalled; private performInstallSync; private resolveCapabilities; private assertCapabilityPermission; private createContexts; private normalizePluginDefinition; private performDispose; private cleanupAll; private cleanupAllSync; private assertCanInstall; private canRunOperation; private operationRejectedByTool; private assertLifecycleReady; private assertUsable; }