+
    lHàjÓŽ ã                   óN  a € ER7 tp0 t R t^ RIt^ RIt^ RIHt ^RIHtHt ]! 4       t	]	P                  t
]	P                  tRER8RRRRR	RR
R/R R lltER9R
R/R R llltER9R
R/R R llltER:R R lltR R ltR R ltR tR tR]33tR]3R]33t]3R R lltR tR tR  R! ltR" 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"R0RR1R/R2 R3 llt#R4 R5 lt$R6 R7 lt%R8 R9 lt&]
! R:4      R; R< l4       t'R=R>R? 3R@RARB 3RCRDRE 3RFRGRH 3RIRDRJ 3RKRLRM 3/t(](PS                  4        F  w  t*w  t+t,]! ]*]+4      ! ]*3RN l4       K  	  A*A+A,]! ROR>RRP7      ! RQ 4       ]! RRRR>RS7      RT RU l4       t'RV RW lt-ER;RXRRYR/RZ R[ lllt.R\ R] lt/]! R^RA4      R_ R` l4       t']! RaRb4      Rc Rd l4       t']
! Re4      Rf Rg l4       t']! RhRi4      Rj Rk l4       t'Rl t0Rm Rn lt1ER<Ro Rp llt2]Pf                  ER=Rq Rr ll4       t4Rs Rt lt5Rut6Rv t7Rw Rx lt8Ry Rz lt9R{ t:R| R} lt;R~ t<R t=R€ t>ER9R� R‚ llt?]?! RƒR„4      t@]?! R…R†4      tAR‡ tBRˆ tCR‰ tDRŠ tER‹ tFRŒ tGR� tHRŽ tIR� R� ltJR‘ tKR’ tLR“tMR”tNR• tOR– R— ltPR˜ R™ ltQRš tRR› tS/ Rœ]>bR�]>bRž]@bRŸ]AbR ]BbR¡]CbR¢]DbR£]EbR¤]FbR¥]GbR¦]HbR§]IbR¨]KbR©]KbRª]LbR«]LbR¬]RbR­]S/CtT]
! R®4      R¯ R° l4       t']
! R±4      R² R³ l4       t']! R´Rµ4      R¶ R· l4       t']! R¸RRbRS7      R¹ Rº l4       t']! R»RR¼RS7      R½ R¾ l4       t']! R¿RRÀRS7      RÁ RÂ l4       t'RÃ RÄ ltU]
! RÅ4      ]RÆ RÇ l4       4       t']! RÈRÉ4      RÊ RË l4       t']! RÌRÍ4      RÎ RÏ l4       t']! RÐRÑ4      RÒ RÓ l4       t'RÔ RÕ ltV]! RÖR×4      RØ RÙ l4       t']! RÚRÛRÜ4      RÝ RÞ l4       t'Rß Rà ltWER> F%  w  t*tXtY]! Rá]* 2RÛRá]* Râ24      ! ]W! ]X]Y4      4       K'  	  A*AXAYRã tZRä t[Rå t\RæRç Rè]ZRé][Rê]\RëRì /t]Rí Rî lt^]! Rï4      Rð Rñ l4       t']! RòRó4      Rô Rõ l4       t']! Rö4      R÷ Rø l4       t']! RæER8Rù7      Rú Rû l4       t']! RüER8Rù7      Rý Rþ l4       t']! Rÿ4      ER  ER l4       t']! ER. ]OER]3N54      ER ER l4       t']! ER4      ER ER l4       t']! ER	4      ER
 ER l4       t']! ER4      ER ER l4       t']! ER]4      ER ER l4       t']! ER]4      ER ER l4       t']! ER]4      ER ER l4       t'ER ER lt_/ t`] ^ k ]a! 4       tb] ^k ER ER ltcER ER ltdER teER tfER  tgER! thER" tiER# tjER$ ER% ltkER& tlER' tmRæ]eER(]lER)]mER*]fRé]gER+]hER	]iER,]j/tn]! ER-ER.RER/7      ER0 ER1 l4       t']
! ER24      ER3 ER4 l4       t'ER5 ER6 ltoR# (?  af  Tools & system / slash / insights / rollback / plugins / cron / skills / MCP JSON-RPC handlers.

Rebound onto server.py's globals at install time (``method_ctx.bind_module``), so
bodies reference server globals bare (``_ok``, ``_err``, ``_sessions``, ...).
Helper names must not collide with server.py's own (``_cmd_`` / ``_toolset_`` / ``_mcp_`` prefixes).
N)ÚPath)ÚHandlerRegistryÚbind_moduleÚrequiredÚcatch_resolveTÚprefixÚ ÚscopedÚlive_sessionFc          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )é   Ú	fail_coder   r   r	   r
   )ÚintÚboolÚstr)Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_tools.pyÚ__annotate__r      s4   € ÷ 7ñ 7Üð7Ü37ð7ÜHKð7äð7ä'+ñ7ó    c               ó(   a aaaaa€ VV VVVV3R lpV# )uW  Wrap a handler body with the optional ``profile`` runtime scope. Order: ``required``
params (4063 ``<key> required``) â†’ ``live_session`` resolution via ``_sess`` (waits for the
agent build; body gets ``session`` as 3rd arg) â†’ profile (4064 when its dir is missing) â†’ body;
body exceptions become ``fail_code`` (``prefix`` + message). ``catch_resolve`` also maps
resolve-time exceptions to ``fail_code``; mcp.servers.* let them propagate to dispatch().
``scoped=False`` ignores ``profile``.

The scope is the same home + secret + terminal composition a turn binds
(``_session_profile_runtime_scope``), not HERMES_HOME alone: these bodies read config.yaml,
whose ``${VAR}`` refs (``config._env_ref_lookup``) and the MCP probe's own header/env
interpolation resolve through ``get_secret`` â€” with only the home bound they read plain
``os.environ``, i.e. the launch profile's values, so ``mcp.servers.test`` for a secondary
reported green against the default profile's token (or the literal placeholder). External
sources are hydrated first (the requested profile may never have been served in this process).c                 óJ   <a € R  V VVVVVV3R llpS P                   Vn         V# )c                ó0   € V ^8„  d   QhR\         R\         /# ©r   ÚparamsÚreturn©Údict)r   s   "r   r   Ú7_profile_scoped_rpc.<locals>.deco.<locals>.__annotate__(   s   € ÷  	<ñ  	<¤ð  	<¬$ñ  	<r   c                 óê  <€ S F4  w  r#V! VP                  V4      4      '       d   K$  \        V R V R24      u # 	  W3pS'       d   \        W4      w  rVV'       d   V# WV3p\        P                  ! 4       pS'       d:   \        VR4      p  \        V4      p	\        RT	'       d   \        T	4      MR/4      p V;_uu_ 4        S! V!  uuRRR4       #   \         d    \        T RRT R24      u # i ; i  \         d*   p
S'       g   h \        T S\        T
4      4      u Rp
?
# Rp
?
ii ; i  + '       g   i     R# ; i  \         d    h \         d   p
\        T SS T
 24      u Rp
?
# Rp
?
ii ; i)éß  z	 requiredÚprofileéà  z	profile 'ú' not foundÚprofile_homeN)ÚgetÚ_errÚ_sessÚ
contextlibÚnullcontextÚ_str_argÚ_profile_homeÚProfileUnavailableErrorÚ_session_profile_runtime_scoper   Ú	Exception)Úridr   ÚkeyÚpresentÚargsÚsessionÚerrÚscoper    ÚhomeÚeÚbodyr   r   r
   r   r   r	   s   &&         €€€€€€€r   ÚhandlerÚ2_profile_scoped_rpc.<locals>.deco.<locals>.handler(   sZ  ø€ Û (‘�Ù˜vŸz™z¨#›×/Ô/Ü  T¨c¨U°)Ð+<Ó=Ò=ñ !)ð �=ˆDßÜ$ VÓ1‘�ßØ�JØ WÐ-�Ü×*Ò*Ó,ˆEßô # 6¨9Ó5�ð	8ðQÜ,¨WÓ5˜ô ;¸N×Y]ÌCÐPTÌIÐcgÐ;hÓi�Eð
<ß’UÙ ™;÷ ’Uøô 3ô QÜ# C¨°¸7¸)À;Ð/OÓPÒPðQûô !ô 8ß(ØÜ  Y´°A³Ó7Õ7ûð8ú÷
 —U�Uûä*ô ØÜô <Ü˜C ¨v¨h°q°c¨NÓ;Õ;ûð<ús~   ÂC Â C6 Â9
E ÃD-Ã	
E ÃC3Ã0C6 Ã2C3Ã3C6 Ã6D*ÄD%ÄD*Ä%D*Ä-D>	Ä8E Ä>E ÅE2ÅE2ÅE-Å'E2Å-E2)Ú__doc__)r7   r8   r   r   r
   r   r   r	   s   f €€€€€€r   ÚdecoÚ!_profile_scoped_rpc.<locals>.deco'   s    ù€ ÷ 	<ö  	<ðB Ÿ,™,ˆŒØˆr   © )r   r   r   r   r	   r
   r;   s   fddddd r   Ú_profile_scoped_rpcr>      s   ý€ ÷&#ò #ðH €Kr   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r   r   r
   )r   r   r   )r   s   "r   r   r   N   s&   € ÷ bñ bœð b¤Sð bÄñ br   c               ó   € \        WRVR7      # )u¦   Body exceptions â†’ ``_err(rid, fail_code, prefix + str(e))``; no profile scope. ``live_session``
resolves the session first and calls ``body(rid, params, session)``.F)r   r	   r
   )r>   )r   r   r
   s   &&$r   Ú_guardedrA   N   s   € ô ˜yÀÐT`ÔaÐar   c                óH   € V ^8„  d   QhR\         R\        R\         R\        /# )r   Únamer   r   r
   )r   r   r   )r   s   "r   r   r   T   s.   € ÷ cñ cŒsð cœsð c¬Cð cÄtñ cr   c               ó   a aaa€ VVV V3R l# )z!``@method(name)`` + ``_guarded``.c                 óJ   <€ \        S4      ! \        SSSR 7      ! V 4      4      # )©r
   )ÚmethodrA   )r7   r   r
   rC   r   s   &€€€€r   Ú<lambda>Ú_rpc.<locals>.<lambda>V   s   ø€ œ˜tœ¤X¨i¸ÈlÕ%[Ð\`Ó%aÔbr   r=   )rC   r   r   r
   s   fffdr   Ú_rpcrJ   T   s	   û€ çbÐbr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   rC   r   )r   r   )r   s   "r   r   r   Y   s   € ÷ Qñ Q”cð Q¤cñ Qr   c                ó   a aa€ VVV 3R l# )zU``@method(name)`` + ``_profile_scoped_rpc`` (optional ``profile`` HERMES_HOME scope).c                 óF   <€ \        S4      ! \        S3/ SB ! V 4      4      # ©N)rG   r>   )r7   r   ÚkwrC   s   &€€€r   rH   Ú_scoped_rpc.<locals>.<lambda>[   s   ø€ œ˜tœÔ%8¸Ñ%IÀbÒ%IÈ$Ó%OÔPr   r=   )rC   r   rO   s   fflr   Ú_scoped_rpcrQ   Y   s	   ú€ æPÐPr   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r   r/   r   ©r   r   )r   s   "r   r   r   ^   s!   € ÷ .ñ .”Tð .¤ð .¬ñ .r   c                 óf   € \        V P                  V4      ;'       g    R 4      P                  4       # ©r   )r   r$   Ústrip)r   r/   s   &&r   r)   r)   ^   s&   € Üˆv�z‰z˜#‹×$Ð$ "Ó%×+Ñ+Ó-Ð-r   c                ó$   € V ^8„  d   QhR\         /# )r   Úmodule©r   )r   s   "r   r   r   b   s   € ÷ +ñ +”sñ +r   c                ó,   € ^ RI pVP                  V 4      # )zSDeferred module import for one-liner bodies (startup budget: never import at load).N)Ú	importlibÚimport_module)rX   r[   s   & r   Ú
_tools_modr]   b   s   € ãØ×"Ñ" 6Ó*Ð*r   c                 óZ   € \        \        T ;'       g    R 4      P                  4       4      # rU   )r   r   rV   ©Úvs   &r   rH   rH   h   s   € ”dœ3˜qŸw˜w B›<×-Ñ-Ó/Ô0r   c                 ó@   € V R J ;'       g    \        V 4      R8H  '       * # ©Nr   rY   r_   s   &r   rH   rH   i   s   € ˜1 ˜9×4Ð4¬¨A«°"©Õ5r   rC   Ú
session_idc                ó$   € V ^8„  d   QhR\         /# ©r   rC   rY   )r   s   "r   r   r   n   s   € ÷ Vñ V”3ñ Vr   c                ó$   € \        RV  2VRR7      # )u”   mcp.servers.* contract: profile scope, ``required`` params (default ``name``), body errors â†’ 5024,
profile-resolve errors propagate to dispatch().zmcp.servers.F)r   r   )rQ   )rC   r   s   &&r   Ú_mcp_rpcrg   n   s   € ô ˜ d VÐ,°xÈuÔUÐUr   c                  óh   € \        R 4      P                  4       p \        R4      P                  V 4      # )úhermes_cli.mcp_configútui_gateway.mcp_rpc_helpers)r]   Ú_get_mcp_serversÚserver_configs_with_sources)Úconfig_serverss    r   Ú_mcp_server_rowsrn   t   s.   € ÜÐ 7Ó8×IÑIÓK€NÜÐ3Ó4×PÑPÐQ_Ó`Ð`r   c           	     ór   € \        VR4      \        4       ^ ,          r2Y#W#9   d   R3# \        V RRV R24      3# )zP(name, servers, None) for a configured server, else (name, servers, 4064 error).rC   Nr!   úserver 'r"   )r)   rn   r%   )r.   r   rC   Úserverss   &&  r   Ú_mcp_named_serverrr   y   sE   € ä˜V VÓ,Ô.>Ó.@ÀÕ.Cˆ'Ø $¤/˜$ÐdÐd´t¸CÀÈÐRVÐQWÐWbÐGcÓ7dÐdÐdr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   rC   Úplugins©r   r   )r   s   "r   r   r      s   € ÷ ñ ¤sð ´Tñ r   c           	      óX   € VP                  V4      pVe   \        V RRV RV R24      # R # )Néú  rp   z' is provided by plugin 'z' and cannot be modified©r$   r%   )r.   rC   rt   Úplugins   &&& r   Ú_mcp_plugin_write_errorrz      s9   € Ø�[‰[˜Ó€FØÒÜ�C˜ ¨$¨Ð/HÈÈÐPhÐiÓjÐjÙr   c                 óp   € \        W4      w  r#pV'       d   W#V3# W#\        W\        4       ^,          4      3# ©é   )rr   rz   rn   )r.   r   rC   rq   r3   s   &&   r   Ú_mcp_config_server_or_errorr~   †   s<   € Ü*¨3Ó7Ñ€D�3ß
Ø˜cÐ!Ð!ØÔ1°#Ô=MÓ=OÐPQÕ=RÓSÐSÐSr   c                ó$   € V ^8„  d   QhR\         /# )r   ÚcmdrY   )r   s   "r   r   r   �   s   € ÷ ñ ¤3ñ r   c                 ó’   € VP                  R 4      '       d0   \        V R\        V\        VP                  R4      4      4      4      # R# )Úrunningé©  Ú_manual_compress_activeN)r$   r%   Úbusy_messager   )r.   r2   r€   s   &&&r   Ú_busy_errorr†   �   s9   € Ø‡{�{�9×ÒÜ�C˜œ|¨C´°g·k±kÐB[Ó6\Ó1]Ó^Ó_Ð_Ùr   c                ó0   € V ^8„  d   QhR\         R\         /# )r   rX   ÚlabelrY   )r   s   "r   r   r   “   s   € ÷ 
Jñ 
J¬cð 
J¼#ñ 
Jr   c           
     ó  € V'       g   RR\        V RR4      3# VP                  R4      ;'       g    R;p'       g   RR\        V RR4      3#  V\        V4      R3#   \         d    pRR\        T RT RT 24      3u Rp?# Rp?ii ; i)	z™(session_key, module, None) for the /goal and /loop managers, else (None, None, error):
4001 without a session/key, 5030 when ``module`` fails to import.Né¡  úno active sessionÚsession_keyr   zno session keyé¦  z unavailable: )r%   r$   r]   r-   )r.   r2   rX   rˆ   Úsid_keyÚexcs   &&&&  r   Ú_session_key_or_errr�   “   sœ   € ÷ Ø�Tœ4  TÐ+>Ó?Ð?Ð?Ø—{‘{ =Ó1×7Ð7°RÐ7ˆGÖ7Ø�Tœ4  TÐ+;Ó<Ð<Ð<ðJØœ
 6Ó*¨DÐ0Ð0øÜô JØ�Tœ4  T¨e¨W°NÀ3À%Ð+HÓIÐIÕIûðJús   ÁA ÁBÁ&B Á:BÂ Bc                óÈ   € \        R4      P                  p\        V P                  R. 4      4      pT\	        V4       UUu. uF  w  r4V! V4      f   K  VNK  	  upp3# u uppi )za(history, indices of user-originated turns) minus ephemeral scaffolding. Call under history_lock.úagent.context_compressorÚhistory)r]   Úuser_originated_turn_viewÚ&_history_without_ephemeral_scaffoldingr$   Ú	enumerate)r2   Úis_userr“   ÚiÚms   &    r   Ú_user_turn_indicesrš       sV   € äÐ3Ó4×NÑN€GÜ4°W·[±[ÀÈBÓ5OÓP€GØ¤9¨WÔ#5ÔPÑ#5™4˜1¹À»—Q�QÑ#5ÒPÐPÐPùÓPs   Á AÁAc                ó0   € V ^8„  d   QhR\         R\         /# )r   r€   Ú	empty_msgrY   )r   s   "r   r   r   §   s   € ÷ 'ñ '¤sð '´sñ 'r   c                ó†   € \        WV4      ;p'       d   RRV3# \        V4      w  rVV'       g   RR\        V RV4      3# WVR3# )z]Under history_lock: re-check busy, then (history, user_indices, None) or (None, None, error).Né²  )r†   rš   r%   )r.   r2   r€   rœ   Úbusyr“   Úuser_indicess   &&&&   r   Ú_rewind_preluder¡   §   sR   € ä˜3¨Ó-Ð-€tÖ-Ø�T˜4ÐÐÜ.¨wÓ7Ñ€GßØ�Tœ4  T¨9Ó5Ð5Ð5Ø $Ð&Ð&r   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   ÚkeepÚ	value_errÚfail_prefix)r   Útupler   )r   s   "r   r   r   ±   s!   € ÷ <ñ <¤sð <´uð <Ì3ñ <r   c                óÜ   €  \        W3/ VB R3#   \         d+   pR\        Y^ ,          T^,           T 24      3u Rp?# Rp?i\         d   pR\        T RT T 24      3u Rp?# Rp?ii ; i)u˜   ``_rewind_active_session_history`` â†’ (result, None); ValueError â†’ ``value_err`` (code, prefix),
other exceptions â†’ 5008 ``fail_prefix`` + message.Ni�  )Ú_rewind_active_session_historyÚ
ValueErrorr%   r-   )r.   r2   r£   r¤   r¥   rO   r�   s   &&&&&, r   Ú_rewind_or_errrª   ±   sv   € ð<Ü-¨gÑB¸rÑBÀDÐHÐHøÜô EØ”T˜#¨�|°	¸!µ¨~¸c¸UÐ-CÓDÐDÕDûÜô <Ø”T˜#˜t¨ }°S°EÐ%:Ó;Ð;Õ;ûð<ús1   ‚ �A+›A ºA+Á A+ÁA+ÁA&Á A+Á&A+c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úoutputr   ru   )r   s   "r   r   r   ¼   s   € ÷ 8ñ 8œ3ð 8¤4ñ 8r   c                ó"   € \        V RRRV/4      # )z%command.dispatch display-only result.ÚtypeÚexecr¬   ©Ú_ok)r.   r¬   s   &&r   Ú	_exec_outr²   ¼   s   € äˆs�V˜V X¨vÐ6Ó7Ð7r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Útimeoutr   )r   r   )r   s   "r   r   r   Á   s   € ÷ rñ r¤ð r¬ñ rr   c                óp   € \        RRRRV \        P                  \        R4      P	                  4       R7      # )z¼Shared captured-text subprocess.run kwargs: UTF-8 + lossy decode (non-UTF-8 child output must
not crash the gateway thread on Windows), no stdin, no console flash under the desktop parent.Tzutf-8Úreplaceúhermes_cli._subprocess_compat)Úcapture_outputÚtextÚencodingÚerrorsr´   ÚstdinÚcreationflags)r   Ú
subprocessÚDEVNULLr]   Úwindows_hide_flags)r´   s   &r   Ú_capture_run_kwargsrÁ   Á   s9   € ô Ø $°ÀÐT[Ü× Ñ ´
Ð;ZÓ0[×0nÑ0nÓ0pôrð rr   ÚshellÚenvc                ón   € V ^8„  d   QhR\         R\        R\         R\        R\        R,          R\        /# )r   r´   Útimeout_errr   rÂ   rÃ   Nr   )r   r¦   r   r   )r   s   "r   r   r   É   s>   € ÷ 	,ñ 	,¤cð 	,Äeð 	,ÔX[ð 	,Üð	,Ü-1°D­[ð	,ÜDHñ	,r   c               ó   €  V! \         P                  ! V3R\        P                  4       RVRV/\	        V4      B 4      #   \         P
                   d    \        T .TO5!  u # \         d    p\        Y\        T4      4      u Rp?# Rp?ii ; i)u¶   Run ``cmd`` captured (see ``_capture_run_kwargs``) and hand the CompletedProcess to
``on_result``; TimeoutExpired â†’ ``timeout_err`` (code, message), other errors â†’ ``fail_code``.ÚcwdrÂ   rÃ   N)	r¾   ÚrunÚosÚgetcwdrÁ   ÚTimeoutExpiredr%   r-   r   )	r.   r€   r´   Ú	on_resultrÅ   r   rÂ   rÃ   r6   s	   &&&$$$$$ r   Ú_captured_execrÍ   É   s{   € ð,ÙœŸš¨Ñs´·±³ÐsÀEÐsÈsÐsÔViÐjqÓVrÑsÓtÐtøÜ×$Ñ$ô 'Ü�CÐ&˜+Ó&Ò&Üô ,Ü�C¤C¨£FÓ+Õ+ûð,ús)   ‚=A  Á "BÁ$BÁ-BÁ.BÂBÂBc                ó$   € V ^8„  d   QhR\         /# ©r   r   rY   )r   s   "r   r   r   Õ   s   € ÷ Oñ Oœñ Or   c                ó¢   € RP                  R V P                  ;'       g    RV P                  ;'       g    R3 4       4      P                  4       # )zYstdout + stderr of a CompletedProcess, non-empty parts only, newline-joined and stripped.Ú
c              3   ó8   "  € T F  q'       g   K  Vx € K  	  R # 5irN   r=   )Ú.0Úps   & r   Ú	<genexpr>Ú!_joined_output.<locals>.<genexpr>×   s   é € ÐFÑ @˜1ÃA—Q’QÓ @ùs   ‚	�
r   )ÚjoinÚstdoutÚstderrrV   )Úrs   &r   Ú_joined_outputrÛ   Õ   s9   € à�9‰9ÑF §¡§ ¨R°·±·°¸RÑ @ÓFÓF×LÑLÓNÐNr   c                ó$   € V ^8„  d   QhR\         /# rÏ   )r¦   )r   s   "r   r   r   Ú   s   € ÷ tñ t¤%ñ tr   c           	     ó:  € V '       d   V P                  R4      MRpVe   \        VRR4      \        VRR4      3# \        T ;'       g    / 4      ;_uu_ 4        \        \	        \        V 4      4      4      \        4       3uuRRR4       #   + '       g   i     R# ; i)u  ``(enabled, disabled)`` a session's read-back RPCs must reflect: the live agent's sets once built,
else what that session's profile would build with â€” ``_load_enabled_toolsets`` under the session's
profile scope, the same read ``_build_agent``/``_refresh_live_sessions`` make and the key
``profiles.configure`` pins. A session whose agent is not built yet (``session.create`` with no
prompt) otherwise read back as "everything enabled" (#117977). ``None`` = all toolsets.
No session â†’ the launch profile's config.ÚagentNÚenabled_toolsetsÚdisabled_toolsets)r$   Úgetattrr,   Ú_load_enabled_toolsetsÚ_resolve_agent_platformÚ_session_sourceÚ_load_disabled_toolsets)r2   rÞ   s   & r   Ú_session_toolsetsræ   Ú   sx   € ÷ %,ˆG�K‰K˜Ô °€EØÒÜ�uÐ0°$Ó7¼ÀÐH[Ð]aÓ9bÐbÐbÜ	'¨¯¨°2×	6Õ	6Ü%Ô&=¼oÈgÓ>VÓ&WÓXÔZqÓZsÐs÷ 
7×	6×	6Ó	6ús   Á'B	Â	B	c                óR   € V ^8„  d   QhR\         R\        R\        \         ,          /# )r   r   Ú
with_toolsr   )r   r   Úlist)r   s   "r   r   r   è   s%   € ÷ ñ œ$ð ¬tð ¼¼T½
ñ r   c          
      óØ  € \        R 4      p\        P                  V P                  RR4      4      p\        \	        V4      ^ ,          ;'       g    . 4      p. p\        VP                  4       P                  4       4       Fg  pVP                  V4      ;p'       g   K  RTRVR,          RVR,          RV'       d   Wd9   MR/pV'       d   VR,          VR	&   VP                  V4       Ki  	  V# )
Útoolsetsrc   r   rC   ÚdescriptionÚ
tool_countÚenabledTÚresolved_toolsÚtools)
r]   Ú	_sessionsr$   Úsetræ   ÚsortedÚget_all_toolsetsÚkeysÚget_toolset_infoÚappend)	r   rè   rë   r2   rî   ÚitemsrC   ÚinfoÚrows	   &$       r   Ú_toolset_rowsrû   è   sÔ   € Ü˜*Ó%€HÜ�m‰m˜FŸJ™J |°RÓ8Ó9€GÜÔ# GÓ,¨QÕ/×5Ð5°2Ó6€GØ€EÜ�x×0Ñ0Ó2×7Ñ7Ó9Ö:ˆØ×,Ñ,¨TÓ2Ð2ˆ4×2Ð2à˜˜m¨T°-Õ-@À,ÐPTÐUaÕPbØ¯g˜4š?¸4ðAˆC÷ Ø#Ð$4Õ5��G‘Ø�L‰L˜Öñ ;ð €Lr   zsystem.batteryc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ú   s   € ÷ 	cñ 	c”4ð 	cœDñ 	cr   c                ó  €  \        R4      pVP                  4       p\        V RVP                  RVP                  RVP
                  RVP                  V4      /4      #   \         d    \        T RRRRRRRR/4      u # i ; i)	zcHost battery for the status bar. Always resolves; ``available: false`` = no battery or read failed.zagent.batteryÚ	availableÚpercentÚpluggedÚcategoryFNÚdim)r]   Úread_batteryr±   rþ   rÿ   r   Úbattery_categoryr-   )r.   r   ÚbatteryÚbatts   &&  r   Ú_r  ù   s�   € ðcÜ˜_Ó-ˆØ×#Ñ#Ó%ˆÜ�3Ø˜Ÿ™¨°D·L±LÀ)ÈTÏ\É\Ø˜×0Ñ0°Ó6ð8ó 9ð 	9øô ô cÜ�3˜ e¨Y¸¸iÈÈzÐ[`ÐaÓbÒbðcús   ‚AA ÁB Á?B úprocess.stopi’  c                 óP   € R \        R4      P                  P                  RR7      /# )Úkilledútools.process_registryr  )Úsource)r]   Úprocess_registryÚkill_all©r   s   &r   rH   rH   	  s.   € ¨8´ZÐ@XÓ5Y×5jÑ5j×5sÑ5sð  |JÐ5só  6Kñ  +Lr   z
