
    Pij                     x    d Z ddlZddl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)
u   
대화 감지 → 스펙 자동 추출 시스템

제이회장님과의 대화에서 프로젝트 요청을 감지하면
자동으로 spec-extractor.py를 호출하여 스펙 문서 생성
    N)datetime)Path)DictListOptionalc                   f    e Zd ZdZd Zdedee   fdZdedefdZ	ded	edefd
Z
dedee   fdZy)ConversationSpecWatcheru%   대화 감지 스펙 자동 추출기c                     t        d      | _        | j                  dz  dz  | _        | j                  j                  d       g d| _        y )Nz/home/jay/workspacememoryspecsT)exist_ok)u   (.+)만들고 싶어u   (.+)개발하고 싶어u   (.+)구현하고 싶어u!   (.+)서비스를 만들고 싶어u$   (.+)프로그램을 만들고 싶어u!   (.+)플랫폼을 만들고 싶어)r   workspace_path	specs_dirmkdirproject_patterns)selfs    Q/home/jay/workspace/.worktrees/task-2117-dev1/memory/conversation-spec-watcher.py__init__z ConversationSpecWatcher.__init__   sF    "#89,,x7'Ad+!
    messagereturnc                     | j                   D ]b  }t        j                  ||      }|s|j                  d      j	                         }d||t        j                         j                         dc S  y)u'   대화에서 프로젝트 요청 감지   T)detectedproject_descriptionoriginal_message	timestampN)r   researchgroupstripr   now	isoformat)r   r   patternmatchproject_descs        r   detect_project_requestz.ConversationSpecWatcher.detect_project_request"   sl     ,, 		GIIgw/E${{1~335 $+7(/!)!9!9!;	 			 r   r&   c                    ddl }|j                  ddd|gddt        | j                              }|j                  dk(  r 	 t        j                  |j                        S d|j                  dS #  dd	|j                  d
cY S xY w)u,   spec-extractor.py 호출하여 스펙 추출r   Npython3zmemory/spec-extractor.pyextractT)capture_outputtextcwderroru   스펙 추출 실패)statusr   output)r/   r   )	
subprocessrunstrr   
returncodejsonloadsstdoutstderr)r   r&   r1   results       r   extract_specz$ConversationSpecWatcher.extract_spec2   s     	 2I|LD''(	   
 !gzz&--00 &&--@@g")6LX^XeXeffs   A/ /Bspecproject_namec                    t        j                         j                  d      }| j                  | d| dz  }t	        |dd      5 }t        j                  ||dd	       d
d
d
       t        |      S # 1 sw Y   t        |      S xY w)u   스펙 문서 저장z%Y%m%d-%H%M%S-z.jsonwzutf-8)encodingF   ensure_asciiindentN)r   r"   strftimer   openr5   dumpr3   )r   r;   r<   r   	spec_filefs         r   	save_specz!ConversationSpecWatcher.save_specG   s}     LLN++O<	NN~Qyk%GG	)S73 	=qIIdAE!<	= 9~	= 9~s   A44Bc                     | j                  |      }|r|d   sy| j                  |d         }|j                  d      dk7  r;|j                  di       j                  dd      }| j                  ||      }d	|||d
S |S )u   메시지 처리 (진입점)r   Nr   r/   r.   projectnameunknownsuccess)r/   r<   rH   r;   )r'   r:   getrJ   )r   r   	detectionr;   r<   rH   s         r   process_messagez'ConversationSpecWatcher.process_messageR   s     //8		* 5   +@!AB 88H(88Ir266vyILt\:I'T]gkllr   N)__name__
__module____qualname____doc__r   r3   r   r   r'   r:   rJ   rR    r   r   r	   r	      sh    /
c htn  A A A*	d 	# 	# 	s x~ r   r	   c                     dd l } t               }t        | j                        dkD  rtdj	                  | j                  dd        }|j                  |      }|r"t        t        j                  |dd             y t        t        j                  ddi             y t        d	       t        d
       t        d       t        d       y )Nr   r    FrA   rB   r/   no_project_detectedu
   사용법:u9     python3 memory/conversation-spec-watcher.py <메시지>u   
예시:uJ     python3 memory/conversation-spec-watcher.py '쇼핑몰 만들고 싶어')	sysr	   lenargvjoinrR   printr5   dumps)r[   watcherr   r9   s       r   mainrb   h   s    %'G
388}q((388AB<(((1$**V%BC$**h(=>?@lIJkZ[r   __main__)rV   r5   r   r   pathlibr   typingr   r   r   r	   rb   rS   rW   r   r   <module>rf      sE     	   ' 'U Up\( zF r   