+
    „WÝjùJ  ã                  ó  € R t ^ RIHt ^ RIt^ RIt^ RIHt ]P                  ! ]4      t	Rt
]! 4       t]! 4       tRtRtRt ! R R	]4      tR
 tR tR tR tR tR tRR/R ltR tR tR tR tR tR tR t R t!R t"R t#RR/R lt$R  t%R# )!a%  Plugin slash commands of the classic CLI on the shared gateway (``slash.exec``).

On main a plugin's ``/command`` ran in this process. Rewired, the plugin's hooks, tools and MCP servers
live in the gateway, so its command runs there too (``gateway/session_commands.py``, the messaging
gateway's own plugin dispatch): ``ctx.call_mcp`` reaches the servers the gateway connected, and this
process never imports the plugin to run it. The names come from the gateway's ``commands.catalog``,
read once per session and gateway life (``/new``, resume and a redial read again) and again once when
a typed name misses, so a plugin the gateway enabled since still dispatches; a cached name a plugin
reload dropped since is re-read once when the gateway refuses it, then dispatched again (:data:`GONE`).
A catalog whose ``plugin_discovery_error`` is set lists no plugins because the gateway could not load
them, not because there are none: it is treated as a failed read and never cached. Off the gateway
(tests, the TUI slash worker's shadow CLI) main's dispatch applies.
)ÚannotationsN)ÚGatewayClientErrorzPlugin commandszF  /{}: the gateway no longer has this plugin command; nothing was run.gš™™™™™¹?za  /{}: stopped waiting. The command keeps running in the gateway and its reply will not be shown.c                  ó   € ] tR t^tRtRtR# )ÚCatalogUnavailablez[The gateway's command list could not be read (already printed): run nothing for this input.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚVC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\gateway_plugin_commands.pyr   r      s   † Ýer   r   c                ó8   € V\        VR R4      \        V RR4      3# )ÚepochNÚ
session_id©Úgetattr)ÚcliÚ
connections   &&r   Ú	_boundaryr   #   s"   € Ø”w˜z¨7°DÓ9¼7À3ÈÐVZÓ;[Ð[Ð[r   c           
     óV  € \        V RR4      p\        WV4      w  r4T;'       g    / pVP                  R4      '       d   \        RVR,           24      hVP                  R4      p\	        V\
        4      '       dQ   VP                  4        UUu/ uF3  w  rg\        V4      P                  R4      \        T;'       g    R4      bK5  	  pppMý/ pVP                  R4      ;'       g    .  FÜ  p	\	        V	\
        4      '       g   K  V	P                  R	4      \        8X  g   K7  V	P                  R