reload.envi—  c                 óJ   € R \        \        R4      P                  4       4      /# )Úupdatedúhermes_cli.config)r   r]   Ú
reload_envr  s   &r   rH   rH     s   € ¨´C¼
ÐCVÓ8W×8bÑ8bÓ8dÓ4eÑ(fr   zplugins.listi¨  c                 óÔ   € R \        R4      P                  4       P                  P                  4        UUu. uF#  w  rRVR\	        VRR4      R\	        VRR4      /NK%  	  upp/# u uppi )rt   úhermes_cli.pluginsrC   ÚversionÚ?rî   T)r]   Úget_plugin_managerÚ_pluginsrø   rá   )r   Únr˜   s   &  r   rH   rH     sn   € ¨9äÐ3Ó4×GÑGÓI×RÑR×XÑXÔZô7\áZ‰DˆAð 
��Iœw q¨)°SÓ9¸9ÄgÈaÐQZÐ\`ÓFaÓbÙZò7\ñ +]ùó 7\s   ¶)A$z
tools.listé§  c                 ó    € R \        V RR7      /# )rë   T©rè   ©rû   r  s   &r   rH   rH     s   € ¨´]À6ÐVZÔ5[Ñ(\r   ztoolsets.listc                 ó    € R \        V RR7      /# )rë   Fr  r  r  s   &r   rH   rH     s   € ¨J¼ÀfÐY^Ô8_Ñ+`r   zagents.listi©  c                 óÌ   € R \        R4      P                  P                  4        Uu. uF0  pRVR,          RVR,          R,          RVR,          RVR,          /NK2  	  up/# u upi )Ú	processesr  rc   ÚcommandºNéP   NÚstatusÚuptimeÚuptime_seconds)r]   r  Úlist_sessions)r   rÔ   s   & r   rH   rH     so   € ¨+äÐ4Ó5×FÑF×TÑTÔVó8XáVˆAð 
�q˜•¨	°1°Yµ<ÀÕ3DÀhÐPQÐRZÕP[Ð]eÐghÐiyÕgzÓ{ÙVñ8Xñ *Yùò 8Xs   §6A!c                 óJ   € \        V \        V,          ^,          ! V4      4      # r|   )r±   Ú_SIMPLE_RPCS)r.   r   Ú_ns   &&&r   rH   rH     s   € ´S¸¼lÈ2Õ>NÈqÖ>QÐRXÓ>YÔ5Zr   zprocess.listrF   c                 ó0   € \        V R \        V4      /4      # )r!  )r±   Ú_session_processes)r.   r   r2   s   &&&r   rH   rH     s   € ¤ S¨;Ô8JÈ7Ó8SÐ*TÔ!Ur   zprocess.kill)r
   r   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ 	4ñ 	4”4ð 	4¤Tñ 	4r   c                óª  € \        VP                  R4      ;'       g    R4      pV'       g   \        V RR4      # \        R4      P                  pVP                  V4      pVeH   \        \        VRR4      ;'       g    R4      \        VP                  R4      ;'       g    R4      8w  d   \        V RRV 24      # \        WP                  V4      4      # )	z]Kill ONE background process, scoped to the caller's session (unlike process.stop's kill_all).Ú
process_idr   i¬  zprocess_id requiredr  rŒ   iÌ  zno such process: )r   r$   r%   r]   r  rá   r±   Úkill_process)r.   r   r2   Úproc_idÚregistryÚprocs   &&&   r   r  r    s¸   € ô �&—*‘*˜\Ó*×0Ð0¨bÓ1€GßÜ�C˜Ð4Ó5Ð5ÜÐ2Ó3×DÑD€HØ�<‰<˜Ó €DØ‚|”sœ7 4¨¸Ó;×AÐA¸rÓBÄcÈ'Ï+É+ÐVcÓJd×JjÐJjÐhjÓFkÔkÜ�C˜Ð!2°7°)Ð<Ó=Ð=Üˆs×)Ñ)¨'Ó2Ó3Ð3r   c                ó$   € V ^8„  d   QhR\         /# rÏ   )r   )r   s   "r   r   r   *  s   € ÷ ñ ¤dñ r   c                 ó  €  \        R4      P                  4       p \        V \        4      '       d   V P	                  R4      MRp\        V\        4      '       d   \        VP	                  RR4      4      # R#   \         d     R# i ; i)zN``approvals.mcp_reload_confirm`` from disk config; True (safe) on any failure.r  Ú	approvalsNÚmcp_reload_confirmT)r]   Úload_configÚ
isinstancer   r$   r   r-   )Úcfgr7  s     r   Ú_mcp_reload_confirm_requiredr<  *  ss   € ðÜÐ,Ó-×9Ñ9Ó;ˆÜ,6°s¼D×,AÒ,A�C—G‘G˜KÔ(Àtˆ	ÜBLÈYÔX\×B]ÒB]Œt�I—M‘MÐ"6¸Ó=Ó>ÐgÐcgÐgøÜô Úðús   ‚A2A7 Á5A7 Á7BÂBÚpreserve_prefixÚplugin_notec                ód   € V ^8„  d   QhR\         R\        \        \        3,          R,          RR/# )r   r=  r>  Nr   )r   r¦   r   )r   s   "r   r   r   4  s0   € ÷  ?ñ  ?¼$ð  ?Ü(-¬c´3¨h­¸$Õ(>ð ?ØJNñ ?r   c               óf  € ^ RI Hp ^ RIHp V e	   V! V 4      MRp\        ;_uu_ 4        \
        P                  4        UUu. uFQ  w  rgVP                  R4      f   K  Ve1   T! VP                  R4      ;'       g    \        4       4      V8X  g   KN  Wg3NKS  	  pppRRR4       \        R4      P                  p	X F™  w  rgVR,          p
 \        V4      ;_uu_ 4        V! \        \        V
RR4      4      V
4      p\        4       pV	! W«VRVR	7       RRR4       T'       d   \        R4      P$                  ! T
.TO5!   \'        RT\)        Y§4      4       K›  	  R# u uppi   + '       g   i     LÌ; i  + '       g   i     Lj; i  \         d!   p\         P#                  R
Ym4        Rp?L“Rp?ii ; i)u\  Rebuild live sessions' cached tool snapshots from the registry and push session.info (agents
never re-read the registry). The MCP pool is process-global, so refreshing only the requester
would leave sibling sessions on stale tools until /new â€” and a request without a resolvable
session_id (desktop passes ``activeSessionId ?? undefined``) would refresh nothing while still
answering "reloaded". ``enabled_override`` re-resolves toolsets so a server enabled this session
(config or a just-installed plugin) is in the session's ``tool_call`` scope.

``home``: only sessions of that profile home (a session with no ``profile_home`` belongs to the
launch home). ``preserve_prefix``: append-only rebuild inside a live conversation. ``plugin_note``:
``(plugin_key, text)`` queued once per session for its next tool result or turn
(``agent/plugin_live_notes.py``).)Úcarry_onboarding_toolset)Úhermes_home_keyNrÞ   r#   útools.mcp_tool_agentÚplatformT)Úenabled_overrideÚdisabled_overrideÚ
quiet_moder=  z5Failed to refresh cached agent tools (session %s): %szagent.plugin_live_noteszsession.info)Úagent.onboarding_sessionrA  Úhermes_constantsrB  Ú_sessions_lockrñ   rø   r$   Úget_process_hermes_homer]   Úrefresh_agent_mcp_toolsr,   râ   rá   rå   r-   ÚloggerÚwarningÚqueue_plugin_noticeÚ_emitÚ_session_info)r5   r=  r>  rA  rB  ÚwantÚsidÚsessÚliveÚrefreshrÞ   rî   ÚdisabledÚ_excs   &$$           r   Ú_refresh_live_sessionsrY  4  si  € õ BÝ0Ø$(Ò$4‰?˜4Ô ¸$€Dß	ŽÜ-6¯_©_Ô->ô mÑ->¡	 À$Ç(Á(È7ÓBS”ØŠL™O¨D¯H©H°^Ó,D×,aÐ,aÔH_ÓHaÓbÐfjÑjô �“Ñ->ˆñ m÷ 
ô Ð/Ó0×HÑH€GÛ‰	ˆØ�W•ˆð	_Ü/°×5Õ5Ù2Ô3IÌ'ÐRWÐYcÐeiÓJjÓ3kÐmrÓs�Ü2Ó4�Ù˜È8Ø#'¸õJ÷ 6÷ ÜÐ0Ó1×EÒEÀeÐZÈkÔZÜˆn˜c¤=°Ó#=Ö>ó ùóm÷ 
�ú÷ 6×5ûô
 ô 	_Ü�N‰NÐRÐTW×^Ñ^ûð	_úse   ©EÁE
ÁE
Á;E
ÂE
ÂEÃ	FÃ4E2ÄFÅEÅE/	Å2FÅ=FÆFÆF0ÆF+Æ+F0c                ó4   € V ^8„  d   QhR\         R\         RR/# )r   Ú
plugin_keyÚnoter   NrY   )r   s   "r   r   r   W  s&   € ÷ iñ i¬cð i¼ð iÀñ ir   c                ó8   € \        T RV'       d   W3MRR7       R# )aB  A plugin just went live in ``home``: append its MCP tools to that profile's open chats (deferred
behind tool_search, so the model-facing tool array is unchanged) and queue ``note``, replacing an
older one for ``plugin_key``, for their next tool result or turn. Called by
``hermes_cli.plugins_activation.load_and_go_live``.TN)r=  r>  ©rY  )r5   r[  r\  s   &&&r   Úrefresh_plugin_sessionsr_  W  s   € ô
 ˜4°×Y]ÀJÑCUÐcg×hr   z
reload.mcpc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   `  s   € ÷ K<ñ K<”4ð K<œDñ K<r   c           	      óf  a
aaa€ \         P                  VP                  R R4      4      p\        VP                  RR4      4      '       g#   \        4       '       d   Rp\	        V RRRV/4      # V'       de   \        V4      '       dT    \        4       P                  \        VP                  R 4      ;'       g    R4      RV  2R	7      p\	        T RRRRRT/4      # \        R4      \        R4      \        R4      uo
oo\        VP                  R4      ;'       g    R4      pR R loR V
VVV3R llp\        P                  RR7      '       d*    V! 4        \        P                  4        \        WRR7      # \         p\        ;_uu_ 4        \         V8„  ;'       d    V'       * ;'       g
    V\"        8H  p	V	'       d   S! 4       MV! 4        RRR4       \        WX	R7      #   \         d   p\        T R
RT 24      u Rp?# Rp?ii ; i  \        P                  4        i ; i  + '       g   i     L^; i)rc   r   ÚconfirmFuÇ   âš ï¸�  /reload-mcp invalidates the prompt cache (next message re-sends full input tokens). Reply `/reload-mcp now` to proceed, or `/reload-mcp always` to proceed and silence this prompt permanently.r%  Úconfirm_requiredÚmessagezreload-mcp-)Ú
request_idé›  z compute-host reload_mcp failed: NÚreloadedÚturn_isolationTÚhost_ackrC  ztools.mcp_tool_lifecycleútools.mcp_tool_discoveryÚrevc                ó   € V ^8„  d   QhRR/# ©r   r   Nr=   )r   s   "r   r   Ú_.<locals>.__annotate__x  s   € ÷ !ñ ! Dñ !r   c                 ó   € \        4        R# )z\Runs under _mcp_reload_lock so a concurrent reload can't tear the registry down mid-refresh.Nr^  r=   r   r   Ú_refresh_session_agentÚ!_.<locals>._refresh_session_agentx  s   € äÖ r   c                ó   € V ^8„  d   QhRR/# rm  r=   )r   s   "r   r   rn  |  s   € ÷  ñ  ˜Tñ  r   c                 ó`  <€ \        RR/4      ;_uu_ 4        \        4       p \        \        4       FG  pS	P	                  4        SP                  4        SP                  4        \        4       pW 8X  d    MTp KI  	  RRR4       \        ;_uu_ 4        \        P                  4        Uu0 uF(  q3P                  R4      f   K  VP                  R4      kK*  	  ppRRR4       \        XR0,
          4       F2  p \        RV/4      ;_uu_ 4        SP                  4        RRR4       K4  	  S
! 4        X s\         ^,          sR#   + '       g   i     LÎ; iu upi   + '       g   i     L‰; i  + '       g   i     KŠ  ; i  \         d"   p\        P                  RYV4        Rp?K´  Rp?ii ; i)zÄshutdown+discover+refresh under the lock, then mark a completed generation. Config
can change WHILE discover connects: re-hash and repeat until stable so the marked
generation matches what loaded.r#   NrÞ   z)MCP rediscovery failed for profile %s: %s)r,   Ú_compute_mcp_revÚrangeÚ_MCP_RELOAD_MAX_PASSESÚshutdown_mcp_serversÚreprobe_tool_availabilityÚdiscover_mcp_toolsrJ  rñ   Úvaluesr$   ró   r-   rM  rN  Ú_mcp_reload_loaded_revÚ_mcp_reload_gen)Úloadedr  ÚafterrT  Úhomesr5   rX  Ú
_mcp_agentÚ_mcp_discoveryÚ_mcp_lifecyclerp  s          €€€€r   Ú_do_full_reloadÚ_.<locals>._do_full_reload|  sN  ø€ ô ,¨^¸TÐ,B×CÕCÜ%Ó'ˆFÜÔ1Ö2�Ø×3Ñ3Ô5Ø×4Ñ4Ô6Ø×1Ñ1Ô3Ü(Ó*�Ø”?ÙØ’ñ 3÷ D÷ Ž^Ü:C×:JÑ:JÔ:LÓnÑ:L°$×PXÑPXÐY`ÓPaÔ-�T—X‘X˜nÖ-Ñ:LˆEÐn÷ ä˜5 D 6�>Ö*ˆDðXÜ3°^ÀTÐ4J×KÕKØ"×5Ñ5Ô7÷ LÑKñ +ñ 	Ô Ø!'ÐÜ˜1ÕŠ÷/ D×Cüò o÷ �^ú÷ L×KÐKûäô XÜ—‘ÐJÈD×WÒWûðXúsf   —A%EÂEÂ)EÃEÃEÃ8FÄE-ÄFÅE	ÅEÅE*	Å-E>Å8FÅ>FÆF-ÆF(Æ(F-)Úblocking)Ú	coalesced)rñ   r$   r   r<  r±   Ú_session_uses_compute_hostÚ_get_compute_host_supervisorÚ
reload_mcpr   r-   r%   r]   Ú_mcp_reload_lockÚacquireÚreleaseÚ_finish_reloadr|  r{  )r.   r   r2   rd  Úackr�   Úreq_revrƒ  Ú
gen_beforer†  r€  r�  r‚  rp  s   &&        @@@@r   r  r  _  sî  û€ ä�m‰m˜FŸJ™J |°RÓ8Ó9€Gô �—
‘
˜9 eÓ,×-Ò-Ô2N×2PÒ2Pð/ð 	ô �3˜Ð#5°yÀ'ÐJÓKÐKßÔ-¨g×6Ò6ð	MÜ.Ó0×;Ñ;Ü�F—J‘J˜|Ó,×2Ð2°Ó3À+ÈcÈUÐ@Sð <ó UˆCô �3˜ :Ð/?ÀÀzÐSVÐWÓXÐXäÐ)Ó*¬JÐ7QÓ,RÔT^Ð_yÓTzð /€J� ô
 �&—*‘*˜UÓ#×)Ð) rÓ*€Gõ!÷ ó  ôJ ×Ñ¨Ð×/Ò/ð	'ÙÔä×$Ñ$Ô&Ü˜c°UÔ;Ð;Ü €Jß	Ö	Ü# jÑ0×gÐg¸'´k×6fÐ6fÀWÔPfÑEfˆ	ß$-ÑÔ ±?Ó3Dø÷ 
ô ˜#°Ô;Ð;øô{ ô 	MÜ˜˜TÐ%EÀcÀUÐ#KÓLÕLûð	Mûôn ×$Ñ$Õ&ú÷ 
×	úsH   Â/G Â7G ÅH Æ
H Æ*H Æ<H ÇHÇ*G?Ç9HÇ?HÈHÈ H0	zcommands.catalogiœ  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   °  s   € ÷ 
`ñ 
`”4ð 
`œDñ 
`r   c           	     óØ   € ^ RI Hp \        \        P	                  VP	                  RR4      4      \        V4      VP	                  R4      R7      p\        W! \        \        VR7      4      # )u$  Registry-backed slash metadata, categorized, no aliases (shared builder in command_discovery). Skill
discovery is bound to the calling session's profile and workspace (``_completion_cwd``: its record,
else the cwd a new session would be seeded with) so project-local skills register for the repo the
session is actually in (#114359); a session-less draft is bound to ``params['profile']`` (#124651) and
an unknown profile is 4064 like ``complete.slash`` â€” never a launch-profile palette.
Every loader (quick, plugin, skill) runs inside the scope.)Úcommand_catalogrc   r   r    ©rÇ   r    )Úload_cfgÚmodule_loaderr4   )	Útui_gateway.command_discoveryr“  Ú_session_home_scoperñ   r$   Ú_completion_cwdr±   Ú	_load_cfgr]   )r.   r   r“  r4   s   &&  r   r  r  ¯  sS   € õ >Ü¤	§¡¨f¯j©j¸ÀrÓ.JÓ KÔQ`ÐagÓQhØ(.¯
©
°9Ó(=ô?€Eäˆs�O¬YÄjÐX]Ô^Ó_Ð_r   zcli.execc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ¾  s   € ÷ añ a”4ð aœDñ ar   c                ó  a € VP                  R. 4      p\        V\        4      '       d;   \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \	        S RR4      # \        V4      pV'       d   \        S RRRVR	RR
R/4      # \        R4      p\        S \        P                  RR.VO\        \        VP                  R^ð4      4      R4      V 3R lRRVP                  \        RR7      4      R7      # )zXRun `python -m hermes_cli.main` with argv; capture stdout/stderr (non-interactive only).Úargvc              3   óB   "  € T F  p\        V\        4      x € K  	  R # 5irN   )r:  r   )rÓ   Úxs   & r   rÕ   Ú_.<locals>.<genexpr>Á  s   é € Ð,NÉÀA¬Z¸¼3×-?Ð-?Ëùs   ‚FTi£  zargv must be list[str]ÚblockedÚhintÚcoder¬   r   r·   z-mzhermes_cli.mainr´   iX  c                 óp   <€ \        SR RRV P                  R\        V 4      ;'       g    RR,          /4      # )r¡  Fr£  r¬   ú(no output):Ni€»  N)r±   Ú
returncoderÛ   )rÚ   r.   s   &€r   rH   Ú_.<locals>.<lambda>Ë  s8   ø€ œC Ø�u˜f a§l¡l°H¼~ÈaÓ?P×?aÐ?aÐTaÐcjÕ>kð&mô nr   é™  )Úinherit_credentials)rÌ   rÅ   r   rÃ   éÿÿÿÿ)i˜  zcli.exec: timeout)r$   r:  ré   Úallr%   Ú_cli_exec_blockedr±   r]   rÍ   ÚsysÚ
executableÚminr   Úrestore_ambient_pythonpathÚhermes_subprocess_env)r.   r   r�  r¢  Ú_compats   f&   r   r  r  ½  së   ø€ ð �:‰:�f˜bÓ!€DÜ�dœD×!Ò!¯«Ñ,NÉÓ,N¯¯ªÑ,NÉÓ,N×)NÒ)NÜ�C˜Ð7Ó8Ð8Ü˜TÓ"€DßÜ�3˜ D¨&°$¸ÀÀHÈbÐQÓRÐRô Ð8Ó9€GÜØŒc�n‰n˜dÐ$5Ð=¸Ð=¼sÄ3ÀvÇzÁzÐR[Ð]`ÓGaÓCbÐdgÓ?hônà/¸4Ø×.Ñ.Ô/DÐY]Ô/^Ó_ôað ar   zcommand.resolvei”  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ò  s   € ÷ Eñ E”4ð EœDñ Er   c           	      ó  € \        R 4      P                  VP                  RR4      4      pV'       d5   \        V RVP                  RVP                  4       RVP                  /4      # \        V RRVP                  R4       24      # )úhermes_cli.commandsrC   r   Ú	canonicalrì   r  i«  zunknown command: )r]   Úresolve_commandr$   r±   rC   Údescriber  r%   )r.   r   rÚ   s   && r   r  r  Ñ  sr   € äÐ(Ó)×9Ñ9¸&¿*¹*ÀVÈRÓ:PÓQ€AßÜ�3˜ a§f¡f¨m¸Q¿Z¹Z»\È:ÐWX×WaÑWaÐbÓcÐcÜ��TÐ.¨v¯z©z¸&Ó/AÐ.BÐCÓDÐDr   c           
      ó‚  € \        4       P                  R / 4      P                  V4      pVf   R# VP                  R4      R8X  dÄ   \        R4      P                  4       p\        P
                  ! VP                  RR4      3RRR	V/\        ^4      B p\        V4      R
