
    i%                     p   d Z ddlZddlZdedefdZdedefdZded	ed
edefdZ	e
dk(  r
ddlZddlZ eej                        dkD  rej                  dd Znhej                   j#                  ej                   j%                  e      dd      Z e ej                  ej                   j#                  ed                  Z ed        ed        ed       eD ]  Z ee      Z ee      Z ee         e         ed        ed        ed       ddddddgZg dZ e e	eed             yy)u   보고서 파서 유틸리티

보고서 md 파일을 파싱하여 핵심 정보를 추출하고,
텔레그램용 원라인 요약을 생성합니다.
    Nfilepathreturnc                 
   t        | dd      5 }|j                         }ddd       ddddddddg dddd}t        j                  d      }|r|j	                  d	      |d
<   nt        j                  d|      }|r|j	                  d	      |d
<   nZt
        j                  j                  t
        j                  j                  |             d   }t        j                  d|      r||d
<   t        j                  d|      }|rM|j	                  d	      j                         }t        j                  d|      }|r|j	                  d	      n||d<   t        j                  d|      }|r#|j	                  d	      j                         |d<   n:t        j                  d|      }|r"|j	                  d	      j                         |d<   t        j                  d|      }|r"|j	                  d	      j                         |d<   t        j                  d|      }||d<   t        j                  d|      }|rt        |j	                  d	            |d<   t        j                  d|      }	|	rt        |	j	                  d	            |d<   t        j                  d|      }
|
rt        |
j	                  d	            |d<   nbt        j                  d|      }|rXt        |j	                  d	            |d<   t        |j	                  d	            |d<   t        |j	                  d            |d<   nt        j                  d|      }|r@t        |j	                  d	            }||d<   t        j                  d |      r||d<   d|d<   nt        j                  d!|      }|r*t        |j	                  d	            }||d<   ||d<   d|d<   nXt        t        j                  d"|            }t        t        j                  d#|            }||z   dkD  r||z   |d<   ||d<   ||d<   t        j                  d$|      }|rt        |j	                  d	            |d%<   n5t        j                  d&|      }|rt        |j	                  d	            |d%<   t        j                  d't        j                        }t        j                  d(t        j                        }|j                  |      rd|d)<   n|j                  |      rd*|d)<   t        j                  d+|      }|r|j	                  d	      |d,<   t        j                  d-|      }|r|j	                  d	      |d.<   |S # 1 sw Y   :xY w)/u   보고서 md 파일을 파싱하여 핵심 정보를 dict로 반환합니다.

    Returns:
        dict with keys: task_id, team, summary, test_total, test_passed,
                        test_failed, bug_count, duration, files
    rzutf-8)encodingNr   F)task_idteamsummary
test_totaltest_passedtest_failed	bug_countdurationfilesmerge_neededmerge_branchmerge_worktreeu#   \*\*작업 ?ID\*\*\s*[:：]\s*(\S+)   r   z#\s+(task-[\d.]+)ztask-[\d.]+u)   [-*]*\s*\*{0,2}팀\*{0,2}\s*[:：]\s*(.+)z(dev\d+)r	   u)   \*\*?작업 ?요약\*?\*?\s*[:：]\s*(.+)r
   u!   \*\*?작업\*?\*?\s*[:：]\s*(.+)u5   [-*]*\s*\*{0,2}소요\s*시간\*{0,2}\s*[:：]\s*(.+)r   z`(/home/[^`]+)`r   u'   \*\*총 ?테스트\*\*\s*[:：]\s*(\d+)r   u   \*\*통과\*\*\s*[:：]\s*(\d+)r   u   \*\*실패\*\*\s*[:：]\s*(\d+)r   u;   전체\s*(\d+)\s*개?\s*테스트\s*통과.*?실패\s*(\d+)   zRan\s+(\d+)\s+tests?u   —\s*OK|--\s*OK|\bOK\bu*   모든\s*(\d+)\s*개?\s*테스트\s*통과u   \|\s*통과\s*\|u   \|\s*실패\s*\|u.   \*\*발견\s*버그\*\*\s*[:：]\s*(\d+)\s*건r   u   버그\s*(\d+)\s*건\s*발견u9   (머지|merge)\s*(필요\s*없음|필요없음|불필요)u   (merge\s*판단|머지\s*판단|merge\s*필요(?!\s*없음|없음)|머지\s*필요(?!\s*없음|없음)|아누에게\s*위임|아누\s*판단)r   Tz(task/task-\d+\.\d+-dev\d+)r   z>[`'\"](/home/jay/projects/[^`'\"]+/\.worktrees/[^`'\"]+)[`'\"]r   )openreadresearchgroupospathsplitextbasenamematchstripfindallintlencompile
