+
    „WÝjÖ<  ã                  óB  € R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHtH	t	H
t
Ht ]P                  ! ]4      t]P                  ! 4       t]! 0 R m4      tR R ltR R ltR	 R
 ltRR/R R lltR R ltR R ltR R ltR R ltR tR R ltR R ltR R ltR R ltR# )!a  Mid-run plugin activation: what a just-loaded plugin does NOW vs next session (#87770).

One seam for every surface: ``PluginManager.on_plugin_loaded`` fires with one
:func:`plugin_activation_summary` per loaded plugin. Gateway handlers (slash commands, transform hooks,
platform callbacks) are live as soon as the plugin loads; portable MCP servers and skills go live in
the open chats of the plugin's profile (:func:`load_and_go_live`; MCP tools are deferred behind
tool_search, so the cached prompt prefix is unchanged); Python tools and system-prompt sections stay
deferred to the next session (prompt-cache invariant, same as ``/skills install``).
:func:`activate_plugin_now` is what the install / enable / update surfaces call after a successful
config or tree change.
)ÚannotationsN)ÚPath)ÚAnyÚDictÚListÚOptionalc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úmanagerr   Ú
plugin_keyÚstrÚreturnúdict[str, Any]© )Úformats   "ÚQC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\plugins_activation.pyÚ__annotate__r      s&   € ÷ +Yñ +Y sð +Y¸ð +YÀñ +Yó    c           
     óR  a€ V P                   P                  V4      p\        VRR4      p\        VRR4      ;'       g    ToV P                  P                  V. 4       Uu. uF  p\        VRR4      '       g   K  VNK  	  pp/ pV FA  pVP	                  VP
                  . 4      P                  \        VP                  4      4       KC  	  / pVP                  R4      '       d   \        VR,          4      VR&   \        VP                  RR4      4      p	V	\        ,          '       d   \        V	\        ,          4      VR	&   V	\        ,
          '       d   \        V	\        ,
          4      VR
&   \        V3R lV P                  P                  4        4       4      p
Y¦P                  RR4       Uu. uF  pRV 2NK
  	  up,          p
V
'       d   W¨R&   VP                  R4      '       d   \        VR,          4      VR&   / p\        \        VP                  RR4      4      \        \        VRR4      ;'       g    R4      ,          \        \        VRR4      ;'       g    R4      ,          4      pV'       d   WÜR&   VP                  R4      '       d   \        VR,          4      VR&   \        \        VP                  RR4      4      V P                  P                  4        UUu0 uF  w  rïWñ8X  g   K  VkK  	  upp,          4      pV'       d   VVR&   RSRVRVRV/# u upi u upi u uppi )a±  ``{name, key, activated_now: {kind: [names]}, deferred: {kind: [names]}}`` for one loaded plugin,
read from what it actually registered (ownership ledger + handler registries), not from what its
manifest promises. Keys appear only when non-empty.

