
    i<                        d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ  eej                  j                  d e ee      j                         j                  j                                    Zedz  Zedz  Zedz  Zed	z  Z ed
      Zedz  ZdZdefdZdee   fdZdee   fdZdee   fdZdee   fdZefdee   dedee   fdZdee   defdZ dedee   ddfdZ!dee   dee   ddfdZ"deddfdZ#dedee   dee   dee   deddfdZ$dedee   ddfd Z%dedee   dee   dee   deddfd!Z&dejN                  fd"Z(d%d#Z)e*d$k(  r e)        yy)&u  
check-dev3.py - Dev3 Team (봇D) 작업 환경 헬스체크 및 최근 작업 이력 진단 도구

Usage:
    python3 scripts/check-dev3.py          # 전체 점검
    python3 scripts/check-dev3.py --quick  # 환경만 점검
    python3 scripts/check-dev3.py --json   # JSON 출력
    N)datetime)PathWORKSPACE_ROOTz
teams/dev3logszmemory/eventszmemory/reportsz'/home/jay/.openclaw/workspace/AGENTS.mdzevent-queue.json
   returnc                  $   ddddd} 	 t        j                  ddgddd      }|j                  d	k(  r<|j                  j	                         r"|j                  j	                         | d
<   d| d<   	 t        j                  ddgddd      }|j                  d	k(  rA|j                  j	                         xs |j                  j	                         }|r|nd| d<   | S |j                  j	                         xs |j                  j	                         }|r|nd| d<   	 | S # t         j
                  t        t        f$ r}t        |      | d<   | cY d}~S d}~ww xY w# t         j
                  t        t        f$ r}t        |      | d<   Y d}~| S d}~ww xY w)u)   openclaw CLI 동작 가능 여부 확인.FN)	availablepathversionerrorwhichopenclawT   )capture_outputtexttimeoutr   r   r
   r   z	--versionr   )

subprocessrun
returncodestdoutstripTimeoutExpiredFileNotFoundErrorOSErrorstrstderr)resultprocevers       C/home/jay/workspace/.worktrees/task-2116-dev1/scripts/check-dev3.pycheck_openclawr#   !   s    	F~~j!	
 ??aDKK$5$5$7![[..0F6N"&F;!~~%	
 ??a;;$$&=$++*;*;*=C'*F9 M ;;$$&=$++*;*;*=C'*F9 M+ %%'8'B a&w$ %%'8'B !a&wM!s=   A&D 0A)E ?E E;E
EEF6F

Fc                  6   g } | j                  dt        t              t        j                         dd       t        j                         }| j                  dt        t              ||s	dt         ndd       | j                  dt        t
              t
        j                         dd       | j                  dt        t              t        j                         dd       | j                  dt        t              t        j                         dd       | S )	uA   필수 경로 존재 여부를 점검하여 결과 목록 반환.u   dev3 작업 디렉토리N)labelr   exists
suggestionu   dev3 로그 디렉토리z	mkdir -p u   events 디렉토리u   reports 디렉토리z	AGENTS.md)	appendr   DEV3_DIRis_dirDEV3_LOGS_DIR
EVENTS_DIRREPORTS_DIR	AGENTS_MDis_file)checkslogs_existss     r"   check_pathsr2   O   s    F MM+H//#	   &&(K
MM+M"9D	-1$	  MM&J##%	  MM'K $$&	  MMI##%	  M    c            	      D   g } t         j                         s| S i }t        j                         r	 t	        t        d      5 }t        j                  |      }ddd       j                  dg       }|D ]d  }dt        |j                  dd            v s!|j                  dd      }||vs)|j                  d	d      ||   j                  d	d      kD  s`|||<   f 	 	 t        t         j                               }|D ]  }|j                         s|j                  }	|	j                  d
      }
t        |
      dk  r@|
d   dvrH|
d    d
|
d    }|
d   }	 |j!                         j"                  }t%        j&                  |      j)                  d      }|j                  |      }|r9|j                  dd      }t+        |      xr t-        |      j                         }n| j/                  |||||d        | j1                  d d       t3               }g }| D ]/  }|d   |vs|j5                  |d          |j/                  |       1 |S # 1 sw Y   xY w# t        t
        j                  f$ r Y w xY w# t        $ r | cY S w xY w# t        $ r d}d}Y 
w xY w)u   
    events/ 디렉토리에서 .done / .failed 파일을 수집하고
    event-queue.json의 dev3-team 이벤트와 교차 참조하여 이력 반환.
    utf-8encodingN	processeddev3team task_idprocessed_at.      )donefailedr      %Y-%m-%d %H:%Munknownreport)r<   statusmtime	mtime_str
