+
    wi                         R t ^ RIHt ^ RIHtHtHt ^ RIHt ^ RI	H
t
 ]'       d   ^ RIHt ]! R]P                  R7      t ! R R	4      tR# )
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                      a  ] tR t^'t o RtV 3R lR ltRRRRR/V 3R lR	 llltV 3R
 lR ltV 3R lR ltRV 3R lR llt	V 3R lR lt
V 3R lR ltRtV tR# )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)
c                "   < V ^8  d   QhRRRR/# )   sessionr   returnN )format__classdict__s   "Q/home/ubuntu/.local/lib/python3.14/site-packages/mcp/client/experimental/tasks.py__annotate__'ExperimentalClientFeatures.__annotate__1   s          D      c                    Wn         R # N_session)selfr   s   &&r   __init__#ExperimentalClientFeatures.__init__1   s    r   Nttli`  metac          
         < V ^8  d   QhRS[ RS[S[ S[3,          R,          RS[RS[S[ S[3,          R,          RS[P
                  /# )r   name	argumentsNr   r   r   )strdictr   inttypesCreateTaskResult)r   r   s   "r   r   r   4   s]     8
 8
8
 S>D(8

 8
 38nt#8
 
		8
r   c               j  "   RpVe!   \         P                  P                  ! R/ VB pV P                  P	                  \         P
                  ! \         P                  ! \         P                  ! VV\         P                  ! VR7      VR7      R7      4      \         P                  4      G Rj  xL
 #  L5i)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paramsr   )
r&   RequestParamsMetar   send_requestClientRequestCallToolRequestCallToolRequestParamsTaskMetadatar'   )r   r!   r"   r   r   r*   s   &&&$$ r   call_tool_as_task,ExperimentalClientFeatures.call_tool_as_task4   s     P 26'',,4t4E]]//%% 66!"+"//C8#		 ""
 
 	
 
s   B*B3,B1-B3c                :   < V ^8  d   QhRS[ RS[P                  /# r   task_idr   )r#   r&   GetTaskResult)r   r   s   "r   r   r   n   s!     
 
c 
e.A.A 
r   c           
        "   V P                   P                  \        P                  ! \        P                  ! \        P
                  ! VR7      R7      4      \        P                  4      G Rj  xL
 #  L5i)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&   r0   GetTaskRequestGetTaskRequestParamsr9   r   r8   s   &&r   get_task#ExperimentalClientFeatures.get_taskn   s]      ]]//$$ 55WE
 
 
 	
 
   A,A5.A3/A5c                <   < V ^8  d   QhRS[ RS[S[,          RS[/# )r   r8   result_typer   )r#   typer   )r   r   s   "r   r   r      s-     
 

 ']
 
	
r   c           
        "   V P                   P                  \        P                  ! \        P                  ! \        P
                  ! VR7      R7      4      V4      G Rj  xL
 #  L5i)ah  
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&   r0   GetTaskPayloadRequestGetTaskPayloadRequestParams)r   r8   rD   s   &&&r   get_task_result*ExperimentalClientFeatures.get_task_result   sW     & ]]//++ <<GL
 
 
 	
 
s   AA' A%!A'c                H   < V ^8  d   QhRS[ R,          RS[P                  /# )r   cursorNr   )r#   r&   ListTasksResult)r   r   s   "r   r   r      s)     
 
d

 
		
r   c                  "   V'       d   \         P                  ! VR7      MRpV P                  P                  \         P                  ! \         P
                  ! VR7      4      \         P                  4      G Rj  xL
 #  L5i)z
List all tasks.

Args:
    cursor: Optional pagination cursor

Returns:
    ListTasksResult containing tasks and optional next cursor
)rL   Nr+   )r&   PaginatedRequestParamsr   r/   r0   ListTasksRequestrM   )r   rL   r,   s   && r   
list_tasks%ExperimentalClientFeatures.list_tasks   se      AG--V<D]]//&&f5 !!	
 
 	
 
s   A8B:A?;Bc                :   < V ^8  d   QhRS[ RS[P                  /# r7   )r#   r&   CancelTaskResult)r   r   s   "r   r   r      s!     
 
 
1G1G 
r   c           
        "   V P                   P                  \        P                  ! \        P                  ! \        P
                  ! VR7      R7      4      \        P                  4      G Rj  xL
 #  L5i)z{
Cancel a running task.

Args:
    task_id: The task identifier

Returns:
    CancelTaskResult with the updated task state
r;   r+   N)r   r/   r&   r0   CancelTaskRequestCancelTaskRequestParamsrT   r?   s   &&r   cancel_task&ExperimentalClientFeatures.cancel_task   s]      ]]//'' 88H
 ""
 
 	
 
rB   c                J   < V ^8  d   QhRS[ RS[S[P                  ,          /# r7   )r#   r   r&   r9   )r   r   s   "r   r   r      s&      s }U=P=P/Q r   c               b   "   \        V P                  V4        Rj  xL
  pV5x  K   LDR# 5i)a  
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   r@   )r   r8   statuss   && r   	poll_task$ExperimentalClientFeatures.poll_task   s.     4 0wG 	 	&L	Gs   /,*,	/,/r   r   )__name__
__module____qualname____firstlineno____doc__r   r4   r@   rI   rQ   rX   r]   __static_attributes____classdictcell__)r   s   @r   r   r   '   se        8

 8
 '+8
 8
t
 
&
 
8
 
*
 
& r   r   )rc   collections.abcr   typingr   r   r   	mcp.typesr&   %mcp.shared.experimental.tasks.pollingr   mcp.client.sessionr   Resultr   r   r   r   r   <module>rl      s=   4 * . .  E0
)5<<
0y yr   