+
    Q(ioD                      a  0 t $ R t^ RIHt ^ RIHtHtHt ^ RIHtH	t	H
t
 ^ RIt^ RIHt ^ RIHt ^ RIHtHtHtHtHtHt ^ RIt^ RIHt ^ R	IHt ^ R
IHt ^ RIH t  ^ RI!H"t"H#t# ^ RI$H%t% ^ RI&H't' ^ RI(H)t) ]'       d   ^ RI*H+t+ ]PX                  R]PZ                  R]P\                  R]P^                  R]P`                  R]Pb                  R/t2R]3R&   R R lt4R R lt5R R lt6R R lt7R R  lt8R! R" lt9R# )#a7  SEP-1686 task request handlers.

Handles MCP task protocol requests: tasks/get, tasks/result, tasks/list, tasks/cancel.
These handlers query and manage existing tasks (contrast with handlers.py which creates tasks).

This module requires fastmcp[tasks] (pydocket). It is only imported when docket is available.
)annotations)datetime	timedeltatimezone)TYPE_CHECKINGAnyLiteralN)ExecutionState)McpError)INTERNAL_ERRORINVALID_PARAMSCancelTaskResult	ErrorDataGetTaskResultListTasksResult)NotFoundError)Prompt)Resource)ResourceTemplate)DEFAULT_POLL_INTERVAL_MSDEFAULT_TTL_MS)parse_task_key)Tool)VersionSpec)FastMCPworking	completedfailed	cancelledzdict[ExecutionState, str]DOCKET_TO_MCP_STATEc                    V ^8  d   QhRRRR/# )   
key_suffixstrreturnztuple[str, str | None] )formats   "c/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/fastmcp/server/tasks/requests.py__annotate__r(   4   s     5 53 5+A 5    c                \    RV 9  d   V R3# V P                  R^4      w  rY'       d   V3# R3# )u  Parse a key suffix into (name_or_uri, version).

Keys always contain @ as a version delimiter (sentinel pattern):
- "add@1.0" → ("add", "1.0")  # versioned
- "add@" → ("add", None)      # unversioned
- "user@example.com@1.0" → ("user@example.com", "1.0")  # @ in URI

Uses rsplit to split on the LAST @ which is always the version delimiter.
Falls back to treating the whole string as the name if @ is not present
(for backwards compatibility with legacy task keys).
@N)rsplit)r"   name_or_uriversions   &  r'   _parse_key_versionr/   4   sA     *4%,,S!4K74444r)   c               (    V ^8  d   QhRRRRRRRR/# )r!   docketr   
session_idr#   client_task_idr$   ztuple[Any, str | None, int]r%   )r&   s   "r'   r(   r(   G   s0     ?3 ?3?3?3 ?3 !	?3r)   c                F  "   V P                  RV RV 24      pV P                  RV RV R24      pV P                  RV RV R24      pV P                  4       ;_uu_4       GRj  xL
 pVP                  W4V4      G Rj  xL
 w  rxp	RRR4      GRj  xL
  X'       d   VP                  R4      MRp
V
'       g   \	        \        \        RV R2R	7      4      hV P                  V
4      G Rj  xL
 pV'       g   \	        \        \        RV R
2R	7      4      hX'       d   VP                  R4      MRp X	'       d   \        V	P                  R4      4      M\        pWV3#  L L L  + GRj  xL 
 '       g   i     L; i L  \        \        3 d
    \        p LAi ; i5i)a  Look up task execution and metadata from Redis.

Consolidates the common pattern of fetching task metadata from Redis,
validating it exists, and retrieving the Docket execution.

Args:
    docket: Docket instance
    session_id: Session ID
    client_task_id: Client-provided task ID

Returns:
    Tuple of (execution, created_at, poll_interval_ms)

Raises:
    McpError: If task not found or execution not found
fastmcp:task::z:created_atz:poll_intervalNutf-8zTask 
 not foundcodemessagez execution not found)keyredismgetdecoder
   r   r   get_executionintr   
ValueErrorUnicodeDecodeError)r1   r2   r3   task_meta_keycreated_at_keypoll_interval_keyr=   task_key_bytescreated_at_bytespoll_interval_bytestask_key	execution
created_atpoll_interval_mss   &&&           r'   _lookup_task_executionrN   G   s    * JJzl!N;KLMMZZ

