+
    jHàj=>  ã                  ó  € R t ^ RIHt ^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
HtHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHt ]
'       d   ^ R	IHt ]P6                  ! R
4      tR R lt] ! R R4      4       t ! R R4      tR# )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               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚnameÚstrÚmoduler   ÚreturnúOptional[tuple]© )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/plugins_ledger.pyÚ__annotate__r      s&   € ÷ Cñ C˜#ð C sð C¨ñ Có    c                óx   € \        VRR4      pV'       d%   V \        \        V4      P                  4       4      3# R# )zW(plugin name, resolved ``__file__``) identity shared by the general and memory loaders.Ú__file__N)Úgetattrr   r   Úresolve)r   r   Úsources   && r   Ú_hook_source_ofr%      s4   € ä�V˜Z¨Ó.€Fß28ˆD”#”d˜6“l×*Ñ*Ó,Ó-Ð.ÐB¸dÐBr   c                  ó¸   € ] tR t^t$ RtR]R&   R]R&   R]R&   RtR]R&   R	tR
]R&   ]! R	R	R	R7      t	R
]R&   ]! RR	R	R7      t
R]R&   ]R R l4       tR R ltRtR# )Ú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Ú	_disposedNz.Optional[Callable[[PluginRegistration], None]]Ú_on_disposec               ó   € V ^8„  d   QhRR/# )r   r   r.   r   )r   s   "r   r   ÚPluginRegistration.__annotate__.   s   € ÷ "ñ "˜ñ "r   c                ó$   € V P                   '       * # )z6Whether this handle still owns an active registration.©r3   ©Úselfs   &r   ÚactiveÚPluginRegistration.active-   s   € ð —>‘>Ô!Ð!r   c               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r   r6   2   s   € ÷ 	'ñ 	'˜ñ 	'r   c                óê   € V P                   '       d   R# RV n          V P                  4        V P                  e   V P                  V 4       R# R#   T P                  e   T P                  T 4       i i ; i)z>Release this registration once; repeated disposal is harmless.NT)r3   r+   r4   r9   s   &r   ÚdisposeÚPluginRegistration.dispose2   sb   € à�>�>ˆ>ÙØˆŒð	'Ø�L‰LŒNà×ÑÒ+Ø× Ñ  Ö&ñ ,øˆt×ÑÒ+Ø× Ñ  Õ&ð ,ús   �A Á"A2r8   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r-   r/   r   r3   r4   Úpropertyr;   rA   Ú__static_attributes__r   r   r   r'   r'      su   ‡ ñ=ð ƒIØ	ƒHØÓØ€J�Óð
 €J�ÓÙ E°¸EÔB€IˆtÓBÙBGÐPTÐ[`ÐglÔBm€KÐ?Ómàô"ó ð"÷	'ñ 	'r   r'   c                  ó2  € ] tR t^>tRR/R R lltRR/R R lltR	 R
 ltR R lt]R R l4       t	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" lt]R# R$ l4       tR.R% R& lltR.R' R( lltR) R* ltR+ R, ltR-tR# )/ÚPluginLedgerMixinr/   Fc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r   Úmanifestr   r(   r   r)   r+   r*   r/   r.   r   r'   r   )r   s   "r   r   ÚPluginLedgerMixin.__annotate__?   s>   € ÷ ñ Ø&ðØ.1ðØ8;ðØFXðàðð 
ñr   c               óþ   a € \        W#V\        V4      VR7      pV 3R lVn        S P                  P	                  VP
                  . 4      P                  V4       V'       g   S P                  P                  V4       V# )a-  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                ó(   <€ SP                  V .4      # ©N)Ú_forget_registrations)Údisposedr:   s   &€r   Ú<lambda>Ú7PluginLedgerMixin._track_registration.<locals>.<lambda>K   s   ø€ °D×4NÑ4NÐPXÈzÔ4Zr   )r'   r   r4   Ú_ownership_ledgerÚ
setdefaultr-   ÚappendÚ_registration_order)r:   rN   r(   r)   r+   r/   Úregistrations   f&&&&$ r   Ú_track_registrationÚ%PluginLedgerMixin._track_registration?   sk   ø€ ô *Ø¨¼LÈÓ<RÐ_iôkˆä#ZˆÔ Ø×Ñ×)Ñ)¨,×*AÑ*AÀ2ÓF×MÑMÈlÔ[ßØ×$Ñ$×+Ñ+¨LÔ9ØÐr   ÚfinalizeNc               ó8   € V ^8„  d   QhRRRRRRRRRRR	RR
RRR/# )r   rN   r   r(   r   r   Úregistryr   ÚcurrentÚpreviousr^   zOptional[Callable[[], None]]r   r'   r   )r   s   "r   r   rO   Q   sX   € ÷ Mñ MØ&ðMØ.1ðMØ9<ðMØHKðMØVYðMàðMà$@ðMð 
ñMr   c          	     ó¦   aaaa	€ V P                   o	\        P                  ! VS	S3SVVVVV	3R lVR7      pV P                  WSVP                  4      # )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                ó.   <€ SP                  SSV SR 7      # ))Úscope)Úrestore_registration)Úreplacementra   r   r`   re   s   &€€€€r   rU   Ú>PluginLedgerMixin._track_scoped_registration.<locals>.<lambda>[   s   ø€ ¨×(EÑ(EÀdÈGÐU`ÐhmÐ(EÔ(nr   )ra   rb   Úrestorer^   )Ú	scope_keyr   Úacquirer\   rA   )
r:   rN   r(   r   r`   ra   rb   r^   Úleasere   s
   &&&fff&$ @r   Ú_track_scoped_registrationÚ,PluginLedgerMixin._track_scoped_registrationQ   sM   û€ ð —‘ˆÜ'×/Ò/Ø�5˜$Ð¨¸8ßnØô
ˆð
 ×'Ñ'¨¸¸e¿m¹mÓLÐLr   c               ó   € V ^8„  d   QhRR/# )r   r   úlist[PluginRegistration]r   )r   s   "r   r   rO   `   s   € ÷ lñ lÐ$<ñ lr   c                óÄ   € V P                   P                  4        UUu. uF4  q F,  q"P                  '       g   K  VP                  '       g   K*  VNK.  	  K6  	  upp# u uppi )zJLive persistent registrations across every plugin in the ownership ledger.)rW   Úvaluesr/   r;   )r:   ÚownedÚrs   &  r   Ú_active_persistentÚ$PluginLedgerMixin._active_persistent`   sF   € à#×5Ñ5×<Ñ<Ô>ÔkÑ>�eÊÀ1×Q]ÕQ]”Ðbc×bjÕbj—�É‘Ñ>ÒkÐkùÓks   žAºAÁ
Ac               ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   rO   d   s   € ÷ +ñ +°tñ +r   c                óö  € V P                   '       g   R# V P                   . uqn         V P                  4        Uu0 uF  q"P                  VP                  3kK  	  ppV Uu. uF7  q"P                  '       g   K  VP                  VP                  3V9  g   K5  VNK9  	  ppV F9  p\
        P                  RVP                  VP                  VP                  4       K;  	  V P                  V4       R# u upi u upi )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_carryoverru   r(   r)   r;   ÚloggerÚinfor-   Ú_dispose_registrations)r:   Úparkedrt   ra   Ústaler[   s   &     r   Ú%_evict_stale_persistent_registrationsÚ7PluginLedgerMixin._evict_stale_persistent_registrationsd   sÌ   € ð ×)×)Ð)ÙØ-1×-GÑ-GÈÐ*ˆÔ*Ø,0×,CÑ,CÔ,EÓFÑ,E q—F‘F˜AŸE™E“?Ñ,EˆÐFÙ"ÓR™F�q§h¥h”°A·F±F¸A¿E¹E°?È'Ñ3Q—�™FˆÐRÛ!ˆLÜ�K‰Kð8Ø9E×9JÑ9JÈL×L\ÑL\Ð^j×^uÑ^uöñ "ð
 	×#Ñ# EÖ*ùò GùÚRs   º C1Á C6Á8C6ÂC6c               ó$   € V ^8„  d   QhRRRRRR/# )r   rr   ÚlistÚtargetr   r   r.   r   )r   s   "r   r   rO   z   s!   € ÷ ñ  ð ¨sð °tñ r   c                ó€   a a€ \        VV 3R l\        \        S 4      ^,
          RR4       4       R4      pVf   R# S V R# )z<Remove the last exact object match from a registration list.c              3  óF   <"  € T F  pSV,          SJ g   K  Vx € K  	  R # 5irR   r   )Ú.0Úirƒ   rr   s   & €€r   Ú	<genexpr>Ú5PluginLedgerMixin._remove_identity.<locals>.<genexpr>|   s!   øé € ÐWÑ!?˜AÀ6È!Å9ÐPVÐCV—a’aÓ!?ùs   ƒ!—
!NFTéÿÿÿÿ)ÚnextÚrangeÚlen)rr   rƒ   Úindexs   ff r   Ú_remove_identityÚ"PluginLedgerMixin._remove_identityy   s;   ù€ ô ÕW¤¤s¨6£{°Q¥¸¸BÔ!?ÓWÐY]Ó^ˆØŠ=ÙØ�5ˆMÙr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úmappingzdict[str, list[Callable]]r)   r   Úcallbackr   r   r?   r   )r   s   "r   r   rO   ‚   s+   € ÷ #ñ #Ð(Að #Èð #ÐW_ð #Ðdhñ #r   c                	óŽ   € VP                  V4      pVf   R # V P                  WC4       V'       g   VP                  VR 4       R # R # rR   )Úgetr�   Úpop)r:   r’   r)   r“   Ú	callbackss   &&&& r   Ú_remove_callbackÚ"PluginLedgerMixin._remove_callback‚   s=   € Ø—K‘K Ó$ˆ	ØÒÙØ×Ñ˜iÔ2ßØ�K‰K˜˜TÖ"ñ r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r’   zdict[str, Any]r)   r   ra   r   rb   zOptional[Any]r   r.   r   )r   s   "r   r   rO   Š   s1   € ÷ ñ ¨ð ¸Sð È3ð ÐZgð Ðlpñ r   c                ól   € VP                  V4      VJd   R# Vf   VP                  VR4       R# WAV&   R# )zERestore a manager-local mapping only when *current* is still present.FNT)r•   r–   )r:   r’   r)   ra   rb   s   &&&&&r   Ú_restore_mappingÚ"PluginLedgerMixin._restore_mappingŠ   s;   € à�;‰;�sÓ 7Ó*ÙØÒØ�K‰K˜˜TÔ"ñ ð $�C‰LÙr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú	attributer   ra   r   rb   r   r.   r   )r   s   "r   r   rO   ”   s(   € ÷ ñ ¨ð °cð ÀSð ÈTñ r   c                ó@   € \        W4      VJd   R# \        WV4       R# )zBRestore a manager-local value only when *current* is still active.FT)r"   Úsetattr)r:   rŸ   ra   rb   s   &&&&r   Ú_restore_valueÚ PluginLedgerMixin._restore_value”   s   € ä�4Ó#¨7Ó2ÙÜ� Ô*Ùr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r(   r   Únamesúset[str]r   r   r?   r   )r   s   "r   r   rO   ›   s)   € ÷  ñ  ¨Cð  ¸ð  Èð  ÐPTñ  r   c                óÜ   aa€ \         ;QJ d*    VV3R lV P                   4       F  '       g   K   RM	  RM! VV3R lV P                   4       4      '       g   VP                  S4       R# R# )zPDrop *name* from the manager-local name set once no active ledger entry owns it.c              3  ó–   <"  € T F>  qP                   ;'       d'    VP                  S8H  ;'       d    VP                  S8H  x € K@  	  R # 5irR   )r;   r(   r)   )r†   rt   r(   r   s   & €€r   rˆ   Ú<PluginLedgerMixin._remove_name_if_unowned.<locals>.<genexpr>�   s8   øé € ÐcÑJbÀQ—8‘8×@Ð@ §¡¨$¡×@Ð@°1·5±5¸D±=Ô@ÓJbùs   ƒA	šA	±A	TFN)ÚanyrZ   Údiscard)r:   r(   r¥   r   s   &f&fr   Ú_remove_name_if_unownedÚ)PluginLedgerMixin._remove_name_if_unowned›   sB   ù€ ç‹sÕcÈ$×JbÒJbÓc�s�sŠsÕcÈ$×JbÒJbÓc×cÒcØ�M‰M˜$Öñ dr   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r?   r   )r   s   "r   r   rO       s   € ÷ Lñ L°ð L¸ñ Lr   c                	ó@   € V P                  R V P                  V4       R# )ÚtoolN)r¬   Ú_plugin_tool_names©r:   r   s   &&r   Ú_remove_tool_name_if_unownedÚ.PluginLedgerMixin._remove_tool_name_if_unowned    s   € Ø×$Ñ$ V¨T×-DÑ-DÀdÖKr   c               ó    € V ^8„  d   QhRRRR/# r¯   r   )r   s   "r   r   rO   £   s   € ÷ Tñ T°Sð T¸Tñ Tr   c                	ó@   € V P                  R V P                  V4       R# )ÚplatformN)r¬   Ú_plugin_platform_namesr³   s   &&r   Ú _remove_platform_name_if_unownedÚ2PluginLedgerMixin._remove_platform_name_if_unowned£   s   € Ø×$Ñ$ Z°×1LÑ1LÈdÖSr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úregistrationsrp   r   r?   r   )r   s   "r   r   rO   ¦   s   € ÷ 1ñ 1Ð3Kð 1ÐPTñ 1r   c                	óÚ  € V'       g   R # V Uu0 uF  p\        V4      kK  	  ppV P                   Uu. uF  p\        V4      V9  g   K  VNK  	  upV n        V P                  V P                  3 Fh  p\	        VP                  4       4       FH  w  rVV Uu. uF  p\        V4      V9  g   K  VNK  	  ppV'       d   WtV&   K6  VP                  VR 4       KJ  	  Kj  	  R # u upi u upi u upi rR   )ÚidrZ   rW   Ú_memory_hook_registrationsr‚   Úitemsr–   )r:   r¾   rt   ÚidsÚledgerr-   rs   Ú	remainings   &&      r   rS   Ú'PluginLedgerMixin._forget_registrations¦   sÉ   € ßÙÙ+Ó,™m˜Œr�!Žu™mˆÐ,Ø/3×/GÒ/GÓ#\Ñ/G¨!Ì2ÈaË5ÐX[ÑK[§A AÑ/GÑ#\ˆÔ Ø×-Ñ-¨t×/NÑ/NÓOˆFÜ%)¨&¯,©,«.Ö%9Ñ!�
Ù(-ÓB© 1´°A³¸cÑ1AŸQ˜Q©�	ÐBßØ)2˜:Ó&à—J‘J˜z¨4Ö0ó &:ó Pùò -ùÚ#\ùò Cs   �C³C#Á
C#ÂC(Â,C(c               ó    € V ^8„  d   QhRRRR/# )r   Úhook_sourcer   r   r?   r   )r   s   "r   r   rO   º   s   € ÷ !ñ !°ð !ÀDñ !r   c                	óx   € Ve6   V P                   P                  V. 4       F  pVP                  4        K  	  R # R # rR   )rÁ   r–   rA   )r:   rÈ   Úhandles   && r   Ú_drop_fallback_hooksÚ&PluginLedgerMixin._drop_fallback_hooksº   s5   € ØÒ"Ø×9Ñ9×=Ñ=¸kÈ2ÖN�Ø—‘Ö ó Oñ #r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Úcontextr   rÈ   r   Ú	hook_namer   r“   r   r   r'   r   )r   s   "r   r   rO   ¿   s2   € ÷ 
ñ 
¨sð 
Àð 
Ð]`ð 
Ø*2ð
Ø7Iñ
r   c                ó¶  a€ Sf   VP                  W44      # \        ;QJ d7    V3R lV P                  P                  4        4       F  '       g   K   RM,	  RM(! V3R lV P                  P                  4        4       4      pV'       d   VP	                  RVR 4      MVP                  W44      pV P
                  P                  S. 4      P                  V4       V# )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  ó¦   <"  € T FF  pVP                   ;'       d.    \        VP                  P                  VP                  4      S8H  x € KH  	  R # 5irR   )Úenabledr%   rN   r   r   )r†   ÚloadedrÈ   s   & €r   rˆ   Ú<PluginLedgerMixin._register_fallback_hook.<locals>.<genexpr>Å   sB   øé € ð :Ù"8˜ð —N‘N×jÐj¤°v·±×7KÑ7KÈVÏ]É]Ó'[Ð_jÑ'jÔjÛ"8ùs
   ƒA›6ATFÚhookc                 ó   € R # rR   r   r   r   r   rU   Ú;PluginLedgerMixin._register_fallback_hook.<locals>.<lambda>Ç   s   € ¹4r   )Úregister_hookrª   Ú_pluginsrr   Ú_trackrÁ   rX   rY   )r:   rÎ   rÈ   rÏ   r“   rs   rÊ   s   &&f&&  r   Ú_register_fallback_hookÚ)PluginLedgerMixin._register_fallback_hook¿   sª   ø€ ð ÒØ×(Ñ(¨Ó=Ð=ß“ô :Ø"&§-¡-×"6Ñ"6Ô"8ó:——’ô :Ø"&§-¡-×"6Ñ"6Ô"8ó:ó :ˆçDI�—‘ ¨	±<Ô@Èw×OdÑOdÐenÓOyˆØ×'Ñ'×2Ñ2°;ÀÓC×JÑJÈ6ÔRØˆr   c               ó    € V ^8„  d   QhRRRR/# r½   r   )r   s   "r   r   rO   Ë   s   € ÷ 
ñ 
Ð4Lð 
ÐQUñ 
r   c           
     óä   € ^ RI Hp \        V4       F  p VP                  4        K  	  R#   \         d9   p\
        P                  RTP                  TP                  YBR7        Rp?KX  Rp?ii ; i)z@Dispose registrations in reverse acquisition order, best effort.)Ú_PLUGINS_DEBUGz.Failed to unload plugin registration %s/%s: %s)Úexc_infoN)	Úhermes_cli.pluginsrß   ÚreversedrA   Ú	Exceptionrz   Úwarningr-   r)   )r:   r¾   rß   r[   Úexcs   &&   r   r|   Ú(PluginLedgerMixin._dispose_registrationsË   sc   € å5Ü$ ]Ö3ˆLðØ×$Ñ$Ö&ó 4øô ô Ü—‘ØDÀl×F]ÑF]Ø ×$Ñ$ cð ÷ ò ûðús   –,¬A/·-A*Á*A/c               ó    € V ^8„  d   QhRRRR/# )r   Úpluginz#str | PluginManifest | LoadedPluginr   r   r   )r   s   "r   r   rO   Ø   s   € ÷ [ñ [Ð$Gð [ÈCñ [r   c                	ó²   € ^ RI Hp \        W4      '       d   \        V P                  4      # \        V \
        4      '       d   \        V 4      # \        V 4      # )é    r   )rá   r   Ú
isinstancer   rN   r   r   )rè   r   s   & r   Ú_resolve_plugin_keyÚ%PluginLedgerMixin._resolve_plugin_key×   s@   € å3Ü�f×+Ò+Ü §¡Ó0Ð0Ü'1°&¼.×'IÒ'IŒ|˜FÓ#ÐZÌsÐSYË{ÐZr   c               ó    € V ^8„  d   QhRRRR/# ©r   rè   z*str | PluginManifest | LoadedPlugin | Noner   r.   r   )r   s   "r   r   rO   Þ   s   € ÷ /ñ /ÐGð /ÐSWñ /r   c           	     ó  € V P                   ;_uu_ 4        \        V P                  4      ;_uu_ 4        V P                  V4      uuRRR4       uuRRR4       #   + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)z@Unload registrations while excluding discovery/deferred loading.N)Ú_discovery_lockr   Ú	home_pathÚ_unload_scoped)r:   rè   s   &&r   ÚunloadÚPluginLedgerMixin.unloadÞ   sN   € à×!×!Ó!Ô#5°d·n±n×#EÕ#EØ×&Ñ& vÓ.÷ $FÑ#E×!Ò!×#E×#Eú×!×!×!Ò!ús"   •A6³A	Á
A6ÁA)Á$A6Á6B	c               ó    € V ^8„  d   QhRRRR/# rï   r   )r   s   "r   r   rO   ã   s   € ÷ ñ Ð%Oð Ð[_ñ r   c                ór  a € VRJ pV'       dF   \        S P                  4      \        S P                  4      ,          p\        S P                  4      pMhS P                  S P                  V4      4      pS P                   Uu. uF  qUP                  V9   g   K  VNK  	  ppVP                  V 3R lV 4       4       \        T;'       g    T4      pS P                  V4       S P                  V4       V'       d   S P                  V4       V# V F  pS P                  P                  VR4       K!  	  V# u upi )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  ó¼   <"  € T FQ  pSP                   P                  V. 4       F.  q"P                  '       g   K  VP                  '       g   K*  Vx € K0  	  KS  	  R # 5irR   )rW   r•   r/   r;   )r†   r)   rt   r:   s   &  €r   rˆ   Ú3PluginLedgerMixin._unload_scoped.<locals>.<genexpr>ò   sD   øé € ð !Ù(�c°$×2HÑ2H×2LÑ2LÈSÐRTÖ2U¨Q×YeÕYe”Ðjk×jrÕjr—’Ñ2U‘›[ùs   ƒ2AºAÁA)ÚsetrW   rÙ   r‚   rZ   Ú_unload_target_keysrì   r-   Úextendr.   r|   rS   Ú_reset_after_unload_allr–   )r:   rè   Ú
unload_allÚtarget_keysr¾   rt   Úfoundr)   s   f&      r   ró   Ú 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ÇLÁLÐT_ÑD_ŸQ˜QÑ(@ˆMÐ`ð
 × Ñ ô !Ù(ó!ô ô �[×1Ð1 MÓ2ˆØ×#Ñ# MÔ2Ø×"Ñ" =Ô1ßØ×(Ñ(¨Ô7ð ˆó #�Ø—‘×!Ñ! # tÖ,ñ #àˆùò! as   ÂD4ÂD4c               ó    € V ^8„  d   QhRRRR/# )r   Ú	requestedr   r   r¦   r   )r   s   "r   r   rO   ÿ   s   € ÷ cñ c¨Sð c°Xñ cr   c                óê   € WP                   9   g   WP                  9   d   V0# V P                  P                  4        UUu0 uF$  w  r#VP                  P                  V8X  g   K"  VkK&  	  upp# u uppi )zUResolve a targeted-unload request to canonical plugin keys (exact key, else by name).)rW   rÙ   rÂ   rN   r   )r:   r  r)   rÓ   s   &&  r   rû   Ú%PluginLedgerMixin._unload_target_keysÿ   s\   € à×.Ñ.Ô.°)¿}¹}Ô2LØ�;ÐØ'+§}¡}×':Ñ':Ô'<ÔbÑ'<™˜ÀÇÁ×@TÑ@TÐXaÑ@a—�Ñ'<ÒbÐbùÓbs   ÁA/Á%A/c               ó    € V ^8„  d   QhRRRR/# r½   r   )r   s   "r   r   rO     s   € ÷ *!ñ *!Ð5Mð *!ÐRVñ *!r   c                óN  a
a€ ^ RI Hp \        V P                  4       F  pVP	                  V4       K  	  V Uu0 uF!  qDP
                  R8X  g   K  VP                  kK#  	  upo\        ;QJ d!    . V3R lV P                   4       F  NK  	  5M! V3R lV P                   4       4      pV'       d#    ^ RIH	p V F  p VP                  V4       K  	  V P                   Uu0 uF  p\        V4      kK  	  upo
V P                  P!                  V
3R lV P#                  4        4       4       V P$                  V P&                  V P(                  V P*                  V P                  V P                  V P,                  V P.                  V P0                  V P2                  V P4                  V P6                  V P8                  V P:                  V P<                  V P>                  V P@                  V PB                  V PD                  3 F  p	V	PG                  4        K  	  RV n$        V PJ                  ;_uu_ 4        V PL                  PG                  4        V PN                  PG                  4        V PP                  PG                  4        RRR4       V PR                  PG                  4        R	V n*        R# u upi   \         d#   p\        P                  RYx4        Rp?EK  Rp?ii ; i  \         d"   p\        P                  RT4        Rp?EL3Rp?ii ; iu upi   + '       g   i     Lœ; i)
zFSweep pre-ledger global state and clear every manager-local container.)Úplatform_registryr±   c              3  ó8   <"  € T F  qS9  g   K  Vx € K  	  R # 5irR   r   )r†   ÚnÚledger_tool_namess   & €r   rˆ   Ú<PluginLedgerMixin._reset_after_unload_all.<locals>.<genexpr>  s   øé € ÐaÑ+B aÐO`ÑF`§¢Ó+Bùs   ƒ�
)r`   z%unload: tool deregister %s failed: %sNz&unload: tools.registry unavailable: %sc              3  óL   <"  € T F  p\        V4      S9  g   K  Vx € K  	  R # 5irR   )rÀ   )r†   rt   Úcarryover_idss   & €r   rˆ   r    s$   øé € Ð)mÑ5N°ÔRTÐUVÓRWÐ_lÑRl¯!ª!Ó5Nùs   ƒ$š
$F)+Úgateway.platform_registryr  Útupler¹   Ú
unregisterr(   r)   r²   Útools.registryr`   Ú
deregisterrã   rz   Údebugry   rÀ   rü   ru   rW   rÙ   Ú_hooksÚ_middlewareÚ_cli_commandsÚ_plugin_commandsÚ_plugin_skillsÚ_automation_blueprintsÚ_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)r:   r¾   r  Úplatform_namert   Úpreledger_toolsÚtool_registryÚ	tool_namerå   Ú	containerr  r  s   &&        @@r   rý   Ú)PluginLedgerMixin._reset_after_unload_all  sm  ù€ õ
 	@Ü" 4×#>Ñ#>Ö?ˆMØ×(Ñ(¨Ö7ñ @ñ -:ÓN©M q¿V¹VÀvÑ=MœU˜QŸUœU©MÑNÐßœ%Ôa¨4×+BÒ+BÓaŸ%™%Ôa¨4×+BÒ+BÓaÓaˆßð	^ÝDó "1�Ið^Ø%×0Ñ0°Ö;ñ "1ð )-×(BÒ(BÓCÑ(B 1œ˜AžÑ(BÑCˆØ×"Ñ"×)Ñ)Ô)m°T×5LÑ5LÔ5NÓ)mÔmà×"Ñ" D§M¡M°4·;±;À×@PÑ@PØ×#Ñ# T×%@Ñ%@À$×BTÑBTØ×!Ñ! 4×#6Ñ#6¸×8SÑ8SÐUY×UoÑUoØ×-Ñ-¨t¯©À×@\Ñ@\Ð^b×^wÑ^wØ×'Ñ'¨×)BÑ)BÀD×D[ÑD[Ø×,Ñ,ó
