
    )`i1)                    (   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) erddl*m+Z+  ej,        e-          Z. G d d          Z/dS )zyExperimental handlers for the low-level MCP server.

WARNING: These APIs are experimental and may change without notice.
    )annotationsN)	AwaitableCallable)TYPE_CHECKING)TaskSupport)create_call_wrapper)McpError)cancel_task)InMemoryTaskStore)InMemoryTaskMessageQueueTaskMessageQueue)	TaskStore)INVALID_PARAMSCancelTaskRequestCancelTaskResult	ErrorDataGetTaskPayloadRequestGetTaskPayloadResultGetTaskRequestGetTaskResultListTasksRequestListTasksResultServerCapabilitiesServerResultServerTasksCapabilityServerTasksRequestsCapabilityTasksCancelCapabilityTasksListCapabilityTasksToolsCapability)Serverc                  p    e Zd ZdZd dZed!d            Zd"dZ	 	 d#d$dZd%dZ	d&dZ
d'dZd(dZd)dZdS )*ExperimentalHandlerszyExperimental request/notification handlers.

    WARNING: These APIs are experimental and may change without notice.
    serverr    request_handlers2dict[type, Callable[..., Awaitable[ServerResult]]]notification_handlers*dict[type, Callable[..., Awaitable[None]]]c                >    || _         || _        || _        d | _        d S N)_server_request_handlers_notification_handlers_task_support)selfr#   r$   r&   s       t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mcp/server/lowlevel/experimental.py__init__zExperimentalHandlers.__init__3   s)     !1&;#15    returnTaskSupport | Nonec                    | j         S )z/Get the task support configuration, if enabled.)r-   )r.   s    r/   task_supportz!ExperimentalHandlers.task_support>   s     !!r1   capabilitiesr   Nonec                |    t           fdt          t          t          t          fD                       sd S t                      |_        t           j        v rt                      |j        _	        t           j        v rt                      |j        _        t          t                                |j        _        d S )Nc              3  *   K   | ]}|j         v V  d S r)   )r+   ).0req_typer.   s     r/   	<genexpr>z;ExperimentalHandlers.update_capabilities.<locals>.<genexpr>E   s?       
 
 ..
 
 
 
 
 
r1   )tools)anyr   r   r   r   r   tasksr+   r   listr   cancelr   r   requests)r.   r6   s   ` r/   update_capabilitiesz(ExperimentalHandlers.update_capabilitiesC   s     
 
 
 
+-=?PRgh
 
 
 
 
 	 F244t555&9&;&;L# 666(=(?(?L%&C&(('
 '
 '
###r1   NstoreTaskStore | NonequeueTaskMessageQueue | Noner   c                    |t                      }|t                      }t          ||          | _        |                                  | j        S )a]  
        Enable experimental task support.

        This sets up the task infrastructure and auto-registers default handlers
        for tasks/get, tasks/result, tasks/list, and tasks/cancel.

        Args:
            store: Custom TaskStore implementation (defaults to InMemoryTaskStore)
            queue: Custom TaskMessageQueue implementation (defaults to InMemoryTaskMessageQueue)

        Returns:
            The TaskSupport configuration object

        Example:
            # Simple in-memory setup
            server.experimental.enable_tasks()

            # Custom store/queue for distributed systems
            server.experimental.enable_tasks(
                store=RedisTaskStore(redis_url),
                queue=RedisTaskMessageQueue(redis_url),
            )

        WARNING: This API is experimental and may change without notice.
        N)rD   rF   )r   r   r   r-   _register_default_task_handlers)r.   rD   rF   s      r/   enable_tasksz!ExperimentalHandlers.enable_tasksU   sV    < =%''E=,..E(uEBBB 	,,...!!r1   c                H     j         J  j         t           j        vrdfd}| j        t          <   t           j        vrd fd}| j        t          <   t           j        vrdfd
}| j        t          <   t
           j        vrdfd}| j        t
          <   dS dS )z.Register default handlers for task operations.Nreqr   r2   r   c                L  K   j                             | j        j                   d {V }|0t	          t          t          d| j        j                             t          t          |j        |j	        |j
        |j        |j        |j        |j                            S )NzTask not found: )codemessage)taskIdstatusstatusMessage	createdAtlastUpdatedAtttlpollInterval)rD   get_taskparamsrP   r	   r   r   r   r   rQ   rR   rS   rT   rU   rV   )rL   tasksupports     r/   _default_get_taskzOExperimentalHandlers._register_default_task_handlers.<locals>._default_get_task   s      $]33CJ4EFFFFFFFF<"!!/$Jsz7H$J$J     $!#{#{&*&8"&.&*&8 H%)%6  
 
 
