+
    jHàj  ã                  óÞ   € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHt ]P                  ! ]4      tR R ltR R ltR	 R
 ltR R ltR R ltRRRRRRRR/R R lltR R ltR# )u  Which deferred platform adapters a gateway config/env pass must import.

Bundled platform plugins register lazily (``PlatformRegistry.register_deferred``); importing all
~20 of them costs every cold gateway start about half a second (discord, telegram, google_chat
SDKs, telegram's i18n catalog) although a fresh profile configures none. The config passes in
``gateway.config_loader`` / ``gateway.config_env`` only need a platform's hooks
(``apply_yaml_config_fn``, ``env_enablement_fn``, ``is_connected``) when the profile could be
configuring that platform, so they materialize only names with *activation evidence*:

* a config block for it (top-level ``<name>:``, ``platforms.<name>``, ``gateway.platforms.<name>``,
  ``gateway.<name>``, or a legacy ``gateway.json`` row) â€” including a sibling block such as
  ``wecom_callback`` (registered by the ``wecom`` plugin);
* an env var (process env, the profile ``.env``, or the active secret scope) under the platform's
  prefix (``TELEGRAM_*``, ``GOOGLE_CHAT_*``) or named in its manifest ``requires_env``
  (``TWILIO_*`` for sms);
* a credential-pool record for it in the profile ``auth.json`` (Photon stores project creds there).

The rule over-approximates on purpose: a false positive costs one import, a false negative would
leave a configured platform down. Any lookup by name (``platform_registry.get``) still imports a
deferred adapter on demand.
)ÚannotationsN)ÚPath)ÚAnyÚCallableÚIterableÚOptionalc               ó    € V ^8„  d   QhRRRR/# )é   Úyaml_cfgr   Úreturnúset[str]© )Úformats   "Ú@/home/ubuntu/.hermes/hermes-agent/gateway/platform_activation.pyÚ__annotate__r   "   s   € ÷ 	?ñ 	? ð 	?¨ñ 	?ó    c           
     óÄ  € \        V \        4      '       g   \        4       # \        V P                  R4      \        4      '       d
   V R,          M/ pW P                  R4      WP                  R4      3pV UUUu0 uFW  p\        V\        4      '       g   K  VP	                  4        F(  w  rE\        V\        4      '       g   K  \        V4      kK*  	  KY  	  uppp# u upppi )zÒKeys of every mapping a platform block may live in (``platform_section`` /
