+
    kHàja/  ã                  óH  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIHt ^ RIHtHtHtHtHt ]P,                  ! ]4      t]! ]4      P4                  t/ tR]R&   ]
P<                  ! 4       tRt ]! R	R
R7      t!R]R&   ]"! 4       t#R]R&   / t$R]R&   / t%R]R&   R R lt&R R lt']PP                  R 4       t)R R lt*R R lt+R R lt,R R  lt-R! R" lt.R4R# R$ llt/R4R% R& llt0R'R/R( R) llt1R* R+ lt2 ! R, R-4      t3R. R/ lt4R0 R1 lt5R2 R3 lt6R# )5a  Shared directory-plugin loader for ``plugins/<kind>/<name>/`` discovery packages
(cron_providers, context_engine, memory): import ``__init__.py`` by path with siblings
pre-registered so relative imports work, then extract the provider via ``register(ctx)``
or an ABC-subclass fallback.)ÚannotationsN)Ú
ContextVar)ÚPath)ÚAnyÚCallableÚListÚOptionalÚTuplezdict[str, threading.RLock]Ú_MODULE_LOAD_LOCKSg      $@Úplugin_load_bounded_waitF)ÚdefaultzContextVar[bool]Ú_BOUNDED_WAITzset[str]Ú_STALLED_LOADSzdict[str, int]Ú_LOAD_OWNERSzdict[int, str]Ú_LOAD_WAITERSc               ó    € V ^8„  d   QhRRRR/# )é   ÚtidÚintÚreturnÚset© )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/plugins/plugin_loader.pyÚ__annotate__r   "   s   € ÷ ñ �Cð ˜Cñ ó    c                ó   € \         P                  \        P                  V R4      4      0p\        \        P
                  R/ 4      P                  V 4      pTP                  R \        V\        4      '       d   TMV. 4       4       VR0,
          # )zTThreads *tid* is blocked on: a loader lock owner, or an importlib module-lock owner.Ú Ú_blocking_onc              3  ó<   "  € T F  p\        VR R4      x € K  	  R# 5i)ÚownerN)Úgetattr)Ú.0Úlks   & r   Ú	<genexpr>Ú_waits_for.<locals>.<genexpr>&   s   é € ÐmÑ8k°”'˜"˜g t×,Ð,Ó8kùs   ‚N)	r   Úgetr   r!   Ú	importlibÚ
_bootstrapÚupdateÚ
isinstanceÚlist)r   ÚownersÚblockeds   &  r   Ú
_waits_forr.   "   su   € ä×Ñœ}×0Ñ0°°bÓ9Ó:Ð;€FÜ”i×*Ñ*¨N¸BÓ?×CÑCÀCÓH€GØ
‡M�MÑmÄ:ÈgÔW[×C\ÒC\¹ÐcjÐbkÐ8kÓmÔmØ�T�F�?Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Úmer   r   Úboolr   )r   s   "r   r   r   *   s   € ÷ ñ ˜Sð  Tñ r   c                óê   € \        4       \        \        V 4      4      r!V'       dN   VP                  4       pW08X  d   R# W19  g   K(  VP	                  V4       VP                  \        V4      4       KU  R# )z­Whether the wait graph (loader locks + importlib's module locks) leads back to *me*.
importlib cannot see the loader lock in its own deadlock check, so walk both kinds here.TF)r   r+   r.   ÚpopÚaddÚextend)r0   ÚseenÚtodor   s   &   r   Ú_load_would_deadlockr8   *   sO   € ô “œœZ¨›^Ó,ˆ$ß
Ø�h‰h‹jˆØŒ9ÙØŽ?Ø�H‰H�SŒMØ�K‰Kœ
 3›Ö(Ùr   c               #  ó    "  € \         P                  R4      p  Rx € \         P                  V 4       R#   \         P                  T 4       i ; i5i)z«For per-turn callers that must not stall on another thread's hung plugin import: their
loads give up (None) after ``_CONCURRENT_LOAD_WAIT_SECS`` instead of waiting it out.TN)r   r   Úreset)Útokens    r   Úbounded_load_waitr<   8   s;   é € ô ×Ñ˜dÓ#€Eð#Ûä×Ñ˜EÖ"øŒ×Ñ˜EÕ"üs   ‚A™4 �A´AÁAc               ó    € V ^8„  d   QhRRRR/# )r   Úmodule_nameÚstrr   zthreading.RLockr   )r   s   "r   r   r   C   s   € ÷ Mñ M 3ð M¨?ñ Mr   c                ó®   € \         ;_uu_ 4        \        P                  V \        P                  ! 4       4      uuR R R 4       #   + '       g   i     R # ; i©N)Ú_MODULE_LOAD_LOCKS_GUARDr
   Ú
