
    Ki>0                       U d Z ddlmZ ddlmZmZmZ ddlmZmZ ddl	Z
ddlmZ ddlmZ ddl	mZmZmZmZmZmZ dd	lmZmZmZ dd
lmZ erddlmZ ej:                  dej<                  dej>                  dej@                  dejB                  dejD                  diZ#de$d<   ddZ%ddZ&	 	 	 	 	 	 ddZ'	 	 	 	 	 	 ddZ(y)zSEP-1686 task protocol handlers.

Implements MCP task protocol methods: tasks/get, tasks/result, tasks/list, tasks/cancel, tasks/delete.
    )annotations)datetime	timedeltatimezone)TYPE_CHECKINGAnyN)ExecutionState)McpError)INTERNAL_ERRORINVALID_PARAMSCancelTaskResult	ErrorDataGetTaskResultListTasksResult)convert_prompt_resultconvert_resource_resultconvert_tool_result)parse_task_key)FastMCPworking	completedfailed	cancelledzdict[ExecutionState, str]DOCKET_TO_MCP_STATEc           
       K   ddl }|j                  j                  j                  |       4 d{   }|j	                  d      }|st        t        t        d            |j                  }| j                  }|t        t        t        d            |j                  d| d	|       }|j                  d| d	| d
      }|j                         4 d{   }	|	j	                  |       d{   }
