
    i                         d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZ ddlmZ  G d d	e      Ze G d
 d             Z G d d      Zy)z1Session persistence primitives for workflow runs.    N)	dataclassfield)Enum)Event)AnyDictOptional)ArtifactEventQueuec                   (    e Zd ZdZdZdZdZdZdZdZ	y)	SessionStatusz(Lifecycle states for a workflow session.idlerunningwaiting_for_input	completederror	cancelledN)
__name__
__module____qualname____doc__IDLERUNNINGWAITING_FOR_INPUT	COMPLETEDERROR	CANCELLED     J/Users/bowang/.openclaw/workspace/ChatDev/server/services/session_store.pyr   r      s$    2DG+IEIr   r   c                      e Zd ZU dZeed<   eed<   eed<    ee      Zee   ed<   e	j                  Ze	ed<    ed       Zeed	<    ed
       Zeed<   dZee   ed<   dZee   ed<   dZee   ed<   dZeed<   dZee   ed<   dZeeeef      ed<   dZee   ed<   dZee   ed<    ee      Zeeef   ed<   dZee   ed<    ee      Zeed<    ee       Z!e ed<   dZ"ee   ed<   y)WorkflowSessionz-Mutable record describing a workflow session.
session_id	yaml_filetask_prompt)default_factorytask_attachmentsstatusc                  *    t        j                          S Ntimer   r   r   <lambda>zWorkflowSession.<lambda>!   
    diikr   
created_atc                  *    t        j                          S r)   r*   r   r   r   r,   zWorkflowSession.<lambda>"   r-   r   
updated_atNexecutorgraphcurrent_node_idFr   input_promisepending_input_datahuman_input_futurehuman_input_valueresultserror_messageartifact_queuecancel_eventcancel_reason)#r   r   r   r   str__annotations__r   listr&   r   r   r'   r.   floatr0   r1   r	   r   r2   r3   r   boolr4   r5   r   r6   r7   dictr8   r9   r
   r:   r   r;   r<   r   r   r   r!   r!      s/   7ON"'"=d3i=)..FM..ABJB.ABJB #Hhsm"E8C=%)OXc]) $t##'M8C='37c3h07(,,'+x}+ $D9GT#s(^9#'M8C=' */?Q)RN&R  6L%6#'M8C='r   r!   c                   "   e Zd ZdZddZdddededed	eee      def
d
Z	dedee   fdZ
dedefdZdedededdfdZdededdfdZdedeeef   ddfdZdedee   fdZdedeeeef      fdZdeeeeef   f   fdZdedee   fdZy)WorkflowSessionStorez9In-memory registry that tracks workflow session metadata.returnNc                 N    i | _         t        j                  t              | _        y r)   )	_sessionslogging	getLoggerr   logger)selfs    r   __init__zWorkflowSessionStore.__init__?   s    57''1r   )attachmentsr#   r$   r"   rM   c          	          t        |||t        |xs g             }|| j                  |<   | j                  j	                  d||       |S )N)r"   r#   r$   r&   z"Created session %s for workflow %s)r!   r?   rG   rJ   info)rK   r#   r$   r"   rM   sessions         r   create_sessionz#WorkflowSessionStore.create_sessionC   sP     "!#!+"34	
 &-z"=z9Ur   c                 8    | j                   j                  |      S r)   )rG   getrK   r"   s     r   get_sessionz WorkflowSessionStore.get_sessionU   s    ~~!!*--r   c                     || j                   v S r)   )rG   rT   s     r   has_sessionz WorkflowSessionStore.has_sessionX   s    T^^++r   r'   kwargsc                 2   | j                   j                  |      }|sy ||_        t        j                         |_        |j                         D ]  \  }}t        ||      st        |||       ! | j                  j                  d||j                         y )NzUpdated session %s status to %s)rG   rS   r'   r+   r0   itemshasattrsetattrrJ   rO   value)rK   r"   r'   rX   rP   keyr]   s          r   update_session_statusz*WorkflowSessionStore.update_session_status[   sx    ..$$Z0!YY[ ,,.JCw$e, ) 	:JUr   r9   c                 H    | j                  |t        j                  |       y )N)r9   )r_   r   r   )rK   r"   r9   s      r   set_session_errorz&WorkflowSessionStore.set_session_errorf   s    "":}/B/BR_"`r   r8   c                 H    | j                  |t        j                  |       y )N)r8   )r_   r   r   )rK   r"   r8   s      r   complete_sessionz%WorkflowSessionStore.complete_sessioni   s    "":}/F/FPW"Xr   c                 :    | j                   j                  |d       S r)   )rG   poprT   s     r   pop_sessionz WorkflowSessionStore.pop_sessionl   s    ~~!!*d33r   c           	         | j                   j                  |      }|sy |j                  |j                  |j                  j
                  |j                  |j                  |j                  |j                  |j                  dS )N)r"   r#   r'   r.   r0   r3   r   r9   )rG   rS   r"   r#   r'   r]   r.   r0   r3   r   r9   rK   r"   rP   s      r   get_session_infoz%WorkflowSessionStore.get_session_infoo   sr    ..$$Z0!,, **nn**!,,!,,&66!(!:!:$22	
 		
r   c                 |    | j                   j                         D ci c]  }|| j                  |       c}S c c}w r)   )rG   keysri   rT   s     r   list_sessionsz"WorkflowSessionStore.list_sessions~   s;    PTP^P^PcPcPefPe*
D11*==Pefffs   9c                 X    | j                   j                  |      }|r|j                  S d S r)   )rG   rS   r:   rh   s      r   get_artifact_queuez'WorkflowSessionStore.get_artifact_queue   s)    ..$$Z0)0w%%:d:r   )rE   N)r   r   r   r   rL   r=   r	   r?   r!   rQ   rU   rA   rW   r   r   r_   ra   r   rc   rf   ri   rl   r
   rn   r   r   r   rD   rD   <   sW   C2 ,0  	
  d3i( 
$.c .h.G .,c ,d ,	V 	V] 	VVY 	V^b 	VaC a a aY3 Yc3h YD Y4c 4h.G 4
3 
8DcN3K 
gtCc3h$78 g;S ;X>P5Q ;r   rD   )r   rH   r+   dataclassesr   r   enumr   	threadingr   typingr   r   r	   server.services.artifact_eventsr
   r   r!   rD   r   r   r   <module>rt      sR    7   (   & & >D   (  (  (FG; G;r   