Ë
    ïñþi£k  ã            
       óÖ  — d Z ddlmZ ddlmZmZmZ ddlZddlZddl	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZ ddlmZm Z  ddl!m"Z"  G d„ de«      Z# edd¬«      Z$e ejJ                  ejL                  f   ejN                  z  e(z  Z) G d„ deejT                  ejV                  ejL                  ejJ                  ejN                  f   «      Z,y)a‹  
ServerSession Module

This module provides the ServerSession class, which manages communication between the
server and client in the MCP (Model Context Protocol) framework. It is most commonly
used in MCP servers to interact with the client.

Common usage pattern:
```
    server = Server(name)

    @server.call_tool()
    async def handle_tool_call(ctx: RequestContext, arguments: dict[str, Any]) -> Any:
        # Check client capabilities before proceeding
        if ctx.session.check_client_capability(
            types.ClientCapabilities(experimental={"advanced_tools": dict()})
        ):
            # Perform advanced tool operations
            result = await perform_advanced_tool_operation(arguments)
        else:
            # Fall back to basic tool operations
            result = await perform_basic_tool_operation(arguments)

        return result

    @server.list_prompts()
    async def handle_list_prompts(ctx: RequestContext) -> list[types.Prompt]:
        # Access session for any necessary checks or operations
        if ctx.session.client_params:
            # Customize prompts based on client initialization parameters
            return generate_custom_prompts(ctx.session.client_params)
        else:
            return default_prompts
```

The ServerSession class is typically used internally by the Server class and should not
be instantiated directly by users of the MCP framework.
é    )ÚEnum)ÚAnyÚTypeVarÚoverloadN)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)ÚAnyUrl)Ú!ExperimentalServerSessionFeatures)ÚInitializationOptions)Úvalidate_sampling_toolsÚ!validate_tool_use_result_messages)Úcheck_tasks_capability)ÚRELATED_TASK_METADATA_KEY)ÚServerMessageMetadataÚSessionMessage)ÚBaseSessionÚRequestResponder)ÚSUPPORTED_PROTOCOL_VERSIONSc                   ó   — e Zd ZdZdZdZy)ÚInitializationStateé   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNotInitializedÚInitializingÚInitialized© ó    úR/root/aria/mcps/aria-brain/venv/lib/python3.12/site-packages/mcp/server/session.pyr   r   >   s   „ Ø€NØ€LØ�Kr!   r   ÚServerSessionTÚServerSession)Úboundc                   ó^	  ‡ — e Zd ZU ej                  Zeed<   dZej                  dz  ed<   dZ
edz  ed<   	 dEdeeez     dee   deded	df
ˆ fd
„Zed	ej                  dz  fd„«       Zed	efd„«       Zdej,                  d	efd„ZdFˆ fd„Zdeej4                  ej6                  f   fd„Zdej:                  d	dfd„Z	 	 dGdej>                  de de!dz  dejD                  dz  d	df
d„Z#de$d	dfd„Z%e&ddddddddddœ	de'ejP                     de)de!dz  dejT                  dz  d e+dz  d!e'e!   dz  d"e,e!e f   dz  d#ejZ                  dz  d$dd%ej\                  dz  dejD                  dz  d	ej^                  fd&„«       Z0e&ddddddddd'œde'ejP                     de)de!dz  dejT                  dz  d e+dz  d!e'e!   dz  d"e,e!e f   dz  d#ejZ                  dz  d$e'ejb                     d%ej\                  dz  dejD                  dz  d	ejd                  fd(„«       Z0ddddddddddœ	de'ejP                     de)de!dz  dejT                  dz  d e+dz  d!e'e!   dz  d"e,e!e f   dz  d#ejZ                  dz  d$e'ejb                     dz  d%ej\                  dz  dejD                  dz  d	ej^                  ejd                  z  fd)„Z0d	ejf                  fd*„Z4	 dHd+e!d,ejj                  dejD                  dz  d	ejl                  fd-„Z7	 dHd+e!d,ejj                  dejD                  dz  d	ejl                  fd.„Z8	 dHd+e!d/e!d0e!dejD                  dz  d	ejl                  f
d1„Z9d	ejt                  fd2„Z;	 	 	 dId3e!e)z  d4e+d5e+dz  d+e!dz  de!dz  d	dfd6„Z<dFd7„Z=dFd8„Z>dFd9„Z?	 dHd0e!dejD                  dz  d	dfd:„Z@	 	 dGd+e!d,ejj                  d;e!dz  d<ej‚                  dz  d	ej„                  f
d=„ZC	 dHd+e!d/e!d0e!d;e!dz  d	ej„                  f
d>„ZDddddddddddd?œ
de'ejP                     de)de!dz  dejT                  dz  d e+dz  d!e'e!   dz  d"e,e!e f   dz  d#ejZ                  dz  d$e'ejb                     dz  d%ej\                  dz  d;e!dz  d<ej‚                  dz  d	ej„                  fd@„ZEd+ed	dfdA„ZFdBeGd	dfdC„ZHed	eeG   fdD„«       ZIˆ xZJS )Jr$   Ú_initializedNÚ_client_paramsÚ_experimental_featuresÚread_streamÚwrite_streamÚinit_optionsÚ	statelessÚreturnc                 óN  •‡ — t         ‰‰ �  ||t        j                  t        j                  «       |rt
        j                  nt
        j                  ‰ _        |‰ _	        t        j                  t           d«      \  ‰ _        ‰ _        ‰ j                  j!                  ˆ fd„«       y )Nr   c                  ó8   •— ‰ j                   j                  «       S ©N)Ú_incoming_message_stream_readerÚaclose©Úselfs   €r"   ú<lambda>z(ServerSession.__init__.<locals>.<lambda>h   s   ø€ °T×5YÑ5Y×5`Ñ5`Ó5b€ r!   )ÚsuperÚ__init__ÚtypesÚClientRequestÚClientNotificationr   r   r   Ú_initialization_stateÚ_init_optionsÚanyioÚcreate_memory_object_streamÚServerRequestResponderÚ_incoming_message_stream_writerr2   Ú_exit_stackÚpush_async_callback)r5   r*   r+   r,   r-   Ú	__class__s   `    €r"   r8   zServerSession.__init__X   sŠ   ù€ ô 	‰Ñ˜ l´E×4GÑ4GÌ×IaÑIaÔbá/8Ô×+Ò+Ô>Q×>`Ñ>`ð 	Ô"ð *ˆÔÜUZ×UvÑUvÜ"ñV
