+
    „WÝj{Ì  ã                  ó  € R t ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RI	H
t
 R R ltR R	 ltR
 R ltR R ltR R ltR R ltR R ltR tR tR tR R ltR R ltRRRRRR R!R"/tR# R$ ltR+tR% R& ltR' R( lt ! R) R*4      tR# ),zßAgent construction + session-resume display for ``HermesCLI``: credential resolution,
per-turn agent config, first-use build, resume preload + recap. ``cli.py`` helpers are
imported lazily inside each method (import cycle).)ÚannotationsN)Úescape©Út)Úbase_url_host_matchesc               ó    € V ^8„  d   QhRRRR/# )é   Ú	questionsÚlistÚreturnÚdict© )Úformats   "ÚTC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\cli_agent_setup_mixin.pyÚ__annotate__r      s   € ÷ Tñ T¨dð T°tñ Tó    c                ó   € R/ RRRR/# )uÅ  Headless clarify answer for ``hermes chat -q``.

A -q turn never builds the prompt_toolkit app, so the interactive clarify modal
can never be painted or answered â€” the CLI callback would poll until
``agent.clarify_timeout`` while the caller sees a silent hang. Mirror the oneshot
path and answer immediately instead.

The oneshot path answers immediately via ``_oneshot_clarify_callback``; single-query turns need the same
headless behavior (#94943).
ÚanswersÚoutcomeÚundeliveredÚnoticezœsingle-query mode: no user available to answer. Pick the best choices using your own judgment, or make the most reasonable assumption you can, and continue.r   )r	   s   &r   Ú_single_query_clarify_callbackr      s!   € ð �r˜9 m°Xð	RðTð Tr   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   r      s   € ÷ Cñ C˜Tñ Cr   c                ó  € RV P                   RV P                  RV P                  R\        V RV P                  4      RV P                  RV P
                  R\        V P                  ;'       g    . 4      R\        V R	R
4      /# )z“Snapshot the CLI's resolved provider routing as an AIAgent runtime dict.

getattr guards stay: tests build minimal shells lacking these attributes.Úapi_keyÚbase_urlÚproviderÚrequested_providerÚapi_modeÚcommandÚargsÚcredential_poolÚ_credential_poolN)r   r   r   Úgetattrr   Úacp_commandr
   Úacp_args)Úclis   &r   Ú_current_runtimer'      su   € ð
 	�3—;‘;Ø�C—L‘LØ�C—L‘LØœg cÐ+?ÀÇÁÓNØ�C—L‘LØ�3—?‘?Ø”�S—\‘\×'Ð' RÓ(Øœ7 3Ð(:¸DÓAðCð Cr   c               ó    € V ^8„  d   QhRRRR/# )r   Úruntimer   r   Útupler   )r   s   "r   r   r   .   s   € ÷ [ñ [ Tð [¨eñ [r   c                óì   € YP                  R4      VP                  R4      VP                  R4      VP                  R4      VP                  R4      \        VP                  R4      ;'       g    R4      3# )zTHashable identity of (model, routing) used to detect when the agent must be rebuilt.r   r   r   r   r   r    r   )Úgetr*   )Úmodelr)   s   &&r   Ú_route_signaturer.   .   sd   € ð 	�{‰{˜:Ó&¨¯©Ð4HÓ(IÈ7Ï;É;ÐWaÓKbØ�‰�JÓ §¡¨YÓ!7¼¸w¿{¹{È6Ó?R×?XÐ?XÐVXÓ9Yð[ð [r   c               ó   € V ^8„  d   QhRR/# ©r   r   Ústrr   )r   s   "r   r   r   5   s   € ÷ Lñ L˜cñ Lr   c                ór  a€ V P                   ;'       g    RP                  4       oV P                  R
9   gA   \        ;QJ d    V3R lR 4       F  '       g   K   RM	  RM! V3R lR 4       4      '       d   \	        R4      # V P                  e   RS9   d   \	        R4      # \	        RV P                  R	7      # )zœWhy a benched (exhausted) row is cooling down, from what the pool recorded: a rate-limit or
quota response, a failed token refresh, or another HTTP failure.Ú c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )Ú.0ÚkÚreasons   & €r   Ú	<genexpr>Ú"_cooldown_cause.<locals>.<genexpr>9   s   øé € Ð1iÑGhÀ!°v¶+ÓGhùs   ƒTFz%cli.startup.cooldown_cause_rate_limitÚrefreshz(cli.startup.cooldown_cause_token_refreshzcli.startup.cooldown_cause_http)Úcode)i’  i­  )ÚrateÚquotaÚinsufficient)Úlast_error_reasonÚlowerÚlast_error_codeÚanyr   )Úentryr8   s   &@r   Ú_cooldown_causerE   5   s�   ø€ ð ×%Ñ%×+Ð+¨×2Ñ2Ó4€FØ×Ñ 
Ô*¯c«cÔ1iÑGhÓ1i¯c¯cªcÔ1iÑGhÓ1i×.iÒ.iÜÐ8Ó9Ð9Ø×ÑÒ$¨	°VÔ(;ÜÐ;Ó<Ð<ÜÐ.°U×5JÑ5JÔKÐKr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r1   r   r*   r   )r   s   "r   r   r   @   s   € ÷ &ñ & cð &¨eñ &r   c           	     ón  € ^ RI p^ RIHpHpHp  V! V 4      pVP                  4       '       d   VP                  4       '       d   R. 3# VP                  4       pVP                  4       p. pTe�   \        ^\        YaP                  4       ,
          ^;,           ^<,          4      4      p	T U
u. uF  qªP                  T8X  g   K  T
NK  	  pp
T'       d   \        T^ ,          4      M
\        R4      pTP                  \        RYT	R7      4       T U
u. uF  qªP                  T8X  g   K  T
NK  	  pp
T'       d^   T^ ,          P                   ;'       g'    T^ ,          P"                  ;'       g    \        R4      pTP                  \        RYR	7      4       TRJT3#   \         d    R. 3u # i ; iu up
i u up
i )
z÷``(cooling, lines)`` on why *provider*'s pool has nothing selectable right now, for the
startup notice. *cooling* is True when the first line is a live cooldown with its remaining
time; a dead (quarantined) sign-in adds a line naming the re-login.N)ÚSTATUS_DEADÚSTATUS_EXHAUSTEDÚ	load_poolFz)cli.startup.cooldown_cause_failed_requestz#cli.startup.credential_cooling_down)r   ÚcauseÚminuteszcli.startup.sign_in_lostzcli.startup.sign_in_was_lost)r   r8   )ÚtimeÚagent.credential_poolrH   rI   rJ   Úhas_credentialsÚhas_availableÚnext_available_atÚentriesÚ	ExceptionÚmaxÚintÚlast_statusrE   r   ÚappendÚlast_error_messager@   )r   rM   rH   rI   rJ   ÚpoolÚnext_atrR   ÚlinesrL   ÚeÚbenchedrK   Údeadr8   s   &              r   Ú_credential_pool_noticer_   @   sw  € ó ßNÑNðÙ˜Ó"ˆØ×#Ñ#×%Ò%¨×);Ñ);×)=Ò)=Ø˜"�9ÐØ×(Ñ(Ó*ˆØ—,‘,“.ˆð €EØÒÜ�aœ˜g¯	©	«Õ3°bÕ8¸RÕ?Ó@ÓAˆÙ%ÓK™g˜¯©Ð:JÑ)J—1�1™gˆÐKß/6” ¨¥
Ô+¼AÐ>iÓ<jˆØ�‰”QÐ<ÀxÐfmÔnÔoÙÓ?‘w�!§-¡-°;Ñ">�AˆA‘w€DÐ?ßØ�a•×+Ñ+×iÐi¨t°A­w×/HÑ/H×iÐiÌAÐNhÓLiˆØ�‰”QÐ5ÀÔXÔYØ˜$Ð Ð%Ð%øô ô Ø�bˆyÒðüò
 Lùò @s:   �F ®F ÁF Á F Â)F-Ã F-ÄF2Ä%F2ÆF*Æ)F*c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
user_countrU   Útotalr   r1   r   )r   s   "r   r   r   [   s!   € ÷ 1ñ 1˜sð 1¨3ð 1°3ñ 1r   c                ó2   € V ^8X  d   RMRp\        W VR7      # )zM``(N user message(s), M total messages)`` suffix of the resumed-session line.zcli.resume.counts_onezcli.resume.counts_other)Úcountrb   r   )ra   rb   Úkeys   && r   Ú_resume_countsrf   [   s   € à%/°1¤_Ñ
!Ð:S€CÜˆS¨%Ô0Ð0r   c               ó   € V ^8„  d   QhRR/# ©r   r   Úboolr   )r   s   "r   r   r   a   s   € ÷ Bñ B dñ Br   c                óz   € \        \        V \        4      ;'       d    T ;'       d    \        V R4      '       * 4      # )znCustom/local endpoints (llama.cpp, ollama, vLLM) often need no auth; only a
non-OpenRouter base_url qualifies.zopenrouter.ai)ri   Ú
isinstancer1   r   )r   s   &r   Ú_keyless_custom_baserl   a   sE   € ô Ü�8œSÓ!÷ 	Að 	AØ÷	Að 	Aä% h°Ó@Ô@óBð Br   c                ón   €  V P                  V4      pT'       d	   Y!8w  d   T# R#   \         d     R# i ; i)z™If ``session_id`` is the (empty) head of a compression chain, return the
descendant that actually holds the messages; else None. Fails open on DB errors.N)Úresolve_resume_session_idrS   )Ú
session_dbÚ
session_idÚresolved_ids   && r   Ú_compression_descendantrr   j   s?   € ðØ ×:Ñ:¸:ÓFˆ÷ &¨+Ô*Cˆ;ÐMÈÐMøô ô Úðús   ‚% ¥4³4c                ó&   € \        W4      ^ ,          # )ap  The id the gateway answers for physical row *session_id*: ``session.resume``'s
``stored_session_id``. A canonical local compression segment holds the transcript, but its creation
receipt lives on the conversation's logical owner, which every turn and mutation must name (as Ink
and ``session.resume`` do). Unchanged off the gateway store or when the resume is refused.)Ú_gateway_open)ro   rp   s   &&r   Ú_gateway_owned_idru   t   s   € ô
 ˜Ó0°Õ3Ð3r   c                ó0  € ^ RI Hp ^ RIHp ^ RIHp \        W4      '       g   VR3#  V P                  V4      P                  R4      ;'       g    TR3#   T d*   pT\        T4      T9   d   \        T4      MR3u Rp?# Rp?i\         d    TR3u # i ; i)a�  ``(owner_id, refusal)`` from one ``session.resume`` of *session_id* on this viewer: the attach