IGNORECASE)r   fcontentresultmr   rawtmfile_matchesm2m3total
pass_count
fail_count_MERGE_NEGATIVE_MERGE_POSITIVEmbmws                     $/home/jay/workspace/report_parser.pyparse_reportr7      s    
hg	. !&&( F" 			8'BAGGAJy II*G4 !
F9 ww''(8(8(BCAFHxx1$,y! 			>HAggaj YY{C((*!v 			>HAGGAJ,,.yII:GD !
 0 0 2F9 			JGTAWWQZ--/z ::0':L"F7O 			<gFA"1771:|YY97C$'$4F=!YY97C$'$4F=! IITV]^#&qwwqz?F< $'
OF=!$'
OF=! 		17;AAGGAJ',|$997A,1F=),-F=) IIKWU
OE+0F<(,1F=),-F=) "%RZZ0CW%M!NJ!$RZZ0CW%M!NJ!J.2/9J/F|,0:}-0:}- 			CWMA!!''!*o{ II6@"%aggaj/F; jjD
O
 jj 	Y
O
 g&!&~				(!%~ 
17	;B	!#!~ 
TV]	^B	#%88A; M_ s   UU"report_dictc                    | }|j                  d      xs d}|j                  d      xs d}|j                  d      xs d}|j                  dd      }|j                  dd      }|j                  d	d      }|j                  d
d      }|dkD  }	|	rdnd}
|dkD  r|	r
d| d| d}nd| d| d}nd}|dkD  rd| dnd}|
 d| d| d| d| d| }|j                  d      r|dz  }|S )u  파싱된 보고서 dict를 텔레그램용 원라인 문자열로 변환합니다.

    Examples:
        '✅ task-9.2 완료 (dev2, 52초) | 테스트 23/23 통과 | 버그 없음'
        '❌ task-9.3 완료 (dev3, 2분16초) | 테스트 5/6 실패 | 버그 1건 수정'
    r   z???r	   r   ?r   r   r   r   r   u   ❌u   ✅u
   테스트 /u    실패u    통과u   테스트 없음u   버그 u
   건 수정u   버그 없음 u	    완료 (, z) |  | r   u    | 🔀 머지 필요)get)r8   dr   r	   r   r   r   r   r   has_failureicontest_strbug_strbases                 r6   summarize_onelinerF      s*    	AeeI'%G55=!EDuuZ 'CH|Q'J%%q)K%%q)Kk1%I /K5UD A~#K=*WEH#K=*WEH% 2;Q	{*-OGV1WIYtfBxjXJc'SDuu^''K    active_taskscompleted_taskstotal_tasksc                     t        |      }t        |       }||z
  |z
  }d| d| d}| r0| D cg c]  }|d    d|d     }}ddj                  |       d	}	nd
}	d| d}
| d|	 d|
 S c c}w )u  전체 진행 상황을 원라인 문자열로 요약합니다.

    Args:
        active_tasks: [{'team': 'dev1', 'task_id': 'task-6'}, ...]
        completed_tasks: ['task-1', 'task-2', ...]
        total_tasks: 전체 작업 수

    Returns:
        '📊 진행: 5/8 완료 | 🔄 dev1: task-6, dev2: task-7 작업중 | ⏳ 대기: 1건'

    Examples:
        >>> summarize_progress(
        ...     [{'team': 'dev1', 'task_id': 'task-6'}, {'team': 'dev2', 'task_id': 'task-7'}],
        ...     ['task-1', 'task-2', 'task-3', 'task-4', 'task-5'],
        ...     8
        ... )
        '📊 진행: 5/8 완료 | 🔄 dev1: task-6, dev2: task-7 작업중 | ⏳ 대기: 1건'
    u   📊 진행: r;   u    완료r	   z: r   u   🔄 r=   u
    작업중u   🔄 작업중 없음u   ⏳ 대기: u   건r>   )r#   join)rH   rI   rJ   completed_countactive_countwaiting_countprogress_strtactive_parts
active_strwait_strs              r6   summarize_progressrU      s    & /*O|$L/1L@M #?"31[MIL @LM11V9+R)~6MMTYY|45Z@
,
 m_C0H^3zl#hZ88 Ns   A,__main__r   memoryreportsz	task-*.mdzF======================================================================u$   보고서 원라인 요약 테스트zF----------------------------------------------------------------------u   진행 상황 요약 테스트dev1z	task-11.1)r	   r   dev2z	task-11.2)ztask-9.1ztask-9.2ztask-9.3z	task-10.1z	task-10.2   )__doc__r   r   strdictr7   rF   listr"   rU   __name__globsysr#   argvr   r   rL   dirname__file__reports_dirsortedprintr&   reportonelineactive	completed rG   r6   <module>rn      sn   
 	V3 V4 Vr#4 #C #L$9T $9D $9s $9WZ $9N z
388}q ggll277??8#<h	Rytyyk;!GHI	(O	
01	(O a#F+g
 
G	(O	
*+	(O K0K0F OI	
VY
23? rG   