+
    iHà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	H
t
Ht ^ RIHt ^ RIHtHtHtHt ^ RIHtHtHtHtHtHtHt ^ RIHtHt ]P<                  ! ]4      t / t!R]"R	&   / t#R
]"R&   / t$R]"R&   Rs%]PL                  ! 4       t'R<t(]
 ! R R4      4       t)]
 ! R R4      4       t*]
 ! R R4      4       t+R R lt,RRRRRR/R R llt-R R lt.RR/R R llt/RR/R  R! llt0RR/R" R# llt1RR/R$ R% llt2R& R' lt3R( R) lt4R* R+ lt5R, R- lt6R. R/ lt7RR/R0 R1 llt8R2 R3 lt9R4 R5 lt:R=t;R6 R7 lt< ! R8 R94      t=R>R: R; llt>R# )?uz  Secret-source registry + apply orchestrator.

Owns everything that must be uniform across backends: registration
(name/scheme uniqueness, API-version gating), the wall-clock timeout around
``fetch()``, precedence (mapped beats bulk; within a shape ``secrets.sources``
order, else registration order; first claim wins), ``override_existing``
semantics (may beat .env/shell, never another source, never a protected var),
cross-source conflict warnings, and provenance. Startup entry point:
:func:`apply_all` via ``hermes_cli.env_loader``; plugins register through
``PluginContext.register_secret_source()`` â†’ :func:`register_source`.
)ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚDictÚListÚMutableMappingÚOptional)ÚSECRET_SOURCE_API_VERSIONÚ	ErrorKindÚFetchResultÚSecretSourceÚis_valid_env_nameÚreset_source_environmentÚset_source_environment)Úhermes_home_keyÚnormalize_scopeúdict[str, SecretSource]Ú_SOURCESúdict[str, str]Ú_SOURCE_ORIGINSz"dict[str, dict[str, SecretSource]]Ú_SCOPED_SOURCESFc                  óR   € ] tR t^/t$ RtR]R&   R]R&   R]R&   R]R&   RtR]R	&   R
tR# )Ú
AppliedVarz7Provenance record for one env var the orchestrator set.ÚstrÚnameÚsourceÚshapeÚboolÚoverrode_envFÚauthoritative© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r    Ú__static_attributes__r!   ó    ÚB/home/ubuntu/.hermes/hermes-agent/agent/secret_sources/registry.pyr   r   /   s&   ‡ áAà
ƒIØƒKØƒJØÓð  €M�4×r)   r   c                  óÆ   € ] tR t^<t$ RtR]R&   R]R&   R]R&   ]! ]R7      tR]R	&   ]! ]R7      t	R]R
&   ]! ]R7      t
R]R&   ]! ]R7      tR]R&   ]! ]R7      tR]R&   RtR# )ÚSourceReportz4One source's outcome within an :class:`ApplyReport`.r   r   Úlabelr   Úresult©Údefault_factoryú	list[str]ÚappliedÚskipped_existingÚskipped_claimedÚskipped_protectedÚskipped_invalidr!   N)r"   r#   r$   r%   r&   r'   r   Úlistr2   r3   r4   r5   r6   r(   r!   r)   r*   r,   r,   <   sb   ‡ á>à
ƒIØƒJØÓÙ¨tÔ4€GˆYÓ4Ù"'¸Ô"=Ð�iÓ=Ù!&°tÔ!<€O�YÓ<Ù#(¸Ô#>Ð�yÓ>Ù!&°tÔ!<€O�Y×<r)   r,   c                  ó†   € ] tR t^Jt$ Rt]! ]R7      tR]R&   ]! ]	R7      t
R]R&   ]! ]R7      tR]R&   ]R	 R
 l4       tRtR# )ÚApplyReportz.Merged outcome of one orchestrated apply pass.r/   zlist[SourceReport]Úsourceszdict[str, AppliedVar]Ú
