+
    „WÝjK  ã                  óˆ  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHtHtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt Rdt ! R	 R
]P6                  4      t]! RRR7       ! R R4      4       t]! RRR7       ! R R4      4       t]. ]],          3,          t]! RRR7       ! R R4      4       t R R lt!]R R l4       t"R R lt#R R lt$RR/t%Rt&]PN                  ! 4       t(]PR                  R R l4       t*R  R! lt+R" R# lt,R$R/R% R& llt-R' R( lt.R) R* lt/R+ R, lt0R- R. lt1R/ R0 lt2R1 R2 lt3R3 R4 lt4R5 R6 lt5R7 R8 lt6R9 R: lt7R; R< lt8R=R/R> R? llt9R@ RA lt:RB RC lt;RD RE lt<RF RG lt= ! RH RI4      t>RJ RK lt?RL RM lt@RN RO ltARP RQ ltB]C! RR04      tD]C! 0 Rem4      tERS RT ltFRU RV ltGRWtH]C! RXRY04      tIRZ R[ ltJ]P–                  ]@3]P˜                  ]A3]Pš                  ]B3]Pœ                  ]F3]Pž                  ]G3]P                   ]J33tQR\]RR]&   R^ R_ ltSR` Ra ltTRb Rc ltUR# )fa‡  Has this OS user already used Hermes on this computer?

The desktop's welcome trial goes only to a first install, once per OS user, so ``onboarding.start``
asks this before it claims one. The answer is about the OS user, not the active profile: it looks at
every Hermes root the machine names (default roots, channel and package roots, the roots gateway
services and the ``hermes`` launcher point at) and at a marker file no Hermes setting can move.

This is product gating, not security: the inference API's limits stop abuse. So it reads only small
known files, never scans the disk, never writes into a Hermes root, and treats doubt as "used".
)ÚannotationsN)ÚCallableÚIterableÚIterator)Ú	dataclass)ÚcacheÚcached_property)Úglob©ÚPath)ÚAnyc                  ó:   € ] tR t^ tRtRtRtRtRtRt	Rt
RtR	tR
tR# )ÚEvidencezIWhy the machine counts as used. For logs and tests; never shown to users.zmachine-markerzonboarding-doneznamed-profilezprovider-configzprovider-keyzprovider-loginÚmessagesÚ
unreadable© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚMACHINE_MARKERÚONBOARDING_DONEÚNAMED_PROFILEÚPROVIDER_CONFIGÚPROVIDER_KEYÚPROVIDER_LOGINÚMESSAGESÚ
UNREADABLEÚ__static_attributes__r   ó    ÚLC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\install_state.pyr   r       s-   † ÙSà%€NØ'€OØ#€MØ'€OØ!€LØ%€NØ€HØ„Jr    r   T)ÚfrozenÚslotsc                  ó,   € ] tR t^-t$ R]R&   R]R&   RtR# )ÚFindingr   Úevidencer   Úwherer   N)r   r   r   r   Ú__annotations__r   r   r    r!   r%   r%   -   s   ‡ àÓØ‡Kr    r%   c                  óN   € ] tR t^3t$ R]R&   ]R R l4       t]R R l4       tRtR# )	ÚInstallStateztuple[Finding, ...]Úfindingsc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚboolr   )Úformats   "r!   Ú__annotate__ÚInstallState.__annotate__8   s   € ÷ #ñ #˜$ñ #r    c                	ó,   € \        V P                  4      # ©N)r0   r+   ©Úselfs   &r!   ÚexistingÚInstallState.existing7   s   € ä�D—M‘MÓ"Ð"r    c               ó   € V ^8„  d   QhRR/# r-   r   )r1   s   "r!   r2   r3   <   s   € ÷ !ñ !�tñ !r    c                	ó$   € V P                   '       * # r5   )r+   r6   s   &r!   ÚfreshÚInstallState.fresh;   s   € à—=‘=Ô Ð r    r   N)	r   r   r   r   r(   Úpropertyr8   r<   r   r   r    r!   r*   r*   3   s.   ‡ à!Ó!àô#ó ð#ð ô!ó ô!r    r*   c                  óT   € ] tR t^Ct$ RtR]R&   R]R&   R	tR]R&   ]R R l4       tR	t	R
# )ÚPlaceszUWhere to look. ``markers[0]`` is the marker this process writes; every entry is read.útuple[Path, ...]Úmarkersztuple[Source, ...]ÚsourcesÚ	protectedc               ó   € V ^8„  d   QhRR/# ©r.   r/   r@   r   )r1   s   "r!   r2   ÚPlaces.__annotate__L   s   € ÷ 
ñ 
 ñ 
r    c           	     	ó°   € ^ RI Hp V ! \        \        VP	                  4       4      4      \
        \        \        \        \        \        3\        4       R7      # )é    ©Ú