à
óVÑRˆÔ,¨dÔ.Rð 	×Ñ×,Ñ,Ó-bÕcr!   c                 ó   — | j                   S r1   )r(   r4   s    r"   Úclient_paramszServerSession.client_paramsj   s   € à×"Ñ"Ð"r!   c                 óR   — | j                   €t        | «      | _         | j                   S )uŒ   Experimental APIs for serverâ†’client task operations.

        WARNING: These APIs are experimental and may change without notice.
        )r)   r
   r4   s    r"   ÚexperimentalzServerSession.experimentaln   s)   € ð ×&Ñ&Ð.Ü*KÈDÓ*QˆDÔ'Ø×*Ñ*Ð*r!   Ú
capabilityc                 ó  — | j                   €y| j                   j                  }|j                  �:|j                  €y|j                  j                  r|j                  j                  sy|j                  �g|j                  €y|j                  j
                  �|j                  j
                  €y|j                  j                  �|j                  j                  €y|j                  �|j                  €y|j                  �Q|j                  €y|j                  j                  «       D ]'  \  }}||j                  vs|j                  |   |k7  sŒ' y |j                  �.|j                  €yt        |j                  |j                  «      syy)z3Check if the client supports a specific capability.FT)r(   ÚcapabilitiesÚrootsÚlistChangedÚsamplingÚcontextÚtoolsÚelicitationrH   ÚitemsÚtasksr   )r5   rI   Úclient_capsÚexp_keyÚ	exp_values        r"   Úcheck_client_capabilityz%ServerSession.check_client_capabilityx   sz  € à×ÑÐ&Øà×)Ñ)×6Ñ6ˆà×ÑÐ'Ø× Ñ Ð(ØØ×Ñ×+Ò+°K×4EÑ4E×4QÒ4QØà×ÑÐ*Ø×#Ñ#Ð+ØØ×"Ñ"×*Ñ*Ð6¸;×;OÑ;O×;WÑ;WÐ;_ØØ×"Ñ"×(Ñ(Ð4¸×9MÑ9M×9SÑ9SÐ9[Øà×!Ñ!Ð-°+×2IÑ2IÐ2QØà×"Ñ"Ð.Ø×'Ñ'Ð/ØØ&0×&=Ñ&=×&CÑ&CÓ&Eò !Ñ"�˜Ø +×":Ñ":Ñ:¸k×>VÑ>VÐW^Ñ>_ÐclÓ>lÙ ð!ð ×ÑÐ'Ø× Ñ Ð(ØÜ)¨*×*:Ñ*:¸K×<MÑ<MÔNØàr!   c              ƒ   óº   •K  — | j                   4 ƒd {  –—†  t        ‰| �	  «       ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 Œ+7 Œ7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­wr1   )rA   r7   Ú_receive_loop)r5   rD   s    €r"   rY   zServerSession._receive_loopŸ   sT   øè ø€ Ø×7Ñ7÷ 	*ñ 	*Ü‘'Ñ'Ó)×)Ð)÷	*÷ 	*ñ 	*øØ)øð	*ø÷ 	*÷ 	*ñ 	*üsQ   ƒA”A •A˜AªA«A¯AºA»AÁAÁAÁAÁAÁAÁAÚ	responderc              ƒ   ól  K  — |j                   j                  xt        j                  d˜ x��7\  } |j                  }t
        j                  | _        || _        |5  |j                  t        j                  t        j                  |t        v r|nt        j                  | j                  j                  t        j                   | j                  j"                  | j                  j$                  | j                  j&                  | j                  j(                  ¬«      | j                  j*                  ¬«      «      «      ƒ d {  –—†  d d d «       t
        j,                  | _        y  t        j.                  d˜ x�\   y  	 | j                  t
        j,                  k7  rt1        d«      ‚y 7 Œd# 1 sw Y   ŒcxY w­w)N©Úparams)ÚnameÚversionÚ
