import type { HookDefinition, HookChain, HookEvent, HookResult } from '@pellux/goodvibes-sdk/platform/hooks/types';
import { HookActivityTracker } from '@pellux/goodvibes-sdk/platform/hooks/activity';
import type { AgentManager } from '../tools/agent/index.js';
import type { ToolLLM } from '../config/tool-llm.js';
import type { TriggerManagerLike } from '@pellux/goodvibes-sdk/platform/workflow/trigger-executor';
type HookRunnerDeps = {
    readonly agentManager?: Pick<AgentManager, 'spawn' | 'getStatus' | 'cancel'>;
    readonly toolLLM?: Pick<ToolLLM, 'chat'>;
    readonly projectRoot?: string;
};
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<HookResult>;
    /** Get all registered hooks (for debugging/inspection) */
    getHooks(): Map<string, HookDefinition[]>;
    /** 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