,          pV'       d   \        R4      P                  V4      MTpVP                  ^ 8w  d%   \        T RT;'       g    RVP                   24      # \        W4      # VP                  R4      R8X  d!   \        V RRRVP                  RR4      /4      # R# )Úquick_commandsNr®   r¯   útools.environments.localr"  r   rÂ   TrÃ   ºNi   Núagent.redactrž   z$quick command failed with exit code ÚaliasÚtarget)rš  r$   r]   Úbuild_subprocess_envr¾   rÈ   rÁ   rÛ   Úredact_sensitive_textr¦  r%   r²   r±   )	r.   r   r2   rC   ÚargÚqcrÃ   rÚ   r¬   s	   &&&&&    r   Ú_dispatch_quickrÄ  Ý  s  € Ü	‹�‰Ð)¨2Ó	.×	2Ñ	2°4Ó	8€BØ	‚zÙØ	‡v�vˆfƒ~˜ÔäÐ3Ó4×IÑIÓKˆÜ�NŠN˜2Ÿ6™6 )¨RÓ0Ña¸ÐaÀ#ÐaÔI\Ð]_ÓI`ÑaˆÜ Ó" 5Õ)ˆßMS”˜NÓ+×AÑAÀ&ÔIÐY_ˆØ�<‰<˜1ÔÜ˜˜T 6×#bÐ#bÐ/SÐTU×T`ÑT`ÐSaÐ-bÓcÐcÜ˜Ó%Ð%ØJLÏ&É&ÐQWË.Ð\cÔJcŒ3ˆs�V˜W h°·±°xÀÓ0DÐEÓFÐmÐimÐmr   c                ó$   € V ^8„  d   QhR\         /# re   rY   )r   s   "r   r   r   í  s   € ÷ ñ ¤#ñ r   c                 ó\   €  \        R 4      P                  V 4      #   \         d     R# i ; i)r  N)r]   Úget_plugin_command_handlerr-   ©rC   s   &r   Ú_plugin_command_handlerrÉ  í  s0   € ðÜÐ.Ó/×JÑJÈ4ÓPÐPøÜô Úðús   ‚ œ+ª+c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   rÂ  rS  r   rY   )r   s   "r   r   r   ô  s!   € ÷ 'ñ '¤cð '¼cð 'Ì3ñ 'r   c                óè  a€ \        R4      p\        R4      P                  pV'       d%   \        VP                  R4      ;'       g    R4      MRpV'       d0   \	        T\        VP                  R4      ;'       g    R4      R7      M. pRRRTR	\        V4      R
V'       d'   \        VP                  R4      R
R4      ;'       g    TMR/p\        R4      p	 V	P                  V	P                  V3R l4      4      ;_uu_ 4        \        VP                  V! W3/ VB 4      ;'       g    R4      uuRRR4       \        V4       #   + '       g   i     M; i \        T4       R#   \        T4       i ; i)a®  Run a plugin slash-command handler under the session's ``HERMES_SESSION_*`` binding.

Plugin handlers read ``get_session_env()`` for the chat/session they serve; these RPCs run on
the socket/worker thread where nothing upstream binds it (only the turn path does), so a handler
saw ``""`` or the launch process's inherited values. Same class as the messaging gateway's
#108698; ``_set_session_context`` is the turn path's own seam.r  z"hermes_cli.plugin_command_dispatchrŒ   r   rÇ   ©rÇ   r  NrD  rc   rÞ   zhermes_cli.plugin_choicesc                 ó   <€ \        SV 4      # rN   )Ú_clarify_block)Ú	questionsrS  s   &€r   rH   Ú%_run_plugin_command.<locals>.<lambda>  s   ø€ ÌÐWZÐ\eÔHfr   )r]   Úinvoke_plugin_commandr   r$   Ú_set_session_contexträ   rá   Ú
bind_askerÚclarify_askerÚresolve_plugin_command_resultÚ_clear_session_context)
r8   rÂ  r2   rS  rt   Úinvoker/   ÚtokensÚcontextÚchoicess
   &&&f      r   Ú_run_plugin_commandrÛ  ô  s3  ø€ ô Ð-Ó.€GÜÐ<Ó=×SÑS€Fß3:Œ#ˆg�k‰k˜-Ó(×.Ð.¨BÔ
/À€CßMTÔ! #¬3¨w¯{©{¸5Ó/A×/GÐ/GÀRÓ+HÕIÐZ\€FØ˜˜}¨c°:¼ÈwÓ?WØ×Y`œW W§[¡[°Ó%9¸<ÈÓN×UÐUÐRUøÐfhðj€Gô Ð4Ó5€Gð'Ø×Ñ × 5Ñ 5Ô6fÓ g×hÕhÜ�w×<Ñ<¹VÀGÑ=\ÐT[Ñ=\Ó]×cÐcÐacÓd÷ iÑhô 	˜vÕ&÷ i×húÐhô 	˜vÖ&øÔ˜vÕ&ús$   Ã,E$ Ä+EÄ-
E$ ÅE	ÅE$ Å$E1c                óL   € V ^8„  d   QhR\         R,          R\         R,          /# )r   rÇ   Nr    rY   )r   s   "r   r   r     s"   € ÷ 1ñ 1¤c¨D¥jð 1Ä#ÈÅ*ñ 1r   c              #  ó~  "  € \        R4      p\        R4      pV '       d   V P                  R4      MRpV '       g1   V'       d)   \        \        V4      ;'       g    R4      ;'       g    RpT;'       g/    V '       d%   \        V P                  R4      ;'       g    R4      MRpV'       d   VP	                  V4      MRpV'       d   VP                  V4      MRp Rx € Ve   VP                  V4       Ve   VP                  V4       R# R#   Te   TP                  T4       Te   TP                  T4       i i ; i5i)a]  Bind HERMES_HOME and the logical cwd to the session for the block.

Skill/bundle/quick-command resolution is home-keyed (``skills.external_dirs``, ``skill-bundles/``,
``quick_commands`` all live in the profile's config/home); nothing upstream of these RPC handlers
binds it, so an unscoped call resolves against the launch profile (#110695). Project-local skills
are cwd-keyed (``find_project_root`` reads the session-bound cwd first): these RPCs run on the socket
thread with no session context, where the terminal scope resolves a placeholder ``terminal.cwd`` to
``$HOME`` and no project skill ever registers or dispatches (#114359). ``cwd`` overrides the session
record (a session-less catalog request binds the workspace a new session would be seeded with).
``profile`` scopes a session-less call (a Desktop draft names its rail-selected profile) (#124651).rI  zagent.runtime_cwdr#   Nr   rÇ   )r]   r$   r   r*   Úset_hermes_home_overrideÚset_session_cwdÚreset_session_cwdÚreset_hermes_home_override)r2   rÇ   r    ÚhcÚrcr#   ÚtokenÚ	cwd_tokens   &&&     r   r˜  r˜  
  s  é € ô 
Ð&Ó	'€BÜ	Ð'Ó	(€Bß29�7—;‘;˜~Ô.¸t€Lß—wÜœ=¨Ó1×7Ð7°RÓ8×@Ð@¸DˆØ
×
CÐ
C·7”#�g—k‘k %Ó(×.Ð.¨BÔ/À€Cß9EˆB×'Ñ'¨Ô5È4€Eß+.�×"Ñ" 3Ô'°D€Ið1ÛàÒ Ø× Ñ  Ô+ØÒØ×)Ñ)¨%Ö0ñ øð Ò Ø× Ñ  Ô+ØÒØ×)Ñ)¨%Õ0ð üsR   ‚9D=¼D=ÁD=ÁD=Á)D=Á5D=Á>D=ÂD=Â,D=ÃD=ÃD Ã.D=Ä-D:Ä:D=c                óJ   € V ^8„  d   QhR\         R\        R\        R,          /# )r   r2   Úbaser   N)r   r   r   )r   s   "r   r   r   '  s%   € ÷ ñ ¤Dð ´ð ¼¸t½ñ r   c                óÊ   €  \        V 4      ;_uu_ 4        RV 2\        R4      P                  4       9   uuRRR4       #   + '       g   i     R# ; i  \         d     R# i ; i)u  True when ``/base`` is a skill of the session profile.

False when the scan succeeded and it is not. None when the scan raised â€”
callers must not treat that as "not a skill". Fail-open sends the command to
the slash worker, which ok-replies the loading banner and drops the prompt.
Ú/úagent.skill_commandsN)r˜  r]   Úget_interactive_skill_commandsr-   )r2   rç  s   &&r   Ú_profile_skill_commandrì  '  sO   € ðÜ  ×)Õ)Ø�t�f�:¤Ð,BÓ!C×!bÑ!bÓ!dÑd÷ *×)×)Ó)ûäô Úðús+   ‚A •?´
A ¿A	Á
A ÁA ÁA"Á!A"z'skill command refused before process: /c           	     óÈ   € \         R,          ! V RVRVRV/4      pRV9   g1   VP                  R4      ;'       g    / P                  R4      '       d   V# \        V RR	V 24      # )
zIReturn command.dispatch's directive, or a hard error. Never an ok banner.úcommand.dispatchrC   rÂ  rc   ÚerrorÚresultr®   rž   ú)skill command: use command.dispatch for /)Ú_methodsr$   r%   )r.   rS  rç  rÂ  Ú
dispatcheds   &&&& r   Ú_skill_dispatch_or_refuserô  8  sh   € äÐ,Ö-¨c°F¸DÀ%ÈÈlÐ\_Ð3`Óa€JØ�*Ô §¡°Ó!9×!?Ð!?¸R× DÑ DÀV× LÒ LØÐÜ��TÐFÀtÀfÐMÓNÐNr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r�   r   )ÚBaseExceptionr   )r   s   "r   r   r   @  s   € ÷ -ñ -œ}ð -´ñ -r   c                 ó&   € \         \        V 4      9   # rN   )Ú_SKILL_WORKER_REFUSEDr   )r�   s   &r   Ú_worker_refused_skillrù  @  s   € Ü ¤C¨£HÑ,Ð,r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   rç  r   ©r   r   )r   s   "r   r   r   D  s   € ÷ 	ñ 	œsð 	¤tñ 	r   c                ó`   €  \        R4      P                  V 4      RJ#   \         d     R# i ; i)zÌTrue when ``base`` is a built-in the slash worker may still run.

Skill auto-registration skips names that collide with the registry, so a
built-in cannot be the skill whose prompt the worker would drop.
rµ  NF)r]   r·  r-   )rç  s   &r   Ú_is_registry_commandrý  D  s5   € ðÜÐ/Ó0×@Ñ@ÀÓFÈdÐRÐRøÜô Úðús   ‚ ž-¬-c                 ó  € \        V4      ;p'       dX   \        P                  ! \        4      ;_uu_ 4        \	        V R RR\        WTW!P                  RR4      4      /4      uuRRR4       # R#   + '       g   i     R# ; i)r®   ry   r¬   rc   r   N)rÉ  r'   Úsuppressr-   r±   rÛ  r$   )r.   r   r2   rC   rÂ  r8   s   &&&&& r   Ú_dispatch_pluginr   P  sn   € Ü)¨$Ó/Ð/€wÖ/Ü× Ò ¤×+Õ+Ü�s˜V X¨xÔ9LØ˜g§z¡z°,ÀÓ'Có:Eð Fó G÷ ,Ò+ñ ÷ ,Ö+ñ ús   ¶*A-Á-A>	c                ó$   € V ^8„  d   QhR\         /# re   rY   )r   s   "r   r   r   X  s   € ÷ ñ œ#ñ r   c                ó˜   €  \        R4      P                  V 4      f   \        R4      P                  V 4      # R#   \         d     R# i ; i)z]Skill-bundle key for ``name`` when it is NOT a registry command; None otherwise / on failure.rµ  Núagent.skill_bundles)r]   r·  Úresolve_bundle_command_keyr-   rÈ  s   &r   Ú_bundle_key_forr  X  sK   € ðÜÐ+Ó,×<Ñ<¸TÓBÒJÜÐ3Ó4×OÑOÐPTÓUÐUÙøÜô Úðús   ‚5: ºA	ÁA	c                 óV  € \        V4      pVf   R # \        R4      p TP                  YTV'       d   VP                  RR4      MR\	        4       R7      pT'       g   \        T RRT 24      # Tw  ršpTP                  4       P                  T/ 4      P                  RTP                  R	4      4      pR
T R\        T
4       R2pYÛ'       d   RRP                  T4       2MR,          p\        T RRRT	RTR\        T	4      /4      #   \
         d   p\        T RRT 24      u R p?# R p?ii ; i)Nr  rŒ   r   )Útask_idrD  rž   zbundle dispatch failed: zfailed to load bundle: rC   ré  u   âš¡ Loading bundle: ú (z skills)ú
Skipped missing skills: ú, r®   Úsendrd  ÚnoticeÚdisplay)r  r]   Úbuild_bundle_invocation_messager$   Ú_resolve_session_platformr-   r%   Úget_skill_bundlesÚlstripÚlenr×   r±   Ú_skill_scaffold_projection)r.   r   r2   rC   rÂ  Ú
bundle_keyÚbundlesÚbundle_resultr�   ÚmsgÚloaded_namesÚmissingÚbundle_namer  s   &&&&&         r   Ú_dispatch_bundler  b  s<  € Ü  Ó&€JØÒÙÜÐ.Ó/€GðAØ×?Ñ?ØÇw W§[¡[°ÀÔ%CÐTVÜ.Ó0ð @ó 2ˆ÷
 Ü�C˜Ð!8¸¸ÐEÓFÐFØ!.Ñ€C�wØ×+Ñ+Ó-×1Ñ1°*¸bÓA×EÑEÀfÈj×N_ÑN_Ð`cÓNdÓe€KØ# K =°´3°|Ó3DÐ2EÀXÐN€FØ
Æ7Ð*¨4¯9©9°WÓ+=Ð*>Ñ?ÐPRÕR€Fäˆs�V˜V Y°°X¸vÀyÔRlÐmpÓRqÐrÓsÐsøô ô AÜ�C˜Ð!9¸#¸Ð?Ó@Õ@ûðAús   ž6D ÄD(ÄD#ÄD(Ä#D(c                 óŠ  € \         P                  ! \        4      ;_uu_ 4        \        R 4      pVP	                  4       RV 2P                  4       rvWv9   EdP   VP                  VRR7      w  r‰V'       dÁ   TP                  V.VOT	V'       d   VP                  RR4      MRR7      p
V
'       dˆ   V
w  r¼pR\        V4       RR	P                  V4       2pV'       d   VR
R	P                  V4       2,          p\        V RRRVRWg,          P                  RV4      RVR\        V4      /4      uuRRR4       # TP                  YyV'       d   VP                  RR4      MRR7      pV'       d>   \        V RRRVRWg,          P                  RV4      R\        V4      /4      uuRRR4       # RRR4       R#   + '       g   i     R# ; i)rê  ré  T)ÚinteractiverŒ   r   )r  u   âš¡ Loading z stacked skills: r
  r	  r®   Úskillrd  rC   r  r  N)r'   rÿ  r-   r]   rë  ÚlowerÚsplit_stacked_skill_commandsÚ&build_stacked_skill_invocation_messager$   r  r×   r±   r  Úbuild_skill_invocation_message)r.   r   r2   rC   rÂ  ÚscÚcmdsr/   Ú
extra_keysÚuser_instructionÚstackedr  r  r  r  s   &&&&&          r   Ú_dispatch_skillr(  w  s·  € Ü	×	Ò	œY×	'Õ	'ÜÐ.Ó/ˆØ×5Ñ5Ó7¸1¸T¸F¸×9IÑ9IÓ9KˆcØ�;ð ,.×+JÑ+JÈ3Ð\`Ð+JÓ+aÑ(ˆJßØ×CÑCØÐ&˜:Ð&Ð(8ß>E˜GŸK™K¨°rÔ:È2ð Dó O�÷ Ø18Ñ.�C wØ+¬C°Ó,=Ð+>Ð>OÐPT×PYÑPYÐZfÓPgÐOhÐi�FßØÐ$>¸t¿y¹yÈÓ?QÐ>RÐ"SÕS˜Ü˜sØ ¨°C¸ÀÅÇÁÈvÐW[ÓA\Ø  &¨)Ô5OÐPSÓ5Tð%Vó W÷# 
(Ò	'ð( ×3Ñ3Øß:A˜Ÿ™ M°2Ô6Àrð 4ó KˆC÷ Ü˜3Ø˜G Y°°V¸T½Y¿]¹]È6ÐSWÓ=XØÔ9¸#Ó>ð!@ó A÷1 
(×	'Ò	'ñ6 ÷7 
(Ö	'ñ6 ús%   £A)F1Â F1Â.A<F1Ä54F1Å*2F1Æ1G	c                 óL   € V'       d   \        V R RRV/4      # \        V RR4      # )r®   r  rd  é¤  zusage: /queue <prompt>)r±   r%   ©r.   r   r2   rC   rÂ  s   &&&&&r   Ú
_cmd_queuer,  š  s)   € ß9<Œ3ˆs�V˜V Y°Ð4Ó5ÐkÄ$ÀsÈDÐRjÓBkÐkr   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   rX   ÚfnrO   rY   )r   s   "r   r   r   ž  s!   € ÷ ñ œCð ¤Sð ¬cñ r   c                ó   a aa€ VVV 3R lpV# )z`/learn, /plan, /init: submit ``module.fn(arg)`` as a normal turn (the live agent does the work).c                 óˆ   <€ \        \        S4      S4      p\        T R RRS'       d   V! R/ SV/B /4      # V! V4      /4      # )r®   r  rd  r=   ©rá   r]   r±   )	r.   r   r2   rC   rÂ  Úbuildr.  rO   rX   s	   &&&&& €€€r   r€   Ú_prompt_builtin.<locals>.cmd¡  sJ   ø€ Üœ
 6Ó*¨BÓ/ˆÜ�3˜ ¨Ï"±EÑ4F¸RÀ¸IÑ4FÐ]Ó^Ð^ÑRWÐX[ÓR\Ð]Ó^Ð^r   r=   )rX   r.  rO   r€   s   fff r   Ú_prompt_builtinr4  ž  s   ú€ ÷_ð €Jr   zagent.learn_promptÚbuild_learn_promptzagent.plan_promptÚbuild_plan_promptc                ó¨  € ^ RI Hp ^ RIHp V'       d   VP	                  R4      MRpRp\
        P                  ! \        4      ;_uu_ 4        V'       d	   V! V4      MRpRRR4       V'       d&   \        P                  P                  V4      '       g   V'       d   \        V4      MRp\        V RRRV! WHVR7      /4      #   + '       g   i     Lj; i)	aH  /init: build the AGENTS.md prompt against the SESSION's active directory, then submit it
as a normal turn (the live agent does the scan and the write). The desktop app launches the
backend from the home directory, so a process-cwd fallback scans and updates the HOME's
AGENTS.md instead of the workspace attached to the session.)Úbuild_init_prompt_for_cwd)Úget_session_cwdrŒ   Nr®   r  rd  )ÚextrarÇ   rŒ   )Úhermes_cli.init_commandr8  Útools.terminal_toolr9  r$   r'   rÿ  r-   rÉ   ÚpathÚisdirÚ_session_cwdr±   )	r.   r   r2   rC   rÂ  r8  r9  ÚskeyrÇ   s	   &&&&&    r   Ú	_cmd_initrA  «  s™   € õ
 BÝ3ç)0ˆ7�;‰;�}Ô%°d€DØ
€CÜ	×	Ò	œY×	'Õ	'ß'+‰o˜dÔ#°ˆ÷ 
(ç”B—G‘G—M‘M #×&Ò&ß'.Œl˜7Ô#°DˆÜˆs�V˜V YÑ0IØ¨ô1.ð /ó 0ð 0÷	 
(×	'ús   ÁCÃC	c           
      ó´  €  \        R 4      pV'       g   \        V RVP                  4       4      # V'       g   \        V RR4      # TP                  \	        4       P                  R4      ;'       g    / 4      R,          pVP                  R4      pRVP                  R4      R	\        VR	R
4      R\        VRR
4      /VR&   Ve'    \        VP                  RR4      W& R2RRRRR7       MRRR	VRRRRRR/VR&   RV R2p\        V RRRVRV/4      #   \         d    TP                  RR
4       h i ; i  \         d   p	\        T RR T	 24      u R
p	?	# R
p	?	ii ; i)!zhermes_cli.moa_configr*  rŠ   r‹   ÚmoaÚdefault_presetrÞ   ÚoverrideÚmodel_overrideÚmodelNÚproviderÚmoa_one_shot_restorerc   r   z --provider moaFT)Úconfirm_expensive_modelÚpin_session_overrideÚpersist_overrideÚcount_switchÚbase_urlzmoa://localÚapi_keyzmoa-virtual-providerÚapi_modeÚchat_completionsz MoA one-shot queued with preset z2; previous model will be restored after this turn.r®   r  r  rd  r�   zmoa unavailable: )r]   r%   Ú	moa_usageÚnormalize_moa_configrš  r$   rá   Ú_apply_model_switchr-   Úpopr±   )
r.   r   r2   rC   rÂ  rC  ÚpresetrÞ   r  r�   s
   &&&&&     r   Ú_cmd_moarW  ½  s…  € ð:ÜÐ0Ó1ˆßÜ˜˜T 3§=¡=£?Ó3Ð3ßÜ˜˜TÐ#6Ó7Ð7Ø×)Ñ)¬)«+¯/©/¸%Ó*@×*FÐ*FÀBÓGÐHXÕYˆð —‘˜GÓ$ˆð ˜Ÿ™Ð$4Ó5°wÄÈÈwÐX\Ó@]Øœ  z°4Ó8ð+:ˆÐ&Ñ'ð ÒðÜ#Ø—J‘J˜|¨RÓ0°'¸XÀ_Ð;UØ,1ÈÐ_dØ!&ö(ð ˜E 7¨F°JÀØÐ1°:Ð?Qð)SˆGÐ$Ñ%ð 4°F°8Ð;mÐnˆÜ�3˜ ¨°6¸9ÀcÐJÓKÐKøô ô Ø—‘Ð2°DÔ9Øðûô ô :Ü�C˜Ð!2°3°%Ð8Ó9Õ9ûð:úsL   ‚-D2 °D2 ¸D2 Á*D2 Á0AD2 Ã$D Ã('D2 ÄD/Ä/D2 Ä2EÄ=EÅEÅEc                 ó¶  € \        R 4      p\        4       P                  R4      p\        V\        4      '       d   TM/ pVP                  V\        VP                  RR4      4      ;p4      w  r‰VR8X  d   \        V RR4      # VR8X  d>   VP                  R4      ;'       g    \        4       p
