U
    i                     @   s   d Z ddl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	m
Z
mZ edZejddd d	ZG d
d dZedkredddddddddddZe  edej  dejd< dejd< e  dS )z
State Manager - Generic checkpoint system for any OpenClaw agent/operation.
Any agent can import this to save/resume work across Gateway crashes.
    N)datetimetimezone)Path)OptionalDictAnyz&/home/ubuntu/.openclaw/workspace/stateT)parentsexist_okiX  c                   @   s   e Zd ZdZdeeeeeeeeeef  eeeef  dddZeeef dddZ	e
dd	d
Zdd Zdd Zeeed  dddZeedddZdS )OperationStatez1Represents the state of a long-running operation.Noperation_type
agent_namedescriptionchannelnotify_userresume_promptprogressmetadatac	           	      C   s   | dt  jd d  | _|| _|| _|| _|| _|| _|| _	|pHi | _
|pRi | _ttj | _| j| _d| _d| _d S )N-   runningF)uuidZuuid4hexoperation_idr   r   r   r   r   r   r   r   r   nowr   utc	isoformat
started_atlast_checkpointstatususer_cancelled)	selfr   r   r   r   r   r   r   r    r"   7/home/ubuntu/.openclaw/workspace/tools/state_manager.py__init__   s    

zOperationState.__init__)returnc                 C   s:   | j | j| j| j| j| j| j| j| j| j	| j
| j| jdS )Nr   r   r   r   r   r   r   r   r   r   r   r   r    r&   r!   r"   r"   r#   to_dict1   s    zOperationState.to_dictc              	   C   sR   t tj | _td| j d }t|d}t	j
|  |dd W 5 Q R X |S )zPersist state to disk.
operation-.jsonw   indent)r   r   r   r   r   r   	STATE_DIRr   openjsondumpr(   )r!   filepathfr"   r"   r#   saveB   s
    zOperationState.savec              	   C   s`   d| _ td| j d }| r\td }|jdd t||| j dt 	d d  dS )	z4Mark operation as completed and clean up state file.Z	completedr)   r*   T)r	   r   z%Y%m%dN)
r   r/   r   existsmkdirosrenamer   r   strftime)r!   r3   Zcompleted_dirr"   r"   r#   completeJ   s    zOperationState.completec                 C   s   d| _ d| _|   dS )z+Mark as user-cancelled (won't auto-resume).TZ	cancelledN)r    r   r5   r'   r"   r"   r#   cancelT   s    zOperationState.cancel)r   r%   c                 C   s   t d| d }| sdS t|}t|}W 5 Q R X | |d |d |d |d |d |d	 |d
i |di d}|d |_|d |_|d |_|dd|_	|dd|_
|S )zLoad existing operation state.r)   r*   Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    F)r/   r6   r0   r1   loadgetr   r   r   r   r    )clsr   r3   r4   datastater"   r"   r#   r=   Z   s*    






zOperationState.loadc              
   C   s8  g }t tj}tdD ]}zt|}t|}W 5 Q R X |	d}|	dd}|r^W q|dkrr|
| n|dkr|	di 	d}|r
t |}	||	  }
|
tkrd|d< d	|d d< | |d d
< t|d}tj||dd W 5 Q R X |
| n
|
| W q tk
r0   Y qY qX q|S )zList all operations that should be resumed.
        
        Includes:
        - 'running' status: active operations that were interrupted
        - 'resuming' status: only if resume timeout has passed (retry needed)
        zoperation-*.jsonr   r    Fr   Zresumingr   
resumed_atNZresume_timeout_reachedr+   r,   r-   )r   r   r   r   r/   globr0   r1   r=   r>   appendfromisoformattotal_secondsRESUME_TIMEOUT_SECONDSr   r2   	Exception)r?   interruptedr   r3   r4   r@   r   r    Zresumed_at_strrB   elapsedr"   r"   r#   list_interruptedu   s8    




zOperationState.list_interrupted)NN)__name__
__module____qualname____doc__strr   r   r   r$   r(   r   r5   r;   r<   classmethodr=   listrK   r"   r"   r"   r#   r
      s*   
  
r
   __main__ZresearchZhenryz&AI industry trend analysis for Q2 2026zdiscord:1486939151008923751taro83zPContinue AI industry trend analysis. Review workspace/state for checkpoint data.      zGathering source materials...)stepZofcurrent)r   r   r   r   r   r   r   zState saved: r,   rW   z!Analyzing OpenAI announcements...rX   )rO   r1   r8   r   r   r   pathlibr   typingr   r   r   r/   r7   rG   r
   rL   rA   r5   printr   r   r"   r"   r"   r#   <module>   s4    
	