4      ;'       g    .  F†  p
\	        V
\        \        34      '       g   K!  \        V
4      ^8X  g   K3  \	        V
^ ,          \        4      '       g   KR  \        V
^,          ;'       g    R4      WŠ^ ,          P                  R4      &   Kˆ  	  KÞ  	  VP                  R
4      ;'       g    .  U
u/ uFv  p
\	        V
\        \        34      '       g   K!  \        V
4      ^8X  g   K3  \	        V
^ ,          \        4      '       g   KR  V
^ ,          \        V
^,          ;'       g    R4      bKx  	  pp
VP                  R4      ;'       g    /  Uu/ uFJ  p\	        V\        4      '       g   K  TR	VP                  R4      RVP                  V4      ;'       g    R/bKL  	  ppWV3p\        W4      V8X  d4   Wè3V n        Yí\        VP                  R4      ;'       g    R4      3V n        V# u uppi u up
i u upi )ab  Fetch the catalog's plugin commands and cache them for the session and gateway life that served
them (raises GatewayClientError, also when the gateway reports its plugin discovery failed). The
result is published only if neither moved during the call: a reply from epoch E that arrives after
a concurrent redial is never relabelled E+1 (``call_tagged``).r   NÚplugin_discovery_errorz!plugin command discovery failed: Úplugin_commandsÚ/Ú Ú
categoriesÚnameÚpairsÚskillsÚdescriptionÚSkillÚwarning)r   Ú_catalogÚgetr   Ú
isinstanceÚdictÚitemsÚstrÚlstripÚ	_CATEGORYÚlistÚtupleÚlenr   Ú_gateway_plugin_commandsÚ_gateway_skills)r   r   ÚsessionÚcatalogr   Úlistedr   ÚdescÚfoundÚcategoryÚrowÚdescriptionsÚkeyr   Úserveds   &&             r   Ú_readr:   '   s­  € ô
 �c˜<¨Ó.€GÜ˜c¨wÓ7�N€GØ�mˆm˜€GØ‡{�{Ð+×,Ò,Ü Ð#DÀWÐMeÕEfÐDgÐ!hÓiÐiØ�[‰[Ð*Ó+€FÜ�&œ$×ÒØJPÏ,É,Ì.ÔYÉ.¹J¸D”�T“×!Ñ! #Ó&¬¨D¯J¨J°B«Ò7É.ˆÑYˆàˆØŸ™ LÓ1×7Ð7°RÒ7ˆHÜ˜(¤D×)Ô)¨h¯l©l¸6Ó.BÄiÖ.OØ#Ÿ<™<¨Ó0×6Ð6°BÒ6�CÜ! #¬¬e }×5Ô5¼#¸c»(Àa¾-ÌJÐWZÐ[\ÕW]Ô_b×LcÔLcÜ47¸¸A½¿¸À"Ó4E˜ !�fŸm™m¨CÓ0Ó1ó 7ñ 8ð :A¿¹ÀWÓ9M×9SÐ9SÐQSÐ9Só eÑ9S°#Ü! #¬¬e }×5ô .Ü:=¸c»(Àa¹-ô .ÜLVÐWZÐ[\ÕW]Ô_b×Lcô .�C˜•FœC  A¥§ ¨"Ó-Ò-Ñ9S€Lð eð !Ÿ™ XÓ.×4Ð4°"Ð4óNÙ4�#¼
À3Ì×8Lô ^ˆc�F˜CŸJ™J s›O¨]¸L×<LÑ<LÈSÓ<Q×<\Ð<\ÐU\Ð]Ò]Ù4ð ð Nà Ð)€FÜ�Ó! VÔ+Ø(. ˆÔ$Ø%¬s°7·;±;¸yÓ3I×3OÐ3OÈRÓ/PÐQˆÔØ€Lùó% ZùòeùòNs6   Â9LÇ%L!ÈL!ÈL!È9L!ÉL!Ê L&Ê*L&ËL&c                óØ   € ^ RI Hp V'       d(   \        V RR4      '       d    VP                  RVR7      # VP                  R4      #   T d   p\	        T4      R8w  d   h  Rp?L.Rp?ii ; i)a  ``(commands.catalog, epoch)`` for the open gateway session, so its skills come from the session's
folder (its trusted project skills), not the gateway's. A gateway older than this CLI refuses the
``session_id`` (``invalid_params``): it is asked again without it, as before.©ÚGatewayRPCErrorÚ_gateway_session_openFzcommands.catalog)r   Úinvalid_paramsN)Úhermes_cli.gateway_clientr=   r   Úcall_taggedr(   )r   r   r0   r=   Úexcs   &&&  r   r#   r#   H   sp   € õ :ß”7˜3Ð 7¸×?Ò?ð	Ø×)Ñ)Ð*<ÈÐ)ÓQÐQð ×!Ñ!Ð"4Ó5Ð5øð ô 	Ü�3‹xÐ+Ô+Øô ,ûð	ús   £A ÁA)ÁA$Á$A)c                ó"   € R;V n         V n        R# )z’Drop ``cli``'s copy of the gateway's catalog after a skill rescan (``/reload-skills``, ``/skills
install``): the next read asks the gateway again.N)r.   r/   )r   s   &r   Ú
invalidaterD   V   s   € ð :>Ð=€CÔ  3Ö#6r   c                ó   € \        V RR4      # )zwA closed connection keeps its epoch until the next call redials, maybe to another life: no
cache it labelled is served.ÚclosedFr   )r   s   &r   Ú_hung_uprG   \   s   € ô �:˜x¨Ó/Ð/r   c                ó‚   € \        V4      '       d   R # \        V RR 4      ;'       g    Rw  r#V\        W4      8X  d   V# R # )Nr.   )NN)rG   r   r   )r   r   Úboundaryr4   s   &&  r   Ú_cachedrJ   b   s@   € Ü�
×ÒÙÜ˜cÐ#=¸tÓD×TÐTÈ�O€HØ¤	¨#Ó :Ô:ˆ5ÐDÀÐDr   ÚnotesFc               ó~  € ^ RI Hp V! V 4      pVf   R# \        V RR4      ;'       g    Rw  rEp\        V4      '       g   V\	        W4      8w  d*    \        W4       \        T RR4      ;'       g    R/ R3w  r…pV'       d   V# T#   \         d-   p\        P                  RT4       T'       d   RM/ u Rp?# Rp?ii ; i)a  ``{"/key": {name, description}}`` of the session's skill commands from the gateway's catalog
(``notes``: its one-line notice instead, e.g. skills a built-in command shadows), or None off the
gateway. A failed read is printed once per input and lists none; nothing is scanned here.©Úconnection_forNr/   r   z commands.catalog unavailable: %s)NNr   )	Úhermes_cli.gateway_siderN   r   rG   r   r:   r   ÚloggerÚdebug)	r   rK   rN   r   rI   r4   r"   rB   Ú_seens	   &$       r   r   r   i   s¹   € õ 7Ù Ó$€JØÒÙÜ& sÐ,=¸tÓD×XÐXÐHXÑ€H�WÜ�
×Ò˜x¬9°SÓ+EÔEð	'Ü�#Ô"ô !(¨Ð->ÀÓ E× WÐ WÈ$ÐPRÐTVÈÑˆ�gßˆ7Ð& Ð&øô	 "ô 	'Ü�L‰LÐ;¸SÔAß‘2 BÕ&ûð	'ús   ÁB ÂB<Â!B7Â1B<Â7B<c                ó    a€ \        V RR7      pVe   V'       d   V.# . # ^ RIHo ^ RIHp \        \        RV3R lV! 4        4       4      4      # )z~``/help skills`` notes (skills a built-in command shadows): the gateway's notice on its session,
else this process's own scan.T)rK   N)Úskill_command_collision_note)Úfind_all_skillsc              3  óB   <"  € T F  pS! VR ,          4      x € K  	  R# 5i)r   Nr   )Ú.0ÚsrT   s   & €r   Ú	<genexpr>Úskill_notes.<locals>.<genexpr>„   s    øé € ÐaÑO`È!Ñ:¸1¸V½9×EÐEÓO`ùs   ƒ)r   Úagent.skill_commandsrT   Útools.skills_toolrU   r+   Úfilter)r   ÚnoticerU   rT   s   &  @r   Úskill_notesr_   |   sG   ø€ ô �C˜tÔ$€FØÒß!�ˆxÐ) rÐ)ÝAÝ1Ü”�tÔaÉÔO`ÓaÓbÓcÐcr   c           	     óÊ  € ^ RI Hp V! V 4      pVf   R# ^ RIHp ^ RIHp VP                  R4      V'       d
   RV,           MR,           p VP                  R	V P                  VR
