
    )`i                        d Z ddlmZ ddlZddlZddlmZmZ  ej        e	          Z
 ej        d          ZdZe G d d                      ZddZddZddZdS )a  Tool name validation utilities according to SEP-986.

Tool names SHOULD be between 1 and 128 characters in length (inclusive).
Tool names are case-sensitive.
Allowed characters: uppercase and lowercase ASCII letters (A-Z, a-z),
digits (0-9), underscore (_), dash (-), and dot (.).
Tool names SHOULD NOT contain spaces, commas, or other special characters.

See: https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-names
    )annotationsN)	dataclassfieldz^[A-Za-z0-9._-]{1,128}$zPhttps://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-namesc                  B    e Zd ZU dZded<    ed           Zded<   dS )	ToolNameValidationResultzResult of tool name validation.

    Attributes:
        is_valid: Whether the tool name conforms to SEP-986 requirements.
        warnings: List of warning messages for non-conforming aspects.
    boolis_validc                     g S N r       s/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mcp/shared/tool_name_validation.py<lambda>z!ToolNameValidationResult.<lambda>%   s     r   )default_factory	list[str]warningsN)__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      sG           NNN%

;;;H;;;;;;r   r   namestrreturnc                   g }| st          ddg          S t          |           dk    r#t          ddt          |            dg          S d| v r|                    d           d	| v r|                    d
           |                     d          s|                     d          r|                    d           |                     d          s|                     d          r|                    d           t
                              |           sg }t                      }| D ]E}t          j        d|          s.||vr*|                    |           |	                    |           F|                    dd
                    d |D                                   |                    d           t          d|          S t          d|          S )zValidate a tool name according to the SEP-986 specification.

    Args:
        name: The tool name to validate.

    Returns:
        ToolNameValidationResult containing validation status and any warnings.
    FzTool name cannot be empty)r	   r      z=Tool name exceeds maximum length of 128 characters (current: ) z9Tool name contains spaces, which may cause parsing issues,z9Tool name contains commas, which may cause parsing issues-zUTool name starts or ends with a dash, which may cause parsing issues in some contexts.zTTool name starts or ends with a dot, which may cause parsing issues in some contextsz[A-Za-z0-9._-]z'Tool name contains invalid characters: z, c              3  4   K   | ]}t          |          V  d S r   )repr).0cs     r   	<genexpr>z%validate_tool_name.<locals>.<genexpr>Y   s*      KkKkXYDQRGGKkKkKkKkKkKkr   zLAllowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)T)r   lenappend
startswithendswithTOOL_NAME_REGEXmatchsetreaddjoin)r   r   invalid_charsseenchars        r   validate_tool_namer4   (   s    H  
'12
 
 
 	
 4yy3'bVYZ^V_V_bbbc
 
 
 	
 d{{STTT
d{{STTT s qt}}S11 qoppps pt}}S11 pnooo   && K#% 	 	D8-t44 T9I9I$$T***m$))KkKk]jKkKkKkBkBkmmnnnfggg'JJJJ#THEEEEr   r   r   Nonec                <   |sdS t                               d|  d           |D ]}t                               d|             t                               d           t                               d           t                               dt           d           dS )	zLog warnings for non-conforming tool names.

    Args:
        name: The tool name that triggered the warnings.
        warnings: List of warning messages to log.
    Nz"Tool name validation warning for "z":z  - zHTool registration will proceed, but this may cause compatibility issues.zKConsider updating the tool name to conform to the MCP tool naming standard.zSee SEP-986 (z) for more details.)loggerwarningSEP_986_URL)r   r   r8   s      r   issue_tool_name_warningr:   a   s      
NN@@@@AAA ) )'g''((((
NN]^^^
NN`aaa
NNC;CCCDDDDDr   r   c                X    t          |           }t          | |j                   |j        S )aC  Validate a tool name and issue warnings for non-conforming names.

    This is the primary entry point for tool name validation. It validates
    the name and logs any warnings via the logging module.

    Args:
        name: The tool name to validate.

    Returns:
        True if the name is valid, False otherwise.
    )r4   r:   r   r	   )r   results     r   validate_and_warn_tool_namer=   s   s+      %%FD&/222?r   )r   r   r   r   )r   r   r   r   r   r5   )r   r   r   r   )r   
__future__r   loggingr.   dataclassesr   r   	getLoggerr   r7   compiler+   r9   r   r4   r:   r=   r   r   r   <module>rC      s   	 	 # " " " " "  				 ( ( ( ( ( ( ( (		8	$	$ "*788 a 	< 	< 	< 	< 	< 	< 	< 	<6F 6F 6F 6FrE E E E$     r   