
    )`i                     N    d Z ddlmZmZ ddlmZmZmZmZ  G d de          Z	dS )z8
TaskStore - Abstract interface for task state storage.
    )ABCabstractmethod)ResultTaskTaskMetadata
TaskStatusc            
          e Zd ZdZe	 ddededz  defd            Zedededz  fd            Z	e	 	 ddede
dz  d	edz  defd
            Zedededdfd            Zedededz  fd            Ze	 ddedz  deee         edz  f         fd            Zededefd            Zededdfd            Zededdfd            ZdS )	TaskStorez
    Abstract interface for task state storage.

    This is a pure storage interface - it doesn't manage execution.
    Implementations can use in-memory storage, databases, Redis, etc.

    All methods are async to support various backends.
    Nmetadatatask_idreturnc                 
   K   dS )a?  
        Create a new task.

        Args:
            metadata: Task metadata (ttl, etc.)
            task_id: Optional task ID. If None, implementation should generate one.

        Returns:
            The created Task with status="working"

        Raises:
            ValueError: If task_id already exists
        N )selfr   r   s      w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mcp/shared/experimental/tasks/store.pycreate_taskzTaskStore.create_task   
            c                 
   K   dS )z
        Get a task by ID.

        Args:
            task_id: The task identifier

        Returns:
            The Task, or None if not found
        Nr   r   r   s     r   get_taskzTaskStore.get_task(   r   r   statusstatus_messagec                 
   K   dS )a  
        Update a task's status and/or message.

        Args:
            task_id: The task identifier
            status: New status (if changing)
            status_message: New status message (if changing)

        Returns:
            The updated Task

        Raises:
            ValueError: If task not found
            ValueError: If attempting to transition from a terminal status
                (completed, failed, cancelled). Per spec, terminal states
                MUST NOT transition to any other status.
        Nr   )r   r   r   r   s       r   update_taskzTaskStore.update_task4   r   r   resultc                 
   K   dS )z
        Store the result for a task.

        Args:
            task_id: The task identifier
            result: The result to store

        Raises:
            ValueError: If task not found
        Nr   )r   r   r   s      r   store_resultzTaskStore.store_resultM   r   r   c                 
   K   dS )z
        Get the stored result for a task.

        Args:
            task_id: The task identifier

        Returns:
            The stored Result, or None if not available
        Nr   r   s     r   
get_resultzTaskStore.get_resultZ   r   r   cursorc                 
   K   dS )z
        List tasks with pagination.

        Args:
            cursor: Optional cursor for pagination

        Returns:
            Tuple of (tasks, next_cursor). next_cursor is None if no more pages.
        Nr   )r   r!   s     r   
list_taskszTaskStore.list_tasksf   r   r   c                 
   K   dS )z
        Delete a task.

        Args:
            task_id: The task identifier

        Returns:
            True if deleted, False if not found
        Nr   r   s     r   delete_taskzTaskStore.delete_tasku   r   r   c                 
   K   dS )a\  
        Wait until the task status changes.

        This blocks until either:
        1. The task status changes
        2. The wait is cancelled

        Used by tasks/result to wait for task completion or status changes.

        Args:
            task_id: The task identifier

        Raises:
            ValueError: If task not found
        Nr   r   s     r   wait_for_updatezTaskStore.wait_for_update   r   r   c                 
   K   dS )z
        Signal that a task has been updated.

        This wakes up any coroutines waiting in wait_for_update().

        Args:
            task_id: The task identifier
        Nr   r   s     r   notify_updatezTaskStore.notify_update   r   r   )N)NN)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r    tuplelistr#   boolr%   r'   r)   r   r   r   r
   r
   
   s9          #  t 
	   ^& 	c 	dTk 	 	 	 ^	  %)%)	  T! d
	
 
   ^0 
# 
v 
$ 
 
 
 ^
 	 	 	 	 	 ^	  " d
 
tDz3:%	&   ^ 	 	 	 	 	 ^	 S T    ^" 3 4    ^  r   r
   N)
r-   abcr   r   	mcp.typesr   r   r   r   r
   r   r   r   <module>r4      s     $ # # # # # # # < < < < < < < < < < < <R R R R R R R R R Rr   