has_reportc                     | d   S NrH    rs    r"   <lambda>z"scan_event_files.<locals>.<lambda>   
    qz r3   Tkeyreverse)r,   r*   EVENT_QUEUE_JSONr/   openjsonloadgetr   r   JSONDecodeErrorlistiterdirnamesplitlenstatst_mtimer   fromtimestampstrftimeboolr   r(   sortsetadd)recordsdev3_eventsf
queue_datar8   evttidentriesentryr]   partsr<   rG   rH   rI   report_pathrJ   seen_idsdedupedrO   s                       r"   scan_event_filesrt      s   
 G $&K!	&9 *Q!YYq\
*"{B7I  /S!455'')R0C+-3k#6F6J6J>[]6^^+.C(/z))+,  &}}zz

3 u:>8--1XJaaz*q	"JJL))E ..u5>>?OPI oog&''(B/Kk*JtK/@/H/H/JJ "$
 	A&R LL)4L8HG Y<x'LL9&NN1
 NK* * --. 		  ,  	"E!I	"sY   I I<I >I I I= >JII I:9I:=J
JJJc                     g } t         j                         s| S t               }t        j	                         r	 t        t        d      5 }t        j                  |      }ddd       j                  dg       D ]A  }dt        |j                  dd            v s!|j                  |j                  dd             C 	 	 t        t         j                               }|D ]  }|j	                         r|j                  d	k(  s#|j                   }||vr4	 |j#                         j$                  }t'        j(                  |      j+                  d
      }	| j-                  |t        |      ||	d        | j/                  d d       | S # 1 sw Y   +xY w# t        t        j                  f$ r Y w xY w# t        $ r | cY S w xY w# t        $ r d}d}	Y w xY w)u   
    reports/ 디렉토리에서 dev3 관련 보고서를 검색하여 반환.
    event-queue.json 의 dev3-team 이벤트에서 참조된 파일 기준.
    r5   r6   Nr8   r9   r:   r;   r<   z.mdrD   r   rE   )r<   r   rH   rI   c                     | d   S rL   rM   rN   s    r"   rP   z#scan_report_files.<locals>.<lambda>	  rQ   r3   TrR   )r-   r*   rf   rU   r/   rV   rW   rX   rY   r   rg   r   rZ   r[   r\   suffixstemr`   ra   r   rb   rc   r(   re   )
rh   dev3_task_idsrj   rk   rl   rn   ro   rx   rH   rI   s
             r"   scan_report_filesrz      s   
 G "eM!	&9 *Q!YYq\
*!~~k26 >S!455!%%cggi&<=>{**,-  }}elle&; zz}$	"JJL))E ..u5>>?OPI
 	J"	
 	!. LL)4L8NK* *
 --. 		
    	"E!I	"sS   F 	F:F #F ?F4 >GFF F10F14GGGGc                     g } t         j                         s| S 	 t        t         j                               }|D ]{  }|j                         s	 |j                         j                  }t        j                  |      j                  d      }| j                  |j                  t        |      ||d       } | j                  d d       | S # t        $ r | cY S w xY w# t        $ r d}d}Y aw xY w)uA   dev3 logs/ 디렉토리에서 최근 로그 파일 목록 반환.rD   r   rE   )r]   r   rH   rI   c                     | d   S rL   rM   rN   s    r"   rP   z scan_log_files.<locals>.<lambda>*  rQ   r3   TrR   )r+   r*   r[   r\   r   r/   r`   ra   r   rb   rc   r(   r]   r   re   )rh   rn   ro   rH   rI   s        r"   scan_log_filesr}     s    G!},,./  }}	"JJL))E ..u5>>?OPI
 	JJJ"	
 	" LL)4L8N+    	"E!I	"s#   C >CCCC.-C.event_recordslimitc                     | d| S )u@   이벤트 레코드를 기반으로 최근 작업 이력 구성.NrM   )r~   r   s     r"   build_historyr   0  s    %  r3   historyc                     t        |       }t        d | D              }||z
  }|dkD  rt        ||z  dz        nd}||||dS )u   성공/실패 통계 계산.c              3   2   K   | ]  }|d    dk(  sd  yw)rG   rA   rC   NrM   ).0rO   s     r"   	<genexpr>zcalc_stats.<locals>.<genexpr>8  s     >(v(=!>s   r   d   )totalsuccessrB   rate)r_   sumint)r   r   r   rB   r   s        r"   
