/**
 * Advanced Hook System
 *
 * Extends the basic hook system with Claude Code-like capabilities:
 * - Command hooks: run shell commands, parse JSON stdout for decisions
 * - Prompt hooks: LLM-evaluated hooks (stub - returns allow with stored prompt)
 * - Agent hooks: spawns subagent evaluation (stub - returns allow)
 *
 * Supports event matching with regex matchers, async fire-and-forget,
 * one-shot hooks, and a registry for CRUD operations.
 */
export type AdvancedHookType = 'command' | 'prompt' | 'agent';
export declare enum HookEvent {
    PreToolUse = "PreToolUse",
    PostToolUse = "PostToolUse",
    PreBash = "PreBash",
    PostBash = "PostBash",
    PreEdit = "PreEdit",
    PostEdit = "PostEdit",
    SessionStart = "SessionStart",
    SessionEnd = "SessionEnd",
    PreCompact = "PreCompact",
    Notification = "Notification",
    SubagentStart = "SubagentStart",
    SubagentStop = "SubagentStop",
    PermissionRequest = "PermissionRequest",
    TaskCompleted = "TaskCompleted"
}
export interface AdvancedHook {
    name: string;
    event: HookEvent;
    type: AdvancedHookType;
    matcher?: RegExp;
    command?: string;
    prompt?: string;
    async?: boolean;
    once?: boolean;
}
export interface HookDecision {
    action: 'allow' | 'deny' | 'ask';
    updatedInput?: Record<string, unknown>;
    additionalContext?: string;
    continue?: boolean;
}
export interface HookContext {
    event: HookEvent;
    toolName?: string;
    input?: Record<string, unknown>;
    output?: unknown;
    [key: string]: unknown;
}
export declare class AdvancedHookRunner {
    private workingDirectory;
    private timeout;
    constructor(workingDirectory?: string, timeout?: number);
    /**
     * Run a hook and return a decision
     */
    runHook(hook: AdvancedHook, context: HookContext): Promise<HookDecision>;
    /**
     * Fire-and-forget async hook execution
     */
    runHookAsync(hook: AdvancedHook, context: HookContext): Promise<void>;
    /**
     * Check if a hook matches a given event and optional tool name
     */
    matchesEvent(hook: AdvancedHook, event: HookEvent, toolName?: string): boolean;
    private runCommandHook;
    private runPromptHook;
    private runAgentHook;
}
export declare class HookRegistry {
    private hooks;
    private firedOnceHooks;
    /**
     * Add a hook to the registry
     */
    addHook(hook: AdvancedHook): void;
    /**
     * Remove a hook by name
     */
    removeHook(name: string): boolean;
    /**
     * Get all hooks that match a given event, filtering out already-fired once hooks
     */
    getHooksForEvent(event: HookEvent, toolName?: string): AdvancedHook[];
    /**
     * Mark a once hook as fired
     */
    markFired(hookName: string): void;
    /**
     * List all registered hooks
     */
    listHooks(): AdvancedHook[];
    /**
     * Get a hook by name
     */
    getHook(name: string): AdvancedHook | undefined;
    /**
     * Clear all hooks
     */
    clear(): void;
    /**
     * Get the number of registered hooks
     */
    get size(): number;
}
export declare function getHookRegistry(): HookRegistry;
export declare function getAdvancedHookRunner(workingDirectory?: string): AdvancedHookRunner;
export declare function resetAdvancedHooks(): void;