websiteUrlÚicons)ÚprotocolVersionrK   Ú
serverInfoÚinstructionsr    z3Received request before initialization was complete)ÚrequestÚrootr9   ÚInitializeRequestrb   r   r   r<   r(   ÚrespondÚServerResultÚInitializeResultr   ÚLATEST_PROTOCOL_VERSIONr=   rK   ÚImplementationÚserver_nameÚserver_versionÚwebsite_urlra   rd   r   ÚPingRequestÚRuntimeError)r5   rZ   r]   Úrequested_versions       r"   Ú_received_requestzServerSession._received_request£   ss  è ø€ Ø×Ñ×$Ñ$Ø7”×(Ñ(×7Ð7Ø$*×$:Ñ$:Ð!Ü-@×-MÑ-M�Ô*Ø&,�Ô#Øñ Ø#×+Ñ+Ü×*Ñ*Ü!×2Ñ2à#4Ô8SÑ#Sñ 1Bä%*×%BÑ%BØ-1×-?Ñ-?×-LÑ-LÜ+0×+?Ñ+?Ø)-×);Ñ);×)GÑ)GØ,0×,>Ñ,>×,MÑ,MØ/3×/AÑ/A×/MÑ/MØ*.×*<Ñ*<×*BÑ*Bô	,"ð .2×-?Ñ-?×-LÑ-Lôóó÷ ð ÷ô$ .A×-LÑ-L�Õ*ð- 8ô. ×"Ñ"Õ$àð %ð Ø×-Ñ-Ô1D×1PÑ1PÒPÜ&Ð'\Ó]Ð]ð Qð-ø÷ð üs2   ‚AF4ÁC&F(ÅF&ÅF(ÅA F4Æ&F(Æ(F1Æ-F4Únotificationc              ƒ   ó  K  — t         j                  j                  «       ƒ d {  –—†  |j                  t        j
                  d˜ x�\   t        j                  | _        y  	 | j                  t        j                  k7  rt        d«      ‚y 7 Œe­w)Nr    z8Received notification before initialization was complete)
r>   ÚlowlevelÚ
checkpointrf   r9   ÚInitializedNotificationr   r   r<   rq   )r5   rt   s     r"   Ú_received_notificationz$ServerSession._received_notificationÃ   ss   è ø€ ä�n‰n×'Ñ'Ó)×)Ð)Ø×ÑÜ×.Ñ.Õ0Ü-@×-LÑ-L�Õ*ð 1àØ×-Ñ-Ô1D×1PÑ1PÒPÜ&Ð'aÓbÐbð Qð 	*ús   ‚"B¤B
¥A&BÚlevelÚdataÚloggerÚrelated_request_idc              ƒ   ó¾   K  — | j                  t        j                  t        j                  t        j                  |||¬«      ¬«      «      |«      ƒ d{  –—†  y7 Œ­w)z Send a log message notification.)rz   r{   r|   r\   N)Úsend_notificationr9   ÚServerNotificationÚLoggingMessageNotificationÚ LoggingMessageNotificationParams)r5   rz   r{   r|   r}   s        r"   Úsend_log_messagezServerSession.send_log_messageÍ   sX   è ø€ ð ×$Ñ$Ü×$Ñ$Ü×0Ñ0Ü ×AÑAØ#Ø!Ø%ôôóð ó
÷ 	
ò 	
ús   ‚AAÁAÁAÚuric           	   ƒ   ó¸   K  — | j                  t        j                  t        j                  t        j                  |¬«      ¬«      «      «      ƒ d{  –—†  y7 Œ­w)z%Send a resource updated notification.)r„   r\   N)r   r9   r€   ÚResourceUpdatedNotificationÚ!ResourceUpdatedNotificationParams)r5   r„   s     r"   Úsend_resource_updatedz#ServerSession.send_resource_updatedâ   sH   è ø€ à×$Ñ$Ü×$Ñ$Ü×1Ñ1Ü ×BÑBÀsÔKôóó
÷ 	
ò 	
ús   ‚AAÁAÁA)	Úsystem_promptÚinclude_contextÚtemperatureÚstop_sequencesÚmetadataÚmodel_preferencesrP   Útool_choicer}   ÚmessagesÚ
max_tokensr‰   rŠ   r‹   rŒ   r�   rŽ   rP   r�   c       
      ƒ   ó   K  — y­w)z0Overload: Without tools, returns single content.Nr    ©r5   r�   r‘   r‰   rŠ   r‹   rŒ   r�   rŽ   rP   r�   r}   s               r"   Úcreate_messagezServerSession.create_messageì   ó   è ø€ ð" 	ùó   ‚)r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r}   c       
      ƒ   ó   K  — y­w)z4Overload: With tools, returns array-capable content.Nr    r“   s               r"   r”   zServerSession.create_messageÿ   r•   r–   c       
      ƒ   óÚ  K  — | j                   r| j                   j                  nd}t        ||	|
