
    i                        d Z ddlZddlZddlmZ  e ee      j                         j                  j                        Z	e	ej                  vrej                  j                  de	       ddlmZ ddededdfdZd	eddfd
Zdej$                  ddfdZdej$                  ddfdZdej$                  ddfdZdej$                  ddfdZdej.                  fdZddZedk(  r e        yy)u  CLI 메모리 검색 도구.

MemoryIndexer를 래핑하는 argparse 기반 커맨드라인 인터페이스.

사용 예시:
    python memory_search.py query "위임 규칙" --type feedback --limit 5
    python memory_search.py reindex
    python memory_search.py stats
    N)Path)MemoryIndexerresultslayerreturnc           	         | st        d       yt        | d      D ]  \  }}|j                  d      xs d}|j                  d      xs d}|j                  d      xs d}|j                  d	      xs d}|j                  d
      xs d}|j                  dd      }	|dk(  r8t        |	t              rd|	dnd}
|rd| dnd}t        d| d| | |
        |dk(  rut        |	t              rd|	dnd}
|rd| dnd}t        d| d| | |
        |r0dj                  |j                               }t        d|dd         t                9t        d| d|        g }|r|j                  d|        |r|j                  d|        |rt        ddj                  |              |rt        d|        |sdj                  |j                               }t        d|dd          t                y)u&   검색 결과를 보기 좋게 출력.u   검색 결과가 없습니다.N   title   (제목 없음)type team_id	file_pathsnippetscoreindexz score=z.2fz ()[z] summary u       미리보기: 2   z
[ztype=zteam=     | u       경로: i,  )print	enumerateget
isinstancefloatjoinsplitappend)r   r   irr
   rtypeteampathr   r   	score_strtype_strsnippet_clean
meta_partss                 D/home/jay/workspace/.worktrees/task-2116-dev1/utils/memory_search.py_print_resultsr,      s   ./'1% $B1g3"3f#uuY%2uu[!'R%%	"(bgr"G1;E51I'%-rI(-E7!}2HAaS5'(I;78i1;E51I'%-rI(-E7!}2HAaS5'(I;78 # 9*="+=*>?@G Cs"UG$%J!!E%/2!!E$.1UZZ
3456TF+, # 9*=#+>*?@AI$BL 
G    statsc                    t        d       t        d| j                  dd              | j                  di       }|r>t        d       t        |j                               D ]  \  }}t        d|dd	|         | j                  d
i       }|r>t        d       t        |j                               D ]  \  }}t        d|dd	|         | j                  d      }t        d|xs d        t                y)u"   통계 정보를 포맷팅 출력.u#   
=== 메모리 인덱스 통계 ===u     전체 문서 수   : totalr   by_typeu     타입별 분포    :r   20sz: by_teamu     팀별 분포      :last_indexedu     마지막 인덱싱  : u   없음N)r   r   sorteditems)r.   r1   tcntr3   r%   lasts          r+   _print_statsr:   H   s    	02	$UYYw%:$;
<=ii	2&G'(W]]_- 	)FAsD3r#'(	) ii	2&G&'0 	,ID#Dc
"SE*+	, 99^$D	%d&6h%7
89	Gr-   argsc                 "   t               }	 |j                  | j                  | j                  | j                  | j
                  | j                        }t        || j                         |j                          y # |j                          w xY w)N)querytype_filterteam_filterlimitr   )r   )	r   searchr=   r   r%   r@   r   r,   close)r;   indexerr   s      r+   	cmd_queryrD   a   sg    oG
..**				**** ! 
 	wdjj1s   AA< <Bc           
      d   t               }	 |j                  | j                        }|st        d       	 |j	                          y |D ]  }t        dd        t        d|j                  d       d|j                  dd              t        d	|j                  d
d       d|j                  dd              t        d|j                  dd              t        d        t        |j                  dd             t                 	 |j	                          y # |j	                          w xY w)Nu'   해당 ID의 메모리가 없습니다.
z<============================================================zID: idr   r
   r   u   타입: r   r   u    | 팀: r   u   경로: r   content)r   
get_by_idsidsr   rB   r   )r;   rC   r   r#   s       r+   cmd_getrK   p   s   oG$$TXX.;< 	  	ABvh- DtSw8I)J(KLMHQUU62./xi8L7MNOHQUU;3456VH!%%	2&'G	 	s   (D CD D/c                 H   t               }	 t        d       |j                         }t        d|j                  dd       d|j                  dd       d|j                  dd       d	|j                  d
d              |j	                          y # |j	                          w xY w)Nu)   전체 재인덱싱을 시작합니다...u   완료: 신규=indexedr   u	   , 갱신=updatedu	   , 스킵=skippedu	   , 오류=errors)r   r   reindex_allr   rB   )r;   rC   r.   s      r+   cmd_reindexrR      s    oG
9:##%eii	156 7ii	1-. /ii	1-. /ii!,-/	
 	s   A2B B!c                     t               }	 |j                         }t        |       |j                          y # |j                          w xY wN)r   r.   r:   rB   )r;   rC   results      r+   	cmd_statsrV      s4    oGVs	   8 A
c                     t        j                  dd      } | j                  dd      }d|_        |j	                  dd	
      }|j                  dd
       |j                  ddd d       |j                  ddd d       |j                  ddt        dd       |j                  dddg dd       |j                  t               |j	                  dd 
      }|j                  d!d"t        d#$       |j                  t               |j	                  d%d&
      }|j                  t               |j	                  d'd(
      }|j                  t               | S ))Nzmemory_search.pyu'   claude 메모리 SQLite FTS5 검색 CLI)progdescriptioncommandz{query,get,reindex,stats})destmetavarTr=   u   메모리 검색)helpu	   검색어z--typer   u"   type 필터 (diary, feedback, ...))r[   defaultr]   z--teamr%   u   team_id 필터z--limitr@      u   최대 결과 수 (기본 5))r[   r   r^   r]   z--layerr   full)r   r   r`   uM   출력 레이어 (index: ID/제목만, summary: +snippet 50자, full: 전체))r[   r^   choicesr]   )funcr   u.   ID로 메모리 전체 내용 조회 (Layer 3)rJ   +u   조회할 메모리 ID 목록)nargsr   r]   reindexu   전체 재인덱싱r.   u   인덱스 통계)argparseArgumentParseradd_subparsersrequired
add_parseradd_argumentintset_defaultsrD   rK   rR   rV   )parsersubp_queryp_get	p_reindexp_statss         r+   build_parserrt      sm   $$=F 

Y8S

TCCL nnW+=n>G{3CghCSTsALjk,\   i( NN5'WNXE	uCc8WX	G$ y/DEI, nnW+=n>Gi(Mr-   c                  Z    t               } | j                         }|j                  |       y rT   )rt   
parse_argsrb   )rn   r;   s     r+   mainrw      s"    ^FDIIdOr-   __main__)r`   )r   N)__doc__rf   syspathlibr   str__file__resolveparent_ROOTr&   insertutils.memory_indexerr   listr,   dictr:   	NamespacerD   rK   rR   rV   rg   rt   rw   __name__ r-   r+   <module>r      s    
  	DN""$++223HHOOAu .
,D , ,$ ,^  2H&& 4 ($$  &h(( T H&& 4 $h-- $N zF r-   