
    Ki'*              	          d Z ddlmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ erddlmZ  G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zdedef   dej0                  dej2                  ej4                  z  fdZdedef   dej8                  dej:                  ej4                  z  fdZdedef   dej>                  dz  dej@                  ej4                  z  fdZ!dedef   dejD                  dejF                  ej4                  z  fdZ$dedef   dejJ                  dejL                  dejN                  ej4                  z  fdZ(dedef   dejR                  dejL                  dejN                  ej4                  z  fdZ*e G d  d!             Z+e(Z,e*Z-y)"a  
Experimental task handler protocols for server -> client requests.

This module provides Protocol types and default handlers for when servers
send task-related requests to clients (the reverse of normal client -> server flow).

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

Use cases:
- Server sends task-augmented sampling/elicitation request to client
- Client creates a local task, spawns background work, returns CreateTaskResult
- Server polls client's task status via tasks/get, tasks/result, etc.
    )	dataclassfield)TYPE_CHECKINGAnyProtocol)TypeAdapterN)RequestContext)RequestResponder)ClientSessionc                   p    e Zd ZdZdedef   dej                  dej                  ej                  z  fdZ
y)GetTaskHandlerFnTzrHandler for tasks/get requests from server.

    WARNING: This is experimental and may change without notice.
    contextr   paramsreturnc                    K   y wN selfr   r   s      q/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/client/experimental/task_handlers.py__call__zGetTaskHandlerFnT.__call__"   s      14   N)__name__
__module____qualname____doc__r	   r   typesGetTaskRequestParamsGetTaskResult	ErrorDatar   r       r   r   r      sG    
4 454 **4 
		u	.	4r!   r   c                   p    e Zd ZdZdedef   dej                  dej                  ej                  z  fdZ
y)GetTaskResultHandlerFnTzuHandler for tasks/result requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   r   c                    K   y wr   r   r   s      r   r   z GetTaskResultHandlerFnT.__call__/   s      8;r   N)r   r   r   r   r	   r   r   GetTaskPayloadRequestParamsGetTaskPayloadResultr    r   r   r!   r   r#   r#   )   sG    
; 45; 11; 
	#	#eoo	5	;r!   r#   c                   v    e Zd ZdZdedef   dej                  dz  dej                  ej                  z  fdZ
y)ListTasksHandlerFnTzsHandler for tasks/list requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   Nr   c                    K   y wr   r   r   s      r   r   zListTasksHandlerFnT.__call__<   s      36r   )r   r   r   r   r	   r   r   PaginatedRequestParamsListTasksResultr    r   r   r!   r   r(   r(   6   sL    
6 456 ,,t36 
			0	6r!   r(   c                   p    e Zd ZdZdedef   dej                  dej                  ej                  z  fdZ
y)CancelTaskHandlerFnTzuHandler for tasks/cancel requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   r   c                    K   y wr   r   r   s      r   r   zCancelTaskHandlerFnT.__call__I   s      47r   N)r   r   r   r   r	   r   r   CancelTaskRequestParamsCancelTaskResultr    r   r   r!   r   r-   r-   C   sG    
7 457 --7 
		%//	1	7r!   r-   c            	           e Zd ZdZdedef   dej                  dej                  dej                  ej                  z  fdZy)	TaskAugmentedSamplingFnTaR  Handler for task-augmented sampling/createMessage requests from server.

    When server sends a CreateMessageRequest with task field, this callback
    is invoked. The callback should create a task, spawn background work,
    and return CreateTaskResult immediately.

    WARNING: This is experimental and may change without notice.
    r   r   r   task_metadatar   c                    K   y wr   r   r   r   r   r3   s       r   r   z!TaskAugmentedSamplingFnT.__call__Z        
 47r   N)r   r   r   r   r	   r   r   CreateMessageRequestParamsTaskMetadataCreateTaskResultr    r   r   r!   r   r2   r2   P   sW    7 457 007 ))	7
 
		%//	17r!   r2   c            	           e Zd ZdZdedef   dej                  dej                  dej                  ej                  z  fdZy)	TaskAugmentedElicitationFnTaH  Handler for task-augmented elicitation/create requests from server.

    When server sends an ElicitRequest with task field, this callback
    is invoked. The callback should create a task, spawn background work,
    and return CreateTaskResult immediately.

    WARNING: This is experimental and may change without notice.
    r   r   r   r3   r   c                    K   y wr   r   r5   s       r   r   z$TaskAugmentedElicitationFnT.__call__l   r6   r   N)r   r   r   r   r	   r   r   ElicitRequestParamsr8   r9   r    r   r   r!   r   r;   r;   b   sW    7 457 ))7 ))	7
 
		%//	17r!   r;   r   r   r   r   c                 T   K   t        j                  t         j                  d      S w)Nztasks/get not supportedcodemessager   r    METHOD_NOT_FOUNDr   r   s     r   default_get_task_handlerrE   t   s%      ??##)    &(c                 T   K   t        j                  t         j                  d      S w)Nztasks/result not supportedr?   rB   rD   s     r   default_get_task_result_handlerrH   ~   %      ??##, rF   c                 T   K   t        j                  t         j                  d      S w)Nztasks/list not supportedr?   rB   rD   s     r   default_list_tasks_handlerrK      s%      ??##* rF   c                 T   K   t        j                  t         j                  d      S w)Nztasks/cancel not supportedr?   rB   rD   s     r   default_cancel_task_handlerrM      rI   rF   r3   c                 T   K   t        j                  t         j                  d      S w)Nz%Task-augmented sampling not supportedr?   r   r    INVALID_REQUESTr   r   r3   s      r   default_task_augmented_samplingrR      s%     
 ??""7 rF   c                 T   K   t        j                  t         j                  d      S w)Nz(Task-augmented elicitation not supportedr?   rO   rQ   s      r   "default_task_augmented_elicitationrT      s%     
 ??"": rF   c                   ^   e Zd ZU dZ ee      Zeed<    ee	      Z
eed<    ee      Zeed<    ee      Zeed<    ee      Zeed<    ee      Zeed<   d	ej2                  d
z  fdZedej8                  d	efd       Zdede f   de!ej8                  ejD                  f   d	d
fdZ#y
)ExperimentalTaskHandlersaB  Container for experimental task handlers.

    Groups all task-related handlers that handle server -> client requests.
    This includes both pure task requests (get, list, cancel, result) and
    task-augmented request handlers (sampling, elicitation with task field).

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

    Example:
        handlers = ExperimentalTaskHandlers(
            get_task=my_get_task_handler,
            list_tasks=my_list_tasks_handler,
        )
        session = ClientSession(..., experimental_task_handlers=handlers)
    )defaultget_taskget_task_result