``merge_platform_sections`` read the same places): ``<name>:``, ``platforms.<name>``,
``gateway.<name>``, ``gateway.platforms.<name>``.ÚgatewayÚ	platforms)Ú
isinstanceÚdictÚsetÚgetÚitemsÚstr)r
   r   ÚparentsÚparentÚkÚvs   &     r   Ú_yaml_block_namesr   "   s¨   € ô �h¤×%Ò%Ü‹uˆÜ+5°h·l±lÀ9Ó6MÌt×+TÒ+T�H˜YÖ'ÐZ\€GØŸ™ kÓ2°G¿[¹[ÈÓ=UÐV€GÙ!(õ ?¡�v¬J°v¼t×,DŒFØŸ™ž‘�¬*°Q¼×*=ô ŒC�ŽFÙ&ñ ¡ó ?ð ?ùô ?s   Á9CÂ(CÃCc               ó    € V ^8„  d   QhRRRR/# ©r	   ÚhomeúOptional[Path]r   r   r   )r   s   "r   r   r   .   s   € ÷ ñ �^ð ¨ñ r   c                ó°  € \         P                  P                  4        UUu0 uF(  w  r\        V4      P	                  4       '       g   K&  VkK*  	  ppp ^ RIHpHp V! 4       pVe'   VP                  R VP                  4        4       4       V ef   TP                  R V! V R,          4      P                  4        4       4       ^ RI	H
p VP                  R V! V 4      P                  4        4       4       ^ RIHp VP                  R V! 4       P                  4        4       4       V# u uppi   \         d    \        P                  R	R
R7        T# i ; i)é    )Úcurrent_secret_scopeÚload_env_filec              3  ól   "  € T F*  w  r\        V4      P                  4       '       g   K&  Vx € K,  	  R # 5i©N©r   Ústrip©Ú.0r   r   s   &  r   Ú	<genexpr>Ú_env_names.<locals>.<genexpr>4   s    é € ÐG¡}™t˜q¼¸A»¿¹¿Ÿš£}ùó   ‚#4ª
4c              3  ól   "  € T F*  w  r\        V4      P                  4       '       g   K&  Vx € K,  	  R # 5ir)   r*   r,   s   &  r   r.   r/   6   s#   é € Ð^Ñ'K™t˜qÌsÐSTËvÏ|É|Ï~ŸšÓ'Kùr0   z.env)Úget_secret_source_valuesc              3  ól   "  € T F*  w  r\        V4      P                  4       '       g   K&  Vx € K,  	  R # 5ir)   r*   r,   s   &  r   r.   r/   :   s(   é € Ð`Ñ'M™t˜qÔQTÐUVÓQW×Q]ÑQ]×Q_ŸšÓ'Mùr0   )Úload_managed_envc              3  ól   "  € T F*  w  r\        V4      P                  4       '       g   K&  Vx € K,  	  R # 5ir)   r*   r,   s   &  r   r.   r/   <   s"   é € ÐPÑ#=™4˜1ÄÀQÃÇÁÇ—Q’QÓ#=ùr0   z&platform activation: env scan degradedT©Úexc_info)ÚosÚenvironr   r   r+   Úagent.secret_scoper&   r'   ÚupdateÚhermes_cli.env_loaderr2   Úhermes_cli.managed_scoper4   Ú	ExceptionÚloggerÚdebug)	r"   r   r   Únamesr&   r'   Úscoper2   r4   s	   &        r   Ú
_env_namesrC   .   s  € ÜŸ:™:×+Ñ+Ô-Ô@Ñ-‘4�1´°Q³·±·�QˆQÑ-€EÑ@ðNßJÙ$Ó&ˆØÒØ�L‰LÑG u§{¡{¤}ÓGÔGØÒØ�L‰LÑ^¡}°T¸Fµ]Ó'C×'IÑ'IÔ'KÓ^Ô^õ GØ�L‰LÑ`Ñ'?ÀÓ'E×'KÑ'KÔ'MÓ`Ô`Ý=Ø�‰ÑPÑ#3Ó#5×#;Ñ#;Ô#=ÓPÔPð €Lùó! Aøô ô NÜ�‰Ð=ÈˆÕMØ€LðNús   ¢#D)Á
D)ÁCD/ Ä/"EÅEc               ó    € V ^8„  d   QhRRRR/# r!   r   )r   s   "r   r   r   B   s   € ÷ ñ  ð °Hñ r   c                ó  € V f   \        4       #  \        V R,          RR7      ;_uu_ 4       p\        P                  ! V4      ;'       g    / P	                  R4      ;'       g    / pR R R 4       \        X\        4      '       d   V Uu0 uF  p\        V4      kK  	  up# \        4       #   + '       g   i     LK; iu upi   \         d    \        4       u # \         d%    \        P                  RRR7       \        4       u # i ; i)Nz	auth.jsonú	utf-8-sig©ÚencodingÚcredential_poolz)platform activation: auth.json unreadableTr6   )r   ÚopenÚjsonÚloadr   r   r   r   ÚFileNotFoundErrorr>   r?   r@   )r"   ÚhandleÚpoolr   s   &   r   Ú_credential_pool_namesrP   B   sÃ   € Ø‚|Ü‹uˆðÜ�$˜Õ$¨{×;Õ;¸vÜ—I’I˜fÓ%×+Ð+¨×0Ñ0Ð1BÓC×IÐIÀrˆD÷ <ä)3°D¼$×)?Ò)?¡Ó%¡˜1”�A–¡Ñ%ÐJÄSÃUÐJ÷ <×;üâ%øÜô Ü‹uŠÜô Ü�‰Ð@È4ˆÔPÜ‹uŠðúsL   �C ¬6B)Á#B)Á&"C ÂB<ÂC Â	C Â)B9	Â4C ÃDÃDÃ!"DÄDc               ó$   € V ^8„  d   QhRRRRRR/# )r	   Únamer   Ú
candidatesúIterable[str]r   Úboolr   )r   s   "r   r   r   P   s&   € ÷ `ñ `�3ð ` Mð `°dñ `r   c                ó˜   a€ V P                  4       o\        ;QJ d    V3R  lV 4       F  '       g   K   R# 	  R# ! V3R  lV 4       4      # )c              3  ó¤   <"  € T FE  qP                  4       S8H  ;'       g'    VP                  4       P                  SR ,           4      x € KG  	  R# 5i)Ú_N)ÚlowerÚ
startswith)r-   ÚcÚlowereds   & €r   r.   Ú_matches.<locals>.<genexpr>R   s<   øé € Ð_ÑT^Èq�w‰w‹y˜GÑ#×JÐJ q§w¡w£y×';Ñ';¸GÀc½MÓ'JÔJÓT^ùs
   ƒA¡/ATF)rY   Úany)rR   rS   r\   s   &&@r   Ú_matchesr_   P   s9   ø€ Ø�j‰j‹l€Gß‹3Ô_ÑT^Ó_�3Œ3Ð_Š3Ð_ˆ3Ô_ÑT^Ó_Ó_Ð_r   c               ó    € V ^8„  d   QhRRRR/# )r	   r"   r   r   r   r   )r   s   "r   r   r   U   s   € ÷ 
