§
    öŽ’j8  ã                  ó¼   — 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 )	ÚToolNameValidationResultzÆResult 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   ó    úMC:\Projects\DSCons\.venv\Lib\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   € € € € € € ðð ð €N€N�NØ˜%°
°
Ð;Ñ;Ô;€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
                               | ¦  «        s³g }t          ¦   «         }| D ]E}t          j	        d|¦  «        s.||vr*|                     |¦  «         | 
                    |¦  «         ŒF|                     dd                     d„ |D ¦   «         ¦  «        › �¦  «         |                     d¦  «         t          d|¬¦  «        S t          d|¬¦  «        S )zÓValidate 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*   è è € ÐKkÐKkÐXYÍDÐQRÉGÌGÐKkÐKkÐKkÐKkÐKkÐKkr   zLAllowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)T)r   ÚlenÚappendÚ
startswithÚendswithÚTOOL_NAME_REGEXÚ	fullmatchÚsetÚreÚmatchÚaddÚjoin)r   r   Úinvalid_charsÚseenÚchars        r   Úvalidate_tool_namer5   (   s  € ð €Hð ð 
Ý'ØØ1Ð2ð
ñ 
ô 
ð 	
õ ˆ4�y„y�3‚€Ý'ØØbÕVYÐZ^Ñ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õ ×$Ò$ TÑ*Ô*ð Kà#%ˆÝ™œˆØð 	ð 	ˆDÝ”8Ð-¨tÑ4Ô4ð ¸ÀTÐ9IÐ9IØ×$Ò$ TÑ*Ô*Ð*Ø—’˜‘”�øà�ŠÐmÀ$Ç)Â)ÐKkÐKkÐ]jÐKkÑKkÔKkÑBkÔBkÐmÐmÑnÔnÐnØ�ŠÐfÑgÔgÐgå'°ÀÐJÑJÔJÐJå#¨T¸HÐ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 )	z§Log 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   r9   s      r   Úissue_tool_name_warningr;   a   s¦   € ð ð Øˆå
‡N‚NÐ@¸Ð@Ð@Ð@ÑAÔAÐAØð )ð )ˆÝ�ŠÐ'˜gÐ'Ð'Ñ(Ô(Ð(Ð(Ý
‡N‚NÐ]Ñ^Ô^Ð^Ý
‡N‚NÐ`ÑaÔaÐaÝ
‡N‚NÐ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.
    )r5   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   r6   )r   r   r   r   )r   Ú
__future__r   Úloggingr.   Údataclassesr   r   Ú	getLoggerr   r8   Úcompiler+   r:   r   r5   r;   r>   r   r   r   ú<module>rD      sþ   ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à	ˆÔ	˜8Ñ	$Ô	$€ð �"”*Ð7Ñ8Ô8€ð a€ð ð	<ð 	<ð 	<ð 	<ð 	<ñ 	<ô 	<ñ „ð	<ð6Fð 6Fð 6Fð 6FðrEð Eð Eð Eð$ð ð ð ð ð r   