7      ;'       g    / pTP                  R4      R8X  dS   TP                  R4      '       d<   T P                  TR,          T! RTP                  R4      ;'       g    TR7      R4       TP                  R4      '       g   TP                  R4      '       d4   T! RTP                  R4      ;'       g    TP                  R4       24       R#   \         d   p	T! RT RT	 24        Rp	?	R# Rp	?	ii ; i)zû``/skill ...`` on the gateway session: the gateway resolves and loads the skill (its plugin
skills and stacked skills too) and returns the message, which is queued as main queued it; True
when answered there (False off the gateway: main's local load).rM   NF)Út©Ú_cprintr   Ú r   ú
slash.exec©r   Úcommandz  ú: TÚtypeÚskillÚmessagezcli.skills.loading_skillr   )r   r^   Úoutput)rO   rN   Ú
agent.i18nra   r   rc   r)   Úcallr   r   r$   Ú_queue_loaded_skills)
r   Úbase_cmdÚrestrN   r   ra   rc   rg   ÚreplyrB   s
   &&&       r   Ú	run_skillrs   ‡   s-  € õ 7Ù Ó$€JØÒÙÝÝØ�o‰o˜cÓ"·D c¨D¦j¸bÕA€GðØ—‘ ¸¿¹ÐQX�ÓY×_Ð_Ð]_ˆð ‡y�y�Ó˜GÔ#¨¯	©	°)×(<Ò(<Ø× Ñ   yÕ!1±1Ð5OÐV[×V_ÑV_Ð`fÓVg×VrÐVrÐkrÔ3sÐuyÔzØ‡y�y�×Ò˜eŸi™i¨×1Ò1Ù�"�U—Y‘Y˜xÓ(×?Ð?¨E¯I©I°hÓ,?Ð@ÐAÔBÙøô ô Ù�"�X�J˜b  Ð&Ô'Ýûðús   Á$D> Á0D> Ä>E"Å	EÅE"c           
     óÞ  € ^ RI Hp V! V 4      pVf   R# V\        VRR4      3p\        V RR4      pV'       d)   V^ ,          V8X  d   \        V4      '       g
   V^,          #  VP	                  R4      ;'       g    / pTP                  R4      ;'       g    .  Uu. uF²  p\        T\        4      '       g   K  \        TP                  R4      \        4      '       g   KB  \        TP                  R4      4      \        TP                  R	4      ;'       g    TP                  R4      4      \        TP                  R
4      ;'       g    R4      3NK´  	  ppY…P                  R4      ;'       g    .  U	u0 uF&  p	\        T	\        4      '       g   K  \        T	4      kK(  	  up	3p
Y:3T n        T
#   \
         d-   p\        P                  RT4       . \        4       3u Rp?# Rp?ii ; iu upi u up	i )a  ``([(key, label, description)], {portable MCP server})`` the gateway's plugins provide for this
profile (``plugins.list``), or None off the gateway (this process's own registry applies). An older
gateway or a failed read gives none, never a local scan. Read once per gateway life.rM   Nr   Ú_gateway_plugin_toolsetsúplugins.listzplugins.list unavailable: %sÚtoolsetsr8   Úlabelr    r   Úportable_mcp_servers)rO   rN   r   rG   rn   r   rP   rQ   Úsetr$   r%   r&   r(   ru   )r   rN   r   rI   Úcachedrr   rB   ÚrÚrowsÚnr4   s   &          r   rw   rw   ž   s§  € õ 7Ù Ó$€JØÒÙØœG J°¸Ó>Ð?€HÜ�SÐ4°dÓ;€Fß�&˜•)˜xÔ'´¸×0DÒ0DØ�a�yÐðØ—‘ Ó/×5Ð5°2ˆð
 —Y‘Y˜zÓ*×0Ð0¨bÐ0ókÙ0�´J¸qÄ$×4Gô fÜLVÐWX×W\ÑW\Ð]bÓWcÔeh×Liô fŒS�—‘�u“Ó¤ A§E¡E¨'£N×$BÐ$B°a·e±e¸E³lÓ CÄSÈÏÉÈ}ÓI]×IcÐIcÐacÓEdÓeÙ0ð 	ð kà§I¡IÐ.DÓ$E×$KÐ$KÈÐ$KÓbÑ$K˜qÌzÐZ[Ô]`×Oa”F”C˜–FÑ$KÑbÐc€EØ$,Ð#4€CÔ Ø€Løô ô Ü�‰Ð3°SÔ9Ø”3“5ˆyÕûðüòkùâbsN   Á"F+ Á:F+ ÂG%Â7"G%Ã5G%Ä1G%ÅG%Å1G*ÆG*Æ+G"Æ6!GÇG"ÇG"c                óŽ   € ^ RI Hp V! V 4      pVf   R# \        W4      pVf    \        W4      pV# V#   \         d    / u # i ; i)z§``{name: description}`` of the gateway's plugin commands for completion, or None off the