ñ 
 Tð 
¨hñ 
r   c                ó  €  \        V R ,          RR7      ;_uu_ 4       p\        P                  ! V4      ;'       g    / P                  R4      ;'       g    / pRRR4       \	        X\
        4      '       d   V Uu0 uF  p\        V4      kK  	  up# \        4       #   + '       g   i     LK; iu upi   \         d    \        4       u # \        \        \        3 d%    \        P                  RRR7       \        4       u # i ; i)zgateway.jsonrF   rG   r   Nz,platform activation: gateway.json unreadableTr6   )rJ   rK   rL   r   r   r   r   r   rM   ÚOSErrorÚ
ValueErrorÚAttributeErrorr?   r@   )r"   rN   Úrowsr   s   &   r   Ú_legacy_gateway_json_namesrf   U   s½   € ð	Ü�$˜Õ'°+×>Õ>À&Ü—I’I˜fÓ%×+Ð+¨×0Ñ0°Ó=×CÐCÀˆD÷ ?ä)3°D¼$×)?Ò)?¡Ó%¡˜1”�A–¡Ñ%ÐJÄSÃUÐJ÷ ?×>üâ%øÜô Ü‹uŠÜ”Z¤Ð0ô ä�‰ÐCÈdˆÔSÜ‹uŠðúsL   ‚B3 ž6BÁBÁ"B3 Á:B.ÂB3 Â	B3 ÂB+	Â&B3 Â3DÃ
DÃ"DÄDr
   Úplatform_namesr"   Úregistryc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r	   r
   r   rg   rT   r"   r#   rh   r   zCallable[[str], bool]r   )r   s   "r   r   r   b   s6   € ÷ #ñ #Øð#Ø-:ð#ØGUð#àð#ð ñ#r   c                óÜ  aa
aa€ Vf   ^ RI Hp V! 4       pV f   Ve    ^ RIHp V! V4      p \        V 4      V Uu0 uF  p\        \        VRV4      4      kK  	  up,          o
Ve   S
\        V4      ,          o
\        V4      pV Uu0 uF  qˆP                  4       kK  	  upo\        V4      oR V
VVV3R llp	V	#   \         d    \
        P                  RRR7        L³i ; iu upi u upi )	a  ``name -> bool``: does this profile show evidence of configuring platform *name*?

