
    8#j
                    (   d Z ddlmZ ddlZddlZddlZddlZddlZ ej                  d      Z
ej                  j                  dd      Zej                  j                  dd      Zej                  j                  dd      xs eZddd	ZdddZedk(  r}ddlZ eej*                        dk  r ed        ej.                  d       ej*                  d   Zej*                  dd xs dgZ eeed      Z e ej6                  ed
d             yy)u  scope_violation_alert.py — Scope violation 별도 채널 helper (task-2370).

auto_merge.py 또는 task-scope-guard 흐름에서 import하여 send_scope_violation()을 호출.
환경변수:
  ANU_CONFIRM_BOT_TOKEN, SCOPE_VIOLATION_CHAT_ID (미설정 시 ANU_CONFIRM_CHAT_ID 사용)
    )annotationsNscope_violation_alertANU_CONFIRM_BOT_TOKEN ANU_CONFIRM_CHAT_IDSCOPE_VIOLATION_CHAT_IDc                   |xs i }d|  dddt        |       dg}|dd D ]  }|j                  d| d	        t        |      dkD  r|j                  d
t        |       d       |rQ|j                  d       |j                  d       |j                         D ]  \  }}|j                  d| d|         dj                  |      S )u*   ⚠️ SCOPE VIOLATION prefix + bold HTML.u   <b>⚠️ SCOPE VIOLATION — z</b>r   u   위반 파일/명령 (u   건):N   u     • <code>z</code>u     ... (총 u   건)u   컨텍스트:z  - z: 
)lenappenditemsjoin)task_id
violationscontextctxlinesvks          P/home/jay/workspace/.worktrees/task-2729+7-dev1/scripts/scope_violation_alert.pyformat_violation_messager      s    
-RC
(	6

 Z 17E
 _ 0|A3g./0
:{3z?"3489
R_%IIK 	*DAqLL4s"QC)	*99U    Fc                `   t        | ||      }t        }|rt        r|r.t        j	                  d|xs d dt        rdnd        dd||dS dt         d	}t
        j                  j                  ||d
d      j                  d      }	 t
        j                  j                  ||d      5 }t        j                  |j                         j                  d            cddd       S # 1 sw Y   yxY w# t        $ r1}	t        j!                  d|	        dt#        |	      |dcY d}	~	S d}	~	ww xY w)u5   Scope violation 알림 발송. 별도 chat_id 우선.zscope_violation dry-run: chat=unsetz, token=setFT)okdry_runtextchat_idzhttps://api.telegram.org/botz/sendMessageHTML)r    r   
parse_modezutf-8
   )datatimeoutNu   scope violation 발송 실패: )r   errorr   )r   
SCOPE_CHAT	BOT_TOKENloggerinfourllibparse	urlencodeencoderequesturlopenjsonloadsreaddecode	Exceptionr&   str)
r   r   r   r   r   r    urlpayloadrespexcs
             r   send_scope_violationr;   +   s   #GZADG)w4W5G4HZcQVipPqrsdwOO(<
@Cll$$&  vg	 
>^^##Cgr#B 	;d::diik009:	; 	; 	; >6se<=c#h==>s<   	"C3 +2C'	C3 'C0,C3 0C3 3	D-<&D("D-(D-__main__   zGUsage: scope_violation_alert.py <task_id> [violation1] [violation2] ...   z(no violations specified)T)r   )ensure_asciiindent)N)r   r6   r   	list[str]r   dict | Nonereturnr6   )NF)
r   r6   r   rA   r   rB   r   boolrC   dict)__doc__
__future__r   r1   loggingosurllib.parser+   urllib.request	getLoggerr)   environgetr(   PRIMARY_CHATr'   r   r;   __name__sysr   argvprintexittaskvsresultdumps r   r   <module>rZ      s   #   	  			2	3JJNN2B7	zz~~3R8ZZ^^5r:Jl
(>* z
388}qWX88A;D	!"	656B!$D9F	*$**V%
:; r   