
    Riv"              
       B   d Z ddlZddlZddlZddlmZ ddlmZ g dZ G d de	      Z
dZd	ed
edefdZd	edee   fdZdedeeef   fdZddededz  deeef   fdZddededededz  fdZddededee   fdZdej,                  fdZddZedk(  r e        yy)u   gen-skill-docs.py — SKILL.md 표준 템플릿 자동 생성/검증 도구

Usage:
    python3 gen-skill-docs.py [--skills-dir DIR] [--verify|--generate] [--skill NAME] [--dry-run]
    N)Path)Any)DescriptionTriggerUsageExamplesFilesc                       e Zd ZdZy)SkillsErroru   스킬 관련 오류N)__name__
__module____qualname____doc__     G/home/jay/workspace/.worktrees/task-2117-dev1/scripts/gen-skill-docs.pyr   r      s    r   r   uI  # {skill_name}

## Description
<!-- 스킬에 대한 설명을 작성하세요 -->

## Trigger
<!-- 이 스킬이 실행되는 조건/트리거를 작성하세요 -->

## Usage
<!-- 사용법을 작성하세요 -->

## Examples
<!-- 사용 예시를 작성하세요 -->

## Files
<!-- 관련 파일 목록을 작성하세요 -->
contentsection_namereturnc                     d| | v S )uE   content 에 ## <section_name> 헤더가 존재하는지 확인한다.z## r   )r   r   s     r   check_sectionr   6   s    7**r   c                 N    t         D cg c]  }t        | |      r| c}S c c}w )u=   표준 섹션 중 누락된 섹션명 목록을 반환한다.)REQUIRED_SECTIONSr   )r   ss     r   find_missing_sectionsr   ;   s    (J!gq0IAJJJs   ""	skill_dirc                     | j                   }| dz  }|j                         s|t        dd ddS |j                  dd      }t	        |      }|||sddS ddS )	uH   단일 스킬 디렉토리를 검증하고 결과 dict 를 반환한다.SKILL.mdNnon_compliant)skillmissing_sectionsstatusutf-8ignoreencodingerrors	compliant)nameexistsr   	read_textr   )r   
skill_nameskill_md_pathr   missings        r   verify_skillr/   C   s    J
*M! 1! 4%
 	
 %%wx%HG#G,G #%,+  3B r   
skills_dirr,   c                 "   t        |       j                         }|j                         r|j                         st	        d|        |7||z  }|j                         r|j                         st	        d|       |g}n8t        |j                         D cg c]  }|j                         s| c}      }g }|D ]  }|j                  t        |              t        d |D              }t        |      |z
  }	t        |      ||	|dS c c}w )uK   스킬 디렉토리를 스캔하여 SKILL.md 준수 여부를 검증한다.0   스킬 디렉토리를 찾을 수 없습니다: u#   스킬을 찾을 수 없습니다: c              3   2   K   | ]  }|d    dk(  sd  yw)r"   r(      Nr   ).0ds     r   	<genexpr>z verify_skills.<locals>.<genexpr>n   s     E!!H+*DAEs   )skills_checkedr(   r   details)r   
expanduserr*   is_dirr   sortediterdirappendr/   sumlen)
r0   r,   path
skill_path
skill_dirsr6   r9   r   r(   r   s
             r   verify_skillsrD   \   s   
&&(D;;=LZLYZZJ&
  "**;*;*= CJ<PQQ \
E1!((*QEF
$&G 0	|I./0 EwEEIL9,M g,&	  Fs   D.Ddry_runc                     t        |       j                         }|j                         r|j                         st	        d|        t
        j                  |      }|r|S |dz  }|j                  |d       y)u[   스킬 디렉토리에 SKILL.md 를 생성하거나 미리보기 문자열을 반환한다.r2   )r,   r   r#   )r&   N)r   r:   r*   r;   r   SKILL_MD_TEMPLATEformat