|1^$4K@N 



|1^$4NC
 ||~~~FKjj+<G
 A
=*= ~ 2@~$$W-TH>U>:J*3UV
 	

 **844I#//CD
 	
 6F!((14J4 # #**734) 	 "222C A
 ~~~ 5" *+ 434s   A$F!&E 'F!*E& E"E&F!E$F! F!;2F!-F.F!:%F! F!4F < F F!"E&$F!&E?	,E/-
E?	8E?	:	F!FF!FF!c               $    V ^8  d   QhRRRRRR/# )r!   serverr   paramsdict[str, Any]r$   r   r%   )r&   s   "r'   r(   r(      s&     R
 R
G R
^ R
 R
r)   c                d  "   \         P                  P                  P                  V R7      ;_uu_4       GRj  xL
 pVP	                  R4      pV'       g   \        \        \        RR7      4      hVP                  pV P                  pVf   \        \        \        RR7      4      h\        WTV4      G Rj  xL
 w  rgpVP                  4       G Rj  xL
  \        p	V	P	                  VP                  R4      p
RpRpVP                  \        P                   8X  d'    VP#                  \%        ^ R7      R	7      G Rj  xL
  MDVP*                  '       d3   VP*                  P,                  '       d   VP*                  P,                  pV'       d)    \.        P0                  ! VP3                  RR4      4      pM$\.        P8                  ! \:        P<                  4      p\?        VV
V\.        P8                  ! \:        P<                  4      \@        VVR7      uuRRR4      GRj  xL
  #  EL ELp ELX L  \&         d   p\)        T4      pR
T 2p Rp?LRp?ii ; i  \4        \6        3 d(    \.        P8                  ! \:        P<                  4      p Li ; i Ls  + GRj  xL 
 '       g   i     R# ; i5i)zHandle MCP 'tasks/get' request (SEP-1686).

Args:
    server: FastMCP server instance
    params: Request params containing taskId

Returns:
    GetTaskResult: Task status response with spec-compliant fields
fastmcpNtaskId"Missing required parameter: taskIdr9   Background tasks require Docketr   secondstimeoutzTask failed: Zz+00:00rV   status	createdAtlastUpdatedAtttlpollIntervalstatusMessage)!rU   rP   contextContextgetr
   r   r   r2   _docketr   rN   syncr   stater	   FAILED
get_resultr   	Exceptionr#   progressr;   r   fromisoformatreplacerB   AttributeErrornowr   utcr   r   )rP   rQ   ctxr3   r2   r1   rK   rL   rM   	state_map	mcp_stateerror_messagestatus_messageerrorcreated_at_dts   &&             r'   tasks_get_handlerr{      s,     ~~%%--f-===H-'1U  ^^
 >'=  9O9
 3
/	/
 nn (	 MM)//84 	 ??n333A**9Q3G*HHH I$6$6$>$>$>&//77N ; ( 6 6&&sH5! %LL6M!#",,x||4)(
A >==.3

 	  I A #E
#0!@A / ; (X\\ :;w >===s   7J0H#J0A9J6H&7JH)A	JH.;H,<H. JJ/J&I4AJJ0JJ0&J)J,H..I9I	JIJ5JJJJJ0J-	J
J-	%J-	'	J0c               $    V ^8  d   QhRRRRRR/# )r!   rP   r   rQ   rR   r$   r   r%   )r&   s   "r'   r(   r(      s&     m mw m m3 mr)   c                  "   \         P                  P                  P                  V R7      ;_uu_4       GRj  xL
 pVP	                  R4      pV'       g   \        \        \        RR7      4      hVP                  pV P                  pVf   \        \        \        RR7      4      hVP                  RV RV 24      pVP                  4       ;_uu_4       GRj  xL
 pVP	                  V4      G Rj  xL
 pRRR4      GRj  xL
  Xf   RMVP                  R	4      p	V	f   \        \        \        R
V R2R7      4      hVP                  V	4      G Rj  xL
 p
V
f   \        \        \        R
V R2R7      4      hV
P                  4       G Rj  xL
  \         pV
P"                  \$        P&                  \$        P(                  39  d;   VP	                  V
P"                  R4      p\        \        \        RV R2R7      4      h V
P+                  \-        ^ R7      R7      G Rj  xL
 p\;        T	4      pTR,          pRp TP=                  R4      '       dH   \?        TR,          4      w  ppT'       d   \A        TR7      MRpT PC                  TT4      G Rj  xL
 pEMTP=                  R4      '       dG   \?        TR,          4      w  ppT'       d   \A        TR7      MRpT PE                  TT4      G Rj  xL
 pMTP=                  R4      '       dG   \?        TR,          4      w  ppT'       d   \A        TR7      MRpT PG                  TT4      G Rj  xL
 pM\TP=                  R4      '       dF   \?        TR,          4      w  ppT'       d   \A        TR7      MRpT PI                  TT4      G Rj  xL
 pTf   \        \        \        RT 2R7      4      hRRT//p\M        T\N        4      '       d   TPQ                  T4      pTPS                  4       p\M        T\0        P2                  P4                  4      '       d	   TTn*        M_\M        T\V        4      '       d)   Tw  pp\0        P2                  P5                  TTTR 7      pM!\0        P2                  P5                  TTR!7      pTuuRRR4      GRj  xL
  # \M        T\X        4      '       d=   TPQ                  T4      pTP[                  4       pTTn*        TuuRRR4      GRj  xL
  # \M        T\\        4      '       dH   TPQ                  T4      pTPS                  TP^                  4      pTTn*        TuuRRR4      GRj  xL
  # \M        T\`        4      '       dQ   TPQ                  T4      pTPS                  \9        TPb                  4      4      pTTn*        TuuRRR4      GRj  xL
  # \        \        \        R"\e        T4      Pf                   2R7      4      h EL EL$ EL EL  + GRj  xL 
 '       g   i     EL; i EL EL EL  \.         dm   p\0        P2                  P5                  \0        P2                  P7                  R\9        T4      R7      .RRRT//R7      u Rp?uuRRR4      GRj  xL 
  # Rp?ii ; i EL EL EL\ EL  \J         d    Rp ELi ; i EL EL ELn EL  + GRj  xL 
 '       g   i     R# ; i5i)#a  Handle MCP 'tasks/result' request (SEP-1686).

Converts raw task return values to MCP types based on task type.

Args:
    server: FastMCP server instance
    params: Request params containing taskId

Returns:
    MCP result (CallToolResult, GetPromptResult, or ReadResourceResult)
rT   NrV   rW   r9   rX   r5   r6   r7   zInvalid taskId: r8   r   z'Task not completed yet (current state: )rY   r[   text)typer   Tz$io.modelcontextprotocol/related-task)contentisError_metacomponent_identifierztool::   NN)eqz	resource::	   NNz	template:zprompt::   NNzComponent not found for task: )r   structuredContentr   )r   r   z(Internal error: Unknown component type: )4rU   rP   re   rf   rg   r
   r   r   r2   rh   r   r<   r=   r?   r@   ri   r   rj   r	   	COMPLETEDrk   rl   r   rm   mcptypesCallToolResultTextContentr#   r   
startswithr/   r   get_toolget_resourceget_resource_template
get_promptr   
isinstancer   convert_resultto_mcp_resultr   tupler   to_mcp_prompt_resultr   uri_templater   urir   __name__)rP   rQ   rt   r3   r2   r1   rD   r=   rG   rJ   rK   ru   rv   	raw_valuery   	key_partscomponent_key	componentnameversion_strr.   r   related_task_metafastmcp_result
mcp_resultr   structured_contents   &&                         r'   tasks_result_handlerr      s     ~~%%--f-===H-'1U  ^^
 >'=  

]:,a?O#PQ<<>>>U#(99]#;;N "> *14~7L7LW7U'.~.>jI  !..x88	'.~.>jI  nn (	??>#;#;^=R=R"SS!ioox@I'Ei[PQR 	'229Q;O2PPI #8,	!"89 IM		''00$6}R7H$I!k9D+5$"(//$"@@	))+66#5mB6G#H [9D+5$"("5"5c7"CC	))+66#5mB6G#H [9D+5$"(">">sG"LL	)))44$6}R7H$I!k9D+5$"("3"3D'"BB	 '<]OL  3.5
 i&&&55i@N'557J*cii&>&>??#4
 J...8++ YY55#&8+ 6 
 !YY55&+ 6 
 O >==R 	6**&55i@N'<<>J0J[ >==^ 	#344&55i@N'55i6L6LMJ0Jg >==j 	8,,&55i@N'55c)--6HIJ0Js >==x 'FtIG_G_F`a y >0 "; ">>> 9 	 Q 
	99++..FU.LM: .= ,  C >==~
	, A D M C 	I	E >====s/  7[0W;[0B[W>[X	3X4X	8[XA[X$9[X'A3[X-#X*$X-([?AZ3Z'Z3[Z34A Z34Z*5Z39[:Z3A Z3Z-Z3[Z3.A Z3.Z0/Z33C0[#[00[1[06?[5[0[
[0A
[[0[ [0%A[8[0[[00[;[0>[X	[X!X
X!X!
['[*X--Z$8AZZ$[[0Z[0Z$$['Z3*Z3-Z30Z33[ [[[[0
[0[0[0[-	[
[-	%[-	'	[0c               $    V ^8  d   QhRRRRRR/# )r!   rP   r   rQ   rR   r$   r   r%   )r&   s   "r'   r(   r(     s$     6 66+66r)   c                $   "   \        . RR7      # 5i)a  Handle MCP 'tasks/list' request (SEP-1686).

Note: With client-side tracking, this returns minimal info.

Args:
    server: FastMCP server instance
    params: Request params (cursor, limit)

Returns:
    ListTasksResult: Response with tasks list and pagination
N)tasks
nextCursor)r   )rP   rQ   s   &&r'   tasks_list_handlerr     s      55s   c               $    V ^8  d   QhRRRRRR/# )r!   rP   r   rQ   rR   r$   r   r%   )r&   s   "r'   r(   r(     s$     :
 :
:
+:
:
r)   c                &  "   \         P                  P                  P                  V R7      ;_uu_4       GRj  xL
 pVP	                  R4      pV'       g   \        \        \        RR7      4      hVP                  pV P                  pVf   \        \        \        RR7      4      h\        WTV4      G Rj  xL
 w  rgpVP                  VP                  4      G Rj  xL
  \        TRV'       d   \        P                   ! V4      M#\        P"                  ! \$        P&                  4      \        P"                  ! \$        P&                  4      \(        VRR	7      uuRRR4      GRj  xL
  #  EL2 L L L  + GRj  xL 
 '       g   i     R# ; i5i)
a  Handle MCP 'tasks/cancel' request (SEP-1686).

Cancels a running task, transitioning it to cancelled state.

Args:
    server: FastMCP server instance
    params: Request params containing taskId

Returns:
    CancelTaskResult: Task status response showing cancelled state
rT   NrV   rW   r9   rX   r   zTask cancelledr^   )rU   rP   re   rf   rg   r
   r   r   r2   rh   r   rN   cancelr<   r   r   ro   rr   r   rs   r   )	rP   rQ   rt   r3   r2   r1   rK   rL   rM   s	   &&       r'   tasks_cancel_handlerr     s1     ~~%%--f-===H-'1U  ^^
 >'=  9O9
 3
/	/ mmIMM***
  ! ,,Z8hll+",,x||4)*

E >==.3
 	+; >===sp   7FE+FA9E46E.7%E4E0A;E4F%E2&F.E40E42F4F	:E=;
F	F		F):__conditional_annotations____doc__
__future__r   r   r   r   typingr   r   r   	mcp.typesr   docket.executionr	   mcp.shared.exceptionsr
   r   r   r   r   r   r   fastmcp.server.contextrU   fastmcp.exceptionsr   fastmcp.prompts.promptr   fastmcp.resources.resourcer   fastmcp.resources.templater   fastmcp.server.tasks.configr   r   fastmcp.server.tasks.keysr   fastmcp.tools.toolr   fastmcp.utilities.versionsr   fastmcp.server.serverr   	SCHEDULEDQUEUEDRUNNINGr   rk   	CANCELLEDr   __annotations__r/   rN   r{   r   r   r   )r   s   @r'   <module>r      s    # 2 2 . .  + *   , ) / 7 P 4 # 2- i9Ik8k2 . 5&?3DR
jm`6$:
r)   