§
    öŽ’jO!  ã                   ó°   — d Z ddlmZ ddlmZmZ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 erddlmZ  ed	ej        ¬
¦  «        Z G d„ d¦  «        ZdS )u8  
Experimental server session features for serverâ†’client task operations.

This module provides the server-side equivalent of ExperimentalClientFeatures,
allowing the server to send task-augmented requests to the client and poll for results.

WARNING: These APIs are experimental and may change without notice.
é    )ÚAsyncIterator)ÚTYPE_CHECKINGÚAnyÚTypeVarN)Úvalidate_sampling_toolsÚ!validate_tool_use_result_messages)Ú"require_task_augmented_elicitationÚrequire_task_augmented_sampling)Úpoll_until_terminal)ÚServerSessionÚResultT)Úboundc                   óš  — e Zd ZdZdd„Zdedej        fd„Zded	e	e
         de
fd
„Zdedeej                 fd„Zddœdedej        dedej        fd„Zddddddddddœ	deej                 dedededz  dej        dz  dedz  dee         dz  deeef         dz  dej        dz  deej                 dz  dej        dz  dej        fd„ZdS )Ú!ExperimentalServerSessionFeaturesu¯  
    Experimental server session features for serverâ†’client task operations.

    This provides the server-side equivalent of ExperimentalClientFeatures,
    allowing the server to send task-augmented requests to the client and
    poll for results.

    WARNING: These APIs are experimental and may change without notice.

    Access via session.experimental:
        result = await session.experimental.elicit_as_task(...)
    Úsessionr   ÚreturnNc                 ó"   — || _         d | _        d S )N)Ú_sessionÚtask_session_scope)Úselfr   s     úVC:\Projects\DSCons\.venv\Lib\site-packages\mcp\server\experimental\session_features.pyÚ__init__z*ExperimentalServerSessionFeatures.__init__)   s   € ØˆŒð /3ˆÔÐÐó    Útask_idc           	   ƒ   óÌ   K  — | j                              t          j        t          j        t          j        |¬¦  «        ¬¦  «        ¦  «        t          j        ¦  «        ƒ d{V —†S )zÁ
        Send tasks/get to the client to get task status.

        Args:
            task_id: The task identifier

        Returns:
            GetTaskResult containing the task status
        ©ÚtaskId©ÚparamsN)r   Úsend_requestÚtypesÚServerRequestÚGetTaskRequestÚGetTaskRequestParamsÚGetTaskResult)r   r   s     r   Úget_taskz*ExperimentalServerSessionFeatures.get_task2   sq   è è € ð ”]×/Ò/ÝÔ¥Ô 4½EÔ<VÐ^eÐ<fÑ<fÔ<fÐ gÑ gÔ gÑhÔhÝÔñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   Úresult_typec           	   ƒ   ó¸   K  — | j                              t          j        t          j        t          j        |¬¦  «        ¬¦  «        ¦  «        |¦  «        ƒ d{V —†S )a  
        Send tasks/result to the client to retrieve the final result.

        Args:
            task_id: The task identifier
            result_type: The expected result type

        Returns:
            The task result, validated against result_type
        r   r   N)r   r    r!   r"   ÚGetTaskPayloadRequestÚGetTaskPayloadRequestParams)r   r   r'   s      r   Úget_task_resultz1ExperimentalServerSessionFeatures.get_task_resultA   sn   è è € ð ”]×/Ò/ÝÔ¥Ô ;Å5ÔCdÐlsÐCtÑCtÔCtÐ uÑ uÔ uÑvÔvØñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   c                óP   K  — t          | j        |¦  «        2 3 d{V —†}|W V — Œ6 dS )a€  
        Poll a client task until it reaches terminal status.

        Yields GetTaskResult for each poll, allowing the caller to react to
        status changes. Exits when task reaches a terminal status.

        Respects the pollInterval hint from the client.

        Args:
            task_id: The task identifier

        Yields:
            GetTaskResult for each poll
        N)r   r&   )r   r   Ústatuss      r   Ú	poll_taskz+ExperimentalServerSessionFeatures.poll_taskU   sU   è è € õ 0°´¸wÑGÔGð 	ð 	ð 	ð 	ð 	ð 	ð 	�&ØˆLˆLˆLˆLˆLð HÐGÐGs   ˜%i`ê  ©ÚttlÚmessageÚrequestedSchemar0   c             ƒ   óò  K  — | j         j        r| j         j        j        nd}t          |¦  «         | j                              t          j        t          j        t          j        ||t          j	        |¬¦  «        ¬¦  «        ¬¦  «        ¦  «        t
          j
        ¦  «        ƒ d{V —†}|j        j        }|                      |¦  «        2 3 d{V —†}Œ6 |                      |t
          j        ¦  «        ƒ d{V —†S )a  
        Send a task-augmented elicitation to the client and poll until complete.

        The client will create a local task, process the elicitation asynchronously,
        and return the result when ready. This method handles the full flow:
        1. Send elicitation with task field
        2. Receive CreateTaskResult from client
        3. Poll client's task until terminal
        4. Retrieve and return the final ElicitResult

        Args:
            message: The message to present to the user
            requestedSchema: Schema defining the expected response
            ttl: Task time-to-live in milliseconds

        Returns:
            The client's elicitation response

        Raises:
            McpError: If client doesn't support task-augmented elicitation
        Nr/   )r1   r2   Útaskr   )r   Úclient_paramsÚcapabilitiesr	   r    r!   r"   ÚElicitRequestÚElicitRequestFormParamsÚTaskMetadataÚCreateTaskResultr4   r   r.   r+   ÚElicitResult)r   r1   r2   r0   Úclient_capsÚcreate_resultr   Ú_s           r   Úelicit_as_taskz0ExperimentalServerSessionFeatures.elicit_as_taskg   s9  è è € ð8 CGÄ-ÔB]Ðg�d”mÔ1Ô>Ð>ÐcgˆÝ*¨;Ñ7Ô7Ð7à"œm×8Ò8ÝÔÝÔ#Ý Ô8Ø 'Ø(7Ý"Ô/°CÐ8Ñ8Ô8ðñ ô ðñ ô ñô õ Ô"ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð  Ô$Ô+ˆà—~’~ gÑ.Ô.ð 	ð 	ð 	ð 	ð 	ð 	ð 	�!Øð /ð ×)Ò)¨'µ5Ô3EÑFÔFÐFÐFÐFÐFÐFÐFÐFs   Ã
C)	r0   Úsystem_promptÚinclude_contextÚtemperatureÚstop_sequencesÚmetadataÚmodel_preferencesÚtoolsÚtool_choiceÚmessagesÚ
max_tokensr@   rA   rB   rC   rD   rE   rF   rG   c       
      ƒ   óB  K  — | j         j        r| j         j        j        nd}t          |¦  «         t	          ||
|¦  «         t          |¦  «         | j                              t          j        t          j	        t          j
        ||||||||	|
|t          j        |¬¦  «        ¬¦  «        ¬¦  «        ¦  «        t          j        ¦  «        ƒ d{V —†}|j        j        }|                      |¦  «        2 3 d{V —†}Œ6 |                      |t          j        ¦  «        ƒ d{V —†S )a5  
        Send a task-augmented sampling request and poll until complete.

        The client will create a local task, process the sampling request
        asynchronously, and return the result when ready.

        Args:
            messages: The conversation messages for sampling
            max_tokens: Maximum tokens in the response
            ttl: Task time-to-live in milliseconds
            system_prompt: Optional system prompt
            include_context: Context inclusion strategy
            temperature: Sampling temperature
            stop_sequences: Stop sequences
            metadata: Additional metadata
            model_preferences: Model selection preferences
            tools: Optional list of tools the LLM can use during sampling
            tool_choice: Optional control over tool usage behavior

        Returns:
            The sampling result from the client

        Raises:
            McpError: If client doesn't support task-augmented sampling or tools
            ValueError: If tool_use or tool_result message structure is invalid
        Nr/   )rH   Ú	maxTokensÚsystemPromptÚincludeContextrB   ÚstopSequencesrD   ÚmodelPreferencesrF   Ú
toolChoicer4   r   )r   r5   r6   r
   r   r   r    r!   r"   ÚCreateMessageRequestÚCreateMessageRequestParamsr9   r:   r4   r   r.   r+   ÚCreateMessageResult)r   rH   rI   r0   r@   rA   rB   rC   rD   rE   rF   rG   r<   r=   r   r>   s                   r   Úcreate_message_as_taskz8ExperimentalServerSessionFeatures.create_message_as_taskš   sr  è è € ðR CGÄ-ÔB]Ðg�d”mÔ1Ô>Ð>ÐcgˆÝ'¨Ñ4Ô4Ð4Ý ¨U°KÑ@Ô@Ð@Ý)¨(Ñ3Ô3Ð3à"œm×8Ò8ÝÔÝÔ*Ý Ô;Ø!)Ø",Ø%2Ø'6Ø$/Ø&4Ø!)Ø):Ø#Ø#.Ý"Ô/°CÐ8Ñ8Ô8ðñ ô ðñ ô ñô õ" Ô"ñ%
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð*  Ô$Ô+ˆà—~’~ gÑ.Ô.ð 	ð 	ð 	ð 	ð 	ð 	ð 	�!Øð /ð ×)Ò)¨'µ5Ô3LÑMÔMÐMÐMÐMÐMÐMÐMÐMs   Ã2C:)r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr!   r%   r&   Útyper   r+   r   r.   ÚElicitRequestedSchemaÚintr;   r?   ÚlistÚSamplingMessageÚIncludeContextÚfloatÚdictr   ÚModelPreferencesÚToolÚ
ToolChoicerS   rT   © r   r   r   r      s5  € € € € € ðð ð3ð 3ð 3ð 3ð
 cð 
¨eÔ.Að 
ð 
ð 
ð 
ð
àð
ð ˜'”]ð
ð 
ð	
ð 
ð 
ð 
ð( sð ¨}¸UÔ=PÔ/Qð ð ð ð ð. ð1Gð 1Gð 1Gàð1Gð Ô4ð1Gð
 ð1Gð 
Ô	ð1Gð 1Gð 1Gð 1Gðp Ø$(Ø7;Ø$(Ø+/Ø*.Ø;?Ø)-Ø/3ðHNð HNð HNà�uÔ,Ô-ðHNð ð	HNð
 ðHNð ˜T‘zðHNð Ô-°Ñ4ðHNð ˜T‘\ðHNð ˜Sœ	 DÑ(ðHNð �s˜C�x”. 4Ñ'ðHNð !Ô1°DÑ8ðHNð �E”JÔ $Ñ&ðHNð Ô%¨Ñ,ðHNð 
Ô	"ðHNð HNð HNð HNð HNð HNr   r   )rX   Úcollections.abcr   Útypingr   r   r   Ú	mcp.typesr!   Úmcp.server.validationr   r   Ú*mcp.shared.experimental.tasks.capabilitiesr	   r
   Ú%mcp.shared.experimental.tasks.pollingr   Úmcp.server.sessionr   ÚResultr   r   re   r   r   ú<module>rn      s  ððð ð *Ð )Ð )Ð )Ð )Ð )Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð Ð Ð Ø \Ð \Ð \Ð \Ð \Ð \Ð \Ð \ðð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ Eàð 1Ø0Ð0Ð0Ð0Ð0Ð0à
ˆ'�) 5¤<Ð
0Ñ
0Ô
0€ðGNð GNð GNð GNð GNñ GNô GNð GNð GNð GNr   