provenancer1   Ú	conflictsc               ó   € V ^8„  d   QhRR/# )é   Úreturnr   r!   )Úformats   "r*   Ú__annotate__ÚApplyReport.__annotate__S   s   € ÷ %ñ %˜Tñ %r)   c                	ó,   € \        V P                  4      # ©N)r   r;   )Úselfs   &r*   Úapplied_anyÚApplyReport.applied_anyR   s   € ä�D—O‘OÓ$Ð$r)   r!   N)r"   r#   r$   r%   r&   r   r7   r:   r'   Údictr;   r<   ÚpropertyrF   r(   r!   r)   r*   r9   r9   J   sF   ‡ á8á"'¸Ô"=€GÐÓ=Ù(-¸dÔ(C€JÐ%ÓCÙ °Ô6€IˆyÓ6àô%ó ô%r)   r9   c               ó    € V ^8„  d   QhRRRR/# )r>   r   r   r?   úOptional[str]r!   )r@   s   "r*   rA   rA   Z   s   € ÷ ñ ˜\ð ¨mñ r)   c                ó   € \        V \        4      '       g   RV : R2# V P                  ;'       g    RpV'       d;   VP                  RR4      P	                  4       '       d   WP                  4       8w  d   RV: 2# V P                  \        8w  d   RV RV P                   R\         2# V P                  R9  d   RV R	V P                  : 2# R
# )zJReason a source is unregistrable (already formatted for the log), or None.zIgnoring secret source z$: does not inherit from SecretSourceÚ Ú_z)Ignoring secret source with invalid name zIgnoring secret source 'z$': built against secret-source API vz, this Hermes speaks vz)': shape must be 'mapped' or 'bulk', got N)ÚmappedÚbulk)	Ú
isinstancer   r   ÚreplaceÚisalnumÚlowerÚapi_versionr
   r   )r   r   s   & r*   Ú_validate_sourcerV   Z   sÌ   € ä�fœl×+Ò+Ø(¨©
Ð2VÐWÐWØ�;‰;×Ð˜"€Dß�t—|‘| C¨Ó,×4Ñ4×6Ò6¸$Ç*Á*Ã,Ô:NØ:¸4¹(ÐCÐCØ×ÑÔ6Ô6Ø*¨4¨&ð 1Ø×&Ñ&Ð'Ð'=Ô>WÐ=XðZð 	[à‡|�|Ð-Ô-Ø)¨$¨Ð/XÐY_×YeÑYeÑXhÐiÐiÙr)   rR   ÚbuiltinÚscopec          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r>   r   r   rR   r   rW   rX   rK   r?   r!   )r@   s   "r*   rA   rA   i   s1   € ÷ ñ ˜Lð °dð ÈTð Ø(ðØ48ñr)   c               óÞ  a a€ \        S 4      pV'       d   \        P                  V4       R# \        V4      pS P                  o\
        ;_uu_ 4        \        \        4      pVe&   VP                  \        P                  V/ 4      4       SV9   d*   V'       g"   \        P                  RS4        RRR4       R# \        VV 3R lVP                  4        4       R4      pV'       d.   \        P                  RSS P                  V4        RRR4       R# Vf   \        M\        P                  V/ 4      pS VS&   Vf   V'       d   RMR\        S&   RRR4       R#   + '       g   i     R# ; i)	zÉRegister a secret source; True on success. Rejections are logged, never
raised. ``replace`` allows same-name override (last-writer-wins); scheme
collisions across *different* names are always rejected.FNz9Secret source '%s' already registered; ignoring duplicatec              3  ó    <"  € T FC  w  rVS8w  g   K  SP                   '       g   K"  VP                   SP                   8X  g   K?  Vx € KE  	  R # 5irD   )Úscheme)Ú.0ÚnÚor   r   s   &  €€r*   Ú	<genexpr>Ú"register_source.<locals>.<genexpr>{   sE   øé € ð TÑ$5™D˜AØ˜d™ô Ø'-§}¥}ô Ø9:¿¹ÀVÇ]Á]Ñ9R÷ ’aÓ$5ùs   ƒA“A§AÁ
AzKIgnoring secret source '%s': scheme '%s://' is already owned by source '%s'rW   ÚpluginT)rV   ÚloggerÚwarningr   r   Ú_REGISTRY_LOCKrH   r   Úupdater   ÚgetÚnextÚitemsr\   Ú
setdefaultr   )	r   rR   rW   rX   ÚproblemÚ	effectiveÚownerÚtargetr   s	   f$$$    @r*   Úregister_sourcero   i   s!  ù€ ô
 ˜vÓ&€GßÜ�‰�wÔÙÜ˜EÓ"€EØ�;‰;€Dß	ŽÜœ“Nˆ	ØÒØ×Ñœ_×0Ñ0°¸Ó;Ô<Ø�9Ô§WÜ�N‰NÐVÐX\Ô]Ø÷ 
