Ë
    âß²j/>  ã                  óö   — d Z ddlm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mZmZmZmZ ddlmZ ddlmZ dd	lmZmZ e
rdd
lmZ  ej6                  d«      Zdd„Ze G d„ d«      «       Z G d„ d«      Zy)zÝRegistration ownership ledger and unload: every plugin registration is recorded with its inverse so force
reload / targeted unload unwind registries in reverse order. Mixed into :class:`hermes_cli.plugins.PluginManager`.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptionalÚSetÚUnion)Úreplacement_coordinator)Ú_plugin_home_scope)ÚPluginManifestÚmanifest_key©ÚLoadedPluginzhermes_cli.pluginsc                ól   — t        |dd«      }|r$| t        t        |«      j                  «       «      fS dS )zW(plugin name, resolved ``__file__``) identity shared by the general and memory loaders.Ú__file__N)ÚgetattrÚstrr   Úresolve)ÚnameÚmoduleÚsources      ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/plugins_ledger.pyÚ_hook_source_ofr      s4   € ä�V˜Z¨Ó.€FÙ28ˆD”#”d˜6“l×*Ñ*Ó,Ó-Ð.ÐB¸dÐBó    c                  ó¦   — e Zd ZU dZded<   ded<   ded<   dZded<   d	Zd
ed<    ed	d	d	¬«      Zd
ed<    edd	d	¬«      Z	ded<   e
dd„«       Zdd„Zy)ÚPluginRegistrationz›One host-owned registration plus its inverse, so force reload unwinds registries in reverse order
    (including restoring the entry an override replaced).r   ÚkindÚkeyúCallable[[], None]ÚreleaseÚ Ú
plugin_keyFÚboolÚ
persistent)ÚdefaultÚinitÚreprÚ	_disposedNz0Optional[Callable[['PluginRegistration'], None]]Ú_on_disposec                ó   — | j                    S )z6Whether this handle still owns an active registration.)r-   ©Úselfs    r   ÚactivezPluginRegistration.active-   s   € ð —>‘>Ð!Ð!r   c                óÐ   — | j                   ryd| _         	 | j                  «        | j                  �| j                  | «       yy# | j                  �| j                  | «       w w xY w)z>Release this registration once; repeated disposal is harmless.NT)r-   r%   r.   r0   s    r   ÚdisposezPluginRegistration.dispose2   s`   € à�>Š>ØØˆŒð	'Ø�L‰LŒNà×ÑÐ+Ø× Ñ  Õ&ð ,øˆt×ÑÐ+Ø× Ñ  Õ&ð ,ús   –A Á A%)Úreturnr(   ©r5   ÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r'   r)   r   r-   r.   Úpropertyr2   r4   © r   r   r!   r!      sp   … ñ=ð ƒIØ	ƒHØÓØ€J�Óð
 €J�ÓÙ E°¸EÔB€IˆtÓBÙDIÐRVÐ]bÐinÔDo€KÐAÓoàò"ó ð"ô	'r   r!   c                  ó  — e Zd Zddœ	 	 	 	 	 	 	 	 	 	 	 dd„Zddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zedd	„«       Zdd
„Z	dd„Z
d d„Zd!d„Zd"d„Zd"d„Zd#d„Zd$d„Z	 	 	 	 d%d„Zd#d„Zed&d„«       Zd'd(d„Zd'd(d„Zd)d„Zd#d„Zy)*ÚPluginLedgerMixinF)r)   c               óò   ‡ — t        |||t        |«      |¬«      }ˆ fd„|_        ‰ j                  j	                  |j
                  g «      j                  |«       |s‰ j                  j                  |«       |S )aM  Record one registration under its canonical plugin key. ``persistent`` ones (process-global host
        infrastructure) stay in the ownership ledger for attribution but NOT in ``_registration_order``, so a
        routine unload cannot dispose them; the handle still releases on explicit ``dispose()``.

        See #91701.
        )r"   r#   r%   r'   r)   c                ó(   •— ‰j                  | g«      S ©N)Ú_forget_registrations)Údisposedr1   s    €r   ú<lambda>z7PluginLedgerMixin._track_registration.<locals>.<lambda>K   s   ø€ °D×4NÑ4NÐPXÈzÓ4Z€ r   )r!   r   r.   Ú_ownership_ledgerÚ
