§
    ­eîi�  ã                   ó�   — 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
 erddlmZ  edej        ¬¦  «        Z G d	„ d
¦  «        ZdS )aÕ  
Experimental client-side task support.

This module provides client methods for interacting with MCP tasks.

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

Example:
    # Call a tool as a task
    result = await session.experimental.call_tool_as_task("tool_name", {"arg": "value"})
    task_id = result.task.taskId

    # Get task status
    status = await session.experimental.get_task(task_id)

    # Get task result when complete
    if status.status == "completed":
        result = await session.experimental.get_task_result(task_id, CallToolResult)

    # List all tasks
    tasks = await session.experimental.list_tasks()

    # Cancel a task
    await session.experimental.cancel_task(task_id)
é    )ÚAsyncIterator)ÚTYPE_CHECKINGÚAnyÚTypeVarN)Úpoll_until_terminal)ÚClientSessionÚResultT)Úboundc                   ó  — e Zd ZdZdd„Z	 ddddœd	ed
eeef         dz  dedeeef         dz  de	j
        f
d„Zdede	j        fd„Zdedee         defd„Z	 ddedz  de	j        fd„Zdede	j        fd„Zdedee	j                 fd„ZdS )ÚExperimentalClientFeatureszú
    Experimental client features for tasks and other experimental APIs.

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

    Access via session.experimental:
        status = await session.experimental.get_task(task_id)
    Úsessionr   ÚreturnNc                 ó   — || _         d S ©N)Ú_session)Úselfr   s     úa/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/mcp/client/experimental/tasks.pyÚ__init__z#ExperimentalClientFeatures.__init__1   s   € ØˆŒˆˆó    i`ê  )ÚttlÚmetaÚnameÚ	argumentsr   r   c             ƒ   ó,  K  — d}|�t          j        j        di |¤Ž}| j                             t          j        t          j        t          j        ||t          j        |¬¦  «        |¬¦  «        ¬¦  «        ¦  «        t           j	        ¦  «        ƒ d{V —†S )a»  Call a tool as a task, returning a CreateTaskResult for polling.

        This is a convenience method for calling tools that support task execution.
        The server will return a task reference instead of the immediate result,
        which can then be polled via `get_task()` and retrieved via `get_task_result()`.

        Args:
            name: The tool name
            arguments: Tool arguments
            ttl: Task time-to-live in milliseconds (default: 60000 = 1 minute)
            meta: Optional metadata to include in the request

        Returns:
            CreateTaskResult containing the task reference

        Example:
            # Create task
            result = await session.experimental.call_tool_as_task(
                "long_running_tool", {"input": "data"}
            )
            task_id = result.task.taskId

            # Poll for completion
            while True:
                status = await session.experimental.get_task(task_id)
                if status.status == "completed":
                    break
                await asyncio.sleep(0.5)

            # Get result
            final = await session.experimental.get_task_result(task_id, CallToolResult)
        N)r   )r   r   ÚtaskÚ_meta©Úparams© )
ÚtypesÚRequestParamsÚMetar   Úsend_requestÚClientRequestÚCallToolRequestÚCallToolRequestParamsÚTaskMetadataÚCreateTaskResult)r   r   r   r   r   r   s         r   Úcall_tool_as_taskz,ExperimentalClientFeatures.call_tool_as_task4   sÁ   è è € ðP 26ˆØÐÝÔ'Ô,Ð4Ð4¨tÐ4Ð4ˆEà”]×/Ò/ÝÔÝÔ%Ý Ô6Ø!Ø"+Ý"Ô/°CÐ8Ñ8Ô8Ø#ð	ñ ô ðñ ô ñ	ô 	õ Ô"ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   Útask_idc           	   ƒ   óÌ   K  — | j                              t          j        t          j        t          j        |¬¦  «        ¬¦  «        ¦  «        t          j        ¦  «        ƒ d{V —†S )z¿
        Get the current status of a task.

        Args:
            task_id: The task identifier

        Returns:
            GetTaskResult containing the task status and metadata
        ©ÚtaskIdr   N)r   r#   r    r$   ÚGetTaskRequestÚGetTaskRequestParamsÚGetTaskResult©r   r*   s     r   Úget_taskz#ExperimentalClientFeatures.get_taskn   s~   è è € ð ”]×/Ò/ÝÔÝÔ$Ý Ô5¸WÐEÑEÔEðñ ô ñô õ
 Ôñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   Úresult_typec           	   ƒ   ó¸   K  — | j                              t          j        t          j        t          j        |¬¦  «        ¬¦  «        ¦  «        |¦  «        ƒ d{V —†S )a¸  
        Get the result of a completed task.

        The result type depends on the original request type:
        - tools/call tasks return CallToolResult
        - Other request types return their corresponding result type

        Args:
            task_id: The task identifier
            result_type: The expected result type (e.g., CallToolResult)

        Returns:
            The task result, validated against result_type
        r,   r   N)r   r#   r    r$   ÚGetTaskPayloadRequestÚGetTaskPayloadRequestParams)r   r*   r3   s      r   Úget_task_resultz*ExperimentalClientFeatures.get_task_result�   s{   è è € ð& ”]×/Ò/ÝÔÝÔ+Ý Ô<ÀGÐLÑLÔLðñ ô ñô ð
 ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   Úcursorc              ƒ   óØ   K  — |rt          j        |¬¦  «        nd}| j                             t          j        t          j        |¬¦  «        ¦  «        t           j        ¦  «        ƒ d{V —†S )z·
        List all tasks.

        Args:
            cursor: Optional pagination cursor

        Returns:
            ListTasksResult containing tasks and optional next cursor
        )r8   Nr   )r    ÚPaginatedRequestParamsr   r#   r$   ÚListTasksRequestÚListTasksResult)r   r8   r   s      r   Ú