list_taskscancel_taskaugmented_samplingaugmented_elicitationr   Nc                 (   | j                   t        u}| j                  t        u}| j                  t
        u}| j                  t        u}t        ||||g      syd}|s|rkt        j                  |r(t        j                  t        j                               nd|r(t        j                  t        j                               nd      }t        j                  |rt        j                          nd|rt        j"                         |      S d|      S )a4  Build ClientTasksCapability from the configured handlers.

        Returns a capability object that reflects which handlers are configured
        (i.e., not using the default "not supported" handlers).

        Returns:
            ClientTasksCapability if any handlers are provided, None otherwise
        N)createMessage)create)samplingelicitation)listcancelrequests)rZ   rK   r[   rM   r\   rR   r]   rT   anyr   ClientTasksRequestsCapabilityTasksSamplingCapabilityTasksCreateMessageCapabilityTasksElicitationCapability TasksCreateElicitationCapabilityClientTasksCapabilityTasksListCapabilityTasksCancelCapability)r   has_list
has_cancelhas_samplinghas_elicitationrequests_capabilitys         r   build_capabilityz)ExperimentalTaskHandlers.build_capability   s     ??*DD%%-HH
..6UU44<^^ Hj,HI KO?"'"E"E 66UEgEgEij" "<<EDjDjDlm# **08**,d4>5..0(
 	
DH(
 	
r!   requestc                     t        | j                  t        j                  t        j                  z  t        j
                  z  t        j                  z        S )z5Check if this handler handles the given request type.)
isinstancerootr   GetTaskRequestGetTaskPayloadRequestListTasksRequestCancelTaskRequest)ru   s    r   handles_requestz(ExperimentalTaskHandlers.handles_request   sC     LL  5#>#>>AWAWWZ_ZqZqq
 	
r!   ctxr   	responderc                   K   t        t        j                  t        j                  z        }|j                  j
                  xt        j                  d xI\  } | j                  ||       d{   }|j                  |      }|j                  |       d{    y xt        j                  d xI\  } | j                  ||       d{   }|j                  |      }|j                  |       d{    y xt        j                  d xI\  } | j                  ||       d{   }|j                  |      }|j                  |       d{    y t        j                  d xH\  }| j                  ||       d{   }|j                  |      }|j                  |       d{    y 	 t!        dt#        |j                  j
                               7 u7 N7 7 7 7 7 k7 Cw)zHandle a task-related request from the server.

        Call handles_request() first to check if this handler can handle the request.
        )r   NzUnhandled request type: )r   r   ClientResultr    ru   rx   ry   rX   validate_pythonrespondrz   rY   r{   rZ   r|   r[   
ValueErrortype)r   r~   r   client_response_typer   responseclient_responses          r   handle_requestz'ExperimentalTaskHandlers.handle_request   s     S^0S
 $$4%%4!%sF!;;"6"F"Fx"P''888 5
 <,,;!%!5!5c6!BB"6"F"Fx"P''888 <
 7''6!%f!=="6"F"Fx"P''888 7
 ((7!%!1!1#v!>>"6"F"Fx"P''888 8
  #;DARARAWAW<X;Y!Z[[) <8 C8 >8 ?8s   A-G7/G$0)G7G'3G7G*)G77G-83G7+G/,)G7G11G7G3)G71G523G7'G7*G7-G7/G71G73G75G7)$r   r   r   r   r   rE   rX   r   __annotations__rH   rY   r#   rK   rZ   r(   rM   r[   r-   rR   r\   r2   rT   r]   r;   r   rl   rt   staticmethodServerRequestboolr}   r	   r   r
   r   r   r   r!   r   rV   rV      s    " #(0H"IHI/4=\/]O,]&+4N&OJ#O(-6Q(RK%R 49A`3a0a9>Gi9j6j"
%"="="D "
H 
!4!4 
 
 
#\OS01#\ $E$7$79K9K$KL#\ 
	#\r!   rV   ).r   dataclassesr   r   typingr   r   r   pydanticr   	mcp.typesr   mcp.shared.contextr	   mcp.shared.sessionr
   mcp.client.sessionr   r   r#   r(   r-   r2   r;   r   r   r    rE   r%   r&   rH   r*   r+   rK   r/   r0   rM   r7   r8   r9   rR   r=   rT   rV   (default_task_augmented_sampling_callback+default_task_augmented_elicitation_callbackr   r!   r   <module>r      s7   ) / /    - /0
4 
4
;h 
;
6( 
6
78 
77x 7$7( 7$OS01&& 5??*OS01-- %//1OS01((4/ U__,OS01)) eoo-OS01,, %% eoo-	OS01%% %% eoo-	 j\ j\ j\\ ,K (.P +r!   