(
toolName: string,
toolUseID: string,
toolInput: ToolInput,
toolUseContext: ToolUseContext,
permissionMode?: string,
signal?: AbortSignal,
timeoutMs: number = TOOL_HOOK_EXECUTION_TIMEOUT_MS,
requestPrompt?: (
sourceName: string,
toolInputSummary?: string | null,
) => (request: PromptRequest) => Promise<PromptResponse>,
toolInputSummary?: string | null,
)
| 3392 | * @returns Async generator that yields progress messages and returns blocking errors |
| 3393 | */ |
| 3394 | export async function* executePreToolHooks<ToolInput>( |
| 3395 | toolName: string, |
| 3396 | toolUseID: string, |
| 3397 | toolInput: ToolInput, |
| 3398 | toolUseContext: ToolUseContext, |
| 3399 | permissionMode?: string, |
| 3400 | signal?: AbortSignal, |
| 3401 | timeoutMs: number = TOOL_HOOK_EXECUTION_TIMEOUT_MS, |
| 3402 | requestPrompt?: ( |
| 3403 | sourceName: string, |
| 3404 | toolInputSummary?: string | null, |
| 3405 | ) => (request: PromptRequest) => Promise<PromptResponse>, |
| 3406 | toolInputSummary?: string | null, |
| 3407 | ): AsyncGenerator<AggregatedHookResult> { |
| 3408 | const appState = toolUseContext.getAppState() |
| 3409 | const sessionId = toolUseContext.agentId ?? getSessionId() |
| 3410 | if (!hasHookForEvent('PreToolUse', appState, sessionId)) { |
| 3411 | return |
| 3412 | } |
| 3413 | |
| 3414 | logForDebugging(`executePreToolHooks called for tool: ${toolName}`, { |
| 3415 | level: 'verbose', |
| 3416 | }) |
| 3417 | |
| 3418 | const hookInput: PreToolUseHookInput = { |
| 3419 | ...createBaseHookInput(permissionMode, undefined, toolUseContext), |
| 3420 | hook_event_name: 'PreToolUse', |
| 3421 | tool_name: toolName, |
| 3422 | tool_input: toolInput, |
| 3423 | tool_use_id: toolUseID, |
| 3424 | } |
| 3425 | |
| 3426 | yield* executeHooks({ |
| 3427 | hookInput, |
| 3428 | toolUseID, |
| 3429 | matchQuery: toolName, |
| 3430 | signal, |
| 3431 | timeoutMs, |
| 3432 | toolUseContext, |
| 3433 | requestPrompt, |
| 3434 | toolInputSummary, |
| 3435 | }) |
| 3436 | } |
| 3437 | |
| 3438 | /** |
| 3439 | * Execute post-tool hooks if configured |
no test coverage detected