``activated_now``: ``gateway_commands`` (slash names), ``gateway_transforms`` / ``hooks`` (hook names),
``callbacks`` (platforms with a ``register_platform_handler`` factory / Slack action ids), ``locales``
(``<lang>.<surface>`` language-pack layers).
``deferred``: ``tools`` (tool names; next session), ``prompt`` (section ids; next session),
``mcp_servers`` (the plugin's mcp.json server names exactly as registered; until ``mcp.reload``).ÚmanifestNÚnameÚactiveTÚcommandÚgateway_commandsÚhookÚgateway_transformsÚhooksc              3  ó°   <"  € T FK  w  r\         ;QJ d    V3R  lV 4       F  '       g   K   RM	  RM! V3R  lV 4       4      '       g   KG  Vx € KM  	  R# 5i)c              3  ó2   <"  € T F  w  rVS8H  x € K  	  R # 5i©Nr   )Ú.0Ú_fÚpluginr   s   &  €r   Ú	<genexpr>Ú6plugin_activation_summary.<locals>.<genexpr>.<genexpr>9   s   øé € ÐI¹y±°˜f¨žn»yùs   ƒTFN)Úany)r    ÚplatformÚ	factoriesr   s   &  €r   r#   Ú,plugin_activation_summary.<locals>.<genexpr>8   s<   øé € ð KÑ;fÑ$7 Hß›#ÔI¹yÓIŸ#Ÿ#š#ÔI¹yÓI×I÷  ’xÓ;fùs   ƒ&A¬AÁ
AÚslack_action_handlerzslack:Ú	callbacksÚlocaleÚlocalesÚtoolÚtools_registeredÚprovides_toolsÚtoolsÚsystem_prompt_sectionÚpromptÚportable_mcpÚmcp_serversÚkeyÚactivated_nowÚdeferredr   )Ú_pluginsÚgetÚgetattrÚ_ownership_ledgerÚ
setdefaultÚkindÚappendr   r5   ÚsortedÚsetÚ_GATEWAY_TRANSFORM_HOOKSÚ_platform_handler_factoriesÚitemsÚ_portable_mcp_server_plugins)r
   r   Úloadedr   ÚrÚregsÚkindsÚregÚnowr   r*   Úar7   r0   ÚsÚownerÚserversr   s   &&               @r   Úplugin_activation_summaryrO      sÈ  ø€ ð ×Ñ×!Ñ! *Ó-€FÜ�v˜z¨4Ó0€HÜ�8˜V TÓ*×8Ð8¨j€DØ×0Ñ0×4Ñ4°ZÀÔDÓcÑD�!ÌÐPQÐS[Ð]a×Hb�AˆAÑD€DÐcØ"$€EÛˆØ×Ñ˜Ÿ™ 2Ó&×-Ñ-¬c°#·'±'«lÖ;ñ à "€CØ‡y�y�×ÒÜ"(¨¨yÕ)9Ó":ˆÐÑÜ�—	‘	˜& "Ó%Ó&€EØÔ'×'Ô'Ü$*¨5Ô3KÕ+KÓ$LˆÐ Ñ!ØÔ'×'Ô'Ü˜eÔ&>Õ>Ó?ˆˆG‰Üô K¸7×;^Ñ;^×;dÑ;dÔ;fó Kó K€Ià¯	©	Ð2HÈ"Ô(MÓNÑ(M 1�F˜1˜#“,Ñ(MÑNÕN€IßØ$ˆKÑØ‡y�y�×ÒÜ  h¥Ó0ˆˆI‰Ø%'€HÜ”3�u—y‘y ¨Ó,Ó-´´G¸FÐDVÐX\Ó4]×4cÐ4cÐacÓ0dÕdÜœ Ð+;¸TÓB×HÐHÀbÓIõJó K€EçØ!�ÑØ‡y�yÐ(×)Ò)Ü# EÐ*AÕ$BÓCˆ�ÑÜ”S˜Ÿ™ >°2Ó6Ó7Ø!×>Ñ>×DÑDÔFô;_ÙF‰hˆaÈ%ÑJ]�ˆÑFò;_õ _ó `€GçØ")ˆ�ÑØ�D˜% ¨_¸cÀ:ÈxÐXÐXùò= dùò Oùó;_s   ÁLÁ9LÆ,LË
L#Ë.L#c               ó    € V ^8„  d   QhRRRR/# )r	   r
   r   r   zlist[dict[str, Any]]r   )r   s   "r   r   r   M   s   € ÷ ñ  #ð Ð*>ñ r   c                óæ   € . p\        V P                  P                  4       4       FG  w  r#\        VRR4      '       g   \        VRR4      '       d   K-  VP	                  \        W4      4       KI  	  V# )uh   One summary per loaded (non-deferred-platform, non-errored) plugin â€” the ``on_plugin_loaded`` payload.r7   FÚerrorN)Úlistr8   rC   r:   r>   rO   )r
   Úoutr5   rE   s   &   r   Úactivation_summariesrU   M   s`   € à
€CÜ˜G×,Ñ,×2Ñ2Ó4Ö5‰ˆÜ�6˜: u×-Ò-´¸ÀÈ$×1OÒ1OÙØ�
‰
Ô,¨WÓ:Ö;ñ 6ð €Jr   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   Ú	summarieszOptional[list[dict[str, Any]]]r   r   r   úOptional[dict[str, Any]]r   )r   s   "r   r   r   W   s#   € ÷ ñ Ð=ð ÀSð ÐMeñ r   c                óØ   € T ;'       g    R FY  p\        VP                  R4      ;'       g    R4      pWP                  R4      W3P                  R^4      R,          39   g   KW  Vu # 	  R# )zQThe summary for ``name`` (manifest name, canonical key, or bare leaf of the key).r5   Ú r   Ú/Nr   éÿÿÿÿ)r   r9   Úrsplit)rW   r   Úentryr5   s   &&  r   Úfind_activationr_   W   s]   € à—�˜b’ˆÜ�%—)‘)˜EÓ"×(Ð( bÓ)ˆØ—I‘I˜fÓ% s¯J©J°s¸AÓ,>¸rÕ,BÐCÖCØŠLñ !ñ r   Ú
in_processTc               ó$   € V ^8„  d   QhRRRRRR/# )r	   r   r   r`   Úboolr   r   r   )r   s   "r   r   r   `   s&   € ÷ fñ f˜cð f°$ð fÀ.ñ fr   c               ó†  € ^ RI Hp V'       d   \        V 4      MRpV'       g4   \        V \	        V! 4       4      4      ;'       g    / P                  R4      p\        4       p\        T;'       d    VP                  R4      4      pV'       d*   Vf&   \        T;'       g    / P                  R4      V 4      pRVRVRV'       * /# )ux  After an install/enable/update: load the plugin in THIS process (so ``on_plugin_loaded``
subscribers here â€” the TUI/Desktop server â€” see it), connect its MCP servers and hand them plus
its skills to the open chats of this profile (:func:`load_and_go_live`), and nudge the running
gateway to load it too over its control socket so live adapters re-wire their handlers. A caller
in another process (``hermes plugins install``) passes ``in_process=False``; the running Desktop /
dashboard backend is then asked to do the in-process half (:func:`notify_serve_backend`). Never raises.