\        WP                  Wz4      4      # \        R	,          ! T R
RRV	'       d   RMRRVP                  RR4      /4      pRV9   d   V# VP                  R4      ;'       g    / P                  R4      ;'       g    Rp\        WP                  \        V	4      V4      4      # )zhermes_cli.focus_viewr  Ú
focus_viewFÚusager*  zusage: /focus [on|off|status]r%  Úfocus_saved_tool_progressz
config.setr/   ÚfocusÚvalueÚonÚoffrc   r   rï  rð  Útool_progressr«  )r]   rš  r$   r:  r   Úresolve_focus_argr   r%   Ú_load_tool_progress_moder²   Úformat_focus_statusrò  Úformat_focus_toggle_message)r.   r   r2   rC   rÂ  Úfvr  ÚcurÚactionr¿  ÚsavedÚresr`  s   &&&&&        r   Ú
_cmd_focusrj  á  s2  € ä	Ð+Ó	,€BÜ‹k�o‰o˜iÓ(€GÜ# G¬T×2Ò2‰g¸€GØ×)Ñ)¨#´d¸7¿;¹;À|ÐUZÓ;[Ó6\Ð/\¨sÓ]�N€FØ�ÔÜ�C˜Ð>Ó?Ð?Ø�ÔØ—‘Ð7Ó8×VÐVÔ<TÓ<VˆÜ˜×4Ñ4°SÓ@ÓAÐAÜ
�<Ö
 Øˆe�W˜g¯v¡t¸5À,ÐPV×PZÑPZÐ[gÐikÓPlÐmóo€Cà�#„~Øˆ
Ø—W‘W˜XÓ&×,Ð,¨"×1Ñ1°/ÓB×KÐKÀe€MÜ�S×8Ñ8¼¸f»À}ÓUÓVÐVr   c                 ó„  € V'       g   \        V R R4      # \        WR4      ;p'       d   V# \        R4      pVR,          ;_uu_ 4        \        WR4      ;p'       d   VuuRRR4       # VP                  R4      '       d   \        V RR4      uuRRR4       # \	        WRR	4      w  rxp	V	'       d   V	uuRRR4       # VP                  WxR,          4      w  r« VP                  VP                  R
4      4      p\        Y\        T4      ^,
          RRRR7      w  réT	'       d   T	uuRRR4       # TP                  T^,          P                  R
4      4      pRRR4       \        RT4       \        T RRRX/4      #   \         d+   p\        T R\        T4      4      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     Ld; i)rŠ   zno active session to retryÚretryr’   Úhistory_lockNÚattached_imagesrž   z9retry cannot safely reconstruct or combine attached mediaz!no previous user message to retryÚcontentz"retry: failed to persist history: T)Úrequire_retryabler®   r  rd  rª  )rž   r   )r%   r†   r]   r$   r¡   Ú#history_before_user_originated_turnÚretryable_user_textr©   r   rª   r  Ú_tui_model_frictionr±   )r.   r   r2   rC   rÂ  rŸ   Úccr“   r    r3   Ú_prefixÚ	live_viewro  r�   Úrewounds   &&&&&          r   Ú
_cmd_retryrx  ô  s“  € ßÜ�C˜Ð;Ó<Ð<Ü˜3¨Ó1Ð1€tÖ1ØˆÜ	Ð.Ó	/€BØ	�×	 ×	 Ü˜s¨WÓ5Ð5ˆ4Ö5Ø÷ 
!Ò	 ð �;‰;Ð(×)Ò)Ü˜˜TÐ#^Ó_÷	 
!Ò	 ô
 &5°SÀ7ÐLoÓ%pÑ"ˆ˜sßØ÷ 
!Ò	 ð  ×CÑCÀGÐZ\ÕM]Ó^Ñˆð	-Ø×,Ñ,¨Y¯]©]¸9Ó-EÓFˆGô &Øœ#˜lÓ+¨aÕ/°Ð=aÐuyô{‰ˆçØ÷! 
!Ò	 ð" ×(Ñ(¨°­¯©¸	Ó)BÓCˆ÷# 
!ô$ ˜ Ô)Üˆs�V˜V Y°Ð8Ó9Ð9øô ô 	-Ü˜˜T¤3 s£8Ó,Ô,÷ 
!Ò	 ûð	-ú÷ 
!×	 úsZ   ÁF/Á)F/Â F/ÂF/Â;F/Ã E7Ã6+F/Ä,'F/Å7F,ÆF'ÆF,ÆF/Æ'F,Æ,F/Æ/F?	c           
      ó&  € V'       g   \        V R R4      # VR,           \        V4      ^P8”  d   RMR 2pV'       d   VP                  R4      '       g   \        V RRRVR	R
V 2/4      # VP                  R4      pV'       do   \	        VR4      '       d]   \
        P                  ! \        4      ;_uu_ 4        VP                  V4      '       d   \        V RV 24      uuRRR4       #  RRR4       \        V RRRV/4      #   + '       g   i     L ; i)r*  zusage: /steer <prompt>r#  z...r   r‚   r®   r  rd  r  z%No agent running; sent as next turn: rÞ   Ústeeru7   â�© Steer queued â€” arrives after the next tool call: N)
r%   r  r$   r±   Úhasattrr'   rÿ  r-   rz  r²   )r.   r   r2   rC   rÂ  ÚshownrÞ   s   &&&&&  r   Ú
_cmd_steerr}    sí   € ßÜ�C˜Ð7Ó8Ð8Ø�3�xˆj¤# c£(¨R¤-™°RÐ8Ð9€E÷ ˜Ÿ™ I×.Ò.Ü�3˜ ¨°C¸ÐEjÐkpÐjqÐCrÐsÓtÐtØ�K‰K˜Ó €Eß”˜ ×(Ò(Ü× Ò ¤×+Õ+Ø�{‰{˜3×ÒÜ  Ð(_Ð`eÐ_fÐ&gÓh÷ ,Ò+Ø÷ ,ô ˆs�V˜V Y°Ð4Ó5Ð5÷ ,×+ús   Â6&D Ä D	c           
      óL  € \        T;'       g    / 4      ;_uu_ 4        \        WR R4      w  rVpV'       d   VuuRRR4       #  \        \        4       P	                  R4      ;'       g    / P	                  R^4      ;'       g    ^4      pTP                  WXR7      p	^ RIHp
 V
! W”R VP                  V4      R7      pVP                  '       d"   \        V RVP                  4      uuRRR4       # VP                  '       g    \        WP                  4      uuRRR4       # R	R
RVP                  RVP                  /pVP                  '       g   VR;;,          R,          uu&   RVR&   \!        W4      uuRRR4       #   \
         d    ^p ELi ; i  + '       g   i     R# ; i)zhermes_cli.goalsÚgoalsNÚ	max_turns)rc   Údefault_max_turns)Údispatch_goal_commandc                  ó   € R # rN   r=   r=   r   r   rH   Ú_cmd_goal.<locals>.<lambda>,  s   € ©Tr   )Úauthorize_gateÚlast_user_messager*  r®   r  r  rd  u)   
Continuing now â€” taking the next step.z/goal resumer  )r,   r�   r   rš  r$   r-   ÚGoalManagerÚhermes_cli.goal_commandr‚  Úlast_user_message_from_dbrï  r%   r¬   Úpromptr²   Úkickoffr±   )r.   r   r2   rC   rÂ  rŽ   r  r3   r€  Úmgrr‚  rð  Úpayloads   &&&&&        r   Ú	_cmd_goalrŽ     sW  € Ü	'¨¯¨°2×	6Õ	6Ü1°#Ð@RÐT[Ó\Ñˆ˜ßØ÷ 
7Ò	6ð	ÜœY›[Ÿ_™_¨WÓ5×;Ð;¸×@Ñ@ÀÈbÓQ×WÐWÐUWÓXˆIð ×Ñ¨7ÐÓPˆÝAÙ&Ø¡\Ø#×=Ñ=¸gÓFô
ˆð �<�<ˆ<Ü˜˜T 6§=¡=Ó1÷ 
7Ò	6ð  �}�}ˆ}Ü˜S§-¡-Ó0÷# 
7Ò	6ð$ ˜6 8¨V¯]©]¸IÀvÇ}Á}ÐUˆØ�~�~ˆ~Ø�H×Ð!MÕMÓØ!/ˆG�IÑÜ�3Ó ÷- 
7Ò	6øô ô 	Ø‹Ið	ú÷ 
7×	6Ð	6úsT   žFÁ$E>Á)E>ÂE>Â
AFÃ0FÄFÄ!-FÅ$FÅ>FÆFÆFÆFÆF#	c                 ó°  € \        WR R4      w  rVpV'       d   V# VP                  VP                  VR7      V4      pVP                  R4      ;'       g    Rp	VP                  R4      '       dL   \        P
                  ! \        4      ;_uu_ 4        VP                  V4      '       d
   V	R,          p	RRR4       \        W	4      #   + '       g   i     L; i)zhermes_cli.loopsÚloops)rc   r¬   r   Úcreatedup   
Note: an active /goal is driving this session â€” loop wakeups defer until the goal finishes, pauses, or parks.N)	r�   Údispatch_loop_commandÚLoopManagerr$   r'   rÿ  r-   Úgoal_blocks_loop_tickr²   )
r.   r   r2   rC   rÂ  rŽ   r�  r3   rð  r¬   s
   &&&&&     r   Ú	_cmd_loopr•  :  s³   € Ü-¨cÐ<NÐPWÓXÑ€G�Cß
Øˆ
Ø×(Ñ(¨×):Ñ):ÀgÐ):Ó)NÐPSÓT€FØ�Z‰Z˜Ó!×'Ð' R€FØ‡z�z�)×ÒÜ× Ò ¤×+Õ+Ø×*Ñ*¨7×3Ò3Øð Võ W�÷ ,ô �SÓ!Ð!÷	 ,×+ús   Â!CÃC	c           
      óü  aaaa€ V'       g   \        V R R4      # \        WR4      ;p'       d   V# VP                  RR4      ;o'       g   \        V R R4      # T;'       g    RP                  4       p V'       d+   \	        \        VP                  4       ^ ,          4      ^4      M^pTR	,          ;_uu_ 4        \        YRR
4      w  r‰p
T
'       d   T
uuRRR4       # \        T\        T	4      4      p\        Y\        T	4      T,
          RR4      w  rÊT
'       d   T
uuRRR4       # Tw  orÞ\        R4      P                  TP                  R4      4      pRRR4       TP                  R4      oSev   \        SRR4      oTT3R lT3R lTT3R l3 FQ  p\         P"                  ! \$        4      ;_uu_ 4        \'        T4      ;_uu_ 4        T! 4        RRR4       RRR4       KS  	  \)        RTX4       T^8X  d   RMRpRT RT RX R2p\+        T RRRXRT/4      #   \        \        3 d    \        T RRT: R24      u # i ; i  + '       g   i     Lù; i  + '       g   i     LŽ; i  + '       g   i     Kë  ; i)rŠ   zno active session to undoÚundorŒ   r   zno session key for undor*  zundo: invalid count u    â€” use /undo or /undo Nrm  zno user messages to undoNúundo: zagent.message_contentro  rÞ   Ú_memory_managerc                  óF   <€ S R J;'       d    S P                  SRRRR7      # )Nr   FT)Úparent_session_idÚresetrw  )Úon_session_switch)ÚmmrŒ   s   €€r   rH   Ú_cmd_undo.<locals>.<lambda>h  s7   ø€ �B˜d�N÷ Nð N r×';Ñ';Ø¨r¸Èð (<ó (Nð Nr   c                  óL   <€ \        S R 4      ;'       d    S P                  4       # )Ú_invalidate_system_prompt)r{  r¡  )rÞ   s   €r   rH   rŸ  j  s!   ø€ ”G˜EÐ#>Ó?×eÐeÀE×DcÑDcÓDeÐer   c                  óX   <€ \        SR 4      ;'       d    \        SR \        S 4      4      # )Ú_last_flushed_db_idx)r{  Úsetattrr  )ÚactiverÞ   s   €€r   rH   rŸ  k  s)   ø€ ”G˜EÐ#9Ó:×rÐr¼wÀuÐNdÔfiÐjpÓfqÓ?rÐrr   ÚturnÚturnsu
   â†¶ Undid Ú r  z7 message(s)). Edit and resubmit, or send a new message.r®   Úprefillrd  r  )r*  r˜  )r%   r†   r$   rV   Úmaxr   Úsplitr©   Ú
IndexErrorr¡   r¯  r  rª   r]   Úflatten_message_textrá   r'   rÿ  r-   r,   rs  r±   )r.   r   r2   rC   rÂ  rŸ   Úarg_strr  Ú_historyr    r3   Úturns_undonerw  rv  Úrewound_countÚtarget_textÚstepÚ	turn_wordr  r¥  rÞ   rž  rŒ   s   &&&&&              @@@@r   Ú	_cmd_undorµ  H  s9  û€ ßô
 �C˜Ð:Ó;Ð;Ü˜3¨Ó0Ð0€tÖ0ØˆØ"Ÿ;™; }°bÓ9Ð9ˆKÖ9Ü�C˜Ð8Ó9Ð9Ø�yˆy�b×ÑÓ!€Gð\ß/6ŒC”�G—M‘M“O AÕ&Ó'¨Ô+¸Aˆð 
�×	 ×	 Ü&5°cÀFÐLfÓ&gÑ#ˆ ßØ÷ 
!Ò	 ô ˜1œc ,Ó/Ó0ˆÜ% c´C¸Ó4EÈÕ4TÐVfÐhpÓq‰ˆßØ÷ 
!Ò	 ð ,3Ñ(ˆ�	Ü Ð!8Ó9×NÑNÈyÏ}É}Ð]fÓOgÓhˆ÷ 
!ð �K‰K˜Ó €EØÒä�UÐ-¨tÓ4ˆõNäeÝró	
ˆDô ×$Ò$¤Y×/Õ/Ô1OÐPW×1XÕ1XÙ”÷ 2Y×/Ñ/ñ
ô ˜ ¨Ô6Ø&¨!Ô+‘°€IØ˜,˜ q¨¨°2°m°_ÐD{Ð|€FÜˆs�V˜Y¨	°;ÀÈ&ÐQÓRÐRøô; œ
Ð#ô \Ü�C˜Ð!5°g±[Ð@YÐZÓ[Ò[ð\úç	 ×	 ú÷, 2Y×1Xú×/×/Ð/úsT   Á2H Á:,H Â7IÃ>IÄ%.IÆ5I*Ç	IÇI*È#IÉ IÉI	ÉI'É"I*É*I;c                ó0   € V ^8„  d   QhR\         R\        /# )r   rÂ  r   rû  )r   s   "r   r   r   v  s   € ÷ Vñ Vœcð V¤dñ Vr   c                 ój   € V '       d(   V P                  ^R7      ^ ,          P                  4       MRR9   # )r}   ©Úmaxsplitr   >   ÚrewindÚrestore)r«  r  )rÂ  s   &r   Ú_is_snapshot_restorer¼  v  s+   € ß03ˆC�I‰I˜qˆIÓ! !Õ$×*Ñ*Ô,¸Ð@UÑUÐUr   c                 ó@   € \        V4      '       g   R # \        V R4      # )Nzª/snapshot restore is blocked in the TUI because it changes config/state on disk while the live agent has cached settings. Run it in the classic CLI, then restart the TUI.)r¼  r²   r+  s   &&&&&r   Ú_cmd_snapshotr¾  z  s(   € Ü ×$Ò$ÙÜØð eófð fr   c           	      ó   € V'       g   \        V R R4      # \        WR4      ;p'       d   V# VP                  RR4      p\        V4      '       dl   \	        YbRRV 2V'       d   RV 2MR,           4      w  rxVR9   d   \        YR8X  d   RV4      # R	V4      # VR
8X  d   \        V RRRR
RV/4      # \        W4      #  \        WbVR,          VRR7      p	\        W	4      #   \         d!   p
\        T R	\        T
4      4      u Rp
?
# Rp
?
i\         d>   p
\        R4      P                  TR,          RR7       \        T RRT
 24      u Rp
?
# Rp
?
ii ; i)rŠ   zno active session to compressÚcompressrc   r   ré  r¨  Úfailedrf  rƒ   Úpendingr®   r¯   r%  r¬   rÞ   T)Úsnapshot_kwargsNzagent.conversation_compressionF)Ú	committedi‘  zcompress failed: >   rÁ  Úrejected)r%   r†   r$   r‡  Ú_compute_host_slashr±   r²   Ú_compress_live_with_feedbackÚCompressionBusyr   r-   r]   Ú0finalize_context_engine_compression_notification)r.   r   r2   rC   rÂ  rŸ   rS  r%  r¹   r¬   r�   s   &&&&&      r   Ú_cmd_compressrÊ  ‚  sS  € ßÜ�C˜Ð>Ó?Ð?Ü˜3¨Ó4Ð4€tÖ4ØˆØ
�*‰*�\ 2Ó
&€CÜ! '×*Ò*Ü*¨3¸ÀqÈÈÀZ×`cÐUVÐWZÐV[ÑS\ÐikÕElÓm‰ˆØÐ+Ô+Ü˜¨xÔ%7˜TÀ4ÓHÐH¸TÀ4ÓHÐHØ�YÔÜ�s˜V V¨X°yÀ(ÈDÐQÓRÐRÜ˜Ó#Ð#ð:Ü-¨c¸GÀGÕ<LÈcÐcgÔhˆÜ˜Ó%Ð%øÜô )Ü�C˜œs 3›xÓ(Õ(ûÜô :ÜÐ3Ó4×eÑeØ�GÕ¨ð 	fô 	/ä�C˜Ð!2°3°%Ð8Ó9Õ9ûð:ús6   Â; C ÃEÃ'DÃ<EÄEÄEÄ2EÅEÅEzWUnknown /memory subcommand. Use: pending, approve <id>, reject <id>, approval <on|off>.z’Unknown /skills subcommand here. Use: pending, approve <id>, reject <id>, diff <id>, approval <on|off>. (Search/install/browse are terminal-side.)c                óœ  € V '       dY   \         P                  ! \        4      ;_uu_ 4        \        V P	                  R4      RR4      pVe   VuuRRR4       #  RRR4       \         P                  ! \        4      ;_uu_ 4        \        R4      P                  4       uuRRR4       #   + '       g   i     LV; i  + '       g   i     R# ; i)ur  Memory store for the session's own profile: the live agent's store when there is one, else a
freshly loaded on-disk store â€” mirroring cli.py's /memory handler and the gateway's (Desktop/TUI
sessions have no long-lived agent store). ``None`` when even that fails, which the shared handler
reports as "memory store unavailable" instead of claiming the write was applied.rÞ   Ú_memory_storeNztools.memory_tool)r'   rÿ  r-   rá   r$   r]   Úload_on_disk_store)r2   Ústores   & r   Ú_pending_subcommand_storerÏ  ­  sŠ   € ÷
 Ü× Ò ¤×+Õ+Ü˜GŸK™K¨Ó0°/À4ÓHˆEØÒ Ø÷ ,Ò+à ÷ ,ô 
×	Ò	œY×	'Õ	'ÜÐ-Ó.×AÑAÓC÷ 
(Ò	'÷	 ,×+ú÷ 
(Ö	'áús   «"B'ÂB:Â'B7	Â:C	c                ó$   € V ^8„  d   QhR\         /# )r   Ú	subsystemrY   )r   s   "r   r   r   ¼  s   € ÷ [ñ [¬3ñ [r   c                ó   a € V 3R l# )zµPersist ``<subsystem>.write_approval`` into the SESSION's profile config (this runs inside
``_session_home_scope``, so ``_write_config_key`` writes the right profile's config.yaml).c                 ó4   <€ \        S R 2\        V 4      4      # )z.write_approval)Ú_write_config_keyr   )rî   rÑ  s   &€r   rH   Ú-_write_approval_mode_setter.<locals>.<lambda>¿  s   ø€ Ô,°	¨{¸/Ð-JÌDÐQXËMÔZr   r=   )rÑ  s   fr   Ú_write_approval_mode_setterrÖ  ¼  s   ø€ ô [ÐZr   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   rÑ  rÂ  ÚunknownrY   )r   s   "r   r   r   Â  s!   € ÷ ?ñ ?¬ð ?´#ð ?ÌCñ ?r   c                óÒ   € ^ RI Hp ^ RIHp T! Y;'       g    RP	                  4       WP
                  8X  d   \        V4      MR\        V4      R7      p\        Ye   V4      # T4      # )é    )Úhandle_pending_subcommand©Úwrite_approvalr   N)Úmemory_storeÚset_mode_fn)	Ú"hermes_cli.write_approval_commandsrÛ  rð   rÝ  r«  ÚMEMORYrÏ  rÖ  r²   )r.   rÑ  rÂ  r2   rØ  rÛ  ÚwaÚouts   &&&&$   r   Ú_run_pending_reviewrä  Â  sZ   € ÝLÝ*Ù
#Ø—I�I˜2×$Ñ$Ó&Ø;DÏ	É	Ô;QÔ.¨wÔ7ÐW[Ü/°	Ó:ô<€Cô �S¢˜#Ó>Ð>°gÓ>Ð>r   c                ó(   € \        V RWB\        R7      # )uN   /memory â€” review staged memory writes, approve/reject them, toggle the gate.Úmemory©rØ  )rä  Ú_MEMORY_USAGEr+  s   &&&&&r   Ú_cmd_memoryré  Ì  s   € ä˜s H¨cÄMÔRÐRr   c                óè  € T;'       g    RP                  4       p\        R4      p\        VP                  R4      RR4      ;'       g    R	pV'       d   V^ ,          P	                  4       V9  d   R# ^ RIHp V^ ,          P	                  4       R
9  dN   VP                  VP                  4      '       g-   VP                  VP                  4      ^ 8X  d   \        V R4      # \        V RWB\        R7      # )u»  /skills write-approval subcommands only; the hub subcommands stay with the slash worker.

Returns None (falls through to the routing refusal, unchanged behaviour) for anything outside
the review surface â€” ``search``/``install``/``browse``/``inspect`` are the CLI skills hub's,
never a staged-write review. The allowlist mirrors the registry-declared review slice
(``CommandDef("skills", desktop_subcommands=...)`` in hermes_cli/commands.py).r   rµ  ÚskillsÚdesktop_subcommandsNrÜ  zˆSkill write approval is off (skills.write_approval). Enable it with /skills approval on, then review staged writes with /skills pending.rç  r=   >   ÚmodeÚapproval)r«  r]   rá   r·  r  rð   rÝ  Úwrite_approval_enabledÚSKILLSÚpending_countr²   rä  Ú_SKILLS_USAGE)	r.   r   r2   rC   rÂ  ÚsubÚcommandsÚallowedrâ  s	   &&&&&    r   Ú_cmd_skillsrö  Ñ  sË   € ð �9ˆ9�"×
Ñ
Ó
€CÜÐ/Ó0€HÜ�h×.Ñ.¨xÓ8Ð:OÐQUÓV×\Ð\ÐZ\€Gß�#�a•&—,‘,“.¨Ô/ÙÝ*ð 	ˆA��‰‹Ð2Ô2¸2×;TÑ;TÐUW×U^ÑU^×;_Ò;_Ø× Ñ  §¡Ó+¨qÔ0Ü˜ð 6ó 7ð 	7ô ˜s H¨cÄMÔRÐRr   ÚqueueÚqÚlearnÚplanÚinitrC  r\  rl  rz  ÚgoalÚloopr—  ÚsnapshotÚsnaprÀ  Úcompactræ  rë  rî  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ð  s   € ÷ Oñ O”4ð OœDñ Or   c           
      óN  € \        VP                  R R4      P                  R4      4      VP                  RR4      r2\        P                  VP                  RR4      4      p\        \
        \        \        \        P                  V4      3p\        V4      ;_uu_ 4        \        RV4       FM  pV! WWBV4      pVf   K  V\        9   d$   RV9  d   \        VP                  RR4      V4       Vu uuRRR4       # 	  RRR4       \        V RRV 24      #   + '       g   i     L ; i)	rC   r   ré  rÂ  rc   Nrï  rž   z)not a quick/plugin/bundle/skill command: )Ú_resolve_namer$   r  rñ   rÄ  r   r  r(  Ú_SLASH_BUILTINSr˜  ÚfilterÚ_SESSION_CONTROL_SLASHESÚ!_publish_session_control_snapshotr%   )r.   r   rC   rÂ  r2   ÚstagesÚstageri  s   &&      r   r  r  ï  sñ   € ä˜fŸj™j¨°Ó4×;Ñ;¸CÓ@ÓAÀ6Ç:Á:ÈeÐUWÓCXˆ#Ü�m‰m˜FŸJ™J |°RÓ8Ó9€Gô Ô/Ô1AÄ?ÔTc×TgÑTgÐhlÓTmÐn€FÜ	˜W×	%Õ	%Ü˜D &Ö)ˆEÙ˜ W°CÓ8ˆCØŒØÔ3Ô3¸ÀsÔ8JÜ5°f·j±jÀÈrÓ6RÐT[Ô\Ø‘