subscribes it and names its receipt owner (:func:`_gateway_owned_id`). ``refusal`` is the reason
code when the owner answered that this viewer may not open it (``RESUME_GONE``), else ``None``:
off the gateway store, a transient refusal, or no answer, the caller proceeds on its local reads.)ÚGatewayRPCError)ÚRESUME_GONE)ÚGatewaySessionStoreNÚstored_session_id)Úhermes_cli.gateway_clientrw   Úhermes_cli.gateway_connectionrx   Ú hermes_cli.gateway_session_storery   rk   Úattachr,   r1   rS   )ro   rp   rw   rx   ry   Úexcs   &&    r   rt   rt   |   s“   € õ
 :Ý9ÝDÜ�j×6Ò6Ø˜4ÐÐð Ø× Ñ  Ó,×0Ñ0Ð1DÓE×SÐSÈÐUYÐYÐYøØô KØ¬¨C«°KÔ(?œC œHÀTÐJÕJûÜô  Ø˜4ÐÒð ús/   ©&A ÁA ÁBÁB Á:BÂ BÂBÂBc               ó   € V ^8„  d   QhRR/# r0   r   )r   s   "r   r   r   Ž   s   € ÷ 3ñ 3 3ñ 3r   c                ó€   € \        V \        4      '       d   RP                  R V  4       4      # V f   R# \        V 4      # )zTRecap text for a user row; multimodal lists become text parts + ``[image]`` markers.Ú c              3  óÖ   "  € T F_  p\        V\        4      '       g   K  VP                  R 4      R9   g   K3  VP                  R 4      R8X  d   VP                  RR4      MRx € Ka  	  R# 5i)ÚtypeÚtextr3   z[image]N)r…   Ú	image_url)rk   r   r,   )r6   Úparts   & r   r9   Ú%_user_display_text.<locals>.<genexpr>‘   s]   é € ð Uá�Ü˜$¤×%ô Nà*.¯(©(°6Ó*:Ð>SÑ*Sô N D§H¡H¨VÓ$4¸Ô$>ˆD�H‰H�V˜RÔ ÀIÔMÛùs   ‚A)ŸA)·2A)r3   )rk   r
   Újoinr1   )Úcontents   &r   Ú_user_display_textr‹   Ž   sF   € ä�'œ4× Ò Ø�x‰xñ UáóUó Uð 	Uð ’ˆ2Ð2¤c¨'£lÐ2r   c               ó   € V ^8„  d   QhRR/# r0   r   )r   s   "r   r   r   ˜   s   € ÷ 
:ñ 
: sñ 
:r   c                óz  € . pV  FX  pVP                  R/ 4      p\        V\        4      '       d   VP                  RR4      MRpWA9  g   KG  VP                  V4       KZ  	  RP	                  VR,          4      \        V4      ^8”  d   RMR,           p\        V 4      ^8X  d   RMR	p\        V\        V 4      VR
7      # )z<``[N tool call(s): name, ...]`` with up to 4 distinct names.ÚfunctionÚnameÚunknownz, :Né   Nz, ...r3   zcli.resume.tool_calls_onezcli.resume.tool_calls_other)rd   Únames)r,   rk   r   rW   r‰   Úlenr   )Ú
tool_callsr’   ÚtcÚfnr�   Ú	names_strre   s   &      r   Ú_tool_calls_summaryr˜   ˜   s�   € à€EÛˆØ�V‰V�J Ó#ˆÜ,6°r¼4×,@Ò,@ˆr�v‰v�f˜iÔ(ÀiˆØÖØ�L‰L˜Öñ	 ð
 —	‘	˜% �)Ó$´3°u³:À´>©ÀrÕJ€IÜ),¨Z«¸AÔ)=Ñ
