
    Pi:                         d Z ddl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
mZ  G d d      Zd Zed	k(  r e        yy)
u   
자동 문서화 시스템
- 작업 완료 시 자동으로 문서 업데이트
- daily 업무일지 자동 업데이트
- 변경 이력 관리
- 진행 상황 추적
    N)datetime)Path)AnyDictListOptionalc            
           e Zd ZdZddefdZdeeef   fdZd Z	ddeded	ede
fd
Zdedededed	ef
dZdede
fdZdedede
fdZdeded	edefdZdedede
fdZddee   defdZy)AutoDocumenteru$   자동 문서화 시스템 클래스workspace_pathc                    t        |      | _        | j                  dz  | _        | j                  dz  | _        | j                  dz  | _        | j                  dz  | _        | j                  dz  | _        | j                  j                  dd       | j                         | _	        | j                  j                         s| j                          y y )Nmemorydailyzdocument-templates.jsonzCHANGELOG.mdzprogress-tracker.jsonT)parentsexist_ok)r   r   memory_path
daily_pathtemplates_pathchangelog_pathprogress_pathmkdir_load_templates	templatesexists_init_progress_tracker)selfr   s     E/home/jay/workspace/.worktrees/task-2117-dev1/memory/auto-document.py__init__zAutoDocumenter.__init__   s    ">2..9**W4"..1JJ"..?!--0GG 	dT: --/ !!((*'') +    returnc                     | j                   j                         r7t        | j                   dd      5 }t        j                  |      cddd       S ddddd	d
ddddS # 1 sw Y   yxY w)u   템플릿 로드rutf-8encodingNu+   # {date} 업무일지

## 완료된 작업
z1- [{time}] {task_type}: {description} - {result}
)headertask_templateu   # 변경 이력

## {date}
z(- [{time}] {change_type}: {description}
)r%   change_templateu/   # 진행 상황 추적

## 프로젝트 현황
uG   ### {project}
- 상태: {status}
- 마지막 업데이트: {timestamp}
)r%   project_template)	daily_log	changelogprogress)r   r   openjsonload)r   fs     r   r   zAutoDocumenter._load_templates'   s    %%'d))3A $Qyy|$ $ O%Y
 ?'R
 S(t 	$ $s   A!!A*c                     t        j                         j                         i g ddddd}t        | j                  dd      5 }t        j                  ||dd	       d
d
d
       y
# 1 sw Y   y
xY w)u   progress-tracker.json 초기화r   )total_taskssuccess_countfailure_count)createdprojectstasksstatswr"   r#      Findentensure_asciiN)r   now	isoformatr,   r   r-   dump)r   initial_datar/   s      r   r   z%AutoDocumenter._init_progress_tracker=   sn      ||~//1%&QO	
 $$$cG< 	EIIlAaeD	E 	E 	Es   A''A0	task_typedescriptionresultc                 ^   	 t        j                         }|j                  d      }|j                  d      }| j                  |||||       | }| j	                  ||       | j                  ||||       t        d| d| d|        y# t        $ r}t        d|        Y d}~y	d}~ww xY w)
u  
        작업 로그 기록

        Args:
            task_type: 작업 유형 (code, create, update, delete, test 등)
            description: 작업 설명
            result: 작업 결과 (success, failure, partial)

        Returns:
            성공 여부
        %H:%M:%S%Y-%m-%du"   ✅ 작업 로그 기록 완료: [] z - Tu!   ❌ 작업 로그 기록 실패: NF)r   r=   strftime_update_daily_logupdate_changelog_update_progress_trackerprint	Exception)	r   rA   rB   rC   	timestamptime_strdate_strchange_typees	            r   log_taskzAutoDocumenter.log_taskH   s    	 I ))*5H ))*5H ""8Xy+vV 'KK!!+{; )))[&)T6ykK=PSTZS[\] 	5aS9:	s   BB 	B,B''B,rP   rO   c                    | j                   | dz  }| j                  d   }|j                         s=|d   j                  |      }t	        |dd      5 }	|	j                  |       ddd       |d	   j                  ||||
      }
