+
    „WÝjû@  ã                  ó  a € 0 t $ R t^ RIH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 ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHtHtHtH t H!t! ^ RI"H#t#H$t$ ]PJ                  ! R4      t&Rt'Rt(])! 0 R1m4      t*]PV                  ! RRR7      t,R]-R&   ]P\                  R 4       t/R R lt0R R lt1R R lt2R R lt3R R lt4R R  lt5R!RR"R#R$^ /R% R& llt6R' R( lt7R) R* lt8]
! R+R,7       ! R- R.4      4       t9R/ R0 lt:R# )2zùPlugin discovery: directory scanning, entry-point manifests, and the enable/disable gate.

Split out of :mod:`hermes_cli.plugins`. Names that tests patch on the origin
(``get_bundled_plugins_dir``, ``_env_enabled``) are looked up lazily through it.
)ÚannotationsN)Ú	dataclass)ÚPath)ÚAnyÚDictÚListÚOptionalÚSet)Úget_hermes_home)Úcfg_get)ÚVALID_CAPABILITY_IDS)Úparse_declared_capabilities)ÚPluginManifestÚ_detect_kind_from_sourceÚmanifest_keyÚ_resolve_module_sourceÚparse_manifest_fileÚportable_plugin_manifest)ÚLEGACY_RELAY_PLUGIN_KEYSÚRELAY_PLUGINS_CONFIG_ENVzhermes_cli.pluginszhermes_agent.pluginsz hermes_agent.plugin_capabilitiesÚ"hermes_plugin_discovery_suppressedF©Údefaultzcontextvars.ContextVar[bool]Ú_discovery_suppressedc               #  ó    "  € \         P                  R4      p  Rx € \         P                  V 4       R#   \         P                  T 4       i ; i5i)z•``discover_plugins()`` is a no-op inside; the scope's manager stays undiscovered, so the
first real consumer after the block still loads its plugins.TN)r   ÚsetÚreset)Útokens    ÚPC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\plugins_discovery.pyÚsuppress_plugin_discoveryr   0   s<   é € ô "×%Ñ% dÓ+€Eð+Ûä×#Ñ# EÖ*øÔ×#Ñ# EÕ*üs   ‚A™4 �A´AÁAc               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚbool© )Úformats   "r   Ú__annotate__r&   ;   s   € ÷ 'ñ ' Tñ 'ó    c                 ó*   € \         P                  4       # ©N)r   Úgetr$   r'   r   Úplugin_discovery_suppressedr+   ;   s   € Ü ×$Ñ$Ó&Ð&r'   c               ó$   € V ^8„  d   QhRRRRRR/# )r!   Úentry_pointsr   ÚgroupÚstrr"   Úlistr$   )r%   s   "r   r&   r&   ?   s!   € ÷ <ñ <¨Cð <¸ð <Àñ <r'   c                ó  € \        V R4      '       d   \        V P                  VR7      4      # \        V \        4      '       d   \        V P                  V. 4      4      # V  Uu. uF  q"P                  V8X  g   K  VNK  	  up# u upi )zCReturn one metadata entry-point group across supported Python APIs.Úselect)r.   )Úhasattrr0   r2   Ú
isinstanceÚdictr*   r.   )r-   r.   Úeps   && r   Ú_select_entry_point_groupr7   ?   sp   € äˆ|˜X×&Ò&Ü�L×'Ñ'¨eÐ'Ó4Ó5Ð5Ü�,¤×%Ò%Ü�L×$Ñ$ U¨BÓ/Ó0Ð0Ù%Ó;™�2¯©°UÑ):�BˆB™Ñ;Ð;ùÒ;s   Á#BÁ:Bc               ó   € V ^8„  d   QhRR/# ©r!   r"   úlist[PluginManifest]r$   )r%   s   "r   r&   r&   H   s   € ÷ ñ Ð';ñ r'   c                 óà  € . p  \         P                  P                  4       p\        V\        4      p\        V\
        4      pT EF/  p T Uu0 uF+  qfP                  TP                  8X  g   K  TP                  kK-  	  pp\         Uu. uF  q…P                   RT 2T9   g   K  TNK  	  p	p\        TRR4      p
