Ë
    áß²jûH  ã                  óJ  — U d Z ddlmZ ddlZddl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mZmZmZ ddlmZmZmZmZmZmZmZ ddlmZ  ej8                  e«      Zi Zd	e d
<   i Z!de d<   i Z"de d<   da# ejH                  «       Z%dZ&e	 G d„ d«      «       Z'e	 G d„ d«      «       Z(e	 G d„ d«      «       Z)d,d„Z*ddddœ	 	 	 d-d„Z+d.d„Z,ddœd/d„Z-ddœd/d„Z.ddœ	 	 	 d0d„Z/ddœd1d„Z0d2d „Z1d3d!„Z2d3d"„Z3	 	 	 	 d4d#„Z4d5d$„Z5ddœd6d%„Z6d7d&„Z7d'Z8d8d(„Z9 G d)„ d*«      Z:	 d9	 	 	 d:d+„Z;y);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úDict[str, SecretSource]Ú_SOURCESúDict[str, str]Ú_SOURCE_ORIGINSz"Dict[str, Dict[str, SecretSource]]Ú_SCOPED_SOURCESF))zagent.secret_sources.bitwardenÚBitwardenSourceÚ	Bitwarden)z agent.secret_sources.onepasswordÚOnePasswordSourceÚ	1Password)zagent.secret_sources.commandÚCommandSourceÚcommandc                  óH   — e Zd ZU dZded<   ded<   ded<   ded<   dZded	<   y
)Ú
AppliedVarz7Provenance record for one env var the orchestrator set.ÚstrÚnameÚsourceÚshapeÚboolÚoverrode_envFÚauthoritativeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r&   © ó    úB/home/ubuntu/.hermes/hermes-agent/agent/secret_sources/registry.pyr   r   /   s&   … áAà
ƒIØƒKØƒJØÓð  €M�4Ôr-   r   c                  ó¼   — e Zd ZU dZded<   ded<   ded<    ee¬«      Zded	<    ee¬«      Zded
<    ee¬«      Z	ded<    ee¬«      Z
ded<    ee¬«      Zded<   y)ÚSourceReportz4One source's outcome within an :class:`ApplyReport`.r    r!   Úlabelr   Úresult©Údefault_factoryú	List[str]ÚappliedÚskipped_existingÚskipped_claimedÚskipped_protectedÚskipped_invalidN)r'   r(   r)   r*   r+   r   Úlistr6   r7   r8   r9   r:   r,   r-   r.   r0   r0   <   sb   … á>à
ƒIØƒJØÓÙ¨tÔ4€GˆYÓ4Ù"'¸Ô"=Ð�iÓ=Ù!&°tÔ!<€O�YÓ<Ù#(¸Ô#>Ð�yÓ>Ù!&°tÔ!<€O�YÔ<r-   r0   c                  óx   — e Zd ZU dZ ee¬«      Zded<    ee¬«      Z	ded<    ee¬«      Z
ded<   edd	„«       Zy
)ÚApplyReportz.Merged outcome of one orchestrated apply pass.r3   zList[SourceReport]ÚsourceszDict[str, AppliedVar]Ú
provenancer5   Ú	conflictsc                ó,   — t        | j                  «      S ©N)r$   r?   )Úselfs    r.   Úapplied_anyzApplyReport.applied_anyR   s   € ä�D—O‘OÓ$Ð$r-   N)Úreturnr$   )r'   r(   r)   r*   r   r;   r>   r+   Údictr?   r@   ÚpropertyrD   r,   r-   r.   r=   r=   J   sF   … á8á"'¸Ô"=€GÐÓ=Ù(-¸dÔ(C€JÐ%ÓCÙ °Ô6€IˆyÓ6àò%ó ñ%r-   r=   c                ó\  — t        | t        «      sd| ›d�S | j                  xs d}|r3|j                  dd«      j	                  «       r||j                  «       k7  rd|›�S | j                  t        k7  rd|› d| j                  › dt        › �S | j                  d	vrd|› d
| j                  ›�S y)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 v)ÚmappedÚbulkz)': shape must be 'mapped' or 'bulk', got N)	Ú
isinstancer   r!   ÚreplaceÚisalnumÚlowerÚapi_versionr   r#   )r"   r!   s     r.   Ú_validate_sourcerR   Z   sÅ   € ä�fœlÔ+Ø(¨¨
Ð2VÐWÐWØ�;‰;Ò˜"€DÙ�t—|‘| C¨Ó,×4Ñ4Ô6¸$À$Ç*Á*Ã,Ò:NØ:¸4¸(ÐCÐCØ×ÑÔ6Ò6Ø*¨4¨&ð 1Ø×&Ñ&Ð'Ð'=Ô>WÐ=XðZð 	[à‡|�|Ð-Ñ-Ø)¨$¨Ð/XÐY_×YeÑYeÐXhÐiÐiØr-   )rN   ÚbuiltinÚscopec               ó\  ‡ ‡— t        ‰ «      }|rt        j                  |«       y‰ j                  Št        5  t        t        «      }|�%|j                  t        j                  |i «      «       ‰|v r"|s t        j                  d‰«       	 ddd«       yt        ˆˆ fd„|j                  «       D «       d«      }|r,t        j                  d‰‰ j                  |«       	 ddd«       y|€t        nt        j                  |i «      }‰ |‰<   |€|rdndt        ‰<   ddd«       y# 1 sw Y   yxY w)	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  ó|   •K  — | ]3  \  }}|‰k7  r)‰j                   r|j                   ‰j                   k(  r|–— Œ5 y ­wrB   )Úscheme)Ú.0ÚnÚor!   r"   s      €€r.   ú	<genexpr>z"register_source.<locals>.<genexpr>z   s:   øè ø€ ò T™D˜A˜qØ˜dš v§}¢}¸¿¹ÀVÇ]Á]Ò9Rô ñ Tùs   ƒ9<zKIgnoring secret source '%s': scheme '%s://' is already owned by source '%s'rS   ÚpluginT)rR   ÚloggerÚwarningr!   Ú_REGISTRY_LOCKrF   r   Úupdater   ÚgetÚnextÚitemsrW   Ú
setdefaultr   )	r"   rN   rS   rT   ÚproblemÚ	effectiveÚownerÚtargetr!   s	   `       @r.   Úregister_sourceri   i   s%  ù€ ô
 ˜vÓ&€GÙÜ�‰�wÔØØ�;‰;€DÜ	ñ GÜœ“Nˆ	ØÐØ×Ñœ_×0Ñ0°¸Ó;Ô<Ø�9Ñ¡WÜ�N‰NÐVÐX\Ô]Ø÷Gð Gô ô T I§O¡OÓ$5ô TØUYó[ˆáÜ�N‰NÐhØ §¡°ô7à÷Gð Gð #˜]•´×0JÑ0JÈ5ÐRTÓ0UˆØˆˆt‰Øˆ=Ù18¡I¸hŒO˜DÑ!÷!Gð" ÷#Gð" ús   ¸AD"ÂA	D"Ã'2D"Ä"D+c                ó†   — t        t        «      }|j                  t        j	                  | xs
 t        «       i «      «       |S )zOGlobal sources overlaid with the scope's (default: current home) registrations.)rF   r   r`   r   ra   r   )rT   Úmergeds     r.   Ú_mergedrl   ‡   s1   € ä”(‹^€FØ