÷ 
&Ò	%Ù)÷ 
&ô ��TÐFÀtÀfÐMÓNÐN÷ 
&×	%ús   ÂDÂ>1DÃ:DÄD$	z
slash.execc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ N'ñ N'”4ð N'œDñ N'r   c                 óø	  € \        W4      w  r#V'       d   V# VP                  R R4      P                  4       pV'       g   \        V RR4      # VP	                  R4      P                  ^R7      pV'       d
   V^ ,          MRP                  4       p\        V4      ^8”  d
   V^,          MRpVP                  RR4      p\        W‚Wg4      p	V	e   \        T RT	;'       g    R	/4      # V\        9   d   \        V4      '       d   \        V R
R4      # \        V4      ;_uu_ 4        V\        9   d   TM
\        V4      p
RRR4       X
e*   \        R,          ! V RV
P	                  R4      RVRV/4      # \!        W&4      pVRJ d   \        V R
RV 24      # VfP   \#        WWg4      pVP                  R4      ;'       g    / P                  R4      '       g   \%        V4      '       g   V# V'       d   \'        V4      MR;p'       d4    \        T R\)        W×W!P                  RR4      4      ;'       g    R	/4      # VP                  R4      pV'       gà   \,        ;_uu_ 4        VP/                  R\0        P3                  4       4      pRRR4       X;_uu_ 4        VP                  R4      pV'       gy    \5        VR,          \7        VP                  R4      R\9        4       4      VP                  R4      \7        VP                  R4      RR4      ;'       g    RR7      p\;        W‚V4       RRR4        VP=                  V4      p\?        VR4      '       d   VPA                  4       MR;p'       d   \        V RRR V/4      # RT;'       g    R	/p\C        W‚V4      ;p'       d   VVR!&   V\D        9   d   \G        W‚4       \        V V4      #   + '       g   i     EL‘; i  \*         d   p\        T RRT 2/4      u Rp?# Rp?ii ; i  + '       g   i     EL‰; i  \*         d%   p\        T RRT 24      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     EL+; i  \*         d—   p\I        T4      '       d   \#        YYg4      u Rp?# \J        PL                  ! \*        4      ;_uu_ 4        TPO                  4        RRR4       M  + '       g   i     M; iRTR&   \        T R\Q        T4      4      u Rp?# Rp?ii ; i)"r"  r   r*  úempty commandré  r¸  rc   Nr¬   r¥  rž   zVsnapshot restore mutates live config/state; use command.dispatch for /snapshot restorerî  rC   rÂ  Trñ  rð  r®   zPlugin command error: Úslash_workerÚ_slash_spawn_lockrŒ   rÞ   rG  r#   rH  )r#   rH  r�   zslash worker start failed: Úpop_seedr  rd  rN  ))Ú_sess_nowaitr$   rV   r%   r  r«  r  r  Ú_live_slash_command_outputr±   Ú_WORKER_BLOCKED_COMMANDSr¼  r˜  Ú_PENDING_INPUT_COMMANDSr  rò  rì  rô  rý  rÉ  rÛ  r-   rJ  Ú
setdefaultÚ	threadingÚLockÚ_SlashWorkerrá   Ú_resolve_modelÚ_attach_workerrÈ   r{  r  Ú_mirror_slash_side_effectsr  r  rù  r'   rÿ  Úcloser   )r.   r   r2   r3   r€   Úpartsrç  rÂ  rS  Úlive_outputr¿  Ú	skill_hitró  Úplugin_handlerr6   ÚworkerÚ
spawn_lockr¬   Úseedr�  rN  s   &&                   r   r  r    sK  € ä Ó,�L€Gß
Øˆ
Ø
�*‰*�Y Ó
#×
)Ñ
)Ó
+€CßÜ�C˜˜Ó/Ð/ð �J‰J�s‹O×!Ñ!¨1Ð!Ó-€EßˆE�!ŽH 2×,Ñ,Ó.€DÜ˜%“j 1”nˆ%�Ž(¨"€CØ
�*‰*�\ 2Ó
&€CÜ,¨S¸4ÓE€KØÒÜ�3˜ ;×#?Ð#?°-Ð@ÓAÐAØÔ'Ô'Ô,@À×,EÒ,EÜ�C˜ÐwÓxÐxô 
˜W×	%Õ	%ØÔ!8Ô8‘¼oÈdÓ>Sˆ÷ 
&àÒÜÐ*Ö+¨C°&¸&¿-¹-ÈÓ:LÈeÐUXÐZfÐhkÐ1lÓmÐmô ' wÓ5€IØ�DÓÜ�C˜Ð!JÈ4È&ÐQÓRÐRØÒÜ.¨s¸ÓCˆ
ð �N‰N˜8Ó$×*Ð*¨×/Ñ/°×7Ò7Ô?SÐTX×?YÒ?YØÐß:>Ô0°Ô6ÀDÐH€~ÖHð	FÜ�s˜XÔ':¸>ÐPW×YcÑYcÐdpÐrtÓYuÓ'v÷ (.ð (.Ø -ð/ó 0ð 0ð �[‰[˜Ó(€Fß÷ Ž^Ø ×+Ñ+Ð,?ÄÇÁÓAQÓRˆJ÷ çŠZØ—[‘[ Ó0ˆFßðNÜ)Ø Õ.´¸¿¹ÀGÓ8LÈgÔWeÓWgÓ0hØ%,§[¡[°Ó%@Ü!(¨¯©°WÓ)=¸zÈ4Ó!P×!XÐ!XÐTXôZ�Fô # 3°Ô8÷ ð'Ø—‘˜C“ˆÜ)0°¸×)DÒ)D�F—O‘OÔ%È"ÐMˆ4ÖMô �s˜V V¨Y¸Ð=Ó>Ð>Ø˜V×4Ð4 }Ð5ˆÜ0°¸sÓCÐCˆ7ÖCØ!(ˆG�IÑØÔ+Ô+Ü-¨cÔ;Ü�3˜Ó Ð ÷e 
&×	%Ð	%ûô( ô 	FÜ�s˜XÐ)?À¸sÐ'CÐDÓEÕEûð	Fú÷ �^ˆ^ûô !ô NÜ  TÐ-HÈÈÐ+LÓMÔM÷ ŠZûðNú÷ �ZˆZûô. ô 'Ü  ×#Ò#ä,¨S°tÓAÕAÜ× Ò ¤×+Õ+Ø�L‰LŒN÷ ,×+×+Ð+úà"&ˆ�ÑÜ�C˜œs 1›vÓ&Õ&ûð'úsÁ   Ä OÈ 1O É%O>ÊQÊ+A7PÌ+<Q Í(Q Í8	Q Î>Q ÏO	ÏO;Ï O6Ï0O;Ï6O;Ï>P	ÐQÐP<Ð,QÐ-QÐ<QÑQÑQ	ÑS9Ñ#S4Ñ?S9Ò"S4Ò'SÒ8	S4ÓSÓ"S4Ó.S9Ó4S9zinsights.getr¨  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   W  s   € ÷ 	uñ 	u”4ð 	uœDñ 	ur   c                 óä  € VP                  R ^4      p\        V4      ;_uu_ 4       pVf   \        V RR7      uuRRR4       # \        P                  4       VR,          ,
          pVP	                  RRR7       Uu. uF&  qUP                  R4      ;'       g    ^ V8¼  g   K$  VNK(  	  ppRRR4       \        V R VR	\        X4      R
\        R V 4       4      /4      # u upi   + '       g   i     L@; i)ÚdaysNr¨  )r£  i€Q éô  T)ÚlimitÚcompact_rowsÚ
started_atÚsessionsÚmessagesc              3   óD   "  € T F  qP                  R ^ 4      x € K  	  R# 5i)Úmessage_countN©r$   )rÓ   Úss   & r   rÕ   r   `  s!   é € ÐIrÑmqÐhiÏ%É%ÐP_Ðab×JcÐJcÓmqùs   ‚ )r$   Ú_profile_dbÚ_db_unavailable_errorÚtimeÚlist_sessions_richr±   r  Úsum)r.   r   r%  ÚdbÚcutoffr/  Úrowss   &&     r   r  r  V  sÑ   € à�:‰:�f˜bÓ!€Dô 
�V×	Ô	 ØŠ:Ü(¨°4Ô8÷ 
Ò	ô —‘“˜t e�|Õ+ˆØ×0Ñ0°sÈÐ0ÔNÓwÑN�a×SXÑSXÐYeÓSf×SkÐSkÐjkÐpvÑRv—�ÑNˆÐw÷	 
ô
 ˆs�V˜T :¬s°4«y¸*ÄcÑIrÑmqÓIrÓFrÐsÓtÐtùò x÷	 
×	ús/   ¦CÁ7CÁ9CÂCÂCÂ%CÃCÃC/	zrollback.listc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   d  s   € ÷ *ñ *”4ð *¤Tñ *r   c                 ó&   a € V 3R  lp\        W#4      # )c                 ó  <€ V P                   '       g   \        SR RR. /4      # V P                  V4       Uu. uF;  pRVP                  RR4      RVP                  RR4      RVP                  RR4      /NK=  	  pp\        SR RRV/4      # u upi )	rî   FÚcheckpointsÚhashr   Ú	timestamprd  ÚreasonT)rî   r±   Úlist_checkpointsr$   )rŒ  rÇ   Úcr7  r.   s   &&  €r   ÚgoÚ_.<locals>.goe  sž   ø€ Ø�{�{ˆ{Ü�s˜Y¨¨}¸bÐAÓBÐBð ×-Ñ-¨cÔ2ó4Ù2�Að ˜Ÿ™˜v rÓ*¨K¸¿¹¸{ÈBÓ9OÐQZÐ\]×\aÑ\aÐbjÐlnÓ\oÓpÙ2ð 	ð 4ä�3˜ D¨-¸Ð>Ó?Ð?ùò4s   ·AB
)Ú_with_checkpoints)r.   r   r2   rA  s   f&& r   r  r  c  s   ø€ õ@ô ˜WÓ)Ð)r   zrollback.restorei�  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   p  s   € ÷ 4ñ 4”4ð 4¤Tñ 4r   c                 óâ  aaaa€ SP                  R R4      SP                  RR4      uooS'       g   \        V RR4      # SP                  R4      e3   \        SR,          \        4      '       g   \        V RRRRR	RR
R/R7      # S'       gG   SP                  R4      '       d0   \        V R\	        R\        SP                  R4      4      4      4      # VVVV3R lp\        V \        SV4      4      # )r<  r   Ú	file_pathé®  úhash requiredr«  rŠ   Úinvalid_paramsr>  ÚfieldÚdetailzmust be a boolean©Údatar‚   rƒ   zrollback restorer„   c                 ó(  <€ \        S
W4      ;p'       d   R RRV/# T P                  T\        WS4      S;'       g    RS'       * ;'       d    S	P                  R4      RJR7      pVP                  R 4      '       db   S'       gZ   ^ pS
R,          ;_uu_ 4        \	        S
4      w  rVV'       d%    \        S
\        V4      ^,
          4      ^,          pRRR4       WCR	&   V#   \         d   p\        RT 24      ThRp?ii ; i  + '       g   i     L8; i)
ÚsuccessFrï  Nr«  T)rF  Úsaferm  z8checkpoint restored, but session history rewind failed: Úhistory_removed)	Ú_container_checkpoint_refusalr»  Ú_resolve_checkpoint_hashr$   rš   r¨   r  r-   ÚRuntimeError)rŒ  rÇ   r>  rð  Úremovedr¯  r    r�   rF  r   r2   r¿  s   &&      €€€€r   rA  rB  |  s	  ø€ Ü2°7¸CÓEÐEˆ6ÖEØ˜u g¨vÐ6Ð6à—‘˜SÔ":¸3ÀVÓ"LÐXa×XiÐXiÐeiØ&/¤-×"QÐ"Q°F·J±J¸uÓ4EÈTÐ4Qð ó Sˆà�:‰:�i× Ò ¯ØˆGØ˜×(×(Ü);¸GÓ)DÑ&�ßðvÜ"@ÀÌ#ÈlÓJ[Ð^_ÕJ_Ó"`ÐabÕ"c˜÷	 )ð )0Ð$Ñ%Øˆøô %ô vÜ*Ð-eÐfiÐejÐ+kÓlÐruÐuûðvú÷ )×(ús*   ÂDÂ.#CÃC>Ã*C9Ã9C>Ã>DÄD	)r$   r%   r:  r   r…   r±   rC  )r.   r   r2   rA  rF  r¿  s   &ff @@r   r  r  o  sØ   û€ àŸ
™
 6¨2Ó.°·
±
¸;ÈÓ0KÐ€FˆIßÜ�C˜˜Ó/Ð/Ø‡z�z�%ÓÒ$¬Z¸¸u½Ät×-LÒ-LÜ�C˜Ð/Ø"Ð$4°g¸uÀhÐPcÐdôfð 	f÷ ˜Ÿ™ Y×/Ò/Ü�C˜œ|Ð,>ÄÀWÇ[Á[ÐQjÓEkÓ@lÓmÓnÐn÷ð ô" ˆsÔ% g¨rÓ2Ó3Ð3r   zrollback.difféž  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ‘  s   € ÷ *ñ *”4ð *¤Tñ *r   c                 ó~   a aa€ VP                  R R4      ;o'       g   \        S RR4      # V VV3R lp\        SV4      # )r<  r   rG  rH  c                 óD  <€ \        SW4      ;p'       d   \        SR V4      # V P                  V\        WS	4      4      pVP	                  RR4      R,          pRVP	                  RR4      RV/p\        VSP	                  R^P4      4      ;p'       d   WeR&   \        SV4      # )rV  Údiffr   r¼  ÚstatÚcolsÚrendered)rR  r%   rZ  rS  r$   Úrender_diffr±   )
rŒ  rÇ   r>  rÚ   Úrawr�  r]  r.   r2   r¿  s
   &&     €€€r   rA  rB  •  sœ   ø€ ä2°7¸CÓEÐEˆ6ÖEÜ˜˜T 6Ó*Ð*Ø�H‰H�SÔ2°3¸VÓDÓEˆØ�e‰e�F˜BÓ Õ&ˆØ˜1Ÿ5™5 ¨Ó,¨f°cÐ:ˆÜ" 3¨¯©°F¸BÓ(?Ó@Ð@ˆ8Ö@Ø"*�JÑÜ�3˜Ó Ð r   )r$   r%   rC  )r.   r   r2   rA  r¿  s   f&f @r   r  r  �  s<   ú€ à—j‘j ¨Ó,Ð,ˆFÖ,Ü�C˜˜Ó/Ð/÷	!ô ˜W bÓ)Ð)r   c                ó2   € V ^8„  d   QhR\         R,          /# rm  rY   )r   s   "r   r   r   ¢  s   € ÷ 'ñ '¼¸d½
ñ 'r   c                ó(  € V P                  R4      ;'       g    Rp\        W2R7      p \        V 4      ;_uu_ 4        VP                  V4      uuRRR4       \	        V4       #   + '       g   i     M; i \	        T4       R#   \	        T4       i ; i)a   Why host checkpoints are off limits for a container-backed session, else ``None``.

Classifies with the identity and scopes a turn binds (prompt_turn.py): the session key is the
tool-call task id, the session context drives the terminal registry lookup, and the profile
scope supplies the terminal policy; otherwise a cached launch-profile environment or the launch
config would answer for another profile's session.rŒ   ÚdefaultrÌ  N)r$   rÒ  r,   Úunsupported_backend_reasonrÖ  )r2   rŒ  rÇ   r  rØ  s   &&&  r   rR  rR  ¢  st   € ð �k‰k˜-Ó(×5Ð5¨I€GÜ! 'Ô3€Fð'Ü+¨G×4Õ4Ø×1Ñ1°'Ó:÷ 5Ñ4ô 	˜vÕ&÷ 5×4úÐ4ô 	˜vÖ&øÔ˜vÕ&ús"   ©B ¼A#Á
B Á#A3	Á.B ÂBzbrowser.managec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ´  s   € ÷ 8ñ 8”4ð 8œDñ 8r   c           
      óB  € VP                  R R4      pVR9   dT   ^ RIHpHp VR8X  d   V! VP                  RR4      RJ4       \	        4       p\        V R\        V4      RVR	V! 4       /4      # VR
8X  d   \        V 4      # VR8X  d   \        W4      # \        V RRV 24      # )rg  r%  Úuse)Úis_browser_use_cli_modeÚset_browser_use_moderî   TFÚ	connectedÚurlÚbrowser_useÚ
disconnectÚconnecti¯  zunknown action: >   rf  r%  )
r$   Útools.browser_use_clirg  rh  Ú_resolve_browser_cdp_urlr±   r   Ú_browser_disconnectÚ_browser_connectr%   )r.   r   rg  rg  rh  rj  s   &&    r   r  r  ²  s¦   € ð �Z‰Z˜ (Ó+€FØÐ"Ô"ßWØ�UŒ?Ù  §¡¨I°tÓ!<ÀEÐ!IÔJÜ&Ó(ˆÜ�3˜¤d¨3£i°¸¸]ÑLcÓLeÐfÓgÐgØ�ÔÜ" 3Ó'Ð'Ø�ÔÜ Ó,Ð,Ü��TÐ-¨f¨XÐ6Ó7Ð7r   zconfig.showr�   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ä  s   € ÷ ,ñ ,”4ð ,œDñ ,r   c                 ó‚  € \        4       p\        R 4      P                  pV! RR4      ;'       g    VP                  RR4      p\	        V4      ^8”  d	   RVRR  2MRpV! RR4      ;'       g    VP                  RR4      pR	R
RR
\        4       .RT;'       g    R.RV../R	RRR\        \        VR4      4      .RRP                  VP                  R. 4      4      ;'       g    R.R\        VP                  RR4      4      ../R	RRR\        P                  4       .R\        \        4       4      ../.p\        V RV/4      # )úagent.secret_scopeÚHERMES_API_KEYr   rO  z****Nz	(not set)ÚHERMES_BASE_URLrN  ÚtitleÚModelr7  zBase URLz	(default)zAPI KeyÚAgentz	Max Turnsr&  ÚToolsetsr
  rß   r«  ÚVerboseÚverboseFÚEnvironmentzWorking DirzConfig FileÚsectionséüÿÿÿ)rš  r]   Ú
get_secretr$   r  r  r   Ú_cfg_max_turnsr×   rÉ   rÊ   Ú_active_config_pathr±   )r.   r   r;  r€  rO  ÚmaskedrN  r~  s   &&      r   r  r  Ã  sY  € ä
‹+€CÜÐ0Ó1×<Ñ<€JÙÐ)¨2Ó.×HÐH°#·'±'¸)ÀRÓ2H€GÜ&)¨'£l°QÔ&6ˆt�G˜B˜C�L�>Ñ"¸K€FÙÐ+¨RÓ0×KÐK°C·G±G¸JÈÓ4K€Hà	�'˜6Ø”nÓ&Ð'¨*°h×6MÐ6MÀ+Ð)NÐQZÐ\bÐPcð$eð 	fà	�'˜6Øœ#œn¨S°#Ó6Ó7Ð8Ø˜Ÿ™ 3§7¡7Ð+=¸rÓ#BÓC×LÐLÀuÐMØœ˜CŸG™G I¨uÓ5Ó6Ð7ð$9ð 	:ð 
�- ¨=¼"¿)¹)»+Ð*FÈÔX[Ô\oÓ\qÓXrÐHsÐ)tÐuð€Hô ˆs�Z Ð*Ó+Ð+r   z
tools.showiª  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ø  s   € ÷ Eñ E”4ð EœDñ Er   c           	      óÔ  € \        R 4      p\        P                  VP                  RR4      4      p\        V4      w  rEVP	                  WERRR7      p/ p\        VR R7       Fµ  pVR,          R,          p	\        VR,          P                  R	R4      ;'       g    R4      P                  R
4      ^ ,          p
RV
9   d   V
RV
P                  R4      ^,            p
TP                  VP                  V	4      ;'       g    R. 4      P                  RV	R	V
/4       K·  	  \        VP                  4       4       UUu. uF  w  r¼RVRV/NK  	  ppp\        V RVR\        V4      /4      # u uppi )Úmodel_toolsrc   r   T)rß   rà   rG  Úskip_tool_search_assemblyc                 ó"   € V R ,          R,          # )ÚfunctionrC   r=   )Úts   &r   rH   r§  à  s   € ¨A¨j­M¸&Ö,Ar   )r/   r‰  rC   rì   rÑ   z. NrØ  rð   r~  Útotal)r]   rñ   r$   ræ   Úget_tool_definitionsró   r   r«  Úindexr  Úget_toolset_for_toolr÷   rø   r±   r  )r.   r   Úmtr2   rî   rW  rð   r~  ÚtoolrC   Údescr  r7  Úsections_outs   &&            r   r  r  ×  sX  € ä	�MÓ	"€BÜ�m‰m˜FŸJ™J |°RÓ8Ó9€GÜ)¨'Ó2Ñ€Gà×#Ñ#°WÐeiØ>Bð $ó D€Eà€HÜ�uÑ"A×BˆØ�JÕ Õ'ˆÜ�4˜
Õ#×'Ñ'¨°rÓ:×@Ð@¸bÓA×GÑGÈÓMÈaÕPˆØ�4Œ<ØÐ.˜$Ÿ*™* TÓ*¨QÕ.Ð/ˆDØ×Ñ˜B×3Ñ3°DÓ9×FÐF¸YÈÓK×RÑRÐTZÐ\`ÐboÐquÐSvÖwñ Cô ?EÀXÇ^Á^ÓEUÔ>VÔWÑ>V±7°1�V˜Q ¨Ó.Ñ>V€LÑWÜˆs�Z ¨w¼¸E»
ÐCÓDÐDùó Xs   Ä7E$ztools.configurei«  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ë  s   € ÷ .ñ .”4ð .œDñ .r   c                 ó,  € VP                  R R4      pRpV'       d,   \        W4      w  r4V'       g   \        WR4      ;p'       d   V# T;'       g    / P                  R4      p\        V4      p \	        WW#4      \        V4       #   \        T4       i ; i)rc   r   Nrð   r#   )r$   r  r†   Ú_bind_build_profile_scopesÚ_configure_session_toolsÚ_release_build_profile_scopes)r.   r   rS  r2   r3   r5   Úscopess   &&     r   r  r  ê  s€   € à
�*‰*�\ 2Ó
&€CØ€Gß
Ü# FÓ0‰ˆßœ+ c°GÓ<Ð<�3Ö<ØˆJà�MˆM�r×Ñ˜~Ó.€DÜ'¨Ó-€Fð.Ü'¨°SÓBä% fÕ-øÔ% fÕ-ús   Á/B ÂBc                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r   rS  r   rS   )r   s   "r   r   r   û  s&   € ÷ añ a¬$ð a´Sð aÄdñ ar   c                 óÞ  € \        VP                  R R4      ;'       g    R4      P                  4       P                  4       pVP                  R. 4      ;'       g    .  Uu. uF=  p\        V4      P                  4       '       g   K$  \        V4      P                  4       NK?  	  ppVR9  d   \	        V RRV 24      # V'       g   \	        V RR4      # \        R4      \        R4      r‡VP                  4       p	VP                   U
Uu0 uF  w  p
 qºkK
  	  upp
VP                  4       ,          pV Uu. uF  pR	V9   g   K  VNK  	  ppV Uu. uF  pR	V9  g   K  W\9  g   K  VNK  	  ppV Uu. uF  pR	V9  g   K  W\9   g   K  VNK  	  ppV'       d   VP                  V	R
Wô4       \        4       ^,          pV F5  pVP                  R	^4      ^ ,          p\        V VV4      ;p'       g   K3  Vu # 	  V'       d   VP                  W�V4      M	\        4       pVP                  V	4       V'       d   \!        W#4      MRp\#        VP%                  VP                  4       R
RR7      4      pV Uu. uF4  pW^9  g   K  R	V9  g!   VP                  R	^4      ^ ,          V9  g   K2  VNK6  	  pp\'        V RVRVRVR\#        V4      R\)        V4      RV/4      # u upi u upp
i u upi u upi u upi u upi )rg  r   Únamesé±  zunknown tools action: rž   znames requiredr  zhermes_cli.tools_configÚ:ÚcliNF)Úinclude_default_mcp_serversÚchangedrß   rù   Úmissing_serversrœ  rØ  >   ÚenableÚdisable)r   r$   rV   r  r%   r]   r9  ÚCONFIGURABLE_TOOLSETSÚ_get_plugin_toolset_keysÚ_apply_toolset_changern   r«  rz   Ú_apply_mcp_changerò   Úsave_configÚ_reset_session_agentró   Ú_get_platform_toolsr±   r   )r.   r   rS  r2   rg  rC   Útargetsrâ  Útcr;  Úts_keyr  Úvalid_toolsetsÚmcp_targetsrØ  Útoolset_targetsrt   r¿  Úserver_namer3   r¡  rù   rî   r   s   &&&&                    r   r–  r–  û  s½  € Ü�—‘˜H bÓ)×/Ð/¨RÓ0×6Ñ6Ó8×>Ñ>Ó@€FØ-3¯Z©Z¸ÀÓ-D×-JÐ-JÈÐ-JÓ`Ñ-J TÌcÐRVËiÏoÉo×N_Ô Œs�4‹y�‰Ö Ñ-J€GÐ`ØÐ*Ô*Ü�C˜Ð!7¸°xÐ@ÓAÐAßÜ�C˜Ð/Ó0Ð0ÜÐ+Ó,¬jÐ9RÓ.SˆØ
�.‰.Ó
€CØ13×1IÒ1IÔJÑ1I¡ ¨¨A’fÑ1IÒJÈR×MhÑMhÓMjÕj€NÙ$+Ó;¡G˜D¨s°d©{—4�4¡G€KÐ;Ù 'ÓZ¡˜¨3°d©?Œt¸tÑ?Y�tˆt¡€GÐZÙ(/Ó^© °3¸d±?”tÀtÑG]—t�t©€OÐ^ßØ
× Ñ   e¨_ÔEÜÓ  Õ#€GÛˆØ—l‘l 3¨Ó*¨1Õ-ˆÜ)¨#¨{¸GÓDÐDˆ3×DÐDØŠJñ ÷ IT�b×*Ñ*¨3¸VÔDÔY\ÓY^€OØ‡N�N�3Ôß18Ô Ô-¸d€DÜ�R×+Ñ+¨B¯N©NÓ,<¸eÐafÐ+ÓgÓh€Gá ófÙ �ØÑô 	Ø$'¨t¤O°t·z±zÀ#ÀqÓ7IÈ!Õ7LÐTcÑ7c÷ 	ˆ™ð ð fô ˆsØ�7Ð.°¸ÀØœ6 /Ó2°G¼TÀ'»]ÈIÐW^ð`ó að aùò3 aùó KùÚ;ùÚZùÚ^ùòfsT   Á !KÂKÄKÄ0	KÄ>KÅ
	K ÅK Å K Å,	K%Å:K%ÆK%É*K*É7"K*ÊK*zcron.manageiŸ  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ =ñ =”4ð =œDñ =r   c                óx  € \        R4      P                  pVP                  RR4      VP                  RR4      rCVR8X  d\   \        VP                  RR4      4      p\        P                  V! RVR7      4      p\        VR	4      ;p'       d   WvR
&   \        W4      # VR8X  dÞ   T! RYAP                  RR4      VP                  RR4      \        VP                  RR4      4      P                  4       P                  4       '       d   \        VR,          4      MRVP                  R4      e   \        VP                  R4      4      MR\        VR4      ;'       g    RR7      p\        V \        P                  V4      4      # VR9   d'   \        V \        P                  V! W4R7      4      4      # \        V RRV 24      # )zPcronjob() keys off HERMES_HOME, so ``profile`` reaches a per-profile cron store.ztools.cronjob_toolsrg  ré   rC   r   Úinclude_disabledF)rg  r´  r    r	   ÚaddÚcreateÚschedulerŠ  ÚrepeatNÚ
continuityÚdeliver)rg  rC   r·  rŠ  r¸  r¹  rº  )rg  Újob_idi°  zunknown cron action: >   ÚpauseÚremoveÚresume)r]   Úcronjobr$   Úis_truthy_valueÚjsonÚloadsr)   r±   r   rV   Úisdigitr   r%   )	r.   r   r¿  rg  Újidr´  rð  r    r_  s	   &&       r   r  r    s~  € ô Ð.Ó/×7Ñ7€GØ—*‘*˜X vÓ.°·
±
¸6À2Ó0FˆCØ�Ôä*¨6¯:©:Ð6HÈ%Ó+PÓQÐÜ—‘™G¨6ÐDTÔUÓVˆô ˜v yÓ1Ð1ˆ7Ö1Ø&�8ÑÜ�3ÓÐØ�„áØ #·
±
¸:ÀrÓ0JÐSY×S]ÑS]Ð^fÐhjÓSkÜ,/°·
±
¸8ÀRÓ0HÓ,I×,OÑ,OÓ,Q×,YÑ,Y×,[Ò,[”3�v˜hÕ'Ô(ÐaeØDJÇJÁJÈ|ÓD\ÒDh” v§z¡z°,Ó'?Ô@ÐnrÜ˜V YÓ/×7Ð7°4ô	9ˆô
 �3œŸ
™
 3›Ó(Ð(ØÐ.Ô.Ü�3œŸ
™
¡7°&Ô#EÓFÓGÐGÜ��TÐ2°6°(Ð;Ó<Ð<r   zlearning.framesiˆ  zlearning.frames failed: c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   8  s   € ÷ 	añ 	a”4ð 	aœDñ 	ar   c                ó
  a€  V3R lR 4       w  r#p\        R4      P                  4       p\        R4      P                  p\        W! V\        ^V4      \        ^
V4      VR7      4      #   \         \        3 d	    ^P^^0rCp Loi ; i)z`Pre-render the ``/journey`` timeline (frames + legend/summary metadata) so Ink walks it locally.c              3   óp   <"  € T F+  w  r\        SP                  W4      ;'       g    T4      x € K-  	  R # 5irN   )r   r$   )rÓ   ÚkÚdr   s   &  €r   rÕ   r   ;  s1   øé € ð aÙ3_©4¨1ŒC�—
‘
˜1Ó ×%Ð% A×&Ð&Ó3_ùs   ƒ36zagent.learning_graphzagent.learning_graph_render)r\  r7  Úframes))r\  r$  )r7  é   )rÊ  é0   )Ú	TypeErrorr©   r]   Úbuild_learning_graphÚrender_framesr±   rª  )r.   r   r\  r7  rÊ  ÚgraphrÏ  s   &f     r   r  r  7  s�   ø€ ð(ôaÙ3_óaÑˆ�Fô Ð-Ó.×CÑCÓE€EÜÐ<Ó=×KÑK€MÜˆs�M %¬c°"°d«mÄ#ÀbÈ$Ã-ÐX^Ô_Ó`Ð`øô	 ”zÐ"ô (Ø  R�Fˆ‘Fð(ús   ƒA) Á)BÂBc                ó0   € V ^8„  d   QhR\         R\        /# )r   Úfn_nameÚarg_keys)r   r¦   )r   s   "r   r   r   D  s   € ÷ ñ ¤ð ¬uñ r   c                ó   a a€ R VV 3R llpV# )z[learning.* body: ``agent.learning_mutations.<fn_name>(*str(params[k]) for k in arg_keys)``.c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   Ú(_learning_mutation.<locals>.__annotate__G  s   € ÷ Iñ Iœ$ð I¤4ñ Ir   c                 ób   <a€ \        \        R 4      S4      p\        W! V3R lS 4       !  4      # )zagent.learning_mutationsc              3   óZ   <"  € T F   p\        SP                  VR 4      4      x € K"  	  R# 5i©r   N©r   r$   ©rÓ   rÈ  r   s   & €r   rÕ   Ú3_learning_mutation.<locals>.body.<locals>.<genexpr>I  s$   øé € ÐF¹X¸œS §¡¨A¨rÓ!2×3Ð3»Xùs   ƒ(+r1  )r.   r   r.  rÓ  rÒ  s   &f €€r   r7   Ú _learning_mutation.<locals>.bodyG  s-   ù€ Ü”ZÐ :Ó;¸WÓEˆÜ�3˜ÔF¹XÓFÑGÓHÐHr   r=   )rÒ  rÓ  r7   s   ff r   Ú_learning_mutationrÞ  D  s   ù€ ÷Iñ Ið €Kr   z	learning.z	 failed: c                 ó   € \        R 4      \        R4      rCVP                  W#P                  VP                  4       4      R^R7      ;'       g    . p\	        T RV Uu. uF!  pRVP
                  RVP                  4       /NK#  	  up/4      # u upi )ztools.skills_hub_searchztools.skills_hub_githubr«  )Úsource_filterr'  ÚresultsrC   rì   )r]   Úunified_searchÚcreate_source_routerÚ
GitHubAuthr±   rC   r¸  )r.   r   ÚqueryÚsearchÚghr_  rÚ   s   &&&    r   Ú_skills_searchrè  V  sƒ   € ÜÐ5Ó6¼
ÐC\Ó8]ˆBØ
×
Ñ
 ×'BÑ'BÀ2Ç=Á=Ã?Ó'SÐchÐprÐ
