
    `gj:                     H   U d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	  ej                  e      Z e       Ze	ed<    ede      Zeed	<    ee      j%                         j&                  j&                  Zd
edefdZdedz  defdZddZdefdZdefdZdedz  fdZy)a>  Single source of truth for the agent working directory.

`TERMINAL_CWD` is the runtime carrier for the configured working directory
(design #19214/#19242: `terminal.cwd` is bridged once to `TERMINAL_CWD` at
gateway/cron startup). The local-CLI backend deliberately leaves it unset and
relies on the launch dir. Reading it in one place keeps the system prompt, the
tool surfaces, and context-file discovery agreeing on where the agent lives.

Multi-session gateways can pin a logical cwd via the `_SESSION_CWD`
contextvar; CLI/cron fall through to `TERMINAL_CWD`/launch cwd.
    N)
ContextVarToken)Path)Any_UNSETHERMES_SESSION_CWD)default_SESSION_CWDpreturnc                 |    	 | j                         } | t        k(  xs t        | j                  v S # t        $ r Y yw xY w)NF)resolve	Exception_PACKAGE_ROOTparents)r   s    D/root/.hermes/venv/lib/python3.12/site-packages/agent/runtime_cwd.py_is_install_treer   !   sA    IIK ;!))!;;  s   / 	;;cwdc                 P    t         j                  | xs dj                               S )z,Pin the logical cwd for the current context. )r
   setstrip)r   s    r   set_session_cwdr   ,   s     SYB--/00    c                  .    t         j                  d       y Nr   )r
   r    r   r   clear_session_cwdr   1   s    Rr   c                  n    t         j                         } | t        u ryt        |       j	                         S r   )r
   getr   strr   )values    r   _session_cwd_overrider#   5   s-    Eu:r   c                     t               } | rAt        |       j                         }|j                         r|S t        j                  d|        t        j                  j                  dd      j                         }|rAt        |      j                         }|j                         r|S t        j                  d|       t        t        j                               S Nz/configured working directory does not exist: %sTERMINAL_CWDr   zTERMINAL_CWD does not exist: %s)r#   r   
expanduseris_dirloggerwarningosenvironr    r   getcwdoverrider   raws      r   resolve_agent_cwdr1   <   s    $&HN%%'88:HH(S
**..
,
2
2
4C
I  "88:H8#>		r   c                     t               } | rBt        |       j                         }|j                         st        j                  d|        y |S t        j                  j                  dd      j                         }|rBt        |      j                         }|j                         st        j                  d|       y |S y r%   )
r#   r   r'   r(   r)   r*   r+   r,   r    r   r.   s      r   resolve_context_cwdr3   L   s     %&HN%%'xxzNNLhW  H
**..
,
2
2
4C
I  "xxzNN<cB  Hr   )r   N)__doc__loggingr+   contextvarsr   r   pathlibr   typingr   	getLogger__name__r)   objectr   __annotations__r
   __file__r   parentr   boolr   r!   r   r   r#   r1   r3   r   r   r   <module>r@      s   
  	 )  			8	$h %&:FKj K X&&(//66< < <1t 1 1
s 4  TD[ r   