/** * Hook Manager * * Central manager for hook registration, filtering, and execution. * Handles hook lifecycle, session tracking, and event triggering. */ import { EventEmitter } from 'events'; import type { Logger } from '../observability/logger.js'; import type { HooksConfig, HookDefinition, HookEvent, HookInput, HookTriggerResult, HookManagerEvents } from './types.js'; /** * Manages hook registration, filtering, and execution. * Provides an event-based API for hook lifecycle notifications. */ export declare class HookManager extends EventEmitter { private readonly logger; private readonly executor; private config; private hooks; private runTracker; private sessionId; private hooksFilePath?; private fileWatcher?; constructor(config: Partial | undefined, logger: Logger); /** * Check if hooks system is enabled. */ get isEnabled(): boolean; /** * Get the current session ID. */ getSessionId(): string; /** * Register hooks from configuration. * Validates and indexes hooks by event type. * * @param hooks - Hook definitions to register */ registerHooks(hooks: HookDefinition[]): void; /** * Unregister a hook by name. * * @param name - Name of the hook to unregister */ unregisterHook(name: string): void; /** * Get all hooks registered for an event. * * @param event - Hook event type * @returns Array of hook definitions */ getHooksForEvent(event: HookEvent): HookDefinition[]; /** * Trigger all hooks for an event. * Executes matching hooks in registration order. * * @param event - Event to trigger * @param input - Input data (without event and timestamp) * @returns Combined result from all hooks */ trigger(event: HookEvent, input: Omit): Promise; /** * Check if a hook should run based on filters and run tracking. * * @param hook - Hook definition to check * @param input - Hook input data * @returns True if hook should run */ shouldRun(hook: HookDefinition, input: HookInput): boolean; /** * Mark a hook as having run (for once: true hooks). * * @param hookName - Name of the hook */ markRun(hookName: string): void; /** * Check if a hook has already run this session. * * @param hookName - Name of the hook * @returns True if hook has run */ hasRun(hookName: string): boolean; /** * Reset run tracking (for new session). */ resetSession(): void; /** * Load hooks from an external file. * * @param path - Path to hooks configuration file (JSON or YAML) */ loadFromFile(path: string): Promise; /** * Start watching hooks file for changes. * Automatically reloads hooks when file changes. */ watchFile(): void; /** * Stop watching hooks file. */ stopWatching(): void; /** * Hot-reload hooks from file. */ reload(): Promise; /** * Update configuration. * * @param config - New configuration (partial) */ updateConfig(config: Partial): void; /** * Get current configuration. */ getConfig(): HooksConfig; /** * Shutdown hook manager and cleanup resources. */ shutdown(): void; /** * Generate a unique session ID. */ private generateSessionId; /** * Parse hooks file content (JSON). */ private parseHooksFile; /** * Match a string against a pattern (supports * wildcard). */ private matchesPattern; /** * Merge two hook outputs, with later values taking precedence. */ private mergeOutputs; } export interface HookManager { on(event: K, listener: (payload: HookManagerEvents[K]) => void): this; emit(event: K, payload: HookManagerEvents[K]): boolean; } //# sourceMappingURL=hook-manager.d.ts.map