Ó
s×
yÐ
yÐwy€CÜˆs�YÑX[Ó \ÑX[ÐST &¨!¯&©&°-ÀÇÁÃÓ!NÑX[Ñ \Ð]Ó^Ð^ùÒ \s   Á'Bc                óÞ  €  ! R R4      pV! 4       p\        R4      P                  VRVR7      p\        R4      P                  pVRJ ;'       g    VRJ ;'       d    \        V! V4      4      pV'       gk   RP	                  VP
                  RR 4      P                  4       p\        T R	V'       d   VP                  4       R,          MR
RRRTRT;'       g    R/R7      # \        V RRRV/4      # )aM  Install via `do_install(skip_confirm=True)`; the profile-scoped console is a sink, so the
RPC must carry the outcome itself. The install path prints a full scan report before the
gate (skills_hub._scan_quarantined); a blocked or failed install returned `installed: True`
before, which read as success to every caller (#63307 Part B).c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Ú!_skills_install.<locals>._Captureia  zIConsole stand-in: collect lines so the verdict travels with the response.c                ó   € . V n         R # rN   ©Úlines)Úselfs   &r   Ú__init__Ú*_skills_install.<locals>._Capture.__init__d  s	   € ØˆDŽJr   c                óh   € V P                   P                  R P                  R V 4       4      4       R# )r¨  c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5irN   rY   )rÓ   Úas   & r   rÕ   Ú:_skills_install.<locals>._Capture.print.<locals>.<genexpr>h  s   é € Ð&<±t°!¤s¨1§v v³tùs   ‚N)rî  r÷   r×   )rï  r1   Úkwargss   &*,r   ÚprintÚ'_skills_install.<locals>._Capture.printg  s#   € Ø�J‰J×Ñ˜cŸh™hÑ&<±tÓ&<Ó<Ö=r   rí  N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r:   rð  r÷  Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   Ú_Capturerë  a  s   ø‡ € ÙWò	÷	>ð 	>r   r   úhermes_cli.skills_hubT)Úskip_confirmÚconsoleztools.skills_sync_bundled_opsNrÑ   r  zskill install failedÚ	installedFrC   ÚlogrL  iôÿÿÿrª  )
r]   Ú
do_installÚbundled_skill_for_installr   r×   rî  rV   r%   Ú
splitlinesr±   )	r.   r   rå  r   ÚcapturedÚverdictÚbundledr  r  s	   &&&      r   Ú_skills_installr  \  sä   € ÷
>ñ >ñ ‹z€HÜÐ0Ó1×<Ñ<¸UÐQUÐ_gÐ<Óh€GÜÐ8Ó9×SÑS€GØ˜4�×MÐM G¨t O×$LÐ$L¼¹WÀU»^Ó8L€Ißð �i‰i˜Ÿ™ s tÐ,Ó-×3Ñ3Ó5ˆÜ�C˜·s˜sŸ~™~Ó/°Ö3Ð@VØ% u¨f°e¸UÀCÇKÀKÈ4ÐPôRð 	Räˆs�[ $¨°Ð6Ó7Ð7r   c                 ó$  € \        VP                  R ^ 4      ;'       g    ^ 4      ;'       g$    VP                  4       '       d   \        V4      M^p\        R4      P                  p\        W! V\        VP                  R^4      4      R7      4      # )Úpager  Ú	page_size)r  r  )r   r$   rÃ  r]   Úbrowse_skillsr±   )r.   r   rå  ÚpgÚbrowses   &&&  r   Ú_skills_browser  w  sm   € Ü	ˆV�Z‰Z˜ Ó"×'Ð' aÓ	(×	RÐ	R¸5¿=¹=¿?º?¬S°¬ZÐPQ€BÜÐ/Ó0×>Ñ>€FÜˆs�F ¬c°&·*±*¸[È"Ó2MÓ.NÔOÓPÐPr   ré   c                 óL   € \        V R \        R4      P                  4       /4      # )rë  zhermes_cli.banner)r±   r]   Úget_available_skills©r.   r   rå  s   &&&r   rH   rH   ~  s   € ¤s¨3°¼:ÐFYÓ;Z×;oÑ;oÓ;qÐ0rÔ'sr   ræ  Úinstallr  Úinspectc                 ób   € \        T R \        R4      P                  V4      ;'       g    / /4      # )rù   r  )r±   r]   Úinspect_skillr  s   &&&r   rH   rH   €  s.   € ¬#Øˆf”jÐ!8Ó9×GÑGÈÓN×TÐTÐRTÐUô+Wr   c                óH   € V ^8„  d   QhR\         R\         R\        R\         /# )r   r   Útablerˆ   r   rS   )r   s   "r   r   r   „  s(   € ÷ (ñ (œTð (¬$ð (´sð (Ätñ (r   c                óŠ   € VP                  RR4      pVP                  V4      pVf   \        V RRV RV 24      # V! W.VO5!  # )uU   Dispatch ``params['action']`` (default ``list``) through ``table``; unknown â†’ 4017.rg  ré   rœ  zunknown z	 action: rx   )r.   r   r  rˆ   r:  rg  r8   s   &&&&*  r   Ú_run_actionr  „  sQ   € à�Z‰Z˜ &Ó)€FØ�i‰i˜Ó€GØ‚Ü�C˜ ¨%¨°	¸&¸ÐBÓCÐCÙ�3Ð' Ó'Ð'r   zskills.managec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ž  s   € ÷ Xñ X”4ð XœDñ Xr   c           
     óF   € \        W\        RVP                  RR4      4      # )z[list/install use the scoped profile's skills dir; search/browse/inspect hit the shared hub.rë  rå  r   )r  Ú_SKILLS_ACTIONSr$   ©r.   r   s   &&r   r  r  �  s!   € ô �s¤O°X¸v¿z¹zÈ'ÐSUÓ?VÓWÐWr   zskills.reloadi¡  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ”  s   € ÷ Dñ D”4ð DœDñ Dr   c                 óä  € \        \        P                  VP                  R R4      4      \        V4      VP                  R4      R7      ;_uu_ 4        \	        R4      P                  4       pRRR4       XP                  R4      ;'       g    . VP                  R4      ;'       g    . rCR.V'       g	   V'       d   . MR	.,           pR
V3RV33 F8  w  rgV'       g   K  VP                  V4       VP                  R V 4       4       K:  	  TP                  \        VP                  R4      ;'       g    ^ 4       R24       \        V RRP                  V4      RV/4      #   + '       g   i     Lû; i)rc   r   r    r”  rê  NÚaddedrU  zReloading skills...zNo new skills detected.zAdded skills:zRemoved skills:c              3   óL   "  € T F  pR VP                  RR4       2x € K  	  R# 5i)z  - rC   r   Nr.  )rÓ   Úitems   & r   rÕ   r   Ÿ  s#   é € ÐIÁ5¸4˜4 §¡¨°Ó 4Ð5Õ6Ã5ùs   ‚"$r‹  z skill(s) availabler¬   rÑ   rð  )r˜  rñ   r$   r™  r]   Úreload_skillsr÷   Úextendr   r±   r×   )r.   r   rð  r%  rU  rî  rˆ   rø   s   &&      r   r  r  “  s-  € ô 
œYŸ]™]¨6¯:©:°lÀBÓ+GÓHÌoÐ^dÓNeØ%+§Z¡Z°	Ó%:÷
<ö 
<äÐ2Ó3×AÑAÓCˆ÷
<ð —Z‘Z Ó(×.Ð.¨B°·
±
¸9Ó0E×0KÐ0KÈˆ7Ø"Ð#¯U·g¡rÐD]ÐC^Õ_€EØ)¨5Ð1Ð4EÀwÐ3OÓP‰ˆß‰5Ø�L‰L˜ÔØ�L‰LÑIÁ5ÓIÖIñ Qð 
‡L�L”C˜Ÿ
™
 7Ó+×0Ð0¨qÓ1Ð2Ð2EÐFÔGÜˆs�X˜tŸy™y¨Ó/°¸6ÐBÓCÐC÷
<÷ 
<ús   ÁEÅE/	zmcp.catalogc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ¨  s   € ÷ &ñ &”4ð &œDñ &r   c                óz  € \        R4      p. pVP                  4        Fõ  p \        VRR4      ;'       g    .  Uu. uF  p\        V4      NK  	  pp\        VRR4      pTP                  RVP                  R\        VRR4      ;'       g    RR\        VRR4      R	\        VP                  VP                  4      4      R
\        VP                  VP                  4      4      RTR\        \        VRR4      ;'       g    T;'       g    R4      /4       K÷  	  \        V RV/4      # u upi   \         d    . p Lèi ; i)zf``{servers: [{name, description, installed, enabled, requires: [env keys], transport}]}`` per profile.úhermes_cli.mcp_catalogÚenv_keysNÚ	transportrC   rì   r   Úconnector_slugr  rî   ÚrequiresÚkindÚstdiorq   )r]   Úlist_catalográ   r   r-   r÷   rC   r   Úis_installedÚ
is_enabledr±   )r.   r   Úmcp_catalogrã  ÚentryrÈ  r0  r.  s   &&      r   r  r  §  s2  € ô Ð5Ó6€KØ
€CØ×)Ñ)Ö+ˆð	Ü)0°¸
ÀDÓ)I×)OÐ)OÈRÐ)OÓQÑ)O 1œ˜AžÑ)OˆHÐQô ˜E ;°Ó5ˆ	Ø�
‰
Ø�E—J‘J ¬w°u¸mÈRÓ/P×/VÐ/VÐTVØœg eÐ-=¸tÓDØœ˜k×6Ñ6°u·z±zÓBÓCØ”t˜K×2Ñ2°5·:±:Ó>Ó?ÀÈXØœœW Y°¸Ó;×SÐS¸y×SÐSÈGÓTðVö 	Wñ ,ô ˆs�Y Ð$Ó%Ð%ùò RøÜô 	ØŠHð	ús'   ¢D*¶D*»D%ÁD*Ä%D*Ä*D:Ä9D:)r   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ¼  s   € ÷ ñ ”4ð œDñ r   c                ó¸   € \        4       w  r#\        T R\        VP                  4       4       UUu. uF  w  rE\	        WEW4,          4      NK  	  upp/4      # u uppi )zs``{servers: [{name, transport, url, command, args, env (key names), auth, oauth_tokens_present,
enabled, tools}]}``rq   )rn   r±   ró   rø   Ú_mcp_summarize_server)r.   r   rq   rt   rC   r;  s   &&    r   r  r  »  s]   € ô (Ó)Ñ€GÜˆs�YÜIOÐPW×P]ÑP]ÓP_ÔI`ô!ÙI`¹I¸DÔ˜d¨­Ö7ÑI`ò!ð ó ð ùó !s   °Ar%  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Æ  s   € ÷ /ñ /”4ð /œDñ /r   c                ó8  € ^ RI p\        R4      p\        4       w  rE\        R4      P                  4       ;'       g1    VP	                  4       VP	                  VP                  4       4      8H  pRp\        R4      P                  WFR7      p\        T RV U	U
u. uFL  p	/ V U
u/ uF  qªV	9   g   K  W©V
,          bK  	  up
CRWYR,          ,          e   R	MR
R	WYR,          ,          /CNKN  	  up
p	R\        VP                  4       R,          4      /4      # u up
i u up
p	i )a  ``{servers: [{name, transport, tools, connected, disabled, status}], checked_at}`` from cached
runtime state; never connects, probes, or starts auth. Under a multiplexer the runtime view is the
scoped profile's; otherwise it is shown only when ``profile`` is the launch profile.NrI  rt  rC   rj  )Úinclude_runtimerq   r  ry   ÚconfigÚ
checked_atiè  )rC   r.  rð   ri  rW  r%  )	r2  r]   rn   Úis_multiplex_activerB  rK  Úget_mcp_statusr±   r   )r.   r   r2  râ  Ú
configuredrt   r=  rP  rq   r6   rÈ  s   &&         r   r  r  Å  s  € ó
 Ü	Ð&Ó	'€BÜ*Ó,Ñ€JÜ!Ð"6Ó7×KÑKÓM÷ cð cØ×,Ñ,Ó.°"×2DÑ2DÀR×E_ÑE_ÓEaÓ2bÑbð àL€DÜÐ3Ó4×CÑCÀJÐCÓp€GÜˆs�Yá07ô!á07¨1ð	'™TÓ,™T˜¨!¡VŒGˆA��tŠG™TÑ,ð 	'¨hÀGÈfÍIÕDVÒDb¹ÐhpØ	�7˜V�9Õ%ô	'Ù07ò!ð ”S˜Ÿ™› tÕ+Ó,ð.ó /ð /ùÚ,ùó!s   Â
DÂ DÂ-DÂ:.DÄDrµ  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ø  s   € ÷ '^ñ '^”4ð '^œDñ '^r   c                ó  € \        R4      p\        VR4      \        VR4      rC\        4       w  rV\        WV4      ;p'       d   V# W59   d   \	        V RRV R24      # VP                  R4      p\        V\        4      '       d   \        V4      M/ p	\        R4      p
R	pV'       d×   V	P                  R
4      '       gÀ   V	P                  R4      '       g©   V
P                  V4      pVe=   V
P                  VR	R7      P                  4        F  w  rÍV	P                  WÍ4       K  	  MW TP                  Y4V	P                  R
4      V	P                  R4      \        V	P                  R4      ;'       g    . 4      V	R7       V	P                  R
4      '       g%   V	P                  R4      '       g   \	        V RR4      # VP                  R4      ;p'       d   VP                  V\!        V4      4      V	R&   VP#                  W94      p\        R4      P%                  W¹V4       V'       g   \	        V RRV R24      # VP'                  4       P                  W94      p\)        V RRRVR\+        VV4      /4      #   \         d    \	        T RRT 24      u # i ; i)uÆ   Add ``name`` from ``preset`` (catalog id) and/or ``config`` (url/command/args/env/headers/auth/
tools); ``bearer_token`` goes to the profile's .env (only the header template persists). Dup â†’ 4090.ri   rC   rV  rw   rp   z' already existsr>  r,  Nrj  r"  )Úinstall_dirr1   )Úpreset_namerj  r"  Úcmd_argsÚserver_configr   z%Unknown MCP catalog entry or preset: zLconfig must specify a 'url' (http) or 'command' (stdio), or a valid 'preset'Úbearer_tokenÚheadersrj   rŠ   z1' rejected: suspicious command/args configurationÚokTÚserver)r]   r)   rn   rz   r%   r$   r:  r   Ú	get_entryÚ_build_server_configrø   r  Ú_apply_mcp_presetré   r©   Ú_save_bearer_auth_tokenr   Ú_save_mcp_serverÚrecord_mcp_addrk   r±   r:  )r.   r   ÚmcrC   rV  rq   rt   r3   Úraw_cfgrH  Úcatalogr7  r/   r]  rI  Úsaved_okrh  s   &&               r   r  r  ×  sj  € ô 
Ð+Ó	,€BÜ˜F FÓ+¬X°f¸hÓ-Gˆ&Ü'Ó)Ñ€GÜ% c°Ó9Ð9€sÖ9Øˆ
Ø„Ü�C˜ ¨$¨Ð/?Ð@ÓAÐAØ�j‰j˜Ó"€GÜ+5°g¼t×+DÒ+Dœ$˜wœ-È"€Mô Ð1Ó2€GØ€Eß�}×(Ñ(¨×/Ò/°=×3DÑ3DÀY×3OÒ3OØ×!Ñ! &Ó)ˆØÒØ%×:Ñ:¸5ÈdÐ:ÓS×YÑYÖ[‘
�Ø×(Ñ(¨Ö4ò \ðYØ×$Ñ$Ø°-×2CÑ2CÀEÓ2JØ)×-Ñ-¨iÓ8Ü! -×"3Ñ"3°FÓ";×"AÐ"A¸rÓBÐR_ð %ô að ×Ñ˜U×#Ò#¨M×,=Ñ,=¸i×,HÒ,HÜ�C˜ÐmÓnÐnØ—z‘z .Ó1Ð1€|Ö1Ø#%×#=Ñ#=¸dÄCÈÓDUÓ#Vˆ�iÑ Ø×"Ñ" 4Ó7€HÜÐ,Ó-×<Ñ<¸UÐS[Ô\ßÜ�C˜ ¨$¨Ð/`ÐaÓbÐbØ×ÑÓ!×%Ñ% dÓ:€EÜˆs�T˜4 ¨¨xÔ9NÈtÐUZÓ9[Ð\Ó]Ð]øô ô YÜ˜C Ð)NÈvÈhÐ'WÓXÒXðYús   Ä%AI- Å.I- É-JÊ
JÚset_api_keyr]  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ rñ r”4ð rœDñ rr   c                ó¼  € \        R4      \        R4      r2\        W4      w  rEpV'       d   V# VP                  R4      p\        VR4      ;'       g    VP	                  V4      pWT,          p	\        V	\        4      '       g   \        V RR4      # V	P                  R4      '       dŽ   VP                  \        V4      4      p
V
'       d   V
P                  4       R8X  d   \        V R	R
4      # VP                  WŠ4       WƒP	                  V4      8H  pV'       d   VP                  V4      MRRV R2/V	R&   MYVP                  V\        V4      4       V	P                  R4      p\        V\        4      '       d   TM/ V	R&   RV R2V	R,          V&   VP                  4       pW�P                  R/ 4      V&   VP                  V4       \!        V RRRVRVR\#        WI4      /4      # )u«   Secret â†’ profile .env under ``env_var`` (default ``MCP_<NAME>_API_KEY``); config.yaml gets only
a ``${ENV}`` reference (Bearer header for http, ``env`` entry for stdio).r  ri   r]  Úenv_varrŠ   zmalformed server configrj  Úbearerr   zvalue is not a valid credentialÚAuthorizationz	Bearer ${Ú}rJ  rÃ   z${Úmcp_serversrK  TrC   rL  )r]   r~   r$   r)   Ú_env_key_for_serverr:  r   r%   Ú_strip_bearer_prefixr   r  Úsave_env_valueÚ_bearer_auth_headersr9  r  r¨  r±   r:  )r.   r   râ  rS  rC   rq   r3   r]  rZ  r7  Ú
normalizedÚ
is_defaultÚ	env_blockr;  s   &&            r   r  r    s¶  € ô Ð+Ó,¬jÐ9PÓ.QˆÜ4°SÓAÑ€D�3ß
Øˆ
Ø�J‰J�wÓ€EÜ�v˜yÓ)×IÐI¨R×-CÑ-CÀDÓ-I€GØ�M€EÜ�eœT×"Ò"Ü�C˜Ð8Ó9Ð9Ø‡y�y�×ÒØ×,Ñ,¬S°«ZÓ8ˆ
ß˜Z×-Ñ-Ó/°8Ô;Ü˜˜TÐ#DÓEÐEØ
×Ñ˜'Ô.Ø× 6Ñ 6°tÓ <Ñ<ˆ
ç-7ˆB×#Ñ# DÔ)¸oÐQ[Ð\cÐ[dÐdfÐOgÐ=hð 	ˆiÒð 	×Ñ˜'¤3 u£:Ô.Ø—I‘I˜eÓ$ˆ	Ü$.¨y¼$×$?Ò$?‘yÀRˆˆe‰Ø"% g Y¨bÐ 1ˆˆe��WÑØ
�.‰.Ó
€CØ.3‡N�N�= "Ó% dÑ+Ø‡N�N�3ÔÜˆs�T˜4 ¨¨y¸'À8ÔMbÐcgÓMoÐpÓqÐqr   Útestc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   #  s   € ÷ iñ i”4ð iœDñ ir   c                ól  a € \        R4      p\        S V4      w  r4pV'       d   V# WC,          pVP                  R4      R8H  p/ pR V 3R llp	 VP                  W6VR7      p
V'       d   VP	                  V4      MRpT'       g   T	! R	RR
4      # \        S RRRT
 UUu. uF  w  rÞRTRT/NK  	  uppRTP                  R^ 4      RTP                  R^ 4      RTRT'       d   R/4      # R/4      #   \
         d6   pT	! \        T4      Yw'       d   TP	                  T4      MR4      u Rp?# Rp?ii ; iu uppi )u¹   Connect, list tools, disconnect â†’ ``{ok, tools, prompts, resources, oauth_needed,