setdefaultÚ	threadingÚRLock)r>   s   &r   Ú_module_load_lockrF   C   s.   € ß	!Ö	!Ü!×,Ñ,¨[¼)¿/º/Ó:KÓL÷ 
"×	!×	!Ó	!ús   �)AÁA	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Únamer?   Úsearch_locationsz	list[str]r   ÚNoner   )r   s   "r   r   r   H   s!   € ÷ >ñ > Sð >¸Ið >È$ñ >r   c                óä   € V \         P                  9   d   R# \        P                  P	                  V RRR7      pWn        \        P                  P                  V4      \         P                  V &   R# )zORegister an empty package shell so ``<name>.<child>`` relative imports resolve.NT)Ú
is_package)ÚsysÚmodulesr'   Ú	machineryÚ
ModuleSpecÚsubmodule_search_locationsÚutilÚmodule_from_spec)rH   rI   Úspecs   && r   Úregister_synthetic_packagerU   H   sQ   € àŒs�{‰{ÔÙÜ×Ñ×)Ñ)¨$°ÀÐ)ÓF€DØ&6Ô#Ü!Ÿ™×7Ñ7¸Ó=„C‡K�K�Ór   c               ó   € V ^8„  d   QhRR/# )r   r   zOptional[Path]r   )r   s   "r   r   r   Q   s   € ÷ ñ ˜.ñ r   c                 ó„   €  ^ RI Hp  V ! 4       R,          pVP                  4       '       d   V# R#   \         d     R# i ; i)z8Return ``$HERMES_HOME/plugins/`` or None if unavailable.)Úget_hermes_homeÚpluginsN)Úhermes_constantsrX   Úis_dirÚ	Exception)rX   Úds     r   Úuser_plugins_dirr^   Q   s>   € ðÝ4ÙÓ 	Õ)ˆØ—H‘H—J’JˆqÐ( DÐ(øÜô Úðús   ‚)0 ¬0 ®0 °?¾?c               ó    € V ^8„  d   QhRRRR/# )r   Úrootr   r   z
list[Path]r   )r   s   "r   r   r   [   s   € ÷ ñ ˜4ð  Jñ r   c                ó°  € V P                  4       '       g   . # . p\        V P                  4       4       Fo  pVP                  P	                  R4      '       d   K&   VP                  4       '       d3   VR,          P                  4       '       d   VP                  V4       Km  Ko  Kq  	  V#   \         d"   p\        P                  RY#4        Rp?Kœ  Rp?ii ; i)zSSorted child dirs of *root* that have an ``__init__.py`` (skips ``_``/``.`` names).ú__init__.pyz+Skipping unreadable plugin directory %s: %sN)Ú_Ú.)
r[   ÚsortedÚiterdirrH   Ú
startswithÚexistsÚappendÚOSErrorÚ_logÚwarning)r`   ÚdirsÚchildÚexcs   &   r   Úiter_plugin_dirsrp   [   s©   € à�;‰;�=Š=Øˆ	Ø€DÜ˜Ÿ™›Ö'ˆØ�:‰:× Ñ  ×,Ò,Ùð	TØ�|‰|�~Š~ 5¨=Õ#8×"@Ñ"@×"BÒ"BØ—‘˜EÖ"ñ #C‰~ñ	 (ð €Køô ô 	TÜ�L‰LÐFÈ×SÒSûð	Tús$   ÁB)Á1B)ÂB)Â)CÂ4CÃCc               ó    € V ^8„  d   QhRRRR/# )r   Ú
plugin_dirr   r   r?   r   )r   s   "r   r   r   k   s   € ÷ 	ñ 	¨ð 	°ñ 	r   c                óì   €  ^ RI Hp \        V R,          RR7      ;_uu_ 4       pV! V4      ;'       g    / pRRR4       XP                  RR4      #   + '       g   i     L"; i  \         d     R# i ; i)zPReturn ``description`` from ``plugin.yaml`` (empty string if absent/unreadable).)Úfast_safe_loadzplugin.yamlz	utf-8-sig)ÚencodingNÚdescriptionr   )Úutilsrt   Úopenr&   r\   )rr   rt   ÚfÚmetas   &   r   Úread_plugin_descriptionr{   k   sd   € ðÝ(ä�*˜}Õ,°{×CÕCÀqÙ! !Ó$×*Ð*¨ˆD÷ Dà�x‰x˜ rÓ*Ð*÷ D×Cûô ô Úðús'   ‚"A$ ¤A·A$ ÁA!	ÁA$ Á$A3Á2A3c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rH   r?   Úfiler   rI   zOptional[list[str]]r   úOptional[Any]r   )r   s   "r   r   r   w   s*   € ÷ ñ �cð  ð Ð9Lð ÐXeñ r   c                óÔ   € \         P                  P                  V \        V4      VR7      pV'       g   R# \         P                  P	                  V4      pV\
        P                  V &   V# )zDspec -> module -> sys.modules[name] (NOT executed); None if no spec.)rQ   N)r'   rR   Úspec_from_file_locationr?   rS   rM   rN   )rH   r}   rI   rT   Úmods   &&&  r   Ú_new_moduler‚   w   sU   € ä�>‰>×1Ñ1ØŒc�$‹iÐ4Dð 2ó F€DçÙÜ
�.‰.×
)Ñ
)¨$Ó
/€CØ„C‡K�K�ÑØ€Jr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r�   r   ÚloggerzOptional[logging.Logger]r   r1   r   )r   s   "r   r   r   ‚   s"   € ÷ ñ ˆsð Ð4ð Àñ r   c                óÚ   € V f   R#  V P                   P                  P                  V 4       R#   \         d1   pT'       d   TP	                  RT P
                  T4        Rp?R# Rp?ii ; i)z§Exec a ``_new_module`` module (None -> False); False + debug-log if it raised. The sys.modules
entry stays on failure; callers needing a clean retry pop it themselves.NFTzFailed to exec_module %s: %s)Ú__spec__ÚloaderÚexec_moduler\   ÚdebugÚ__name__)r�   r„   Úes   && r   Ú_execrŒ   ‚   sW   € ð ‚{ÙðØ�‰×Ñ×'Ñ'¨Ô,ÙøÜô ßØ�L‰LÐ7¸¿¹ÀqÔIÝûðús   ˆ%/ ¯A*º%A%Á%A*Úsynthetic_namespacec               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r   r>   r?   rr   r   Úparentsútuple[str, ...]r„   úlogging.Loggerr�   úOptional[str]r   r~   r   )r   s   "r   r   r   �   s9   € ÷ -ñ - Cð -°Tð -Àð -Ø-ð-ØDQð-Ø]jñ-r   c               ó8  € VR,          pVP                  4       '       g   R# V'       d=   ^ RIHp V! RVP                  : RV  R24      pV'       d   VP	                  RV4       R# \        V 4      \        P                  ! 4       r˜\        P                  4       '       g   \        R4      M,\        P                  ! 4       V \        9   d   ^ M\        ,           p
V \        V	&    VP!                  R	R
7      '       gº   \#        V	4      '       dH   VP%                  RV 4       \&        P(                  P                  V 4      \        P+                  V	R4       # \        P                  ! 4       V
8¼  g   KŒ  \        P-                  V 4       VP	                  RV \        4        \        P+                  V	R4       R#  \        P+                  V	R4       V \.        9  p\.        P1                  W	4        \3        WWRVV4      V'       d,   \.        P+                  V R4       \        P5                  V 4       VP7                  4        #   \        P+                  T	R4       i ; i  T'       d,   \.        P+                  T R4       \        P5                  T 4       TP7                  4        i ; i)um  Import ``plugin_dir/__init__.py`` as *module_name* (reusing sys.modules when loaded).
Order matters: parents first (relative imports need them), then siblings as ``module_name.<stem>``
(so ``from ._x import Y`` resolves), then the module. Finally child is bound onto parent and
siblings onto module â€” the shape normal imports produce, which monkeypatch relies on.rb   N)Úin_process_import_refusalzplugin z (loaded as Ú)z%sÚinfgš™™™™™©?)Útimeoutz8Concurrent circular load of %s; using the partial modulezcSkipping plugin %s: another thread's load of it has not finished (import still running after %.0fs))rh   Úhermes_cli.plugin_isolationr”   rH   rl   rF   rD   Ú	get_identr   r&   ÚfloatÚtimeÚ	monotonicr   Ú_CONCURRENT_LOAD_WAIT_SECSr   Úacquirer8   r‰   rM   rN   r3   r4   r   rC   Ú_load_plugin_module_lockedÚdiscardÚrelease)r>   rr   r�   r„   r�   Ú	init_filer”   ÚrefusalÚlockr0   ÚdeadlineÚ	outermosts   &&$$$       r   Úload_plugin_moduler§   �   s   € ð ˜]Õ*€IØ×Ñ×ÒÙßÝIÙ+¨g°j·o±oÑ5HÈÐU`ÐTaÐabÐ,cÓdˆßØ�N‰N˜4 Ô)Ùô ! Ó-¬y×/BÒ/BÓ/Dˆ"Ü#0×#4Ñ#4×#6Ò#6Œu�UŒ|¼D¿NºNÓ<LØœNÔ*‰Ô0Jõ=L€Hà#„M�"Ñð$Ø—,‘, t�,×,Ò,Ü# B×'Ò'Ø—‘ÐWÐYdÔeÜ—{‘{—‘ {Ó3ô 	×Ñ˜"˜dÕ#ô �~Š~Ó 8Ö+Ü×"Ñ" ;Ô/Ø—‘ð  DØEPÔRlônàä×Ñ˜"˜dÖ#ð -ô 	×Ñ˜"˜dÔ#Ø¤<Ñ/€IÜ×Ñ˜KÔ,ðÜ)¨+À9ÐW]Ø*=ó?÷ Ü×Ñ˜[¨$Ô/Ü×"Ñ" ;Ô/Ø�‰�øô 	×Ñ˜"˜dÕ#û÷ Ü×Ñ˜[¨$Ô/Ü×"Ñ" ;Ô/Ø�‰�ús,   Ã!H9 Ã9AH9 ÅH9 Å-,H9 Ç(I È9IÉAJc               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r   r>   r?   rr   r   r¢   r�   r�   r„   r‘   r�   r’   r   r~   r   )r   s   "r   r   r   À   sA   € ÷ $ñ $¨Cð $¸Tð $Èdð $Ø(7ð$ØAOð$à4Að$àFSñ$r   c           
     ón  € \         P                  P                  V 4      pVe   \        VRR 4      '       d   V# V F‰  p\        P
                  ! VP                  R4      R,          !  pV\         P                  9  g   KD  VR,          P                  4       '       g   Kc  \        \        WxR,          \        V4      .4      4       K‹  	  V'       d   \        V. 4       \        W\        V4      .4      p	V	f   R # . p