gateway. A failed read degrades quietly to none; dispatch uses :func:`lookup`.rM   N)rO   rN   rJ   r:   r   )r   rN   r   r4   s   &   r   Únamesr€   ¶   sY   € õ 7Ù Ó$€JØÒÙÜ�CÓ$€EØ‚}ð	Ü˜#Ó*ˆEð €Lˆ5€Løô "ô 	ØŠIð	ús   ¥4 ´AÁAc                óÞ   € ^ RI Hp V! V 4      pVf   R# \        W4      pVe	   W9   d   R#  V\        W4      9   #   \         d'   p^ RIHp T! RT RT R24       \        T4      ThRp?ii ; i)a  Whether ``/name`` is one of the gateway's plugin commands; None off the gateway. A name the
cached list lacks re-reads it once. A failed read is not evidence the name is no plugin: it is
printed and :class:`CatalogUnavailable` raised, so no skill, bundle or expansion stands in.rM   NTrb   ú  /z-: the gateway's command list is unavailable (z); nothing was run.)rO   rN   rJ   r:   r   r   rc   r   )r   r   rN   r   r4   rB   rc   s   &&     r   Úlookuprƒ   Æ   s   € õ 7Ù Ó$€JØÒÙÜ�CÓ$€EØÒ˜Tœ]Ùð0Ø”u˜SÓ-Ñ-Ð-øÜô 0ÝÙ�#�d�VÐHÈÈÐM`ÐaÔbÜ  Ó&¨CÐ/ûð0ús   ­; »A,Á!A'Á'A,c                óP  € ^ RI Hp ^ RIHp \        P
                  ! 4       ;q`n        ^ RIHp . pV! \        WWh3RR7      P                  4         VP                  RW`P                  VR7      RV n        V'       d   V P                  R	4       # #   T\        3 dd   p	T! \        P!                  T4      4       \#        T	\        4      '       d   h \$        u Rp	?	RT n        T'       d   T P                  R	4       # # Rp	?	ii ; i  RT n        T'       d   T P                  R	4       i i ; i)