t	        |dd      5 }	|	j                  |
       ddd       y# 1 sw Y   JxY w# 1 sw Y   yxY w)u    Daily 로그 파일 업데이트.mdr)   r%   dater8   r"   r#   Nr&   )timerA   rB   rC   a)r   r   r   formatr,   write)r   rP   rO   rA   rB   rC   
daily_filetemplater%   r/   
task_entrys              r   rI   z AutoDocumenter._update_daily_logj   s    __(3'77
>>+.   "h'..H.=Fj#8  A  o.55YKPV 6 

 *cG4 	 GGJ	  	    	  	 s   B0B<0B9<Ccontentc                    	 t        j                         j                  d      }| j                  | dz  }|j	                         sL| j
                  d   }|d   j                  |      }t        |dd      5 }|j                  |       d	d	d	       t        |d
d      5 }|j                  d| d       d	d	d	       t        d|        y# 1 sw Y   DxY w# 1 sw Y   $xY w# t        $ r}t        d|        Y d	}~yd	}~ww xY w)u   
        Daily 업무일지 업데이트 (커스텀 내용 추가)

        Args:
            content: 추가할 내용

        Returns:
            성공 여부
        rF   rU   r)   r%   rV   r8   r"   r#   NrY   
u&   ✅ Daily 로그 업데이트 완료: Tu&   ❌ Daily 로그 업데이트 실패: F)r   r=   rH   r   r   r   rZ   r,   r[   rL   rM   )r   r_   rP   r\   r]   r%   r/   rR   s           r   update_daily_logzAutoDocumenter.update_daily_log}   s   	||~..z:HhZs+;;J $$&>>+6!(+222A*cG< $GGFO$ j#8 *A"WIR()* :8*EF$ $* *  	:1#>?	sH   A7C& 9CC& !C7C& CC& C#C& &	D/DDrQ   c                    	 t        j                         }|j                  d      }|j                  d      }| j                  d   }| j                  j                         s2t        | j                  dd      5 }|j                  d       ddd       t        | j                  d	d      5 }|j                         }ddd       d
| }	|d   j                  |||      }
|	v re|j                  d      }d}t        |      D ]  \  }}||	k(  s|dz   } n |j                  ||
j                  d             dj                  |      }nFd| d|
 }|j                  d      r|j!                  dd| dd      }nd| d|t#        d      d z   }t        | j                  dd      5 }|j                  |       ddd       y# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   yxY w# t$        $ r}t'        d|        Y d}~yd}~ww xY w)u   
        변경 이력 업데이트

        Args:
            change_type: 변경 유형 (added, changed, fixed, removed 등)
            description: 변경 설명

        Returns:
            성공 여부
        rE   rF   r*   r8   r"   r#   u   # 변경 이력

Nr!   z## r'   )rX   rQ   rB   ra   r      z
## z

Tu#   ❌ Changelog 업데이트 실패: F)r   r=   rH   r   r   r   r,   r[   readrZ   split	enumerateinsertrstripjoin
startswithreplacelenrM   rL   )r   rQ   rB   rN   rO   rP   r]   r/   r_   date_headerchange_entrylinesinsert_indexilinenew_sectionrR   s                    r   rJ   zAutoDocumenter.update_changelog   s'   3	 I ))*5H ))*5H~~k2H &&--/$--sWE 3GG123 d))3A #Q&&(#  z*K#$56==;K > L g%d+ (/ GAt{*'(1u
 \<+>+>t+DE))E* !&hZr,@%%&;<%oo.CGZ[fZggkElnopG 3K=EPSTiPjPlHmmG d))3A !Q ! M3 3# #>!  	7s;<	sn   A7G( 9G G( +G<AG( BG( 'G9G( GG( GG( G%!G( %G( (	H	1HH	rN   c                 ^   	 t        | j                  dd      5 }t        j                  |      }ddd       |j	                         |||d}d   j                  |       |d   dxx   d	z  cc<   |d