‡M�M”/×%Ñ% eÒ&@¬Ó/@À"ÓEÔFØ€Mr-   ©rT   c               ó‚   — t        «        t        5  t        |«      j                  | «      cd d d «       S # 1 sw Y   y xY wrB   )Ú_ensure_builtin_sourcesr_   rl   ra   ©r!   rT   s     r.   Ú
get_sourcerq   Ž   s2   € ÜÔÜ	ñ (Ü�u‹~×!Ñ! $Ó'÷(÷ (ò (ús   ‘5µ>c               ó¨   — t        «        t        5  |€t        nt        j	                  |i «      j	                  | «      cddd«       S # 1 sw Y   yxY w)z<Return the registration owned by exactly one registry layer.N)ro   r_   r   r   ra   rp   s     r.   Úsnapshot_registrationrs   ”   sF   € äÔÜ	ñ YØ!˜M•¬×/BÑ/BÀ5È"Ó/M×RÑRÐSWÓX÷Y÷ Yò Yús   ‘-AÁAc               ó,  — t        «        t        5  |€t        nt        j	                  |i «      }|j                  | «      |ur
	 ddd«       y|€|j                  | d«       n||| <   |�|st        j                  |d«       ddd«       y# 1 sw Y   yxY w)z@Restore a host-owned source registration if it is still current.NFT)ro   r_   r   r   rd   ra   Úpop)r!   ÚcurrentÚpreviousrT   rh   s        r.   Úrestore_registrationrx   ›   s•   € ô ÔÜ	ñ 	-Ø"˜]•´×0JÑ0JÈ5ÐRTÓ0UˆØ�:‰:�dÓ 7Ñ*Ø÷	-ð 	-ð ÐØ�J‰J�t˜TÕ"à#ˆF�4‰LØÐ¡VÜ×Ñ  tÔ,÷	-ð ÷	-ð ús   ‘3B
Á4B
Â
Bc                ó’   — t        «        t        5  t        t        | «      j	                  «       «      cd d d «       S # 1 sw Y   y xY wrB   )ro   r_   r;   rl   Úvaluesrm   s    r.   Úlist_sourcesr{   ¬   s5   € ÜÔÜ	ñ -Ü”G˜E“N×)Ñ)Ó+Ó,÷-÷ -ò -ús	   ‘"=½Ac                 óf  — t        «        t        5  t        j                  «       D � �ci c]!  \  } }t        j                  | «      dk(  sŒ| |“Œ# }} }|j                  t        j                  t        «       i «      «       t        |j                  «       «      cddd«       S c c}} w # 1 sw Y   yxY w)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).
    r\   N)ro   r_   r   rc   r   ra   r`   r   r   r;   rz   )rY   Úsrk   s      r.   Úlist_plugin_sourcesr~   ²   s‰   € ô ÔÜ	ñ %Ü#+§>¡>Ó#3×Z™4˜1˜a´×7JÑ7JÈ1Ó7MÐQYÓ7Y�!�Q‘$ÐZˆÑZØ�‰”o×)Ñ)¬/Ó*;¸RÓ@ÔAÜ�F—M‘M“OÓ$÷%ñ %ùÛZ÷%ð %ús#   ‘B'© B!Á
B!ÁAB'Â!B'Â'B0c            	     ó"  — t         5  t        r
	 ddd«       ydat        D ]1  \  } }}	 t        | |g¬«      }t	         t        ||«      «       d¬«       Œ3 	 ddd«       y# t        $ r t        j                  d|d¬«       Y Œaw xY w# 1 sw Y   yxY w)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)rS   z+Failed to register bundled %s secret source©Úexc_info)	r_   Ú_BUILTINS_LOADEDÚ_BUILTIN_SOURCESÚ
__import__ri   ÚgetattrÚ	Exceptionr]   r^   )Úmodule_nameÚ
class_namer1   Úmodules       r.   ro   ro   Á   sª   € ô 
ñ 	dÝØ÷	dð 	dð  ÐÜ.>ò 	dÑ*ˆK˜ UðdÜ# K¸:¸,ÔG�ÜÐ ;¤¨°
Ó ;Ó =ÀtÖLñ	d÷		dð 	døô ò dÜ—‘ÐLÈeÐ^b�Öcðdú÷	dð 	dús3   ‡B˜B¨*AÁBÁ!BÁ?BÂBÂBÂBc                 ó¶   — t         5  t        j                  «        t        j                  «        t        j                  «        dad d d «       y # 1 sw Y   y xY w)NF)r_   r   Úclearr   r   rƒ   r,   r-   r.   Ú_reset_registry_for_testsr�   Ñ   sB   € ä	ñ !Ü�‰ÔÜ×ÑÔÜ×ÑÔØ Ð÷	!÷ !ñ !ús   ‡?AÁAc                ó   ‡ ‡‡‡— ‰ j                  ‰«      }t        j                  j                  dd‰ j                  › �¬«      }	 dˆˆˆˆ fd„}|j                  |«      }	 |j                  |¬«      }	 |j                  d
¬«       t%        |t        «      s?t        «       j                  dt        |«      j                   › d�t        j"                  «      S |S # t        j                  j                  $ r_ |j                  «        t        «       j                  d|d›d‰ j                  › d	�t        j                  «      cY |j                  d
¬«       S t        $ r]}	t        «       j                  dt        |	«      j                   › d|	› �t        j"                  «      cY d}	~	|j                  d
¬«       S d}	~	ww xY w# |j                  d
¬«       w xY w)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   •— t        ‰«      } 	 ‰j                  ‰‰«      t        | «       S # t        | «       w xY wrB   )r   Úfetchr   )ÚtokenÚcfgÚenvironÚ	home_pathr"   s    €€€€r.   Ú_fetchz#_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)rE   r   )Úfetch_timeout_secondsÚ
concurrentÚfuturesÚThreadPoolExecutorr!   Úsubmitr2   ÚTimeoutErrorÚcancelr   Úfailr   ÚTIMEOUTÚshutdownr‡   Útyper'   ÚINTERNALrM   )
r"   r•   r—   r–   r™   Úexecutorr˜   Úfuturer2   Úexcs
   ````      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ÐÕ%úsD   ÁF9 Á C ÃA'F6Ä=F9 ÅF6ÅA F1ÆF6ÆF9 Æ1F6Æ6F9 Æ9Gc                óL   — | j                  |«      }t        |t        «      r|S i S rB   )ra   rM   rF   )Úsecrets_cfgr!   r•   s      r.   Ú_sectionr­     s$   € Ø
�/‰/˜$Ó
€CÜ˜S¤$Ô'ˆ3Ð/¨RÐ/r-   c               óÊ  — t        |¬«      D �ci c]  }|j                  |“Œ }}| j                  d«      }t        |t        «      r!|D �cg c]  }t        |t
        «      sŒ|‘Œ c}ng }|D �cg c]	  }||vsŒ|‘Œ }}|r9t        j                  ddj                  |«      dj                  |«      xs d«       t        j                  |D �cg c]	  }||v sŒ|‘Œ c}t	        |«      z   «      }	g }
|	D ]5  }	 ||   j                  t        | |«      «      r|
j                  ||   «       Œ7 |
S c c}w c c}w c c}w c c}w # t        $ r t        j                  d|d¬«       Y Œqw xY w)	z‘Enabled sources: ``secrets.sources`` order first, then registration order
    (mapped-vs-bulk precedence is applied on top by :func:`apply_all`).rm   r>   z7secrets.sources names unknown source(s): %s (known: %s)z, Únonez0Secret source '%s' is_enabled() raised; skippingTr�   )r{   r!   ra   rM   r;   r    r]   r^   ÚjoinrF   ÚfromkeysÚ
is_enabledr­   Úappendr‡   )r¬   rT   r"   r>   ÚexplicitÚeÚnamesrY   ÚunknownÚorderÚenabledr!   s               r.   Ú_ordered_enabled_sourcesrº     sQ  € ô 2>ÀEÔ1JÖK vˆv�{‰{˜FÑ"ÐK€GÐKà�‰˜yÓ)€HÜ;EÀhÔPTÔ;U˜Ö7�1¤J¨q´#Õ$6ŠQÓ7Ð[]€EØÖ4�Q 1¨GÒ#3ŠqÐ4€GÐ4ÙÜ�‰ÐPØ—y‘y Ó)¨4¯9©9°WÓ+=Ò+GÀô	Iä�M‰M eÖ< ¨q°Gª|š1Ò<¼tÀG»}ÑLÓM€Eà"$€GØò dˆð	dØ�t‰}×'Ñ'¬°¸dÓ(CÔDØ—‘˜w t™}Ô-øðdð €Nùò# Lùò 8ùÚ4ùò =øô ò 	dÜ�N‰NÐMÈtÐ^bˆNÖcð	dús;   �D*Á
D/Á D/Á-	D4Á7D4Ã	D9ÃD9Ã42D>Ä>!E"Å!E"c                ó  — | �<t        | «      }|j                  j                  dk(  r|j                  r|j                  S dD ]<  }t        j                  j                  |d«      j                  «       }|sŒ4|dk7  sŒ:|c S  y)zPActive profile name (``~/.hermes/profiles/<name>``); "" for the default profile.Úprofiles)ÚHERMES_PROFILE_NAMEÚHERMES_PROFILErI   Údefault)r   Úparentr!   Úosr–   ra   Ústrip)r—   ÚresolvedÚenv_nameÚvalues       r.   Ú_active_profile_namerÆ     ss   € àÐÜ˜	“?ˆØ�?‰?×Ñ :Ò-°(·-²-Ø—=‘=Ð Ø=ò ˆÜ—
‘
—‘˜x¨Ó,×2Ñ2Ó4ˆÚ�U˜iÓ'ØŠLðð r-   )Ú_API_KEYÚ_TOKENÚ_SECRETÚ_KEYÚ	_PASSWORDc                óÚ   — d|j                  dd«      j                  «       z   }|r| j                  |«      sy| dt        |«        }|r"t	        |«      r|j                  t
        «      r|S dS )zBMap ``FOO_<PROFILE>`` to ``FOO`` for the active profile when safe.rJ   Ú-N)rN   ÚupperÚendswithÚlenr   Ú_ALIAS_SUFFIXES)ÚvarÚprofileÚsuffixÚaliass       r.   Ú_profile_alias_targetrÖ   1  sd   € à�7—?‘? 3¨Ó,×2Ñ2Ó4Ñ4€FÙ˜#Ÿ,™, vÔ.ØØ�”3�v“;�,Ð€EÙÔ/°Ô6¸5¿>¹>Ì/Ô;Zˆ5ÐdÐ`dÐdr-   c                  óL   — e Zd ZdZ	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)	Ú_ApplierzPApply phase state for one orchestrated pass: sequential, first-wins, attributed.c                óP   — ||||f\  | _         | _        | _        | _        i | _        y rB   )ÚenvÚreportÚ	protectedÚpreserveÚclaimed)rC   rÚ   rÛ   rÜ   rÝ   s        r.   Ú__init__z_Applier.__init__=  s)   € à?BÀFÈIÐW_Ð?_Ñ<ˆŒ�$”+˜tœ~¨t¬}Ø')ˆ�r-   c           
     ó€  — t        |j                  |j                  xs |j                  |¬«      }| j                  j                  j                  |«       |j                  sy 	 |j                  |«      }|j                  j                  «       D ]œ  \  }}	t        |t        «      rt        |	t        «      sŒ'| j                  |||||	«      r|sŒ?t        ||«      }
