
    Sib                        U d Z ddlmZ ddlmZmZ dg ddfdg dd	fd
g ddfdg ddfdg ddfdg ddfgZded<   d ee      z  Z	ded<   e G d d             Z
d dZd!dZy)"u  모호한 요청에 대한 구조화된 명확화 질문 생성 유틸리티.

5W1H 차원을 키워드 휴리스틱으로 분석하여 누락된 차원과 제안 질문을 반환한다.
외부 LLM 호출 없이 순수 키워드 기반으로 동작한다.

Usage:
    from utils.clarify import analyze_ambiguity
    report = analyze_ambiguity("뭔가 만들어줘")
    # report.score: 0~10, report.missing_dimensions: list, report.suggested_questions: list
    )annotations)	dataclassfieldWhat)!u   구현u   작성u   만들u   개발u   분석u   설계u   수정u   추가u   제거u   삭제u   생성u   빌드u   코드u   스크립트u   함수u   모듈u	   클래스APIu	   서비스u   기능u	   리팩터u   리팩토링u	   테스트u   문서   파일u	   보고서u	   페이지createwritebuild	implementdeveloprefactoru|   어떤 것을(무엇을) 만들거나 수행해야 하나요? 구체적인 산출물이나 작업 범위를 알려주세요.Why)u   위해u	   때문에u   목적u   이유u   배경u   동기u   원인u   필요u   향상u   개선u   해결u	   최적화u   효율u   성능u   품질u   용도u   활용u   사용u   보고u   제출forbecausepurposereasongoal	objectiveuy   왜 이 작업이 필요한가요? 목적이나 배경을 알려주시면 더 적합하게 도와드릴 수 있습니다.Where)u   서버u   데이터베이스DBr   u   클라우드u   로컬u   환경u   프론트엔드u	   백엔드u	   인프라u	   시스템u	   플랫폼u	   저장소u   레포u   리포지토리u   디렉터리u   폴더u   경로URLu   엔드포인트serverdatabasecloudlocalfrontendbackenduS   어디서(어느 환경·시스템·위치에서) 이 작업이 이루어지나요?When)u   오늘u   내일u
   이번 주u
   다음 주u
   이번 달u
   다음 달u	   월요일u	   화요일u	   수요일u	   목요일u	   금요일u   주말u   까지u   기한u   마감u   일정u   언제u   스프린트u	   릴리스todaytomorrowdeadlinesprintreleasebyuS   언제까지 완료해야 하나요? 기한이나 일정 정보를 알려주세요.Who)u   팀u	   개발자u	   사용자u   고객u	   관리자u	   운영자u	   담당자u   이해관계자u   팀장u	   매니저u   클라이언트u	   파트너u   나u   우리u   저u   제가team	developeruseradminmanagerclientu_   누가 사용하거나 관여하나요? 대상 사용자나 이해관계자를 알려주세요.How)u   방식u   방법u   절차u   단계u   프레임워크u   라이브러리u   언어u	   파이썬Pythonu   자바Javau   타입스크립트
TypeScriptRESTGraphQLgRPCSQLNoSQLu   으로u
   를 사용u
   을 사용u   기반u   통해howusingviawithmethodapproachuy   어떤 방법이나 기술 스택을 사용해야 하나요? 구현 방식에 대한 제약이 있다면 알려주세요.z list[tuple[str, list[str], str]]_DIMENSIONS      $@float_POINTS_PER_DIMc                  T    e Zd ZU dZded<    ee      Zded<    ee      Zded<   y)	AmbiguityReportu  모호성 분석 결과.

    Attributes:
        score:               모호성 점수 (0 = 명확, 10 = 매우 모호).
        missing_dimensions:  정보가 누락된 5W1H 차원 이름 목록.
        suggested_questions: 각 누락 차원에 대한 명확화 질문 목록.
    r>   score)default_factory	list[str]missing_dimensionssuggested_questionsN)	__name__
__module____qualname____doc____annotations__r   listrE   rF        >/home/jay/workspace/.worktrees/task-2117-dev1/utils/clarify.pyrA   rA      s.     L$)$$?	?%*4%@@rN   rA   c                L    | j                         t        fd|D              S )u9   텍스트에 키워드가 하나라도 포함되면 True.c              3  B   K   | ]  }|j                         v   y w)N)lower).0kwrR   s     rO   	<genexpr>z!_has_dimension.<locals>.<genexpr>   s     6rrxxzU"6s   )rR   any)textkeywordsrR   s     @rO   _has_dimensionrY      s    JJLE6X666rN   c                   g }g }t         D ]5  \  }}}t        | |      r|j                  |       |j                  |       7 t        |      }|dk(  rd}n(|t        t               k(  rd}nt	        |t
        z  d      }t        |||      S )u   요청 문자열의 모호성을 5W1H 키워드 휴리스틱으로 분석한다.

    Args:
        request: 분석할 요청 텍스트.

    Returns:
        AmbiguityReport — score(0~10), missing_dimensions, suggested_questions.
    r   g        r=      )rB   rE   rF   )r<   rY   appendlenroundr?   rA   )requestmissing_dimssuggested_qsdim_namerX   questionnrB   s           rO   analyze_ambiguityre      s     !L L(3 *$(Hgx0))*
 	LAAv	
c+	a/)1-'( rN   N)rW   strrX   rD   returnbool)r_   rf   rg   rA   )rJ   
__future__r   dataclassesr   r   r<   rK   r]   r?   rA   rY   re   rM   rN   rO   <module>rk      s   	 # (
 	"	
F 	GK&P 		
8 	D=B 		
8 	^=B 		
6 	^;@ 		
0 	j5: 		
> 	DC"GF1- FP K 00 0 A A A7rN   