a)  ``slash.exec`` of *command* with no answer deadline, on a socket of its own so the session's prompts
and interrupts never queue behind it (GatewayConnection.call_until). Ctrl+C stops waiting: the stopped
line is printed and :data:`STOPPED` returned (a KeyboardInterrupt still propagates after it).rb   )ÚCallStopped)Úspawn_context_threadzhermes-command-choices)Úargsr   re   rf   NÚclarify)r   rc   Úhermes_cli.gateway_connectionr…   Ú	threadingÚEventÚ_gateway_command_waitÚagent.memory_providerr†   Ú_answer_choicesÚstartÚ
call_untilr   Ú_withdraw_gateway_modalÚKeyboardInterruptÚ_STOPPED_LINEÚformatr%   ÚSTOPPED)
r   r   r   rg   rc   r…   Úwaker†   Ú	answeringrB   s
   &&&&      r   Úcall_unboundedr˜   Ù   sþ   € õ Ý9Ü'0§¢Ó'8Ð8€DÔ$Ý:Ø€IÙœ°ÀÐ/QÐXpÔq×wÑwÔyð
3Ø×$Ñ$ \°4ÇNÁNÐ\cÐ$Ódð %)ˆÔ!ßØ×'Ñ'¨	Õ2ð øð Ô*Ð+ô Ù”×$Ñ$ TÓ*Ô+Ü�cÔ,×-Ò-ØÜŒà$(ˆÔ!ßØ×'Ñ'¨	Õ2ð ûðûð %)ˆÔ!ßØ×'Ñ'¨	Õ2ð ús0   ÁB ÂC?Â7C:ÃC?ÃD Ã:C?Ã?D Ä#D%c           	     ó  a a€ ^ RI Hp VP                  VP                  S P                  4      reVV 3R lpVP
                  P                  V4        VP                  \        4      '       Eg.   VP                  ;_uu_ 4        VP                   Uu. uFy  p\        V\        4      '       g   K  VP                  R4      R8X  g   K3  RV9   g   K<  VP                  R4      ;'       g    / P                  R4      S P                  8X  g   Kw  VNK{  	  p	pV	 F  pVP                  P                  V4       K   	  RRR4       X	 FT  pVR,          .SR	&    V! S P                  VR,          4      p
