import type { ApprovalHook, ApprovalHookContext, ApprovalHookResult } from './approval';
import type { PostToolUseHook, PostToolUseHookContext } from './post-tool-use';
import type { PreToolUseHook, PreToolUseHookContext, PreToolUseResult } from './pre-tool-use';
import type { NextOptions, NextResult, PostToolUseResult } from './results';
import type { ToolInfo, ToolInputUnion, ToolRef } from './shared';
export interface TypedApprovalHookContext<TInput> extends Omit<ApprovalHookContext, 'input'> {
    input: TInput;
}
export interface TypedPreToolUseHookContext<TInput> extends Omit<PreToolUseHookContext, 'input' | 'next'> {
    input: TInput;
    next(updatedInput?: TInput, opts?: NextOptions): NextResult;
}
export interface TypedPostToolUseHookContext<TInput> extends Omit<PostToolUseHookContext, 'input'> {
    input: TInput;
}
export declare function createPreToolUseHook<TInput, TOutput>(tool: ToolRef<TInput, TOutput>, hook: (ctx: TypedPreToolUseHookContext<TInput>) => PreToolUseResult | Promise<PreToolUseResult>): PreToolUseHook;
export declare function createPreToolUseHook<TTools extends ReadonlyArray<ToolRef>>(tools: TTools, hook: (ctx: TypedPreToolUseHookContext<ToolInputUnion<TTools>>) => PreToolUseResult | Promise<PreToolUseResult>): PreToolUseHook;
export declare function createApprovalHook<TInput, TOutput>(tool: ToolRef<TInput, TOutput>, hook: (ctx: TypedApprovalHookContext<TInput>) => ApprovalHookResult | Promise<ApprovalHookResult>): ApprovalHook;
export declare function createApprovalHook<TTools extends ReadonlyArray<ToolRef>>(tools: TTools, hook: (ctx: TypedApprovalHookContext<ToolInputUnion<TTools>>) => ApprovalHookResult | Promise<ApprovalHookResult>): ApprovalHook;
export declare function createPostToolUseHook<TInput, TOutput>(tool: ToolRef<TInput, TOutput>, hook: (ctx: TypedPostToolUseHookContext<TInput>) => PostToolUseResult | Promise<PostToolUseResult>): PostToolUseHook;
export declare function createPostToolUseHook<TTools extends ReadonlyArray<ToolRef>>(tools: TTools, hook: (ctx: TypedPostToolUseHookContext<ToolInputUnion<TTools>>) => PostToolUseResult | Promise<PostToolUseResult>): PostToolUseHook;
export declare function isToolCall<TInput, TOutput>(ctx: PreToolUseHookContext | PostToolUseHookContext, tool: ToolRef<TInput, TOutput>): ctx is typeof ctx & {
    input: TInput;
    tool: ToolInfo<TInput, TOutput>;
};
//# sourceMappingURL=typed.d.ts.map