‰ô õ T I§O¡OÔ$5ó TØUYó[ˆçÜ�N‰NÐhØ §¡°ô7à÷ 
‰ð #š]•´×0JÑ0JÈ5ÐRTÓ0UˆØˆˆt‰ØŠ=ß18¡I¸hŒO˜DÑ!÷! 
ñ" ÷# 
Žñ" ús&   ÁAEÂEÂ;AEÄ0EÅEÅE,	c               ó    € V ^8„  d   QhRRRR/# )r>   rX   rK   r?   r   r!   )r@   s   "r*   rA   rA   ˆ   s   € ÷ ñ �=ð Ð%<ñ r)   c                ó€   € \        \        4      pVP                  \        P	                  \        V 4      / 4      4       V# )zOGlobal sources overlaid with the scope's (default: current home) registrations.)rH   r   rf   r   rg   r   )rX   Úmergeds   & r*   Ú_mergedrs   ˆ   s.   € ä”(‹^€FØ
‡M�M”/×%Ñ%¤o°eÓ&<¸bÓAÔBØ€Mr)   c               ó$   € V ^8„  d   QhRRRRRR/# ©r>   r   r   rX   rK   r?   úOptional[SecretSource]r!   )r@   s   "r*   rA   rA   �   s"   € ÷ (ñ (�Sð ( Mð (Ð=Sñ (r)   c               ó¤   € \        4        \        ;_uu_ 4        \        V4      P                  V 4      uuR R R 4       #   + '       g   i     R # ; irD   )Ú_ensure_builtin_sourcesre   rs   rg   ©r   rX   s   &$r*   Ú
get_sourcerz   �   s+   € ÜÔß	ŽÜ�u‹~×!Ñ! $Ó'÷ 
��‹ús	   ™>¾A	c               ó$   € V ^8„  d   QhRRRRRR/# ru   r!   )r@   s   "r*   rA   rA   •   s'   € ÷ Yñ Y ð Y¨}ð YÐH^ñ Yr)   c               óä   € \        4        \        V4      p\        ;_uu_ 4        Vf   \        M\        P                  V/ 4      P                  V 4      uuRRR4       #   + '       g   i     R# ; i)z<Return the registration owned by exactly one registry layer.N)rx   r   re   r   r   rg   ry   s   &$r*   Úsnapshot_registrationr}   •   sE   € äÔÜ˜EÓ"€Eß	ŽØ!šM•¬×/BÑ/BÀ5È"Ó/M×RÑRÐSWÓX÷ 
��‹ús   ¤/AÁA/	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r>   r   r   Úcurrentr   Úpreviousrv   rX   rK   r?   r   r!   )r@   s   "r*   rA   rA   �   s2   € ÷ ñ ˜sð ¨\ð ÐE[ð Ø -ðØ9=ñr)   c               ó€  € \        4        \        V4      p\        ;_uu_ 4        Vf   \        M\        P                  V/ 4      pVP                  V 4      VJd    RRR4       R# Vf   VP                  V R4       MW$V &   Ve   V'       g   \        P                  VR4       RRR4       R#   + '       g   i     R# ; i)z@Restore a host-owned source registration if it is still current.NFT)rx   r   re   r   r   rj   rg   Úpop)r   r   r€   rX   rn   s   &&&$ r*   Úrestore_registrationrƒ   �   s™   € ô ÔÜ˜EÓ"€Eß	ŽØ"š]•´×0JÑ0JÈ5ÐRTÓ0UˆØ�:‰:�dÓ 7Ó*Ø÷ 
‰ð ÒØ�J‰J�t˜TÕ"à#�4‰LØÒ§VÜ×Ñ  tÔ,÷ 
ñ ÷ 
Žñ ús   ¤7B,Á%&B,ÂB,Â,B=	c               ó    € V ^8„  d   QhRRRR/# )r>   rX   rK   r?   úlist[SecretSource]r!   )r@   s   "r*   rA   rA   ¯   s   € ÷ -ñ -˜=ð -Ð4Fñ -r)   c                ó´   € \        4        \        ;_uu_ 4        \        \        V 4      P	                  4       4      uuR R R 4       #   + '       g   i     R # ; irD   )rx   re   r7   rs   Úvalues©rX   s   $r*   Úlist_sourcesr‰   ¯   s.   € ÜÔß	ŽÜ”G˜E“N×)Ñ)Ó+Ó,÷ 
��‹ús   ™"AÁA	c               ó   € V ^8„  d   QhRR/# )r>   r?   r…   r!   )r@   s   "r*   rA   rA   µ   s   € ÷ %ñ %Ð/ñ %r)   c            	     óŽ  € \        4        \        ;_uu_ 4        \        P                  4        U Uu/ uF#  w  r\        P                  V 4      R8X  g   K!  WbK%  	  pp pVP                  \        P                  \        4       / 4      4       \        VP                  4       4      uuRRR4       # u upp i   + '       g   i     R# ; i)u¥  Sources registered outside the bundled set: global ``"plugin"`` origins
plus every scoped registration (bundled sources register with scope=None).

Includes both legacy global plugin registrations (``_SOURCE_ORIGINS == "plugin"``) and the current
scope's profile-keyed registrations â€” every scoped entry is plugin-registered by definition, since
bundled sources register with ``scope=None`` (#64229 profile isolation).
rb   N)rx   re   r   ri   r   rg   rf   r   r   r7   r‡   )r^   Úsrr   s      r*   Úlist_plugin_sourcesr�   µ   sƒ   € ô Ôß	ŽÜ#+§>¡>Ô#3ÔZÑ#3™4˜1´×7JÑ7JÈ1Ó7MÐQYÑ7Y”$�!’$Ñ#3ˆÑZØ�‰”o×)Ñ)¬/Ó*;¸RÓ@ÔAÜ�F—M‘M“OÓ$÷ 
ŠùÛZ÷ 
�ˆús#   ™B3±B-
ÁB-
ÁAB3Â-B3Â3C	c               ó   € V ^8„  d   QhRR/# ©r>   r?   ÚNoner!   )r@   s   "r*   rA   rA   Ä   s   € ÷ dñ d ñ dr)   c            
     óT  € \         ;_uu_ 4        \        '       d    RRR4       R# Rs\         F/  w  rp \        W.R7      p\	        \        W14      ! 4       RR7       K1  	  RRR4       R#   \         d    \        P                  RTRR7        Kc  i ; i  + '       g   i     R# ; i)z‡Idempotently register the bundled sources (lazy so import stays cheap;