SP!                  4        VP#                  VR,          V
4       KV  	  EKI   VP
                  P                  V4       R# u upi   + '       g   i     L�; i  SP!                  4        i ; i  TP
                  P                  T4       i ; i)
aM  While the command runs, answer the ``clarify`` server requests its handler sends to this session
(``ctx.ask_choice``, ``gateway/plugin_command_choice.py``) with the CLI's clarify panel. No turn
pump reads the session's frames between turns, so they are taken here; every other frame stays
queued, in order, for the turn that owns it.)Úclarify_replyc                ó|   <€ S'       d3   V P                  R 4      S^ ,          8X  d   SP                  R4       R# R# R# )Úidrˆ   N)r$   r‘   )Úpayloadr—   r   s   &€€r   Ú	withdrawnÚ"_answer_choices.<locals>.withdrawnø   s1   ø€ ÷ ˜Ÿ™ TÓ*¨i¸­lÔ:Ø×'Ñ'¨	Ö2ñ ;‰9r   Úmethodrˆ   rœ   Úparamsr   N:NNN)Úhermes_cli.gateway_agentrš   ÚeventsÚstater   Úrequest_listenersÚappendÚwaitÚ_CHOICE_POLL_SÚmutexÚqueuer%   r&   r$   ÚremoveÚ_clarify_callbackÚclearrr   )r   r   r–   r—   rš   r£   r¤   rž   ÚframeÚasksrr   s   f&&f       r   rŽ   rŽ   ð   sš  ù€ õ
 7Ø×%Ñ% z×'7Ñ'7¸¿¹Ó'GˆEö3ð 
×Ñ×"Ñ" 9Ô-ð2Ø—)‘)œN×+Ó+Ø——“Ø+1¯<ª<ó o©< %¼:ÀeÌT×;RœÐW\×W`ÑW`ÐaiÓWjÐnwÑWwœØ  E™Mô Ø/4¯y©y¸Ó/B×/HÐ/HÀb×.MÑ.MÈlÓ.[Ð_b×_mÑ_mÑ.m÷ ˜©<�ð oã!�EØ—L‘L×'Ñ'¨Ö.ñ "÷ ó
 �Ø % d¥˜}�	˜!‘ð&Ù)¨#×*?Ñ*?ÀÀxÅÓQ�Eà—O‘OÔ%Ø× Ñ   t¥¨eÖ4ô ð ,ð 	×Ñ×&Ñ& yÖ1ùòo÷ —ûð —O‘OÕ%ûð 	×Ñ×&Ñ& yÕ1úsr   ÁG& Á.G& ÂF>ÂF9Â.F9ÃF9ÃF9Ã'F9Ä
F9Ä&F>Ä6G& ÅGÅ+0G& Æ9F>Æ>G	Ç	G& ÇG#Ç#G& Ç&Hc                ó|  € ^ RI Hp V! V 4      pVf   R# ^ RIHp ^ RIHp  \        YYV'       d
   RV,           MR,           4      pT\        J d   R# T;'       g    / pTP                  RR4      R8w  d6   \        YT4      '       d   \        # T! \        P                  T4      4       R# \        TP                  R4      ;'       g    R4      p	T	'       d	   T! T	4       R#   T d3   p\        T4      R8w  d   T! R	T R
