import { OnApplicationBootstrap, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ModuleRef } from '@nestjs/core';
import { LidMappingStoreService } from '../../engine/identity/lid-mapping-store.service';
import { HookManager } from '../hooks';
import { IPlugin, PluginInstance, PluginManifest, PluginRegistryEntry, PluginType } from './plugin.interfaces';
import { PluginStorageService } from './plugin-storage.service';
import { PluginWorkerHost } from './sandbox/plugin-worker-host';
import { PluginLogLevel } from './sandbox/protocol';
import type { IngressJobData } from '../../modules/queue/processors/ingress.processor';
export { resolvePluginMainPath, resolvePluginEntryPath, pluginUpdateStagingDirName, pluginUpdateBackupDirName, } from './plugin-paths';
export declare function buildSandboxWorkerEnv(source?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
export declare class PluginLoaderService implements OnModuleInit, OnApplicationBootstrap, OnModuleDestroy {
    private readonly configService;
    private readonly hookManager;
    private readonly pluginStorage;
    private readonly moduleRef;
    private readonly lidMappingStore?;
    private readonly logger;
    private readonly plugins;
    private readonly sandboxHosts;
    private readonly lastSandboxHookError;
    private readonly pluginsDir;
    private readonly legacyPluginsDir;
    private readonly hostServices;
    private readonly capabilities;
    private readonly sandboxBridge;
    private readonly scanner;
    private readonly lifecycle;
    private readonly uninstaller;
    constructor(configService: ConfigService, hookManager: HookManager, pluginStorage: PluginStorageService, moduleRef: ModuleRef, lidMappingStore?: LidMappingStoreService | undefined);
    onModuleInit(): void;
    onApplicationBootstrap(): Promise<void>;
    onModuleDestroy(): Promise<void>;
    setOperatorEnabled(pluginId: string, enabled: boolean): void;
    getRegistryEntry(pluginId: string): PluginRegistryEntry | undefined;
    loadPlugin(pluginPath: string): PluginInstance;
    enablePlugin(pluginId: string): Promise<void>;
    disablePlugin(pluginId: string, opts?: {
        unload?: boolean;
    }): Promise<void>;
    unloadPlugin(pluginId: string): Promise<void>;
    getPluginsDir(): string;
    getPluginPackageDir(pluginId: string): string;
    isBuiltIn(pluginId: string): boolean;
    uninstallPlugin(pluginId: string): Promise<void>;
    updatePluginConfig(pluginId: string, config: Record<string, unknown>): void;
    setPluginSessions(pluginId: string, sessions: string[]): PluginInstance;
    setPluginSessionConfig(pluginId: string, sessionId: string, config: Record<string, unknown>): PluginInstance;
    checkPluginHealth(pluginId: string): Promise<{
        healthy: boolean;
        message?: string;
    }>;
    dispatchWebhookForInstance(d: IngressJobData): Promise<void>;
    protected createSandboxHost(capDispatcher?: (verb: string, args: unknown[]) => Promise<unknown>, onHookSubscribe?: (event: string, priority?: number) => void, onWebhookSubscribe?: (route: string) => void, onLog?: (level: PluginLogLevel, message: string, meta?: Record<string, unknown>) => void, runWithHookGuard?: (inFlightEvents: string[], run: () => Promise<unknown>) => Promise<unknown>, onSearchProviderRegister?: () => void, onWorkerExit?: (code: number, intentional: boolean) => void): PluginWorkerHost;
    getPlugin(pluginId: string): PluginInstance | undefined;
    getAllPlugins(): PluginInstance[];
    getPluginsByType(type: PluginType): PluginInstance[];
    getEnabledPlugins(): PluginInstance[];
    isPluginEnabled(pluginId: string): boolean;
    registerBuiltInPlugin(manifest: PluginManifest, instance: IPlugin, config?: Record<string, unknown>): void;
}