\        T
RR4      pT P                  \        TP                  \        \        T
RR4      ;'       g    R4      Te&   \        TP!                  RR4      ;'       g    R4      MRR	TP                  TP                  \#        TP                  4      \%        Y•P                  4      R
7      4       EK2  	  T #   \         d#   p\        P                  RT4       T u Rp?# Rp?ii ; iu upi u upi   \         d/   p\        P                  R\        TRR4      T4        Rp?EK¤  Rp?ii ; i)a‘  Return metadata-only manifests for installed entry-point plugins. Kind comes from an import-free source
scan (memory/model providers route to their own discovery). Capabilities come from the companion
``hermes_agent.plugin_capabilities`` group (``<plugin-id>.<capability-id>`` entries pointing at the same
object), so consent works without importing plugin code. Failures are isolated per entry point.zEntry-point scan failed: %sNÚ.ÚdistÚmetadataÚversionÚ ÚSummaryÚ
entrypoint)Únamer?   ÚdescriptionÚsourceÚpathÚkeyÚkindÚcapabilitiesz'Entry-point manifest for %r skipped: %srC   Ú?)Ú	importlibr>   r-   r7   ÚENTRY_POINTS_GROUPÚENTRY_POINT_CAPABILITIES_GROUPÚ	ExceptionÚloggerÚdebugÚvaluerC   r   ÚgetattrÚappendr   r/   r*   Ú_classify_entrypoint_value_kindÚ_parse_declared_capabilities)Ú	manifestsÚepsÚ	group_epsÚcapability_epsÚexcr6   ÚdÚdeclaredÚcrI   r=   r>   s               r   Údiscover_entrypoint_manifestsr^   H   s§  € ð
 ')€IðÜ× Ñ ×-Ñ-Ó/ˆÜ-¨cÔ3EÓFˆ	Ü2°3Ô8VÓWˆô ˆð	cÙ(6ÓN© 1¿'¹'ÀRÇXÁXÑ:Mœ˜Ÿœ©ˆHÐNÝ';Ó\Ñ'; !Ç'Á'ÀÈ!ÈAÈ3Ð?OÐS[Ñ?[ŸA˜AÑ';ˆLÐ\Ü˜2˜v tÓ,ˆDÜ˜t Z°Ó6ˆHØ×Ñœ^Ø—W‘W¤c¬'°$¸	À2Ó*F×*LÐ*LÈ"Ó&MØFNÒFZœC §¡¨Y¸Ó ;× AÐ A¸rÔBÐ`bØ#¨"¯(©(¸¿¹Ü4°R·X±XÓ>Ü9¸,ÏÉÓPô÷ ñ ð Ðøô% ô Ü�‰Ð2°CÔ8ØÕûðüò
 OùÚ\øô ô 	cÜ�L‰LÐBÄGÈBÐPVÐX[ÓD\Ð^a×bÓbûð	cúsg   „>E: Á	F4ÁF*Á.F*Á>
F4ÂF/Â$F/Â*A7F4Ä"AF4Å:F'ÆF"ÆF'Æ"F'Æ*
F4Æ4G-Æ?"G(Ç(G-c               ó    € V ^8„  d   QhRRRR/# )r!   rQ   r/   r"   r$   )r%   s   "r   r&   r&   g   s   € ÷ ñ ¨3ð °3ñ r'   c                óØ   €  \        V 4      P                  R^4      ^ ,          P                  4       pV'       d   \        \	        V4      4      MR;'       g    R#   \
         d     R# i ; i)zWClassify an entry-point target by import-free source scan (unresolvable -> standalone).Ú:NÚ