T 24        Rp?R# RR/p Rp?LÎRp?i\         d   pT! R	T R
T 24        Rp?R# Rp?ii ; i)as  True when the gateway answered ``/name arg`` (the local handler must not run); :data:`GONE`
when it no longer has that plugin command and a fresh catalog read agrees (a plugin reload, e.g.
``hermes plugins disable``, dropped it in this session and gateway life, which no cache boundary
sees): nothing ran, and the caller dispatches the name again (bundle, skill, prefix).rM   NFrb   r<   rd   r   Úunsupported_commandr‚   rh   Tri   ÚunsupportedÚexecrl   )rO   rN   r   rc   r@   r=   r˜   r(   r   r•   r$   Ú_droppedÚGONEÚ
_GONE_LINEr”   )
r   r   ÚargrN   r   rc   r=   rr   rB   rl   s
   &&&       r   Úrunr¸     s  € õ
 7Ù Ó$€JØÒÙÝÝ9ð	Ü˜s°Ï3¸cÀC¾iÐTVÕ6WÓXˆð ”ÓÙØ�KˆK�R€EØ‡y�y�˜Ó  FÔ*Ü�C T×*Ò*ÜˆKÙ”
×!Ñ! $Ó'Ô(ÙÜ�—‘˜8Ó$×*Ð*¨Ó+€FßÙ�ŒÙøð' ô (Üˆs‹8Ð,Ô,Ù�c˜$˜˜r # Ð'Ô(ÝØ˜Ð'�ûÜô Ù�#�d�V˜2˜c˜UÐ#Ô$Ýûðús/   ¢$C  Ã D;Ã'DÄDÄD;Ä!D;Ä"D6Ä6D;c                óR   € RV n          V\        W4      9  #   \         d     R# i ; i)z†Whether the gateway's catalog, read again with the cached copy dropped, no longer lists
``name`` (a failed read: not known, so False).NF)r.   r:   r   )r   r   r   s   &&&r   r´   r´   5  s3   € ð $(€CÔ ðØœ5 Ó1Ñ1Ð1øÜô Úðús   ‰ —&¥&c                óæ   a € ^ RI Hp \        ;QJ d"    V 3R lV.VO 4       F  '       g   K   RM	  RM! V 3R lV.VO 4       4      '       d   R# ^ RIHp V! \
        P                  S 4      4       R# )z¾Print that ``/name`` is no longer a plugin command, unless one of the built-in commands or a
``known`` skill or bundle name starts with it (then prefix expansion decides); True when printed.)ÚCOMMANDSc              3  ób   <"  € T F$  q F  q"P                  R S,           4      x € K  	  K&  	  R# 5i)r   N)Ú
startswith)rW   Úgroupr8   r   s   &  €r   rY   Úreport_gone.<locals>.<genexpr>C  s,   øé € Ð
WÑ3E¨%ÒQVÈ#�>‰>˜# �*×%Ð%ÑQVÑ%Ó3Eùs   ƒ,/TFrb   )Úhermes_cli.commandsr»   Úanyr   rc   r¶   r”   )r   Úknownr»   rc   s   f*  r   Úreport_gonerÃ   ?  sU   ø€ õ -ß
ƒsÔ
W°HÐ3E¸uÑ3EÓ
W‡s‡s‚sÔ
W°HÐ3E¸uÑ3EÓ
W×WÒWÙÝÙŒJ×Ñ˜dÓ#Ô$Ùr   ÚrunsTc               ó(  € ^ RI Hp V! V 4      pVf   R# V'       g   R# \        VRR4      p\        V RR4      WV38X  d   R# ^ RIHp  VP                  RV P                  WR	7       R#   T dy   pTP                  R8w  d-   \        T4      R
8w  d   \        P                  RY4        Rp?R# YV3T n        \        T RR4      '       g   RT n        ^ RIHp	 T	! R4        Rp?R# Rp?i\         d"   p\        P                  RY4        Rp?R# Rp?ii ; i)a  Tell the gateway about a recognized command this process runs itself (``command.observe``), so
``pre_command`` fires there, in the session's profile, and never here; False off the gateway (main's
in-process hook applies). A command that ``runs`` nothing here (a refusal) is not reported. The
gateway replies before any plugin runs. One older than this CLI (no such method) gets one printed
line, and is not asked again on that connection life: local commands then reach no ``pre_command``
observer, and this process still fires none itself.rM   NFTr   Ú_observe_unsupportedr<   zcommand.observe)r   r   r·   Úunknown_methodzcommand.observe /%s refused: %sÚ_observe_notice_shownrb   zx  This gateway predates this CLI: plugin pre_command hooks don't see the commands the CLI runs itself until it restarts.z%command.observe /%s not delivered: %sé§€ÿÿ)rO   rN   r   r@   r=   rn   r   Úcoder(   rP   rQ   rÆ   rÈ   r   rc   r   )
r   r   r·   rÄ   rN   r   r   r=   rB   rc   s
   &&&$      r   ÚobserverË   J  s  € õ 7Ù Ó$€JØÒÙßÙÜ�J ¨Ó.€EÜˆsÐ*¨DÓ1°jÐ5HÔHÙÝ9ðIØ�‰Ð)°c·n±nÈ4ˆÔYñ øð ô 	6Ø�8‰8�vÔ¤# c£(Ð.>Ô">Ü�L‰LÐ:¸DÔFÝØ$.Ð#6ˆÔ Ü�sÐ3°U×;Ò;Ø(,ˆCÔ%Ý#Ùð 5ô 6ûñ ûô ô IÜ�‰Ð<¸d×HÐHÙûðIús0   ÁA( Á(DÁ/7C"Â,0C"Ã"DÃ/DÃ0DÄDc                óL  € ^ RI Hp V! V 4      pVf   R# ^ RIHp ^ RIHp  VP                  R4      ;'       g    / P                  R4      ;'       g    . pT Uu/ uFL  p\        T\        4      '       g   K  \        TP                  R4      \        4      '       g   KB  TR,          TbKN  	  up#   T dH   pTP                  R8H  ;'       g    \        T4      R8H  pT! T'       d   RMR	T R