list_tasksz%ExperimentalClientFeatures.list_tasks�   sˆ   è è € ð AGÐP•Ô-°VÐ<Ñ<Ô<Ð<ÈDˆØ”]×/Ò/ÝÔÝÔ&¨fÐ5Ñ5Ô5ñô õ Ô!ñ	
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   c           	   ƒ   óÌ   K  — | j                              t          j        t          j        t          j        |¬¦  «        ¬¦  «        ¦  «        t          j        ¦  «        ƒ d{V —†S )z«
        Cancel a running task.

        Args:
            task_id: The task identifier

        Returns:
            CancelTaskResult with the updated task state
        r,   r   N)r   r#   r    r$   ÚCancelTaskRequestÚCancelTaskRequestParamsÚCancelTaskResultr1   s     r   Úcancel_taskz&ExperimentalClientFeatures.cancel_task²   s~   è è € ð ”]×/Ò/ÝÔÝÔ'Ý Ô8ÀÐHÑHÔHðñ ô ñô õ
 Ô"ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r   c                óP   K  — t          | j        |¦  «        2 3 d{V —†}|W V — Œ6 dS )ak  
        Poll a task until it reaches a terminal status.

        Yields GetTaskResult for each poll, allowing the caller to react to
        status changes (e.g., handle input_required). Exits when task reaches
        a terminal status (completed, failed, cancelled).

        Respects the pollInterval hint from the server.

        Args:
            task_id: The task identifier

        Yields:
            GetTaskResult for each poll

        Example:
            async for status in session.experimental.poll_task(task_id):
                print(f"Status: {status.status}")
                if status.status == "input_required":
                    # Handle elicitation request via tasks/result
                    pass

            # Task is now terminal, get the result
            result = await session.experimental.get_task_result(task_id, CallToolResult)
        N)r   r2   )r   r*   Ústatuss      r   Ú	poll_taskz$ExperimentalClientFeatures.poll_taskÅ   sU   è è € õ4 0°´¸wÑGÔGð 	ð 	ð 	ð 	ð 	ð 	ð 	�&ØˆLˆLˆLˆLˆLð HÐGÐGs   ˜%)r   r   r   Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚdictr   Úintr    r(   r)   r0   r2   Útyper	   r7   r<   r=   rA   rB   r   rE   r   r   r   r   r   '   s�  € € € € € ðð ð ð  ð  ð  ð ,0ð8
ð
 Ø&*ð8
ð 8
ð 8
àð8
ð ˜˜S˜”> DÑ(ð8
ð
 ð8
ð �3˜�8Œn˜tÑ#ð8
ð 
Ô	ð8
ð 8
ð 8
ð 8
ðt
 cð 
¨eÔ.Að 
ð 
ð 
ð 
ð&
àð
ð ˜'”]ð
ð 
ð	
ð 
ð 
ð 
ð< "ð
ð 
à�d‘
ð
ð 
Ô	ð
ð 
ð 
ð 
ð*
¨ð 
°Ô1Gð 
ð 
ð 
ð 
ð& sð ¨}¸UÔ=PÔ/Qð ð ð ð ð ð r   r   )rI   Úcollections.abcr   Útypingr   r   r   Ú	mcp.typesr    Ú%mcp.shared.experimental.tasks.pollingr   Úmcp.client.sessionr   ÚResultr	   r   r   r   r   ú<module>rT      sÑ   ððð ð4 *Ð )Ð )Ð )Ð )Ð )Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð Ð Ð Ø EÐ EÐ EÐ EÐ EÐ Eàð 1Ø0Ð0Ð0Ð0Ð0Ð0à
ˆ'�) 5¤<Ð
0Ñ
0Ô
0€ðyð yð yð yð yñ yô yð yð yð yr   