ˆIð �O‰OÖñ
ð  $ˆÔØ×$×$Ó$Ø×(Ñ(×.Ñ.Ô0Ø× Ñ ×&Ñ&Ô(Ø×/Ñ/×5Ñ5Ô7÷ %ð 	×$Ñ$×*Ñ*Ô,Ø ˆÖùòA Oøô %ô ^ÜŸ™Ð%LÈi×]Ó]ûð^ûô ô LÜ—‘ÐEÀs×KÒKûðLüò D÷ %×$úsN   ºJ+ÁJ+Â3K  Â?J0Ã"LÈ1ALÊ0KÊ;KËKË LË+LÌLÌL$	)r%  r+  ry   rZ   rR   )rC   rD   rE   rF   r\   rm   ru   r   Ústaticmethodr�   r˜   rœ   r¢   r¬   r´   rº   rS   rË   rÛ   r|   rì   rô   ró   rû   rý   rJ   r   r   r   rL   rL   >   s¡   † ðà ÷ð$MàCG÷Mõlõ+ð* ôó ðõ#õõõ õ
LõTõ1õ(!õ

õ
ð ô[ó ð[÷/÷
õ8c÷*!ñ *!r   rL   ) rG   Ú
__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   Ú	getLoggerrz   r%   r'   rL   r   r   r   Ú<module>r<     sm   ðñõ #ã ß (Ý ß Q× QÓ Qå :Ý 8ß DçÝ/à	×	Ò	Ð/Ó	0€õCð ÷'ð 'ó ð'÷Bq!ó q!r   