import type { AgentMessage } from '@prisma/client';
export interface HookBaseContext {
    organizationId: string;
    userId: string;
    sessionId: string;
    turnId: string;
}
export interface OnTurnStartContext extends HookBaseContext {
    prompt: string;
}
export interface PreToolUseContext extends HookBaseContext {
    toolName: string;
    input: Record<string, unknown>;
}
export interface PreToolUseResult {
    reject?: boolean;
    reason?: string;
    patchedInput?: Record<string, unknown>;
}
export interface PostToolUseContext extends HookBaseContext {
    toolName: string;
    input: Record<string, unknown>;
    ok: boolean;
    output: unknown;
    errorMessage?: string;
    durationMs: number;
}
export interface OnAssistantTextContext extends HookBaseContext {
    text: string;
    model: string;
}
export interface OnAssistantTextResult {
    patchedText?: string;
}
export interface PostCompactContext extends HookBaseContext {
    savedTokens: number;
    beforeMessageCount: number;
    afterMessageCount: number;
}
export interface OnTurnEndContext extends HookBaseContext {
    totalLatencyMs: number;
    iterations: number;
    stopReason: string;
    totalInputTokens: number;
    totalOutputTokens: number;
    messages: AgentMessage[];
}
export type OnTurnStartHook = (ctx: OnTurnStartContext) => Promise<void> | void;
export type PreToolUseHook = (ctx: PreToolUseContext) => Promise<PreToolUseResult | void> | PreToolUseResult | void;
export type PostToolUseHook = (ctx: PostToolUseContext) => Promise<void> | void;
export type OnAssistantTextHook = (ctx: OnAssistantTextContext) => Promise<OnAssistantTextResult | void> | OnAssistantTextResult | void;
export type PostCompactHook = (ctx: PostCompactContext) => Promise<void> | void;
export type OnTurnEndHook = (ctx: OnTurnEndContext) => Promise<void> | void;
export type HookEvent = 'on_turn_start' | 'pre_tool_use' | 'post_tool_use' | 'on_assistant_text' | 'post_compact' | 'on_turn_end';