VP                  R4       F—  pV  RVP                   2pVP                  R8X  g   V\         P                  9   d   K<  \        WË4      p\        WÔ4      '       d    V
P                  VP                  V34       Kw  \         P                  P!                  VR 4       K™  	  \        W”4      '       g#   \         P                  P!                  V R 4       R # V P#                  R^4      w  rï\         P                  P                  V4      pVe   \%        VWù4       V
 F  w  pp\%        V	VV4       K  	  V	# )NÚ__file__rd   :é   NNrb   z*.py)rM   rN   r&   r!   Ú_PLUGINS_ROOTÚjoinpathÚsplitrh   rŒ   r‚   r?   rU   ÚglobÚstemrH   ri   r3   ÚrsplitÚsetattr)r>   rr   r¢   r�   r„   r�   ÚcachedÚparentÚparent_pathr�   Úloaded_submodulesÚsub_fileÚfull_sub_nameÚsub_modÚparent_nameÚ
child_nameÚ
parent_modÚsub_names   &&&&&&            r   rŸ   rŸ   À   s»  € ô �[‰[�_‰_˜[Ó)€FØÒœg f¨j¸$×?Ò?ØˆÛˆÜ#×,Ò,¨f¯l©l¸3Ó.?ÀÕ.CÑDˆØœŸ™Ö$¨+¸Õ*E×)MÑ)M×)OÔ)OÜ”+˜f°MÕ&AÄCÈÓDTÐCUÓVÖWñ ÷ Ü"Ð#6¸Ô;ä
�k¬s°:«Ð.?Ó
@€CØ
‚{ÙØÐØ—O‘O FÖ+ˆØ&˜- q¨¯©¨Ð8ˆØ�=‰=˜MÔ)¨]¼c¿k¹kÔ-IÙÜ˜mÓ6ˆÜ�×!Ò!Ø×$Ñ$ h§m¡m°WÐ%=Ö>ä�K‰K�O‰O˜M¨4Ö0ñ ,ô �×ÒÜ�‰�‰˜ TÔ*ÙØ)×0Ñ0°°aÓ8Ñ€KÜ—‘—‘ Ó-€JØÒÜ�
˜JÔ,Û.Ñˆ�'Ü��X˜wÖ'ñ /à€Jr   c                  ó0   € ] tR t^çtRtR t];t;t;tt	Rt
R# )ÚNoopPluginContextzbBase for fake ``register(ctx)`` contexts: no-op registrations except the one a subclass overrides.c                	ó   € R # rA   r   )ÚselfÚargsÚkwargss   &*,r   Ú_noopÚNoopPluginContext._noopê   s   € Ùr   r   N)rŠ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÄ   Úregister_toolÚregister_hookÚregister_cli_commandÚregister_memory_providerÚ__static_attributes__r   r   r   r¿   r¿   ç   s$   † Ùlòð W\Ð[€MÐ[�MÐ[Ð$8Ô;Sr   r¿   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )r   r�   r   Ú	collectorÚcollected_attrr?   Úbase_clsÚtyperH   r„   r‘   r   r~   r   )r   s   "r   r   r   ð   sA   € ÷ ñ ˜cð °ð Àcð ÐUYð Ðadð Ø!/ðØ4Añr   c               óþ  € \        V R4      '       d)    V P                  V4       \        W4      pV'       d   V#  \        V 4       Fu  p\        WR4      p	\        V	\        4      '       g   K'  \        W“4      '       g   K:  W“Jg   KA  \        P                  ! \        4      ;_uu_ 4        V	! 4       uuRRR4       u # 	  R#   \         d   pTP	                  RYG4        Rp?L¨Rp?ii ; i  + '       g   i     K¶  ; i)zWExtract the provider instance: ``register(ctx)`` first, then any ``base_cls`` subclass.Úregisterzregister() failed for %s: %sN)ÚhasattrrÕ   r!   r\   r‰   Údirr*   rÓ   Ú
issubclassÚ
contextlibÚsuppress)
r�   rÐ   rÑ   rÒ   rH   r„   Úinstancer‹   Ú	attr_nameÚattrs
   &$$$$$    r   Úinstance_from_modulerÞ   ð   sÇ   € ô ˆs�J×Òð	BØ�L‰L˜Ô#Ü˜yÓ9ˆHßØ�ð ô ˜–Xˆ	Ü�s tÓ,ˆÜ�dœD×!Ô!¤j°×&@Ô&@ÀTÕEYÜ×$Ò$¤Y×/Õ/Ù“v÷ 0Ô/ñ ñ
 øô ô 	BØ�L‰LÐ7¸×AÑAûð	Bú÷
 0×/Ð/ús#   ”%C Â)C+ÃC(ÃC#Ã#C(Ã+C<c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )r   rH   r?   rr   r   Úload_from_dirzCallable[[Path], Optional[Any]]ÚkindÚnounr„   r‘   r   r~   r   )r   s   "r   r   r     sB   € ÷ 