standalone)r/   ÚsplitÚstripr   r   rN   )rQ   Úmodule_names   & r   rT   rT   g   s]   € ðÜ˜%“j×&Ñ& s¨AÓ.¨qÕ1×7Ñ7Ó9ˆßQ\Ô(Ô)?ÀÓ)LÔMÐbf×wÐwÐkwÐwøÜô Úðús   ‚AA ÁA ÁA)Á(A)c               ó   € V ^8„  d   QhRR/# )r!   r"   r   r$   )r%   s   "r   r&   r&   p   s   € ÷ ñ ˜sñ r'   c                 óÄ   €  ^ RI Hp  \        V ! 4       RR. R7      p\        V\        4      '       d   \        V4      # \        4       #   \         d    \        4       u # i ; i)uM   Read ``plugins.disabled`` â€” a deny-list that wins over ``plugins.enabled``.©Úload_configÚpluginsÚdisabledr   ©Úhermes_cli.configri   r   r4   r0   r   rN   )ri   rk   s     r   Ú_get_disabled_pluginsrn   p   sO   € ðÝ1Ü™;›=¨)°ZÈÔLˆÜ *¨8´T× :Ò :Œs�8‹}ÐEÄÃÐEøÜô Ü‹uŠðús   ‚:A ½	A ÁAÁAc               ó   € V ^8„  d   QhRR/# )r!   r"   zOptional[set]r$   )r%   s   "r   r&   r&   z   s   € ÷ 	ñ 	˜mñ 	r'   c                 óž   €  ^ RI Hp  \        V ! 4       RR4      p\        V\        4      '       d   \        V4      # R#   \         d     R# i ; i)zðRead the ``plugins.enabled`` allow-list (plugins are opt-in). ``None`` = key missing/malformed ("nothing
enabled yet"; the first ``migrate_config`` run grandfathers installed user plugins); ``set()`` = explicitly
empty; else the allow-list.rh   rj   ÚenabledNrl   )ri   rq   s     r   Ú_get_enabled_pluginsrr   z   sG   € ðÝ1Ü™+›-¨°IÓ>ˆÜ)¨'´4×8Ò8Œs�7‹|ÐB¸dÐBøÜô Úðús   ‚8= »= ½AÁAÚ
skip_namesÚprefixr@   Údepthc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r!   rF   r   rE   r/   rs   úOptional[set[str]]rt   ru   Úintr"   r:   r$   )r%   s   "r   r&   r&   †   s<   € ÷ 4ñ 4Ø
ð4Øð4Ø,>ð4ØORð4Ø`cð4àñ4r'   c          
     ó@  € . pV P                  4       '       g   V#  \        V P                  4       4      pT EFÒ  pTP                  P                  R4      '       d:   TP                  P                  R4      '       d   \        P                  RT4       K^  TP                  \        9   d   \        P                  RT4       K‹   TP                  4       '       d!   T^ 8X  d   T'       d   TP                  T9   d   KÄ  \        R TR,          TR,          3 4       R4      p	TR	,          p
T
P                  4       ;'       g    T
P                  4       pT	e(   \        Y˜Y4      pTe   TP                  T4       EK@  EKC  T'       d     TP                  \!        Y�T4      4       EKj  T^8¼  d   \        P                  RT4       EKŠ  T'       d   T RTP                   2MTP                  pTP%                  \'        Y�YÔ^,           R7      4       EKÕ  	  T#   \         d#   p\        P                  RY4       Tu Rp?# Rp?ii ; i  \         d#   p\        P                  RY‡4        Rp?EK1  Rp?ii ; i  \"         d#   p\        P                  R
Y§4        Rp?EKa  Rp?ii ; i)aD  Read manifests under *path*: flat ``<root>/<name>/plugin.yaml`` (key ``name``) or category
``<root>/<cat>/<name>/plugin.yaml`` (key ``cat/name``; a manifest-less directory recurses one level, depth
capped at two). *skip_names* ignores top-level names; portable ``plugin.json`` packages are accepted
alongside YAML manifests.z+Skipping unreadable plugin directory %s: %sNÚ__zSkipping dunder plugin path %sz1Skipping %s (foreign-harness manifest convention)c              3  óT   "  € T F  qP                  4       '       g   K  Vx € K   	  R # 5ir)   )Úexists)Ú.0Úfs   & r   Ú	<genexpr>Ú!scan_directory.<locals>.<genexpr>¤   s   é € Ð!iÑ-Z¨×^fÑ^f×^h§!¢!Ó-Zùs   ‚(ž
(zplugin.yamlz
plugin.ymlzplugin.jsonzFailed to parse %s: %sz/Skipping %s (no plugin.yaml, depth cap reached)Ú/)rt   ru   )Úis_dirÚsortedÚiterdirÚOSErrorrO   ÚwarningrC   Ú
startswithÚendswithrP   Ú_FOREIGN_HARNESS_MANIFEST_DIRSÚnextr|   Ú
is_symlinkr   rS   r   rN   ÚextendÚscan_directory)rF   rE   rs   rt   ru   rV   ÚchildrenrZ   ÚchildÚmanifest_fileÚportable_fileÚhas_portableÚmanifestÚ
sub_prefixs   &&$$$         r   r�   r�   †   s   € ð ')€IØ�;‰;�=Š=ØÐðÜ˜$Ÿ,™,›.Ó)ˆô ˆð �:‰:× Ñ  ×&Ò&¨5¯:©:×+>Ñ+>¸t×+DÒ+DÜ�L‰LÐ9¸5ÔAÙØ�:‰:Ô7Ô7Ü�L‰LÐLÈeÔTÙð
	Ø—<‘<—>’> e¨q¤j·ZÀEÇJÁJÐR\ÔD\ÙÜ Ñ!i¨e°mÕ.CÀUÈ\ÕEYÑ-ZÓ!iÐkoÓpˆMØ! MÕ1ˆMØ(×/Ñ/Ó1×OÐO°]×5MÑ5MÓ5OˆLð Ò$Ü*¨=ÀÓPˆHØÒ#Ø× Ñ  ×*ò $çðMØ× Ñ Ô!9¸%ÈÓ!P×Qð �aŒZÜ�L‰LÐJÈE×Rç5;˜F˜8 1 U§Z¡Z LÑ1ÀÇÁˆJØ×Ñœ^¨EÀ*Ð\]ÕT]Ô^×_ñI ðJ ÐøôQ ô Ü�‰ÐDÀdÔPØÕûðûô* ô 	ô �N‰NÐHÈ%ÔUÞûð		ûô ô MÜ—‘Ð7¸×LÓLûðMúsf   œH ÃI ÃI Ã(I Ã;AI Ä>I ÆI0ÈH=ÈH8È2H=È8H=É I-ÉI(É(I-É0JÉ;JÊJc               ó   € V ^8„  d   QhRR/# r9   r$   )r%   s   "r   r&   r&   ½   s   € ÷ ñ Ð%9ñ r'   c                 óØ  a€ ^ RI Hp  . oRR V3R lllpV P                  4       p\        P	                  RV4       V! RVR0 Rm4       \        4       R,          p\        P	                  RV4       V! R	VR	4       V P                  R
4      '       dF   \        P                  ! 4       R,          R,          p\        P	                  RV4       V! RVR4       S# \        P	                  R4       S# )zïRead directory manifests in full-discovery order (bundled top-level, bundled/platforms, user, opt-in
project) without loading or mutating anything, so startup probes share the exact precedence/containment
rules of the real discovery sweep.)rj   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r!   Úlabelr/   Ú	directoryr   rE   rs   rw   r"   ÚNoner$   )r%   s   "r   r&   Ú1collect_directory_manifests.<locals>.__annotate__Ä   s1   € ÷  ñ  �Sð   Tð  °3ð  ÐDVð  Ðbfñ  r'   c                ó„   <€ \        WVR 7      p\        P                  RV \        V4      4       SP	                  V4       R# ))rs   z  %s: %d manifest(s)N)r�   rO   rP   ÚlenrŒ   )r˜   r™   rE   rs   ÚfoundrV   s   &&&& €r   Ú_scanÚ*collect_directory_manifests.<locals>._scanÄ   s2   ø€ Ü˜y¸ZÔHˆÜ�‰Ð+¨U´C¸³JÔ?Ø×Ñ˜Ör'   zScanning bundled plugins: %szbundled (top-level)Úbundledrj   zScanning user plugins: %sÚuserÚHERMES_ENABLE_PROJECT_PLUGINSz.hermeszScanning project plugins: %sÚprojectzHProject plugins disabled (set HERMES_ENABLE_PROJECT_PLUGINS=1 to enable)r)   >   ÚmemoryÚcomputer_useÚcontext_engineÚcron_providersúmodel-providers)	Ú
hermes_clirj   Úget_bundled_plugins_dirrO   rP   r
   Ú_env_enabledr   Úcwd)Ú_originrŸ   Úrepo_pluginsÚuser_dirÚproject_dirrV   s        @r   Úcollect_directory_manifestsr²   ½   sÐ   ø€ õ .Ø&(€I÷ ò  ð ×2Ñ2Ó4€LÜ
‡L�LÐ/°Ô>Ù	Ð
 ¨yÚ
[ô]äÓ  9Õ,€HÜ
‡L�LÐ,¨hÔ7Ù	ˆ&�(˜FÔ#Ø×ÑÐ;×<Ò<Ü—h’h“j 9Õ,¨yÕ8ˆÜ�‰Ð3°[ÔAÙˆi˜ iÔ0ð Ðô 	�‰Ð_Ô`ØÐr'   c               ó    € V ^8„  d   QhRRRR/# )r!   rV   r:   r"   zdict[str, PluginManifest]r$   )r%   s   "r   r&   r&   Ý   s   € ÷ ñ Ð(<ð ÐAZñ r'   c           	     óp  € / pV  EF,  p\        V4      pVP                  V4      pVEe   VP                  R8X  dó   VP                  R9   dâ   VP                  '       d    \	        VP                  4      P
                  MRpVP                  '       d    \	        VP                  4      P
                  MRpV'       d>   V'       d6   WV8w  d0   \        P                  RVP                  VP                  W5V4       Kò  \        P                  RW2P                  VP                  VP                  4       W!V&   EK/  	  V# )aà  Later sources win on key collision (project > user > bundled): a same-named copy under