Returns ``{"gateway_reloaded": bool, "activation": summary | None, "restart_required": bool}``.
``activation.live_now`` lists what is usable in open chats now; ``activation.deferred`` what waits
for the next session. ``restart_required`` is True only when no gateway answered (old gateway, not
running).©Úget_hermes_homeNÚ
activationÚreloadedÚactivationsÚgateway_reloadedÚrestart_required)	Úhermes_constantsre   Úload_and_go_liveÚnotify_serve_backendr   r9   Úreload_running_gatewayrb   r_   )r   r`   re   rf   Úanswerrg   s   &$    r   Úactivate_plugin_nowrp   `   s¢   € õ 1ßEOÔ+;¸DÔ+AÐUY€JßÜ*¨4´±oÓ6GÓ1HÓI×OÐOÈR×TÑTÐUaÓbˆ
Ü#Ó%€FÜ�F×5Ð5˜vŸz™z¨*Ó5Ó6€Hß�JÒ&Ü$ f§l l°×%7Ñ%7¸Ó%FÈÓMˆ
Ø ¨,¸
ÐDVÐ\dÔXdÐeÐer   c               ó   € V ^8„  d   QhRR/# )r	   r   rX   r   )r   s   "r   r   r   w   s   € ÷ ñ Ð 8ñ r   c                 ó&  €  ^ RI Hp  ^ RIHpHp \        V! 4       4      pV ! V4      pVf=   \        V! 4       4      pVP                  4       VP                  4       8w  d
   V ! WSR7      pV#   \         d    \        P                  RRR7        R# i ; i)a  Ask the gateway serving this profile (its own socket, else the multiplexer's for a served
