
    i              	       T   d Z ddlZddlZddlmZ ddlmZmZmZ 	 ddl	m
Z
 ddlmZ ddlmZmZmZ  G d d	      Zd
 Zedk(  r e        yy# e$ rU ej$                  j'                  d e ee      j,                  j,                               ddl	m
Z
 ddlmZ ddlmZmZmZ Y tw xY w)u   
Red Team Orchestrator - 레드팀 통합 관리자

모든 검토자를 통합 관리하고 라우팅하는 orchestrator
의존성 주입 방식 (DIP 준수)
    N)Path)AnyDictMapping)ReviewerInterface)CodeReviewer)	log_errorlog_executionsetup_loggingc                   P    e Zd ZdZdeeef   fdZdededeee	f   fdZ
defdZy	)
RedTeamOrchestratoru   레드팀 통합 관리자	reviewersc           	          || _         t        d      | _        t        | j                  ddt	        |j                               i       y)u)  
        검토자 초기화 (의존성 주입)

        Args:
            reviewers: {
                "strategy": StrategyReviewer(),
                "marketing": MarketingReviewer(),
                "insurance": InsuranceReviewer(),
                "code": CodeReviewer()
            }
        zred_team.orchestratorzRedTeamOrchestrator initializedreviewer_typesN)r   r   loggerr
   listkeys)selfr   s     </home/jay/workspace/memory/red_team/red_team_orchestrator.py__init__zRedTeamOrchestrator.__init__   s?     ##$;<dkk#DGWY]^g^l^l^nYoFpq    doc_typedocreturnc           	      V   	 t        | j                  d||dd d       | j                  j                  |      }|spd| }t	        | j                  t        |      |t        | j                  j                               d       |t        | j                  j                               ddS |j                  |      }t        | j                  d	||j                  d
d      d       |S # t        $ r6}t	        | j                  |||dd d       t        |      dddcY d}~S d}~ww xY w)uA  
        문서 검토 (라우팅)

        Args:
            doc_type: "strategy"|"marketing"|"insurance"|"code"
            doc: 문서 내용 또는 파일 경로

        Returns:
            검토 결과 (해당 reviewer의 출력)

        Raises:
            ValueError: 알 수 없는 doc_type인 경우
        zReview requestedNd   )r   r   zUnknown doc_type: )r   available_typesunknown)errorr   
risk_levelzReview completedr    )r   r    criticalF)r   r    passed)r
   r   r   getr	   
ValueErrorr   r   review	Exceptionstr)r   r   r   reviewer	error_msgresultes          r   r%   zRedTeamOrchestrator.review-   s   	P/hsSWTWy1Y ~~))(3H0
;	KKy)!)d4>>CVCVCX>YZ
 "+tDNNDWDWDY?Zjstt__S)F"%VZZi5XY M 	Pdkk18CI&NO V:OO	Ps$   B)C) ,<C) )	D(2+D#D(#D(c                 H    t        | j                  j                               S )u   
        사용 가능한 검토 타입 반환

        Returns:
            ["strategy", "marketing", "insurance", "code"]
        )r   r   r   )r   s    r   get_available_typesz'RedTeamOrchestrator.get_available_typesW   s     DNN'')**r   N)__name__
__module____qualname____doc__r   r'   r   r   r   r   r%   r   r-    r   r   r   r      sQ    $r'#/@*@"A r (Ps (P (Pc3h (PT+T +r   r   c            
         t        t        j                        dk  r8t        t	        j
                  dddgd             t        j                  d       t        j                  d   } dt               i}t        |      }| dk(  r;t        t	        j
                  d	d
|j                         t        |      d             y| dk(  r3t        t	        j
                  |j                         dddd             y| dk(  rt        t        j                        dk  rEt        t	        j
                  dd|j                         d             t        j                  d       t        j                  d   }t        j                  d   }|j                  ||      }t        t	        j
                  |dd             yt        t	        j
                  d|  ddgd             t        j                  d       y)u   CLI 인터페이스   z1Usage: python3 red_team_orchestrator.py <command>typesr%   )r   commands   codetestloadedr   )statusorchestratorr   reviewers_loadeduO   현재 코드 검토만 지원. 전략/마케팅/보험은 추후 확장 예정)r   noteF)indentensure_ascii   z(review command requires doc_type and docz4python3 red_team_orchestrator.py review <type> <doc>)r   usager      zUnknown command: N)lensysargvprintjsondumpsexitr   r   r-   r%   )commandr   r<   r   r   r*   s         r   mainrL   a   s   
388}qJJ!Tcjltbuvw	
 	hhqkG 	I 'y1L&JJ&$9'3'G'G'I(+I			
 
G	JJ'3'G'G'Im "		
 
H	sxx=1

!K!W+7+K+K+M HHQK88A;hhqk$$Xs3djj>? 	djj%6wi#@wX`Nabcdr   __main__)r1   rH   rE   pathlibr   typingr   r   r   base_reviewerr   code_reviewerr   logging_configr	   r
   r   ImportErrorpathinsertr'   __file__parentr   rL   r.   r2   r   r   <module>rX      s     
  % %G/*FFD+ D+NEP zF m  GHHOOAs4>007789/*FF	Gs   A AB'&B'