per-source guarded so one broken source can't block the others).NT)Úfromlist)rW   z+Failed to register bundled %s secret source©Úexc_info)	re   Ú_BUILTINS_LOADEDÚ_BUILTIN_SOURCESÚ
__import__ro   ÚgetattrÚ	Exceptionrc   rd   )Úmodule_nameÚ
class_namer-   Úmodules       r*   rx   rx   Ä   sŒ   € ÷ 
ŽßÓØ÷ 
‰ð  Ðß.>Ñ*ˆK UðdÜ# K¸,ÔG�Ü¤¨Ô ;Ó =Àt×Lñ /?÷	 
‰øô ô dÜ—‘ÐLÈeÐ^b�×cðdú÷ 
�ˆús3   �B§B¶(A,ÁBÁ,#B	ÂBÂB	ÂBÂB'	c               ó   € V ^8„  d   QhRR/# r�   r!   )r@   s   "r*   rA   rA   Ô   s   € ÷ !ñ ! 4ñ !r)   c                 óØ   € \         ;_uu_ 4        \        P                  4        \        P                  4        \        P                  4        R sRRR4       R#   + '       g   i     R# ; i)FN)re   r   Úclearr   r   r•   r!   r)   r*   Ú_reset_registry_for_testsr    Ô   s;   € ç	ŽÜ�‰ÔÜ×ÑÔÜ×ÑÔØ Ð÷	 
��Šús   �?AÁA)	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r>   r   r   ÚcfgrH   Ú	home_pathr   ÚenvironúMutableMapping[str, str]r?   r   r!   )r@   s   "r*   rA   rA   à   s1   € ÷ #ñ # ð #°4ð #ÀDð #Ø!9ð#Ø>Iñ#r)   c                óº  a aaa€ S P                  S4      p\        P                  P                  ^RS P                   2R7      p R VVVV 3R llpVP                  V4      p VP                  VR7      p TP                  R
R7       \%        T\        4      '       g@   \        4       P                  R\        T4      P                    R2\        P"                  4      # T#   \        P                  P                   d`    TP                  4        \        4       P                  RTR RS P                   R	2\        P                  4      u TP                  R
R7       # \         d^   p	\        4       P                  R\        T	4      P                    RT	 2\        P"                  4      u Rp	?	TP                  R
R7       # Rp	?	ii ; i  TP                  R
R7       i ; i)u  Run source.fetch() under a wall-clock budget; never raises.

A worker thread enforces the budget: a source that blows it is reported as
TIMEOUT and its eventual result discarded (the thread may linger until
process exit â€” acceptable for a startup-only path).
zsecret-src-)Úmax_workersÚthread_name_prefixc               ó   € V ^8„  d   QhRR/# )r>   r?   r   r!   )r@   s   "r*   rA   Ú)_fetch_with_timeout.<locals>.__annotate__ë   s   € ÷ 	0ñ 	0˜ñ 	0r)   c                 óv   <€ \        S4      p  SP                  SS4      \        V 4       #   \        T 4       i ; irD   )r   Úfetchr   )Útokenr¢   r¤   r£   r   s    €€€€r*   Ú_fetchÚ#_fetch_with_timeout.<locals>._fetchë   s2   ø€ Ü*¨7Ó3ˆEð0Ø—|‘| C¨Ó3ä(¨Õ/øÔ(¨Õ/ús   Ž+ «8)Útimeoutzfetch exceeded z.0fuB   s budget â€” startup continued without this source (raise secrets.z-.timeout_seconds if the backend is just slow)F)Úwaitzfetch raised z: Nzfetch returned z instead of FetchResult)Úfetch_timeout_secondsÚ
concurrentÚfuturesÚThreadPoolExecutorr   Úsubmitr.   ÚTimeoutErrorÚcancelr   Úfailr   ÚTIMEOUTÚshutdownr™   Útyper"   ÚINTERNALrQ   )
r   r¢   r£   r¤   r°   Úexecutorr®   Úfuturer.   Úexcs
   ffff      r*   Ú_fetch_with_timeoutrÁ   à   s¯  û€ ð ×*Ñ*¨3Ó/€GÜ×!Ñ!×4Ñ4ÀÐYdÐek×epÑepÐdqÐWrÐ4Ós€Hð&÷	0ó 	0ð —‘ Ó(ˆð		gØ—]‘]¨7�]Ó3‰Fð 	×Ñ˜uÐÔ%ä�fœk×*Ò*Ü‹}×!Ñ! O´D¸³L×4IÑ4IÐ3JÐJaÐ"bÜ"+×"4Ñ"4ó6ð 	6à€Møô ×!Ñ!×.Ñ.ô 	9Ø�M‰MŒOÜ“=×%Ñ%¨¸À°}ð ELà)/¯©¨Ð5bð'dô '0×&7Ñ&7ó9ñ 9ð 	×Ñ˜uÐÕ%ô ô 	gÜ“=×%Ñ%¨´d¸3³i×6HÑ6HÐ5IÈÈCÈ5Ð&QÔS\×SeÑSeÓfÔfà×Ñ˜uÐÕ%ûð	gûð 	×Ñ˜uÐÕ%úsJ   ÁG Á#C ÃA)GÅG ÅGÅ%GÅ&A F>Æ&GÆ'G Æ>GÇG ÇGc               ó$   € V ^8„  d   QhRRRRRR/# )r>   Úsecrets_cfgrH   r   r   r?   r!   )r@   s   "r*   rA   rA     s!   € ÷ 0ñ 0˜$ð 0 cð 0¨dñ 0r)   c                óX   € V P                  V4      p\        V\        4      '       d   V# / # rD   )rg   rQ   rH   )rÃ   r   r¢   s   && r*   Ú_sectionrÅ     s'   € Ø