|
sŒN|
|vsŒS|
| j                  vsŒb| j                  ||||
|	«      sŒx|j                   j                  d|› d|
› d|›d�«       Œž y # t        $ r d}Y ŒÇw xY w)N)r!   r1   r2   Fzapplied profile-scoped z as z (active profile ú))r0   r!   r1   rÛ   r>   r³   ÚokÚoverride_existingr‡   Úsecretsrc   rM   r    Ú
_try_applyrÖ   rÞ   Úwarnings)rC   r"   r•   r2   rÓ   Úsupplied_directlyÚsrÚoverriderÒ   rÅ   rÕ   s              r.   Úapply_sourcez_Applier.apply_sourceB  s$  € ä˜vŸ{™{°&·,±,Ò2MÀ&Ç+Á+ÐV\Ô]ˆØ�‰×Ñ×"Ñ" 2Ô&Ø�yŠyØð	Ø×/Ñ/°Ó4ˆHð !Ÿ.™.×.Ñ.Ó0ò 	p‰JˆC�Ü˜c¤3Ô'¬z¸%ÄÔ/EØØ—?‘? 2 v¨x¸¸eÔDÉGØÜ)¨#¨wÓ7ˆEÚ˜%Ð'8Ò8¸UÈ$Ï,É,Ò=VØŸ™¨¨F°H¸eÀUÕKØ—‘×&Ñ&Ð)@ÀÀÀTÈ%ÈÐPaÐbiÐalÐlmÐ'nÕoñ	pøô ò 	ØŠHð	ús   Á$D/ Ä/D=Ä<D=c                óD  — t        |«      s|j                  j                  |«       y|| j                  v r|j                  j                  |«       y|| j
                  v ra|j                  j                  |«       | j                  j                  j                  |› d| j
                  |   › d|j                  › d�«       yt        | j                  j                  |«      «      }|r,|| j                  v s|s|j                  j                  |«       y|| j                  |<   |j                  | j
                  |<   |j                  j                  |«       t!        ||j                  |j"                  ||xr || j                  v¬«      | j                  j$                  |<   y)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   r:   r³   rÜ   r9   rÞ   r8   rÛ   r@   r!   r$   rÚ   ra   rÝ   r7   r6   r   r#   r?   )rC   rè   r"   ré   rÒ   rÅ   Úexisteds          r.   rå   z_Applier._try_applyW  sc  € ô ! Ô%Ø×Ñ×%Ñ% cÔ*ØØ�$—.‘.Ñ Ø× Ñ ×'Ñ'¨Ô,ØØ�$—,‘,ÑØ×Ñ×%Ñ% cÔ*Ø�K‰K×!Ñ!×(Ñ(¨C¨5Ð0BÀ4Ç<Á<ÐPSÑCTÐBUÐUWØ,2¯K©K¨=ð 9Zð*Zô [ð Ü�t—x‘x—|‘| CÓ(Ó)ˆÙ˜˜tŸ}™}Ñ,±HØ×Ñ×&Ñ& sÔ+ØØˆ�‰�‰Ø"ŸK™Kˆ�‰�SÑØ
�
‰
×Ñ˜#ÔÜ&0°°f·k±kÀ6Ç<Á<Ð^eØ?GÒ?dÈCÐW[×WdÑWdÐLdô'fˆ�‰×Ñ˜sÑ#àr-   N)
rÚ   úMutableMapping[str, str]rÛ   r=   rÜ   r   rÝ   Ú	frozensetrE   ÚNone)r"   r   r•   rF   r2   r   rÓ   r    rç   ÚsetrE   rï   )rè   r0   r"   r   ré   r$   rÒ   r    rÅ   r    rE   r$   )r'   r(   r)   r*   rß   rê   rå   r,   r-   r.   rØ   rØ   :  s`   „ ÙZð*Ø*ð*Ø6?ð*ØDHó*ð
pØ!ðpØ69ðpØ>Bópð*ØðØ$'ðØ,0ôr-   rØ   c           
     óì  — |�|nt         j                  }t        «       }t        | t        «      r| ni } t        | t        |«      ¬«      }|s|S | j                  d«      }t        |t        «      rt        d„ |D «       «      n	t        «       }| j                  dd«      rt        |«      nd}|D �	cg c]  }	|	j                  dk(  sŒ|	‘Œ c}	|D �	cg c]  }	|	j                  dk(  sŒ|	‘Œ c}	z   }
