
    kKj&                    ,   d Z ddlmZ ddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlZddlmZ ddlmZ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 ddlmZmZ ddlm Z  e	rddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  e e)      Z*dZ+	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ,y)zrSEP-1686 task execution handlers.

Handles queuing tool/prompt/resource executions to Docket as background tasks.
    )annotationsN)suppress)datetimetimezone)TYPE_CHECKINGAnyLiteral)McpError)INTERNAL_ERROR	ErrorData)_current_docketget_context)TaskMeta)TaskContextSnapshotget_task_scoperegister_task_serverregister_task_session)build_task_keytask_redis_prefix)
get_logger)Prompt)Resource)ResourceTemplate)Tooli  c                d
  K   ||j                  |      }t        t        j                               }t	        j
                  t        j                        }t               }t               }	 |j                  |j                  j                  xs t        j                         }	|	t!        t#        t$        d            t'        ||j                         t)        ||| |      }
||j*                  |j*                  }n&t-        |	j.                  j1                         dz        }t-        |dz        t2        z   }t5        |      }|	j7                  | d|       }|	j7                  | d| d      }|	j7                  | d| d      }t-        |j8                  j:                  j1                         dz        }t=        j>                         }|	jA                         4 d{   }|jC                  ||
|       d{    |jC                  ||jE                         |       d{    |jC                  |t        |      |       d{    ddd      d{    |jG                  |	|||       d{    tI        |jJ                         tL        jN                  jP                  jS                  d	|d
d||||ddd|iid      }tL        jN                  jU                  |      }tW        tX              5  |jJ                  j[                  |       d{    ddd       | dk(  r|j]                  |	||
       d{    n|j]                  |	|||
       d{    ddl/m0} tc        |jJ                  d      r8|jJ                  jd                  }|r |jg                  |||
|jJ                  |	|       ddl4m5}m6 	  ||jJ                  |	|j                         d{    tc        |jJ                  d      rj|jJ                  jn                  Ttq        |jJ                  dd      s=dfd}|jJ                  jn                  js                  |       d|jJ                  _:        tL        jN                  j{                  tL        jN                  j}                  |d
||||            S # t        $ r dY Fw xY w7 7 7 7 7 r# 1 d{  7  sw Y   xY w7 o7 # 1 sw Y   xY w7 7 7 # tX        $ r }tv        jy                  d|       Y d}~d}~ww xY ww)ae  Submit any component to Docket for background execution (SEP-1686).

    Unified handler for all component types. Called by component's internal
    methods (_run, _read, _render) when task metadata is present and mode allows.

    Queues the component's method to Docket, stores raw return values,
    and converts to MCP types on retrieval.

    Args:
        task_type: Component type for task key construction
        key: The component key as seen by MCP layer (with namespace prefix)
        component: The component instance (Tool, Resource, ResourceTemplate, Prompt)
        arguments: Arguments/params (None for Resource which has no args)
        task_meta: Task execution metadata. If task_meta.ttl is provided, it
            overrides the server default (docket.execution_ttl).

    Returns:
        CreateTaskResult: Task stub with proper Task object
    Nz9Background tasks require a running FastMCP server context)codemessagei  :z:created_atz:poll_interval)exznotifications/tasks/statusworkingzTask submitted)taskIdstatusstatusMessage	createdAtlastUpdatedAtttlpollIntervalz$io.modelcontextprotocol/related-taskr!   )methodparams_metaresource)fn_keytask_keyr   )subscribe_to_task_updates_subscription_task_group)ensure_subscriber_runningstop_subscriber_exit_stack _notification_cleanup_registeredFc                 2   K            d {    y 7 w)N )
session_idr1   s   n/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/server/tasks/handlers.py_cleanup_subscriberz-submit_to_docket.<locals>._cleanup_subscriber   s     )*555s   Tz+Failed to start notification subscriber: %s)r!   r"   r$   r%   r&   r'   )task)returnNone)?coerce_task_argumentsstruuiduuid4r   nowr   utcr   r   r6   RuntimeErrorfastmcp_docketr   getr
   r   r   r   r   r&   intexecution_ttltotal_secondsTASK_MAPPING_TTL_BUFFER_SECONDSr   keytask_configpoll_intervalr   captureredisset	isoformatsaver   sessionmcptypesTaskStatusNotificationmodel_validateServerNotificationr   	Exceptionsend_notificationadd_to_docket"fastmcp.server.tasks.subscriptionsr.   hasattrr/   
start_soon"fastmcp.server.tasks.notificationsr0   r1   r2   getattrpush_async_callbackr3   loggerdebugCreateTaskResultTask)	task_typerJ   	component	arguments	task_metaserver_task_id
created_atctx
task_scopedocketr-   ttl_msttl_secondsprefixtask_meta_keycreated_at_keypoll_interval_keypoll_interval_mssnapshotrN   notificationserver_notificationr.   tgr0   r8   er6   r1   s                              @@r7   submit_to_docketrz   +   s    < 33I>	 &N hll+J
-C  !J^^
 [[  9O$7$7$9F~#S
 	
 5 j.)SIH !:V))779D@Aftm$'FFK z*FJJ&>*:;<MZZ6(!N+;; GHN

fXQ~.>n#MN900>>LLNQUUV #**,H||~~iixKi@@@ii
(<(<(>;iOOOii)3/?+@[iQQQ ~
 --
NK
HHH
 j#++6 9933BB2(#!1'!+ 0 7n9	
L& ))66|D	)	kk++,?@@@ 
 J%%fS8%LLL%%fih%WWW
 Ms{{67[[11MM) 
 	K+CKK   ]3KK++7-OQVW6 '';;<OP?C< 99%%YY^^! $)  
 & 	 	U  
R @OQ ~~~
 I@ 	A 
	 	MW6"  	KLLFJJ	Ks7  A(T0-R1 9E)T0"S#T0&S>S?)S(S	)$SSST0ST09S(:BT0=S.S+S.!$T0S;T0#S>$A"T0"T )T*BT .AT01S <T0?S  T0S	SST0S%SS% 	T0+S..S83	T0>T0T 	T-T(#T0(T--T0)NN)re   z1Literal['tool', 'resource', 'template', 'prompt']rJ   r=   rf   z+Tool | Resource | ResourceTemplate | Promptrg   zdict[str, Any] | Nonerh   zTaskMeta | Noner:   zmcp.types.CreateTaskResult)-__doc__
__future__r   r>   
contextlibr   r   r   typingr   r   r	   	mcp.typesrS   mcp.shared.exceptionsr
   r   r   fastmcp.server.dependenciesr   r   fastmcp.server.tasks.configr   fastmcp.server.tasks.contextr   r   r   r   fastmcp.server.tasks.keysr   r   fastmcp.utilities.loggingr   fastmcp.prompts.baser   fastmcp.resources.baser   fastmcp.resources.templater   fastmcp.tools.baser   __name__ra   rI   rz   r5       r7   <module>r      s   
 #   ' . .  * / 1  H 0+/;'	H	 #*  (,!%C@C	C ;C %	C
 C  Cr   