
    *"hj                        d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ddZddZddZdd	Zdd
Z ej                          dk(  ZddZddZddZd ZddZddZed        Zy)    )annotationsN)contextmanager)Path)Anyc                 0    t        j                         dz  S )Nz
.skillclaw)r   home     2/root/.hermes/SkillClaw/skillclaw/runtime_state.py
_state_dirr      s    99;%%r
   c                     t               dz  S )Nzskillclaw.pidr   r	   r
   r   pid_file_pathr      s    </))r
   c                     t               dz  S )Nzdaemon_start.lockr   r	   r
   r   daemon_start_lock_pathr      s    <---r
   c                x    	 t        j                  | d       y# t        $ r Y yt        $ r Y yt        $ r Y yw xY w)Nr   TF)oskillPermissionErrorProcessLookupErrorOSErrorpids    r   _process_alive_unixr      s?    
Q   s    	9999c                    dd l }|j                  j                  }d}|j                  |d|       }|r|j	                  |       yy)Nr   i   FT)ctypeswindllkernel32OpenProcessCloseHandle)r   r   r   PROCESS_QUERY_INFORMATIONhandles        r   _process_alive_windowsr#   $   sF    }}%%H &!!";UCHFV$r
   Windowsc                F    | dk  ryt         rt        |       S t        |       S )Nr   F)_USE_WINDOWSr#   r   r   s    r   process_aliver'   3   s%    
ax%c**s##r
   c                V    	 t        |       }|dkD  r|S d S # t        t        f$ r Y y w xY w)Nr   )int	TypeError
ValueError)valuer   s     r   _coerce_pidr-   ;   s<    %j '3#t# z" s    ((c                     	 t        t               j                  d      j                               } | t               j                  d       y | S # t        $ r Y y w xY w)Nutf-8encodingT
missing_ok)r-   r   	read_textstripFileNotFoundErrorunlinkr   s    r   read_pidr8   C   s`    -/33W3EKKMN {$/J  s   1A 	AAc                 8    t               j                  d       y )NTr2   )r   r7   r	   r
   r   	clear_pidr:   N   s    Od+r
   c                4    t               | k(  rt                y y )N)r8   r:   r   s    r   clear_pid_if_matchesr<   R   s    zS r
   c                   d }	 t        j                  dd| j                  d| j                   dd      5 }t	        |j                        }|j                  |       |j                          t        j                  |j                                d d d        t        j                  ||        ||j                  d       y y # 1 sw Y   5xY w# ||j                  d       w w xY w)Nwr/   .F)moder1   dirprefixdeleteTr2   )tempfileNamedTemporaryFileparentnamer   writeflushr   fsyncfilenoreplacer7   )pathtexttmp_pathr"   s       r   _write_text_atomicrP   W   s     H-((tyyk#
 
	& FKK(HLLLLNHHV]]_%
	& 	

8T"OOtO,  
	& 
	& OOtO,  s#   2C ACC C	C C'c               #    K   t               } | j                  j                  dd       t        j                         }	 	 t        j
                  | t        j                  t        j                  z  t        j                  z        }	 t        j"                  |dd      5 }|j%                  t'        |             |j)                          t        j*                  |j-                                d d d        	 	 d  	 t        | j                  d      j                               }||k(  s|| j                  d       y y # t        $ rj 	 t        | j                  d      j                               }n# t        $ r Y Y Cw xY w|t        |      s| j                  d       Y it!        |      w xY w# 1 sw Y   xY w# t.        $ r | j                  d        w xY w# t        $ r Y y t.        $ r | j                  d       Y y w xY w# 	 t        | j                  d      j                               }n/# t        $ r Y  Y y t.        $ r | j                  d       Y  Y y w xY w||k(  s|| j                  d       w w xY ww)NT)parentsexist_okr/   r0   r2   r>   )r   rF   mkdirr   getpidopenO_CREATO_EXCLO_WRONLYFileExistsErrorr-   r4   r5   r6   r'   r7   RuntimeErrorfdopenrH   strrI   rJ   rK   	Exception)rM   	owner_pidfdholderr"   s        r   daemon_start_lockrb   k   s3    !#DKKdT2		I
	'rzzBII5CDB	2sW5 *S^,)* 
)	 !A!G!G!IJF Y&.KK4K( #1C  
	'$T^^W^%E%K%K%MN$  ~]6%:t,v&&
	'* *
  	KK4K(	 ! 	 	KK4K(			 !A!G!G!IJF  	 	KK4K(	 Y&.KK4K( #1s   =J AE  G AF6-G 5J7H <)G" %J 	F3
)E43F34	F=F3>JF"F3$J'F33J6F?;G GJ"	H
+J-H
J	H

JJ)H98J9	I%JJI% J"J$I%%JJ)returnr   )r   r)   rc   bool)r,   r   rc   
int | None)rc   re   )r   r)   )rM   r   rN   r]   )
__future__r   r   platformrD   
contextlibr   pathlibr   typingr   r   r   r   r   r#   systemr&   r'   r-   r8   r:   r<   rP   rb   r	   r
   r   <module>rl      sz    " 	   %  &*.		 x I-$$,
-( *) *)r
   