oauth_tokens_present}`` (``{ok: false, error, tools: []...}`` on failure). RPC pool: cold npx blocks.ri   ÚauthÚoauthc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   rï  Úoauth_neededr   )r   r   r   )r   s   "r   r   rn  0  s&   € ÷ Bñ B”sð B¬$ð BÄ4ñ Br   c                 ó0   <€ \        SR RRV R. RVRV/4      # )rK  Frï  rð   rl  Úoauth_tokens_presentr°   )rï  rl  Útokens_presentr.   s   &&&€r   ÚfailureÚ_.<locals>.failure0  s0   ø€ Ü�3˜˜u g¨u°g¸rÀ>ÐS_Ø/°ðAó Bð 	Br   )ÚdetailsTNu1   OAuth authentication required â€” no token found.FrK  rð   rC   rì   ÚpromptsÚ	resourcesrl  rn  )r]   rr   r$   Ú_probe_single_serverÚ_oauth_tokens_presentr-   r   r±   )r.   r   rS  rC   rq   r3   r;  Úneeds_oauth_tokenrr  rp  rð   Útoken_presentr�   rŠ  rÉ  s   f&             r   r  r  "  s[  ø€ ô 
Ð+Ó	,€BÜ*¨3°Ó7Ñ€D�3ß
Øˆ
Ø
�-€Cð Ÿ™ ›¨7Ñ2ÐØ€G÷Bð BðsØ×'Ñ'¨¸7Ð'ÓCˆß:K˜×0Ñ0°Ô6ÐQUˆ÷ ÙÐJÈDÐRWÓXÐXÜˆsØˆd�GÉÔNÉÁÀ˜v q¨-¸Ó;ÉÒNØ�7—;‘;˜y¨!Ó,¨k¸7¿;¹;À{ÐTUÓ;VØÐ)Ð+A×K\À4ðhó ið ið cgðhó ið iøô	 ô sÙ”s˜3“xÐ!2ÖVg°B×4LÑ4LÈTÔ4RÐmqÓrÕrûðsüó
 Os$   Á.C- ÂD0Ã-D-Ã8*D(Ä"D-Ä(D-r½  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   A  s   € ÷ 3ñ 3”4ð 3œDñ 3r   c                óæ   € \        VR4      p\        W\        4       ^,          4      ;p'       d   V# \        R4      P	                  V4      '       g   \        V RRV R24      # \        V RRRR/4      # )	uQ   Remove a server from the profile's config.yaml â†’ ``{ok: true, removed: true}``.rC   ri   r!   rp   r"   rK  TrU  )r)   rz   rn   r]   Ú_remove_mcp_serverr%   r±   )r.   r   rC   r3   s   &&  r   r  r  @  su   € ô �F˜FÓ#€DÜ% cÔ1AÓ1CÀAÕ1FÓGÐG€sÖGØˆ
ÜÐ-Ó.×AÑAÀ$×GÒGÜ�C˜ ¨$¨¨{Ð;Ó<Ð<Üˆs�T˜4 ¨DÐ1Ó2Ð2r   zoauth.startc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   L  s   € ÷ `ñ `”4ð `œDñ `r   c           
     ó²  € \        VR4      ;'       g    Rp \        W4      w  r4pV'       d   V# \        WC,          4      pVP                  R4      '       g   \	        V RR4      # VP                  R4      '       d$   VP                  R4      R8w  d   \	        V RR	4      # RVR&   \        \        R
4      P                  4       P                  4       P                  RR7      4      p\        R4      P                  WsWbR7      p\        T RR/R U
u/ uF  qªYŠ,          bK  	  up
C4      #   \         d!   p	\	        T R\        T	4      4      u Rp	?	# Rp	?	ii ; iu up
i )u]  Begin a session-backed OAuth flow â†’ ``{ok, session_id, auth_url, flow: "pkce"}``; the client
opens ``auth_url`` and polls ``mcp.servers.oauth.poll``. With ``client_redirect_uri`` the CLIENT
hosts the loopback and relays the code via ``mcp.servers.oauth.callback`` (desktop and gateway
on different machines). Runs on the RPC pool (_LONG_HANDLERS).Úclient_redirect_uriNrj  rŠ   z2stdio servers authenticate via env keys, not OAuthrJ  ri  rj  z/this server uses header/API-key auth, not OAuthrI  F©Ústrictútui_gateway.mcp_oauth_sessions)r~  rK  T)rc   Úauth_urlÚflow)r)   r~   r   r$   r%   r   r]   Úget_hermes_homeÚ
expanduserÚresolveÚ
start_flowr©   r±   )r.   r   r~  rC   rq   r3   r;  Úhermes_homerð  r6   rÈ  s   &&         r   r  r  K  s?  € ô # 6Ð+@ÓA×IÐIÀTÐð'Ü8¸ÓEÑˆ�sßØˆJÜ�7•=Ó!ˆØ�w‰w�u�~Š~Ü˜˜TÐ#WÓXÐXØ�7‰7�9×Ò #§'¡'¨&£/°WÔ"<Ü˜˜TÐ#TÓUÐUØˆˆF‰Üœ*Ð%7Ó8×HÑHÓJ×UÑUÓW×_Ñ_ÐglÐ_ÓmÓnˆÜÐ<Ó=×HÑHØ˜sð Ió Mˆô ˆs�T˜4Ð^Ñ:\Ó#]Ñ:\°Q v¥y¢LÑ:\Ñ#]Ð^Ó_Ð_øô ô 'Ü�C˜œs 1›vÓ&Õ&ûð'üâ#]s;   ˜D& °4D& Á%D& Á<"D& ÂA!D& ÄEÄ&EÄ1EÅEÅEz
oauth.pollc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   e  s   € ÷ dñ d”4ð dœDñ dr   c                ó‚   € \        R4      P                  p\        V RR/V! \        VR4      \        VR4      4      C4      # )uh   Poll a flow â†’ ``{ok, status: pending|approved|error, ...}``; ``approved`` persists tokens per profile.r�  rK  Trc   rC   )r]   Ú	poll_flowr±   r)   )r.   r   Úpolls   && r   r  r  d  sC   € ô Ð6Ó7×AÑA€DÜˆs�T˜4Ðb¡4¬°¸Ó(FÌÐQWÐY_ÓH`Ó#aÐbÓcÐcr   zoauth.cancelc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   l  s   € ÷ \ñ \”4ð \œDñ \r   c           
     óú   € \        \        R4      P                  4       P                  4       P	                  RR7      4      p\        R4      P
                  p\        W! \        VR4      \        VR4      V4      4      # )zHCancel a flow owned by the resolved profile, waking its callback worker.rI  Fr  r�  rc   rC   )r   r]   r„  r…  r†  Úcancel_flowr±   r)   )r.   r   r5   Úcancels   &&  r   r  r  k  sk   € ô ŒzÐ,Ó-×=Ñ=Ó?×JÑJÓL×TÑTÐ\aÐTÓbÓc€DÜÐ8Ó9×EÑE€FÜˆs�Fœ8 F¨LÓ9¼8ÀFÈFÓ;SÐUYÓZÓ[Ð[r   zoauth.callbackc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   t  s   € ÷ ñ ”4ð œDñ r   c                ó    a€ V3R lR 4       w  r#rE\        R4      P                  p\        W! \        SR4      \        SR4      W#VVR7      4      # )zlRelay a client-captured redirect (``code``/``state``/``error``/``iss``) into a ``client_redirect_uri`` flow.c              3   ó€   <"  € T F3  p\        SP                  V4      ;'       g    R 4      ;'       g    Rx € K5  	  R# 5irÙ  rÚ  rÛ  s   & €r   rÕ   r   v  s3   øé € ÐkÑIjÀAœs 6§:¡:¨a£=×#6Ð#6°BÓ7×?Ð?¸4Ô?ÓIjùs   ƒ!>¥>³>r�  rc   rC   )r£  Ústaterï  Úiss)r]   Údeliver_callback_flowr±   r)   )r.   r   r£  r”  rï  r•  rº  s   &f     r   r  r  s  sX   ø€ ô lÑIjÓkÑ€D�ÜÐ9Ó:×PÑP€GÜˆs�GÜ�˜Ó&¬°¸Ó(@ÀtÐ`eØôó ð r   c                ó:   € V ^8„  d   QhR\         \        ,          /# rÏ   )ré   r   )r   s   "r   r   r   ~  s   € ÷ "ñ "”dœ4•jñ "r   c                  ó  € \        R 4      p \        R4      pV P                  4       V P                  4       r2VP                  4       w  rEpV P	                  4       p\        R4      P                  V4      p. p	V P                  4       p