%ÐC`€CÜˆSœ˜J›¨yÔ9Ð9r   Úmodel_switchzcli.resume.event_model_changedÚasync_delegation_completez%cli.resume.event_delegation_completedÚprocess_completez!cli.resume.event_process_finishedÚauto_continuez$cli.resume.event_resumed_interruptedc               ó   € V ^8„  d   QhRR/# )r   Údispr   r   )r   s   "r   r   r   ­   s   € ÷ 52ñ 52°4ñ 52r   c           
     ó´  € ^ RI Hp \        VP                  RR4      4      p\        VP                  R^È4      4      p\        VP                  R^4      4      pVP                  RR4      p. pRp	Rp
V  EF_  pVP                  R	R
4      pVP                  R4      pVP                  R4      pVP                  R4      ;'       g    . pVR8X  d   K\  V\        9   do   VP                  R4      ;'       g    / pVR9   d   VP                  R4      MRpTP                  RT! T;'       g    \        \        V,          4      4      34       KÕ  VR8X  dD   V! \        V4      4      p\        V4      V8”  d   VRV R,           pVP                  RV34       EK  VR8X  g   EK)  T! Vf   R
M
\        V4      4      p. . ppV'       dz   VP                  V4       VP                  4       p\        V4      V8”  d   RP                  VRV 4      R,           p\        V4      V8”  d   VRV R,           pVP                  V4       V'       d3   VP                  \        V4      4       VP                  VR,          4       V'       g   V'       g	   V'       g   EK  VP                  RRP                  V4      34       \        V4      ^,
          p	RP                  V4      p
EKb  	  W‰V
3# )aé  Displayable ``(role, text)`` recap entries from stored history, truncated per the
``display.resume_*`` config; system and tool-result rows are skipped. Returns
``(entries, index of last assistant entry, its un-truncated text)``.

Stored history is untrusted for display: text is sanitized so replay can't clear the
screen, retitle the window or restyle the panel. Pure-reasoning assistant rows with no
visible output are skipped, as are tool-call-only rows when ``resume_skip_tool_only``.
©Úsanitize_display_textÚresume_max_user_charsi,  Úresume_max_assistant_charsÚresume_max_assistant_linesÚresume_skip_tool_onlyTNÚroler3   Údisplay_kindrŠ   r”   ÚhiddenÚdisplay_metadataÚdisplay_textÚeventÚuserz...Ú	assistantÚ
z ...r‚   )rš   r›   éÿÿÿÿ)Útools.ansi_stripr¡   rU   r,   Ú_RESUME_EVENT_KEYSrW   r   r‹   r“   r1   Ú
splitlinesr‰   r˜   )Údisplay_historyrž   Úclean_assistantÚ_sanitize_display_textÚmax_user_lenÚmax_asst_lenÚmax_asst_linesÚskip_tool_onlyrR   Úlast_asst_idxÚlast_asst_fullÚmsgr¦   r§   rŠ   r”   ÚmetadataÚlabelr…   ÚpartsÚ
full_partsr[   s   &&&                   r   Ú_collect_resume_entriesrÁ   ­   sr  € õ QÜ�t—x‘xÐ 7¸Ó=Ó>€LÜ�t—x‘xÐ <¸cÓBÓC€LÜ˜Ÿ™Ð">ÀÓBÓC€NØ—X‘XÐ5°tÓ<€NØ€GØ€MØ€NÜˆØ�w‰w�v˜rÓ"ˆØ—w‘w˜~Ó.ˆØ—'‘'˜)Ó$ˆØ—W‘W˜\Ó*×0Ð0¨bˆ
Ø˜8Ô#ÙØÔ-Ô-Ø—w‘wÐ1Ó2×8Ð8°bˆHØ4@ÐDuÔ4u�H—L‘L Ô0Ð{ˆEØ�N‰N˜GÑ%;¸E×<hÐ<hÄQÔGYÐZfÕGgÓEhÓ%iÐjÔkÙØ�6Œ>Ù)Ô*<¸WÓ*EÓFˆDÜ�4‹y˜<Ô'Ø˜M˜\Ð*¨UÕ2�Ø�N‰N˜F D˜>×*Ø�[× Ù"¨ª¡2¼cÀ'»lÓKˆDØ " B�:ˆEßØ×!Ñ! $Ô'ØŸ™Ó)�Ü�u“: Ô.ØŸ9™9 U¨?¨NÐ%;Ó<¸vÕE�DÜ�t“9˜|Ô+Ø  Ð.°Õ6�DØ—‘˜TÔ"ßØ—‘Ô0°Ó<Ô=Ø×!Ñ! %¨¥)Ô,ßŸ^·:ÚØ�N‰N˜K¨¯©°%«Ð9Ô:Ü ›L¨1Õ,ˆMØ ŸX™X jÓ1‹NñG ðH  >Ð1Ð1r   c               ó   € V ^8„  d   QhRR/# ©r   r   r*   r   )r   s   "r   r   r   ë   s   € ÷ Dñ D˜eñ Dr   c                 ó"  a€  ^ RI Hp  V ! 4       o\        ;QJ d    . V3R l\         4       F  NK  	  5# ! V3R l\         4       4      #   \         d:    \        ;QJ d    . R \         4       F  NK  	  5u # ! R \         4       4      u # i ; i)zNActive-skin colors for ``_RESUME_SKIN_COLORS`` (fallbacks when no skin loads).)Úget_active_skinc              3  óJ   <"  € T F  w  rSP                  W4      x € K  	  R # 5ir5   )Ú	get_color)r6   re   ÚdefaultÚ_skins   &  €r   r9   Ú'_resume_panel_colors.<locals>.<genexpr>ð   s!   øé € Ð[ÑGZ±|°s�U—_‘_ S×2Ð2ÓGZùs   ƒ #c              3  ó*   "  € T F	  w  rVx € K  	  R # 5ir5   r   )r6   Ú_rÈ   s   &  r   r9   rÊ   ò   s   é € ÐCÑ/B¡ •WÓ/Bùs   ‚)Úhermes_cli.skin_enginerÅ   r*   Ú_RESUME_SKIN_COLORSrS   )rÅ   rÉ   s    @r   Ú_resume_panel_colorsrÏ   ë   sm   ø€ ðDÝ:ÙÓ!ˆßŒuÔ[ÕGZÓ[�uÐ[ˆuÔ[ÕGZÓ[Ó[Ð[øÜô DßŒuÑCÕ/BÓC�uÒCˆuÑCÕ/BÓCÓCÒCðDús'   ƒA
 ›A
 µA
 Á
BÁ BÁ9BÂBc               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r   r   õ   s   € ÷ ñ ˜$ñ r   c                óx   € V P                   pVe#   \        VR4      '       d   VP                  4        RV n         R# )a  Drop ``cli.agent`` so the next turn rebuilds it, releasing its LLM clients first: the Codex
app-server child (and MCP descendants) belongs to the instance, so ``self.agent = None`` alone
orphans it for the CLI process lifetime (#72548). Session tool state is kept (soft release).NÚrelease_clients)ÚagentÚhasattrrÔ   )r&   rÕ   s   & r   Ú_retire_agentr×   õ   s3   € ð �I‰I€EØÒœW UÐ,=×>Ò>Ø×ÑÔØ€C†Ir   c                  óä   € ] tR t^ÿtRtR R ltR tR R ltR R ltR	 R
 lt	R R lt
R R ltR R ltR tRR/R R lltR R ltR R ltRRRRRR/R R lltR&R  R! lltR" R# ltR$ tR%tR# )'ÚCLIAgentSetupMixinzFAgent construction + session-resume display methods for ``HermesCLI``.c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   ÚCLIAgentSetupMixin.__annotate__  s   € ÷ sñ s¨Tñ sr   c           	     ó¬
  € ^ RI HpHp ^ RIHpHpHp RpRpV P                  pRV n        RV n	        V! 4       ;_uu_ 4         T! V P                  V P                  V P                  V P                  ;'       g    RR7      pVe   V P                  V4      pVe   RpRRR4       Vf³   ^ RIHp
Hp \%        V4      ;'       d	    V! V4      V n        \'        Wj4      ;'       d    VP(                  V n	        V'       d	   V! V4      M
\+        R4      p\-        V RR	4      R
8X  d   \/        V\0        P2                  R7       R# V! 4       P/                  RV R24       R# VP5                  R4      pVP5                  R4      pVP5                  RR4      pY÷P5                  RV P6                  4      VP5                  R4      \9        VP5                  R4      ;'       g    . 4      3p\;        V4      '       gÜ   \'        V\<        4      '       d	   V'       g¾   \?        V4      '       d&   RpVPA                  RWçP5                  RR4      4       M‡T;'       g    V P                  ;'       g    RPC                  4       pV'       d"   VR8w  d   \/        R\+        RVR7       24       M\/        R\+        R4       24       \/        R\+        R4       24       R# \'        V\<        4      '       d	   V'       g   \/        R\+        R 4       24       R# WÐPD                  8g  ;'       g    WàPF                  8g  pVV PH                  V P6                  V PJ                  V PL                  38g  pVw  V n$        V n        V n%        V n&        VP5                  R!4      V n'        VP5                  R4      V n(        WÐn"        Wàn#        VP5                  R"4      pV'       dk   \'        V\<        4      '       dU   V P                  '       d<   V P                  V PH                  8X  g!   V P                  VP5                  R#4      8X  d   VV n        V P                  '       g:   V'       d2    ^ R$I)H*p V! V4      pV'       d   VV n        VPW                  R%VV4       V PY                  V4      pV P                  V8w  dE   \-        V R&R4      f6   ^ R'I-H.p V! V 4       VPW                  R(V P                  V P^                  4       V'       g   V'       g	   V'       d!   V P`                  e   \c        V 4       RV n2        R)#   \         d   p	T	p Rp	?	EL©Rp	?	ii ; i  + '       g   i     ELŸ; i  \         d     LÜi ; i)*z‘Re-resolve provider credentials before agent use so key rotation / token
refresh are picked up without restarting the CLI. False on auth failure.)ÚChatConsoleÚlogger)Údeferred_token_mintÚformat_runtime_provider_errorÚresolve_runtime_providerNF)Ú	requestedÚexplicit_api_keyÚexplicit_base_urlÚtarget_model)Ú	AuthErrorÚis_rate_limited_auth_errorz&cli.startup.provider_resolution_failedÚtool_progress_modeÚfullÚoff©Úfileú
[bold red]ú[/]r   r   r   Ú
openrouterr   r   r    zno-key-requireduh   No API key for custom endpoint %s (source=%s), using placeholder â€” local servers typically ignore authÚsourcer3   Úautor®   z#cli.startup.no_api_key_for_provider)r   z"cli.startup.no_provider_configuredz   zcli.startup.run_model_or_setupzcli.startup.empty_base_urlr!   r-   r�   )Úget_default_model_for_provideru8   No model configured â€” defaulting to %s for provider %sÚ_explicit_reasoning_config©Ú_resolve_cli_reasoningz0Model moved to %s: reasoning_config resolved: %sT)3r&   rÝ   rÞ   Úhermes_cli.runtime_providerrß   rà   rá   r-   Ú_credentials_rate_limitedÚ_credentials_terminalr   Ú_explicit_api_keyÚ_explicit_base_urlrS   Ú_resolve_fallback_runtimeÚhermes_cli.authræ   rç   ri   rk   Úrelogin_requiredr   r#   ÚprintÚsysÚstderrr,   r   r
   Úcallabler1   rl   ÚdebugÚstripr   r   r   r$   r%   r"   Ú_provider_sourceÚhermes_cli.modelsrò   ÚinfoÚ_normalize_model_for_providerÚ!hermes_cli.cli_model_switch_mixinrõ   Úreasoning_configrÕ   r×   Ú_active_agent_route_signature)ÚselfrÝ   rÞ   rß   rà   rá   Ú_primary_excr)   Ú_model_at_entryr   ræ   rç   Úmessager   r   Úresolved_providerÚresolved_routingÚ_provÚcredentials_changedÚrouting_changedÚruntime_modelrò   Ú_defaultÚmodel_changedrõ   s   &                        r   Ú_ensure_runtime_credentialsÚ.CLIAgentSetupMixin._ensure_runtime_credentials  so  € ÷ 	,÷	Zñ 	ZàˆØˆØŸ*™*ˆØ).ˆÔ&Ø%*ˆÔ"ñ !×"Õ"ð	#ñ
 3Ø"×5Ñ5È×H^ÑH^Ø&*×&=Ñ&=ÈDÏJÉJ×L^ÐL^ÐZ^ô`�ð
 Ò'Ø×8Ñ8¸ÓF�ØÒ&Ø#'�L÷ #ð Š?ßMÜ-1°,Ó-?×-lÐ-lÑD^Ð_kÓDlˆDÔ*ô *4°LÓ)L×)nÐ)nÐQ]×QnÑQnˆDÔ&ßEQÑ3°LÔAÔWXð  ZBó  XCˆGÜ�tÐ1°6Ó:¸eÔCÜ�g¤C§J¡JÕ/ñ ñ “×#Ñ# j°°	¸Ð$=Ô>ÙØ—+‘+˜iÓ(ˆØ—;‘;˜zÓ*ˆØ#ŸK™K¨
°LÓAÐàŸ{™{¨:°t·}±}ÓEÀwÇ{Á{ÐS\ÓG]Ü�—‘˜VÓ$×*Ð*¨Ó+ð-Ðô
 ˜× Ò ¬*°W¼c×*BÒ*BÇwÜ# H×-Ò-à+�Ø—‘ðPàŸk™k¨(°BÓ7õ9ð
 +×KÐK¨d×.EÑ.E×KÐKÈ×RÑRÓT�ß˜U fœ_Ü˜BœqÐ!FÐQVÔWÐXÐYÕZä˜BœqÐ!EÓFÐGÐHÔIÜ˜œAÐ>Ó?Ð@ÐAÔBÙÜ˜(¤C×(Ò(·Ü�B”qÐ5Ó6Ð7Ð8Ô9ÙØ%¯©Ñ5×RÐR¸Ç]Á]Ñ9RÐØ*¨t¯}©}¸d¿m¹mÈT×M]ÑM]Ð_c×_lÑ_lÐ.mÑmˆØHXÑEˆŒ�t”} dÔ&6¸¼Ø '§¡Ð,=Ó >ˆÔØ '§¡¨HÓ 5ˆÔØŒØ Œð
  Ÿ™ GÓ,ˆßœZ¨´s×;Ò;Ø—
