
    (<i                     h    d Z ddlmZmZ dZdZdedededefd	Zd
edefdZ		 ddededededef
dZ
y)u:   Mutation 모듈 - SKILL.md에 딱 1가지 변경을 생성    )call_claudeestimate_tokensu	  
당신은 스킬 프롬프트 최적화 전문가입니다.
아래 스킬 프롬프트에서 **딱 1가지만** 변경하세요.

변경 유형 (하나만 선택):
- 규칙 추가: 새로운 규칙이나 제약 조건 1개 추가
- 예시 삽입: 좋은 예시 1개 추가
- 금지 목록: 금지 단어/표현 목록 추가
- 표현 수정: 기존 지시문 1개의 표현을 더 명확하게 수정
- 구조 변경: 지시 순서나 섹션 구조 1곳 변경
- 규칙 삭제: 효과 없어 보이는 규칙 1개 제거

체크리스트를 참고하여, 가장 효과적일 것 같은 변경을 선택하세요.

[현재 스킬 프롬프트]
{current_skill_md}

[체크리스트]
{checklist_yaml}

[이전 변경 로그 (최근 5개)]
{recent_changelog}

응답 형식:
1. 첫 줄에 "변경 유형: <유형>" 명시
2. 둘째 줄에 "변경 설명: <설명>" 명시
3. 빈 줄 후 "---MODIFIED_SKILL---" 구분자
4. 구분자 아래에 변경된 전체 스킬 프롬프트 출력 (프론트매터 제외, 마크다운 본문만)
z---MODIFIED_SKILL---current_skill_mdchecklist_yamlrecent_changelogreturnc                 2    t         j                  | ||      S )u   mutation 프롬프트를 조립r   r   r   )MUTATION_PROMPT_TEMPLATEformatr
   s      M/home/jay/workspace/.worktrees/task-2057-dev2/scripts/autoresearch/mutator.pybuild_mutation_promptr   &   s#    #**)%) +      response_textc                     t         | vrt        dt          d| dd       | j                  t         d      \  }}d}d}|j                         D ]n  }|j	                         }|j                  d      r|t        d      d j	                         }A|j                  d      sS|t        d      d j	                         }p |t        d      |t        d	      |j                  d
      }|j                         }|||dS )uC  LLM 응답을 파싱하여 mutation 결과 반환.

    Returns:
        {
            "mutation_type": str,       # 변경 유형
            "mutation_description": str, # 변경 설명
            "modified_skill_md": str,    # 변경된 스킬 마크다운 본문
        }

    Raises ValueError if parsing fails.
    u   응답에 구분자 'u   '가 없습니다. 응답: N      u   변경 유형:u   변경 설명:u2   응답에 '변경 유형:' 필드가 없습니다.u2   응답에 '변경 설명:' 필드가 없습니다.
)mutation_typemutation_descriptionmodified_skill_md)	
_SEPARATOR
ValueErrorsplit
splitlinesstrip
startswithlenlstriprstrip)r   header_part	body_partr   r   linestrippedr   s           r   parse_mutation_responser%   /   s.    &0<WXefjgjXkWnopp*00Q?K !%M'+&&( M::</0$S)9%:%<=CCEM  !12#+C0@,A,C#D#J#J#L M MNN#MNN "((.)002 ' 4. r   modelc                     t        | ||      }t        ||d      }t        |      }t        |      |d<   t        |      |d<   |S )u   LLM을 호출하여 mutation 생성.

    Returns: parse_mutation_response 결과 + {"input_tokens": int, "output_tokens": int}
    i    )promptr&   
max_tokensinput_tokensoutput_tokens)r   r   r%   r   )r   r   r   r&   r(   r   results          r   generate_mutationr-   \   sO     ##3^EUVFvUtLM$]3F,V4F>-m<F?Mr   N)zclaude-sonnet-4-6)__doc__autoresearch.claude_runnerr   r   r   r   strr   dictr%   r-    r   r   <module>r3      s    @ C < $
C  X[ `c *3 *4 *b %	  	
 
r   