24       / u Rp?# Rp?i\         d   pT! R	T R
24       / u Rp?# Rp?ii ; iu upi )ad  ``{name: row}`` of the plugins the gateway loaded (tool/hook/command counts, load error) for
``/plugins``, or None off the gateway. A gateway without ``plugins.list`` on this socket (older
than this CLI) or one that can't answer gets one printed line and ``{}``: the listing then shows
no load details, and this process never loads plugins to fill them in.rM   Nrb   r<   rv   ÚpluginsrÇ   ze  This gateway doesn't report its loaded plugins (it predates this CLI); restart it for load details.z,  The gateway's plugin list is unavailable (z).r   rÉ   )rO   rN   r   rc   r@   r=   rn   r$   rÊ   r(   r   r%   r&   )	r   rN   r   rc   r=   r}   rB   Úolderr6   s	   &        r   ÚloadedrÏ   l  s  € õ
 7Ù Ó$€JØÒÙÝÝ9ð	Ø—‘ Ó/×5Ð5°2×:Ñ:¸9ÓE×KÐKÈˆñ )-Ók© ´
¸3Ä×0EÔÌ*ÐUX×U\ÑU\Ð]cÓUdÔfi×JjÔˆC��K˜Ò©ÑkÐkøð ô Ø—‘˜FÑ"×BÐB¤c¨#£hÐ2BÑ&BˆÙßñ xØ LÈSÈEÐQSÐTô	Và�	ûÜô ÙÐ>¸s¸eÀ2ÐFÔGØ�	ûðüò lsX   ¢B/ ºB/ ÁB/ ÁD!Á7"D!ÂD!Â/DÂ6.C8Ã%C8Ã2DÃ8DÄDÄDÄDÄD)&r   Ú
__future__r   ÚloggingrŠ   r@   r   Ú	getLoggerr   rP   r*   Úobjectrµ   r•   r¶   r¨   r“   Ú	Exceptionr   r   r:   r#   rD   rG   rJ   r   r_   rs   rw   r€   rƒ   r˜   rŽ   r¸   r´   rÃ   rË   rÏ   r   r   r   Ú<module>rÕ      sÍ   ðñõ #ã Û å 8à	×	Ò	˜8Ó	$€à€	Ùƒx€Ù
‹(€ØU€
Ø€Øs€ôf˜ô fò\òòB6ò>ò0òEð'˜ô 'ò&dòò.ò0ò 0ò&3ò.2òB!òHòð Dô ôDlr   