
    (<i                         U d Z ddlZddlmZmZ g dZeeeeef      e	d<   ddddd	d
Z
eeef   e	d<   dddddd
Zeeef   e	d<   e G d d             ZdedefdZy)u  위험 명령어 승인 모듈.

명령어에서 위험 패턴을 탐지하고 위험 레벨을 판단합니다.
LLM 호출 없이 정규식 기반으로만 동작합니다.
Hermes Agent의 approval.py 패턴 목록을 참고하여 dev2-team 시스템에 맞게 재설계.

Usage:
    from utils.approval import check_command
    result = check_command("rm -rf /")
    if not result.is_safe:
        print(result.risk_level, result.matched_patterns)
    N)	dataclassfield))z*\brm\s+(-[^\s]*\s+)*-[^\s]*r[^\s]*\s+/\s*$rm -rf /critical)z\brm\s+-rf\s+/r   r   )z\bDROP\s+(TABLE|DATABASE)\bzDROP TABLE/DATABASEr   )z(:\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;\s*:z	fork bombr   )z\bdd\b[^\n]*\bif=/dev/zero\bzdd if=/dev/zeror   )z#\b(curl|wget)\b[^\n]*\|\s*(ba)?sh\bzcurl|bash remote executionhigh)z\beval\bzeval executionr   )z\brm\s+(-[^\s]*\s+)*-[^\s]*rzrm -rf recursive deleter   )z\bgit\s+push\b[^\n]*--force\bzgit push --forcer   )z\bchmod\b[^\n]*\b777\bz	chmod 777r   )z\bsudo\bsudomedium)z\bpip\s+install\bzpip installr	   )z4\bnpm\s+install\b[^\n]*\s-g\b|\bnpm\s+install\s+-g\bznpm install -gr	   )z$\bdocker\s+run\b[^\n]*--privileged\bzdocker run --privilegedr	   )z\bgit\s+reset\bz	git resetlow)z\bgit\s+checkout\s+\.zgit checkout .r
   	_PATTERNS            )safer
   r	   r   r   _LEVEL_PRIORITYu*   명령어를 실행해도 안전합니다.uM   낮은 위험도입니다. 의도한 동작인지 확인 후 실행하세요.uV   중간 위험도입니다. 영향 범위를 검토하고 신중하게 실행하세요.ua   높은 위험도입니다. 반드시 내용을 검토하고 책임자 승인 후 실행하세요.u   치명적 위험도입니다. 실행 시 복구 불가능한 손실이 발생할 수 있습니다. 실행을 강력히 거부합니다._RECOMMENDATIONSc                   V    e Zd ZU dZeed<   eed<    ee      Z	ee   ed<   dZ
eed<   y)	ApprovalResultu   명령어 승인 판단 결과.is_safe
risk_level)default_factorymatched_patterns recommendationN)__name__
__module____qualname____doc__bool__annotations__strr   listr   r        ?/home/jay/workspace/.worktrees/task-2057-dev2/utils/approval.pyr   r      s-    )MO"'"=d3i=NCr$   r   commandreturnc                 "   g }d}t         D ]h  \  }}}t        j                  || t        j                  t        j                  z        s>||vr|j                  |       t        |   t        |   kD  sg|}j |dk(  }t        |||t        |         S )u   명령어에서 위험 패턴을 탐지하고 위험 레벨을 반환합니다.

    Args:
        command: 검사할 셸 명령어 문자열.

    Returns:
        ApprovalResult: 위험 레벨, 매칭된 패턴 목록, 권고사항 포함.
    r   )r   r   r   r   )	r   research
IGNORECASEDOTALLappendr   r   r   )r&   matchedhighest_levelpatterndescriptionlevelr   s          r%   check_commandr3      s     GM'0 &#e99Wgr}}ryy'@A'){+u%(FF %& v%G  '6	 r$   )r   r)   dataclassesr   r   r   r"   tupler!   r    r   dictintr   r   r3   r#   r$   r%   <module>r8      s    
 (d)	4c3m$% dP #c3h  9Zfo Z$ $sCx.    3 > r$   