g }i }|
D ]m  }t        | |j                  «      }t        ||||«      }|j                  |||f«       	 |j!                  |«      D ]  }|j#                  ||j                  «       Œ  Œo |D ���ch c]7  \  }}}|j&                  sŒ|j(                  D ]  }t        |t*        «      sŒ|’Œ Œ9 }}}}t-        ||||«      }|D ]  \  }}}|j/                  |||||«       Œ |S c c}	w c c}	w # t$        $ r Y Œûw xY wc c}}}w )	u£  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.
    rm   Úpreserve_existingc              3  ó€   K  — | ]6  }t        |t        «      sŒ|j                  «       sŒ%|j                  «       –— Œ8 y ­wrB   )rM   r    rÂ   )rX   rY   s     r.   r[   zapply_all.<locals>.<genexpr>Ž  s/   è ø€ ò  q¼JÀqÌ#Õ<NÐST×SZÑSZÕS\˜Ÿ™Ÿñ ùs   ‚>˜>©>Úprofile_aliasTrI   rK   rL   )rÁ   r–   r=   rM   rF   rº   r   ra   r;   rî   rÆ   r#   r­   r!   rª   r³   Úprotected_env_varsrd   r‡   râ   rä   r    rØ   rê   )r¬   r—   r–   rÚ   rÛ   r¹   Úpreserve_rawrÝ   rÓ   r}   ÚorderedÚfetchesrÜ   r"   r•   r2   rÒ   rJ   ÚrÚvrç   Úappliers                         r.   Ú	apply_allrü   r  sú  € ð( Ð(‰'¬b¯j©j€CÜ‹]€FÜ!+¨K¼Ô!>‘+ÀB€KÜ& {¼/È)Ó:TÔU€GÙØˆà—?‘?Ð#6Ó7€Lä(¨´tÔ<ô ñ ¨Lô ô ÜBKÃ+ð à1<·±ÀÐRVÔ1WÔ" 9Ô-Ð]_€Gð "Ö9�Q Q§W¡W°Ó%8ŠqÒ9ÈÖ<eÀ1ÐST×SZÑSZÐ^dÓSdºQÒ<eÑe€Gà<>€GØ "€IØò ˆÜ�{ F§K¡KÓ0ˆÜ$ V¨S°)¸SÓAˆØ�‰˜  VÐ,Ô-ð	Ø×0Ñ0°Ó5ò 7�Ø×$Ñ$ S¨&¯+©+Õ6ñ7ðð +2×cÐc™w˜q ! Q°Q·T³TÀ1Ç9Á9Òc¸aÔPZÐ[\Ô^aÕPbšÐc˜ÐcÐÒcä�s˜F I¨xÓ8€GØ&ò NÑˆ��VØ×Ñ˜V S¨&°'Ð;LÕMðNà€Mùò) :ùÒ<eøô ò 	Ùð	üô ds<   Â-GÃGÃGÃ!GÄ,2G Å&G/Å<G/ÆG/Ç 	G,Ç+G,)r"   r   rE   úOptional[str])
r"   r   rN   r$   rS   r$   rT   rý   rE   r$   )rT   rý   rE   r   )r!   r    rT   rý   rE   úOptional[SecretSource])
r!   r    rv   r   rw   rþ   rT   rý   rE   r$   )rT   rý   rE   úList[SecretSource])rE   rÿ   )rE   rï   )
r"   r   r•   rF   r—   r   r–   rí   rE   r   )r¬   rF   r!   r    rE   rF   )r¬   rF   rT   rý   rE   rÿ   )r—   zOptional[Path]rE   r    )rÒ   r    rÓ   r    rE   rý   rB   )r¬   rF   r—   r   r–   z"Optional[MutableMapping[str, str]]rE   r=   )<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   Ú	getLoggerr'   r]   r   r+   r   r   rƒ   ÚRLockr_   r„   r   r0   r=   rR   ri   rl   rq   rs   rx   r{   r~   ro   r�   rª   r­   rº   rÆ   rÑ   rÖ   rØ   rü   r,   r-   r.   ú<module>r     s¬  ðò
õ #ã Û Û 	Û ß (Ý ß 7Ó 7÷÷ ñ õ -à	ˆ×	Ñ	˜8Ó	$€ð %'€Ð
!Ó &Ø"$€�Ó $Ø68€Ð3Ó 8ØÐ Ø �—‘Ó"€ðÐ ð ÷	 ð 	 ó ð	 ð ÷
=ð 
=ó ð
=ð ÷	%ð 	%ó ð	%óð >CÐTYØ+/ñØ(ðØ48óó<ð 59õ (ð @Dõ Yð 15ñØ -ðØ9=óð" ,0õ -ó%ódó !ð#Ø!9ð#Ø>Ió#óL0ð
 KOõ ó.
ð I€óe÷5ñ 5ðr =Að5Ø9ð5ØEPô5r-   