�/‰/˜$Ó
€CÜ˜S¤$×'Ò'ˆ3Ð/¨RÐ/r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r>   rÃ   rH   rX   rK   r?   r…   r!   )r@   s   "r*   rA   rA     s"   € ÷ ñ ¨$ð ¸-ð ÐSeñ r)   c               óB  € \        VR7       Uu/ uF  q"P                  VbK  	  ppV P                  R4      p\        V\        4      '       d+   V Uu. uF  p\        V\
        4      '       g   K  VNK  	  upM. pV Uu. uF  qwV9  g   K  VNK  	  ppV'       d@   \        P                  RRP                  V4      RP                  V4      ;'       g    R4       \        P                  V Uu. uF  qwV9   g   K  VNK  	  up\	        V4      ,           4      p	. p
V	 FC  p W;,          P                  \        W4      4      '       d   V
P                  W;,          4       KC  KE  	  V
# u upi u upi u upi u upi   \         d    \        P                  RTRR7        Kƒ  i ; i)	z�Enabled sources: ``secrets.sources`` order first, then registration order
(mapped-vs-bulk precedence is applied on top by :func:`apply_all`).rˆ   r:   z7secrets.sources names unknown source(s): %s (known: %s)z, Únonez0Secret source '%s' is_enabled() raised; skippingTr“   )r‰   r   rg   rQ   r7   r   rc   rd   ÚjoinrH   ÚfromkeysÚ
is_enabledrÅ   Úappendr™   )rÃ   rX   r   r:   ÚexplicitÚeÚnamesr^   ÚunknownÚorderÚenabledr   s   &$          r*   Ú_ordered_enabled_sourcesrÓ     s^  € ô 2>ÀEÕ1JÓKÑ1J v�{‰{˜FÒ"Ñ1J€GÐKà�‰˜yÓ)€HÜ;EÀhÔPT×;UÒ;U™Ó7™�1¤J¨q´#×$6�QˆQ™Ò7Ð[]€EÙÓ4™%�Q¨GÑ#3�qˆq™%€GÐ4ßÜ�‰ÐPØ—y‘y Ó)¨4¯9©9°WÓ+=×+GÐ+GÀô	Iä�M‰M¡eÓ<¡e °G©|Ÿ1˜1¡eÑ<¼tÀG»}ÕLÓM€Eà"$€GÛˆð	dØ�}×'Ñ'¬°Ó(C×DÒDØ—‘˜w�}Ö-ñ Eñ ð €Nùò# Lùò 8ùÚ4ùò =øô ô 	dÜ�N‰NÐMÈtÐ^bˆN×cð	dús;   �E#ÁE(Á.E(Á=E-Â
E-Ã,E2Ã9E2Ä=E7Å7#FÆFc               ó$   € V ^8„  d   QhRRRRRR/# )r>   rÃ   rH   r£   r   r?   Ú	frozensetr!   )r@   s   "r*   rA   rA   "  s&   € ÷ nñ n dð n°tð nÀ	ñ nr)   c           	     ó‚   € \        V \        4      '       d   T M/ p \        R \        V \	        V4      R7       4       4      # )a  Names of the sources :func:`apply_all` would fetch for *home_path* right now (registered
and enabled). A source missing here was removed or disabled, so a value it injected earlier
is no longer backed by anything and must be revoked, not kept as process residue.c              3  ó8   "  € T F  qP                   x € K  	  R # 5irD   )r   )r]   rŒ   s   & r*   r`   Ú'enabled_source_names.<locals>.<genexpr>'  s   é € ÐmÑ%l —V–VÓ%lùs   ‚rˆ   )rQ   rH   rÕ   rÓ   r   )rÃ   r£   s   &&r*   Úenabled_source_namesrÙ   "  s7   € ô ",¨K¼×!>Ò!>‘+ÀB€KÜÑmÔ%=¸kÔQ`ÐajÓQkÕ%lÓmÓmÐmr)   c               ó    € V ^8„  d   QhRRRR/# )r>   r£   zOptional[Path]r?   r   r!   )r@   s   "r*   rA   rA   *  s   € ÷ 
ñ 
 Nð 
