Ë
    ïñþ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y)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y)Ú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)
    ÚreturnNc                 ó   — || _         y ©N)Ú_session)ÚselfÚsessions     ú]/root/aria/mcps/aria-brain/venv/lib/python3.12/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                  j	                  t        j
                  t        j                  t        j                  ||t        j                  |¬«      |¬«      ¬«      «      t         j                  «      ƒ d{  –—† S 7 Œ­w)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¨tÑ4ˆEà—]‘]×/Ñ/Ü×ÑÜ×%Ñ%Ü ×6Ñ6Ø!Ø"+Ü"×/Ñ/°CÔ8Ø#ô	ôó	ô ×"Ñ"ó
÷ 
ð 	
ð 
ús   ‚B#B,Â%B*Â&B,Útask_idc           	   ƒ   óè   K  — | j                   j                  t        j                  t        j                  t        j
                  |¬«      ¬«      «      t        j                  «      ƒ d{  –—† S 7 Œ­w)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Ñ5¸WÔEôóô
 ×Ñó
÷ 
ð 	
ð 
úó   ‚A)A2Á+A0Á,A2Úresult_typec           	   ƒ   óÌ   K  — | j                   j                  t        j                  t        j                  t        j
                  |¬«      ¬«      «      |«      ƒ d{  –—† S 7 Œ­w)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*   r4   s      r   Úget_task_resultz*ExperimentalClientFeatures.get_task_result�   sX   è ø€ ð& —]‘]×/Ñ/Ü×ÑÜ×+Ñ+Ü ×<Ñ<ÀGÔLôóð
 ó
÷ 
ð 	
ð 
ús   ‚AA$ÁA"ÁA$Úcursorc              ƒ   óô   K  — |rt        j                  |¬«      nd}| j                  j                  t        j                  t        j
                  |¬«      «      t         j                  «      ƒ d{  –—† S 7 Œ­w)z·
        List all tasks.

        Args:
            cursor: Optional pagination cursor

        Returns:
            ListTasksResult containing tasks and optional next cursor
        )r9   Nr   )r    ÚPaginatedRequestParamsr   r#   r$   ÚListTasksRequestÚListTasksResult)r   r9   r   s      r   Ú
list_tasksz%ExperimentalClientFeatures.list_tasks�   sf   è ø€ ñ AG”×-Ñ-°VÕ<ÈDˆØ—]‘]×/Ñ/Ü×ÑÜ×&Ñ&¨fÔ5óô ×!Ñ!ó	
÷ 
ð 	
ð 
ús   ‚A/A8Á1A6Á2A8c           	   ƒ   óè   K  — | j                   j                  t        j                  t        j                  t        j
                  |¬«      ¬«      «      t        j                  «      ƒ d{  –—† S 7 Œ­w)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Ñ8ÀÔHôóô
 ×"Ñ"ó
÷ 
ð 	
ð 
úr3   c                ó\   K  — t        | j                  |«      2 3 d{  –—† }|­–— Œ7 Œ
6 y­w)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Å   s0   è ø€ ô4 0°·±¸wÓG÷ 	ð 	�&ØŒLð	øÑGùs   ‚,™*�(ž*¡,¨*ª,)r   r   r   Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚdictr   Úintr    r(   r)   r0   r2   Útyper	   r8   r=   r>   rB   rC   r   rF   r   r   r   r   r   '   s  „ ñó ð ,0ð8
ð
 Ø&*ò8
àð8
ð ˜˜S˜‘> DÑ(ð8
ð
 ð8
ð �3˜�8‰n˜tÑ#ð8
ð 
×	Ñ	ó8
ðt
 cð 
¨e×.AÑ.Aó 
ð&
àð
ð ˜'‘]ð
ð 
ó	
ð< "ñ
à�d‘
ð
ð 
×	Ñ	ó
ð*
¨ð 
°×1GÑ1Gó 
ð& sð ¨}¸U×=PÑ=PÑ/Qô r   r   )rJ   Úcollections.abcr   Útypingr   r   r   Ú	mcp.typesr    Ú%mcp.shared.experimental.tasks.pollingr   Úmcp.client.sessionr   ÚResultr	   r   r   r   r   ú<module>rU      s=   ðñõ4 *ß .Ñ .å Ý EáÝ0á
�) 5§<¡<Ô
0€÷yò yr   