«       t        |«       t	        j
                  t	        j                  t	        j                  |||||||||	|
¬«
      ¬«      «      }t        |¬«      }|	�*| j                  |t        j                  |¬«      ƒ d{  –—† S | j                  |t        j                  |¬«      ƒ d{  –—† S 7 Œ.7 Œ­w)aô  Send a sampling/create_message request.

        Args:
            messages: The conversation messages to send.
            max_tokens: Maximum number of tokens to generate.
            system_prompt: Optional system prompt.
            include_context: Optional context inclusion setting.
                Should only be set to "thisServer" or "allServers"
                if the client has sampling.context capability.
            temperature: Optional sampling temperature.
            stop_sequences: Optional stop sequences.
            metadata: Optional metadata to pass through to the LLM provider.
            model_preferences: Optional model selection preferences.
            tools: Optional list of tools the LLM can use during sampling.
                Requires client to have sampling.tools capability.
            tool_choice: Optional control over tool usage behavior.
                Requires client to have sampling.tools capability.
            related_request_id: Optional ID of a related request.

        Returns:
            The sampling result from the client.

        Raises:
            McpError: If tools are provided but client doesn't support them.
            ValueError: If tool_use or tool_result message structure is invalid.
        N)
r�   ÚsystemPromptÚincludeContextr‹   Ú	maxTokensÚstopSequencesr�   ÚmodelPreferencesrP   Ú
toolChoicer\   ©r}   )re   Úresult_typer�   )r(   rK   r   r   r9   ÚServerRequestÚCreateMessageRequestÚCreateMessageRequestParamsr   Úsend_requestÚCreateMessageResultWithToolsÚCreateMessageResult)r5   r�   r‘   r‰   rŠ   r‹   rŒ   r�   rŽ   rP   r�   r}   rT   re   Úmetadata_objs                  r"   r”   zServerSession.create_message  sý   è ø€ ðR ;?×:MÒ:M�d×)Ñ)×6Ò6ÐSWˆÜ ¨U°KÔ@Ü)¨(Ô3ä×%Ñ%Ü×&Ñ&Ü×7Ñ7Ø%Ø!.Ø#2Ø +Ø(Ø"0Ø%Ø%6ØØ*ôôó
ˆô  -Ð@RÔSˆð ÐØ×*Ñ*ØÜ!×>Ñ>Ø%ð +ó ÷ ð ð
 ×&Ñ&ØÜ×1Ñ1Ø!ð 'ó 
÷ 
ð 	
ðøð

ús$   ‚B6C+Â8C'Â9)C+Ã"C)Ã#C+Ã)C+c              ƒ   ó¨   K  — | j                  t        j                  t        j                  «       «      t        j                  «      ƒ d{  –—† S 7 Œ­w)zSend a roots/list request.N)r¤   r9   r¡   ÚListRootsRequestÚListRootsResultr4   s    r"   Ú
list_rootszServerSession.list_roots^  sC   è ø€ à×&Ñ&Ü×Ñ¤× 6Ñ 6Ó 8Ó9Ü×!Ñ!ó
÷ 
ð 	
ð 
úó   ‚A	AÁAÁAÚmessageÚrequestedSchemac              ƒ   óD   K  — | j                  |||«      ƒ d{  –—† S 7 Œ­w)a  Send a form mode elicitation/create request.

        Args:
            message: The message to present to the user
            requestedSchema: Schema defining the expected response structure
            related_request_id: Optional ID of the request that triggered this elicitation

        Returns:
            The client's response

        Note:
            This method is deprecated in favor of elicit_form(). It remains for
            backward compatibility but new code should use elicit_form().
        N)Úelicit_form©r5   r­   r®   r}   s       r"   ÚelicitzServerSession.elicite  s$   è ø€ ð( ×%Ñ% g¨Ð@RÓS×SÐSÐSús   ‚ ™š c           
   ƒ   óî   K  — | j                  t        j                  t        j                  t        j                  ||¬«      ¬«      «      t        j
                  t        |¬«      ¬«      ƒ d{  –—† S 7 Œ­w)ag  Send a form mode elicitation/create request.

        Args:
            message: The message to present to the user
            requestedSchema: Schema defining the expected response structure
            related_request_id: Optional ID of the request that triggered this elicitation

        Returns:
            The client's response with form data
        )r­   r®   r\   rŸ   ©r�   N)r¤   r9   r¡   ÚElicitRequestÚElicitRequestFormParamsÚElicitResultr   r±   s       r"   r°   zServerSession.elicit_form{  sn   è ø€ ð  ×&Ñ&Ü×ÑÜ×#Ñ#Ü ×8Ñ8Ø 'Ø(7ôôóô ×ÑÜ*Ð>PÔQð 'ó 