setdefaultr'   ÚappendÚ_registration_order)r1   Úmanifestr"   r#   r%   r)   Úregistrations   `      r   Ú_track_registrationz%PluginLedgerMixin._track_registration?   sm   ø€ ô *Ø˜3¨¼LÈÓ<RÐ_iôkˆã#ZˆÔ Ø×Ñ×)Ñ)¨,×*AÑ*AÀ2ÓF×MÑMÈlÔ[ÙØ×$Ñ$×+Ñ+¨LÔ9ØÐr   N)Úfinalizec          	     ó¤   ‡‡‡‡	— | j                   Š	t        j                  |‰	‰f‰|ˆˆˆˆ	fd„|¬«      }| j                  ||‰|j                  «      S )u  Lease one ``(kind, scope, name)`` slot of a scope-keyed process-global registry. Unload calls
        ``registry.restore_registration(name, current, replacement, scope=...)`` â€” identity-conditional, so a
        later generation is never removed by an earlier owner.c                ó.   •— ‰j                  ‰‰| ‰¬«      S )N)Úscope)Úrestore_registration)ÚreplacementÚcurrentr   ÚregistryrQ   s    €€€€r   rF   z>PluginLedgerMixin._track_scoped_registration.<locals>.<lambda>[   s   ø€ ¨×(EÑ(EÀdÈGÐU`ÐhmÐ(EÓ(n€ r   )rT   ÚpreviousÚrestorerN   )Ú	scope_keyr   ÚacquirerM   r4   )
r1   rK   r"   r   rU   rT   rV   rN   ÚleaserQ   s
      ```   @r   Ú_track_scoped_registrationz,PluginLedgerMixin._track_scoped_registrationQ   sO   û€ ð —‘ˆÜ'×/Ñ/Ø�5˜$Ð¨¸8ÞnØô
ˆð
 ×'Ñ'¨°$¸¸e¿m¹mÓLÐLr   c                ó¤   — | j                   j                  «       D ��cg c]%  }|D ]  }|j                  sŒ|j                  sŒ|‘Œ  Œ' c}}S c c}}w )zJLive persistent registrations across every plugin in the ownership ledger.)rG   Úvaluesr)   r2   )r1   ÚownedÚrs      r   Ú_active_persistentz$PluginLedgerMixin._active_persistent`   sC   € à#×5Ñ5×<Ñ<Ó>×k�eÈÒkÀ1ÐQR×Q]ÓQ]Ðbc×bjÓbj’Ðk�ÓkÐkùÓks   žAµAÁAc                óÊ  — | j                   sy| j                   g c}| _         | j                  «       D �ch c]  }|j                  |j                  f’Œ }}|D �cg c],  }|j                  sŒ|j                  |j                  f|vsŒ+|‘Œ. }}|D ]8  }t
        j                  d|j                  |j                  |j                  «       Œ: | j                  |«       yc c}w c c}w )u@  After re-discovery, dispose parked persistent handles whose plugin did not re-register the same
        ``(kind, key)``. Re-registered ones are dropped WITHOUT disposing â€” the same object re-registered would
        pass the identity check and evict the live entry.

        Persistent registrations (process-global host infrastructure such as dashboard-auth providers)
        survive an unload-all by design (#91701); ``_unload_scoped`` parks their handles in
        ``_persistent_carryover``. After a re-discovery pass, three cases exist for each parked handle:
        Nz\Evicting persistent registration %s/%s: plugin '%s' no longer supplies it after re-discovery)	Ú_persistent_carryoverr`   r"   r#   r2   ÚloggerÚinfor'   Ú_dispose_registrations)r1   Úparkedr_   rT   ÚstalerL   s         r   Ú%_evict_stale_persistent_registrationsz7PluginLedgerMixin._evict_stale_persistent_registrationsd   sÌ   € ð ×)Ò)ØØ-1×-GÑ-GÈÐ*ˆ�Ô*Ø,0×,CÑ,CÓ,EÖF q�A—F‘F˜AŸE™E’?ÐFˆÐFØ"ÖR�q a§h£h°A·F±F¸A¿E¹E°?È'Ò3Q’ÐRˆÐRØ!ò 	ˆLÜ�K‰Kð8Ø9E×9JÑ9JÈL×L\ÑL\Ð^j×^uÑ^uõð	ð
 	×#Ñ# EÕ*ùò GùÚRs   ´CÁC Á+C ÂC c                ón   ‡ ‡— t        ˆˆ fd„t        t        ‰ «      dz
  dd«      D «       d«      }|€y‰ |= y)z<Remove the last exact object match from a registration list.c              3  ó2   •K  — | ]  }‰|   ‰u sŒ|–— Œ y ­wrC   r>   )Ú.0ÚiÚtargetr]   s     €€r   ú	<genexpr>z5PluginLedgerMixin._remove_identity.<locals>.<genexpr>|   s   øè ø€ ÒW˜AÀ6È!Á9ÐPVÒCV”aÑWùs   ƒ�é   éÿÿÿÿNFT)ÚnextÚrangeÚlen)r]   rm   Úindexs   `` r   Ú_remove_identityz"PluginLedgerMixin._remove_identityy   s;   ù€ ô ÔW¤¤s¨6£{°Q¡¸¸BÓ!?ÔWÐY]Ó^ˆØˆ=ØØ�5ˆMØr   c                óz   — |j                  |«      }|€y | j                  ||«       |s|j                  |d «       y y rC   )Úgetru   Úpop)r1   Úmappingr#   ÚcallbackÚ	callbackss        r   Ú_remove_callbackz"PluginLedgerMixin._remove_callback‚   s?   € Ø—K‘K Ó$ˆ	ØÐØØ×Ñ˜i¨Ô2ÙØ�K‰K˜˜TÕ"ð r   c                ó`   — |j                  |«      |ury|€|j                  |d«       y|||<   y)zERestore a manager-local mapping only when *current* is still present.FNT)rw   rx   )r1   ry   r#   rT   rV   s        r   Ú_restore_mappingz"PluginLedgerMixin._restore_mappingŠ   s=   € à�;‰;�sÓ 7Ñ*ØØÐØ�K‰K˜˜TÔ"ð ð $ˆG�C‰LØr   c                ó<   — t        | |«      |uryt        | ||«       y)zBRestore a manager-local value only when *current* is still active.FT)r   Úsetattr)r1   Ú	attributerT   rV   s       r   Ú_restore_valuez PluginLedgerMixin._restore_value”   s#   € ä�4˜Ó#¨7Ñ2ØÜ��i Ô*Ør   c                ój   ‡‡— t        ˆˆfd„| j                  D «       «      s|j                  ‰«       yy)zPDrop *name* from the manager-local name set once no active ledger entry owns it.c              3  óz   •K  — | ]2  }|j                   xr  |j                  ‰k(  xr |j                  ‰k(  –— Œ4 y ­wrC   )r2   r"   r#   )rk   r_   r"   r   s     €€r   rn   z<PluginLedgerMixin._remove_name_if_unowned.<locals>.<genexpr>�   s2   øè ø€ ÒcÀQ�1—8‘8Ò@ §¡¨$¡Ò@°1·5±5¸D±=Ó@Ñcùs   ƒ8;N)ÚanyrJ   Údiscard)r1   r"   Únamesr   s    ` `r   Ú_remove_name_if_unownedz)PluginLedgerMixin._remove_name_if_unowned›   s)   ù€ äÔcÈ$×JbÑJbÔcÔcØ�M‰M˜$Õð dr   c                ó>   — | j                  d| j                  |«       y )NÚtool)rˆ   Ú_plugin_tool_names©r1   r   s     r   Ú_remove_tool_name_if_unownedz.PluginLedgerMixin._remove_tool_name_if_unowned    s   € Ø×$Ñ$ V¨T×-DÑ-DÀdÕKr   c                ó>   — | j                  d| j                  |«       y )NÚplatform)rˆ   Ú_plugin_platform_namesrŒ   s     r   Ú _remove_platform_name_if_unownedz2PluginLedgerMixin._remove_platform_name_if_unowned£   s   € Ø×$Ñ$ Z°×1LÑ1LÈdÕSr   c                óœ  — |sy |D �ch c]  }t        |«      ’Œ }}| j                  D �cg c]  }t        |«      |vsŒ|‘Œ c}| _        | j                  | j                  fD ]Z  }t	        |j                  «       «      D ]<  \  }}|D �cg c]  }t        |«      |vsŒ|‘Œ }}|r|||<   Œ+|j                  |d «       Œ> Œ\ y c c}w c c}w c c}w rC   )ÚidrJ   rG   Ú_memory_hook_registrationsÚlistÚitemsrx   )r1   Úregistrationsr_   ÚidsÚledgerr'   r^   Ú	remainings           r   rD   z'PluginLedgerMixin._forget_registrations¦   sÊ   € ÙØØ+Ö,˜Œr�!�uÐ,ˆÐ,Ø/3×/GÑ/GÖ#\¨!Ì2ÈaË5ÐX[ÒK[¢AÒ#\ˆÔ Ø×-Ñ-¨t×/NÑ/NÐOò 	1ˆFÜ%)¨&¯,©,«.Ó%9ò 1Ñ!�
˜EØ(-ÖB 1´°A³¸cÒ1AšQÐB�	ÐBÙØ)2�F˜:Ò&à—J‘J˜z¨4Õ0ñ1ñ	1ùò -ùÚ#\ùò Cs   ˆB?ªC½CÂC	ÂC	c                ól   — |�2| j                   j                  |g «      D ]  }|j                  «        Œ y y rC   )r”   rx   r4   )r1   Úhook_sourceÚhandles      r   Ú_drop_fallback_hooksz&PluginLedgerMixin._drop_fallback_hooksº   s9   € ØÐ"Ø×9Ñ9×=Ñ=¸kÈ2ÓNò !�Ø—‘Õ ñ!ð #r   c                ó.  ‡— ‰€|j                  ||«      S t        ˆfd„| j                  j                  «       D «       «      }|r|j	                  d|d„ «      n|j                  ||«      }| j
                  j                  ‰g «      j                  |«       |S )zºRegister ``callback`` unless the same source is already live through general discovery, in
        which case return an inert handle so the provider keeps its disposable-handle contract.c              3  ó”   •K  — | ]?  }|j                   xr- t        |j                  j                  |j                  «      ‰k(  –— ŒA y ­wrC   )Úenabledr   rK   r   r   )rk   Úloadedrœ   s     €r   rn   z<PluginLedgerMixin._register_fallback_hook.<locals>.<genexpr>Å   s@   øè ø€ ò :Øð —N‘NÒj¤°v·±×7KÑ7KÈVÏ]É]Ó'[Ð_jÑ'jÓjñ :ùs   ƒAAÚhookc                  ó   — y rC   r>   r>   r   r   rF   z;PluginLedgerMixin._register_fallback_hook.<locals>.<lambda>Ç   s   � r   )Úregister_hookr…   Ú_pluginsr]   Ú_trackr”   rH   rI   )r1   Úcontextrœ   Ú	hook_namerz   r^   r�   s     `    r   Ú_register_fallback_hookz)PluginLedgerMixin._register_fallback_hook¿   s�   ø€ ð ÐØ×(Ñ(¨°HÓ=Ð=Üó :Ø"&§-¡-×"6Ñ"6Ó"8ô:ó :ˆáDI�—‘ ¨	±<Ô@Èw×OdÑOdÐenÐpxÓOyˆØ×'Ñ'×2Ñ2°;ÀÓC×JÑJÈ6ÔRØˆr   c           	     óÚ   — ddl m} t        |«      D ]  }	 |j                  «        Œ y# t        $ r8}t
        j                  d|j                  |j                  ||¬«       Y d}~ŒSd}~ww xY w)z@Dispose registrations in reverse acquisition order, best effort.r   )Ú_PLUGINS_DEBUGz.Failed to unload plugin registration %s/%s: %s)Úexc_infoN)	Úhermes_cli.pluginsr¬   Úreversedr4   Ú	Exceptionrc   Úwarningr'   r#   )r1   r—   r¬   rL   Úexcs        r   re   z(PluginLedgerMixin._dispose_registrationsË   sj   € å5Ü$ ]Ó3ò 	ˆLðØ×$Ñ$Õ&ñ	øô ò Ü—‘ØDÀl×F]ÑF]Ø ×$Ñ$ c°Nð ÷ ñ ûðús   –)©	A*².A%Á%A*c                óœ   — ddl m} t        | |«      rt        | j                  «      S t        | t
        «      rt        | «      S t        | «      S )Nr   r   )r®   r   Ú
isinstancer   rK   r   r   )Úpluginr   s     r   Ú_resolve_plugin_keyz%PluginLedgerMixin._resolve_plugin_key×   s<   € å3Ü�f˜lÔ+Ü §¡Ó0Ð0Ü'1°&¼.Ô'IŒ|˜FÓ#ÐZÌsÐSYË{ÐZr   c                óÐ   — | j                   5  t        | j                  «      5  | j                  |«      cddd«       cddd«       S # 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)z@Unload registrations while excluding discovery/deferred loading.N)Ú_discovery_lockr   Ú	home_pathÚ_unload_scoped)r1   rµ   s     r   ÚunloadzPluginLedgerMixin.unloadÞ   sT   € à×!Ñ!ñ 	/Ô#5°d·n±nÓ#Eñ 	/Ø×&Ñ& vÓ.÷	/÷ 	/÷ 	/ó 	/ú÷ 	/÷ 	/ñ 	/ús!   �A£A´	AÁA	ÁAÁA%c                ó6  ‡ — |du }|rAt        ‰ j                  «      t        ‰ j                  «      z  }t        ‰ j                  «      }nb‰ j                  ‰ j                  |«      «      }‰ j                  D �cg c]  }|j                  |v sŒ|‘Œ }}|j                  ˆ fd„|D «       «       t        |xs |«      }‰ j                  |«       ‰ j                  |«       |r‰ j                  |«       |S |D ]  }‰ j                  j                  |d«       Œ  |S c c}w )u'  Unload one plugin (or all when ``plugin=None``, as force rediscovery does). Every ledger registration
        â€” including on_unload callbacks and supervised tasks â€” is disposed in reverse acquisition order with
        identity-conditional inverses. Returns ``True`` when anything was found.Nc              3  ó˜   •K  — | ]A  }‰j                   j                  |g «      D ]   }|j                  sŒ|j                  sŒ|–— Œ" ŒC y ­wrC   )rG   rw   r)   r2   )rk   r#   r_   r1   s      €r   rn   z3PluginLedgerMixin._unload_scoped.<locals>.<genexpr>ò   sN   øè ø€ ò !Ø°$×2HÑ2H×2LÑ2LÈSÐRTÓ2Uò!Ø-.ÐYZ×YeÓYeÐjk×jrÓjr”ð!Øñ!ùs   ƒ0A
´A
Á	A
)ÚsetrG   r¦   r•   rJ   Ú_unload_target_keysr¶   r'   Úextendr(   re   rD   Ú_reset_after_unload_allrx   )r1   rµ   Ú
unload_allÚtarget_keysr—   r_   Úfoundr#   s   `       r   rº   z PluginLedgerMixin._unload_scopedã   s  ø€ ð ˜t�^ˆ
ÙÜ˜d×4Ñ4Ó5¼¸D¿M¹MÓ8JÑJˆKÜ  ×!9Ñ!9Ó:‰Mà×2Ñ2°4×3KÑ3KÈFÓ3SÓTˆKØ(,×(@Ñ(@Ö` 1ÀAÇLÁLÐT_ÒD_šQÐ`ˆMÐ`ð
 × Ñ ó !Ø(ô!ô ô �[Ò1 MÓ2ˆØ×#Ñ# MÔ2Ø×"Ñ" =Ô1ÙØ×(Ñ(¨Ô7ð ˆð #ò -�Ø—‘×!Ñ! # tÕ,ð-àˆùò! as   Á7DÂDc                óÚ   — || j                   v s|| j                  v r|hS | j                  j                  «       D ��ch c]!  \  }}|j                  j                  |k(  sŒ |’Œ# c}}S c c}}w )zUResolve a targeted-unload request to canonical plugin keys (exact key, else by name).)rG   r¦   r–   rK   r   )r1   Ú	requestedr#   r¢   s       r   r¿   z%PluginLedgerMixin._unload_target_keysÿ   sZ   € à˜×.Ñ.Ñ.°)¸t¿}¹}Ñ2LØ�;ÐØ'+§}¡}×':Ñ':Ó'<×b™˜˜VÀÇÁ×@TÑ@TÐXaÓ@a’ÓbÐbùÓbs   ½!A'ÁA'c                óœ  ‡
‡— ddl m} t        | j                  «      D ]  }|j	                  |«       Œ |D �ch c]  }|j
                  dk(  sŒ|j                  ’Œ  c}Št        ˆfd„| j                  D «       «      }|r!	 ddlm	} |D ]  }	 |j                  |«       Œ 	 | j                  D �ch c]  }t        |«      ’Œ c}Š
| j                  j!                  ˆ
fd	„| j#                  «       D «       «       | j$                  | j&                  | j(                  | j*                  | j                  | j                  | j,                  | j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  | jB                  fD ]  }	|	jE                  «        Œ d| _#        | jH                  5  | jJ                  jE                  «        | jL                  jE                  «        | jN                  jE                  «        ddd«       | jP                  jE                  «        d
| _)        yc c}w # t        $ r"}t        j                  d||«       Y d}~�Œd}~ww xY w# t        $ r!}t        j                  d|«       Y d}~�Œd}~ww xY wc c}w # 1 sw Y   Œ�xY w)zFSweep pre-ledger global state and clear every manager-local container.r   )Úplatform_registryrŠ   c              3  ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrC   r>   )rk   ÚnÚledger_tool_namess     €r   rn   z<PluginLedgerMixin._reset_after_unload_all.<locals>.<genexpr>  s   øè ø€ Òa aÀaÐO`ÒF`¤Ñaùs   ƒ	�)rU   z%unload: tool deregister %s failed: %sNz&unload: tools.registry unavailable: %sc              3  ó>   •K  — | ]  }t        |«      ‰vsŒ|–— Œ y ­wrC   )r“   )rk   r_   Úcarryover_idss     €r   rn   z<PluginLedgerMixin._reset_after_unload_all.<locals>.<genexpr>  s    øè ø€ Ò)m°ÔRTÐUVÓRWÐ_lÒRl¬!Ñ)mùs   ƒ–F)*Úgateway.platform_registryrÈ   Útupler�   Ú
unregisterr"   r#   r‹   Útools.registryrU   Ú
deregisterr°   rc   Údebugrb   r“   rÀ   r`   rG   r¦   Ú_hooksÚ_middlewareÚ_cli_commandsÚ_plugin_commandsÚ_plugin_skillsÚ_portable_mcp_serversÚ_portable_mcp_server_pluginsÚ
_aux_tasksÚ_system_prompt_sectionsÚ_approval_transportsÚ_slack_action_handlersÚ_predeclared_modulesÚ_predeclared_toolsÚ_platform_handler_factoriesÚclearÚ_context_engineÚ_hook_timeout_lockÚ_hook_running_callbacksÚ_hook_abandonedÚ_hook_timeout_suppressed_untilÚ_hook_failures_reportedÚ_discovered)r1   r—   rÈ   Úplatform_namer_   Úpreledger_toolsÚtool_registryÚ	tool_namer²   Ú	containerrÍ   rË   s             @@r   rÁ   z)PluginLedgerMixin._reset_after_unload_all  s]  ù€ õ
 	@Ü" 4×#>Ñ#>Ó?ò 	8ˆMØ×(Ñ(¨Õ7ð	8ð -:ÖN q¸Q¿V¹VÀvÓ=M˜QŸU›UÒNÐÜÓa¨4×+BÑ+BÔaÓaˆÙð	^ÝDð "1ò ^�Ið^Ø%×0Ñ0°Õ;ñ^ð )-×(BÑ(BÖC 1œ˜A�ÒCˆØ×"Ñ"×)Ñ)Ó)m°T×5LÑ5LÓ5NÔ)mÔmà×"Ñ" D§M¡M°4·;±;À×@PÑ@PØ×#Ñ# T×%@Ñ%@À$×BTÑBTØ×!Ñ! 4×#6Ñ#6¸×8RÑ8RØ×-Ñ-¨t¯©À×@\Ñ@\Ð^b×^wÑ^wØ×'Ñ'¨×)BÑ)BÀD×D[ÑD[Ø×,Ñ,ð