k(  r|d   dxx   d	z  cc<   n|dk(  r|d   dxx   d	z  cc<   t        |d         dkD  r|d   dd |d<   t        | j                  dd      5 }t        j                  ||dd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w# t        $ r}t        d|        Y d}~yd}~ww xY w)u   Progress tracker 업데이트r!   r"   r#   N)rN   typerB   rC   r6   r7   r1   rd   successr2   failurer3   i  ir8   r9   Fr:   u-   ⚠️ Progress tracker 업데이트 실패: )
r,   r   r-   r.   r>   appendrm   r?   rM   rL   )	r   rA   rB   rC   rN   r/   datar^   rR   s	            r   rK   z'AutoDocumenter._update_progress_tracker   sP   	Gd((#@ $Ayy|$
 '002!* 	J M  , M-(A-("Wo.!3.9$Wo.!3. 4=!D( $Wef 5Wd((#@ AA		$!%@A A/$ $.A A  	GA!EFF	GsL   D C3B D C?*D 3C<8D ?DD D 	D,D''D,projectstatusc                 T   	 t        | j                  dd      5 }t        j                  |      }ddd       t	        j
                         j                         }|d   vr|||g d|d   |<   n||d   |   d<   ||d   |   d<   |d   |   d	   j                  ||d
       t        | j                  dd      5 }t        j                  ||dd       ddd       t        d| d|        y# 1 sw Y   xY w# 1 sw Y   'xY w# t        $ r}t        d|        Y d}~yd}~ww xY w)u   
        진행 상황 추적

        Args:
            project: 프로젝트 이름
            status: 프로젝트 상태 (active, completed, on-hold, cancelled)

        Returns:
            성공 여부
        r!   r"   r#   Nr5   )r|   r4   last_updatedhistoryr|   r~   r   )r|   rN   r8   r9   Fr:   u-   ✅ 프로젝트 진행 상황 업데이트: u    → Tu!   ❌ 진행 상황 추적 실패: )r,   r   r-   r.   r   r=   r>   ry   r?   rL   rM   )r   r{   r|   r/   rz   rN   rR   s          r   track_progresszAutoDocumenter.track_progress   sM   	d((#@ $Ayy|$ !002I d:..$($-!	-Z ) 7=Z )(3<EZ ).9 W%i0776Xa8bcd((#@ AA		$!%@A A'%PVxXY1$ $(A A  	5aS9:	sF   D C.B
D :C:D .C73D :D?D 	D'D""D'NrW   c                 ~   	 |#t        j                         j                  d      }t        | j                  dd      5 }t        j                  |      }ddd       d   }|d   D cg c]  }|d   j                  |      s| }}t        d	 |D              }t        d
 |D              }dj                  |dd D 	cg c]  }	d|	d    d|	d     c}	      }
d| dt        |       d| d| d|
r|
nd d|d    d|d    d|d    d}|S # 1 sw Y   xY wc c}w c c}	w # t        $ r}d| cY d}~S d}~ww xY w)u   
        요약 생성

        Args:
            date: 요약할 날짜 (YYYY-MM-DD), None이면 오늘

        Returns:
            요약 문자열
        NrF   r!   r"   r#   r7   r6   rN   c              3   2   K   | ]  }|d    dk(  sd  yw)rC   rw   rd   N .0ts     r   	<genexpr>z2AutoDocumenter.generate_summary.<locals>.<genexpr>?       Sa!H+:RS   c              3   2   K   | ]  }|d    dk(  sd  yw)rC   rx   rd   Nr   r   s     r   r   z2AutoDocumenter.generate_summary.<locals>.<genexpr>@  r   r   ra   
   z- [rv   rG   rB   z# u/    요약

## 오늘의 통계
- 총 작업 수: u   
- 성공: u   
- 실패: u   

## 주요 작업
u   - 기록된 작업 없음u%   

## 전체 통계
- 총 작업 수: r1   u   
- 총 성공: r2   u   
- 총 실패: r3   u   ❌ 요약 생성 실패: )r   r=   rH   r,   r   r-   r.   rk   sumrj   rm   rM   )r   rW   r/   rz   r7   tasktoday_taskstoday_successtoday_failurer   major_taskssummaryrR   s                r   generate_summaryzAutoDocumenter.generate_summary'  s   '	4|||~..z: d((#@ $Ayy|$ ME -1M`DT+=N=Y=YZ^=_4`K`  S;SSMS;SSM ))T_`cacTd$eqs1V9+R-8H7I%J$efKTF # {#$ %/ /  !< = > '( )_%& '_%& 'G  N?$ $ a %f(  	4/s33	4sR   =D$ DD$ )DD8D$ ?D9D$ DD$ $	D<-D71D<7D<)z/home/jay/workspace)rw   )N)__name__
__module____qualname____doc__strr   r   r   r   r   boolrS   rI   rb   rJ   r   rK   r   r   r   r   r   r   r
   r
      s   .*s *$c3h ,	E #  C    UY  D #      [^  hk  &  @>C >c >d >@G# GC GQT Gai G@(c (3 (4 (T14Xc] 14c 14r   r
   c                      t        j                  dt         j                  d      } | j                  dd      }|j	                  dd	      }|j                  d
