/**
 * Hook Registry
 * Manages registration and execution of hooks with priority and dependency support.
 */
import type { PreToolUseHook, PostToolUseHook, ChatMessageHook, AssistantDoneHook, HookContext, HookResult, HookMetadata } from "./types.js";
import { HOOK_ACTIONS } from "./constants.js";
export declare class HookRegistry {
    private static instance;
    private preToolHooks;
    private postToolHooks;
    private chatHooks;
    private doneHooks;
    private constructor();
    static getInstance(): HookRegistry;
    registerPreTool(hook: PreToolUseHook, metadata?: Partial<HookMetadata>): void;
    registerPostTool(hook: PostToolUseHook, metadata?: Partial<HookMetadata>): void;
    registerChat(hook: ChatMessageHook, metadata?: Partial<HookMetadata>): void;
    registerDone(hook: AssistantDoneHook, metadata?: Partial<HookMetadata>): void;
    private prepareMetadata;
    private sortHooks;
    private topologicalSort;
    executePreTool(ctx: HookContext, tool: string, args: Record<string, unknown>): Promise<{
        action: typeof HOOK_ACTIONS.ALLOW | typeof HOOK_ACTIONS.BLOCK | typeof HOOK_ACTIONS.MODIFY;
        modifiedArgs?: Record<string, unknown>;
        reason?: string;
    }>;
    executePostTool(ctx: HookContext, tool: string, input: Record<string, unknown>, output: {
        title: string;
        output: string;
        metadata: Record<string, unknown>;
    }): Promise<void>;
    executeChat(ctx: HookContext, message: string): Promise<{
        action: typeof HOOK_ACTIONS.PROCESS | typeof HOOK_ACTIONS.INTERCEPT;
        modifiedMessage?: string;
    }>;
    executeDone(ctx: HookContext, finalText: string): Promise<HookResult>;
}
