(
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,
)
| 3536 | * @returns Async generator that yields progress messages and returns blocking errors |
| 3537 | */ |
| 3538 | export async function* executePreToolHooks<ToolInput>( |
| 3539 | toolName: string, |
| 3540 | toolUseID: string, |
| 3541 | toolInput: ToolInput, |
| 3542 | toolUseContext: ToolUseContext, |
| 3543 | permissionMode?: string, |
| 3544 | signal?: AbortSignal, |
| 3545 | timeoutMs: number = TOOL_HOOK_EXECUTION_TIMEOUT_MS, |
| 3546 | requestPrompt?: ( |
| 3547 | sourceName: string, |
| 3548 | toolInputSummary?: string | null, |
| 3549 | ) => (request: PromptRequest) => Promise<PromptResponse>, |
| 3550 | toolInputSummary?: string | null, |
| 3551 | ): AsyncGenerator<AggregatedHookResult> { |
| 3552 | const appState = toolUseContext.getAppState() |
| 3553 | const sessionId = toolUseContext.agentId ?? getSessionId() |
| 3554 | if (!hasHookForEvent('PreToolUse', appState, sessionId)) { |
| 3555 | return |
| 3556 | } |
| 3557 | |
| 3558 | logForDebugging(`executePreToolHooks called for tool: ${toolName}`, { |
| 3559 | level: 'verbose', |
| 3560 | }) |
| 3561 | |
| 3562 | const hookInput: PreToolUseHookInput = { |
| 3563 | ...createBaseHookInput(permissionMode, undefined, toolUseContext), |
| 3564 | hook_event_name: 'PreToolUse', |
| 3565 | tool_name: toolName, |
| 3566 | tool_input: toolInput, |
| 3567 | tool_use_id: toolUseID, |
| 3568 | } |
| 3569 | |
| 3570 | yield* executeHooks({ |
| 3571 | hookInput, |
| 3572 | toolUseID, |
| 3573 | matchQuery: toolName, |
| 3574 | signal, |
| 3575 | timeoutMs, |
| 3576 | toolUseContext, |
| 3577 | requestPrompt, |
| 3578 | toolInputSummary, |
| 3579 | }) |
| 3580 | } |
| 3581 | |
| 3582 | /** |
| 3583 | * Execute post-tool hooks if configured |
no test coverage detected