r1   r   c                   K   j         j        }j                            | |j        |j                   d {V }t          |          S r)   )r*   request_contexthandlerhandlesession
request_idr   )rL   ctxresultr.   rZ   s      r/   _default_get_task_resultzVExperimentalHandlers._register_default_task_handlers.<locals>._default_get_task_result   sN      l2&55c3;WWWWWWWW#F+++r1   r   c                   K   | j         r| j         j        nd }j                            |           d {V \  }}t	          t          ||                    S )N)r?   
nextCursor)rX   cursorrD   
list_tasksr   r   )rL   rg   r?   next_cursorrZ   s       r/   _default_list_taskszQExperimentalHandlers._register_default_task_handlers.<locals>._default_list_tasks   sd      .1jB**d+2=+C+CF+K+K%K%K%K%K%K%K"{#O%K$X$X$XYYYr1   r   c                p   K   t          j        | j        j                   d {V }t	          |          S r)   )r
   rD   rX   rP   r   )rL   rc   rZ   s     r/   _default_cancel_taskzRExperimentalHandlers._register_default_task_handlers.<locals>._default_cancel_task   s=      *7=#*:KLLLLLLLL#F+++r1   rL   r   r2   r   rL   r   r2   r   rL   r   r2   r   rL   r   r2   r   )r-   r   r+   r   r   r   )r.   r[   rd   rj   rl   rZ   s   `    @r/   rI   z4ExperimentalHandlers._register_default_task_handlers   s/   !---$ !777     * 6GD">2 !(>>>, , , , , , ,
 =UD"#89 4#999Z Z Z Z Z Z
 8KD"#34 D$:::, , , , , , 9MD"#4555 ;:r1   ~Callable[[Callable[[ListTasksRequest], Awaitable[ListTasksResult]]], Callable[[ListTasksRequest], Awaitable[ListTasksResult]]]c                     d fd}|S )zxRegister a handler for listing tasks.

        WARNING: This API is experimental and may change without notice.
        func8Callable[[ListTasksRequest], Awaitable[ListTasksResult]]r2   c                    t                               d           t          | t                    dfd}|j        t          <   | S )Nz(Registering handler for ListTasksRequestrL   r   r2   r   c                H   K    |            d {V }t          |          S r)   r   rL   rc   wrappers     r/   r^   zCExperimentalHandlers.list_tasks.<locals>.decorator.<locals>.handler   4      &ws||++++++#F+++r1   ro   )loggerdebugr   r   r+   rs   r^   ry   r.   s     @r/   	decoratorz2ExperimentalHandlers.list_tasks.<locals>.decorator   s\     LLCDDD)$0@AAG, , , , , , 8?D"#34Kr1   )rs   rt   r2   rt    r.   r~   s   ` r/   rh   zExperimentalHandlers.list_tasks   )    	 	 	 	 	 	 r1   vCallable[[Callable[[GetTaskRequest], Awaitable[GetTaskResult]]], Callable[[GetTaskRequest], Awaitable[GetTaskResult]]]c                     d fd}|S )z~Register a handler for getting task status.

        WARNING: This API is experimental and may change without notice.
        rs   4Callable[[GetTaskRequest], Awaitable[GetTaskResult]]r2   c                    t                               d           t          | t                    dfd}|j        t          <   | S )Nz&Registering handler for GetTaskRequestrL   r   r2   r   c                H   K    |            d {V }t          |          S r)   rw   rx   s     r/   r^   zAExperimentalHandlers.get_task.<locals>.decorator.<locals>.handler   rz   r1   rm   )r{   r|   r   r   r+   r}   s     @r/   r~   z0ExperimentalHandlers.get_task.<locals>.decorator   sZ     LLABBB)$??G, , , , , , 6=D">2Kr1   )rs   r   r2   r   r   r   s   ` r/   rW   zExperimentalHandlers.get_task   s)    	 	 	 	 	 	 r1   Callable[[Callable[[GetTaskPayloadRequest], Awaitable[GetTaskPayloadResult]]], Callable[[GetTaskPayloadRequest], Awaitable[GetTaskPayloadResult]]]c                     d fd}|S )zRegister a handler for getting task results/payload.

        WARNING: This API is experimental and may change without notice.
        rs   BCallable[[GetTaskPayloadRequest], Awaitable[GetTaskPayloadResult]]r2   c                    t                               d           t          | t                    dfd}|j        t          <   | S )Nz-Registering handler for GetTaskPayloadRequestrL   r   r2   r   c                H   K    |            d {V }t          |          S r)   rw   rx   s     r/   r^   zHExperimentalHandlers.get_task_result.<locals>.decorator.<locals>.handler   rz   r1   rn   )r{   r|   r   r   r+   r}   s     @r/   r~   z7ExperimentalHandlers.get_task_result.<locals>.decorator   s]     LLHIII)$0EFFG, , , , , , =DD"#89Kr1   )rs   r   r2   r   r   r   s   ` r/   get_task_resultz$ExperimentalHandlers.get_task_result   r   r1   Callable[[Callable[[CancelTaskRequest], Awaitable[CancelTaskResult]]], Callable[[CancelTaskRequest], Awaitable[CancelTaskResult]]]c                     d fd}|S )z{Register a handler for cancelling tasks.

        WARNING: This API is experimental and may change without notice.
        rs   :Callable[[CancelTaskRequest], Awaitable[CancelTaskResult]]r2   c                    t                               d           t          | t                    dfd}|j        t          <   | S )Nz)Registering handler for CancelTaskRequestrL   r   r2   r   c                H   K    |            d {V }t          |          S r)   rw   rx   s     r/   r^   zDExperimentalHandlers.cancel_task.<locals>.decorator.<locals>.handler  rz   r1   rp   )r{   r|   r   r   r+   r}   s     @r/   r~   z3ExperimentalHandlers.cancel_task.<locals>.decorator  s]     LLDEEE)$0ABBG, , , , , , 9@D"#45Kr1   )rs   r   r2   r   r   r   s   ` r/   r
   z ExperimentalHandlers.cancel_task  r   r1   )r#   r    r$   r%   r&   r'   )r2   r3   )r6   r   r2   r7   )NN)rD   rE   rF   rG   r2   r   )r2   r7   )r2   rq   )r2   r   )r2   r   )r2   r   )__name__
__module____qualname____doc__r0   propertyr5   rC   rJ   rI   rh   rW   r   r
   r   r1   r/   r"   r"   -   s         
	6 	6 	6 	6 " " " X"
 
 
 
( #')-(" (" (" (" ("T:M :M :M :Mx   4   2   4     r1   r"   )0r   
__future__r   loggingcollections.abcr   r   typingr   $mcp.server.experimental.task_supportr   #mcp.server.lowlevel.func_inspectionr   mcp.shared.exceptionsr	   %mcp.shared.experimental.tasks.helpersr
   2mcp.shared.experimental.tasks.in_memory_task_storer   +mcp.shared.experimental.tasks.message_queuer   r   #mcp.shared.experimental.tasks.storer   	mcp.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   mcp.server.lowlevel.serverr    	getLoggerr   r{   r"   r   r1   r/   <module>r      s   
 # " " " " "  / / / / / / / /             < < < < < < C C C C C C * * * * * * = = = = = = P P P P P P b b b b b b b b 9 9 9 9 9 9                                     (  2111111		8	$	$s s s s s s s s s sr1   