÷ 
ð 	
ð 
ús   ‚A,A5Á.A3Á/A5ÚurlÚelicitation_idc              ƒ   óð   K  — | j                  t        j                  t        j                  t        j                  |||¬«      ¬«      «      t        j
                  t        |¬«      ¬«      ƒ d{  –—† S 7 Œ­w)ak  Send a URL mode elicitation/create request.

        This directs the user to an external URL for out-of-band interactions
        like OAuth flows, credential collection, or payment processing.

        Args:
            message: Human-readable explanation of why the interaction is needed
            url: The URL the user should navigate to
            elicitation_id: Unique identifier for tracking this elicitation
            related_request_id: Optional ID of the request that triggered this elicitation

        Returns:
            The client's response indicating acceptance, decline, or cancellation
        ©r­   r¸   ÚelicitationIdr\   rŸ   r´   N)r¤   r9   r¡   rµ   ÚElicitRequestURLParamsr·   r   )r5   r­   r¸   r¹   r}   s        r"   Ú
elicit_urlzServerSession.elicit_url˜  sq   è ø€ ð* ×&Ñ&Ü×ÑÜ×#Ñ#Ü ×7Ñ7Ø 'ØØ&4ôôóô ×ÑÜ*Ð>PÔQð 'ó 
÷ 
ð 	
ð 
ús   ‚A-A6Á/A4Á0A6c              ƒ   ó¨   K  — | j                  t        j                  t        j                  «       «      t        j                  «      ƒ d{  –—† S 7 Œ­w)zSend a ping request.N)r¤   r9   r¡   rp   ÚEmptyResultr4   s    r"   Ú	send_pingzServerSession.send_ping»  sC   è ø€ à×&Ñ&Ü×Ñ¤× 1Ñ 1Ó 3Ó4Ü×Ñó
÷ 
ð 	
ð 
úr¬   Úprogress_tokenÚprogressÚtotalc              ƒ   óÀ   K  — | j                  t        j                  t        j                  t        j                  ||||¬«      ¬«      «      |«      ƒ d{  –—†  y7 Œ­w)zSend a progress notification.)ÚprogressTokenrÃ   rÄ   r­   r\   N)r   r9   r€   ÚProgressNotificationÚProgressNotificationParams)r5   rÂ   rÃ   rÄ   r­   r}   s         r"   Úsend_progress_notificationz(ServerSession.send_progress_notificationÂ  s[   è ø€ ð ×$Ñ$Ü×$Ñ$Ü×*Ñ*Ü ×;Ñ;Ø&4Ø!)Ø#Ø 'ô	ôó	ð ó
÷ 	
ò 	
ús   ‚AAÁAÁAc              ƒ   óŒ   K  — | j                  t        j                  t        j                  «       «      «      ƒ d{  –—†  y7 Œ­w)z*Send a resource list changed notification.N)r   r9   r€   ÚResourceListChangedNotificationr4   s    r"   Úsend_resource_list_changedz(ServerSession.send_resource_list_changedÙ  s.   è ø€ à×$Ñ$¤U×%=Ñ%=¼e×>cÑ>cÓ>eÓ%fÓg×gÒgúó   ‚:A¼A½Ac              ƒ   óŒ   K  — | j                  t        j                  t        j                  «       «      «      ƒ d{  –—†  y7 Œ­w)z&Send a tool list changed notification.N)r   r9   r€   ÚToolListChangedNotificationr4   s    r"   Úsend_tool_list_changedz$ServerSession.send_tool_list_changedÝ  s.   è ø€ à×$Ñ$¤U×%=Ñ%=¼e×>_Ñ>_Ó>aÓ%bÓc×cÒcúrÍ   c              ƒ   óŒ   K  — | j                  t        j                  t        j                  «       «      «      ƒ d{  –—†  y7 Œ­w)z(Send a prompt list changed notification.N)r   r9   r€   ÚPromptListChangedNotificationr4   s    r"   Úsend_prompt_list_changedz&ServerSession.send_prompt_list_changedá  s.   è ø€ à×$Ñ$¤U×%=Ñ%=¼e×>aÑ>aÓ>cÓ%dÓe×eÒeúrÍ   c           	   ƒ   óº   K  — | j                  t        j                  t        j                  t        j                  |¬«      ¬«      «      |«      ƒ d{  –—†  y7 Œ­w)a¦  Send an elicitation completion notification.

        This should be sent when a URL mode elicitation has been completed
        out-of-band to inform the client that it may retry any requests
        that were waiting for this elicitation.

        Args:
            elicitation_id: The unique identifier of the completed elicitation
            related_request_id: Optional ID of the request that triggered this
        )r¼   r\   N)r   r9   r€   ÚElicitCompleteNotificationÚ ElicitCompleteNotificationParams)r5   r¹   r}   s      r"   Úsend_elicit_completez"ServerSession.send_elicit_completeå  sP   è ø€ ð ×$Ñ$Ü×$Ñ$Ü×0Ñ0Ü ×AÑAÐP^Ô_ôóð
 ó