—
�
˜dŸj™j¨D¯M©MÔ9¸T¿Z¹ZÈ7Ï;É;ÐW]ÓK^Ô=^Ø&ˆDŒJð �z�zˆz×/ð	ÝLÙ9Ð:KÓL�ßØ!)�D”JØ—K‘KØRØ Ð"3ô5ð ×:Ñ:Ð;LÓMˆð �:‰:˜Ô(¬W°TÐ;WÐY]Ó-^Ò-fÝPÙ" 4Ô(Ø�K‰KÐJÈDÏJÉJÐX\×XmÑXmÔn÷  §?·mÈÏÉÒI_Ü˜$ÔØ15ˆDÔ.Ùøô{ ô #Ø"–ûð#ú÷ #×"Ð"ûôb ô ÙðúsN   Á T1Á>TÂ T1ÑU ÑU ÔT.Ô!T)Ô#T1Ô)T.Ô.T1Ô1U	ÕUÕUc                óþ  aaaa€ ^ RI HoHp ^ RIHpHp ^ RIHp \        W4      '       g   R# \        V P                  \        4      '       d   V P                  M. pV EF  pVP                  R4      ;'       g    RP                  4       P                  4       oVP                  R4      ;'       g    RP                  4       oS'       d	   S'       g   Kv   ^ RIHp R	SR
S/p	VP                  R4      '       d   VR,          V	R&   V! V4      p
V
'       d   W©R&   T! R/ V	B pV! V4      w  poVP!                  RWÁSS4       ^ RIHp V! VVVV3R lRR7       SV n        SV n        Vu # 	  R#   \*         d     EK  i ; i)zßPrimary provider resolution failed: on an AuthError try each fallback entry in
order and switch the CLI's requested_provider/model to the first that resolves.
None when the error is not auth-related or no fallback resolves.©Ú_cprintrÞ   )ræ   Úprimary_failure_wording)rá   Nr   r3   r-   )Úresolve_entry_api_keyrâ   rå   r   rä   rã   z<Primary provider %s (%s). Falling through to fallback: %s/%s)Úrender_notificationc            	     ó.   <€ S ! \        R SSSR7      4      # )z!cli.startup.switching_to_fallback)r8   r   r-   r   )r  Ú	_fb_modelÚ_fb_providerÚ_whys   €€€€r   Ú<lambda>Ú>CLIAgentSetupMixin._resolve_fallback_runtime.<locals>.<lambda>—  s   ø€ ™G¤AÐ&IÐRVÐamÐu~Ô$ô  Ar   r&   )Úplatformr   )r&   r  rÞ   rü   ræ   r  rö   rá   rk   Ú_fallback_modelr
   r,   r  rA   Úhermes_cli.fallback_configr  ÚwarningÚgateway.warning_notificationsr  r   r-   rS   )r  Úprimary_excrÞ   ræ   r  rá   Ú	_fb_chainÚ_fbr  Ú
_fb_kwargsÚ_fb_api_keyr)   Ú_why_logr  r  r   r!  r"  s   &&            @@@@r   rû   Ú,CLIAgentSetupMixin._resolve_fallback_runtimew  sY  û€ ÷ 	(ßFÝHÜ˜+×1Ò1ÙÜ,6°t×7KÑ7KÌT×,RÒ,R�D×(Ò(ÐXZˆ	ÜˆCØŸG™G JÓ/×5Ð5°2×<Ñ<Ó>×DÑDÓFˆLØŸ™ Ó)×/Ð/¨R×6Ñ6Ó8ˆIß§yÙðÝLð *¨<¸ÈÐS�
Ø—7‘7˜:×&Ò&Ø69¸*µo�JÐ2Ñ3Ù3°CÓ8�ßØ5@Ð1Ñ2Ù2Ñ@°ZÑ@�Ù!8¸Ó!E‘�˜$Ø—‘ØRØ¨<¸ôDõ NÙ#÷ AØ"õ$ð +7�Ô'Ø&�”
à’ñ7 ñ< øô ô Ûðús   Ã"E,Ã8E,ÄAE,Å,E<Å;E<c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   rÛ   ¡  s   € ÷ 4ñ 4¨Dñ 4r   c                ó0   € V P                  4       ^ ,          # )zñSilently probe whether any inference provider can be resolved.

Never prints or mutates CLI state, so the interactive first-run path can route a
keyless install into onboarding before the user types into a chat that can't work.

See #62935.
)Ú_probe_runtime_credentials©r  s   &r   Ú_runtime_credentials_readyÚ-CLIAgentSetupMixin._runtime_credentials_ready¡  s   € ð ×.Ñ.Ó0°Õ3Ð3r   c               ó   € V ^8„  d   QhRR/# rÃ   r   )r   s   "r   r   rÛ   «  s   € ÷ Iñ I¨Eñ Ir   c                ó  € ^ RI HpHp  V! 4       ;_uu_ 4        V! V P                  V P                  V P
                  R7      pRRR4       \        X\        4      '       g   R# TP                  R4      pTP                  R4      p\        T4      '       g   \        T\        4      '       d   T'       d   \        T4      R3# \        T4      TP                  R4      3#   + '       g   i     L¢; i  \         d   pRT3u Rp?# Rp?ii ; i)	uù   ``(ready, error)``: *error* is the exception that stopped resolution â€” raised, or
swallowed by the "auto" ladder and stamped on a keyless fallback â€” ``None`` when a provider
resolved (usable or merely keyless). Never prints or mutates CLI state.)rß   rá   )râ   rã   rä   NFr   r   Ú
auth_error)FN)rö   rß   rá   r   rù   rú   rS   rk   r   r,   r  r1   ri   rl   )r  rß   rá   r)   r   r   r   s   &      r   r3  Ú-CLIAgentSetupMixin._probe_runtime_credentials«  sÕ   € ÷ 	^ð	Ù$×&Õ&Ù2Ø"×5Ñ5È×H^ÑH^Ø&*×&=Ñ&=ô?�÷ 'ô ˜'¤4×(Ò(ØÐØ—+‘+˜iÓ(ˆØ—;‘;˜zÓ*ˆÜ�G×Ò¤¨G´S×!9Ò!9¿gÜ˜“> 4Ð'Ð'Ü# HÓ-¨w¯{©{¸<Ó/HÐHÐH÷ '×&ûô ô 	Ø˜#�:Õûð	ús:   ŠC0 ™*CÁC0 ÃC-	Ã(C0 Ã-C0 Ã0D	Ã;DÃ>D	ÄD	c               ó   € V ^8„  d   QhRR/# rÑ   r   )r   s   "r   r   rÛ   ¿  s   € ÷ *ñ *¨dñ *r   c                óÜ   € \         P                  P                  4       '       g   R# V P                  4       w  rV'       g,   V P	                  V4      '       g   V P                  4        R# R# R# )z¨Interactive startup gate: a blank install goes to the provider wizard; a configured
profile whose credential is benched or signed out gets the reason instead (#113720).N)rÿ   ÚstdinÚisattyr3  Ú_explain_unusable_credentialsÚ_offer_first_run_setup)r  ÚreadyÚerrors   &  r   Ú_maybe_offer_first_run_setupÚ/CLIAgentSetupMixin._maybe_offer_first_run_setup¿  sQ   € ô �y‰y×Ñ×!Ò!ÙØ×6Ñ6Ó8‰ˆß˜T×?Ñ?À×FÒFØ×'Ñ'Ö)ñ G‰ur   c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   rÛ   È  s   € ÷ ñ °dñ r   c                óà  € ^ RI Hp ^ RIHp Ve   \	        VRR4      R8X  d   R# \	        VRR4      ;'       g    V P
                  pV'       d   VR8w  d   \        V4      MR. 3w  rVV! R	4       V'       dB   V! R
\        VP                  ^ 4      4       24       V! R\        \        V4      4       24       MV! R
\        V! V4      4       24       V F  pV! R\        V4       24       K  	  R# )aµ  A configured profile whose credential is benched, quarantined or signed out is not a
blank install: print what is wrong (and the remaining cooldown) instead of the first-run
wizard, whose "nothing is configured" claim sends operators into a second login that can
rotate a single-use OAuth grant away from the session that was working (#113720).

True when the failure was explained; False when nothing is configured (the wizard's case).
)r  )Úformat_auth_errorNr<   Úno_provider_configuredFr   rñ   r3   u   âš ï¸�  ú  T)
r&   r  rü   rG  r#   r   r_   Ú_escapeÚpopr1   )r  rB  r  rG  r   Úcoolingr[   Úlines   &&      r   r?  Ú0CLIAgentSetupMixin._explain_unusable_credentialsÈ  sÚ   € õ 	 Ý5ØŠ=œG E¨6°4Ó8Ð<TÔTÙÜ˜5 *¨dÓ3×NÐN°t×7NÑ7Nˆß>FÈ8ÐW]ÔK]Ô0°Ô:ÐdiÐkmÐcn‰ˆÙ�Œßá�hœw u§y¡y°£|Ó4Ð5Ð6Ô7Ù�bœ¤ U£Ó,Ð-Ð.Õ/á�hœwÑ'8¸Ó'?Ó@ÐAÐBÔCÛˆDÙ�bœ ›˜Ð(Ö)ñ ár   c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   rÛ   á  s   € ÷ 5ñ 5¨ñ 5r   c           	     óð  € ^ RI HpHp V! R4       V! \        R4      4       V! R\        R4       24        \	        R\        R4       R24      P                  4       P                  4       pVR9   d   V! R\        R	4       24       R
#  ^ RI
Hp ^ RIHp V! R4      ;_uu_ 4        V! 4        RRR4        ^ RIHp T! 4       P'                  R4      ;'       g    / p\)        T\*        4      '       dÅ   TP'                  R4      ;'       g    RP                  4       ;'       g    T P,                  T n        TP'                  R4      ;'       g    TP'                  R4      ;'       g    RP                  4       p	T	;'       g    T P.                  T n        T	'       d   \1        T RR4      f   ^ RIHp
 T
! T 4       \7        T 4       RT n        T P;                  4       '       d   T! R\        R4       24       R# T! R\        R4       24       R
#   \        \        3 d    \        4        Rp EL¿i ; i  + '       g   i     ELŠ; i  \        \        \        3 d#    \        4        T! R\        R4       24        R
# \         dH   pTP!                  RT4       T! R\        RTR7       24       T! R\        R4       24        Rp?R
# Rp?ii ; i  \         d   pTP!                  RT4        Rp?EL:Rp?ii ; i)zÓOffer the provider picker when no provider is configured at all (interactive
startup, TTY). Runs the same flow as ``hermes model`` so onboarding has a single
source of truth. True when a provider was configured.r  r3   z!cli.startup.first_run_no_providerrI  z#cli.startup.first_run_pick_providerzcli.startup.first_run_promptr‚   Únzcli.startup.first_run_skippedF)Úselect_provider_and_model)Úprovider_setup_surfaceÚ	cli_setupNzcli.startup.first_run_cancelledz#first-run provider setup failed: %sz!cli.startup.provider_setup_failed©rB  zcli.startup.run_model_to_retry)Úload_configr-   r   rÈ   ró   rô   z#first-run config re-sync failed: %szcli.startup.provider_configuredTz%cli.startup.provider_setup_incomplete>   rQ  Úno)r&   r  rÞ   r   Úinputr  rA   ÚKeyboardInterruptÚEOFErrorrþ   Úhermes_cli.mainrR  Ú-hermes_cli.observability.shared_metrics_setuprS  Ú
SystemExitrS   r  Úhermes_cli.configrV  r,   rk   r   r   r-   r#   r  rõ   r×   r
  r5  )r  r  rÞ   ÚanswerrR  rS  r   rV  Ú