°sñ 
r)   c                ó.  € V eE   \        V 4      pVP                  P                  R8X  d   VP                  '       d   VP                  # R FF  p\        P                  P                  VR4      P                  4       pV'       g   K;  VR8w  g   KD  Vu # 	  R# )zPActive profile name (``~/.hermes/profiles/<name>``); "" for the default profile.ÚprofilesrM   Údefault)ÚHERMES_PROFILE_NAMEÚHERMES_PROFILE)r   Úparentr   Úosr¤   rg   Ústrip)r£   ÚresolvedÚenv_nameÚvalues   &   r*   Ú_active_profile_nameræ   *  sr   € àÒÜ˜	“?ˆØ�?‰?×Ñ :Ô-°(·-·-°-Ø—=‘=Ð Û=ˆÜ—
‘
—‘˜x¨Ó,×2Ñ2Ó4ˆß‰5�U˜iÖ'ØŠLñ >ñ r)   c               ó$   € V ^8„  d   QhRRRRRR/# )r>   Úvarr   Úprofiler?   rK   r!   )r@   s   "r*   rA   rA   <  s&   € ÷ eñ e˜sð e¨Sð e°]ñ er)   c                ó   € RVP                  RR4      P                  4       ,           pV'       d   V P                  V4      '       g   R# V R\        V4      )  pV'       d/   \	        V4      '       d   VP                  \
        4      '       d   V# R# )zBMap ``FOO_<PROFILE>`` to ``FOO`` for the active profile when safe.rN   Ú-N)rR   ÚupperÚendswithÚlenr   Ú_ALIAS_SUFFIXES)rè   ré   ÚsuffixÚaliass   &&  r*   Ú_profile_alias_targetrò   <  sm   € à�7—?‘? 3¨Ó,×2Ñ2Ó4Õ4€Fß˜#Ÿ,™, v×.Ò.ÙØ�”3�v“;�,Ð€EßÔ/°×6Ò6¸5¿>¹>Ì/×;ZÒ;Zˆ5ÐdÐ`dÐdr)   c                  ó>   € ] tR tRtRtR R ltR R ltR R ltR	tR
# )Ú_ApplieriE  zPApply phase state for one orchestrated pass: sequential, first-wins, attributed.c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r>   Úenvr¥   Úreportr9   Ú	protectedr   ÚpreserverÕ   r?   r�   r!   )r@   s   "r*   rA   Ú_Applier.__annotate__H  s3   € ÷ *ñ *Ð4ð *¸kð *Ø*ð*Ø6?ð*ØDHñ*r)   c                	óN   € WW43w  V n         V n        V n        V n        / V n        R # rD   )rö   r÷   rø   rù   Úclaimed)rE   rö   r÷   rø   rù   s   &&&&&r*   Ú__init__Ú_Applier.__init__H  s$   € à?BÈIÐ?_Ñ<ˆŒ�$”+˜tœ~¨t¬}Ø')ˆŽr)   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r>   r   r   r¢   rH   r.   r   ré   r   Úsupplied_directlyÚsetr?   r�   r!   )r@   s   "r*   rA   rú   M  sA   € ÷ pñ p <ð p°dð pÀKð pØ!ðpØ69ðpØ>Bñpr)   c           
     	óö  € \        VP                  VP                  ;'       g    VP                  VR 7      pV P                  P                  P                  V4       VP                  '       g   R#  VP                  V4      pVP                  P                  4        FÆ  w  r‰\        V\        4      '       d   \        V	\        4      '       g   K3  V P                  WaWxV	4      '       d	   V'       g   KV  \        W„4      p
V
'       g   Kk  W¥9  g   Ks  W P                  9  g   K…  V P                  WaWzV	4      '       g   K   VP                   P                  RV RV
 RV: R24       KÈ  	  R#   \         d    Rp Lõi ; i))r   r-   r.   NFzapplied profile-scoped z as z (active profile Ú))r,   r   r-   r÷   r:   rÌ   ÚokÚoverride_existingr™   Úsecretsri   rQ   r   Ú
