
    :bj	                         d Z ddlZddlZddlZddlmZ  ej                  d      ZdZdZ	de
defd	Zee	d
de
dz  de
de
dee
dz  e
f   fdZy)u   Worktree path resolver — task_id로부터 활성 worktree 디렉토리를 탐지.

codex_gate_check.py 등 외부 검증 도구가 main 브랜치가 아닌 진행 중인
worktree의 실제 변경분을 읽도록 돕는다.
    N)Pathworktree_resolverz+/home/jay/workspace/memory/task-timers.jsonz/home/jay/projectspathreturnc                     	 t        | dd      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w# t        $ r"}t        j                  d|       i cY d }~S d }~ww xY w)Nrzutf-8)encodingz task-timers.json load failed: %s)openjsonload	Exceptionloggerwarning)r   fes      H/home/jay/workspace/.worktrees/task-2696-dev7/utils/worktree_resolver.py_load_task_timersr      sX    $g. 	 !99Q<	  	  	  91=	s/   ; /	; 8; ; 	A&A!A&!A&)task_timers_pathprojects_roottask_idr   r   c                p   | syt        |      }|j                  di       j                  | i       }|j                  d      }|r=t        j                  j	                  |      rd|v rt
        j                  d|       |dfS g }t        |      }|j                         rf|j                         D ]S  }|dz  }	|	j                         s|	j                  |  d      D ]$  }
|
j                         s|j                  |
       & U |r1t        |d	 
      }t
        j                  d|       t        |      dfS y)u{  task_id에서 worktree 디렉토리 경로를 탐지.

    Returns:
        (path, source) — path가 None이면 worktree 없음.
        source: "task_timers" | "glob" | "none"

    탐지 순서:
      1. task-timers.json[task_id].worktree_path (있고 .worktrees 경로면)
      2. {projects_root}/*/.worktrees/{task_id}-* (최근 수정된 것)
      3. (None, "none")
    )Nnonetasksworktree_pathz/.worktrees/z%worktree resolved via task-timers: %stask_timersz
.worktreesz-*c                 6    | j                         j                  S )N)statst_mtime)ps    r   <lambda>z-resolve_worktree_target_dir.<locals>.<lambda>B   s    qvvx/@/@     )keyzworktree resolved via glob: %sglob)r   getosr   isdirr   infor   is_diriterdirr#   appendmaxstr)r   r   r   timers
task_entryexplicit
candidatesprojectsproject_dirwt_rootwtlatests               r   resolve_worktree_target_dirr6      s'   "  /0FGR(,,Wb9J~~o.HBGGMM(+(0J;XF&&  JM"H#++- 	*K!L0G>>#llgYb>2 *99;%%b)*		* Z%@A4f=6{F""r!   )__doc__r   loggingr%   pathlibr   	getLoggerr   DEFAULT_TASK_TIMERSDEFAULT_PROJECTS_ROOTr,   dictr   tupler6    r!   r   <module>r@      s   
   	 			.	/C , C D  0.	,4Z, , 	,
 3:s?,r!   