``~/.hermes/plugins/<name>`` is the documented way to override a bundled plugin, and is logged. A flat
user/project manifest that claims a bundled key from a *differently named* directory is an impostor, not
an override (``impostor_dir/plugin.yaml`` with ``name: kanban``): it is skipped with a warning so
``hermes plugins enable kanban`` never activates unrelated code under the bundled name.r¡   r@   z§Ignoring %s plugin at %s: its manifest name '%s' is a bundled plugin's key but the directory is named '%s'; rename the directory to '%s' to override the bundled pluginz5Plugin '%s' at %s (%s) shadows the bundled copy at %s>   r¢   r¤   )	r   r*   rE   rF   r   rC   rO   r†   Úinfo)rV   Úwinnersr“   rG   ÚshadowedÚown_dirÚbundled_dirs   &      r   Úresolve_manifest_winnersrº   Ý   sé   € ð *,€GÜˆÜ˜8Ó$ˆØ—;‘;˜sÓ#ˆØÓ H§O¡O°yÔ$@ÀXÇ_Á_ÐXkÔEkØ2:·-·-°-”d˜8Ÿ=™=Ó)×.Ò.ÀRˆGØ6>·m·m°mœ$˜xŸ}™}Ó-×2Ò2ÈˆKßŸ;¨7Ô+AÜ—‘ðkà—O‘O X§]¡]°CÀ+ôñ
 Ü�K‰KÐOÐQT×VcÑVcØ Ÿ™¨¯©ô8à�Œñ ð  €Nr'   T)Úfrozenc                  óP   € ] tR t^÷t$ RtR]R&   RtR]R&   RtR]R	&   RtR
]R&   Rt	R# )ÚManifestGatezERouting verdict for one winning manifest (see :func:`gate_manifest`).r/   ÚactionFr#   rq   NúOptional[str]ÚerrorzOptional[tuple]Úlogr$   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__rq   rÀ   rÁ   Ú__static_attributes__r$   r'   r   r½   r½   ÷   s(   ‡ áOàƒKØ€GˆTÓØ€Eˆ=ÓØ€Cˆ×r'   r½   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r!   r“   r   rk   zset[str]rq   rw   r"   r½   r$   )r%   s   "r   r&   r&     s,   € ÷ 8 ñ 8 Øð8 Ø(0ð8 Ø;Mð8 àñ8 r'   c                ó¤  a	€ \        V 4      o	^ RIHp S	V P                  0V! S	4      mpRR/R V	3R lllpV\        ,          '       d$   R\
         R2pV! V\        P                  RV4      # WA,          '       d   V! R	\        P                  R