\        V P                  4       4       EF^  w  r¼rÞppV P                  W²VVWïV
R7      pV'       d   \        \        V4      4      MRpV P                  V4      pT	P                  RTRTR\        T;'       g    R4      R	T;'       g    RR
TRTRTRV'       d   \        V4      MRR\        T;'       d    VR,          R,          P                  4       4      R\        R4      P!                  VV4      R\#        VVVVR7      /VP%                  WôV4      CV'       d*   VP'                  VP(                  4      ;p'       d   RRRV/M/ CV P+                  W·4      ;p'       d   RV/M/ C4       EKa  	  V	# )úhermes_cli.plugins_cmdzhermes_cli.plugins_cmd_catalogzhermes_cli.plugins_cadence)r/   r  Údir_pathr¥  NrC   r/   r  r   rì   r  r%  ÚportablerE  Úhas_desktop_halfÚdesktopz	plugin.jsÚsettings_schemaúhermes_cli.plugins_settingsrq   )r›  Úcatalog_titlesÚupdate_availableTÚupdate_targetÚ
pinned_sha)r]   Ú_get_enabled_setÚ_get_disabled_setÚcatalog_rows_mapsÚ_read_install_metadataÚcached_git_updatesÚ_category_active_namesró   Ú_discover_all_pluginsÚ_plugin_statusr   r   Ú_is_portable_plugin_dirr÷   r   Úis_fileÚplugin_settings_fieldsÚ_plugin_server_rowsÚcatalog_row_fieldsr$   rC   Úpinned_revision)ÚpcÚcatrî   rW  ÚpinsÚversionsÚtitlesÚref_pinsÚgit_updatesrã  r¥  rC   r  r‘  r  Ú_dirr/   r%  Ú	_dir_pathr›  r¿  Úshas                         r   Ú_plugin_rowsr¼  ~  s   € Ü	Ð,Ó	-€BÜ
Ð5Ó
6€CØ×+Ñ+Ó-¨r×/CÑ/CÓ/EˆXð !×2Ñ2Ó4Ñ€D�FØ×(Ñ(Ó*€Hô Ð9Ó:×MÑMÈhÓW€KØ
€CØ×&Ñ&Ó(€FÜ28¸×9QÑ9QÓ9S×2TÑ.ˆ�t T¨3ð ×"Ñ" 4°(ÀÈFÐjpÐ"Óqˆ÷ (,”Dœ˜T›”O°ˆ	Ø×-Ñ-¨dÓ3ˆØ�
‰
Ø�D˜%  i´°W·]°]ÀÓ1CÀ]ÐTX×T^ÐT^Ð\^Ø�f˜h¨°
¸HØ¯Yœ3˜yœ>¸BØ¤ Y×%bÐ%b°IÀ	Õ4IÈKÕ4W×3`Ñ3`Ó3bÓ càœzÐ*GÓH×_Ñ_Ð`cÐenÓoØÔ*¨9°cÀHÐ]cÔdð\ð ×$Ñ$ T°Ó:ð\÷ ¨;¯?©?¸9¿>¹>Ó+JÐ!J Ö!Jð # D¨/¸6ÑBØQSð\ð /1×.@Ñ.@ÀÓ.PÐ'P sÖ'P�˜cÑ"ÐWYð\÷ 	]ñ 3Uð* €Jr   c                ó   € V ^8„  d   QhRR/# rm  r=   )r   s   "r   r   r   ©  s   € ÷ )ñ )¨Dñ )r   c                  óº   € ^ RI Hp  V ! 4       pVP                  \        9   d   R# \        P	                  VP                  4       R R lpVP                  V4       R# )rÚ  )r  Nc                ó   € V ^8„  d   QhRR/# rm  r=   )r   s   "r   r   Ú8_ensure_plugin_activation_listener.<locals>.__annotate__°  s   € ÷ 6ñ 6 ñ 6r   c                 óX   € V  F#  pV\         VR ,          &   V\         VR,          &   K%  	  R# )rC   r/   N)Ú_plugin_activations)Ú	summariesr7  s   & r   Ú
_on_loadedÚ6_ensure_plugin_activation_listener.<locals>._on_loaded°  s*   € ÛˆEØ16Ô  f¥Ñ.Ø05Ô  e¥Ó-ó r   )Úhermes_cli.pluginsr  Ú	scope_keyÚ_plugin_activation_subscribedrµ  Úon_plugin_loaded)r  ÚmanagerrÄ  s      r   Ú"_ensure_plugin_activation_listenerrË  ©  sH   € Ý5Ù Ó"€GØ×ÑÔ9Ô9ÙÜ!×%Ñ% g×&7Ñ&7Ô8õ6ð ×Ñ˜ZÖ(r   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   rð  rC   r   rS   )r   s   "r   r   r   ·  s!   € ÷ 	ñ 	œTð 	¬ð 	´ñ 	r   c                óÚ   € V P                  R4      '       d   V # WP                  R4      V P                  R4      3 F+  pV'       g   K  V\        9   g   K  \        V,          V R&    V # 	  V # )z§Fill ``activation`` from this process's listener when the core returned none (the core's own
copy carries ``live_now``, which the listener's load-time summary cannot).Ú
activationÚplugin_namerC   )r$   rÂ  )rð  rC   r/   s   && r   Ú_with_activationrÐ  ·  se   € ð ‡z�z�,×ÒØˆØ—j‘j Ó/°·±¸FÓ1CÓDˆß‰3�3Ô-Ö-Ü#6°sÕ#;ˆF�<Ñ ØØ€Mñ	 Eð €Mr   c                 ó~   € \        4       p\        R  V 4       4      p\        V RVRVR\        V4      V,
          /4      # )c              3   óD   "  € T F  qR ,          R8w  g   K  ^x € K  	  R# 5i)r  r  Nr=   )rÓ   rÚ   s   & r   rÕ   Ú _plugins_list.<locals>.<genexpr>Å  s   é € ÐA¡˜1¨(­°yÑ(@—Q’Q£ùs   ‚ –
 rt   Ú
user_countÚbundled_count)r¼  r4  r±   r  )r.   r   r7  rÔ  s   &&  r   Ú_plugins_listrÖ  Ã  s@   € Ü‹>€DÜÑA¡ÓAÓA€JÜˆs�Y  l°JÀÔQTÐUYÓQZÐ]gÕQgÐhÓiÐir   c                 ó  a€ VP                  R 4      ;'       g    VP                  R4      ;'       g    RP                  4       pV'       g   \        V RR4      # \        4        \	        R4      P
                  pV! V\        VP                  R4      4      R7      pVP                  R4      '       g'   \        T R	VP                  R
4      ;'       g    R4      # VP                  R4      ;'       g    To\        V3R l\        4        4       R4      p\        V \        RRR\        VP                  R4      4      R\        VP                  R4      4      R\        VP                  R4      4      RVP                  R4      RSRV/S4      4      # )r/   rC   r   é³  z)plugins.toggle requires a 'key' or 'name'r™  r¢  )rî   rK  é¢  rï  ztoggle failedc              3   óZ   <"  € T F   pSVR ,          VR,          39   g   K  Vx € K"  	  R# 5i)r/   rC   Nr=   )rÓ   rÚ   r/   s   & €r   rÕ   Ú"_plugins_toggle.<locals>.<genexpr>Õ  s'   øé € ÐJ™>�a¨S°Q°uµX¸qÀ½yÐ4IÑ-I—’›>ùs   ƒ+¡
+NTÚ	unchangedÚrestart_requiredÚgateway_reloadedrÎ  ry   )r$   rV   r%   rË  r]   Ú"dashboard_set_agent_plugin_enabledr   Únextr¼  r±   rÐ  )r.   r   ÚidentÚtogglerð  rú   r/   s   &&    @r   Ú_plugins_togglerã  É  sJ  ø€ à�Z‰Z˜Ó×:Ð: &§*¡*¨VÓ"4×:Ð:¸×AÑAÓC€EßÜ�C˜ÐJÓKÐKÜ&Ô(ÜÐ0Ó1×TÑT€FÙ�E¤4¨¯
©
°8Ó(<Ó#=Ô>€FØ�:‰:�d×ÒÜ�C˜˜vŸz™z¨'Ó2×EÐE°oÓFÐFà
�*‰*�VÓ
×
%Ð
% €CÜ
ÔJœ<œ>ÓJÈDÓ
Q€CÜˆsÔ$Øˆd�K¤ f§j¡j°Ó&=Ó!>ØœD §¡Ð,>Ó!?Ó@ØœD §¡Ð,>Ó!?Ó@À,ÐPV×PZÑPZÐ[gÓPhØ��X˜sð	&$ð &)ó	*ó +ð +r   c                 óp  € VP                  R 4      ;'       g    VP                  R4      ;'       g    RP                  4       p\        VP                  R4      ;'       g    R4      P                  4       pV'       g   V'       g   \        V RR4      # \	        4        \        R4      P                  T\        VP                  R4      4      VP                  RR	4      T;'       g    R
\        VP                  R4      ;'       g    R4      P                  4       ;'       g    R
R7      pVP                  R4      '       g'   \        T RVP                  R4      ;'       g    R4      # \        YP                  R4      '       d3   \        T\        VP                  R4      ;'       g    R4      4      4      # T4      # )Ú
identifierÚrepor   Úcatalog_namerØ  z@plugins.install requires 'identifier', 'repo', or 'catalog_name'r™  Úforcer¢  TNÚref)rè  r¢  rç  ré  rK  rÙ  rï  zinstall failedrî   rÏ  )
r$   rV   r   r%   rË  r]   Údashboard_install_pluginr   r±   rÐ  )r.   r   rá  rç  rð  s   &&   r   Ú_plugins_installrë  Ý  sZ  € ð �Z‰Z˜Ó%×AÐA¨¯©°FÓ);×AÐA¸r×HÑHÓJ€EÜ�v—z‘z .Ó1×7Ð7°RÓ8×>Ñ>Ó@€LßŸÜ�C˜ÐaÓbÐbÜ&Ô(ÜÐ0Ó1×JÑJØ”T˜&Ÿ*™* WÓ-Ó.°v·z±zÀ(ÈDÓ7QÐ`l×`tÐ`tÐptÜ�—
‘
˜5Ó!×'Ð' RÓ(×.Ñ.Ó0×8Ð8°Dð Kó :€Fð �:‰:�d×ÒÜ�C˜˜vŸz™z¨'Ó2×FÐFÐ6FÓGÐGÜˆs×V`ÑV`Ðaj×VkÒVkÔ$ V¬S°·±¸MÓ1J×1PÐ1PÈbÓ-QÓRÓxÐxÐqwÓxÐxr   c                óæ  € VP                  R4      ;'       g    RP                  4       pV'       g   \        V RR4      # \        4        \	        R4      P                  V\        VP                  R4      4      \        VP                  R4      4      R7      pVP                  R	4      '       g   VP                  R
4      '       d-   Rp\        Y Uu/ uF  qUV9   g   K  WSV,          bK  	  up4      # VP                  R4      '       g'   \        T RVP                  R4      ;'       g    R4      # RRR\        VP                  R4      4      RVP                  R4      ;'       g    TR\        VP                  R4      ;'       g    . 4      /R Uu/ uF  qUV9   g   K  WSV,          bK  	  upCpVP                  R4      '       d   \        W4      # \        V \        WfR,          4      4      # u upi u upi )aö  The same update as the dashboard and ``hermes plugins update``: a catalog install re-pins to the
current catalog SHA, a git install pulls. Every update is scanned. A refusal changes nothing and
answers ``ok: false`` with what the client must show before retrying: ``consent_required`` +
``delta``/``delta_lines`` for a re-pin that widens the plugin (retry with ``accept_capabilities``), or
``scan_blocked`` + ``scan_verdict``/``scan_findings`` for a scan block (retry a caution verdict with
``force``).rC   r   rØ  z plugins.update requires a 'name'r™  Úaccept_capabilitiesrè  )rí  rè  Úconsent_requiredÚscan_blockedrK  rï  éµ  zupdate failedTrÜ  Úwarnings)
rK  rC   r»  rï  rî  ÚdeltaÚdelta_linesrï  Úscan_verdictÚscan_findings)r»  rÞ  rÎ  rÝ  )
r$   rV   r%   rË  r]   Údashboard_update_user_pluginr   r±   ré   rÐ  )r.   r   rC   rð  rõ   rÈ  r�  s   &&     r   Ú_plugins_updater÷  í  s·  € ð �J‰J�vÓ×$Ð$ "×+Ñ+Ó-€DßÜ�C˜ÐAÓBÐBÜ&Ô(ÜÐ0Ó1×NÑNØ¤$ v§z¡zÐ2GÓ'HÓ"IÔQUÐV\×V`ÑV`ÐahÓViÓQjð Oó l€Fà‡z�zÐ$×%Ò%¨¯©°N×)CÒ)CðAˆä�3¨tÓC©t¨!¸F±{œ˜ 1�Iš©tÑCÓDÐDØ�:‰:�d×ÒÜ�C˜˜vŸz™z¨'Ó2×EÐE°oÓFÐFØ�T˜;¬¨V¯Z©Z¸Ó-DÓ(EÀvÈvÏzÉzÐZ`ÓOa×OiÐOiÐeiØœ4 §
¡
¨:Ó 6× <Ð <¸"Ó=ðwá(eÓuÑ(e 1ÐntÑit”,�!˜A•Y’,Ñ(eÑuðw€Gð ‡z�z�+×ÒÜ�3Ó Ð ÜˆsÔ$ W°f­oÓ>Ó?Ð?ùò Dùò
 vs   ÃG)
ÃG)
ÆG.ÆG.c                óB  € VP                  R4      ;'       g    RP                  4       pV'       g   \        V RR4      # \        R4      P	                  V4      pVP                  R4      '       d   \        W4      # \        T RVP                  R4      ;'       g    R	4      # )
uÂ   Uninstall a user install (``<HERMES_HOME>/plugins/<name>``) â€” the same core as ``hermes plugins
remove`` and the dashboard; bundled plugins and paths outside the plugins dir are refused there.rC   r   rØ  z plugins.remove requires a 'name'r™  rK  rÙ  rï  zremove failed)r$   rV   r%   r]   Údashboard_remove_user_pluginr±   )r.   r   rC   rð  s   &&  r   Ú_plugins_removerú    s†   € ð �J‰J�vÓ×$Ð$ "×+Ñ+Ó-€DßÜ�C˜ÐAÓBÐBÜÐ0Ó1×NÑNÈtÓT€FØ%Ÿz™z¨$×/Ò/Œ3ˆsÓÐl´T¸#¸tÀVÇZÁZÐPWÓEX×EkÐEkÐ\kÓ5lÐlr   c                ó*  a€ VP                  R4      ;'       g    VP                  R4      ;'       g    RP                  4       pVP                  R4      pV'       d   \        V\        4      '       g   \	        V RR4      # \        R4      pVP                  V4      pVf   \	        V R	R
V R24      # Vw  rgr‰p
o \        R4      P                  SV
'       d   \        \        V
4      4      MRV4      p\        T3R l\        4        4       R4      p\        R4      pTP                  P                  S4      '       d   TP!                  SRRT/4       T
'       dv   TP#                  T
4      '       d_   \%        \        \        T
4      4      S4      pT'       d9   ^ RIHp \        R4      pT! TP*                  T3RS 2R7      P-                  4        \/        T RRRSRTRT/4      #   \        \        3 d!   p\	        T R\        T4      4      u Rp?# Rp?ii ; i)z¹Write manifest-declared settings (``values`` = ``{key: value}``) through the same writer as
``ctx.set_config``; secrets are refused here (the client stores them via the ``.env`` route).r/   rC   r   rz  rØ  z8plugins.settings requires a 'key' and a 'values' mappingr™  Ni´  zplugin 'r"   rŸ  rð  c              3   óF   <"  € T F  qR ,          S8X  g   K  Vx € K  	  R# 5i)r/   Nr=   )rÓ   rÚ   r¶  s   & €r   rÕ   Ú$_plugins_settings.<locals>.<genexpr>#  s   øé € ÐC™>�a¨u­X¸Ñ-B—’›>ùs   ƒ!—
!zhermes_cli.plugin_eventszsettings.changedÚwritten)Úspawn_context_threadrj  zplugin-settings-mcp-)r1   rC   rK  Try   )r$   rV   r:  r   r%   r]   Ú_find_plugin_entryÚsave_plugin_settingsr   r   r©   ÚPermissionErrorrà  r¼  Ú_PLUGIN_ID_REÚmatchÚbroadcast_plugin_eventr¬  Ú_portable_server_namesÚagent.memory_providerrÿ  Ú#restart_mcp_servers_with_new_inputsÚstartr±   )r.   r   r/   rz  r²  ÚfoundÚ_nameÚ_versionÚ_descÚ_sourceÚ
plugin_dirrþ  r6   rú   Úeventsrq   rÿ  Ú	discoveryr¶  s   &&                @r   Ú_plugins_settingsr    sÕ  ø€ ð �:‰:�eÓ×8Ð8 §
¡
¨6Ó 2×8Ð8°b×
?Ñ
?Ó
A€CØ�Z‰Z˜Ó!€Fß”j ¬×.Ò.Ü�C˜ÐYÓZÐZÜ	Ð,Ó	-€BØ×!Ñ! #Ó&€EØ‚}Ü�C˜ ¨#¨¨kÐ:Ó;Ð;Ø=BÑ:€E�U Z°ð'ÜÐ:Ó;×PÑPØ·
”tœC 
›OÔ,ÀÀfóNˆô ÔCœ<œ>ÓCÀTÓ
J€CäÐ2Ó3€FØ×Ñ×!Ñ! )×,Ò,Ø×%Ñ% iÐ1CÀiÐQXÐEYÔZ÷ �b×0Ñ0°×<Ò<Ü(¬¬c°*«oÓ)>À	ÓJˆßÝBÜ"Ð#=Ó>ˆIÙ  ×!NÑ!NÐV]ÐU_Ø(<¸Y¸KÐ&HôJßJOÉ%Ì'Üˆs�T˜4 ¨°I¸wÈÐRUÐVÓWÐWøô! œÐ(ô 'Ü�C˜œs 1›vÓ&Õ&ûð'ús   Â98G! Ç!HÇ2HÈHÈHc                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# )r   r  r/   r   )r   r   rò   )r   s   "r   r   r   4  s*   € ÷ Eñ E¤tð E´#ð E¼#¼c½(ñ Er   c                 ó¬   € \        R 4      P                  W 4      p\        R4      P                  pVP                   Uu0 uF
  qC! W4      kK  	  up# u upi )zhermes_cli.agent_pluginszhermes_cli.plugins_manifest)r]   Úload_agent_pluginÚportable_mcp_server_namer^  )r  r/   ÚpackageÚname_forrL  s   &&   r   r  r  4  sN   € ÜÐ3Ó4×FÑFÀzÓ^€GÜÐ7Ó8×QÑQ€HØ07×0CÒ0CÓDÑ0C fˆH�SÖ!Ñ0CÑDÐDùÒDs   ¾Ac                óL   € \        V R\        R4      P                  4       /4      # )z[Catalog plugins curated for the onboarding card that this OS runs, each with its app state.Ú
onboardingú"hermes_cli.plugin_catalog_presence)r±   r]   Úonboarding_entriesr"  s   &&r   Ú_plugins_onboardingr  :  s#   € äˆs�\¤:Ð.RÓ#S×#fÑ#fÓ#hÐiÓjÐjr   c           	     ó€   € \        T R\        R4      P                  VP                  R4      ;'       g    . 4      /4      # )z_Named catalog plugins this OS runs, in the order asked, each with its app state and disclosure.Úpresencer  r›  )r±   r]   Úpresence_forr$   r"  s   &&r   Ú_plugins_presencer!  ?  s;   € äˆs�Z¤Ð,PÓ!Q×!^Ñ!^Ð_e×_iÑ_iÐjqÓ_r×_xÐ_xÐvxÓ!yÐzÓ{Ð{r   r  r  râ  ÚupdateÚsettingszplugins.managerÙ  )r   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   J  s   € ÷ Añ A”4ð AœDñ Ar   c                ó$   € \        W\        R4      # )uù  TUI Plugins Hub backend (shares primitives with ``hermes plugins`` / the dashboard):
``list`` â†’ {plugins, user_count, bundled_count}; ``toggle`` flips ``key``/``name`` per ``enable``;
``install`` git-clones ``identifier``/``repo`` or a curated ``catalog_name`` (``force``, ``enable``
default True); ``update`` re-pins a catalog install or pulls a git install (``force`` accepts a caution scan); ``remove`` deletes
a user install by ``name``; ``settings`` writes manifest-declared ``values`` for ``key``.rt   )r  Ú_PLUGINS_ACTIONSr"  s   &&r   r  r  I  s   € ô �sÔ$4°iÓ@Ð@r   z
shell.execc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   T  s   € ÷ Gñ G”4ð GœDñ Gr   c                 ó¾  a € VP                  R R4      pV'       g   \        S RR4      #  \        R4      pVP                  V4      w  rEV'       d   \        S RRV R24      # VP	                  V4      w  rgpV'       d   \        S RRV R24      #  T 3R lp	\        R4      P                  4       p
\        S T^RT
RRT	R7      #   \
         d    \        S R	R
4      u # i ; i)r"  r   r*  r  ztools.approval_detectioni¥  zblocked (hardline): z'. Use the agent for dangerous commands.z	blocked: i‰  z=shell.exec unavailable: approval safety module not importablec           	      óî   <€ \        R 4      P                  pT! V P                  ;'       g    RRRR7      RR pT! V P                  ;'       g    RRRR7      R	R p\	        SRVRVRV P
                  /4      # )
r½  r   T)rè  Úredact_url_credentialsNrØ   rÙ   r£  i`ðÿÿi0øÿÿ)r]   rÁ  rØ   rÙ   r±   r¦  )rð  ÚredactrØ   rÙ   r.   s   &   €r   ÚdoneÚ_.<locals>.donec  s}   ø€ Ü˜NÓ+×AÑAˆñ ˜Ÿ™×+Ð+¨°4ÐPTÔUÐV[ÐV\Ð]ˆÙ˜Ÿ™×+Ð+¨°4ÐPTÔUÐV[ÐV\Ð]ˆÜ�3˜ 6¨8°V¸VÀV×EVÑEVÐWÓXÐXr   r»  Ti‹  )rÂ   rÃ   r   rÅ   rÌ   )iŠ  zcommand timed out (30s))r$   r%   r]   Údetect_hardline_commandÚdetect_dangerous_commandÚImportErrorrÀ  rÍ   )r.   r   r€   rî  Úis_hardlineÚhardline_descÚis_dangerousr  r‘  r,  rÃ   s   f&         r   r  r  S  sü   ø€ à
�*‰*�Y Ó
#€CßÜ�C˜˜Ó/Ð/ð	`ÜÐ8Ó9ˆØ%-×%EÑ%EÀcÓ%JÑ"ˆßÜ˜˜TÐ%9¸-¸ÐHoÐ#pÓqÐqØ (× AÑ AÀ#Ó FÑˆ˜ßÜ˜˜T Y¨t¨fÐ4[Ð#\Ó]Ð]ð õ
Yô Ð/Ó
0×
EÑ
EÓ
G€CÜØˆS�"˜D c°TØ5ÀôGð Gøô ô `Ü�C˜Ð^Ó_Ò_ð`ús   ª6C Á!,C ÃCÃCc                ó   € V ^8„  d   QhRR/# rm  r=   )r   s   "r   r   r   t  s   € ÷ 0ñ 0˜ñ 0r   c                ó2   € \        \        4       V RR7       R# )zRRebind this module's helpers + handlers onto ``server`` and register the handlers.)ÚskipN)r  )r   Úglobals)rL  s   &r   Úregisterr8  t  s   € ä”“	˜6¨×/r   c                óh   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d
   \        ;R&   # )r   rÂ  rÈ  )Ú__conditional_annotations__r   rò   )r   s   "r   r   r      s4   € ÷ ñ ÷H5 Ò ”TÑ ñI5÷J5 +Ò *œsÑ *òK5r   r=   rU   )i   rN   rb   )NN))rK  Únode_detail©Úid)ÚdeleteÚdelete_noder<  )ÚeditÚ	edit_node)r=  ro  )qr:  r:   r'   r­  Úpathlibr   Ú
method_ctxr   r   Ú	_registryrG   Úprofile_scopedÚ_profile_scopedr>   rA   rJ   rQ   r)   r]   Ú	_strippedÚ	_nonemptyÚ_NAMEÚ_NAME_SESSIONrg   rn   rr   rz   r~   r†   r�   rš   r¡   rª   r²   rÁ   rÍ   rÛ   ræ   rû   r  r*  rø   r  Ú_codeÚ_buildr<  rY  r_  rÄ  rÉ  rÛ  Úcontextmanagerr˜  rì  rø  rô  rù  rý  r   r  r  r(  r,  r4  Ú
_cmd_learnÚ	_cmd_planrA  rW  rj  rx  r}  rŽ  r•  rµ  r¼  r¾  rÊ  rè  rò  rÏ  rÖ  rä  ré  rö  r  rR  r–  rÞ  Ú_fnÚ_keysrè  r  r  r!  r  r¼  rÂ  rò   rÈ  rË  rÐ  rÖ  rã  rë  r÷  rú  r  r  r  r!  r&  r8  r   )r:  s   @r   Ú<module>rR     sÅ  øð÷ó Û 
Ý ç 4áÓ€	Ø	×	Ñ	€Ø×*Ñ*€ð7Ù "ð7Ø:>ð7ØNPð7àð7à.3÷7òtbÀu÷ bð bòcÈe÷ cð c÷
Qð Qõ
.õ+ñ 1€	Ù5€	Ø
�)Ð	Ð€Ø˜)Ð$ |°YÐ&?Ð@€ð "'÷ Vòaò
eõòTõõ
JòQõ'õ<õ8õ
rð	,Ø!&ð	,Ø;?÷	,õOõ
tõñ" ÐÓô	có ð	cð �Tñ  Lð  Mà�4ÑfÐgØ�Tñ ]ð ^ð �4Ñ\Ð]Ø�dÑ`ÐaØ�Dñ Yð Zð€ð +×0Ñ0Ö2Ñ€E‰?ˆE�6áˆ�Ô¨eÓZÖ[ñ 3ð 
ˆ5�&Ù €^�T¨Õ -ÙUôWñ €n 4°4Ô8ô	4ó 9ð	4õò ?Àð  ?ØAE÷ ?ð  ?õFiñ €l�DÓôK<ó ðK<ñ^ Ð˜$Óô
`ó  ð
`ñ ˆ
Óôaó ðañ& Ð˜ÓôEó ðEònõ ÷'ð 'ð, ×Ñ÷1ó ð1õ8ð BÐ òOõ-õ	òõòtò*òFl÷ð ñ Ð1Ð3GÓH€
ÙÐ/Ð1DÓE€	ò0ò$!:òHWò&:ò86ò !ò4"ò+Sõ\Vòfò:ðHO€ð>€ò
õ[õ?òSò
Sð.2ØˆZð2Ø˜jð2Ø*1°:ð2Ø?EÀyð2ØRXÐZcð2à	ˆ8ð2à˜jð2à*1°:ð2à?FÈ
ð2àTZÐ\eð2ð ˆIð2ð ˜yð2ð +5°mð2ð FLÈ]ð2ð �ð	2ð  )¨-ð	2ð
 ˆkð2ð
 $ [ñ2€ñ ÐÓôOó ðOñ& ˆÓôN'ó ðN'ñd ˆ^˜TÓ"ô	uó #ð	uñ €o D°DÔ9ô*ó :ð*ñ Ð t°tÔ<ô4ó =ð4ñ@ €o D°DÔ9ô*ó :ð*õ"'ñ  ÐÓØô8ó ó ð8ñ ˆ]˜DÓ!ô,ó "ð,ñ& €l�DÓôEó ðEñ$ Ð˜Óô.ó ð.õ añB ˆ]˜DÓ!ô=ó "ð=ñ4 Ð˜Ð9Ó:ô	aó ;ð	aõôÑ€Eˆ3�ñ 	ˆ9�U�GÐ	˜d i°¨w°iÐ$@ÔAÑBTÐUXÐZ_ÓB`Öañð 
ˆ3�ò_ò8ò6Qð ÑsØˆn˜i¨¸(ÀNØñ WðX€õ(ñ ˆ_ÓôXó ðXñ
 €o�tÓôDó ðDñ& ˆ]Óô&ó ð&ñ& 
ˆ&™2Ôôó ðñ 
ˆ(™RÔ ô/ó !ð/ñ" 
ˆ%ƒö'^ó ð'^ñT 
‰-Ð7˜5Ð7¡7¨IÐ"6Ñ7Ó8öró 9ðrñ> 
‰&Óöió ðiñ: 
‰(Óö3ó ð3ñ 
‰-Óö`ó ð`ñ0 
‰,˜Ó&ödó 'ðdñ 
‰.˜-Ó(ö\ó )ð\ñ 
Ñ
˜MÓ*öó +ð÷"ðN Ð Ó Ù%(£UÐ Ó *÷)÷	ójó+ó(yó @ó6móX÷DEókó
|ð
 ˜M©<Ð9LÉjÐZkÙ˜o¨yÐ:JÙ˜o©x¸É*ÐVgðiÐ ñ
 Ñ™t°5Õ9öAó :ðAñ ‰ÓöGó ðG÷@0ñ 0r   