÷ 	
ò 	
ús   ‚AAÁAÁAÚrelated_task_idÚtaskc                 ón  — t        j                  |||¬«      }|j                  ddd¬«      }|�9d|vri |d<   t        j                  |¬«      j                  d¬«      |d   t        <   |rd|› d	t        |«      › �n| j                  }|€| xj                  d
z  c_        t        j                  d|d|¬«      S )aÀ  Build a form mode elicitation request without sending it.

        Args:
            message: The message to present to the user
            requestedSchema: Schema defining the expected response structure
            related_task_id: If provided, adds io.modelcontextprotocol/related-task metadata
            task: If provided, makes this a task-augmented request

        Returns:
            A JSONRPCRequest ready to be sent or queued
        )r­   r®   rÙ   TÚjson©Úby_aliasÚmodeÚexclude_noneÚ_meta©ÚtaskId©rÝ   útask-ú-r   ú2.0úelicitation/create©ÚjsonrpcÚidÚmethodr]   )r9   r¶   Ú
model_dumpÚRelatedTaskMetadatar   rê   Ú_request_idÚJSONRPCRequest)r5   r­   r®   rØ   rÙ   r]   Úparams_dataÚ
request_ids           r"   Ú_build_elicit_form_requestz(ServerSession._build_elicit_form_requestý  sÚ   € ô$ ×.Ñ.ØØ+Øô
ˆð
 ×'Ñ'°¸FÐQUÐ'ÓVˆð Ð&à˜kÑ)Ø')�˜GÑ$Ü>C×>WÑ>WØ&ô?ç‰j $ˆjÓ'ð ˜Ñ Ô!:Ñ;ñ @O�u˜_Ð-¨Q¬r°&«z¨lÑ;ÐTX×TdÑTdˆ
ØÐ"Ø×Ò Ñ!Õä×#Ñ#ØØØ'Øô	
ð 	
r!   c                 ón  — t        j                  |||¬«      }|j                  ddd¬«      }|�9d|vri |d<   t        j                  |¬«      j                  d¬«      |d   t        <   |rd|› d	t        |«      › �n| j                  }|€| xj                  d
z  c_        t        j                  d|d|¬«      S )aÉ  Build a URL mode elicitation request without sending it.

        Args:
            message: Human-readable explanation of why the interaction is needed
            url: The URL the user should navigate to
            elicitation_id: Unique identifier for tracking this elicitation
            related_task_id: If provided, adds io.modelcontextprotocol/related-task metadata

        Returns:
            A JSONRPCRequest ready to be sent or queued
        r»   TrÛ   rÜ   rà   rá   rã   rä   rå   r   ræ   rç   rè   )r9   r½   rì   rí   r   rê   rî   rï   )r5   r­   r¸   r¹   rØ   r]   rð   rñ   s           r"   Ú_build_elicit_url_requestz'ServerSession._build_elicit_url_request*  sÚ   € ô$ ×-Ñ-ØØØ(ô
ˆð
 ×'Ñ'°¸FÐQUÐ'ÓVˆð Ð&à˜kÑ)Ø')�˜GÑ$Ü>C×>WÑ>WØ&ô?ç‰j $ˆjÓ'ð ˜Ñ Ô!:Ñ;ñ @O�u˜_Ð-¨Q¬r°&«z¨lÑ;ÐTX×TdÑTdˆ