ò 	ˆIð �O‰OÕð	ð  $ˆÔØ×$Ñ$ñ 	8Ø×(Ñ(×.Ñ.Ô0Ø× Ñ ×&Ñ&Ô(Ø×/Ñ/×5Ñ5Ô7÷	8ð 	×$Ñ$×*Ñ*Ô,Ø ˆÕùòA Oøô %ò ^ÜŸ™Ð%LÈiÐY\×]Ò]ûð^ûô ò LÜ—‘ÐEÀs×KÒKûðLüò D÷	8ð 	8úsN   ¸IÁIÁ?J ÂI"Â-J=Ç$AKÉ"	JÉ+JÊJÊ	J:ÊJ5Ê5J:ËK)rK   r   r"   r   r#   r   r%   r$   r)   r(   r5   r!   )rK   r   r"   r   r   r   rU   r   rT   r   rV   r   rN   zOptional[Callable[[], None]]r5   r!   )r5   úList[PluginRegistration]r6   )r]   r•   rm   r   r5   r(   )ry   zDict[str, List[Callable]]r#   r   rz   r	   r5   r7   )
ry   zDict[str, Any]r#   r   rT   r   rV   zOptional[Any]r5   r(   )r�   r   rT   r   rV   r   r5   r(   )r"   r   r‡   úSet[str]r   r   r5   r7   )r   r   r5   r7   )r—   rï   r5   r7   )rœ   úOptional[tuple]r5   r7   )
r¨   r   rœ   rñ   r©   r   rz   r	   r5   r!   )rµ   z(Union[str, PluginManifest, LoadedPlugin]r5   r   rC   )rµ   z.Union[str, PluginManifest, LoadedPlugin, None]r5   r(   )rÆ   r   r5   rð   )r8   r9   r:   rM   r[   r`   rh   Ústaticmethodru   r|   r~   r‚   rˆ   r�   r‘   rD   rž   rª   re   r¶   r»   rº   r¿   rÁ   r>   r   r   r@   r@   >   s#  „ ð !ñØ&ðØ.1ðØ8;ðØFXðàðð 
óð( DHñMØ&ðMØ.1ðMØ9<ðMØHKðMØVYðMàðMà$@ðMð 
óMóló+ð* òó ðó#óóó ó
LóTó1ó(!ð

Ø*2ð
Ø7Ió
ó
ð ò[ó ð[ô/ô
ó8cô*!r   r@   )r   r   r   r   r5   rñ   ) r;   Ú
__future__r   ÚloggingÚdataclassesr   r   Úpathlibr   Útypingr   r   r	   r
   r   r   r   r   Úregistration_lifecycler   Úhermes_cli.plugins_loaderr   Úhermes_cli.plugins_manifestr   r   r®   r   Ú	getLoggerrc   r   r!   r@   r>   r   r   ú<module>rü      so   ðñõ #ã ß (Ý ß Q× QÓ Qå :Ý 8ß DáÝ/à	ˆ×	Ñ	Ð/Ó	0€óCð ÷'ð 'ó ð'÷Bq!ò q!r   