
    ie                        d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ  ee	      j                  j                  Zedz  dz  edz  dz  edz  d	z  d
ZdZdZddZ	 d	 	 	 	 	 	 	 	 	 	 	 ddZd Zedk(  r e        yy)u   
memory-search.py - 메모리 통합 검색 CLI 스크립트

검색 대상: memory/reports/*.md, memory/research/*.md, memory/learnings/*.md
    )annotationsN)datetime)Pathmemoryreportsresearch	learnings)reportr   r	         c                   t         dz  }|j                         s
t               S 	 t        |dd      5 }t	        j
                  |      }ddd       t               }j                         D ]<  \  }}t        |t              s|j                  d      | k(  s,|j                  |       > |S # 1 sw Y   dxY w# t        $ r t               cY S w xY w)uE   task-timers.json에서 특정 team_id에 속한 task ID 집합 반환ztask-timers.jsonrutf-8)encodingNteam_id)_workspace_direxistssetopenjsonloaditems
isinstancedictgetadd	Exception)r   timers_pathfdatatask_idstask_id_keyinfos          F/home/jay/workspace/.worktrees/task-2116-dev1/scripts/memory-search.pyload_team_idsr%      s     #55Ku	+sW5 	 99Q<D	 5!% 	*K$%$((9*=*H[)	* 	  	   us4   B8 B,	8B8 B8 B8 ,B51B8 8CCc                   t        j                  t        j                  |       t         j                        }d }|r%	 t	        j
                  |d      j                         }d }|rt        |      }|dk(  rt        t        j                               }n|t        v r|t        |   fg}ng }g }	|D ]  \  }
}|j                         st        |j                  d            D ]J  }||j                  }||vr|j!                         j"                  }t	        j$                  |      }|r|j                         |k7  r\	 |j'                  dd      }|j+                         }g }t-        |d      D ]j  \  }}|j/                  |      s|j1                         }t3        |      t4        kD  r	|d t4         }|j7                  ||d	       t3        |      t8        k\  sj n |s|j:                  }|	j7                  |j:                  |
d
| d|j:                   ||j=                  d      d       M  |	j?                  d d       |	d | S # t        $ r Y w xY w# t(        $ r Y w xY w)Nz%Y-%m-%dallz*.mdr   replace)r   errors   )start)line_numbertextzmemory//z%Y-%m-%dT%H:%M:%S)filenametypefilepathmatchesmodifiedc                    | d   S )Nr3    )xs    r$   <lambda>zsearch_files.<locals>.<lambda>{   s
    q}     T)keyreverse) recompileescape
IGNORECASEr   strptimedate
ValueErrorr%   listSEARCH_DIRSr   r   sortedglobstemstatst_mtimefromtimestamp	read_textr   
splitlines	enumeratesearchstriplenMAX_LINE_LENGTHappendMAX_MATCHES_PER_FILEnamestrftimesort)queryrecord_typeteamr@   limitpatternfilter_dateteam_task_idsdirs_to_searchresultsrtypedirpathmd_filerF   mtimemodified_dtcontentlinesr2   line_idxlinetrimmeddir_names                          r$   search_filesrj   -   sh    jj5)2==9G K	"++D*=BBDK
 M%d+ ek//12		#&K(@ABG( /w~~gll623 +	G(||}, LLN++E"007K{//1[@!++WY+O &&(EG"+E"; $>>$'"jjlG7|o5")*:?";NN8W#MN7|';;  ||HNN '!")(1W\\N C& + 4 45H IG+		/d LL,dL;6E?M  		L  s#   $I
 =I
	II	I'&I'c                    t        j                  d      } | j                  ddd       | j                  dg dd	d
       | j                  dd d       | j                  dd d       | j                  dt        dd       | j	                         }t        |j                  |j                  |j                  |j                  |j                        }t        t        j                  |dd             y )Nu   메모리 통합 검색 CLI)descriptionz--queryTu&   검색 키워드 (대소문자 무관))requiredhelpz--type)r
   r   r	   r'   r'   u"   검색 대상 타입 (기본: all))choicesdefaultrn   z--teamu(   팀 필터 (task-timers.json의 team_id))rp   rn   z--dateu3   날짜 필터 (YYYY-MM-DD, 파일 수정일 기준)z--limit2   u   최대 결과 수 (기본: 50))r0   rp   rn   )rV   rW   rX   r@   rY   F   )ensure_asciiindent)argparseArgumentParseradd_argumentint
parse_argsrj   rV   r0   rX   r@   rY   printr   dumps)parserargsr^   s      r$   mainr~      s    $$1NOF
	D7_`
:1	   $5_`
$5jk
	R>^_DjjIIYYYYjjG 
$**W5
;<r8   __main__)r   strreturnr   )r'   NNrq   )rV   r   rW   r   rX   
str | Noner@   r   rY   rx   r   rB   )__doc__
__future__r   ru   r   r;   r   pathlibr   __file__parentr   rC   rP   rR   r%   rj   r~   __name__r5   r8   r$   <module>r      s    #   	  h&&-- x')3)J6(*[8  $ jlPP P0:PISPcfP	Pf=4 zF r8   