_model_cfgÚ
_new_modelrõ   s   &          r   r@  Ú)CLIAgentSetupMixin._offer_first_run_setupá  sŒ  € ÷ 	(Ù�ŒÙ”Ð5Ó6Ô7Ù�"”QÐ<Ó=Ð>Ð?Ô@ð	Ü˜R¤Ð"@Ó AÐBÀ!ÐDÓE×KÑKÓM×SÑSÓUˆFð �[Ô Ù�bœÐ:Ó;Ð<Ð=Ô>Ùð	ÝAÝ\Ù'¨×4Õ4Ù)Ô+÷ 5ð	EÝ5Ù%›-×+Ñ+¨GÓ4×:Ð:¸ˆJÜ˜*¤d×+Ò+Ø+5¯>©>¸*Ó+E×+KÐ+KÈ×*RÑ*RÓ*T×*oÐ*oÐX\×XoÑXo�Ô'Ø(Ÿn™n¨YÓ7×XÐX¸:¿>¹>È'Ó;R×XÐXÐVX×_Ñ_Óa�
Ø'×5Ð5¨4¯:©:�”
÷ ¤'¨$Ð0LÈdÓ"SÒ"[ÝXÙ*¨4Ô0ô 	�dÔØ-1ˆÔ*Ø×*Ñ*×,Ò,Ù�bœÐ<Ó=Ð>Ð?Ô@ÙÙ�"”QÐ>Ó?Ð@ÐAÔBÙøôW "¤8Ð,ô 	ÜŒGØ‹Fð	ú÷ 5×4Ð4ûä!¤8¬ZÐ8ô 	ÜŒGÙ�bœÐ<Ó=Ð>Ð?Ô@ÚÜô 	Ø�L‰LÐ>ÀÔDÙ�bœÐ>ÀcÔJÐKÐLÔMÙ�bœÐ;Ó<Ð=Ð>Ô?Ýûð		ûô& ô 	EØ�L‰LÐ>À×DÒDûð	Eús•   ·4H
 Â	I Â%H.Â-I Â6"K Ã0K Ä
K Ä")K ÅK Å%K Å?K ÆK È
H+È*H+È.H?	È9I È?I É4K
É9K
ÊK
Ê<KËK
ËK5ËK0Ë0K5c               ó    € V ^8„  d   QhRRRR/# )r   Úuser_messager1   r   r   r   )r   s   "r   r   rÛ     s   € ÷ ñ °sð ¸tñ r   c           	     ó  € ^ RI Hp ^ RIHp \	        V 4      pRV P
                  RVR\        V P
                  V4      /pRp\        V RR4      pWr9   d#    V! VR,          VR,          VR	,          VR
7      pWeR&   V#   \         d     Li ; i)uâ   Effective model/runtime config for one turn â€” always the session's primary
provider. With a static `/fast` tier (fast / ultrafast) attach request_overrides;
auto/cold tiers are applied per request by agent.fast_mode instead.)ÚSTATIC_TIERS)Úresolve_fast_mode_overridesr-   r)   Ú	signatureNÚservice_tierr   r   )r   r   ÚtierÚrequest_overrides)	Úagent.fast_moderf  r  rg  r'   r-   r.   r#   rS   )r  rd  rf  rg  r)   ÚrouteÚ	overridesrj  s   &&      r   Ú_resolve_turn_agent_configÚ-CLIAgentSetupMixin._resolve_turn_agent_config  s    € õ 	1ÝAÜ" 4Ó(ˆØ˜$Ÿ*™* i°¸+ÔGWÐX\×XbÑXbÐdkÓGlÐmˆØˆ	Ü�t˜^¨TÓ2ˆØÔðÙ7Ø˜'•N¨W°ZÕ-@È7ÐS]ÕK^Ðeiôk�	ð &/Ð!Ñ"Øˆøô ô Ùðús   Á!A; Á;B	ÂB	c                ó2  € V P                   V n        \        V P                  V P                   4      pV'       d^   V P                  P	                  V4      ;'       g    TpW0n        \        V P                  V4      pWC8w  d	   W@n         V# V! V4       W0n         V# )z˜If the resumed id is an empty compression-chain head, announce and switch to
the descendant holding the messages; returns the (possibly refreshed) meta.)rp   Ú_resume_read_idrr   Ú_session_dbÚget_sessionru   )r  Úsession_metaÚannouncerq   Úowners   &&&  r   Ú_follow_compression_chainÚ,CLIAgentSetupMixin._follow_compression_chain+  s‰   € ð  $Ÿ™ˆÔÜ-¨d×.>Ñ.>ÀÇÁÓPˆßØ×+Ñ+×7Ñ7¸ÓD×TÐTÈˆLØ#.Ô Ü% d×&6Ñ&6¸ÓDˆEØÔ#ð #(”ð Ðñ ˜Ô%Ø"-”ØÐr   ÚquietFc               ó    € V ^8„  d   QhRRRR/# )r   rz  ri   r   rÒ   r   )r   s   "r   r   rÛ   =  s   € ÷ ?ñ ?¸Tð ?Èdñ ?r   c               ór   € V P                  WR7       V P                  WR7       V P                  WR7       R# )z?Restore cwd / yolo / model from the resumed session's metadata.©rz  N)Ú_restore_session_cwdÚ_restore_session_yoloÚ_restore_session_model)r  ru  rz  s   &&$r   Ú_restore_session_stateÚ)CLIAgentSetupMixin._restore_session_state=  s5   € à×!Ñ! ,Ð!Ô<Ø×"Ñ" <Ð"Ô=Ø×#Ñ# LÐ#Ö>r   c               ó   € V ^8„  d   QhRR/# rÑ   r   )r   s   "r   r   rÛ   C  s   € ÷ ñ  ñ r   c                óv   €  V P                   P                  V P                  4       R#   \         d     R# i ; i)zDClear ended_at so the resumed session is active again (best effort).N)rs  Úreopen_sessionrp   rS   r4  s   &r   Ú_reopen_sessionÚ"CLIAgentSetupMixin._reopen_sessionC  s1   € ð	Ø×Ñ×+Ñ+¨D¯O©OÖ<øÜô 	Úð	ús   ‚%) ©8·8c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   rÛ   J  s   € ÷ 9ñ 9¨Dñ 9r   c                óú  a aa€ ^ RI HoHpHpHpHp S P                  P                  S P                  4      p\        S RR4      R8H  oR VV3R llpV'       g€   \        R4      p\        RS P                  R	7      pS'       d9   \        V\        P                  R
7       \        V\        P                  R
7       R# V! RV V 24       V! V V V 24       R# S P                  VVV 3R l4      p\        S RR4      '       d   R# S P                  RR7      p	V	'       d?   V	S n        V! \        RV	R7      R\#        \        R4      4       R\#        V	4       24       R# S P                  P%                  S P&                  RR7      p
V
'       Ed!   V
 Uu. uF  q»P)                  R4      R8w  g   K  VNK  	  p
pV
S n        \-        V
 Uu. uF  q»P)                  R4      R8X  g   K  VNK  	  up4      pVP)                  R4      '       d   RVR,           R2MRp\/        V\-        V