dd       |j                  ddd       |j                  ddd       |j	                  dd	      }|j                  ddd       |j	                  dd	      }|j                  d
dd       |j                  ddd       |j	                  dd	      }|j                  ddd       |j                  d dd!       |j	                  d"d#	      }|j                  d$d%	       | j                         }|j                  s| j                          y&t               }|j                  dk(  r2|j                  |j                  |j                  |j                         y&|j                  dk(  r|j                  |j                         y&|j                  dk(  r'|j!                  |j                  |j                         y&|j                  dk(  r'|j#                  |j$                  |j&                         y&|j                  d"k(  r%t)        |j+                  |j,                               y&y&)'u   CLI 인터페이스u   자동 문서화 시스템u(  
Examples:
  # 작업 로그 기록
  python3 auto-document.py log --type "code" --desc "Modified skill-router.py" --result "success"
  
  # Daily 로그에 커스텀 내용 추가
  python3 auto-document.py daily --content "오늘의 특이사항: ..."
  
  # Changelog 업데이트
  python3 auto-document.py changelog --type "added" --desc "New feature added"
  
  # 진행 상황 추적
  python3 auto-document.py progress --project "my-project" --status "active"
  
  # 요약 생성
  python3 auto-document.py summary --date "2025-02-27"
        )rB   formatter_classepilogcommandu   사용 가능한 명령어)desthelplogu   작업 로그 기록)r   z--typeTu6   작업 유형 (code, create, update, delete, test 등))requiredr   z--descu   작업 설명z--resultrw   u)   작업 결과 (success, failure, partial))defaultr   r   u   Daily 업무일지 업데이트z	--contentu   추가할 내용r*   u   변경 이력 업데이트u2   변경 유형 (added, changed, fixed, removed 등)u   변경 설명r+   u   진행 상황 추적z	--projectu   프로젝트 이름z--statusu;   프로젝트 상태 (active, completed, on-hold, cancelled)r   u   요약 생성z--dateu0   요약할 날짜 (YYYY-MM-DD), 기본값: 오늘N)argparseArgumentParserRawDescriptionHelpFormatteradd_subparsers
add_parseradd_argument
parse_argsr   
print_helpr
   rS   rv   descrC   rb   r_   rJ   r   r{   r|   rL   r   rW   )	parser
subparsers
log_parserdaily_parserchangelog_parserprogress_parsersummary_parserargsdocs	            r   mainr   [  s\   $$0 <<F, &&I<X&YJ &&u3I&JJHt:rsHt/JJ	@kl ((7X(YLkD?QR ",,[?[,\!!(T@t!u!!(T!P !++J=S+TO  tBW X  T(e ! 
  **9?*KN/abD<<

C||uTYY		4;;7		 T\\*		$TYY		2		#4<<5		"c""499-. 
#r   __main__)r   r   r-   osr   pathlibr   typingr   r   r   r   r
   r   r   r   r   r   <module>r      sI      	   , ,F4 F4R
E/P zF r   