
    "<i/                    .   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j!        dej"        diZ#de$d<   ddZ%d dZ&d!dZ'd"dZ(dS )#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_STATEserverr   paramsdict[str, Any]returnr   c           
       K   ddl }|j        j                            |           4 d{V }|                    d          }|s#t          t          t          d                    |j        }| j	        }|#t          t          t          d                    d| d	| }d| d	| d
}|                                4 d{V }	|	                    |           d{V }
|	                    |           d{V }ddd          d{V  n# 1 d{V swxY w Y   |
dn|
                    d          }|dn|                    d          }|'t          t          t          d| d                    |                    |           d{V }|'t          t          t          d| d                    |                                 d{V  t                              |j        d          }d}d}|j        t"          j        k    rW	 |                    t)          d                     d{V  nJ# t*          $ r}t-          |          }d| }Y d}~n'd}~ww xY w|j        r|j        j        r|j        j        }t3          |||t5          j        t8          j                  dd|          cddd          d{V  S # 1 d{V swxY w Y   dS )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.contextr   contextContextgetr
   r   r   
session_id_docketr   redisdecodeget_executionsyncr   stater	   FAILED
get_resultr   	Exceptionstrprogressr&   r   r   nowr   utc)r   r   r!   ctxclient_task_idr>   docket	redis_keycreated_at_keyr@   task_key_bytescreated_at_bytestask_key
created_at	execution	mcp_stateerror_messagestatus_messageerrors                      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/tasks/protocol.pytasks_get_handlerr[   -   s      "!!!~%--f-== R
 R
 R
 R
 R
 R
 R
H-- 	'1U     ^
 >'=     BJAAAA	QQQnQQQ<<>> 	? 	? 	? 	? 	? 	? 	?U#(99Y#7#7777777N%*YY~%>%>>>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? *144~7L7LW7U7U$,DD2B2I2I'2R2R 	 '1S1S1S1S     !..x88888888	'HNHHH     nn (++IOXFF	
 ?n333A**9Q3G3G3G*HHHHHHHHHH A A A #E

!@!@!@A  	8I$6$> 	8&/7N! ",x|44(
 
 
UR
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
 R
sb   BK7D=K
D	KD	C5K*H>=K>
I&I!K!I&&AK
KKr   c           
     8  K   ddl }|j        j                            |           4 d{V }|                    d          }|s#t          t          t          d                    |j        }| j	        }|#t          t          t          d                    d| d	| }|                                4 d{V }|                    |           d{V }	ddd          d{V  n# 1 d{V swxY w Y   |	dn|	                    d
          }
|
't          t          t          d| d                    |                    |
           d{V }|'t          t          t          d| d                    |                                 d{V  |j        t           j        t           j        fvrGt&                              |j        d          }t          t          t          d| d                    	 |                    t+          d                     d{V }n|# t,          $ ro}t.          j                            t.          j                            dt7          |                    gddd|ii          cY d}~cddd          d{V  S d}~ww xY wt9          |
          }|d         }|dk    r0t;          | ||d         |           d{V cddd          d{V  S |dk    r0t=          | ||d         |           d{V cddd          d{V  S |dk    r0t?          | ||d         |           d{V cddd          d{V  S t          t          t          d|                     # 1 d{V swxY w Y   dS )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: ) r:   r   r;   r<   r=   r
   r   r   r>   r?   r   r@   rA   rB   rC   rD   r	   	COMPLETEDrE   r   rF   r   rG   mcptypesCallToolResultTextContentrH   r   r   r   r   )r   r   r!   rL   rM   r>   rN   rO   r@   rQ   rS   rU   rV   	raw_valuerY   	key_partsrd   s                    rZ   tasks_result_handlerrp      s      "!!!~%--f-== a a a a a a aH-- 	'1U     ^
 >'=     BJAAAA	<<>> 	8 	8 	8 	8 	8 	8 	8U#(99Y#7#7777777N	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 *144~7L7LW7U7U'I~III     !..x88888888	'I~III     nn ?>#;^=R"SSS+//	JJI'RiRRR    	'229Q;O;O;O2PPPPPPPPII 
	 
	 
	9++..FU.LLM: .= ,       Aa a a a a a a a a a a a a a|
	 #8,,	k*	 ,	9-C#Dn       aa a a a a a a a a a a a a af ("".	9-C#Dn       ia a a a a a a a a a a a a an *$$0	9-C#Dn       qa a a a a a a a a a a a a ax 'M)MM    ya a a a a a a a a a a a a a a asz   BN	=C+N	+
C5	5N	8C5	9D	N	*H.-N	.
J'8AJ"
J'N	"J''=N	7#N	-#N	#&N		
NNr   c                (   K   t          g d          S )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   )r   r   s     rZ   tasks_list_handlerrt      s       5555    r   c           
       K   ddl }|j        j                            |           4 d{V }|                    d          }|s#t          t          t          d                    |j        }| j	        }|#t          t          t          d                    d| d	| }d| d	| d
}|                                4 d{V }	|	                    |           d{V }
|	                    |           d{V }ddd          d{V  n# 1 d{V swxY w Y   |
dn|
                    d          }|dn|                    d          }|'t          t          t          d| d                    |                    |           d{V }|'t          t          t          d| d                    |                    |           d{V  t          |d|p/t!          j        t$          j                                                  t!          j        t$          j                  ddd          cddd          d{V  S # 1 d{V swxY w Y   dS )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   r1   r2   zTask cancelledr3   )r:   r   r;   r<   r=   r
   r   r   r>   r?   r   r@   rA   rB   cancelr   r   rJ   r   rK   	isoformat)r   r   r!   rL   rM   r>   rN   rO   rP   r@   rQ   rR   rS   rT   rU   s                  rZ   tasks_cancel_handlerry     s      "!!!~%--f-== A
 A
 A
 A
 A
 A
 A
H-- 	'1U     ^
>'=     BJAAAA	QQQnQQQ<<>> 	? 	? 	? 	? 	? 	? 	?U#(99Y#7#7777777N%*YY~%>%>>>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? *144~7L7LW7U7U$,DD2B2I2I'2R2R 	 'I~III     !..x88888888	'I~III     mmH%%%%%%%%%
  ! JHL$>$>$H$H$J$J",x|44*
 
 
sA
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
 A
s7   BI7D=I
D	ID	DI
II)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   ))__doc__
__future__r   r   r   r   typingr   r   	mcp.typesrj   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RUNNINGri   rE   	CANCELLEDr   __annotations__r[   rp   rt   ry    ru   rZ   <module>r      s    
 # " " " " " 2 2 2 2 2 2 2 2 2 2 % % % % % % % %     + + + + + + * * * * * *                        
 5 4 4 4 4 4 .------
 i9Ik8k2     ^
 ^
 ^
 ^
Bo o o od6 6 6 6$Q
 Q
 Q
 Q
 Q
 Q
ru   