known_dirs)rB   rC   rD   )Úhermes_platform.resolverrK   ÚtupleÚ_expand_allÚmachine_marker_filesÚ_active_rootÚ_home_globsÚ_shared_auth_dirÚ_registry_homeÚ_service_homesÚ_launcher_rootÚ_protected_dirs)ÚclsrK   s   & r!   Úof_this_machineÚPlaces.of_this_machineK   sA   € å7áÜœ+ j×&EÑ&EÓ&GÓHÓIÜ!¤;Ô0@Ä.ÔR`ÔbpÐqÜ%Ó'ô
ð 	
r    r   N)
r   r   r   r   r   r(   rD   ÚclassmethodrX   r   r   r    r!   r@   r@   C   s.   ‡ á_àÓØÓØ"$€IÐÓ$àô
ó ô
r    r@   c               ó   € V ^8„  d   QhRR/# rF   r   )r1   s   "r!   r2   r2   V   s   € ÷ $ñ $˜ñ $r    c                 ó*   € \         P                  4       # )zDThe seam tests replace; production always looks at the real machine.)r@   rX   r   r    r!   Úmachine_placesr]   V   s   € ä×!Ñ!Ó#Ð#r    c               ó   € V ^8„  d   QhRR/# )r.   r/   r*   r   )r1   s   "r!   r2   r2   \   s   € ÷ 
ñ 
ˆ|ñ 
r    c                 óz  € \        4       p \        R V P                   4       R4      ;p'       d%   \        \	        \
        P                  V4      34      # \        V 4       FO  p\        W 4      ;p'       g   K  VP                  \
        P                  Jd   \        / RR7       \        V34      u # 	  \        R4      # )zUOne answer per process (the first finding wins). :func:`mark_machine_used` clears it.c              3  óT   "  € T F  qP                  4       '       g   K  Vx € K   	  R # 5ir5   )Úis_file)Ú.0Úms   & r!   Ú	<genexpr>Úprobe.<locals>.<genexpr>_   s   é € Ð@¡.˜Q·I±I·K—q’q£.ùs   ‚(ž
(NF)Úanswer_movedr   )r]   ÚnextrB   r*   r%   r   r   Úcandidate_rootsÚroot_evidencer&   r   Ú_write_marker)ÚplacesÚmarkerÚrootÚfindings       r!   Úprobero   [   s�   € ô Ó€FÜÑ@ &§.¢.Ó@À$ÓGÐG€vÖGÜœW¤X×%<Ñ%<¸fÓEÐGÓHÐHÜ Ö'ˆÜ# DÓ1Ð1ˆ7×1Ð1Ø×Ñ¤x×':Ñ':Ó:Ü˜b¨uÕ5Ü  
Ó+Ò+ñ	 (ô
 ˜ÓÐr    c               ó   € V ^8„  d   QhRR/# r-   r   )r1   s   "r!   r2   r2   i   s   € ÷ ñ ˜$ñ r    c                 ó*   € \        4       P                  # r5   )ro   r8   r   r    r!   Úexisting_installrr   i   s   € Ü‹7×ÑÐr    c               ó   € V ^8„  d   QhRR/# ©r.   r/   ÚNoner   )r1   s   "r!   r2   r2   m   s   € ÷ ñ ˜4ñ r    c                 ó   € \        / 4       R# )z¢Record that this OS user has a used install, or just claimed the trial. Atomic, idempotent.
Overwrites a reservation (:func:`reserve_trial`): a claim consumes it.N)rj   r   r    r!   Úmark_machine_usedrw   m   s   € ô �"Ör    ÚtrialÚreservedg      >@c               ó   € V ^8„  d   QhRR/# )r.   r/   zIterator[None]r   )r1   s   "r!   r2   r2   z   s   € ÷ ñ �Nñ r    c               #  óf  "  € \        4       p V P                  '       g   Rx € R# ^ RIHp V P                  ^ ,          P	                  V P                  ^ ,          P
                  R,           4      pV! V\        \        RV R24      ;_uu_ 4        Rx € RRR4       R#   + '       g   i     R# ; i5i)zØOne welcome-trial claim at a time for this OS user, whichever Hermes data root it runs from
(stable and canary started together hold different auth locks). Beside the marker it guards, and
taken before any auth lock.N)Ú
_file_lockz.lockz4Timed out waiting for the welcome-trial claim lock (Ú))r]   rB   Úhermes_cli.authr|   Ú	with_nameÚnameÚ_claim_lock_holderÚCLAIM_LOCK_TIMEOUT_SECONDS)rk   r|   Ú	lock_paths      r!   Ú
claim_lockr„   y   s�   é € ô
 Ó€FØ�>�>ˆ>ÛÙÝ*à—‘˜qÕ!×+Ñ+¨F¯N©N¸1Õ,=×,BÑ,BÀWÕ,LÓM€IÙ	�IÔ1Ô3MØJÈ9È+ÐUVÐW÷
Yõ 
Yã÷
Y÷ 
Y÷ 
Yò 
Yüs   ‚BB1ÂBÂ
B1ÂB.	Â(	B1c               ó   € V ^8„  d   QhRR/# rt   r   )r1   s   "r!   r2   r2   Š   s   € ÷ #ñ #�tñ #r    c                 ó$   € \        \        4       R# )a  The first desktop boot found a fresh install: keep the trial for it, so a later use (a chat
before onboarding ran, a key added) does not take it away. The marker also makes the probe read
"used" from now on; :func:`trial_reserved` is what the claim checks instead.N)rj   Ú_TRIAL_RESERVEDr   r    r!   Úreserve_trialrˆ   Š   s   € ô ”/Ö"r    c               ó   € V ^8„  d   QhRR/# r-   r   )r1   s   "r!   r2   r2   ‘   s   € ÷ _ñ _˜ñ _r    c                 ó²   € \         ;QJ d.    R  \        4       P                   4       F  '       g   K   R# 	  R# ! R  \        4       P                   4       4      # )c              3  óF   "  € T F  p\        V4      \        8H  x € K  	  R # 5ir5   )Ú_read_markerr‡   )rb   rl   s   & r!   rd   Ú!trial_reserved.<locals>.<genexpr>’   s   é € Ð^ÑE]¸6Œ|˜FÓ#¤Ö6ÓE]ùs   ‚!TF)Úanyr]   rB   r   r    r!   Útrial_reservedr�   ‘   s=   € ß‹3Ñ^Ä^ÓEU×E]ÒE]Ó^�3Œ3Ð^Š3Ð^ˆ3Ñ^Ä^ÓEU×E]ÒE]Ó^Ó^Ð^r    rf   c               ó$   € V ^8„  d   QhRRRRRR/# )r.   Úcontentzdict[str, str]rf   r0   r/   ru   r   )r1   s   "r!   r2   r2   •   s!   € ÷ $ñ $˜>ð $¸Dð $ÈDñ $r    c               ó"  € \        4       pVP                  '       d?   ^ RIHp VP                  ^ ,          pVP                  P                  RRR7       V! W@4       \        P                  4        V'       d   ^ RIH	p VP                  4        R# R# )rI   )Úatomic_json_writeT)ÚparentsÚexist_ok)Úonboarding_dueN)r]   rB   Úutilsr“   ÚparentÚmkdirro   Úcache_clearÚ
hermes_clir–   Ú
invalidate)r‘   rf   rk   r“   rl   r–   s   &$    r!   rj   rj   •   sf   € ÜÓ€FØ‡~‡~€~Ý+à—‘ Õ"ˆØ�‰×Ñ D°4ÐÔ8Ù˜&Ô*Ü	×ÑÔßÝ-à×!Ñ!Ö#ñ r    c               ó    € V ^8„  d   QhRRRR/# )r.   rl   r   r/   r   r   )r1   s   "r!   r2   r2   ¤   s   € ÷ ñ ˜ð  #ñ r    c                ó¬   €  V P                  4       '       d    \        P                  ! \        V 4      4      # R #   \        \
        \        3 d     R # i ; ir5   )ra   ÚjsonÚloadsÚ
_read_textÚOSErrorÚ
ValueErrorÚUnicodeError)rl   s   &r!   rŒ   rŒ   ¤   sE   € ðØ17·±×1AÒ1AŒt�zŠzœ* VÓ,Ó-ÐKÀtÐKøÜ”Z¤Ð.ô Úðús   ‚9 ˜9 ·9 ¹AÁAc               ó    € V ^8„  d   QhRRRR/# )r.   rk   r@   r/   úIterator[Path]r   )r1   s   "r!   r2   r2   ®   s   € ÷ ñ ˜Fð  ~ñ r    c              #  óÒ  "  € \        4       pV P                   F¶  pV! 4        F¨  p\        \        P                  P                  \        P                  P                  \        V4      4      4      4      p\        W@4      '       g*    VP                  4       pTP                  4       '       g   K‹  WA9  g   K“  VP                  V4       Vx € Kª  	  K¸  	  R#   \         d     KÀ  i ; i5i)zžEach named root once, existing directories only. A root inside a protected folder is yielded
unresolved: :func:`root_evidence` reports it without touching it.N)ÚsetrC   r   ÚosÚpathÚabspathÚ
expanduserÚstrÚ_is_protectedÚresolver¢   Úis_dirÚadd)rk   ÚseenÚsourceÚrawrª   s   &    r!   rh   rh   ®   s¦   é € ô “e€DØ—.”.ˆÙ–8ˆCÜœŸ™Ÿ™¬¯©×(:Ñ(:¼3¸s»8Ó(DÓEÓFˆDÜ  ×.Ò.ðØŸ<™<›>�Dð —{‘{—}’}ÙØÖØ—‘˜”Ø”
ó ó !øô ô Úðüs6   ‚BC'ÂCÂC'Â,C'Â6C'ÃC$Ã C'Ã#C$Ã$C'c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rª   r   rk   r@   r/   r0   r   )r1   s   "r!   r2   r2   Á   s!   € ÷ +ñ +˜ð + fð +°ñ +r    c                ó,   € \        WP                  4      # r5   )Ú_insiderD   )rª   rk   s   &&r!   r®   r®   Á   s   € Ü�4×)Ñ)Ó*Ð*r    c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rª   r   ÚdirsúIterable[Path]r/   r0   r   )r1   s   "r!   r2   r2   Å   s!   € ÷ =ñ =�$ð =˜nð =°ñ =r    c                óx   a € \         ;QJ d    V 3R  lV 4       F  '       g   K   R# 	  R# ! V 3R  lV 4       4      # )c              3  ó\   <"  € T F!  pSV8H  ;'       g    VSP                   9   x € K#  	  R # 5ir5   )r”   )rb   Údrª   s   & €r!   rd   Ú_inside.<locals>.<genexpr>Æ   s)   øé € Ð<±t°!ˆt�q‰y×-Ð-˜A §¡Ñ-Ô-³tùs   ƒ,”,TF)rŽ   )rª   r¹   s   f&r!   r·   r·   Å   s,   ø€ ß‹3Ô<±tÓ<�3Œ3Ð<Š3Ð<ˆ3Ô<±tÓ<Ó<Ð<r    c               ó   € V ^8„  d   QhRR/# )r.   r/   rA   r   )r1   s   "r!   r2   r2   É   s   € ÷ Gñ GÐ)ñ Gr    c                 óR   € ^ RI Hp  \        \        V P	                  4       4      4      # ©rI   rJ   )rL   rK   rM   rN   Úmac_privacy_protected_dirsrJ   s    r!   rV   rV   É   s   € Ý3ä”˜Z×BÑBÓDÓEÓFÐFr    c               ó    € V ^8„  d   QhRRRR/# )r.   ÚpatternszIterable[str]r/   r¦   r   )r1   s   "r!   r2   r2   Ï   s   € ÷ 
!ñ 
!˜-ð 
!¨Nñ 
!r    c              #  ó¢  a"  € V  FÁ  p\         P                  P                  \         P                  P                  V4      4      oRS9   g   RS9   d   KO  \        ;QJ d    V3R lR 4       F  '       g   K   RM	  RM! V3R lR 4       4      '       d&   R \        \        S4      4       4        Rj  x€L
  K´  \        S4      x € KÃ  	  R#  L5i)	z‡Expand ``~`` and environment variables (``$X`` on POSIX, ``%X%`` on Windows), then globs. An
entry naming an unset variable is dropped.Ú$Ú%c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5ir5   r   )rb   ÚchÚexpandeds   & €r!   rd   Ú_expand_all.<locals>.<genexpr>Ö   s   øé € Ð.© "�XŽ~«ùs   ƒz*?[TFc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir5   r
   )rb   Úhits   & r!   rd   rË   ×   s   é € ÐDÑ-C cœ˜SŸ	˜	Ó-Cùs   ‚N)r©   rª   r¬   Ú
expandvarsrŽ   Úsortedr	   r   )rÄ   ÚpatternrÊ   s   & @r!   rN   rN   Ï   s�   øé € ó ˆÜ—7‘7×%Ñ%¤b§g¡g×&8Ñ&8¸Ó&AÓBˆØ�(Œ?˜c XœoÙß‹3Ô.©Ó.�3�3Š3Ô.©Ó.×.Ò.ÙD¬V´D¸³NÔ-CÓD×DÒDä�x“.Ô ó ñ
 Eùs$   ƒACÁ CÁ7CÂCÂ3CÂ4Cc               ó   € V ^8„  d   QhRR/# ©r.   r/   rº   r   )r1   s   "r!   r2   r2   Ü   s   € ÷ Lñ L�nñ Lr    c                 ó.   € ^ RI Hp Hp V! 4       V ! 4       3# )rI   ©Ú!_get_platform_default_hermes_homeÚget_default_hermes_root)Úhermes_constantsrÕ   rÖ   rÔ   s     r!   rP   rP   Ü   s   € ß[á#Ó%Ñ'HÓ'JÐKÐKr    c               ó   € V ^8„  d   QhRR/# rÒ   r   )r1   s   "r!   r2   r2   â   s   € ÷ 7ñ 7�^ñ 7r    c                 ó@   € ^ RI Hp  \        V P                  4       4      # rÁ   )rL   rK   rN   Úhermes_home_globsrJ   s    r!   rQ   rQ   â   s   € Ý3ä�z×3Ñ3Ó5Ó6Ð6r    c               ó   € V ^8„  d   QhRR/# rÒ   r   )r1   s   "r!   r2   r2   è   s   € ÷ 'ñ '˜.ñ 'r    c                 óŠ   € \         P                  P                  R R4      P                  4       p V '       d   \	        V 4      3# R# )ÚHERMES_SHARED_AUTH_DIRÚ r   )r©   ÚenvironÚgetÚstripr   )r´   s    r!   rR   rR   è   s3   € Ü
�*‰*�.‰.Ð1°2Ó
6×
<Ñ
<Ó
>€CßŒD�‹Iˆ<Ð& BÐ&r    c               ó   € V ^8„  d   QhRR/# rÒ   r   )r1   s   "r!   r2   r2   í   s   € ÷ Qñ Q˜ñ Qr    c                 ó®  € \         P                  R8w  d   R# ^ RIp  V P                  V P                  R4      ;_uu_ 4       pV P                  VR4      w  r#RRR4       \        X4      P                  4       '       d3   \        \        P                  P                  \        T4      4      4      3# R#   + '       g   i     Lc; i  \         d    Ru # i ; i)zYThe ``HERMES_HOME`` older Windows installers saved for the user (the desktop honours it).Úwin32NÚEnvironmentÚHERMES_HOMEr   )ÚsysÚplatformÚwinregÚOpenKeyÚHKEY_CURRENT_USERÚQueryValueExr¢   r­   rá   r   r©   rª   rÎ   )ré   ÚkeyÚvalueÚ_kinds       r!   rS   rS   í   s¥   € ä
‡|�|�wÔØˆ	ÛðØ�^‰^˜F×4Ñ4°m×DÔDÈØ!×.Ñ.¨s°MÓB‰LˆE÷ Eô 7:¸%³j×6FÑ6F×6HÒ6HŒD”—‘×#Ñ#¤C¨£JÓ/Ó0Ð2ÐPÈbÐP÷	 E×Dûäô ØŠ	ðús/   �$C ÁB1ÁC Â1C	Â<C ÃC ÃCÃCc               ó   € V ^8„  d   QhRR/# rÒ   r   )r1   s   "r!   r2   r2   û   s   € ÷ Wñ W˜ñ Wr    c               #  ó@  "  € ^ RI Hp  ^ RIHp RVP	                  4       3RVP                  4       33 F+  w  r#\        V4       F  p\        WBR7       Rj  x€L
  K  	  K-  	  V P                  4        F"  p\        \        V4      RRR7       Rj  x€L
  K$  	  R#  LD L5i)zÝThe ``HERMES_HOME`` of every gateway service this OS user runs: its own definitions, the
machine-wide units that run as it, and the launchers its Scheduled Tasks start. Another account's
gateway is that account's install.)Úgateway_windowsrJ   FT)Úmachine_wideN©ró   Úfollow)
r›   rò   rL   rK   Ú gateway_service_definition_globsÚ'system_gateway_service_definition_globsrN   Ú_definition_homesÚregistered_task_launchersr   )rò   rK   ró   ÚglobsÚ
definitionÚlaunchers         r!   rT   rT   û   s“   é € õ +Ý3à!&¨
×(SÑ(SÓ(UÐ VØ!% z×'YÑ'YÓ'[Ð \ó ^Ñˆä% eÖ,ˆJÜ(¨ÔO×OÒOó -ñ ^ð $×=Ñ=Ö?ˆÜ$¤T¨(£^À%ÐPUÔV×VÒVó @ñ PáVùs$   ‚ABÁBÁ9BÂBÂBÂBrõ   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r.   rû   r   ró   r0   rõ   r/   r¦   r   )r1   s   "r!   r2   r2   
  s/   € ÷ [ñ [ $ð [¸ð [Àtð [ÐWeñ [r    c             #  ó‚  "  € ^ RI HpHp  \        V 4      p\        T4      ;'       g    T'       d   RMRpTe   \        T4      '       g   R# R T! T4       4        Rj  x€L
  T'       d1   T! T4       F"  p\        \        T4      RRR7       Rj  x€L
  K$  	  R# R#   \        \
        \        3 d     R# i ; i L[ L+5i)z›The homes one definition names, and those named by the launchers it starts (the Windows
Startup-folder fallback names only its launcher). Unreadable: none.)Úservice_definition_homesÚservice_definition_launchersNrm   c              3  ór   "  € T F-  p\        VP                  4       P                  R 4      4      x € K/  	  R# 5i)Ú"N)r   rá   )rb   Úhomes   & r!   rd   Ú$_definition_homes.<locals>.<genexpr>  s+   é € ÐYÑ:X°$”�T—Z‘Z“\×'Ñ'¨Ó,×-Ð-Ó:Xùs   ‚57Frô   )Ú hermes_cli.gateway_service_ownerrÿ   r   r¡   r¢   r¤   r£   Ú_unit_accountÚ_is_this_accountrø   r   )rû   ró   rõ   rÿ   r   ÚtextÚaccountrü   s   &$$     r!   rø   rø   
  s°   é € ÷ hðÜ˜*Ó%ˆô ˜DÓ!×GÐG·¡fÀ$€GØÒÔ#3°G×#<Ò#<ÙÙYÑ:RÐSWÔ:XÓY×YÐYßÙ4°TÖ:ˆHÜ(¬¨h«ÀeÐTYÔZ×ZÒZó ;ñ øô ”\¤:Ð.ô Úðúñ
 Zñ [ùsU   ‚	B?ŒB —B?©B?²-B?ÁB;Á B?Á,%B?ÂB=ÂB?ÂB8Â4B?Â7B8Â8B?Â=B?c               ó    € V ^8„  d   QhRRRR/# )r.   Úunitr­   r/   z
str | Noner   )r1   s   "r!   r2   r2     s   € ÷ .ñ .˜ð . 
ñ .r    c                óv   € \         P                  ! RV \         P                  R7      pV'       d
   VR,          # R# )zTThe account a systemd unit runs as (its last ``User=``), or None when it names none.z^\s*User=\s*(\S+)\s*$)ÚflagsNéÿÿÿÿ)ÚreÚfindallÚ	MULTILINE)r  Úaccountss   & r!   r  r    s*   € ä�zŠzÐ2°DÄÇÁÔM€Hß#ˆ8�B�<Ð-¨Ð-r    c               ó    € V ^8„  d   QhRRRR/# )r.   r	  r­   r/   r0   r   )r1   s   "r!   r2   r2   "  s   € ÷ ñ ˜cð  dñ r    c                óØ   € ^ RI p V P                  4       '       d   \        V 4      MVP                  V 4      P                  pT\        P                  ! 4       8H  #   \
         d     R# i ; i)rI   NF)ÚpwdÚisdigitÚintÚgetpwnamÚpw_uidÚKeyErrorr©   Úgetuid)r	  r  Úuids   &  r!   r  r  "  sW   € ÛðØ%Ÿo™o×/Ò/Œc�'Œl°S·\±\À'Ó5J×5QÑ5Qˆð ”"—)’)“+ÑÐøô ô Úðús   †A œ&A ÁA)Á(A)c               ó   € V ^8„  d   QhRR/# rÒ   r   )r1   s   "r!   r2   r2   ,  s   € ÷ ñ ˜ñ r    c                 óÖ  € ^ RI Hp  ^ RIHp V! R4      P                  pV'       g   R# \        4       p\        \        P                  P                  V^ ,          4      4      p\        WC4      '       g   VP                  4       p\        WC4      '       d   VP                  3# V ! V4      pV'       d   VP                  MR Uu. uF!  qfP                  R8X  g   K  VP                  NK#  	  ppV'       gl   VP                  P                  R8X  dQ   VP                  P                  P                  R8X  d,   VP                  P                  P                  P                  .pVR,          # u upi )	z\The root that owns the ``hermes`` on PATH: its launcher execs that root's ``tools/`` Python.)Ú_launcher_python)Úlocate_commandÚhermesÚtoolsÚbinz.hermes:Né   Nr   )Úhermes_cli._launchersr  rL   r   ÚcommandrV   r   r©   rª   r«   r·   r¯   r˜   r”   r€   )r  r   ÚfoundrD   rü   ÚpythonÚpÚownerss           r!   rU   rU   ,  s	  € å6Ý7á˜8Ó$×,Ñ,€EßØˆ	ÜÓ!€IÜ”B—G‘G—O‘O E¨!¥HÓ-Ó.€HÜ�8×'Ò'Ø×#Ñ#Ó%ˆÜˆx×#Ò#Ø—‘Ð!Ð!Ù˜hÓ'€Fß39 §¢¸rÐ!AÓXÑ!A˜1ÇfÁfÐPWÑFWŒhˆa�hŒhÑ!A€FÐXß�h—o‘o×*Ñ*¨eÔ3¸¿¹×8NÑ8N×8SÑ8SÐW`Ô8`Ø—/‘/×(Ñ(×/Ñ/×6Ñ6Ð7ˆØ�"�:Ðùò Ys   ÃE&ÃE&c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rm   r   rk   r@   r/   zFinding | Noner   )r1   s   "r!   r2   r2   D  s!   € ÷ 
ñ 
˜ð 
 fð 
°ñ 
r    c                ój  € \        W4      '       d   \        \        P                  V 4      # \	        WP
                  4      p\         F!  w  r4 V! V4      '       d   \        W04      u # K#  	  R #   \        \        \        \        P                  3 d     \        \        P                  T 4      u u # i ; ir5   )r®   r%   r   r   Ú_RootrD   ÚCHECKSr¢   r£   r¤   Úsqlite3ÚError)rm   rk   r  r&   Úchecks   &&   r!   ri   ri   D  s�   € Ü�T×"Ò"Ü”x×*Ñ*¨DÓ1Ð1Ü�×'Ñ'Ó(€Dß!‰ˆð	6Ù�T�{Š{Ü˜xÓ.Ò.ñ ñ "ñ øô œ¤\´7·=±=ÐAô 	6Üœ8×.Ñ.°Ó5Ô5ð	6ús   ÁA.Á.?B2Â1B2c                  ób   € ] tR tRtRtRR R lltR R lt]R R l4       t]R	 R
 l4       t	Rt
R# )r-  iQ  z‚One root's files, each read at most once. No ``load_config``: it writes SOUL.md and the
directory skeleton into the root it reads.c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rª   r   rD   rA   r/   ru   r   )r1   s   "r!   r2   Ú_Root.__annotate__U  s"   € ÷ #ñ #˜Tð #Ð.>ð #Èñ #r    c                	ó   € Wn         W n        R # r5   ©rª   rD   )r7   rª   rD   s   &&&r!   Ú__init__Ú_Root.__init__U  s   € ØŒ	Ø"Žr    c               ó    € V ^8„  d   QhRRRR/# )r.   r€   r­   r/   r   r   )r1   s   "r!   r2   r4  Y  s   € ÷ >ñ >˜ð > ñ >r    c                óP   € \        V P                  V,          V P                  4      # )z°*name* in this root, resolved before anything opens it. A link into a protected folder
raises: following it would raise the macOS permission prompt, so it counts as unreadable.)Ú_unprotectedrª   rD   )r7   r€   s   &&r!   ÚfileÚ
_Root.fileY  s   € ô ˜DŸI™I¨Õ,¨d¯n©nÓ=Ð=r    c               ó   € V ^8„  d   QhRR/# )r.   r/   údict[str, Any]r   )r1   s   "r!   r2   r4  _  s   € ÷ Dñ D˜ñ Dr    c                	ó@   € \        V P                  R 4      \        4      # )zconfig.yaml)Ú_read_mappingr<  Ú_parse_yamlr6   s   &r!   ÚconfigÚ_Root.config^  s   € ä˜TŸY™Y }Ó5´{ÓCÐCr    c               ó   € V ^8„  d   QhRR/# )r.   r/   ztuple[dict[str, Any], ...]r   )r1   s   "r!   r2   r4  c  s   € ÷ Sñ SÐ7ñ Sr    c                	ól   a € Rp\         ;QJ d    . V 3R lV 4       F  NK  	  5# ! V 3R lV 4       4      # )ú	auth.jsonc              3  óv   <"  € T F.  p\        SP                  V4      \        P                  4      x € K0  	  R # 5ir5   )rA  r<  rŸ   r    )rb   r€   r7   s   & €r!   rd   Ú$_Root.auth_stores.<locals>.<genexpr>f  s'   øé € ÐRÉEÀD”] 4§9¡9¨T£?´D·J±J×?Ð?ËEùs   ƒ69)rG  zshared/nous_auth.jsonznous_auth.json)rM   )r7   Únamess   f r!   Úauth_storesÚ_Root.auth_storesb  s-   ø€ ð IˆßŒuÔRÉEÓR�uÐRˆuÔRÉEÓRÓRÐRr    r6  N)r   )r   r   r   r   r   r7  r<  r   rC  rK  r   r   r    r!   r-  r-  Q  s=   † ñ2÷#õ>ð
 ôDó ðDð ôSó ôSr    r-  c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rª   r   rD   rA   r/   r   )r1   s   "r!   r2   r2   i  s"   € ÷ ñ �tð Ð(8ð ¸Tñ r    c                ód   € V P                  4       p\        W!4      '       d   \        V  R 24      hV# )z leads into a protected folder)r¯   r·   ÚPermissionError)rª   rD   Úresolveds   && r!   r;  r;  i  s0   € Ø�|‰|‹~€HÜˆx×#Ò#Ü  Ð&DÐEÓFÐFØ€Or    c               ó    € V ^8„  d   QhRRRR/# ©r.   r  r-  r/   r0   r   )r1   s   "r!   r2   r2   p  s   € ÷ Eñ E˜5ð E Tñ Er    c                óŽ   € V P                   P                  R 4      p\        V\        4      ;'       d    VP                  R4      RJ # )Ú
onboardingÚrunF)rC  rà   Ú
isinstanceÚdict)r  Úsections   & r!   Ú_onboarding_donerY  p  s7   € Ø�k‰k�o‰o˜lÓ+€GÜ�gœtÓ$×DÐD¨¯©°UÓ);¸uÐ)DÐDr    c               ó    € V ^8„  d   QhRRRR/# rR  r   )r1   s   "r!   r2   r2   u  s   € ÷ ñ ˜ð  4ñ r    c                óž  € ^ RI HpHpHp V P	                  R4      pVP                  4       '       g   R# VP                  4        F…  pVP                  R8X  g"   VP                  VP                  4      '       g   K7  \        WPP                  4      pVP                  4       '       g   Kd  V! V4      '       g   Kt  V! V4      '       d   K„   R# 	  R# )rI   )ÚPROFILE_ID_REÚnamed_profile_has_identityÚnamed_profile_is_deletedÚprofilesFÚdefaultT)r×   r\  r]  r^  r<  r°   Úiterdirr€   Úmatchr;  rD   )r  r\  r]  r^  r_  Úentrys   &     r!   Ú_named_profilerd  u  s”   € ßdÑdà�y‰y˜Ó$€HØ�?‰?×ÒÙØ×!Ñ!Ö#ˆØ�:‰:˜Ô"¨-×*=Ñ*=¸e¿j¹j×*IÒ*IÙÜ˜U§N¡NÓ3ˆØ�<‰<�>Œ>Ñ8¸×?Ô?ÑH`Ðaf×HgÔHgÚñ $ñ r    c               ó    € V ^8„  d   QhRRRR/# rR  r   )r1   s   "r!   r2   r2   „  s   € ÷ Nñ N˜5ð N Tñ Nr    c                óà   € V P                   P                  R 4      p\        V\        4      '       d   VP                  R4      MRp\        V\        4      ;'       d    VP                  4       R9  # )ÚmodelÚproviderN)rÞ   Úauto)rC  rà   rV  rW  r­   rá   )r  rg  rh  s   &  r!   Ú_provider_configrj  „  sQ   € Ø�K‰K�O‰O˜GÓ$€EÜ(2°5¼$×(?Ò(?ˆu�y‰y˜Ô$ÀT€HÜ�h¤Ó$×MÐM¨¯©Ó)9ÀÑ)MÐMr    ÚHERMES_ANON_API_SECRETc               ó    € V ^8„  d   QhRRRR/# rR  r   )r1   s   "r!   r2   r2   �  s   € ÷ >ñ >˜ð > $ñ >r    c                óH  a€ ^ RI Ho ^ RIHp V P	                  R4      pVP                  4       '       g   R# \        V4       \        ;QJ d3    V3R lV! V4      P                  4        4       F  '       g   K   R# 	  R# ! V3R lV! V4      P                  4        4       4      # )rI   )ÚOPTIONAL_ENV_VARS)Úload_env_filez.envFc              3  óÀ   <"  € T FS  w  rT;'       dC    V\         9  ;'       d2    SP                  V4      ;'       g    / P                  R 4      \        9   x € KU  	  R# 5i)ÚcategoryN)Ú_IGNORED_ENV_KEYSrà   Ú_USER_ENV_CATEGORIES)rb   rí   rî   rn  s   &  €r!   rd   Ú _provider_key.<locals>.<genexpr>˜  sg   øé € ð >á!<‘:�3ð ÷ ^ð ^˜Ô$5Ñ5÷ ^ð ^Ø%×)Ñ)¨#Ó.×4Ð4°"×9Ñ9¸*ÓEÔI]Ñ]ô^ã!<ùs   ƒA“A¤A½!AT)	Úhermes_cli.config_defaultsrn  Úagent.secret_scopero  r<  ra   r¡   rŽ   Úitems)r  ro  rª   rn  s   &  @r!   Ú_provider_keyrx  �  s„   ø€ Ý<å0à�9‰9�VÓ€DØ�<‰<�>Š>ÙÜˆtÔß‹3ô >á!.¨tÓ!4×!:Ñ!:Ô!<ó>�3Œ3ð >Š3ð >ˆ3ô >á!.¨tÓ!4×!:Ñ!:Ô!<ó>ó >ð >r    c               ó    € V ^8„  d   QhRRRR/# rR  r   )r1   s   "r!   r2   r2   �  s   € ÷ ñ ˜%ð  Dñ r    c                óz  € V P                    EF)  pVP                  R4      pVP                  R4      '       g6   \        V\        4      '       d#   \	        VP                  4       4      '       d    R# VP                  R4      '       g/   VP                  R4      '       g   VP                  R4      '       d    R# VP                  R4      pR \        V\        4      '       d   VP                  4       MR 4       p\        ;QJ d    R	 V 4       F  '       g   K   RM	  R
M! R	 V 4       4      '       g   EK)   R# 	  R
# )zßA login, an active provider or a guest (only a connector action or a trial claim makes one),
or a credential the user added by hand. Pool rows Hermes seeds on its own (shell env keys, other
tools' CLI logins) prove nothing.Ú	providersÚactive_providerTÚauth_methodÚ
anon_tokenÚrefresh_tokenÚcredential_poolc              3  ó˜   "  € T F@  p\        V\        4      '       g   K  V F  p\        V\        4      '       g   K  Vx € K!  	  KB  	  R # 5ir5   )rV  ÚlistrW  )rb   ÚrowsÚrows   &  r!   rd   Ú"_provider_login.<locals>.<genexpr>¨  s=   é € ð :Ñ!P˜ÔU_Ð`dÔfj×Uk”Û�C¤:¨c´4×#8÷ ’Ùñ Ó!Pùs   ‚A
ŸA
¼A
c              3  óŒ   "  € T F:  p\        VP                  R R4      4      P                  R^4      ^ ,          R8H  x € K<  	  R# 5i)r³   rÞ   Ú:ÚmanualN)r­   rà   Úsplit)rb   r„  s   & r!   rd   r…  ª  s9   é € ÐWÑRVÈ3Œs�3—7‘7˜8 RÓ(Ó)×/Ñ/°°QÓ7¸Õ:¸hÖFÓRVùs   ‚AAFr   )rK  rà   rV  rW  rŽ   Úvalues)r  Ústorer{  Úpoolrƒ  s   &    r!   Ú_provider_loginr�  �  sâ   € ð ×!Õ!ˆØ—I‘I˜kÓ*ˆ	Ø�9‰9Ð&×'Ò'¬J°yÄ$×,GÒ,GÌCÐPY×P`ÑP`ÓPb×LcÒLcÚØ�9‰9�]×#Ò# u§y¡y°×'>Ò'>À%Ç)Á)ÈO×B\ÒB\ÚØ�y‰yÐ*Ó+ˆñ:´*¸TÄ4×2HÒ2H §¡¤ÈbÐ!Pó :ˆç‹3ÑWÑRVÓW�3�3Š3ÑWÑRVÓW×WÕWÚñ "ñ r    g      ð?ÚSQLITE_BUSYÚSQLITE_LOCKEDc               ó    € V ^8„  d   QhRRRR/# rR  r   )r1   s   "r!   r2   r2   ³  s   € ÷ ñ �Eð ˜dñ r    c                ó6  € V P                  R 4      pVP                  4       '       g   R#  \        P                  ! \        P
                  ! VP                  4        R2R\        R7      4      ;_uu_ 4       pVP                  R4      P                  4       f    RRR4       R# VP                  R4      P                  4       RJuuRRR4       #   + '       g   i     R# ; i  \        P                   d#   p\        TRR	4      \        9   d    Rp?R# h Rp?ii ; i)
zstate.dbFz?mode=roT)ÚuriÚtimeoutzBSELECT 1 FROM sqlite_master WHERE type='table' AND name='messages'NzSELECT 1 FROM messages LIMIT 1Úsqlite_errornamerÞ   )r<  ra   Ú
contextlibÚclosingr/  ÚconnectÚas_uriÚ_DB_BUSY_SECONDSÚexecuteÚfetchoneÚOperationalErrorÚgetattrÚ_DB_BUSY_ERRORS)r  ÚdbÚconnÚexcs   &   r!   Ú	_messagesr¢  ³  sÖ   € Ø	�‰�:Ó	€BØ�:‰:�<Š<Ùð
Ü×Ò¤§¢°2·9±9³;°-¸xÐ0HÈdÔ\lÔ m×nÔnÐrvØ�|‰|Ð`Óa×jÑjÓlÒtØ÷ oÑnð —<‘<Ð @ÓA×JÑJÓLÐTXÐX÷ o×n×nÓnûô ×#Ñ#ô ô �3Ð*¨BÓ/´?ÔBÝØûðúsH   «A
C! Á5#CÂC! Â" CÃ
C! ÃC	ÃC! ÃC! Ã!DÃ6DÄDÄDz4tuple[tuple[Evidence, Callable[[_Root], bool]], ...]r.  c               ó    € V ^8„  d   QhRRRR/# )r.   rª   r   r/   r­   r   )r1   s   "r!   r2   r2   Ò  s   € ÷ 0ñ 0�Tð 0˜cñ 0r    c                ó–   € V P                  4       P                  \        8”  d   \        V  R \         R24      hV P	                  RR7      # )z is larger than z bytesz	utf-8-sig)Úencoding)ÚstatÚst_sizeÚ_MAX_FILE_BYTESr£   Ú	read_text)rª   s   &r!   r¡   r¡   Ò  sA   € Ø‡y�yƒ{×Ñœ_Ô,Ü˜D˜6Ð!1´/Ð1BÀ&ÐIÓJÐJØ�>‰> ;ˆ>Ó/Ð/r    c               ó$   € V ^8„  d   QhRRRRRR/# )r.   rª   r   ÚparsezCallable[[str], Any]r/   r?  r   )r1   s   "r!   r2   r2   Ø  s"   € ÷ 2ñ 2˜ð 2Ð%9ð 2¸nñ 2r    c                óˆ   € V P                  4       '       g   / # V! \        V 4      4      p\        V\        4      '       d   V# / # r5   )ra   r¡   rV  rW  )rª   r«  Údatas   && r!   rA  rA  Ø  s8   € Ø�<‰<�>Š>Øˆ	Ù”˜DÓ!Ó"€DÜ˜d¤D×)Ò)ˆ4Ð1¨rÐ1r    c               ó    € V ^8„  d   QhRRRR/# )r.   r  r­   r/   r   r   )r1   s   "r!   r2   r2   ß  s   € ÷ ,ñ ,�cð ,˜cñ ,r    c                óŠ   € ^ RI p VP                  V 4      #   TP                   d   p\        \	        T4      4      ThRp?ii ; i)rI   N)Úhermes_yamlÚ	safe_loadÚ	YAMLErrorr£   r­   )r  r°  r¡  s   &  r!   rB  rB  ß  sB   € Ûð,Ø×$Ñ$ TÓ*Ð*øØ× Ñ ô ,Üœ˜S›Ó"¨Ð+ûð,ús   † —A¨=½Ai   >   ÚtoolÚskillrh  Ú	messaging)VÚ__conditional_annotations__r   Ú
__future__r   r•  ÚenumrŸ   r©   r  r/  rç   Ú	threadingÚcollections.abcr   r   r   Údataclassesr   Ú	functoolsr   r   r	   Úpathlibr   Útypingr   r¨  ÚEnumr   r%   r*   ÚSourcer@   r]   ro   rr   rw   r‡   r‚   Úlocalr�   Úcontextmanagerr„   rˆ   r�   rj   rŒ   rh   r®   r·   rV   rN   rP   rQ   rR   rS   rT   rø   r  r  rU   ri   r-  r;  rY  rd  rj  Ú	frozensetrr  rs  rx  r�  r™  rž  r¢  r   r   r   r   r   r   r.  r(   r¡   rA  rB  )r¶  s   @r!   Ú<module>rÄ     ss  øðô	õ #ã Û Û Û 	Û 	Û Û 
Û ß 8Ñ 8Ý !ß ,Ý Ý Ý à€ô
ˆt�y‰yô 
ñ �$˜dÔ#÷ð ó $ðñ
 �$˜dÔ#÷	!ð 	!ó $ð	!ð 
�"�h˜t•nÐ$Õ	%€ñ �$˜dÔ#÷
ð 
ó $ð
õ$$ð
 ô
ó ð
õõð ˜JÐ'€à!Ð Ø—_’_Ó&Ð ð ×Ñôó ðõ #õ_ð$À4÷ $õõõ&+õ=õGõ
!õLõ7õ'õ
QõWð[Èd÷ [õ$.õõõ0
÷Sñ Sõ0õEõ
õNñ Ð7Ð8Ó9Ð Ù Ò!KÓLÐ õ>õð$ Ð Ù˜]¨OÐ<Ó=€õð& ×ÑÐ/Ð0Ø×Ñ˜^Ð,Ø×ÑÐ/Ð0Ø×Ñ˜MÐ*Ø×Ñ˜oÐ.Ø×Ñ˜	Ð"ð@€Ð<ó õ0õ2÷,r    