4      4      pV! \        R4       R S P                   V R V 2R!V! 4        R"\#        \        R4      4       R#\#        S P                  4       R$V! 4        R"\#        V4       RV 24       S P1                  VSR%7       M5\        R&S P                  R	7      pV! VR!V! 4        R"\#        V4       R'24       S P3                  4        R# u upi u upi )(zéLate resume path: validate the session and load its history from the DB when
_preload_resumed_session() (called from run()) did not already populate it.
False when the resume must abort (missing session / over the safe-resume limit).)rÝ   Ú_DIMÚ_RSTÚ_accent_hexr  rè   ré   rê   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úplainr1   Úrichr   rÒ   r   )r   s   "r   r   ÚCCLIAgentSetupMixin._load_resumed_history_late.<locals>.__annotate__U  s!   € ÷ 	*ñ 	*˜ð 	* 3ð 	*¨4ñ 	*r   c                ó~   <€ S'       d   \        V \        P                  R 7       R# S! 4       P                  V4       R# )rë   N)rþ   rÿ   r   )rŽ  r�  rÝ   Ú_quiet_modes   &&€€r   Ú_sayÚ;CLIAgentSetupMixin._load_resumed_history_late.<locals>._sayU  s$   ø€ ßÜ�e¤#§*¡*×-á“×#Ñ# DÖ)r   úcli.resume.session_id_hintúcli.resume.session_not_found©rp   rë   z[1;31mFc                óv   <€ S! 4       P                  R \        \        RSP                  V R7      4       R24      # )ú[dim]úcli.resume.compressed_into©rp   Ú
descendantz[/dim])rþ   rJ  r   rp   )ÚridrÝ   r  s   &€€r   r#  Ú?CLIAgentSetupMixin._load_resumed_history_late.<locals>.<lambda>f  s5   ø€ ™›×+Ñ+Øœ¤Ð">È4Ï?É?ÐgjÔ kÓlÐmÐmsÐtôvr   Ú_resume_history_errorNT)Útip_onlyzcli.resume.cannot_resumerU  rí   úcli.resume.cannot_resume_prefixú[/] )Úrepair_alternationr¦   ru  r¬   Útitleú "Ú"r3   úcli.resume.resumed_sessionr‚   z[bold Ú]z
[/] [bold]z	[/][bold r}  úcli.resume.session_no_messagesrî   )r&   rÝ   rŠ  r‹  rŒ  r  rs  rt  rp   r#   r   rþ   rÿ   r   rx  Ú_resume_history_limit_errorrŸ  rJ  Úget_messages_as_conversationrr  r,   Úconversation_historyr“   rf   r�  r†  )r  rŠ  r‹  rŒ  r  ru  r“  ÚhintÚ	not_foundÚresume_limit_errorÚrestoredÚmÚ	msg_countÚ
title_partÚcountsÚno_messagesrÝ   r’  s   f               @@r   Ú_load_resumed_history_lateÚ-CLIAgentSetupMixin._load_resumed_history_lateJ  sÛ  ú€ ÷ 	FÕEØ×'Ñ'×3Ñ3°D·O±OÓDˆô ˜dÐ$8¸&ÓAÀUÑJˆ÷	*ñ 	*÷
 ÜÐ1Ó2ˆDÜÐ8ÀTÇ_Á_ÔUˆIßÜ�i¤c§j¡jÕ1Ü�d¤§¡Õ,ñ ñ ˜* Y K°¨vÐ6Ô7Ù˜4˜&   t fÐ-Ô.ÙØ×5Ñ5Øõvówˆô �4Ð0°$×7Ò7Ùð "×=Ñ=ÀtÐ=ÓLÐßØ);ˆDÔ&ÙÜÐ,Ð4FÔGØœW¤QÐ'HÓ%IÓJÐKÈ4ÔPWÐXjÓPkÐOlÐmôoñ Ø×#Ñ#×@Ñ@À×AUÑAUÐjnÐ@Óoˆßˆ8Ù#+ÓO¡8˜a¯u©u°V«}ÀÑ/NŸ˜¡8ˆHÐOØ(0ˆDÔ%Ü©ÓL© 1·E±E¸&³MÀVÑ4KŸQ˜Q©ÑLÓMˆIØ<H×<LÑ<LÈW×<UÒ<U˜3˜|¨GÕ4Ð5°RÑ8Ð[]ˆJÜ# I¬s°8«}Ó=ˆFÙÜÐ1Ó2Ð3°1°T·_±_Ð4EÀjÀ\ÐQRÐSYÐRZÐ[Ø™›˜ q¬´Ð3OÓ1PÓ)QÐ(RÐR\Ô]dÐei×etÑetÓ]uÐ\vð wÙ$›˜ q¬°Ó)<Ð(=¸TÀ&ÀðKôLð ×'Ñ'¨¸KÐ'ÕHäÐ<ÈÏÉÔYˆKÙ� ¡{£} o°Q´w¸{Ó7KÐ6LÈCÐPÔQØ×ÑÔÙùò PùâLs   ÆK3Æ,K3ÇK8Ç K8Úmodel_overrideNÚruntime_overriderk  c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¸  z
str | Noner¹  zdict | Nonerk  r   ri   r   )r   s   "r   r   rÛ   …  s9   € ÷ Wñ W¨Zð WÐR]ð Wð  zEð Wð  QUñ Wr   c          
     óä  € ^ RI HpHpHp ^ RIHp V P                  e   R# V P                  4        V P                  4        V P                  4       '       g   R# ^ RI
