/** * Hook types. * * Public hook registration types. Wire-level payload shapes come from * `../protocol/`. The SDK-local HookEvent/HookInput contract is * intentionally narrowed to events supported by SDK user configuration. */ export type { BaseHookInput, PreToolUseHookInput, PostToolUseHookInput, PostToolUseFailureHookInput, UserPromptSubmitHookInput, SessionStartHookInput, SessionEndHookInput, StopHookInput, SubagentStartHookInput, SubagentStopHookInput, PreCompactHookInput, PostCompactHookInput, PermissionRequestHookInput, PermissionDeniedHookInput, InstructionsLoadedHookInput, CwdChangedHookInput, FileChangedHookInput, PostToolUseFailureHookSpecificOutput, UserPromptSubmitHookSpecificOutput, SessionStartHookSpecificOutput, SubagentStartHookSpecificOutput, PermissionRequestHookSpecificOutput, CwdChangedHookSpecificOutput, FileChangedHookSpecificOutput, } from '../protocol/index.js'; import type { AsyncHookJSONOutput as ProtocolAsyncHookJSONOutput, CwdChangedHookSpecificOutput, FileChangedHookSpecificOutput, HookInput as ProtocolHookInput, PostToolUseHookSpecificOutput as ProtocolPostToolUseHookSpecificOutput, PostToolUseFailureHookSpecificOutput, PreToolUseHookSpecificOutput as ProtocolPreToolUseHookSpecificOutput, PermissionRequestHookSpecificOutput, SessionStartHookSpecificOutput, SubagentStartHookSpecificOutput, SyncHookJSONOutput as ProtocolSyncHookJSONOutput, UserPromptSubmitHookSpecificOutput } from '../protocol/index.js'; import type { HookEventConst } from '../core/constants.js'; /** * The 16 publicly supported hook events available to SDK users. * Internal/experimental events are handled at runtime but not exposed * in the user-facing configuration type. */ export type HookEvent = HookEventConst; export type HookInput = Extract; export type HookPermissionDecision = 'allow' | 'deny' | 'ask' | 'defer'; export type PreToolUseHookSpecificOutput = Omit & { permissionDecision?: HookPermissionDecision; }; export type PostToolUseHookSpecificOutput = Omit & { updatedToolOutput?: string; updatedMCPToolOutput?: string; }; export type AsyncHookJSONOutput = ProtocolAsyncHookJSONOutput; export type HookSpecificOutput = PreToolUseHookSpecificOutput | PostToolUseHookSpecificOutput | PostToolUseFailureHookSpecificOutput | UserPromptSubmitHookSpecificOutput | SessionStartHookSpecificOutput | SubagentStartHookSpecificOutput | PermissionRequestHookSpecificOutput | CwdChangedHookSpecificOutput | FileChangedHookSpecificOutput; export type SyncHookJSONOutput = Omit & { hookSpecificOutput?: HookSpecificOutput; }; export type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput; export type HookCallback = (input: HookInput, toolUseID: string | undefined, options: { signal: AbortSignal; }) => Promise; export interface HookCallbackMatcher { matcher?: string; hooks: HookCallback[]; timeout?: number; }