*yaml_cfg* is the loaded config.yaml layer (read from *home* when omitted), *platform_names*
any already-merged platform keys (``GatewayConfig.platforms``). *home* defaults to the active
Hermes home.
)Úget_hermes_home)Úread_yaml_layersz+platform activation: config.yaml unreadableTr6   Úvaluec               ó    € V ^8„  d   QhRRRR/# )r	   rR   r   r   rU   r   )r   s   "r   r   Ú*activation_predicate.<locals>.__annotate__|   s   € ÷ =ñ =˜3ð = 4ñ =r   c                óÖ  <a€ \        V S4      '       g   \        V S4      '       d   R # V P                  4       P                  RR4      R,           o\        ;QJ d    V3R lS 4       F  '       g   K   R M	  RM! V3R lS 4       4      '       d   R # Se   SP	                  V 4      M	\        4       p\        ;QJ d    V3R lV 4       F  '       g   K   R # 	  R# ! V3R lV 4       4      # )TÚ-rX   c              3  óD   <"  € T F  qP                  S4      x € K  	  R # 5ir)   )rZ   )r-   ÚeÚprefixs   & €r   r.   Ú=activation_predicate.<locals>.has_evidence.<locals>.<genexpr>€   s   øé € Ð7©Y¨�|‰|˜F×#Ð#«Yùs   ƒ Fc              3  óH   <"  € T F  qP                  4       S9   x € K  	  R # 5ir)   )Úupper)r-   ÚdÚ	upper_envs   & €r   r.   ru   ƒ   s   øé € Ð<±8¨a—7‘7“9 	Ö)³8ùs   ƒ")r_   rw   Úreplacer^   Úactivation_envÚ	frozenset)rR   Údeclaredrt   ÚblocksÚpoolsrh   ry   s   & @€€€€r   Úhas_evidenceÚ*activation_predicate.<locals>.has_evidence|   s¢   ù€ Ü�D˜&×!Ò!¤X¨d°E×%:Ò%:ÙØ—‘“×%Ñ% c¨3Ó/°#Õ5ˆß‹3Ô7©YÓ7�3�3Š3Ô7©YÓ7×7Ò7ÙØ4<Ò4H�8×*Ñ*¨4Ô0ÌiËkˆß‹sÔ<±8Ó<�sŒsÐ<ŠsÐ<ˆsÔ<±8Ó<Ó<Ð<r   )Úhermes_constantsrk   Úgateway.config_loaderrl   r>   r?   r@   r   r   Úgetattrrf   rC   rw   rP   )r
   rg   r"   rh   rk   rl   ÚnÚenvrs   r€   r~   r   ry   s   $$$d      @@@r   Úactivation_predicater‡   b   sä   û€ ð ‚|Ý4ÙÓ ˆØÒ˜DÒ,ð	WÝ>Ù'¨Ó-ˆHô ˜xÓ(ÑQ_Ó+`ÑQ_ÈA¬C´¸¸7ÀAÓ0FÖ,GÑQ_Ñ+`Õ`€FØÒØÔ,¨TÓ2Õ2ˆÜ
�TÓ
€CÙ$'Ó(¡C˜q—‘–¡CÑ(€IÜ" 4Ó(€E÷=ó =ð Ðøô% ô 	WÜ�L‰LÐFÐQUˆLÖVð	Wüâ+`ùò )s   ŸB< »C$ÂC)Â<"C!Ã C!c               ó$   € V ^8„  d   QhRRRRRR/# )r	   rh   r   Úevidencer   Úlistr   )r   s   "r   r   r   ˆ   s&   € ÷ Tñ T¨ð T¸ð TÀñ Tr   c                ó˜   € V f   . # \        RRV /VB pV P                  V4       Uu. uF  q3P                  R8X  g   K  VNK  	  up# u upi )z®Plugin entries for platforms this profile configures (see module docstring); already-loaded
entries are always included. Never imports an adapter with no activation evidence.rh   Úpluginr   )r‡   Úconfigured_entriesÚsource)rh   r‰   Úwantedrs   s   &,  r   Úconfigured_plugin_entriesr�   ˆ   sQ   € ð ÒØˆ	Ü!Ñ@¨8Ð@°xÑ@€FØ×2Ñ2°6Ô:ÓSÑ:�!¿h¹hÈ(Ñ>R�AˆAÑ:ÑSÐSùÒSs
   §A¾Ar   )Ú__doc__Ú
__future__r   rK   Úloggingr8   Úpathlibr   Útypingr   r   r   r   Ú	getLoggerÚ__name__r?   r   rC   rP   r_   rf   r‡   r�   r   r   r   Ú<module>r˜      sw   ðñõ, #ã Û Û 	Ý ß 4Ó 4à	×	Ò	˜8Ó	$€õ	?õõ(õ`õ

ð#Øð#Ø=?ð#ØX\ð#à÷#÷LTr   