Hp V P                  f    ^ RIHp	 V	! 4       V n         V P#                  4        T P,                  '       d=   T P                  '       d+   T P.                  '       g   T P1                  4       '       g   R#  T;'       g    \3        T 4      pT;'       g    T P4                  p\7        T RR4      pTRJp\7        T RR4      pT'       d   \8        MT P:                  pT'       d   RMT P<                  pT! RX/ RTbRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRTP?                  R4      bRT P@                  bR\7        T RR4      bRT PB                  bRT PD                  bRT PF                  bRT PF                  '       * bR\7        T RR 4      bR!T PH                  '       d   T PH                  MRbR"T PJ                  ;'       g    RbR#T PL                  bR$T PN                  bR%\7        T R&R4      ;'       d    T'       * bR'TbR(T PP                  bR)T PR                  bR*T PT                  bR+T PV                  bR,T PX                  bR-T PZ                  bR.T P\                  bR/T P^                  bR0R1bR2T P                  bR3TbR4TbR5T'       d   RMT P`                  bR6T'       d   RMT Pb                  bR7T'       d   RMT Pd                  bR8TbR9T'       d   T;'       g    / P?                  R94      MRbR:T'       d   T;'       g    / P?                  R:R;4      MR;bR<T Pg                  4       bR=T Ph                  bR>T Pj                  bR?T Pl                  bR@T Pn                  bRAT Pp                  bRBT Pr                  bRCT Pt                  bRDT Pv                  bRET Pv                  bRFT Px                  bRGT Pz                  '       d   T P|                  MRbRHT Pz                  '       d   T P~                  MRbRIT P€                  '       d   T P‚                  MRbRJT P€                  '       d   T P„                  MRbRKT P†                  bRLT Pˆ                  bRMT PŠ                  b T n        ^ RI pT P                  TnF        T PŽ                  T P                  nH        \7        T RNR4      pTe#   TT P                  nI        RT P                  nJ        T P–                  T P                  nL        TT P                  nM        ^ ROINHOp T! T P                  4        ^ RPIPHQp T! T P                  4       \¥        YÜ4      T nS        \7        T P                  RQR4      '       d   RT nT        T Pª                  '       d£   T P                  '       d‘    T P                  P­                  4        T P                  P®                  '       dX   T P                  P±                  T P^                  T Pª                  4       T! RR\³        RST Pª                  RT7       24       RT nU        R# R#   \         d   p
TP!                  RT
4        Rp
?
ELiRp
?
ii ; i  \         dC   p
^ R	IHp T! T
4       T! 4       P)                  R
\+        T! T
4      4       R24        Rp
?
R# Rp
?
ii ; i  \         d     ELsi ; i  \         d"   p
T! RR\³        RUT
RV7       24        Rp
?
R# Rp
?
ii ; i  \         dc   p
T! 4       p^ RI
Hp TP)                  R
\+        T! T
4      4       R24       ^ RWIZH[p T! T
4       F  pTP)                  T4       K  	   Rp
?
R# Rp
?
ii ; i)YzbBuild the agent on first use; when resuming, restore history from SQLite.
Returns True on success.)rÝ   r  rÞ   )ÚGatewayAgentNTF)Úagent_init_failure_message)Úsession_storeuF   SQLite session store not available â€” session will NOT be indexed: %s)Úexit_on_resume_refusalrí   rî   Ú_pending_one_turn_model_restoreÚ_single_query_moder-   r   r   r   r   r   r$   r   r%   r    r!   Úmax_iterationsÚrun_budget_secondsÚenabled_toolsetsÚdisabled_toolsetsÚverbose_loggingÚ
quiet_moderè   ÚallÚephemeral_system_promptÚprefill_messagesr	  ri  Úpush_reasoningÚ_reasoning_user_setrk  Úproviders_allowedÚproviders_ignoredÚproviders_orderÚprovider_sortÚprovider_require_parametersÚprovider_data_collectionÚopenrouter_min_coding_scorerp   r%  r&   ro   Úclarify_callbackÚconnection_callbackÚconnection_update_callbackÚmodel_confirm_callbackÚmodal_withdraw_callbackÚone_turnÚone_turn_reasoningÚone_turn_aliasr3   Úreasoning_callbackÚfallback_modelÚthinking_callbackÚcheckpoints_enabledÚcheckpoint_max_snapshotsÚcheckpoint_max_total_size_mbÚcheckpoint_max_file_size_mbÚpass_session_idÚskip_context_filesÚskip_memoryÚtool_progress_callbackÚtool_start_callbackÚtool_complete_callbackÚstream_delta_callbackÚtool_gen_callbackÚnotice_callbackÚnotice_clear_callbackÚreaction_callbackÚ_auto_load_skills_result)Úbind)Úseed_credits_at_session_startÚreasoning_pushedrI  zcli.resume.title_applied)r¤  zcli.resume.title_apply_failedrU  )Úpartial_update_hintr   )\r&   rÝ   r  rÞ   Úhermes_cli.gateway_agentr¼  rÕ   Úfinalize_preloaded_skillsÚ_install_tool_callbacksr  Úhermes_cli.cli_chat_error_copyr½  rs  r}   r¾  rS   r(  Ú_ensure_gateway_sessionÚhermes_cli.gateway_chatr¿  rþ   rJ  Ú_resumedr¬  r¶  r'   r-   r#   r   Ú_clarify_callbackÚ_connection_callbackr,   Ú	max_turnsrÄ  rÅ  ÚverboseÚsystem_promptrÊ  r	  ri  Ú_providers_onlyÚ_providers_ignoreÚ_providers_orderÚ_provider_sortÚ_provider_require_paramsÚ_provider_data_collectionÚ_openrouter_min_coding_scorerp   Ú_connection_on_changeÚ_confirm_owner_model_switchÚ_withdraw_gateway_modalÚ_current_reasoning_callbackr&  Ú_on_thinkingrß  rà  rá  râ  rã  Úignore_rulesÚ_on_tool_progressÚ_inline_diffs_enabledÚ_on_tool_startÚ_on_tool_completeÚstreaming_enabledÚ_stream_deltaÚ_on_tool_gen_startÚ
_on_noticeÚ_on_notice_clearÚ_on_reactionÚ_active_agent_refÚ_mark_automation_staleÚcontrol_update_callbackrî  Ú_auto_load_skills_resolvedÚ_agent_status_printÚ	_print_fnÚ_finiteÚhermes_cli.gateway_toolsrï  Úagent.credits_trackerrð  r.   r
  rÌ  Ú_pending_titleÚ_ensure_db_sessionÚ_session_db_createdÚset_session_titler   Úhermes_constantsrò  )r  r¸  r¹  rk  rÝ   r  rÞ   ÚAIAgentr½  r¾  r\   r¿  r)   Úeffective_modelÚpending_one_turnrÙ  Úsingle_query_moderÔ  rÕ  Ú_cliÚ_auto_resultrï  rð  Úconsolerò  rM  s   &$$$                      r   Ú_init_agentÚCLIAgentSetupMixin._init_agent…  s  € ÷ 	5Ñ4ÝDØ�:‰:Ò!Ùð 	×&Ñ&Ô(à×$Ñ$Ô&Ø×/Ñ/×1Ò1ÙåMØ×ÑÒ#ðlÝJÙ#0£?�Ô ð	Ø×(Ñ(Ô*ð �M�MˆM˜d×.×.Ð.°t×7P×7PÐ7PØ×3Ñ3×5Ò5Ùðu	Ø&×@Ð@Ô*:¸4Ó*@ˆGØ,×:Ð:°·
±
ˆOô  ' tÐ-NÐPTÓUÐØ'¨tÐ3ˆHô !(¨Ð.BÀEÓ JÐ÷ %õ /à×+Ñ+ð	 ÷
 +<¡$À×AZÑAZÐÙ ò -5Ù%ð-5Ø/6¯{©{¸9Ô/Eð-5à Ÿ™ ZÔ0ð-5à;B¿;¹;ÀzÔ;Rð-5ð $+§;¡;Ð/CÔ#Dð-5ð !Ÿ™ ZÔ0ð	-5ð ?F¿k¹kÈ)Ô>Tð	-5ð
 !Ÿ™ VÔ,ð-5ð
 ?F¿k¹kÐJ[Ô>\ð-5ð  $Ÿ~š~ð-5ô $+¨4Ð1EÀtÔ#Lð-5ð "&×!6Ò!6ð-5ð KO×J`ÒJ`ð-5ð !%§¢ð-5ð >B¿\¹\Õ9Ið-5ô $+¨4Ð1EÀuÔ#Mð-5ð ?C×>P×>PÐ>P¨×(:Ò(:ÐVZøð-5ð "&×!6Ñ!6×!>Ð!>¸$øð-5ð "&×!6Ò!6ð-5ð FJ×EVÒEVð-5ô  ' tÐ-BÀEÓJ×[Ð[ÐS[Ì|øð-5ñ  #4ð!-5ð  HL×G[ÒG[ð!-5ð" #'×"8Ò"8ð#-5ð" KO×J_ÒJ_ð#-5ð$ #×1Ò1ð%-5ð& -1×,IÒ,Ið'-5ð( *.×)GÒ)Gð)-5ð* -1×,MÒ,Mð+-5ð,  Ÿ?š?ð--5ñ, 6;ð--5ð, HL×GWÒGWð--5ñ. "2ð/-5ñ. H[ð/-5÷0 4E©4È$×JdÑJdøð1-5÷4 0A¡tÀd×FfÑFføð5-5÷8 1B©Àt×GcÑGcøð9-5ñ: "ð;-5÷< ZbÐ$4×$:Ð$:¸×#?Ñ#?Ð@TÔ#UÐgkøð=-5÷> V^Ð 0× 6Ð 6°B×;Ñ;Ð<LÈbÔQÐceøð?-5ð@ $(×#CÑ#CÔ#EðA-5ðB  $×3Ò3ðC-5ðB HL×GXÒGXðC-5ðD %)×$<Ò$<ðE-5ðF *.×)FÒ)FðG-5ðH .2×-NÒ-NðI-5ðJ -1×,LÒ,LðK-5ðL !%× 4Ò 4ðM-5ðL JN×IZÒIZðM-5ðN !×-Ò-ðO-5ðN GK×F\ÒF\ðO-5ðP <@×;U×;UÐ;U D×$7Ò$7Ð[_øðQ-5ðR BF×A[×A[ÐA[ t×'=Ò'=ÐaeøðS-5ðT =A×<R×<RÐ<R d×&8Ò&8ÐX\øðU-5ðV >B×=S×=SÐ=S $×"9Ò"9ÐY]øðW-5ðX !%§¢ðY-5ðX HL×G\ÒG\ðY-5ðZ #'×"3Ò"3ð[-5ˆDŒJóh Ø%)§Z¡ZˆDÔ"Ø15×1LÑ1LˆD�J‰JÔ.ô # 4Ð)CÀTÓJˆLØÒ'Ø6B�—
‘
Ô3Ø8<�—
‘
Ô5ð $(×#;Ñ#;ˆD�J‰JÔ Ø!2ˆD�J‰JÔÝ5Ù�—‘ÔðÝOÙ-¨d¯j©jÔ9ô 2BÀ/Ó1[ˆDÔ.Ü�t—z‘zÐ#5°u×=Ò=ð ,1�Ô(ð ×"×"Ð" t×'7×'7Ð'7ðPØ—J‘J×1Ñ1Ô3Ø—z‘z×5×5Ð5Ø×(Ñ(×:Ñ:¸4¿?¹?ÈD×L_ÑL_Ô`Ù "¤QÐ'AÈ×I\ÑI\Ô%]Ð$^Ð _Ô`Ø.2˜Ô+ó
 øôu ô lØ—‘ÐgÐij×kÒkûðlûô ô 	ÝFÙ" 1Ô%Ù‹M×Ñ *¬WÑ5OÐPQÓ5RÓ-SÐ,TÐTWÐ XÔYÝûð		ûôD ô Úðûô" !ô PÙ˜b¤Ð#BÈ!Ô!LÐ MÐN×OÐOáûðPûô ô 	Ù!“mˆGÝQØ�M‰M˜J¤wÑ/IÈ!Ó/LÓ'MÐ&NÈcÐRÔSÝ<Ù+¨AÖ.�Ø—‘˜dÖ#ñ /åûð	ús  Á.[ Â[1 Ã ^ Ã)^ Ã>A^ ÅD;^ Ê1^ Ê9B^ Í^ Í"^ Í9^ Î^ Î^ Î9^ ÏB:^ Ñ= ^ Ò ^ Ò? ^ Ó C#^ ×] ×A^ Ø"^ Ø55] Ù+A] Û[.Û[)Û)[.Û1\>Û<7\9Ü9\>Ý]Ý^ Ý]Ý^ Ý]?Ý]:Ý4^ Ý:]?Ý?^ Þ_/ÞA_*ß*_/c               ó   € V ^8„  d   QhRR/# )r   r   ri   r   )r   s   "r   r   rÛ     s   € ÷ ñ °Dñ r   c                ó¤  € V P                   '       g   R# ^ RIHp ^ RIHp  \        V P                   RR4      p\        V4      '       g   R# T! \        V RR4      ;'       g    V P                  3/ V'       d   RR/M/ B  R#   T d   p\        T4      u Rp?# Rp?i\         d)   pTP                  RT P                  T4        Rp?R# Rp?ii ; i)	u7  Return a safe-resume error without materializing transcript rows.

``tip_only`` matches call sites that load only the tip session's rows â€” counting
the full lineage there would over-reject heavily-compressed sessions with a small
tip. Generic guard failures fail OPEN; only a genuine over-limit result blocks.N)rÞ   )ÚSessionResumeTooLargeErrorÚassert_resume_saferr  r   Tz@Resume safety check failed for %s (proceeding without guard): %s)rs  r&   rÞ   Úhermes_stater/  r#   r  rp   r1   rS   r(  )r  r   rÞ   r/  Úsafety_checkr   s   &&    r   rª  Ú.CLIAgentSetupMixin._resume_history_limit_error  s¿   € ð ××ÐÙÝÝ;ð	&Ü" 4×#3Ñ#3Ð5IÈ4ÓPˆLÜ˜L×)Ò)ÙÙœ Ð'8¸$Ó?×RÐRÀ4Ç?Á?ñ Eß2:˜Z¨Ñ.ÀòEñ øð *ô 	Ü�s“8�OûÜô 	&Ø�N‰NØRØ—‘ ÷&ð &ñ ûð		&úsA   ¢(B ÁB Á"B Á8B ÂCÂ	
BÂCÂCÂ&CÂ'C
Ã
Cc               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   rÛ   6  s   € ÷ 2ñ 2¨$ñ 2r   c                óf  a € ^ RI Hp S P                  '       d   S P                  '       g   R# S P                  P	                  S P
                  4      pV'       g]   S P                  R\        \        RS P
                  R7      4       R24       S P                  R\        \        R4      4       R24       R# S P                  VV 3R	 l4      p^ R
I
Hp V! S P                  S P                  4      ;p'       dE   S P                  R\        V4       R24       RS n        ^ RIHp V! S P                  4      S n        R# S P!                  4       pV'       d3   VS n        S P                  R\        \        R4      4       RV 24       R# S P                  P%                  S P                  4      w  rxV! 4       p	V'       g9   S P                  RV	 R\        \        RS P
                  R7      4       R24       R# V U
u. uF  qªP'                  R4      R8w  g   K  V
NK  	  pp
VS n        V U
u. uF  qªP'                  R4      R8w  g   K  V
NK  	  up
S n        ^ RIHp \1        S P*                   U
u. uF  q«! V
4      '       g   K  V
NK  	  up
4      pVP'                  R4      '       d   RVR,           R2MRpS P                  RV	 R\        \        R4      4       RS P
                   RV R\3        V\1        V4      4       R24       S P5                  V4       S P7                  4        R# u up
i u up
i u up
i )zíLoad a resumed session's history early (from run(), before the first chat) so
it can be displayed; ``_init_agent()`` then skips its own DB round-trip. Sets
``self.conversation_history`` and prints the status line. True if history loaded.)rŒ  Frí   r–  r—  rî   r™  r•  c                ól   <€ SP                  R \        \        RSP                  V R7      4       R24      # )r™  rš  r›  rî   )Ú_console_printrJ  r   rp   )r�  r  s   &€r   r#  Ú=CLIAgentSetupMixin._preload_resumed_session.<locals>.<lambda>D  s3   ø€ ˜×+Ñ+Øœ¤Ð">È4Ï?É?ÐgjÔ kÓlÐmÐmpÐqôsr   )Úkanban_resume_refusal)Únew_session_idr¡  r¢  Ú[r¨  r©  r¦   ru  )Úis_user_originated_turnr¤  r¥  r¦  r3   r§  z [bold]z[/bold]r‚   T)r&   rŒ  rù  rs  rt  rp   r7  rJ  r   rx  Úhermes_cli.kanban_resume_guardr9  rr  Úhermes_state_idsr:  Úsession_startrª  rŸ  Úget_resume_conversationsr,   r¬  Ú_resume_display_historyÚagent.context_compressorr<  r“   rf   r�  r†  )r  rŒ  ru  r9  Úkanban_refusalr:  r¯  r°  r³   Úaccent_colorr±  r<  r²  r³  s   f             r   Ú_preload_resumed_sessionÚ+CLIAgentSetupMixin._preload_resumed_session6  sä  ø€ õ 	$Ø�}�}ˆ} D×$4×$4Ð$4ÙØ×'Ñ'×3Ñ3°D·O±OÓDˆßØ×Ñ *¬W´QÐ7UÐbf×bqÑbqÔ5rÓ-sÐ,tÐtwÐ xÔyØ×Ñ %¬´Ð2NÓ0OÓ(PÐ'QÐQTÐ UÔVÙØ×5Ñ5Øôsótˆõ 	IÙ3°D×4DÑ4DÀd×FZÑFZÓ[Ð[ˆNÖ[Ø×Ñ *¬W°^Ó-DÐ,EÀSÐ IÔJØ!ˆDŒMÝ7Ù,¨T×-?Ñ-?Ó@ˆDŒOÙØ!×=Ñ=Ó?ÐßØ);ˆDÔ&Ø×Ñ *¬W´QÐ7XÓ5YÓ-ZÐ,[Ð[_Ð`rÐ_sÐ tÔuÙØ$(×$4Ñ$4×$MÑ$MÈd×NbÑNbÓ$cÑ!ˆÙ"“}ˆßØ×ÑØ�L�> ¤7¬1Ð-MÐZ^×ZiÑZiÔ+jÓ#kÐ"lÐloÐpôráÙ'ÓK™x˜!¯5©5°«=¸NÑ+J—A�A™xˆÐKØ$,ˆÔ!Ù3BÓ'f±?¨aÇeÁeÈFÃmÐWeÑFe¯¨±?Ñ'fˆÔ$ÝDô  D×$@Ò$@Ó_Ñ$@˜qÐD[Ð\]×D^Ÿ˜Ñ$@Ñ_Ó`ˆ	Ø6B×6FÑ6FÀw×6OÒ6O�r˜, wÕ/Ð0°Ñ2ÐUWˆ
Ø×ÑØ�ˆ~˜Qœw¤qÐ)EÓ'FÓGÐHÈÐPT×P_ÑP_ÐO`Ð`gØˆl˜!œN¨9´c¸(³mÓDÐEÀSðJô	Kð 	×#Ñ# LÔ1Ø×ÑÔÙùò Lùâ'fùò `s$   Ç8L$ÈL$È'L)ÉL)É*L.É>L.c                óê  a aa a!€ ^ RI HpHpHo Hp ^ RIHo \        S RS P                  4      pV'       d   S P                  R8X  d   R# VP                  R/ 4      p\        WEVV 3R l4      w  rgpV'       g   R# \        ^ \        V4      \        VP                  R^
4      4      ^,          ,
          4      p	WiR pVe2   V'       d*   Wy,
          p
^ T
u;8:  d   \        V4      8  d
   M MR	V3Wj&   ^ R
IHp ^ RIHp \'        4       w  rÞppR\)        R4       R2pR\)        RRR7       R2pRVRV 2RR\        V4      ,          3RVRV 2RR\        V4      ,          3R	VRV 2RR\        V4      ,          3/pV! 4       pV	'       d#   VP+                  R\)        RV	R7       R2RR7       \-        V4       FË  w  pw  ppVR8X  d   VP+                  RV R2RR7       MyVV,          w  ppppVP+                  VVR7       VP/                  4       ;'       g    R.vppVP+                  VR,           VR7       V F  pVP+                  V V R2VR7       K  	  V\        V4      ^,
          8  g   Kº  VP+                  R4       KÍ  	  V! VR V R!\1        \)        R"4      4       R#2R$V 2R'VR%7      o!V! V!V 3R& l4       V! 4       ;_uu_ 4        S P3                  S!4       RRR4       R#   + '       g   i     R# ; i)(z›Render a dim Rich-panel recap of the previous conversation, capped at the last
``resume_exchanges`` user/assistant exchanges with a hidden-count indicator.)Ú
CLI_CONFIGÚ_record_output_history_entryÚ_strip_reasoning_tagsÚ_suspend_output_historyr    rA  ÚminimalNÚdisplayc                ó    <€ S! S! V 4      4      # r5   r   )r   rµ   rJ  s   &€€r   r#  Ú=CLIAgentSetupMixin._display_resumed_history.<locals>.<lambda>t  s   ø€ Ñ.DÑEZÐ[\ÓE]Ô.^r   Úresume_exchangesÚassistant_last)ÚPanel)ÚTextrI  zcli.resume.label_your‚   zcli.resume.label_assistantÚHermes)Ú
agent_namer¬   z	dim bold Údimr­   zbold r3   zcli.resume.earlier_messages)rd   z

z
dim italic)Ústyler«   u     â—ˆ r®   z[dim r¨  zcli.resume.panel_titlerî   zdim )r¤  Úborder_styleÚpaddingrW  c                 ó&   <€ SP                  S 4      # r5   )Ú"_render_resume_history_panel_lines)Úpanelr  s   €€r   r#  rO  �  s   ø€ ¨T×-TÑ-TÐUZÔ-[r   )é    é   )r&   rH  rI  rJ  rK  r°   r¡   r#   r¬  Úresume_displayr,   rÁ   rT   r“   rU   Ú
rich.panelrR  Ú	rich.textrS  rÏ   r   rW   Ú	enumerater²   rJ  r7  )"r  rH  rI  rK  r³   Ú_disprR   Ú_last_asst_idxÚ_last_asst_fullÚskippedÚadj_idxrR  rS  Ú_history_text_cÚ_session_label_cÚ_session_border_cÚ_assistant_label_cÚ	you_labelÚassistant_labelÚrole_stylesr[   Úir¦   r…   r¾   Úlabel_styleÚ
body_styleÚindentÚfirstÚrestÚmlrµ   rJ  r\  s"   f                              @@@r   Ú_display_resumed_historyÚ+CLIAgentSetupMixin._display_resumed_historyj  sê  û€ ÷ 	qÓpÝTÜ! $Ð(AÀ4×C\ÑC\Ó]ˆß $×"5Ñ"5¸Ô"BÙØ—‘˜y¨"Ó-ˆÜ3JØÕ$^ó4`Ñ0ˆ çÙÜ�aœ˜W›¬¨E¯I©IÐ6HÈ"Ó,MÓ(NÐQRÕ(RÕRÓSˆØ˜(Ð#ˆàÒ%¯/Ø$Õ.ˆGØ�GÖ*œc '›l×*Ø$4°oÐ#F�Ñ Ý$Ý"ä Ó"ñ 	QˆÐ+<Ð>Pð œÐ1Ó2Ð3°1Ð5ˆ	ØœqÐ!=È(ÔSÐTÐTUÐVˆà�Y )Ð,<Ð+=Ð >ÀÀsÌSÐQZË^ÕG[Ð\Ø˜/¨YÐ7IÐ6JÐ+KÈUÐTWÔZ]Ð^mÓZnÕTnÐoØ˜°%Ð8JÐ7KÐ0LÈbÐRUÔX[Ð\kÓXlÕRlÐmð
ˆñ
 “ˆßØ�L‰L˜2œaÐ =ÀWÔMÐNÈdÐSÐ[gˆLÔhÜ(¨Ö1‰OˆA‰|��dØ�wŒØ—‘˜v d V¨2Ð.°l�ÕCà9DÀTÕ9JÑ6��{ J°Ø—‘˜U¨+�Ô6Ø#Ÿ™Ó0×8Ð8°R°D��˜Ø—‘˜U T�\°�Ô<Û�BØ—L‘L F 8¨B¨4¨rÐ!2¸*�LÖEñ à”3�w“< !Õ#Ö#Ø—‘˜RÖ ñ  2ñ Ø˜5Ð!1Ð 2°!´G¼AÐ>VÓ<WÓ4XÐ3YÐY\Ð]ØÐ 1Ð2Ð3¸VÈ?ô\ˆñ 	%Õ%[Ô\Ù$×&Õ&Ø×Ñ Ô&÷ '×&×&Ò&ús   ËK!Ë!K2	)r
  r"   r÷   rø   r  r  rÌ  rA  rŸ  rr  rù  rs  r%   r$   rÕ   r   r   r   r¬  r-   r   r   rp   )F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r  rû   r5  r3  rC  r?  r@  ro  rx  r�  r†  r¶  r+  rª  rE  rv  Ú__static_attributes__r   r   r   rÙ   rÙ   ÿ   sƒ   † ÙPõsòj(õT4õIõ(*õõ25õnò&ð$?ÀE÷ ?õõ9ðvW¸$ð WÐ`dð Wð  HL÷ W÷rõ02öh5'r   rÙ   ))Úbanner_textz#FFF8DC)Úsession_labelz#DAA520)Úsession_borderz#8B8682)Úui_okz#8FBC8F)r|  Ú
__future__r   rÿ   Úrich.markupr   rJ  Ú
agent.i18nr   Úutilsr   r   r'   r.   rE   r_   rf   rl   rr   ru   rt   r‹   r˜   r±   rÁ   rÎ   rÏ   r×   rÙ   r   r   r   Ú<module>r†     s¤   ðñ6õ #ã 
å )å Ý 'õTõ Cõ[õLõ&õ61õBòNò4ò õ$3õ
:ð  Ð4ØÐ!HØÐ;ØÐ;ð	=Ð õ52ðrÐ õ
Dõ÷`
'ó `
'r   