ñ 
�Sð 
 dð 
Ð;Zð 
Ðehð 
Øð
Ø"0ð
Ø5Bñ
r   c               óÖ   €  V! V4      pT'       g   TP                  RY0T4       T;'       g    R#   \          d-   pTP                  RTP                  4       Y4        Rp?R# Rp?ii ; i)zUShared body of ``load_<kind>(name)``: load from *plugin_dir*, warn + None on failure.zFailed to load %s '%s': %sNz'%s '%s' loaded but no %s instance found)r\   rl   Úlower)rH   rr   rà   rá   râ   r„   rÛ   r‹   s   &&&$$$  r   Ú
load_namedrå     sa   € ðÙ  Ó,ˆ÷ Ø�‰Ð@À$ÈdÔSØ×Ð�tÐøô ô Ø�‰Ð3°T·Z±Z³\À4ÔKÝûðús   ‚1 ±A(¼!A#Á#A(c               ó    € V ^8„  d   QhRRRR/# )r   ÚloadzCallable[[], Optional[Any]]r   r1   r   )r   s   "r   r   r     s   € ÷ ñ Ð8ð ¸Tñ r   c                ó–   €  V ! 4       pVRJ;'       d%    \        VR4      '       d   VP                  4       # R#   \         d     R# i ; i)zRTrue iff *load()* returns an instance whose ``is_available()`` (if any) is truthy.NÚis_availableTF)rÖ   ré   r\   )rç   rÛ   s   & r   Úprobe_availabilityrê     sO   € ðÙ“6ˆØ˜tÐ#×pÐpÄGÈHÐVd×DeÒDe¨×)>Ñ)>Ó)@ÐpÐkoÐpøÜô Úðús   ‚9 ”"9 ·9 ¹AÁArA   )7Ú__conditional_annotations__rÉ   Ú
__future__r   rÙ   Úimportlib.machineryr'   Úimportlib.utilÚloggingrM   rD   r›   Úcontextvarsr   Úpathlibr   Útypingr   r   r   r   r	   Ú	getLoggerrŠ   rk   rª   r´   r¬   r
   Ú__annotations__ÚLockrB   r�   r   r   r   r   r   r.   r8   Úcontextmanagerr<   rF   rU   r^   rp   r{   r‚   rŒ   r§   rŸ   r¿   rÞ   rå   rê   )rë   s   @r   Ú<module>r÷      s  øðô õ
 #ã Û Û Û Û 
Û Û Ý "Ý ß 7Õ 7à×Ò˜Ó"€á�X“×%Ñ%€Ø13Ð Ð.Ó 3Ø$Ÿ>š>Ó+Ð ð "Ð Ù",Ð-GÐQVÔ"W€ÐÓ WÙ›5€�Ó  Ø!€ˆnÓ !Ø "€ˆ~Ó "õõð ×Ññ#ó ð#õMõ
>õõõ 	÷÷ð-ØTX÷-õ`$÷N\ñ \õõ&
÷r   