4      # V P                  R8X  d   V! R\        P                  R4      # V P                  R8X  d   V! R\        P                  RRR7      # V P                  R8X  d9   V P                  R8X  d   \        R4      # V P                  R8X  d   \        R4      # Ve   WB,          '       g   V! RS	 R2\        P                  R4      # V P                  R8w  dZ   ^ RIHp V! V P                  V P                  4      pVe3   RVP                  ;'       g    R 2pV! V\        P                  RV4      # \        R4      # ) a  Decide how one winning manifest is handled. Gate order matters: legacy relay refusal, explicit disable,
category-owned kinds (exclusive / model-provider), bundled auto-loads (backend now, platform deferred),
then ``plugins.enabled`` opt-in (path-derived key or legacy bare name).)Úlegacy_plugin_keysrq   Fc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r!   rÀ   r¿   Úlevelrx   Úmessager/   rq   r#   r"   r½   r$   )r%   s   "r   r&   Ú#gate_manifest.<locals>.__annotate__  s8   € ÷ rñ r˜Mð r°#ð rÀð rÐUYð rÐfrñ rr'   c               ó*   <€ \        R W0WS.VO5R7      # )Úplaceholder)rq   rÀ   rÁ   )r½   )rÀ   rÍ   rÎ   rq   ÚargsÚ
lookup_keys   &&&$*€r   Ú_placeholderÚ#gate_manifest.<locals>._placeholder  s   ø€ Ü˜M°7ÈeÐ^hÐMpÐkoÑMpÔqÐqr'   ut   removed â€” Relay lifecycle is owned by Hermes core; configure a standard user or system Relay plugins.toml, or use z# for an explicit user-file overridez5Refusing to load removed Hermes Relay plugin '%s'; %szdisabled via configzSkipping disabled plugin '%s'Ú	exclusiveu<   exclusive plugin â€” activate via <category>.provider configz8Skipping '%s' (exclusive, handled by category discovery)zmodel-providerNz?Skipping '%s' (model-provider, handled by providers/ discovery)T)rq   r¡   ÚbackendÚload_nowÚplatformÚdeferz2not enabled in config (run `hermes plugins enable z` to activate)z&Skipping '%s' (not in plugins.enabled))Úinstalled_plugin_removalz(removed from the Hermes plugin catalog: zno reason recordedu@   Refusing to load plugin '%s' â€” %s; run `hermes plugins remove`Úload)r   Úhermes_cli.left_core_migrationrË   rC   r   r   ÚloggingÚWARNINGÚDEBUGrH   rE   r½   Úhermes_cli.plugins_cmd_catalogrÛ   rF   Úreason)
r“   rk   rq   rË   ÚnamesrÔ   rÀ   rÛ   ÚremovedrÓ   s
   &&&      @r   Úgate_manifestrå     sÊ  ø€ ô ˜hÓ'€JÝAà˜Ÿ™ÐHÑ);¸JÓ)GÐH€EðrÐ\a÷ rò rð Ô'×'Ô'ð$Ü$<Ð#=Ð=`ðbð 	ñ ˜E¤7§?¡?Ð4kÐmrÓsÐsØ×ÔÙÐ1´7·=±=ÐBaÓbÐbà‡}�}˜Ô#ÙØJÌGÏMÉMØFó