ØÐ"Ø×Ò Ñ!Õä×#Ñ#ØØØ'Øô	
ð 	
r!   )
r‰   rŠ   r‹   rŒ   r�   rŽ   rP   r�   rØ   rÙ   c                ó~  — t        j                  |||||||||	|
|¬«      }|j                  ddd¬«      }|�9d|vri |d<   t        j                  |¬«      j                  d¬«      |d   t        <   |rd|› d	t        |«      › �n| j                  }|€| xj                  d
z  c_        t        j                  d|d|¬«      S )a«  Build a sampling/createMessage request without sending it.

        Args:
            messages: The conversation messages to send
            max_tokens: Maximum number of tokens to generate
            system_prompt: Optional system prompt
            include_context: Optional context inclusion setting
            temperature: Optional sampling temperature
            stop_sequences: Optional stop sequences
            metadata: Optional metadata to pass through to the LLM provider
            model_preferences: Optional model selection preferences
            tools: Optional list of tools the LLM can use during sampling
            tool_choice: Optional control over tool usage behavior
            related_task_id: If provided, adds io.modelcontextprotocol/related-task metadata
            task: If provided, makes this a task-augmented request

        Returns:
            A JSONRPCRequest ready to be sent or queued
        )r�   r™   rš   r‹   r›   rœ   r�   r�   rP   rž   rÙ   TrÛ   rÜ   rà   rá   rã   rä   rå   r   ræ   zsampling/createMessagerè   )r9   r£   rì   rí   r   rê   rî   rï   )r5   r�   r‘   r‰   rŠ   r‹   rŒ   r�   rŽ   rP   r�   rØ   rÙ   r]   rð   rñ   s                   r"   Ú_build_create_message_requestz+ServerSession._build_create_message_requestW  só   € ôF ×1Ñ1ØØ&Ø*Ø#Ø Ø(ØØ.ØØ"Øô
ˆð ×'Ñ'°¸FÐQUÐ'ÓVˆð Ð&à˜kÑ)Ø')�˜GÑ$Ü>C×>WÑ>WØ&ô?ç‰j $ˆjÓ'ð ˜Ñ Ô!:Ñ;ñ @O�u˜_Ð-¨Q¬r°&«z¨lÑ;ÐTX×TdÑTdˆ
ØÐ"Ø×Ò Ñ!Õä×#Ñ#ØØØ+Øô	
ð 	
r!   c              ƒ   óV   K  — | j                   j                  |«      ƒ d{  –—†  y7 Œ­w)aÏ  Send a raw session message.

        This is primarily used by TaskResultHandler to deliver queued messages
        (elicitation/sampling requests) to the client during task execution.

        WARNING: This is a low-level experimental method that may change without
        notice. Prefer using higher-level methods like send_notification() or
        send_request() for normal operations.

        Args:
            message: The session message to send
        N)Ú_write_streamÚsend)r5   r­   s     r"   Úsend_messagezServerSession.send_message�  s"   è ø€ ð × Ñ ×%Ñ% gÓ.×.Ò.úó   ‚)¡'¢)Úreqc              ƒ   óV   K  — | j                   j                  |«      ƒ d {  –—†  y 7 Œ­wr1   )rA   rù   )r5   rü   s     r"   Ú_handle_incomingzServerSession._handle_incoming¬  s    è ø€ Ø×2Ñ2×7Ñ7¸Ó<×<Ò<úrû   c                 ó   — | j                   S r1   )r2   r4   s    r"   Úincoming_messageszServerSession.incoming_messages¯  s   € ð ×3Ñ3Ð3r!   )F)r.   N)NNr1   )NNN)Kr   r   r   r   r   r'   Ú__annotations__r(   r9   ÚInitializeRequestParamsr)   r
   r   r   Ú	Exceptionr   r   Úboolr8   ÚpropertyrF   rH   ÚClientCapabilitiesrW   rY   r   r:   ri   rs   r;   ry   ÚLoggingLevelr   ÚstrÚ	RequestIdrƒ   r	   rˆ   r   ÚlistÚSamplingMessageÚintÚIncludeContextÚfloatÚdictÚModelPreferencesÚ
ToolChoicer¦   r”   ÚToolr¥   rª   r«   ÚElicitRequestedSchemar·   r²   r°   r¾   rÀ   rÁ   rÉ   rÌ   rÐ   rÓ   r×   ÚTaskMetadatarï   rò   rô   rö   rú   r@   rþ   r   Ú__classcell__)rD   s   @r"   r$   r$   K   sR  ø… ð )<×(JÑ(J€LÐ%ÓJØ;?€N�E×1Ñ1°DÑ8Ó?ØGKÐÐ=ÀÑDÓKð  ñdà.¨~À	Ñ/IÑJðdð -¨^Ñ<ðdð ,ð	dð
 ðdð 
õdð$ ð#˜u×<Ñ<¸tÑCò #ó ð#ð ð+Ð?ò +ó ð+ð%°%×2JÑ2Jð %Ètó %õN*ð^Ð1AÀ%×BUÑBUÐW\×WiÑWiÐBiÑ1jó ^ð@c¸×9QÑ9Qð cÐVZó cð "Ø59ñ
à×!Ñ!ð
ð ð
ð �d‘
ð	
ð
 "ŸO™O¨dÑ2ð