write_text)r   r,   rE   rA   r   r-   s         r   generate_skill_mdrJ   |   ss    	?%%'D;;=LYKXYY&&*&=G:%MWw7r   c                    t        |       j                         }|j                         r|j                         st	        d|        g }t        |j                               D ]  }|j                         s|dz  }|j                         r|j                  dd      }t        |      sHt        t        |      |j                  |       |j                  |j                          |S )uc   스킬 디렉토리 전체를 스캔하여 SKILL.md 가 없거나 미준수인 경우 생성한다.r2   r   r#   r$   r%   r   r,   rE   )r   r:   r*   r;   r   r<   r=   r+   r   rJ   strr)   r>   )r0   rE   rA   	generatedrB   r-   r   s          r   generate_all_skillsrO      s    
&&(D;;=LZLYZZIT\\^, *
  ""Z/!#--wx-PG(1C
O
Y`a)* r   c                  8   t        j                  dt         j                        } | j                  ddd       | j	                         }|j                  ddd	
       |j                  ddd
       | j                  dd d       | j                  ddd
       | S )Nu5   SKILL.md 표준 템플릿 자동 생성/검증 도구)descriptionformatter_classz--skills-dir~/.claude/skillsu.   스킬 디렉토리 (기본: ~/.claude/skills))defaulthelpz--verify
store_trueu   기존 SKILL.md 검증)actionrU   z
--generateu   SKILL.md 생성/갱신z--skillu   특정 스킬만 처리z	--dry-runu   변경 없이 미리보기)argparseArgumentParserRawDescriptionHelpFormatteradd_argumentadd_mutually_exclusive_group)parsermodes     r   build_parserr_      s    $$K <<F "=  
 ..0Dj<TUl<>VW
	46OP
L?[\Mr   c                     t               } | j                         }|j                  sd|_        	 |j                  rCt	        |j
                  |j                        }t        t        j                  |dd             y |j                  rk|j                  rt        |j
                        j                         }||j                  z  }|j                         s3t        d| t        j                         t        j                  d       t!        t#        |      |j                  |j$                  	      }|j$                  r|rt        d
       t        |       y t        d|dz          y t'        |j
                  |j$                        }|j$                  r.t        dt)        |       d       |D ]  }t        d|         y t        t)        |       d       |D ]  }t        d|         y y # t*        $ r=}t        d| t        j                         t        j                  d       Y d }~y d }~ww xY w)NT)r0   r,   F   )ensure_asciiindentu,   Error: 스킬 디렉토리가 없습니다: )filer4   rL   z--- dry-run preview ---u   생성 완료: r   )r0   rE   z	dry-run: u!   개 스킬 SKILL.md 생성 예정z  - u(   개 스킬 SKILL.md 생성/갱신 완료zError: )r_   
parse_argsgenerateverifyrD   r0   r    printjsondumpsr   r:   r*   sysstderrexitrJ   rM   rE   rO   r@   r   )	r]   argsresultskills_pathrB   previewrN   r)   excs	            r   mainrs      s   ^FD ==#;;"doo$**UF$**V%BC]]zz"4??3>>@(4::5
!((*HU\_\f\fgHHQK+!*o#zz LL
 <<G34'NOJ,C+DEF/4??TXT`T`a	<<Ic)n%55VWX ) -TFm,- S^,,TUV ) -TFm,-3 8  uoCJJ/s2   AG7 >CG7 G7 .AG7 	,G7 7	H= 3H88H=__main__)rS   N)F)rS   F)r   N)r   rX   ri   rk   pathlibr   typingr   r   	Exceptionr   rG   rM   boolr   listr   dictr/   rD   rJ   rO   rY   r_   rs   r   r   r   r   <module>r{      s(     
  
 M )  .+3 +c +d +
K3 K49 KD T#s(^ 2c C$J Z^_bdg_gZh @ #  QTW[Q[ &C t X\]`Xa 4h-- $+\ zF r   