ð 	
ð ‡}�}Ð(Ô(ÙØ”'—-‘-Ð!bÐlpôrð 	rà‡�˜)Ô#à�=‰=˜IÔ%Ü 
Ó+Ð+ð �=‰=˜JÔ&Ü Ó(Ð(Ø‚˜eŸoœoÙØ@ÀÀÈNÐ[Ô]d×]jÑ]jØ4ó
ð 	
ð ‡�˜)Ô#õ 	LÙ*¨8¯=©=¸(¿-¹-ÓHˆØÒØ>¸w¿~¹~×?eÐ?eÐQeÐ>fÐgˆEÙ ¤w§¡Ð8zØ %ó'ð 'ä˜ÓÐr'   >   ú.kimi-pluginú.codex-pluginú.devin-pluginú.claude-pluginú.cursor-plugin);Ú__conditional_annotations__rÆ   Ú
__future__r   Ú
contextlibÚcontextvarsÚimportlib.metadatarK   rÞ   Údataclassesr   Úpathlibr   Útypingr   r   r   r   r	   Úhermes_constantsr
   rm   r   Úhermes_cli.plugin_capabilitiesr   r   rU   Úhermes_cli.plugins_manifestr   r   r   r   r   r   Úhermes_cli.relay_plugin_cutoverr   r   Ú	getLoggerrO   rL   rM   Ú	frozensetr‰   Ú
ContextVarr   rÇ   Úcontextmanagerr   r+   r7   r^   rT   rn   rr   r�   r²   rº   r½   rå   )rë   s   @r   Ú<module>rû      s  øðôõ #ã Û Û Û Ý !Ý ß 1Õ 1å ,Ý %Ý ?Ý f÷÷ ÷ _à	×	Ò	Ð/Ó	0€à+Ð Ø!CÐ ñ
 "+ò ,ó "Ð ð 7B×6LÒ6LØ(°%ô79Ð Ð3ó 9ð ×Ññ+ó ð+õ'õ<õõ>õõ	ð4ØAEð4ØUWð4Øfg÷4õnõ@ñ4 �$Ô÷ ð  ó ð ÷8 r'   