_try_applyrò   rü   Úwarnings)rE   r   r¢   r.   ré   r   ÚsrÚoverriderè   rå   rñ   s   &&&&&&     r*   Úapply_sourceÚ_Applier.apply_sourceM  s  € ä˜vŸ{™{°&·,±,×2MÐ2MÀ&Ç+Á+ÐV\Ô]ˆØ�‰×Ñ×"Ñ" 2Ô&Ø�y�yˆyÙð	Ø×/Ñ/°Ó4ˆHð !Ÿ.™.×.Ñ.Ö0‰JˆCÜ˜c¤3×'Ò'¬z¸%Ä×/EÒ/EÙØ—?‘? 2¨x¸e×DÒDÏGÙÜ)¨#Ó7ˆEß‘˜%Ö8¸UÏ,É,Ö=VØŸ™¨°HÀU×KÔKØ—‘×&Ñ&Ð)@ÀÀÀTÈ%ÈÐPaÐbiÑalÐlmÐ'nÖoó 1øô ô 	ØŠHð	ús   Á1E( Å(E8Å7E8c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r>   r	  r,   r   r   r
  r   rè   r   rå   r?   r!   )r@   s   "r*   rA   rú   b  s9   € ÷ ñ ˜\ð °<ð È4ð ØðØ$'ðØ,0ñr)   c                óŽ  € \        V4      '       g   VP                  P                  V4       R# W@P                  9   d   VP                  P                  V4       R# W@P
                  9   dg   VP                  P                  V4       V P                  P                  P                  V RV P
                  V,           RVP                   R24       R# \        V P                  P                  V4      4      pV'       d6   W@P                  9   g	   V'       g   VP                  P                  V4       R# WPP                  V&   VP                  V P
                  V&   VP                  P                  V4       \!        YBP                  VP"                  TT;'       d    W@P                  9  R7      V P                  P$                  V&   R# )z=Apply one var through the shared guard chain. True = applied.Fz: kept value from z; uW    also supplies it (first source wins â€” remove one binding or reorder secrets.sources))r   r    T)r   r6   rÌ   rø   r5   rü   r4   r÷   r<   r   r   rö   rg   rù   r3   r2   r   r   r;   )rE   r	  r   r
  rè   rå   Úexisteds   &&&&&& r*   r  Ú_Applier._try_applyb  s\  € ô ! ×%Ò%Ø×Ñ×%Ñ% cÔ*ÙØ—.‘.Ô Ø× Ñ ×'Ñ'¨Ô,ÙØ—,‘,ÔØ×Ñ×%Ñ% cÔ*Ø�K‰K×!Ñ!×(Ñ(¨C¨5Ð0BÀ4Ç<Á<ÐPSÕCTÐBUÐUWØ,2¯K©K¨=ð 9Zð*Zô [ñ Ü�t—x‘x—|‘| CÓ(Ó)ˆß˜Ÿ}™}Ô,·HØ×Ñ×&Ñ& sÔ+ÙØ�‰�‰Ø"ŸK™Kˆ�‰�SÑØ
�
‰
×Ñ˜#ÔÜ&0°·k±kÀ6Ç<Á<Ð^eØ?G×?dÐ?dÈC×WdÑWdÑLdô'fˆ�‰×Ñ˜sÑ#ár)   )rü   rö   rù   rø   r÷   N)	r"   r#   r$   r%   r&   rý   r  r  r(   r!   r)   r*   rô   rô   E  s   † ÙZõ*õ
p÷*ñ r)   rô   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r>   rÃ   rH   r£   r   r¤   z"Optional[MutableMapping[str, str]]r?   r9   r!   )r@   s   "r*   rA   rA   }  s*   € ÷ 5ñ 5˜4ð 5¨Dð 5Ø9ð5ØEPñ5r)   c           
     ó^  € Ve   TM\         P                  p\        4       p\        V \        4      '       d   T M/ p \        V \        V4      R7      pV'       g   V# V P                  R4      p\        V\        4      '       d   \        R V 4       4      M	\        4       pV P                  RR4      '       d   \        V4      MRpV U	u. uF  q™P                  R8X  g   K  V	NK  	  up	V U	u. uF  q™P                  R8X  g   K  V	NK  	  up	,           p
. p/ pV
 Fl  p\        WP                  4      p\        WÞW4      pVP                  WÞV34        VP!                  V4       F  pVP#                  VVP                  4       K!  	  Kn  	  V UUUu0 uFH  w   ppVP&                  '       g   K  VP(                   F  p\        V\*        4      '       g   K  VkK  	  KJ  	  pppp\-        W4WÇ4      pV F  w  rÞpVP/                  WÞWøV4       K  	  V# u up	i u up	i   \$         d     EK  i ; iu upppi )	uk  Fetch from every enabled source and apply the merged result to ``environ``
(default ``os.environ``).

