Spaces:
Configuration error
Configuration error
| /** | |
| * Global Plugin Hook Runner | |
| * | |
| * Singleton hook runner that's initialized when plugins are loaded | |
| * and can be called from anywhere in the codebase. | |
| */ | |
| import { createSubsystemLogger } from "../logging/subsystem.js"; | |
| import { createHookRunner, type HookRunner } from "./hooks.js"; | |
| import type { PluginRegistry } from "./registry.js"; | |
| const log = createSubsystemLogger("plugins"); | |
| let globalHookRunner: HookRunner | null = null; | |
| let globalRegistry: PluginRegistry | null = null; | |
| /** | |
| * Initialize the global hook runner with a plugin registry. | |
| * Called once when plugins are loaded during gateway startup. | |
| */ | |
| export function initializeGlobalHookRunner(registry: PluginRegistry): void { | |
| globalRegistry = registry; | |
| globalHookRunner = createHookRunner(registry, { | |
| logger: { | |
| debug: (msg) => log.debug(msg), | |
| warn: (msg) => log.warn(msg), | |
| error: (msg) => log.error(msg), | |
| }, | |
| catchErrors: true, | |
| }); | |
| const hookCount = registry.hooks.length; | |
| if (hookCount > 0) { | |
| log.info(`hook runner initialized with ${hookCount} registered hooks`); | |
| } | |
| } | |
| /** | |
| * Get the global hook runner. | |
| * Returns null if plugins haven't been loaded yet. | |
| */ | |
| export function getGlobalHookRunner(): HookRunner | null { | |
| return globalHookRunner; | |
| } | |
| /** | |
| * Get the global plugin registry. | |
| * Returns null if plugins haven't been loaded yet. | |
| */ | |
| export function getGlobalPluginRegistry(): PluginRegistry | null { | |
| return globalRegistry; | |
| } | |
| /** | |
| * Check if any hooks are registered for a given hook name. | |
| */ | |
| export function hasGlobalHooks(hookName: Parameters<HookRunner["hasHooks"]>[0]): boolean { | |
| return globalHookRunner?.hasHooks(hookName) ?? false; | |
| } | |
| /** | |
| * Reset the global hook runner (for testing). | |
| */ | |
| export function resetGlobalHookRunner(): void { | |
| globalHookRunner = null; | |
| globalRegistry = null; | |
| } | |