import type { HookDefinition, HookChain, HookEvent, HookResult } from './types.js'; import { HookActivityTracker } from './activity.js'; import type { AgentManager } from '../tools/agent/index.js'; import type { ToolLLM } from '../config/tool-llm.js'; import type { TriggerManagerLike } from '../workflow/trigger-executor.js'; type HookRunnerDeps = { readonly agentManager?: Pick | undefined; readonly toolLLM?: Pick | undefined; readonly projectRoot?: string | undefined; }; export declare class HookDispatcher { private hooks; private chains; private triggerManager; private hooksBaseDirectory; private readonly runnerDeps; private readonly activityTracker; constructor(runnerDeps?: HookRunnerDeps, activityTracker?: HookActivityTracker); /** Attach a TriggerManager so hook events automatically fire matching triggers. */ setTriggerManager(tm: TriggerManagerLike | null): void; /** Load hooks from hooks.json file */ loadFromFile(filePath: string): void; /** Register a hook programmatically */ register(eventPattern: string, hook: HookDefinition): void; /** Register a chain programmatically */ registerChain(chain: HookChain): void; /** * Fire an event and run all matching hooks. * * All matching hooks run sequentially. For Pre phase, the first deny sets * the aggregated decision; subsequent hooks still execute (for * logging/auditing) but their deny decisions don't change the outcome. * For all hooks: additionalContext strings are concatenated. * Once hooks are auto-removed after first execution. * Async hooks fire and forget. */ fire(event: HookEvent): Promise; private fireInScope; /** Get all registered hooks (for debugging/inspection) */ getHooks(): Map; /** Get all registered chains */ getChains(): HookChain[]; /** Remove all hooks (for testing) */ clear(): void; /** * List all registered hooks as a flat array with their event pattern included. */ listHooks(): Array<{ pattern: string; hook: HookDefinition; }>; /** * Enable a named hook (sets enabled: true). * Returns true if found, false if no hook with that name exists. */ enableHook(name: string): boolean; /** * Disable a named hook (sets enabled: false). * Returns true if found, false if no hook with that name exists. */ disableHook(name: string): boolean; /** * Remove a named hook from the registry. * Returns true if removed, false if not found. */ unregister(name: string): boolean; } export {}; //# sourceMappingURL=dispatcher.d.ts.map