source dump of claude code
at main 39 lines 1.2 kB view raw
1/** 2 * Shared infrastructure for classifier-based permission systems. 3 * 4 * This module provides common types, schemas, and utilities used by both: 5 * - bashClassifier.ts (semantic Bash command matching) 6 * - yoloClassifier.ts (YOLO mode security classification) 7 */ 8 9import type { BetaContentBlock } from '@anthropic-ai/sdk/resources/beta/messages.js' 10import type { z } from 'zod/v4' 11 12/** 13 * Extract tool use block from message content by tool name. 14 */ 15export function extractToolUseBlock( 16 content: BetaContentBlock[], 17 toolName: string, 18): Extract<BetaContentBlock, { type: 'tool_use' }> | null { 19 const block = content.find(b => b.type === 'tool_use' && b.name === toolName) 20 if (!block || block.type !== 'tool_use') { 21 return null 22 } 23 return block 24} 25 26/** 27 * Parse and validate classifier response from tool use block. 28 * Returns null if parsing fails. 29 */ 30export function parseClassifierResponse<T extends z.ZodTypeAny>( 31 toolUseBlock: Extract<BetaContentBlock, { type: 'tool_use' }>, 32 schema: T, 33): z.infer<T> | null { 34 const parseResult = schema.safeParse(toolUseBlock.input) 35 if (!parseResult.success) { 36 return null 37 } 38 return parseResult.data 39}