+
    jHàjít  ã                   ó   € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIH	t	H
t
HtHt ^ RIHt ]P                  ! ]4      t]]],          ]3,          t]. R3,          tR R ltR R lt] ! R	 R
4      4       tR R lt ! R R4      t]! 4       tR# )a¹  Platform adapter registry.

Adapters (built-in and plugin) self-register here so the gateway can discover and
instantiate them without hardcoded if/elif chains. Plugins register via
``PluginContext.register_platform()``; ``GatewayRunner._create_adapter()`` consults the
registry first, then the legacy built-in path. Plugin side: ``platform_registry
.register(PlatformEntry(...))``; gateway side: ``create_adapter("irc", platform_config)``.
N)Ú	dataclassÚfield)ÚAnyÚ	AwaitableÚCallableÚOptional©Úhermes_home_keyc                óF   € V ^8„  d   QhR\         R\        \        ,          /# )é   ÚcallbackÚreturn)r   r   Ústr)Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/gateway/platform_registry.pyÚ__annotate__r      s   € ÷ ñ ¬(ð ´xÄµ}ñ ó    c                ób   €  ^ RI Hp VP                  V 4      #   \        \        3 d     R# i ; i)zBInfer a plugin profile from code registered outside PluginContext.)ÚregistryN)Útools.registryr   Úplugin_scope_for_callableÚImportErrorÚAttributeError)r   Útool_registrys   & r   Ú_plugin_scope_from_callabler      s2   € ðÝ<Ø×6Ñ6°xÓ@Ð@øÜœÐ(ô Úðús   ‚ ™.­.c                ó:   € V ^8„  d   QhR\         \        ,          /# ©r   r   ©r   r   )r   s   "r   r   r   "   s   € ÷ Yñ Yœh¤s�mñ Yr   c                  óÌ   €  \         P                  ! ^4      P                  P                  RR4      ;'       g    Rp \        \        RRRT /4      4      #   \         d     R# i ; i)r   Ú__name__Ú NÚ_CallerÚ
__module__© )ÚsysÚ	_getframeÚ	f_globalsÚgetÚ	Exceptionr   Útype)Úmodule_names    r   Ú_caller_plugin_scoper+   "   s_   € ðÜ—m’m AÓ&×0Ñ0×4Ñ4°ZÀÓD×JÐJÈˆô '¤t¨I°r¸LÈ+Ð;VÓ'WÓXÐXøô ô Úðús   ‚6A ¹A ÁA#Á"A#c                   óþ   a € ] tR t^*t o RtRtRtRt]! ]	R7      t
RtRtRtRtR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tRtRt]! ]R7      t R
t!Rt"Rt#Rt$Rt%Rt&Rt'Rt(Rt)Rt*Rt+R
t,Rt-]! ]R7      t.R
t/R
t0V 3R	 lt1R
t2V t3R# )ÚPlatformEntryz3Metadata and factory for a single platform adapter.N)Údefault_factoryr    ÚpluginFu   ðŸ”ŒTc          	      óæ  <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[.S[3,          ;R&   S[. S[3,          ;R&   S[S[S[.S[3,          ,          ;R&   S[S[. S[3,          ,          ;R&   S[S[S[.S[3,          ,          ;R&   S[;R&   S[ ;R	&   S[S[. R
3,          ,          ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R&   S[ ;R&   S[;R&   S[ ;R&   S[S[. S[S[,          3,          ,          ;R&   S[S[S[S[.S[S[,          3,          ,          ;R&   S[ ;R&   S[S[S[ .S[S[S[ S[S[ ,          3,          ,          3,          ,          ;R&   S[S[S[ .S[S[ ,          3,          ,          ;R&   S[S[S[S[ S[ S[.S[3,          ,          ;R&   S[S[RS[	S[,          3,          ,          ;R&   S[;R&   S[ ;R&   S[;R&   S[;R &   S[S[S[.S[3,          ,          ;R!&   S[ ;R"&   S[S[,          ;R#&   S[ ;R$&   S[;R%&   S[S[S[ .S[3,          ,          ;R&&   S[S[,          ;R'&   S[ ;R(&   S[ ;R)&   S[ ;R*&   S[;R+&   S[S[,          ;R,&   S[;R-&   S[;R.&   S[;R/&   # )0r   ÚnameÚlabelÚadapter_factoryÚcheck_fnÚvalidate_configÚensure_deps_fnÚis_connectedÚrequired_envÚinstall_hintNÚsetup_fnÚsourceÚplugin_nameÚallowed_users_envÚallow_all_envÚmax_message_lengthÚpii_safeÚemojiÚallow_update_commandÚplatform_hintÚenv_enablement_fnÚapply_yaml_config_fnÚcron_deliver_env_varÚparse_target_ref_fnÚvalidate_target_ref_fnÚsend_message_handler.Ústandalone_sender_fnÚtrusted_inboundÚdisplay_tierÚdisplay_overridesÚshared_env_prefixesÚconfig_connected_fnÚallow_bots_envÚown_policy_envÚgroup_allowed_chats_envÚallowlist_suppresses_pairingÚtarget_ref_syntax_fnÚstandalone_sendÚdashboard_labelÚdashboard_descriptionÚdocs_urlÚdashboard_env_varsÚdashboard_required_envÚenv_value_rulesÚenv_overridesÚenv_enable_credentials)
r   r   r   Úboolr   ÚlistÚintÚdictÚtupler   )r   Ú__classdict__s   "€r   r   ÚPlatformEntry.__annotate__*   s¤  ø‡ ‚ ñ �Iñ	 ñ
 �Jñ ñ ™s˜e¡S˜jÕ)Ñ)ñ ñ �r™4�xÕ Ñ ñ ñ ™h© u©d {Õ3Õ4Ñ;ñ ñ> ™X b©$ hÕ/Õ0Ñ7ñ? ñD ™8¡S E©4 KÕ0Õ1Ñ8ñE ñF Ñ4ñG ñH ÑñI ñJ ‘x  D Õ)Õ*Ñ1ñK ñL ÑñM ñN ÑñO ñP ÑñQ ñR ÑñS ñT ÑñU ñV ÑñW ñX ÑñY ñZ Ñ%ñ[ ñ\ Ññ] ñb  ¡¨©X±d­^Ð);Õ <Õ=ÑDñc ñn #¡8©T±4¨L¹(Á4½.Ð,HÕ#IÕJÑQño ñp Ñ"ñq ñv "¡(©C¨5±(¹5ÁÁhÉsÅmÐASÕ;TÕ2UÐ+UÕ"VÕWÑ^ñw ñz %¡X©s¨e±T¹CµZÐ.?Õ%@ÕAÑHñ{ ñ@ #¡8©T±3¹¹SÐ,AÁ3Ð,FÕ#GÕHÑOñA ñH #¡8¨C±¹4µÐ,@Õ#AÕBÑIñI ñP Ñ!ñQ ñV ÑñW ñ^ Ñ9ñ_ ñd Ñ#ñe ñt "¡(©C¨5±$¨;Õ"7Õ8Ñ?ñu ñ| Ññ} ñD ™U•OÑ*ñE ñJ !Ñ%ñK ñP #'Ñ.ñQ ñ\ #¡8©S¨E±3¨JÕ#7Õ8Ñ?ñ] ñ` ™c•]Ñ)ña ñj Ññk ñl Ñ#ñm ñn Ñño ñp Ñ"ñq ñv %¡U�OÑ2ñw ñ| Ñ7ñ} ñH ÑñI ñN "Ñ&òO r   r#   )4r   r"   Ú__qualname__Ú__firstlineno__Ú__doc__r5   r6   r7   r   r_   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   ra   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rc   s   @r   r-   r-   *   s:  ø‡ € á=ð 8<€Oð" 48€Nð 59€LÙ¨tÔ4€LØ€LØ-1€HØ€FØ€KØÐØ€MØÐØ€HØ€EØ!%ÐØ€Mð AEÐð NRÐØ "Ðð [_ÐàDHÐð LPÐð FJÐð "€Oð €Lñ $°DÔ9Ðð "$Ðð <@Ðð €Nð '+€Nð $&Ðð */Ð ð <@Ðà%)€Oð
 €OØ!#ÐØ€HØ "Ðð /3Ðñ "°$Ô7€Oð €Mð %'Ð÷O ƒ r   r-   c                ó0   € V ^8„  d   QhR\         R\        /# ©r   r1   r   ©r   r^   )r   s   "r   r   r   ´   s   € ÷ ?ñ ?œcð ?¤dñ ?r   c                ó  € ^ RI Hp \        T ;'       g    R4      P                  4       P	                  4       pY!P
                   Uu0 uF  q1V,          P                  kK  	  up9   ;'       g    W!P                  4       ^ ,          9   # u upi )a  *name* is a platform core ships an adapter for: a static ``Platform`` member or a bundled
``plugins/platforms/`` plugin. A user plugin may replace such an adapter but never mark it
``trusted_inbound``: its senders are people, and that flag waives allowlists and pairing.)ÚPlatformr    )Úgateway.configrp   r   ÚstripÚlowerÚ_member_names_ÚvalueÚ_scan_bundled_plugin_platforms)r1   rp   ru   Úmembers   &   r   Úcore_ships_platformrx   ´   st   € õ (Ü�—
�
˜‹O×!Ñ!Ó#×)Ñ)Ó+€EØ×:QÒ:QÓRÑ:Q°˜fÕ%×+Ô+Ñ:QÑRÑR÷ ?ð ?Ø×8Ñ8Ó:¸1Õ=Ñ=ð?ùÒRs   ÁBc                   ó\  a € ] tR t^¾t o RtV 3R lR lt]V 3R lR l4       tRR/V 3R lR	 lltRR/V 3R
 lR llt	V 3R lR lt
RR/V 3R lR lltV 3R lR ltV 3R lR ltRR/V 3R lR lltRR/V 3R lR lltR=V 3R lR lltRR/V 3R lR lltV 3R lR ltR=V 3R  lR! lltV 3R" lR# ltV 3R$ lR% ltV 3R& lR' ltRR/V 3R( lR) lltRR/V 3R* lR+ lltV 3R, lR- ltV 3R. lR/ ltV 3R0 lR1 ltV 3R2 lR3 ltV 3R4 lR5 ltV 3R6 lR7 ltV 3R8 lR9 ltV 3R: lR; lt R<t!V t"R# )>ÚPlatformRegistryz¦Central registry of platform adapters. Registrations are serialized; concurrent
lazy lookups share an in-flight event while the loader runs outside the registry lock.c                ó   <€ V ^8„  d   QhRR/# )r   r   Nr#   )r   rc   s   "€r   r   ÚPlatformRegistry.__annotate__Â   s   ø€ ÷ =ñ =˜$ñ =r   c                ó*  € \         P                  ! 4       V n        / V n        / V n        / V n        / V n        / V n        / V n        \        P                  ! R \        V 4       2\        4       R7      V n        \        4       V n        / V n        / V n        R# )Úplatform_registry_loading_)ÚdefaultN)Ú	threadingÚRLockÚ_lockÚ_entriesÚ_scoped_entriesÚ	_deferredÚ_scoped_deferredÚ	_inflightÚ_inflight_loadersÚcontextvarsÚ
ContextVarÚidÚ	frozensetÚ_loadingÚsetÚ_cancelled_inflightÚ_consumed_loadersÚ_activation_env©Úselfs   &r   Ú__init__ÚPlatformRegistry.__init__Â   sŒ   € Ü—_’_Ó&ˆŒ
Ø24ˆŒð EGˆÔð .0ˆŒØ?AˆÔØ:<ˆŒØ:<ˆÔô FQ×E[ÒE[Ø(¬¨D«¨
Ð3¼Y»[ôF
ˆŒô 36³%ˆÔ ð ;=ˆÔð ;=ˆÖr   c                ó    <€ V ^8„  d   QhRS[ /# r   ©r   )r   rc   s   "€r   r   r|   Þ   s   ø€ ÷ !ñ !™sñ !r   c                 ó   € \        4       # ©Nr   r#   r   r   Úcurrent_scope_keyÚ"PlatformRegistry.current_scope_keyÝ   s   € äÓ Ð r   ÚcreateFc          
      ó~   <€ V ^8„  d   QhRS[ S[,          RS[RS[S[S[S[3,          S[S[S[3,          3,          /# )r   Úscoperœ   r   )r   r   r^   rb   ra   r-   Ú_Loader)r   rc   s   "€r   r   r|   á   sK   ø€ ÷ Yñ YÙ™c•]ðYÙ/3ðYá	‰t‘C™Ð&Õ'©©c±7¨lÕ);Ð;Õ	<ñYr   c               ó*  € Vf   V P                   V P                  3# V'       d9   V P                  P                  V/ 4      V P                  P                  V/ 4      3# V P                  P                  V/ 4      V P                  P                  V/ 4      3# r™   )rƒ   r…   r„   Ú
setdefaultr†   r'   )r“   rž   rœ   s   &&$r   Ú_scope_mapsÚPlatformRegistry._scope_mapsá   s„   € ð Š=Ø—=‘= $§.¡.Ð0Ð0ßØ×'Ñ'×2Ñ2°5¸"Ó=¸t×?TÑ?T×?_Ñ?_Ð`eÐgiÓ?jÐjÐjØ×#Ñ#×'Ñ'¨¨rÓ2°D×4IÑ4I×4MÑ4MÈeÐUWÓ4XÐXÐXr   c                óx   <€ V ^8„  d   QhRS[ S[,          RS[RS[RS[S[ S[,          S[ S[,          3,          /# )r   rž   r1   rœ   r   )r   r   r^   rb   r-   rŸ   )r   rc   s   "€r   r   r|   ê   sE   ø€ ÷ 	ñ 	Ù™c•]ð	Ù*-ð	Ù:>ð	á	‰x™Õ&©±Õ(9Ð9Õ	:ñ	r   c               ó  € V P                  WR7      w  rEVP                  V4      pVP                  V4      pVfE   VfA   V P                  P                  W34      ;'       g    V P                  P                  W34      pWg3# )zN(entry, loader) for *name*; the loader falls back to in-flight, then consumed.©rœ   )r¢   r'   rˆ   r�   )r“   rž   r1   rœ   ÚentriesÚdeferredÚentryÚloaders   &&&$    r   Ú_registration_stateÚ$PlatformRegistry._registration_stateê   s|   € ð !×,Ñ,¨UÐ,ÓBÑˆØ—‘˜DÓ!ˆØ—‘˜dÓ#ˆØŠ=˜Vš^Ø×+Ñ+×/Ñ/°°Ó>×kÐkÀ$×BXÑBX×B\ÑB\Ð^cÐ]jÓBkˆFØˆ}Ðr   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r   rž   r   Nr   )r   rc   s   "€r   r   r|   õ   s   ø€ ÷ &ñ &¡(©3¥-ð &°Dñ &r   c                ó¦   € Ve   V P                   V P                  3MR F.  pVP                  V4      '       d   K  VP                  VR 4       K0  	  R # )Nr#   )r„   r†   r'   Úpop)r“   rž   Úmapss   && r   Ú_prune_scopeÚPlatformRegistry._prune_scopeõ   sD   € ØEJÒEV�T×)Ñ)¨4×+@Ñ+@ÑAÐ\^Ò^ˆDØ—8‘8˜E—?”?Ø—‘˜ Ö%ó _r   rž   Nc                ó@   <€ V ^8„  d   QhRS[ RS[RS[S[ ,          RR/# )r   r1   rª   rž   r   N)r   rŸ   r   )r   rc   s   "€r   r   r|   ü   s.   ø€ ÷ (ñ (¡cð (±7ð (ÁhÉsÅmð (Ð_cñ (r   c               óà   € V P                   ;_uu_ 4        V P                  VRR7      w  rEV P                  P                  W13R4       W9  d   W%V&   RRR4       R#   + '       g   i     R# ; i)z›Register a lazy loader (imports the plugin module, which must call :meth:`register`);
runs at most once, on first lookup; a concrete registration drops it.Tr¦   N)r‚   r¢   r�   r¯   )r“   r1   rª   rž   r§   r¨   s   &&&$  r   Úregister_deferredÚ"PlatformRegistry.register_deferredü   sV   € ð �Z�Z‹ZØ $× 0Ñ 0°¸tÐ 0Ó DÑˆGØ×"Ñ"×&Ñ&¨ }°dÔ;ØÔ"Ø!'˜‘÷	 �Z�ZŠZús   •=AÁA-	c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   r1   r   Nr—   )r   rc   s   "€r   r   r|     s   ø€ ÷ ]ñ ]©ð ]¸4ñ ]r   c                ó  € \        R T;'       g    R 4       4      pV P                  ;_uu_ 4        V P                  P                  V\        4       4      V,          V P                  V&   RRR4       R#   + '       g   i     R# ; i)zWRecord the env names a deferred platform's manifest declares (see ``_activation_env``).c              3   ó–   "  € T F?  p\        V4      P                  4       '       g   K$  \        V4      P                  4       x € KA  	  R # 5ir™   )r   rr   )Ú.0Úns   & r   Ú	<genexpr>Ú7PlatformRegistry.note_activation_env.<locals>.<genexpr>  s*   é € ÐT±/¨QÄSÈÃVÇ\Á\Ç^œ.œ#˜a›&Ÿ,™,Ÿ.˜.³/ùs
   ‚!A	¨!A	Nr#   )rŒ   r‚   r‘   r'   )r“   r1   Ú	env_namesÚnamess   &&& r   Únote_activation_envÚ$PlatformRegistry.note_activation_env  sZ   € äÑT°)·/°/¸r°/ÓTÓTˆØ�Z�Z‹ZØ)-×)=Ñ)=×)AÑ)AÀ$Ì	ËÓ)TÐW\Õ)\ˆD× Ñ  Ñ&÷ �Z�ZŠZús   ±9A4Á4B	c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# rm   )r   rŒ   )r   rc   s   "€r   r   r|     s   ø€ ÷ ?ñ ?¡3ð ?©9±S­>ñ ?r   c                ó°   € V P                   ;_uu_ 4        V P                  P                  V\        4       4      uuR R R 4       #   + '       g   i     R # ; ir™   )r‚   r‘   r'   rŒ   )r“   r1   s   &&r   Úactivation_envÚPlatformRegistry.activation_env  s/   € Ø�Z�Z‹ZØ×'Ñ'×+Ñ+¨D´)³+Ó>÷ �Z�Z‹Zús   •$AÁA	c          	      ór   <€ V ^8„  d   QhRS[ RS[S[ ,          RS[S[S[,          S[S[,          3,          /# ©r   r1   rž   r   )r   r   rb   r-   rŸ   )r   rc   s   "€r   r   r|     s=   ø€ ÷ 9ñ 9Ùð9Ù#+©C¥=ð9á	‰x™Õ&©±Õ(9Ð9Õ	:ñ9r   c               óŠ   € V P                   ;_uu_ 4        V P                  W!4      uuRRR4       #   + '       g   i     R# ; i)zªConcrete and deferred state for *name* without resolving it, so the plugin ledger can
restore a deferred loader displaced by a concrete registration without importing it.N)r‚   r«   ©r“   r1   rž   s   &&$r   Úsnapshot_registrationÚ&PlatformRegistry.snapshot_registration  s'   € ð
 �Z�Z‹ZØ×+Ñ+¨EÓ8÷ �Z�Z‹Zús	   •1±A	c          
      ó´   <€ V ^8„  d   QhRS[ RS[S[S[,          S[S[,          3,          RS[S[S[,          S[S[,          3,          RS[S[ ,          RS[/# )r   r1   ÚcurrentÚpreviousrž   r   )r   rb   r   r-   rŸ   r^   )r   rc   s   "€r   r   r|     sd   ø€ ÷ ñ ÙðÙ"'©±Õ(?ÁÉ'ÕARÐ(RÕ"Sðá™¡Õ/±¹'Õ1BÐBÕCðáOWÑX[Í}ðñ 
ñr   c               ó  € V P                   ;_uu_ 4        V P                  WARR7      w  rVWR^ ,          Jg   Wb^,          Jd    RRR4       R# WA3p\        V P                  V4      V4       F!  w  r‰V	f   VP	                  VR4       K  W˜V&   K#  	  WpP
                  9   d   V P                  P                  V4       V P                  P	                  VR4       V P                  V4        RRR4       R#   + '       g   i     R# ; i)z•Restore a registration if its full state is still *current* (CAS): a later
registration is never removed, and deferred loaders are part of the state.Tr¦   NF)
r‚   r«   Úzipr¢   r¯   r‡   r�   Úaddr�   r±   )
r“   r1   rÍ   rÎ   rž   r©   rª   Úload_keyÚmappingru   s
   &&&&$     r   Úrestore_registrationÚ%PlatformRegistry.restore_registration  sÖ   € ð �Z�Z‹ZØ ×4Ñ4°UÈÐ4ÓN‰MˆEØ A�JÓ&¨&À½
Ó*BØ÷ ‰Zð �}ˆHÜ"% d×&6Ñ&6°uÓ&=¸xÖ"H‘�Ø’=Ø—K‘K  dÖ+à$)˜D“Mñ	 #Ið
 Ÿ>™>Ô)Ø×(Ñ(×,Ñ,¨XÔ6Ø×"Ñ"×&Ñ& x°Ô6Ø×Ñ˜eÔ$Ø÷ �Z�ZŠZús   •/C4ÁBC4Ã4D	c                ó:   <€ V ^8„  d   QhRS[ RS[S[ ,          RR/# )r   r1   rž   r   N)r   r   )r   rc   s   "€r   r   r|   -  s&   ø€ ÷ 7.ñ 7.™Sð 7.©±#­ð 7.À$ñ 7.r   c           	     óô  € RpRpV P                   ;_uu_ 4        T;'       g    V P                  4       pV P                  V4      w  rgWQ3pRV3p	V P                  P	                  V4      p
TpV
fE   W9  d?   V P
                  P	                  4       '       d   ^ RIHp V! 4       '       d    RRR4       R# V
f   W9  d   VP                  VR4      pV
fH   VfD   W9  d>   T	pV P                  P	                  V	4      p
V
f   V P                  P                  VR4      pV
f8   Ve4   \        P                  ! 4       p
W P                  V&   W0P                  V&   RpV
f    RRR4       R# V'       g@   W°P
                  P	                  4       9   d"   \        P                  RV4        RRR4       R# RRR4       V'       g%   X
P                  4        V P!                  VX4       R# V P
                  P#                  V P
                  P	                  4       X0,          4      p V! 4        V P
                  P'                  V4       V P                   ;_uu_ 4        W°P(                  9   pV P                  V^ ,          4      w  rgV'       g   W9  d   W9  d   W0P*                  V&   V P                  P                  VR4       V P                  P                  VR4       V P(                  P-                  V4       X
P#                  4        RRR4       X'       d   T P!                  TX4       R# R#   + '       g   i     ELƒ; i  \$         d$   p\        P                  RYRR7        Rp?EL@Rp?ii ; i  + '       g   i     Ls; i  T P
                  P'                  T4       T P                   ;_uu_ 4        Y°P(                  9   pT P                  T^ ,          4      w  rgT'       g   Y9  d   Y9  d   Y0P*                  T&   T P                  P                  TR4       T P                  P                  TR4       T P(                  P-                  T4       X
P#                  4        RRR4       i   + '       g   i     i ; i; i)z5Run the deferred loader for *name* if one is pending.NF)Úin_plugin_load_workerTz:Deferred platform '%s' recursively requested while loadingz)Deferred load of platform '%s' failed: %s©Úexc_info)r‚   rš   r¢   r‡   r'   r�   Úhermes_cli.plugins_loaderrØ   r¯   r…   r€   ÚEventrˆ   ÚloggerÚwarningÚwaitÚ_resolverŽ   r(   Úresetr�   r�   Údiscard)r“   r1   rž   rª   Ú	is_loaderÚactive_scoper§   r¨   Ú
scoped_keyÚ
global_keyÚeventrÒ   rØ   ÚtokenÚeÚwas_cancelleds   &&&             r   rà   ÚPlatformRegistry._resolve-  sq  € à$(ˆØˆ	Ø�Z�Z‹ZØ ×<Ð< D×$:Ñ$:Ó$<ˆLØ $× 0Ñ 0°Ó >ÑˆGØ&Ð-ˆJØ ˜ˆJØ—N‘N×&Ñ& zÓ2ˆEØ!ˆHØŠ} Ô!4¸¿¹×9JÑ9J×9LÒ9LÝKÙ(×*Ò*Ø÷ ‰Zð Š} Ô!4Ø!Ÿ™ d¨DÓ1�ØŠ} ¢°DÔ4GØ%�ØŸ™×*Ñ*¨:Ó6�Ø’=Ø!Ÿ^™^×/Ñ/°°dÓ;�FØŠ} Ò!3Ü!ŸšÓ)�Ø+0—‘˜xÑ(Ø39×&Ñ& xÑ0Ø �	ØŠ}Ø÷1 ‰Z÷2  ¯]©]×->Ñ->Ó-@Ô!@Ü—‘Ð[Ð]aÔbØ÷7 �Z‰Z÷8 Ø�J‰JŒLð �M‰M˜$ Ô-ÙØ—‘×!Ñ! $§-¡-×"3Ñ"3Ó"5¸¸
Õ"BÓCˆð	ÙŒHð �M‰M×Ñ Ô&Ø——“Ø (×,DÑ,DÑ D�Ø$(×$4Ñ$4°X¸aµ[Ó$AÑ!�ß$¨Ô)<ÀÔAUØ7=×*Ñ*¨8Ñ4Ø—‘×"Ñ" 8¨TÔ2Ø×&Ñ&×*Ñ*¨8°TÔ:Ø×(Ñ(×0Ñ0°Ô:Ø—	‘	”÷ ÷ Ø�M‰M˜$ Ö-ñ ÷e �ZˆZûôJ ô 	`Ü�N‰NÐFÈÐZ^ˆN×_Ò_ûð	`ú÷ —ûð �M‰M×Ñ Ô&Ø——“Ø (×,DÑ,DÑ D�Ø$(×$4Ñ$4°X¸aµ[Ó$AÑ!�ß$¨Ô)<ÀÔAUØ7=×*Ñ*¨8Ñ4Ø—‘×"Ñ" 8¨TÔ2Ø×&Ñ&×*Ñ*¨8°TÔ:Ø×(Ñ(×0Ñ0°Ô:Ø—	‘	”÷ ——�ýs{   ™A;L%ÂL%Â(L%Â3B'L%Å$L%Å,5L%ÈL9 ÉB.M*Ì%L6	Ì9M'ÍM"ÍM= Í"M'Í'M= Í*M:	Í=0Q7Î-B.Q$	Ñ	Q7Ñ$Q4Ñ/Q7c                ó<   <€ V ^8„  d   QhRS[ RS[S[ ,          RS[/# rÇ   ©r   r   r^   )r   rc   s   "€r   r   r|   f  s'   ø€ ÷ =ñ =©sð =¹hÁs½mð =ÑW[ñ =r   c               óˆ   € V P                   ;_uu_ 4        W!3V P                  9   uuRRR4       #   + '       g   i     R# ; i)z9Whether ownership teardown cancelled an in-flight loader.N)r‚   r�   rÉ   s   &&$r   Úis_deferred_load_cancelledÚ+PlatformRegistry.is_deferred_load_cancelledf  s'   € à�Z�Z‹ZØ�= D×$<Ñ$<Ñ<÷ �Z�Z‹Zús	   •0°A	c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )r   rä   r   )r   r_   )r   rc   s   "€r   r   r|   k  s#   ø€ ÷ Mñ M©3ð M±4¹µ9ñ Mr   c                ó�  € V P                   ;_uu_ 4        V P                  V4      w  r#\        V4      p\        V P                  4      pV P                   F5  w  rgWa8X  d   VP                  V4       K  Ve   K$  VP                  V4       K7  	  RRR4       . \        X4      O\        XV,
          4      O#   + '       g   i     L/; i)zUDeferred (or in-flight) names for *active_scope*, scoped first, without loading them.N)r‚   r¢   rŽ   r…   r‡   rÑ   Úsorted)r“   rä   rƒ   Úscoped_deferredÚscoped_namesÚglobal_namesÚinflight_scoper1   s   &&      r   Ú_pending_namesÚPlatformRegistry._pending_namesk  sž   € à�Z�Z‹ZØ(,×(8Ñ(8¸Ó(FÑ%ˆHÜ˜Ó/ˆLÜ˜tŸ~™~Ó.ˆLØ(,¯¬Ñ$�Ø!Ô1Ø ×$Ñ$ TÖ*Ø#Ô+Ø ×$Ñ$ TÖ*ñ	 )7÷	 ð M”˜Ó%ÐL¬¨|¸lÕ/JÓ(KÐLÐL÷ �Zús   •AB5Á9B5Â5C	c                óL   <€ V ^8„  d   QhRS[ S[S[.S[3,          ,          RR/# )r   Úwantedr   N)r   r   r   r^   )r   rc   s   "€r   r   r|   x  s+   ø€ ÷ 2ñ 2¡8©H±c°U¹D°[Õ,AÕ#Bð 2Èdñ 2r   c                ó    € V P                  4       pV P                  V4       F(  pVe   V! V4      '       g   K  V P                  W24       K*  	  R# )z¨Run every pending deferred loader, or only those *wanted* accepts (``all_entries`` /
``plugin_entries`` / ``configured_entries``; CLI chat never iterates the full set).N)rš   rø   rà   )r“   rû   rä   r1   s   &&  r   Ú_resolve_allÚPlatformRegistry._resolve_allx  sB   € ð ×-Ñ-Ó/ˆð ×'Ñ'¨Ö5ˆDØŠ~¡¨§¤Ø—‘˜dÖ1ó 6r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   )r_   r   )r   rc   s   "€r   r   r|   ‚  s   ø€ ÷ =ñ =™t¡C�yñ =r   c                ó@   € V P                  V P                  4       4      # )zUNames registered as deferred loaders that have not been imported yet (current scope).)rø   rš   r’   s   &r   Úpending_namesÚPlatformRegistry.pending_names‚  s   € à×"Ñ" 4×#9Ñ#9Ó#;Ó<Ð<r   c                óN   <€ V ^8„  d   QhRS[ S[.S[3,          RS[S[,          /# )r   rû   r   )r   r   r^   r_   r-   )r   rc   s   "€r   r   r|   †  s/   ø€ ÷ 	nñ 	n©±3°%¹°+Õ)>ð 	nÁ4ÉÕCVñ 	nr   c           	     ó(  € V P                  V4       V P                  ;_uu_ 4        \        / V P                  CV P                  P                  V P                  4       / 4      CP                  4       4      uuRRR4       #   + '       g   i     R# ; i)a¯  Loaded entries, after materializing only the deferred platforms *wanted* accepts.

The gateway's config/env passes need each platform's hooks only for platforms the profile
actually configures; importing every bundled adapter (~20 SDKs) just to read metadata cost
every cold start ~0.5 s. *wanted* is :func:`gateway.platform_activation.has_activation_evidence`
(or a test stub); entries that are already loaded are always returned.N©rý   r‚   r_   rƒ   r„   r'   rš   Úvalues)r“   rû   s   &&r   Úconfigured_entriesÚ#PlatformRegistry.configured_entries†  sd   € ð 	×Ñ˜&Ô!Ø�Z�Z‹ZÜÐc˜4Ÿ=™=Ðc¨D×,@Ñ,@×,DÑ,DÀT×E[ÑE[ÓE]Ð_aÓ,bÐc×jÑjÓlÓm÷ �Z�Z‹Zús   ¦AB Â B	c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   ©r_   r-   )r   rc   s   "€r   r   r|   ‘  s   ø€ ÷ nñ n¡¡]Õ 3ñ nr   c           	     ó  € V P                   ;_uu_ 4        \        / V P                  CV P                  P	                  V P                  4       / 4      CP                  4       4      uuRRR4       #   + '       g   i     R# ; i)z@Entries already materialized (never imports a deferred adapter).N)r‚   r_   rƒ   r„   r'   rš   r  r’   s   &r   Úloaded_entriesÚPlatformRegistry.loaded_entries‘  sT   € à�Z�Z‹ZÜÐc˜4Ÿ=™=Ðc¨D×,@Ñ,@×,DÑ,DÀT×E[ÑE[ÓE]Ð_aÓ,bÐc×jÑjÓlÓm÷ �Z�Z‹Zús   •AA/Á/B 	c                ó:   <€ V ^8„  d   QhRS[ RS[S[,          RR/# )r   r©   rž   r   N)r-   r   r   )r   rc   s   "€r   r   r|   –  s,   ø€ ÷ [ñ [™mð [±xÁµ}ð [ÐPTñ [r   c               óæ  € V P                   ;_uu_ 4        VfV   VP                  R8X  dE   \        4       ;'       g3    \        VP                  4      ;'       g    \        VP
                  4      pV P                  VRR7      w  r4V P                  P                  W!P                  3R4       VP                  VP                  R4       VP                  VP                  4      pVe7   \        P                  RVP                  VP                  VP                  4       WVP                  &   \        P                  RVP                  VP                  4       RRR4       R#   + '       g   i     R# ; i)zCRegister a platform adapter entry (last writer wins on name clash).Nr/   Tr¦   z,Platform '%s' re-registered (was %s, now %s)z$Registered platform adapter: %s (%s))r‚   r;   r+   r   r3   r4   r¢   r�   r¯   r1   r'   rÝ   ÚinfoÚdebug)r“   r©   rž   r§   r¨   Úprevs   &&$   r   ÚregisterÚPlatformRegistry.register–  s  € à�Z�Z‹ZØŠ} §¡°Ô!9ä(Ó*÷ Cð CÜ2°5×3HÑ3HÓI÷Cð Cä2°5·>±>ÓBð ð !%× 0Ñ 0°¸tÐ 0Ó DÑˆGØ×"Ñ"×&Ñ&¨¯z©zÐ':¸DÔAØ�L‰L˜Ÿ™ TÔ*Ø—;‘;˜uŸz™zÓ*ˆDØÒÜ—‘ÐJÈEÏJÉJÐX\×XcÑXcÐej×eqÑeqÔrØ"'�E—J‘JÑÜ�L‰LÐ?ÀÇÁÈUÏ\É\ÔZ÷ �Z�ZŠZús   •&E¼EÁC<EÅE0	c                ó<   <€ V ^8„  d   QhRS[ RS[S[ ,          RS[/# rÇ   rí   )r   rc   s   "€r   r   r|   ©  s&   ø€ ÷ =ñ =™sð =©h±s­mð =Átñ =r   c               óü  € V P                   ;_uu_ 4        Ve   TM	\        4       pT;'       g    V P                  4       pV P                  V4      w  rVVf   W9   g   W9   dD   VP	                  VR4       VP	                  VR4      RJpV P                  V4       VuuRRR4       # V P                  P	                  VR4       V P                  P	                  VR4      RJuuRRR4       #   + '       g   i     R# ; i)z4Remove a platform entry. Returns True if it existed.N)r‚   r+   rš   r¢   r¯   r±   r…   rƒ   )r“   r1   rž   Úinferred_scoperä   r§   r¨   Úremoveds   &&$     r   Ú
unregisterÚPlatformRegistry.unregister©  sÉ   € à�Z�Z‹ZØ&+Ò&7™UÔ=QÓ=SˆNØ)×EÐE¨T×-CÑ-CÓ-EˆLØ $× 0Ñ 0°Ó >ÑˆGØÒ)¨T¬_ÀÔ@PØ—‘˜T 4Ô(Ø!Ÿ+™+ d¨DÓ1¸Ð=�Ø×!Ñ! ,Ô/Ø÷ ŠZð �N‰N×Ñ˜t TÔ*Ø—=‘=×$Ñ$ T¨4Ó0¸Ð<÷ �Z�Z‹Zús   •C*¯A,C*Â&9C*Ã*C;	c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r   rž   r1   r   rn   )r   rc   s   "€r   r   r|   ·  s"   ø€ ÷ 
ñ 
¡3ð 
©cð 
±dñ 
r   c                óê   € V P                  V4      w  r4W$9   ;'       gV    W P                  9  ;'       d    W P                  9   ;'       g*    W3V P                  9   ;'       g    RV3V P                  9   # )zJTrue when a lookup of *name* must run/await a deferred loader (lock held).N)r¢   rƒ   r…   r‡   )r“   rž   r1   rƒ   r¨   s   &&&  r   Ú_load_pendingÚPlatformRegistry._load_pending·  sz   € à!×-Ñ-¨eÓ4ÑˆàÑ÷ Qð Q ¯]©]Ñ!:×!UÐ!U¸tÇ~Á~Ñ?U÷ Qð QØˆ} §¡Ñ.÷Qð QØ37¸°,À$Ç.Á.Ñ2Pð	
r   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# rm   )r   r   r-   )r   rc   s   "€r   r   r|   ¿  s$   ø€ ÷ 
@ñ 
@™ð 
@¡©Õ 7ñ 
@r   c                ó  € V P                  4       pV P                  ;_uu_ 4        V P                  V4      w  r4W9  ;'       d    V P                  W!4      pRRR4       X'       d   V P	                  W4       V P                  ;_uu_ 4        V P                  V4      w  r4VP                  V4      ;'       g    V P                  P                  V4      uuRRR4       #   + '       g   i     L�; i  + '       g   i     R# ; i)z!Look up a platform entry by name.N)rš   r‚   r¢   r  rà   r'   rƒ   )r“   r1   rž   r§   r…   Úneeds_resolves   &&    r   r'   ÚPlatformRegistry.get¿  sµ   € à×&Ñ&Ó(ˆØ�Z�Z‹ZØ!%×!1Ñ!1°%Ó!8ÑˆGØ Ñ/×SÐS°D×4FÑ4FÀuÓ4SˆM÷ ÷ Ø�M‰M˜$Ô&Ø�Z�Z‹ZØ!%×!1Ñ!1°%Ó!8ÑˆGØ—;‘;˜tÓ$×?Ð?¨¯©×(9Ñ(9¸$Ó(?÷ ŠZ÷ �Zú÷
 �ZˆZús   ¥1CÂAC0ÃC-	Ã0D	c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   r
  )r   rc   s   "€r   r   r|   Ë  s   ø€ ÷ nñ n™T¡-Õ0ñ nr   c           	     ó&  € V P                  4        V P                  ;_uu_ 4        \        / V P                  CV P                  P                  V P                  4       / 4      CP                  4       4      uuRRR4       #   + '       g   i     R# ; i)z'Return all registered platform entries.Nr  r’   s   &r   Úall_entriesÚPlatformRegistry.all_entriesË  s`   € à×ÑÔØ�Z�Z‹ZÜÐc˜4Ÿ=™=Ðc¨D×,@Ñ,@×,DÑ,DÀT×E[ÑE[ÓE]Ð_aÓ,bÐc×jÑjÓlÓm÷ �Z�Z‹Zús   ¥AA?Á?B	c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   r
  )r   rc   s   "€r   r   r|   Ñ  s   ø€ ÷ Gñ G¡¡]Õ 3ñ Gr   c                óp   € V P                  4        Uu. uF  qP                  R8X  g   K  VNK  	  up# u upi )z/Return only plugin-registered platform entries.r/   )r%  r;   )r“   ré   s   & r   Úplugin_entriesÚPlatformRegistry.plugin_entriesÑ  s0   € à×+Ñ+Ô-ÓFÑ-�a·±¸XÑ1E—�Ñ-ÑFÐFùÒFs   “3ª3c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   ©rŽ   r   )r   rc   s   "€r   r   r|   Õ  s   ø€ ÷ cñ c¡#¡c¥(ñ cr   c                óp  € V P                   ;_uu_ 4        V P                  V P                  4       4      w  rVP                  4       VP                  4       ,          V P                  P                  4       ,          V P
                  P                  4       ,          uuRRR4       #   + '       g   i     R# ; i)zxConcrete and deferred names (current profile scope AND process-global, like
``is_registered``) without loading adapters.N)r‚   r¢   rš   Úkeysrƒ   r…   )r“   r§   r¨   s   &  r   Úregistered_namesÚ!PlatformRegistry.registered_namesÕ  sm   € ð �Z�Z‹ZØ $× 0Ñ 0°×1GÑ1GÓ1IÓ JÑˆGØ—<‘<“> H§M¡M£OÕ3°d·m±m×6HÑ6HÓ6JÕJÈTÏ^É^×M`ÑM`ÓMbÕb÷ �Z�Z‹Zús   •BB$Â$B5	c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   r,  )r   rc   s   "€r   r   r|   Ü  s   ø€ ÷ Cñ C¡C©¥Hñ Cr   c                óˆ  € V P                   ;_uu_ 4        V P                  V P                  4       4      w  r. V P                  P	                  4       OVP	                  4       O UUu0 uF0  pVP
                   F  p\        V\        4      '       g   K  VkK  	  K2  	  uppuuRRR4       # u uppi   + '       g   i     R# ; i)z£``required_env`` of every loaded entry (current profile scope AND process-global) without
loading deferred adapters; the child-env scrub reads this on every spawn.N)r‚   r¢   rš   rƒ   r  r8   Ú
isinstancer   )r“   r§   r…   ré   r»   s   &    r   Úrequired_env_namesÚ#PlatformRegistry.required_env_namesÜ  s—   € ð �Z�Z‹ZØ!%×!1Ñ!1°$×2HÑ2HÓ2JÓ!KÑˆGØK §¡×!5Ñ!5Ó!7ÐK¸'¿.¹.Ó:JÑKô CÑK˜!ØŸ^œ^˜¬z¸!¼S×/A÷ �AÙ+ñ ÑKò C÷ ŠZùóC÷ �ZˆZús$   •AB0Á&'B*
Â
B*
ÂB0Â*B0Â0C	c                ó&   <€ V ^8„  d   QhRS[ RS[/# rm   rn   )r   rc   s   "€r   r   r|   ä  s   ø€ ÷ _ñ _¡#ð _©$ñ _r   c                ó  € V P                   ;_uu_ 4        V P                  4       pV P                  V4      w  r4W9   ;'       g(    WP                  9   ;'       g    V P	                  W!4      uuR R R 4       #   + '       g   i     R # ; ir™   )r‚   rš   r¢   rƒ   r  )r“   r1   rž   r§   r…   s   &&   r   Úis_registeredÚPlatformRegistry.is_registeredä  sb   € ð �Z�Z‹ZØ×*Ñ*Ó,ˆEØ!%×!1Ñ!1°%Ó!8ÑˆGØ‘?×^Ð^ d¯m©mÑ&;×^Ð^¸t×?QÑ?QÐRWÓ?^÷ �Z�Z‹Zús   •AA6ÁA6Á6B	c                ó<   <€ V ^8„  d   QhRS[ RS[RS[S[,          /# )r   r1   Úconfigr   )r   r   r   )r   rc   s   "€r   r   r|   ì  s&   ø€ ÷ "ñ "¡3ð "±ð "¹Á½ñ "r   c                ó<  a€ V P                  V4      oSf   R# R V3R llpV! SP                  R4      pV'       gB   SP                  e4   \        P	                  RSP
                  4       V! SP                  R4      pV'       gH   SP                  '       d   RSP                   R2MR	p\        P                  R
SP
                  V4       R# SP                  e<    SP                  V4      '       g#   \        P                  RSP
                  4       R#   SP                  V4      #   \         d-   p\        P                  RSP
                  T4        Rp?R# Rp?ii ; i  \         d/   p\        P                  RSP
                  TRR7        Rp?R# Rp?ii ; i)z�Create an adapter instance for *name*; None when no entry exists, deps are missing
and cannot be installed, ``validate_config`` fails, or the factory raises.Nc                óV   € V ^8„  d   QhR\         . \        3,          R\        R\        /# )r   ÚfnÚfailure_msgr   )r   r   r   r^   )r   s   "r   r   Ú5PlatformRegistry.create_adapter.<locals>.__annotate__ò  s*   € ÷ 	ñ 	”x ¤C Õ(ð 	´sð 	¼tñ 	r   c                 óš   <€  \        V ! 4       4      #   \         d-   p\        P                  TSP                  T4        R p?R# R p?ii ; i)NF)r^   r(   rÝ   rÞ   r2   )r>  r?  ré   r©   s   && €r   Ú_probeÚ/PlatformRegistry.create_adapter.<locals>._probeò  s;   ø€ ðÜ™B›D“zÐ!øÜô Ü—‘˜{¨E¯K©K¸Ô;Ýûðús   ƒ “A
ž!AÁA
z!Platform '%s' check_fn raised: %su<   Platform '%s' dependencies missing â€” attempting install...z+Platform '%s' dependency install raised: %sz (Ú)r    z$Platform '%s' requirements not met%sz&Platform '%s' config validation failedz)Platform '%s' config validation error: %sz.Failed to create adapter for platform '%s': %sTrÙ   )r'   r4   r6   rÝ   r  r2   r9   rÞ   r5   r(   r3   Úerror)r“   r1   r;  rB  Údeps_okÚhintré   r©   s   &&&    @r   Úcreate_adapterÚPlatformRegistry.create_adapterì  s[  ø€ ð —‘˜“ˆØŠ=Ù÷	ð 	ñ ˜Ÿ™Ð)LÓMˆß˜5×/Ñ/Ò;ô �K‰KÐVÐX]×XcÑXcÔdÙ˜U×1Ñ1Ð3`ÓaˆGßØ16×1C×1CÐ1C�R˜×*Ñ*Ð+¨1Ñ-ÈˆDÜ�N‰NÐAÀ5Ç;Á;ÐPTÔUÙØ× Ñ Ò,ðØ×,Ñ,¨V×4Ò4Ü—N‘NÐ#KÈUÏ[É[ÔYÙð 5ð	Ø×(Ñ(¨Ó0Ð0øô	 ô Ü—‘ÐJÈEÏKÉKÐYZÔ[Ýûðûô
 ô 	Ü�L‰LÐIÈ5Ï;É;ÐXYÐdhˆLÔiÝûð	ús6   ÃD( Ã3 D( ÄE" Ä(EÄ3!EÅEÅ"FÅ-#FÆF)r‘   r�   r�   r…   rƒ   r‡   rˆ   r�   r‚   r†   r„   r™   )#r   r"   re   rf   rg   r”   Ústaticmethodrš   r¢   r«   r±   rµ   rÀ   rÄ   rÊ   rÔ   rà   rï   rø   rý   r  r  r  r  r  r  r'   r%  r)  r/  r4  r8  rH  ri   rj   rk   s   @r   rz   rz   ¾   s{  ø‡ € ñ^÷=ð =ð6 ÷!ó ð!ðYØ6;÷Yò Yð	ØAF÷	ò 	÷&ð &ð(ÐVZ÷ (ò (÷]ð ]÷?ð ?ð9Ø37÷9ò 9ðà_c÷ò ÷,7.ò 7.ðr=Èd÷ =ò =÷
Mð M÷2ò 2÷=ð =÷	nð 	n÷nð nð
[Àt÷ [ò [ð&=¸d÷ =ò =÷
ð 
÷
@ð 
@÷nð n÷Gð G÷cð c÷Cð C÷_ð _÷"ö "r   rz   )rg   r‰   Úloggingr$   r€   Údataclassesr   r   Útypingr   r   r   r   Úhermes_constantsr	   Ú	getLoggerr   rÝ   rb   r   Ú_LoadKeyrŸ   r   r+   r-   rx   rz   Úplatform_registryr#   r   r   Ú<module>rR     sš   ðñó Û Û 
Û ß (ß 5Ó 5å ,à	×	Ò	˜8Ó	$€à�˜#• Ð#Õ$€Ø
�2�t�8Õ
€õõYð ÷F'ð F'ó ðF'õR?÷Pñ Pñh
 %Ó&Ò r   