Precedence per env var, most-specific intent first: (1) ``secrets.preserve_existing``
names always keep a pre-existing value, even against ``override_existing: true``;
(2) pre-existing .env/shell value, unless the winning source has
``override_existing: true``; (3) mapped sources in configured order; (4) bulk
sources in configured order. First claim wins: a later source carrying the same
var gets ``skipped_claimed`` plus a conflict warning â€” never a silent clobber,
and ``override_existing`` never applies across sources.

Profile aliasing: under a named profile an applied ``FOO_<PROFILE>``
(credential-shaped suffixes only) also hydrates canonical ``FOO``, under the
same guards; disabled with ``secrets.profile_alias: false``.

1. 2. 3. 4. See #58073.
See #51447.
rˆ   Úpreserve_existingc              3  ó¢   "  € T FE  p\        V\        4      '       g   K  VP                  4       '       g   K3  VP                  4       x € KG  	  R # 5irD   )rQ   r   râ   )r]   r^   s   & r*   r`   Úapply_all.<locals>.<genexpr>™  s3   é € ð ©L q¼JÀqÌ#×<NœÐST×SZÑSZ×S\œ˜Ÿ™Ÿ˜«Lùs   ‚AŸA·AÚprofile_aliasTrM   rO   rP   )rá   r¤   r9   rQ   rH   rÓ   r   rg   r7   rÕ   ræ   r   rÅ   r   rÁ   rÌ   Úprotected_env_varsrj   r™   r  r  r   rô   r  )rÃ   r£   r¤   rö   r÷   rÒ   Úpreserve_rawrù   ré   rŒ   ÚorderedÚfetchesrø   r   r¢   r.   rè   rN   ÚrÚvr   Úappliers   &&&                   r*   Ú	apply_allr  }  så  € ð( Ò(‰'¬b¯j©j€CÜ‹]€FÜ!+¨K¼×!>Ò!>‘+ÀB€KÜ& {¼/È)Ó:TÔU€GßØˆà—?‘?Ð#6Ó7€Lä(¨´t×<Ò<ô ñ ©Ló ô ÜBKÃ+ð à1<·±ÀÐRV×1WÒ1WÔ" 9Ô-Ð]_€Gñ "Ó9™'�Q§W¡W°Ñ%8�qˆq™'Ñ9ÉÓ<eÉÀ1×SZÑSZÐ^dÑSd¿Q¸QÉÑ<eÕe€Gà<>€GØ "€IÛˆÜ�{§K¡KÓ0ˆÜ$ V°)ÓAˆØ�‰˜ VÐ,Ô-ð	Ø×0Ñ0°Ö5�Ø×$Ñ$ S¨&¯+©+Ö6ó 6ñ ñ +2Õc©'™w˜q ! Q°Q·TµTœÀ1Ç9Ä9¸aÔPZÐ[\Ô^a×PbŸ˜Á9™©'ÐÒcä�s IÓ8€GÛ&Ñˆ�VØ×Ñ˜V¨&Ð;LÖMñ  'à€Mùò) :ùÒ<eøô ô 	Ûð	üô ds<   ÃHÃHÃ*HÄHÅ4HÆH(Æ)"H(Ç
H(ÈH%È$H%))zagent.secret_sources.bitwardenÚBitwardenSourceÚ	Bitwarden)z agent.secret_sources.onepasswordÚOnePasswordSourceÚ	1Password)zagent.secret_sources.commandÚCommandSourceÚcommand)Ú_API_KEYÚ_TOKENÚ_SECRETÚ_KEYÚ	_PASSWORDrD   )?Ú__conditional_annotations__r&   Ú
__future__r   Úconcurrent.futuresr³   Úloggingrá   Ú	threadingÚdataclassesr   r   Úpathlibr   Útypingr   r   r   r	   Úagent.secret_sources.baser
   r   r   r   r   r   r   Úhermes_constantsr   r   Ú	getLoggerr"   rc   r   r'   r   r   r•   ÚRLockre   r–   r   r,   r9   rV   ro   rs   rz   r}   rƒ   r‰   r�   rx   r    rÁ   rÅ   rÓ   rÙ   ræ   rï   rò   rô   r  )r*  s   @r*   Ú<module>r6     s�  øðô
õ #ã Û Û 	Û ß (Ý ß 7Ó 7÷÷ ñ ÷ >à	×	Ò	˜8Ó	$€ð %'€Ð
!Ó &Ø"$€�Ó $Ø68€Ð3Ó 8ØÐ Ø—’Ó"€ðÐ ð ÷	 ð 	 ó ð	 ð ÷
=ð 
=ó ð
=ð ÷	%ð 	%ó ð	%õð¸Uð ÐTYð Ø+/÷õ>ð(°D÷ (ðY¸t÷ YðØ04÷ð$-¨4÷ -õ%õdõ !õ#õL0ð
È$÷ õ.nõ
ð I€õe÷5ñ 5÷p5ñ 5r)   