ð 
ó
ð*
¨vð 
¸$ó 
ð ð %)Ø7;Ø$(Ø+/Ø*.Ø;?ØØ/3Ø59òà�u×,Ñ,Ñ-ðð ð	ð
 ˜T‘zðð ×-Ñ-°Ñ4ðð ˜T‘\ðð ˜S™	 DÑ(ðð �s˜C�x‘. 4Ñ'ðð !×1Ñ1°DÑ8ðð ðð ×%Ñ%¨Ñ,ðð "ŸO™O¨dÑ2ðð 
×	"Ñ	"òó ðð$ ð %)Ø7;Ø$(Ø+/Ø*.Ø;?à/3Ø59òà�u×,Ñ,Ñ-ðð ð	ð
 ˜T‘zðð ×-Ñ-°Ñ4ðð ˜T‘\ðð ˜S™	 DÑ(ðð �s˜C�x‘. 4Ñ'ðð !×1Ñ1°DÑ8ðð �E—J‘JÑðð ×%Ñ%¨Ñ,ðð "ŸO™O¨dÑ2ðð 
×	+Ñ	+òó ðð. %)Ø7;Ø$(Ø+/Ø*.Ø;?Ø)-Ø/3Ø59òJ
à�u×,Ñ,Ñ-ðJ
ð ð	J
ð
 ˜T‘zðJ
ð ×-Ñ-°Ñ4ðJ
ð ˜T‘\ðJ
ð ˜S™	 DÑ(ðJ
ð �s˜C�x‘. 4Ñ'ðJ
ð !×1Ñ1°DÑ8ðJ
ð �E—J‘JÑ $Ñ&ðJ
ð ×%Ñ%¨Ñ,ðJ
ð "ŸO™O¨dÑ2ðJ
ð 
×	"Ñ	" U×%GÑ%GÑ	GóJ
ðX
 %×"7Ñ"7ó 
ð 6:ñ	TàðTð ×4Ñ4ðTð "ŸO™O¨dÑ2ð	Tð
 
×	Ñ	óTð4 6:ñ	
àð
ð ×4Ñ4ð
ð "ŸO™O¨dÑ2ð	
ð
 
×	Ñ	ó
ðD 6:ñ!
àð!
ð ð!
ð ð	!
ð
 "ŸO™O¨dÑ2ð!
ð 
×	Ñ	ó!
ðF
 ×!2Ñ!2ó 
ð #Ø"Ø)-ñ
à˜c™	ð
ð ð
ð �t‰|ð	
ð
 �t‘ð
ð   $™Jð
ð 
ó
ó.hódófð 6:ñ
àð
ð "ŸO™O¨dÑ2ð
ð 
ó	
ð8 '+Ø*.ñ+
àð+
ð ×4Ñ4ð+
ð ˜t™ð	+
ð
 × Ñ  4Ñ'ð+
ð 
×	Ñ	ó+
ðd '+ñ+
àð+
ð ð+
ð ð	+
ð
 ˜t™ð+
ð 
×	Ñ	ó+
ðd %)Ø7;Ø$(Ø+/Ø*.Ø;?Ø)-Ø/3Ø&*Ø*.òD
à�u×,Ñ,Ñ-ðD
ð ð	D
ð
 ˜T‘zðD
ð ×-Ñ-°Ñ4ðD
ð ˜T‘\ðD
ð ˜S™	 DÑ(ðD
ð �s˜C�x‘. 4Ñ'ðD
ð !×1Ñ1°DÑ8ðD
ð �E—J‘JÑ $Ñ&ðD
ð ×%Ñ%¨Ñ,ðD
ð ˜t™ðD
ð × Ñ  4Ñ'ðD
ð 
×	Ñ	óD
ðL/¨.ð /¸Tó /ð=Ð*@ð =ÀTó =ð ð4à	"Ð#9Ñ	:ò4ó ô4r!   )-Ú__doc__Úenumr   Útypingr   r   r   r>   Úanyio.lowlevelÚanyio.streams.memoryr   r   Úpydanticr	   Ú	mcp.typesr9   Ú(mcp.server.experimental.session_featuresr
   Úmcp.server.modelsr   Úmcp.server.validationr   r   Ú*mcp.shared.experimental.tasks.capabilitiesr   Ú%mcp.shared.experimental.tasks.helpersr   Úmcp.shared.messager   r   Úmcp.shared.sessionr   r   Úmcp.shared.versionr   r   r#   r:   ri   r;   r  r@   r¡   r€   r$   r    r!   r"   ú<module>r%     sÓ   ðñ%õN ß )Ñ )ã Û ß RÝ å Ý VÝ 3ß \Ý MÝ Kß D÷õ ;ô˜$ô ñ Ð)°ÔA€ð �U×(Ñ(¨%×*<Ñ*<Ð<Ñ=À×@XÑ@XÑXÐ[dÑdð ô
h	4ØØ×ÑØ× Ñ Ø×ÑØ×ÑØ× Ñ ð		"ñõh	4r!   