MCPcopy
hub / github.com/codeaashu/claude-code / runPreToolUseHooks

Function runPreToolUseHooks

src/services/tools/toolHooks.ts:435–650  ·  view source on GitHub ↗
(
  toolUseContext: ToolUseContext,
  tool: Tool,
  processedInput: Record<string, unknown>,
  toolUseID: string,
  messageId: string,
  requestId: string | undefined,
  mcpServerType: McpServerType,
  mcpServerBaseUrl: string | undefined,
)

Source from the content-addressed store, hash-verified

433}
434
435export async function* runPreToolUseHooks(
436 toolUseContext: ToolUseContext,
437 tool: Tool,
438 processedInput: Record<string, unknown>,
439 toolUseID: string,
440 messageId: string,
441 requestId: string | undefined,
442 mcpServerType: McpServerType,
443 mcpServerBaseUrl: string | undefined,
444): AsyncGenerator<
445 | {
446 type: 'message'
447 message: MessageUpdateLazy<
448 AttachmentMessage | ProgressMessage<HookProgress>
449 >
450 }
451 | { type: 'hookPermissionResult'; hookPermissionResult: PermissionResult }
452 | { type: 'hookUpdatedInput'; updatedInput: Record<string, unknown> }
453 | { type: 'preventContinuation'; shouldPreventContinuation: boolean }
454 | { type: 'stopReason'; stopReason: string }
455 | {
456 type: 'additionalContext'
457 message: MessageUpdateLazy<AttachmentMessage>
458 }
459 // stop execution
460 | { type: 'stop' }
461> {
462 const hookStartTime = Date.now()
463 try {
464 const appState = toolUseContext.getAppState()
465
466 for await (const result of executePreToolHooks(
467 tool.name,
468 toolUseID,
469 processedInput,
470 toolUseContext,
471 appState.toolPermissionContext.mode,
472 toolUseContext.abortController.signal,
473 undefined, // timeoutMs - use default
474 toolUseContext.requestPrompt,
475 tool.getToolUseSummary?.(processedInput),
476 )) {
477 try {
478 if (result.message) {
479 yield { type: 'message', message: { message: result.message } }
480 }
481 if (result.blockingError) {
482 const denialMessage = getPreToolHookBlockingMessage(
483 `PreToolUse:${tool.name}`,
484 result.blockingError,
485 )
486 yield {
487 type: 'hookPermissionResult',
488 hookPermissionResult: {
489 behavior: 'deny',
490 message: denialMessage,
491 decisionReason: {
492 type: 'hook',

Callers 1

Calls 9

executePreToolHooksFunction · 0.85
logForDebuggingFunction · 0.85
createAttachmentMessageFunction · 0.85
logEventFunction · 0.85
formatErrorFunction · 0.85
logErrorFunction · 0.50

Tested by

no test coverage detected