secondary) to force plugin re-discovery, so an enable loads and a disable unloads in the running
gateway now. The ``reload-plugins`` answer, or None when no gateway answered.)Úreload_gateway_plugins©Úget_default_hermes_rootre   N)Úprofile_homez#gateway reload-plugins nudge failedT©Úexc_info)
Úgateway.control_socketrs   rk   ru   re   r   ÚresolveÚ	ExceptionÚloggerÚdebug)rs   ru   re   Úhomero   Úroots         r   rn   rn   w   s}   € ðÝAßMÜ‘OÓ%Ó&ˆÙ'¨Ó-ˆØŠ>ÜÑ/Ó1Ó2ˆDØ�|‰|‹~ §¡£Ô/Ù/°ÔH�ØˆøÜô Ü�‰Ð:ÀTˆÔJÚðús   ‚A'A* Á*"BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )r	   ro   rX   r   r   r   r   )r   s   "r   r   r   Š   s"   € ÷ (ñ (Ð 8ð (Àð (Èñ (r   c                ó–   € V '       d   V P                  R4      '       d   RV R2# V e    RV P                  R4      ;'       g    R R2# R# )	a  One honest sentence after disabling plugin ``name``, a change only the gateway's re-discovery
applies (an open session stops running its commands at once). Callbacks the plugin already
wired into platform adapters outlive a reload (the plugin guide), so a restart still ends those.rg   z6The running gateway reloaded its plugins and unloaded z[; platform hooks it already wired up stay until a gateway restart (hermes gateway restart).z3The running gateway refused to reload its plugins: rR   zno reason givenzo.
Only the saved config changed; restart the gateway serving this profile to apply it:
  hermes gateway restartzlNo running gateway answered. If one is running, restart it for this to take effect:
  hermes gateway restart©r9   )ro   r   s   &&r   Úgateway_reload_hintrƒ   Š   se   € ÷ �&—*‘*˜Z×(Ò(ØHÈÈð ORð Rð 	SàÒØEÀfÇjÁjÐQXÓFY×FnÐFnÐ]nÐEoð p+ð +ð 	,ñ'r   c               ó    € V ^8„  d   QhRRRR/# ©r	   r   r   r   rX   r   )r   s   "r   r   r   ™   s   € ÷ 
ñ 
˜3ð 
Ð#;ñ 
r   c                ór   € \         ;_uu_ 4        \        V 4      uuRRR4       #   + '       g   i     R# ; i)a€  Force-rediscover plugins in THIS process under the caller's profile scope, connect ``name``'s
MCP servers and hand them (and its skills) to this profile's open chats with a turn note. Returns
the activation summary with ``live_now: {mcp_servers, skills}``; ``deferred`` then keeps only what
waits for the next session (Python ``tools``, ``prompt``). None when the plugin did not load.N)Ú_GO_LIVE_LOCKÚ_go_live)r   s   &r   rl   rl   ™   s   € ÷ 
ŽÜ˜‹~÷ 
��‹ús   �%¥6	c               ó    € V ^8„  d   QhRRRR/# r…   r   )r   s   "r   r   r   ¦   s   € ÷ ñ �3ð Ð3ñ r   c                ó–  € ^ RI HpHpHp  ^ RIHpHp V! 4        V! 4       pVP                  ;_uu_ 4        VP                  RR7       \        \        V4      V 4      pVP                  4       pV'       d   V! VR,          4      M. p	RRR4       Xf   R# T! TX4      p
R	T
R
X	/TR&   TP                  R4      ;'       g    / P!                  4        UUu/ uF  w  r¼TR	8w  g   K  Y¼bK  	  uppTR&   ^ RIpTP$                  P                  R4      pT! T4      pTeB   T
'       g	   T'       d2   ^ RIHp  TP+                  \-        T! 4       4      TR,          T4       T# T#   + '       g   i     Lß; i  \         d    \        P                  RT RR7        R# i ; iu uppi   \         d    \        P/                  RT RR7        T# i ; i)é    )Úconnect_plugin_mcpÚlive_noticeÚplugin_skills)Ú_join_background_discoveryÚget_plugin_managerT)Úforcer5   Nz2in-process plugin reload after change to %r failedrw   r4   ÚskillsÚlive_nowr7   ztui_gateway.serverrd   z1open chats were not refreshed after activating %r)Ú"hermes_cli.plugins_activation_liverŒ   r�   rŽ   Úhermes_cli.pluginsr�   r�   Ú_discovery_lockÚdiscover_and_loadr_   rU   Úget_portable_mcp_serversr{   r|   r}   r9   rC   ÚsysÚmodulesrk   re   Úrefresh_plugin_sessionsr   Úwarning)r   rŒ   r�   rŽ   r�   r�   r
   rf   Úportabler’   rN   ÚkÚvr™   ÚserverÚnotere   s   &                r   rˆ   rˆ   ¦   s¦  € ßaÑaðßUÙ"Ô$Ù$Ó&ˆð ×$×$Ó$Ø×%Ñ%¨DÐ%Ô1Ü(Ô)=¸gÓ)FÈÓMˆJØ×7Ñ7Ó9ˆHß9C‘] :¨eÕ#4Ô5ÈˆF÷	 %ð ÒÙÙ  ¨XÓ6€GØ+¨W°hÀÐG€JˆzÑØ0:·±¸zÓ0J×0PÐ0PÈb×/WÑ/WÔ/YÔpÑ/Y¡t qÐ]^ÐboÑ]oœd˜ašdÑ/YÒp€JˆzÑÛØ�[‰[�_‰_Ð1Ó2€FÙ�zÓ"€DØÒŸw¯$Ý4ð	eØ×*Ñ*¬4±Ó0AÓ+BÀJÈuÕDUÐW[Ô\ð Ðˆ:Ð÷- %×$ûô
 ô Ü�‰ÐIÈ4ÐZ^ˆÔ_Úðüó qøô ô 	eÜ�N‰NÐNÐPTÐ_cˆNÕdØÐð	eúsM   Œ*E1 ¶AEÂE1 ÃFÃ#FÄ2(F! ÅE.	Å)E1 Å.E1 Å1#FÆFÆ!#GÇGc                 óÜ   € ^ RI Hp  V P                  V P                  3 FI  pV P	                  V4      pVf   K  VP
                  '       g   K.  V P                  V4      '       g   KG  Vu # 	  R# )zWThe host-owner record, else the Desktop child's (a Desktop-only box has no host owner).©Úhost_rendezvousN)Úgatewayr¤   Ú
ROLE_SERVEÚROLE_DESKTOP_SERVEÚread_recordÚportÚrecord_token_is_consistent)ÚhrÚroleÚrecords      r   Ú_serve_backend_recordr®   Ç   sU   € å-Ø—‘ × 5Ñ 5Ó6ˆØ—‘ Ó%ˆØÔ &§+§+¢+°"×2OÑ2OÐPV×2WÔ2WØŠMñ 7ñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r   r   r~   r   r   rX   r   )r   s   "r   r   r   Ñ   s"   € ÷ ñ ˜sð ¨$ð Ð3Kñ r   c                ó¢  €  ^ RI p^ RIp^ RIHp ^ RIHp \        4       pVf   R# VP                  VP                  4      pVP                  P                  RV! VP                  V4      4       RVP                   R2VP                  RV R\        V4      /4      P                  R	4      R
RRRV/R7      pVP                  P!                  V^<R7      ;_uu_ 4       p	VP#                  V	P%                  4       P'                  R	4      4      uuRRR4       #   + '       g   i     R# ; i  \(         d    \*        P-                  RT RR7        R# i ; i)zÃAsk the running dashboard / Desktop backend (``hermes serve``, found through its host record) to
run :func:`load_and_go_live` for ``name`` in ``home``. None when no backend answers. Never raises.Nr£   )Úformat_url_hostzhttp://Ú:z%/api/dashboard/agent-plugins/activater   r~   zutf-8ÚPOSTzContent-Typezapplication/jsonzX-Hermes-Session-Token)ÚdataÚmethodÚheaders)Útimeoutz&serve backend activation for %r failedTrw   )ÚjsonÚurllib.requestr¥   r¤   Úhermes_cli.url_utilsr±   r®   Ú
read_tokenr¬   ÚrequestÚRequestÚ	dial_hostr©   Údumpsr   ÚencodeÚurlopenÚloadsÚreadÚdecoder{   r|   r}   )
r   r~   r¸   Úurllibr«   r±   r­   Útokenr¼   Úresponses
   &&        r   rm   rm   Ñ   s  € ðÛÛÝ1Ý8Ü&Ó(ˆØŠ>ÙØ—‘˜fŸk™kÓ*ˆØ—.‘.×(Ñ(Ø‘o b§l¡l°6Ó&:Ó;Ð<¸A¸f¿k¹k¸]Ø3ð4à—‘˜V T¨6´3°t³9Ð=Ó>×EÑEÀgÓNÐW]Ø#Ð%7Ð9QÐSXÐYð	 )ó [ˆð
 �^‰^×#Ñ# G°RÐ#×8Ô8¸HØ—:‘:˜hŸm™m›o×4Ñ4°WÓ=Ó>÷ 9×8×8Ó8ûäô Ü�‰Ð=¸tÈdˆÔSÚðús5   ‚"D' ¦B4D' Ã.DÄ
D' ÄD$	ÄD' Ä$D' Ä'#EÅEc               ó   € V ^8„  d   QhRR/# )r	   r   rb   r   )r   s   "r   r   r   é   s   € ÷ 6ñ 6˜$ñ 6r   c                 ó:  a€ ^ RI Ho ^ RIHp  ^ RIHpHp \        V! 4       4      P                  4       \        V! 4       4      P                  4       0p\        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      ;'       g
    V ! 4       RJ# )z�A gateway runs for this profile (its own, or the multiplexer serving it from the root), or a
gateway service is installed for it.)Úget_running_pid)Ú_installed_service_kindrt   c              3  óF   <"  € T F  pS! VR ,          RR7      x € K  	  R# 5i)zgateway.pidF)Úcleanup_staleNr   )r    r~   rÊ   s   & €r   r#   Ú#_gateway_present.<locals>.<genexpr>ð   s"   øé € Ð]ÑW\Èt‘  }Õ 4ÀE×JÑJÓW\ùó   ƒ!TFN)
Úgateway.statusrÊ   Úhermes_cli.gatewayrË   rk   ru   re   r   rz   r%   )rË   ru   re   ÚhomesrÊ   s       @r   Ú_gateway_presentrÓ   é   su   ø€ õ /Ý:ßIÜ‘/Ó#Ó$×,Ñ,Ó.´Ñ5LÓ5NÓ0O×0WÑ0WÓ0YÐZ€Eß‹CÔ]ÑW\Ó]�C�CŠCÔ]ÑW\Ó]Ó]÷ 5ð 5Ù&Ó(°Ð4ð6r   c               ó    € V ^8„  d   QhRRRR/# )r	   r   r   r   ÚNoner   )r   s   "r   r   r   ô   s   € ÷ ,ñ , Sð ,¨Tñ ,r   c                óp   € \        \        VRR7      4      ;p'       d   V P                  RV R24       R# R# )zªAfter a CLI install/enable: load *name* where it can go live now (:func:`activate_plugin_now`)
and print :func:`activation_hint`, or nothing when there is nothing to say.F)r`   z[dim]z[/dim]N)Úactivation_hintrp   Úprint)Úconsoler   Úhints   && r   Úreport_activationrÛ   ô   s7   € ô Ô2°4ÀEÔJÓKÐK€tÖKØ�‰˜˜d˜V 6Ð*Ö+ñ Lr   c               ó    € V ^8„  d   QhRRRR/# )r	   Úresultr   r   r   r   )r   s   "r   r   r   û   s   € ÷ Yñ Y˜Nð Y¨sñ Yr   c           
     óô  a
€ V P                  R4      ;'       g    / pVP                  R4      ;'       g    / pVP                  R4      ;'       g    R Uu. uF  q3P                  R4      '       g   K  VNK  	  pp. pV'       g   VP                  R4      '       dM   \        R V 4       4      pTP                  RT R\        VP                  R4      ;'       g    R4       R	24       TP	                  R
 VP                  R4      ;'       g    R 4       4       V P                  R4      '       g?   V'       g   \        4       '       g   RP                  V4      # RP                  . VORN4      # VP                  R4      ;'       g    / VP                  R4      ;'       g    / r‡. p	V'       d1   V	P                  RRP                  \        V4      4      ,           4       V'       dC   RRRRRR/o
V	P                  RRP                  V
3R l\        V4       4       4      ,           4       V	'       g   RP                  . VORN4      # RP                  . VORRP                  V	4      ,           R,           N4      # u upi )ztOne honest sentence for CLI surfaces from an :func:`activate_plugin_now` result; empty when
there is nothing to say.rf   r“   r4   Ú	connectedr’   c              3  ój   "  € T F)  p\        VP                  R 4      ;'       g    R4      x € K+  	  R# 5i)r0   Nr   )Úlenr9   ©r    rL   s   & r   r#   Ú"activation_hint.<locals>.<genexpr>  s(   é € ÐA±y°!”C˜Ÿ™˜g›×,Ð,¨"×-Ð-³yùs   ‚!3¤3zLive in open chats now: z MCP tools, z skills.c              3  ó¢   "  € T FE  qP                  R 4      '       d   K  RVR,           RVP                  R4      ;'       g    R 2x € KG  	  R# 5i)rß   zMCP server r   z not connected: rR   zunknown errorNr‚   râ   s   & r   r#   rã     sG   é € ð SÙ7�Q¿u¹uÀ[×?Qô ^�;˜q �y˜kÐ)9¸!¿%¹%À».×:[Ð:[ÈOÐ9\Õ]Û7ùs   ‚AŸ"AÁAri   Ú
zKRestart the gateway for the plugin to take effect:
  hermes gateway restartr6   r7   z#active in the running gateway now: z, r0   ztools (next session)r2   zsystem prompt (next session)zMCP servers (next session)z
deferred: c              3  óF   <"  € T F  pSP                  W4      x € K  	  R # 5ir   r‚   )r    rž   Úlabelss   & €r   r#   rã     s   øé € Ð-YÑHXÀ1¨f¯j©j¸×.>Ð.>ÓHXùrÏ   zLGateway reloaded plugins; nothing of this plugin needs a session or restart.u   Gateway reloaded plugins â€” z; Ú.r   )r9   Úsumr>   rá   ÚextendrÓ   Újoinr?   )rÝ   ÚactÚliverL   rß   Úlinesr0   rJ   r7   Úpartsrç   s   &         @r   r×   r×   û   s  ø€ ð �*‰*�\Ó
"×
(Ð
( b€CØ�7‰7�:Ó×$Ð$ "€DØ ŸH™H ]Ó3×9Ð9°rÐ9ÓPÑ9�q¿U¹UÀ;×=O—�Ñ9€IÐPØ€Eß�D—H‘H˜X×&Ò&ÜÑA±yÓAÓAˆØ�‰Ð/°¨w°lÄ3ÀtÇxÁxÐPXÓGY×G_ÐG_Ð]_ÓC`ÐBaÐaiÐjÔkØ	‡L�Lñ SØŸ(™( =Ó1×7Ð7°RÐ7óSô Sà�:‰:Ð(×)Ò)÷ Ô(×*Ò*Ø—9‘9˜UÓ#Ð#Ø�y‰yÐq˜5ÐqÐ"pÐqÓrÐrØ—G‘G˜OÓ,×2Ð2°°C·G±G¸JÓ4G×4MÐ4MÈ2ˆØ€Eß
Ø�‰Ð:¸T¿Y¹YÄvÈcÃ{Ó=SÕSÔTßØ")Ð+AÀ8ÐMkØ"/Ð1Mð"Oˆà�‰�\ D§I¡IÔ-YÌÈxÔHXÓ-YÓ$YÕYÔZßØ�y‰yÐq˜5ÐqÐ"pÐqÓrÐrØ�9‰9ÐW�uÐWÐ=ÀÇ	Á	È%Ó@PÕPÐSVÕVÐWÓXÐXùò/ Qs   ÁI5Á2I5>   Úpre_commandÚpre_gateway_dispatchÚtransform_llm_outputÚtransform_tool_resultÚgateway_platform_eventÚtransform_terminal_output) Ú__doc__Ú
__future__r   ÚloggingÚ	threadingÚpathlibr   Útypingr   r   r   r   Ú	getLoggerÚ__name__r|   ÚLockr‡   Ú	frozensetrA   rO   rU   r_   rp   rn   rƒ   rl   rˆ   r®   rm   rÓ   rÛ   r×   r   r   r   Ú<module>r      sš   ðñ
õ #ã Û Ý ß ,Ó ,à	×	Ò	˜8Ó	$€à—’Ó €ñ %ò &ó Ð õ+Yõ\õðf¸÷ fõ.õ&(õ
õòBõõ06õ,÷Yr   