
    V-,jI                        S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJr  \" \R                  R                  SS5      5      r\S-  rSr\R                  R                  S5      r\R"                  " S	5      r\R"                  " S
5      rSrSrS rS\S\4S jrS\4S jrS\4S jrS\S\4S jrS\4S jrS\4S jrS\4S jrS\S\4S jr S*S\S\!S\4S jjr"S\S\4S jr#S\4S jr$S+S\S \4S! jjr%S" r&S# r'\(S$:X  aT  \)" \RT                  5      S%:  a  \+" S&5      e\RT                  S'   r,\,S(:X  a  \'" \RT                  S'S 5        g\+" S)\, 35      eg),    N)datetimetimezone)PathCLAUDE_HUMAND_ROOTz./home/sebas/runtime/claude-humand-orchestratorsessionsz/home/sebas/work/humandz0~/.agents/skills/telegram-notify/telegram-notifyz5ORCH_EVENT:\s*(HEARTBEAT|NEEDS_USER|DONE)\s*\|\s*(.*)z4\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07]*\x07|\x1B[@-_]ORCH_USER_MESSAGE_BEGINORCH_USER_MESSAGE_ENDc                  h    [         R                  " [        R                  5      R	                  S5      $ )Nz%Y-%m-%dT%H:%M:%SZ)r   nowr   utcstrftime     ./home/sebas/pi-config/bin/claude-humand-lib.pynow_isor      s!    <<%../CDDr   textreturnc                     [         R                  " SSU R                  5       R                  5       5      R                  S5      n U =(       d    S$ )Nz[^a-zA-Z0-9]+-session)resubstriplower)r   s    r   slugifyr      s:    66"C););)=>DDSID9r   pathc                 x    U R                  5       (       d  U$ [        R                  " U R                  5       5      $ N)existsjsonloads	read_text)r   defaults     r   	load_jsonr$      s(    ;;==::dnn&''r   c                     U R                   R                  SSS9  U R                  [        R                  " USSS9S-   5        g )NT)parentsexist_ok   Findentensure_ascii
)parentmkdir
write_textr    dumps)r   datas     r   	save_jsonr2   $   s7    KKdT2OODJJtAEBTIJr   
session_idc                     [         U -  $ r   )SESSIONS_DIRr3   s    r   session_dirr7   )   s    *$$r   c                 2    [        [        U 5      S-  0 5      $ )Nz	meta.jsonr$   r7   r6   s    r   	read_metar:   -   s    [,{:B??r   c                 2    [        [        U 5      S-  0 5      $ Nzstatus.jsonr9   r6   s    r   read_statusr=   1   s    [,}<bAAr   c                 4    [        [        U 5      S-  U5        g r<   )r2   r7   )r3   r1   s     r   write_statusr?   5   s    k*%5t<r   namec                     [         R                  " SSSU /[         R                  [         R                  S9R                  S:H  $ )Ntmuxzhas-session-t)stdoutstderrr   )
subprocessrunDEVNULL
returncode)r@   s    r   tmux_has_sessionrJ   9   sA    >>6=$=jFXFXakasast  DE  E  Er   linesc           
      ~    [         R                  " SSSSU SSU 3/SSS9nUR                  S	:X  a  UR                  $ S
$ )NrB   zcapture-panez-prC   z-Sr   T)capture_outputr   r    )rF   rG   rI   rD   )r@   rK   ress      r   tmux_capturerP   =   sE    
..&.$dDAeW+Vgkrv
wC1,3::4"4r   rawc                     U R                  SS5      n[        R                  SU5      nSR                  S U 5       5      nUR	                  S5      $ )NrN   c              3   R   #    U  H  oS :X  d  [        U5      S:  d  M  Uv   M     g7f)	    N)ord).0chs     r   	<genexpr>clean_line.<locals>.<genexpr>E   s      D"d
c"gm22s   '	'r,   )replaceANSI_REr   joinrstrip)rQ   lines     r   
clean_linera   B   sE    ;;tR D;;r4 D77DDDD;;tr   c                 @   / nS n/ nU R                  5        GH  n[        U5      n[        R                  U5      nU(       a6  UR	                  S5      UR	                  S5      R                  5       SS.n/ nMa  UR                  5       [        :X  a  U(       a  / nM  UR                  5       [        :X  aP  U(       aI  SR                  U5      R                  5       US'   U(       a	  US   U:w  a  UR                  U5        S n/ nM  Uc  M  UR                  U5        GM     U$ )N   r(   rN   )typesummarymessager,   rf   )

splitlinesra   EVENT_REsearchgroupr   BEGINENDr^   append)r   eventscurrent	msg_linesrQ   r`   ms          r   parse_eventsrs   I   s    FGI #OOD! wwqzaggaj6F6F6HUWXGI::<5 WI::<37!%9!5!;!;!=GIVBZ72g&GIT"% !& Mr   notifyc                    [        U 5      n[        U 5      nU(       d  [        SU  35      eUS   n[        U 5      S-  nUR	                  5       (       a  UR                  5       OSn[        U5      n[        UR                  SS5      5      nXxS  n	[        U5      n
UR                  SS5      nU	(       a&  U	S	   nUS
   S:X  a  SnO4US
   S:X  a  SnO(US:X  a  SnOU
(       a	  US:X  a  SnOU
(       d  US;   a  SnU
(       a  [        US5      OUR                  SS5      n[        U 5      S-  R                  U5        UR                  S/ 5      n[        UR                  SS5      5      nU(       a  [        XS  US-   S9 H  u  nnUS
   S;   d  M  US   R                  5       =(       d    US   R                  5       nU(       ad  [        R                  R	                  [         5      (       a<  UR                  S5      =(       d    U n["        R$                  " [         SU SU 3/5        UR'                  UUS
   [)        5       US   S.5        M     [+        U5      nUR-                  U UR                  S5      UR                  S 5      UUU
[)        5       [+        U5      UU(       a  US	   OUR                  S!5      UUS".5        [/        X5        X#XS#.$ )$Nzmissing meta for tmux_sessionz
output.logrN   event_countr   	lifecyclequeuedrg   rd   
NEEDS_USER
needs_userDONEdonerunning>   ry   r~   failed   last_captureztmux.capture.txtnotificationsnotified_countrc   )start>   r|   rz   rf   re   label[z] )idrd   atre   ticket
last_event)r3   r   r   rv   rx   
tmux_alivelast_scan_atrw   r   r   r   r   )metastatus
new_events
all_events)r:   r=   
SystemExitr7   r   r"   rs   intgetrJ   rP   r/   	enumerater   osr   
NOTIFY_CMDrF   rG   rn   r   lenupdater?   )r3   rt   r   r   sess
output_logr   r   
prev_countr   aliverx   lastcapturer   r   idxeventmsgr   s                       r   scan_sessionr   c   s   Z D$F,ZL9::DZ(<7J%/%6%6%8%8:!bDd#JVZZq12JK(JT"E

;1I"~<<'$I&\V#I("!I	9(	&;;	).l4%FJJ~r4RG11==gFJJ3M$4a89N#J$?~XYGYZJCV} 66I&,,.J%	2B2H2H2J277>>*55 HHW-;ENNJ!E7"SE0B#CD$$Cvgidijsdt%uv [ Z
MM '"((8$	:((2jn

<8P&  $*__r   c                      [         R                  5       (       d  / $ [        [         R                  5        V s/ s H%  o R	                  5       (       d  M  U R
                  PM'     sn 5      $ s  sn f r   )r5   r   sortediterdiris_dirr@   )ps    r   list_sessionsr      sJ      	<#7#7#9H#9aXXZ6166#9HIIHs   A*A*c           
         SU ;   nU SS   Vs/ s H  o"R                  S5      (       a  M  UPM     nnU(       d
  [        5       n/ nU H  n[        XQS9nUS   nUR                  UUR	                  S5      UR	                  S5      UR	                  S5      =(       d    0 R	                  S	5      UR	                  S5      =(       d    0 R	                  S
5      S.5        M     [        [        R                  " USSS95        g s  snf )Nz--notifyrc   z--)rt   r   rx   r   r   rd   re   )r3   rx   r   last_event_typelast_event_summaryr(   Fr)   )
startswithr   r   rn   r   printr    r0   )argvrt   aidsrowssidoutsts           r   cmd_scanr      s    4F12h
9hll4&81hC
9oD3.],&&. "| 4 :??G#%66,#7#=2"B"B9"M
 	  
$**T!%
89 :s
   C?C?__main__r(   z<usage: claude-humand-lib.py scan [--notify] [session_id ...]rc   scanzunknown command: )r   )F)-r    r   r   rF   sysr   r   pathlibr   environr   RUNTIME_ROOTr5   	WORKSPACEr   
expanduserr   compileri   r]   rl   rm   r   strr   r$   r2   r7   r:   r=   r?   boolrJ   r   rP   ra   rs   r   r   r   __name__r   r   r   cmdr   r   r   <module>r      s    	 	  
 ' BJJNN#79ijkj(%	WW RS
::NO
**L
M!E# # 
(D (KD K
%C %D %@# @BC B=S =E3 E4 E5s 53 5 5
C C s 4:`S :`$ :`zJ:& z
388}qWXX
((1+C
f}!",SE233 r   