|	j	                  |       d{   }ddd      d{    
dn|
j                  d      }dn|j                  d      }|t        t        t        d| d            |j                  |       d{   }|t        t        t        d| d            |j                          d{    t         j	                  |j"                  d      }d}d}|j"                  t$        j&                  k(  r&	 |j)                  t+        d             d{    n8|j0                  r,|j0                  j2                  r|j0                  j2                  }t5        |||t7        j8                  t:        j<                        dd|      cddd      d{    S 7 n7 7 7 7 # 1 d{  7  sw Y   xY w7 E7 7 # t,        $ r}t/        |      }d| }Y d}~d}~ww xY w7 X# 1 d{  7  sw Y   yxY ww)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
    r   NfastmcptaskId"Missing required parameter: taskIdcodemessageBackground tasks require Docketfastmcp:task:::created_atutf-8zTask 
 not foundz execution not foundr   secondstimeoutzTask failed: `    r   status	createdAtlastUpdatedAtttlpollIntervalstatusMessage)fastmcp.server.contextservercontextContextgetr
   r   r   
session_id_docketr   keyredisdecodeget_executionsyncr   stater	   FAILED
get_resultr   	Exceptionstrprogressr"   r   r   nowr   utc)r7   paramsr   ctxclient_task_idr;   dockettask_meta_keycreated_at_keyr>   task_key_bytescreated_at_bytestask_key
created_at	execution	mcp_stateerror_messagestatus_messageerrors                      i/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fastmcp/server/tasks/protocol.pytasks_get_handlerrZ   -   s     "~~%%--f-= T
 T
H-'1U  ^^
 >'=  

]:,a?O#PQJ<q(8D
 <<> 	? 	?U#(99]#;;N%*YY~%>>	? 	? *14~7L7LW7U$,D2B2I2I'2R 	 '58H
1S  !..x88	'#N#33GH  nn (++IOOXF	
 ??n333A**9Q3G*HHH I$6$6$>$>&//77N! ",,x||4(
YT
 T
 T
6	?;>	? 	? 	? 	?" 9 	 I A #E
#0!@AKT
 T
 T
 T
s  /L	JL	B%K4J"K4J.3J%4J.J(J.K4J+A"K4?K 7K47K8AK4>KK
K"A+K4L	K2L	"K4%J.(J.+K4.K	4J75K	<	K4K4
K	K/K*%K4*K//K42L	4L:K=;LL	c           
       K   ddl }|j                  j                  j                  |       4 d{   }|j	                  d      }|st        t        t        d            |j                  }| j                  }|t        t        t        d            |j                  d| d	|       }|j                         4 d{   }|j	                  |       d{   }	ddd      d{    	dn|	j                  d
      }
|
t        t        t        d| d            |j                  |
       d{   }|t        t        t        d| d            |j                          d{    |j                   t"        j$                  t"        j&                  fvr>t(        j	                  |j                   d      }t        t        t        d| d            	 |j+                  t-        d             d{   }t;        |
      }|d   }|dk(  r*t=        | ||d   |       d{   cddd      d{    S |dk(  r*t?        | ||d   |       d{   cddd      d{    S |dk(  r*tA        | ||d   |       d{   cddd      d{    S t        t        t        d|             7 7  7 7 # 1 d{  7  sw Y   xY w7 7 s7 # t.        $ rk}t0        j2                  j5                  t0        j2                  j7                  dt9        |            gddd|ii      cY d}~cddd      d{  7   S d}~ww xY w7 27 %7 	7 7 7 # 1 d{  7  sw Y   yxY ww)a6  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)
    r   Nr   r   r   r    r#   r$   r%   r'   Invalid taskId: r(   r   z'Task not completed yet (current state: )r)   r+   text)typer^   Tz$modelcontextprotocol.io/related-task)contentisError_meta	task_typetoolcomponent_identifierpromptresourcez#Internal error: Unknown task type: )!r6   r7   r8   r9   r:   r
   r   r   r;   r<   r   r=   r>   r?   r@   rA   rB   r	   	COMPLETEDrC   r   rD   r   rE   mcptypesCallToolResultTextContentrF   r   r   r   r   )r7   rJ   r   rK   rL   r;   rM   rN   r>   rP   rR   rT   rU   	raw_valuerX   	key_partsrc   s                    rY   tasks_result_handlerro      s     "~~%%--f-= a aH-'1U  ^^
 >'=  

]:,a?O#PQ<<> 	< 	<U#(99]#;;N	< 	< *14~7L7LW7U'.~.>jI  !..x88	'.~.>jI  nn ??>#;#;^=R=R"SS+//	JI'Ei[PQR 	'229Q;O2PPI #8,	k*	 ,	9-C#Dn aa a af (".	9-C#Dn ia a an *$0	9-C#Dn qa a ax 'A)M ya0	<;	< 	< 	< 	< 9 	 Q 
	99++..FU.LM: .= ,  Aa a a|
	$aahiapqa a a as  /NJ?NBM/KM/KKK M/+K,AM/9K!:7M/1K$2A.M/!K) K'K))M/.M /M/2N>M#?NM/M&M/!N-M).N3M/M+M/NM-N"M/?NM/KM/K	KK		M/$M/'K))	M2AM MM/NMNMM/#N&M/)N+M/-N/N5M86N=Nc                $   K   t        g d      S w)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   )r7   rJ   s     rY   tasks_list_handlerrs     s      55s   c           
       K   ddl }|j                  j                  j                  |       4 d{   }|j	                  d      }|st        t        t        d            |j                  }| j                  }|t        t        t        d            |j                  d| d	|       }|j                  d| d	| d
      }|j                         4 d{   }	|	j	                  |       d{   }
|	j	                  |       d{   }ddd      d{    
dn|
j                  d      }dn|j                  d      }|t        t        t        d| d            |j                  |       d{   }|t        t        t        d| d            |j                  |       d{    t!        |d|xs1 t#        j$                  t&        j(                        j+                         t#        j$                  t&        j(                        ddd      cddd      d{    S 7 7 ]7 G7 17 $# 1 d{  7  sw Y   5xY w7 7 7 .# 1 d{  7  sw Y   yxY ww)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
    r   Nr   r   r   r    r#   r$   r%   r&   r'   r\   r(   r   r-   r.   zTask cancelledr/   )r6   r7   r8   r9   r:   r
   r   r   r;   r<   r   r=   r>   r?   r@   cancelr   r   rH   r   rI   	isoformat)r7   rJ   r   rK   rL   r;   rM   rN   rO   r>   rP   rQ   rR   rS   rT   s                  rY   tasks_cancel_handlerrw     sq     "~~%%--f-= C
 C
H-'1U  ^^
>'=  

]:,a?O#PQJ<q(8D
 <<> 	? 	?U#(99]#;;N%*YY~%>>	? 	? *14~7L7LW7U$,D2B2I2I'2R 	 '.~.>jI  !..x88	'.~.>jI  mmH%%%
  ! JHLL$>$H$H$J",,x||4*
wC
 C
 C
4	?;>	? 	? 	? 	?$ 9 	&mC
 C
 C
 C
s   /I4H4I4B%IH7II3H:4IH=III A"I?I 8I8I9A)I"I4.I/I47I:I=I II		I
I		III4I1%I(&I1-I4)r7   r   rJ   dict[str, Any]returnr   )r7   r   rJ   rx   ry   r   )r7   r   rJ   rx   ry   r   )r7   r   rJ   rx   ry   r   ))__doc__
__future__r   r   r   r   typingr   r   	mcp.typesri   docket.executionr	   mcp.shared.exceptionsr
   r   r   r   r   r   r   fastmcp.server.tasks.convertersr   r   r   fastmcp.server.tasks.keysr   fastmcp.server.serverr   	SCHEDULEDQUEUEDRUNNINGrh   rC   	CANCELLEDr   __annotations__rZ   ro   rs   rw        rY   <module>r      s   
 # 2 2 %  + *  
 5-
 i9Ik8k2 . `
Fod66+66$S
S
+S
S
r   