calc_statsr   5  sU    LE>W>>GW_F).3w$%D	 r3   openclaw_resultpath_checksc                 6   t        d       | d   r%| d   r	d| d    dnd}t        d| d    d|        n| d	   rd
| d	    nd}t        d|        |D ]B  }|d   rt        d|d    d|d            |d   rd|d    nd}t        d|d    d|        D y)u   환경 점검 결과 출력.u   
[환경 점검]r
   r   u
    (버전: )r;   u)     v openclaw CLI: 사용 가능 (경로: r   r   u    — u     x openclaw CLI: 사용 불가r&   z  v r%   z: r'   u    → z  x u   : 없음Nprint)r   r   ver_strerrcheckr'   s         r"   print_env_checkr   E  s    	
 {#@OPY@ZJy9:!<`b9/&:Q9RRST[S\]^4CG4Log./0RT/u56  ??Dw(5=/:;:?:M5|!4 56SUJDw(=>?r3   	log_filesc                 H   t        dt         d       | st        d       n:| D ]5  }|d   dk(  rdnd}|d   rd	nd
}t        d|d   dd| d|d    d|        7 |rEt        dt        dt        |             d       |dd D ]  }t        d|d   dd|d            yy)u   최근 작업 이력 출력.u    
[최근 작업 이력] (최근 u   건)u     (기록 없음)rG   rA   u   성공u   실패rJ   u   있음u   없음z  r<   z<14rI   u     보고서: u   
[dev3 로그 파일] (최근 r   Nr]   z<30)r   MAX_HISTORYminr_   )r   r   rO   status_labelreport_labellfs         r"   print_historyr   Z  s    	-k]$
?@!" 	A'({f'<8(L'(8HLQy\#&\NQ{^$~/	 /As9~0F/GtLMBQ- 	<BBr&z#&bK(9:;	< r3   statsc                 L    t        d| d    d| d    d| d    d| d    d		       y
)u   통계 출력.u   
[통계]
  총 작업: r   u   건 | 성공: r   u   건 | 실패: rB   u   건 | 성공률: r   %Nr   )r   s    r"   print_statsr   r  sM    	w( )I&' (Ho& 'vq		*r3   c                 t    t        d       t        | |       t        ||       t        |       t                y)u%   전체 헬스체크 보고서 출력.z=== Dev3 Team Health Check ===N)r   r   r   r   )r   r   r   r   r   s        r"   print_full_reportr   }  s.     

*+O[1'9%	Gr3   c                 F    t        d       t        | |       t                y)u)   환경 점검만 출력 (--quick 모드).z&=== Dev3 Team Health Check (Quick) ===N)r   r   )r   r   s     r"   print_quick_reportr     s    
 

23O[1	Gr3   c                     t        j                         j                         | |||dd |d}t        t	        j
                  |dd             y)u7   JSON 형식으로 전체 결과 출력 (--json 모드).Nr   )generated_atr   pathsr   r   r   Fr@   )ensure_asciiindent)r   now	isoformatr   rW   dumps)r   r   r   r   r   outputs         r"   print_json_reportr     sI     !002#"1F 
$**V%
:;r3   c                      t        j                  dt         j                  d      } | j                  dddd       | j                  d	ddd
       | j	                         S )NuD   Dev3 Team 작업 환경 헬스체크 및 최근 작업 이력 진단u   Examples:
  python3 scripts/check-dev3.py          # 전체 점검
  python3 scripts/check-dev3.py --quick  # 환경만 점검
  python3 scripts/check-dev3.py --json   # JSON 출력
)descriptionformatter_classepilogz--quick
store_trueFu.   환경 점검만 수행 (작업 이력 제외))actiondefaulthelpz--jsonu"   결과를 JSON 형식으로 출력)argparseArgumentParserRawDescriptionHelpFormatteradd_argument
parse_args)parsers    r"   r   r     sw    $$Z <<G		F =	   1	   r3   c                  h   t               } t               }t               }| j                  r-| j                  s!t        ||       t        j                  d       t               }t               }t        |t              }t        |      }| j                  rt        |||||       y t        |||||       y )Nr   )r   )r   r#   r2   quickrW   r   sysexitrt   r}   r   r   r   r   r   )argsr   r   r~   r   r   r   s          r"   mainr     s    <D %&O -K zz$))?K8 %&M IM=GwE yy/;ER/;ERr3   __main__)r   N)+__doc__r   rW   osr   r   r   pathlibr   environrY   r   __file__resolveparent	WORKSPACEr)   r+   r,   r-   r.   rU   r   dictr#   r[   r2   rt   rz   r}   r   r   r   r   r   r   r   r   r   	Namespacer   r   __name__rM   r3   r"   <module>r      sf     	  
    0#d8n6L6L6N6U6U6\6\2]^_	|#6!(
**:;	 22 
) )\-T$Z -dS$t* Sl34: 3lT
 F ;F !d !C !$t* !
T
 t  ?T ?T
 ?t ?*<4: <$t* < <0t  d $Z Dz	
  
d 
<<d< $Z< Dz	<
 < 
<*H&& 4S6 zF r3   