§
    øžyj›ª  ã                  óD   — d Z ddlmZ ddlZddlmZ  G d„ d¦  «        ZdS )a  Agent-construction and session-resume display methods for ``HermesCLI``.

Extracted from ``cli.py`` as part of the god-file decomposition campaign
(``~/.hermes/plans/god-file-decomposition.md``, Phase 4 step 2). This mixin holds
the agent lifecycle/setup cluster: runtime-credential resolution, per-turn agent
config, first-use agent construction, and resumed-session preload + history recap.

Behavior-neutral: every method is lifted verbatim from ``HermesCLI``. ``self.*``
calls resolve unchanged via the MRO. Neutral dependencies are imported at module
top level; ``cli.py``-internal helpers/constants are imported lazily inside each
method (``from cli import ...`` resolves at call time, when ``cli`` is fully
loaded) so this module never imports ``cli`` at import time -> no import cycle.
é    )ÚannotationsN)Úescapec                  ó\   — e Zd ZdZdd„Zdd„Zdd„Zdd
„Zddddœdd„Zddd„Z	dd„Z
d„ ZdS )ÚCLIAgentSetupMixinzFAgent construction + session-resume display methods for ``HermesCLI``.ÚreturnÚboolc                óÖ	  — ddl m}m}m} ddlm}m} d}d}	  || j        | j        | j	        ¬¦  «        }n# t          $ r}|}Y d}~nd}~ww xY w|�€:|��7ddlm}	 t          ||	¦  «        �r t          | j        t          ¦  «        r| j        ng }
|
D ]ú}|                     d¦  «        pd                     ¦   «                              ¦   «         }|                     d	¦  «        pd                     ¦   «         }|r|sŒk	 dd
lm} d|i}|                     d¦  «        r|d         |d<    ||¦  «        }|r||d<    |d*i |¤Ž}|                     d|||¦  «          |d|› d|› �¦  «         || _        || _        d} n# t          $ r Y Œ÷w xY w|€2|r ||¦  «        nd} |¦   «                              d|› d�¦  «         dS |                     d¦  «        }|                     d¦  «        }|                     dd¦  «        }|                     d| j        ¦  «        }|                     d¦  «        }t          |                     d¦  «        pg ¦  «        }|                     d¦  «        }t3          |¦  «        ot          |t4          ¦  «         }|s½t          |t4          ¦  «        r|s¦|                     dd¦  «        }t          |t4          ¦  «        o|od|v}|rd}|                     d||¦  «         nY|p| j        pd                     ¦   «         }|r|d k    rt/          d!|› d"�¦  «         nt/          d#¦  «         t/          d$¦  «         dS t          |t4          ¦  «        r|st/          d%¦  «         dS || j        k    p
|| j        k    }|| j        k    p || j        k    p|| j        k    p
|| j         k    }|| _        || _        || _        || _         || _!        |                     d¦  «        | _"        || _        || _        |                     d	¦  «        }|rTt          |t4          ¦  «        r?| j         p-| j        | j        k    p| j        |                     d&¦  «        k    } | r|| _        | j        sE|rC	 dd'l#m$}!  |!|¦  «        }"|"r|"| _        | %                    d(|"|¦  «         n# t          $ r Y nw xY w|  &                    |¦  «        }#|s|s|#r| j'        �d| _'        d| _(        d)S )+a  
        Ensure runtime credentials are resolved before agent use.
        Re-resolves provider credentials so key rotation and token refresh
        are picked up without restarting the CLI.
        Returns True if credentials are ready, False on auth failure.
        r   )ÚChatConsoleÚ_cprintÚlogger)Úresolve_runtime_providerÚformat_runtime_provider_errorN©Ú	requestedÚexplicit_api_keyÚexplicit_base_url)Ú	AuthErrorÚproviderÚ Úmodel)Úresolve_entry_api_keyr   Úbase_urlr   r   zEPrimary provider auth failed (%s). Falling through to fallback: %s/%su7   âš ï¸�  Primary auth failed â€” switching to fallback: z / zProvider resolution failed.z
[bold red]ú[/]FÚapi_keyÚ
openrouterÚapi_modeÚcommandÚargsÚcredential_poolÚsourceúopenrouter.aizno-key-requireduh   No API key for custom endpoint %s (source=%s), using placeholder â€” local servers typically ignore authÚautou(   
âš ï¸�  No API key found for provider 'z'.u-   
âš ï¸�  No inference provider is configured.zS   Run 'hermes model' to choose a provider, or 'hermes setup' for first-time setup.uf   
âš ï¸�  Provider resolver returned an empty base URL. Check your provider config or run: hermes setupÚname)Úget_default_model_for_provideru8   No model configured â€” defaulting to %s for provider %sT© ))Úclir
   r   r   Úhermes_cli.runtime_providerr   r   Úrequested_providerÚ_explicit_api_keyÚ_explicit_base_urlÚ	ExceptionÚhermes_cli.authr   Ú
isinstanceÚ_fallback_modelÚlistÚgetÚstripÚlowerÚhermes_cli.fallback_configr   Úwarningr   Úprintr   ÚcallableÚstrÚdebugr   r   r   Úacp_commandÚacp_argsÚ_credential_poolÚ_provider_sourceÚhermes_cli.modelsr$   ÚinfoÚ_normalize_model_for_providerÚagentÚ_active_agent_route_signature)$Úselfr
   r   r   r   r   Ú_primary_excÚruntimeÚexcr   Ú	_fb_chainÚ_fbÚ_fb_providerÚ	_fb_modelr   Ú
_fb_kwargsÚ_fb_api_keyÚmessager   r   Úresolved_providerÚresolved_api_modeÚresolved_acp_commandÚresolved_acp_argsÚresolved_credential_poolÚ_is_callable_providerÚ_sourceÚ_has_custom_baseÚ_provÚcredentials_changedÚrouting_changedÚruntime_modelÚshould_use_runtime_modelr$   Ú_defaultÚmodel_changeds$                                       úF/home/ragecks/.hermes/hermes-agent/hermes_cli/cli_agent_setup_mixin.pyÚ_ensure_runtime_credentialsz.CLIAgentSetupMixin._ensure_runtime_credentials   s�  € ð 	5Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 ˆØˆð	Ø.Ð.ØÔ1Ø!%Ô!7Ø"&Ô"9ðñ ô ˆGˆGøõ
 ð 	ð 	ð 	ØˆLˆLˆLˆLˆLˆLøøøøð	øøøð ‰?˜|Ñ7Ø1Ð1Ð1Ð1Ð1Ð1Ý˜,¨	Ñ2Ô2ñ !Ý4>¸tÔ?SÕUYÑ4ZÔ4ZÐb˜DÔ0Ð0Ð`b�	Ø$ð !ð !�CØ$'§G¢G¨JÑ$7Ô$7Ð$=¸2×#DÒ#DÑ#FÔ#F×#LÒ#LÑ#NÔ#N�LØ!$§¢¨Ñ!1Ô!1Ð!7°R× >Ò >Ñ @Ô @�IØ'ð !¨yð !Ø ð!ØTÐTÐTÐTÐTÐTà&1°<Ð%@˜
ØŸ7š7 :Ñ.Ô.ð NØ>AÀ*¼o˜JÐ':Ñ;Ø&;Ð&;¸CÑ&@Ô&@˜Ø&ð IØ=H˜JÐ'9Ñ:Ø":Ð":Ð"HÐ"H¸ZÐ"HÐ"H˜ØŸšØcØ(¨,¸	ñô ð ð  ˜Ð vÐZfÐ vÐ vÐktÐ vÐ vÑwÔwÐwØ2>˜Ô/Ø%.˜œ
Ø'+˜Ø˜øÝ$ð !ð !ð !Ø ˜ð!øøøð ˆ?ØEQÐtÐ3Ð3°LÑAÔAÐAÐWtˆGØˆK‰MŒM×ÒÐ 9¨WÐ 9Ð 9Ð 9Ñ:Ô:Ð:Ø�5à—+’+˜iÑ(Ô(ˆØ—;’;˜zÑ*Ô*ˆØ#ŸKšK¨
°LÑAÔAÐØ#ŸKšK¨
°D´MÑBÔBÐØ&Ÿ{š{¨9Ñ5Ô5ÐÝ  §¢¨VÑ!4Ô!4Ð!:¸Ñ;Ô;ÐØ#*§;¢;Ð/@Ñ#AÔ#AÐ õ !)¨Ñ 1Ô 1Ð R½*ÀWÍcÑ:RÔ:RÐ6RÐØ$ð 	­j¸Å#Ñ.FÔ.Fð 	Ègð 	ð
 —k’k (¨BÑ/Ô/ˆGÝ)¨(µCÑ8Ô8Ði¸XÐiÈ/ÐaiÐJiÐØð Ø+�Ø—’ðPà˜gñô ð ð ð +ÐK¨dÔ.EÐKÈ×RÒRÑTÔT�Øð L˜U fš_˜_ÝÐOÀeÐOÐOÐOÑPÔPÐPÐPåÐJÑKÔKÐKÝð =ñ >ô >ð >à�uÝ˜(¥CÑ(Ô(ð 	°ð 	Ýð Dñ Eô Eð Eà�5à%¨¬Ò5ÐR¸ÀTÄ]Ò9RÐà ¤Ò.ð 2Ø  D¤MÒ1ð2à# tÔ'7Ò7ð2ð ! D¤MÒ1ð	 	ð *ˆŒØ)ˆŒØ/ˆÔØ)ˆŒØ 8ˆÔØ '§¢¨HÑ 5Ô 5ˆÔØˆŒØ ˆŒð  Ÿš GÑ,Ô,ˆØð 	+�Z¨µsÑ;Ô;ð 	+ð ”J�ð 2Ø”
˜dœmÒ+ð2à”
˜gŸkšk¨&Ñ1Ô1Ò1ð %ð
 (ð +Ø*�”
ð
 Œzð 	Ð/ð 	ð
ØLÐLÐLÐLÐLÐLØ9Ð9Ð:KÑLÔL�Øð Ø!)�D”JØ—K’KØRØ Ð"3ñô ð øøõ ð ð ð Ø�ðøøøð
 ×:Ò:Ð;LÑMÔMˆð  ð 	6 ?ð 	6°mð 	6ÈÌÐI_ØˆDŒJØ15ˆDÔ.àˆts:   ˜6 ¶
AÁ AÁAÃ=A=E<Å<
F	ÆF	Ñ71R) Ò)
R6Ò5R6c                óò  — ddl m} 	  || j        | j        | j        ¬¦  «        }n# t
          $ r Y dS w xY wt          |t          ¦  «        sdS |                     d¦  «        }|                     d¦  «        }t          |¦  «        r$t          |t          ¦  «        st          |¦  «        S t          |t          ¦  «        r|rt          |¦  «        S t          t          |t          ¦  «        o|od|v¦  «        S )u¾  Silently probe whether any inference provider can be resolved.

        Unlike ``_ensure_runtime_credentials`` this never prints and never
        mutates CLI state â€” it exists so the interactive first-run path can
        detect a completely unconfigured install *before* the user types a
        message into a chat that cannot work (#62935-adjacent UX class:
        keyless first run must route into onboarding, not a broken chat).
        r   )r   r   Fr   r   r!   )r'   r   r(   r)   r*   r+   r-   Údictr0   r6   r7   r   )rB   r   rD   r   r   s        r\   Ú_runtime_credentials_readyz-CLIAgentSetupMixin._runtime_credentials_ready»   s*  € ð 	IÐHÐHÐHÐHÐHð	Ø.Ð.ØÔ1Ø!%Ô!7Ø"&Ô"9ðñ ô ˆGˆGøõ
 ð 	ð 	ð 	Ø�5�5ð	øøøå˜'¥4Ñ(Ô(ð 	Ø�5Ø—+’+˜iÑ(Ô(ˆØ—;’;˜zÑ*Ô*ˆÝ�GÑÔð 	"¥Z°½Ñ%=Ô%=ð 	"Ý˜‘>”>Ð!Ý�g�sÑ#Ô#ð 	"¨ð 	"Ý˜‘>”>Ð!åÝ�x¥Ñ%Ô%ð 0Øð0à xÐ/ñ
ô 
ð 	
s   ˆ& ¦
4³4c                ó€  — ddl m}m}  |d¦  «          |d¦  «          |d¦  «         	 t          d¦  «                             ¦   «                              ¦   «         }n'# t          t          f$ r t          ¦   «          d}Y nw xY w|dv r |d	¦  «         d
S 	 ddl	m
}  |¦   «          ny# t          t          t          f$ r t          ¦   «           |d¦  «         Y d
S t          $ r:}|                     d|¦  «          |d|› �¦  «          |d¦  «         Y d}~d
S d}~ww xY w	 ddlm}  |¦   «                              d¦  «        pi }t#          |t$          ¦  «        ry|                     d¦  «        pd                     ¦   «         }|r|| _        |                     d¦  «        p|                     d¦  «        pd                     ¦   «         }	|	r|	| _        n-# t          $ r }|                     d|¦  «         Y d}~nd}~ww xY wd| _        d| _        |                      ¦   «         r |d¦  «         dS  |d¦  «         d
S )aÎ  Offer the provider picker when no provider is configured at all.

        Called from the interactive startup path when
        ``_runtime_credentials_ready()`` is False and stdin is a TTY. Runs the
        exact same flow as ``hermes model`` (which fronts Quick Setup / Nous
        Portal OAuth as the first, recommended option) so there is a single
        source of truth for provider onboarding. Returns True when a provider
        was configured.
        r   )r   r   r   u?   âš• No inference provider is configured yet â€” let's fix that.z[  You'll pick a provider (Nous Portal OAuth is the fastest; no API key needed) and a model.z   Set up a provider now? [Y/n]: Ún>   rb   Únoz9  Skipped. Run 'hermes model' or 'hermes setup' any time.F)Úselect_provider_and_modelz/  Setup cancelled. Run 'hermes model' any time.z#first-run provider setup failed: %su!     âš ï¸�  Provider setup failed: z"  Run 'hermes model' to try again.N)Úload_configr   r   Údefaultz#first-run config re-sync failed: %su3     âœ“ Provider configured â€” you're ready to chat.Tz>  Provider setup didn't complete. Run 'hermes model' to retry.)r&   r   r   Úinputr1   r2   ÚKeyboardInterruptÚEOFErrorr5   Úhermes_cli.mainrd   Ú
SystemExitr+   r8   Úhermes_cli.configre   r0   r-   r_   r(   r   r@   rA   r`   )
rB   r   r   Úanswerrd   rE   re   Ú
_model_cfgÚ_new_providerÚ
_new_models
             r\   Ú_offer_first_run_setupz)CLIAgentSetupMixin._offer_first_run_setupÝ   sú  € ð 	(Ð'Ð'Ð'Ð'Ð'Ð'Ð'àˆ�‰ŒˆØˆÐQÑRÔRÐRØˆð 2ñ 	3ô 	3ð 	3ð	ÝÐ=Ñ>Ô>×DÒDÑFÔF×LÒLÑNÔNˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFˆFð	øøøð �[Ð Ð ØˆGÐOÑPÔPÐPØ�5ð	ØAÐAÐAÐAÐAÐAØ%Ð%Ñ'Ô'Ð'Ð'øÝ!¥8­ZÐ8ð 	ð 	ð 	Ý‰GŒGˆGØˆGÐEÑFÔFÐFØ�5�5Ýð 	ð 	ð 	Ø�LŠLÐ>ÀÑDÔDÐDØˆGÐ=¸Ð=Ð=Ñ>Ô>Ð>ØˆGÐ8Ñ9Ô9Ð9Ø�5�5�5�5�5øøøøð		øøøð	EØ5Ð5Ð5Ð5Ð5Ð5Ø%˜+™-œ-×+Ò+¨GÑ4Ô4Ð:¸ˆJÝ˜*¥dÑ+Ô+ð ,Ø!+§¢°
Ñ!;Ô!;Ð!A¸r× HÒ HÑ JÔ J�Ø ð <Ø.;�DÔ+à—N’N 9Ñ-Ô-ÐN°·²ÀÑ1HÔ1HÐNÈBß’%‘'”'ð ð ð ,Ø!+�D”JøøÝð 	Eð 	Eð 	EØ�LŠLÐ>ÀÑDÔDÐDÐDÐDÐDÐDÐDøøøøð	Eøøøð ˆŒ
Ø-1ˆÔ*à×*Ò*Ñ,Ô,ð 	ØˆGÐIÑJÔJÐJØ�4ØˆÐPÑQÔQÐQØˆusH   «3A Á!BÂBÂB) Â)0DÃ	DÃ%/DÄDÄ#B3G Ç
HÇ!G<Ç<HÚuser_messager7   r_   c                óà  — ddl m} | j        | j        | j        t          | d| j        ¦  «        | j        | j        t          | j	        pg ¦  «        t          | dd¦  «        dœ}| j
        || j
        |d         |d         |d         |d	         |d
         t          |d         ¦  «        fdœ}t          | dd¦  «        }|sd|d<   |S 	  ||d         ¦  «        }n# t          $ r d}Y nw xY w||d<   |S )aL  Build the effective model/runtime config for a single user turn.

        Always uses the session's primary model/provider.  If the user has
        toggled `/fast` on and the current model supports Priority
        Processing / Anthropic fast mode, attach `request_overrides` so the
        API call is marked accordingly.
        r   )Úresolve_fast_mode_overridesr(   r;   N©r   r   r   r(   r   r   r   r   r   r   r   r   r   )r   rD   Ú	signatureÚservice_tierÚrequest_overridesr   )r=   rt   r   r   r   Úgetattrr   r9   r/   r:   r   Útupler+   )rB   rr   rt   rD   Úrouterw   Ú	overridess          r\   Ú_resolve_turn_agent_configz-CLIAgentSetupMixin._resolve_turn_agent_config  sL  € ð 	BÐAÐAÐAÐAÐAð ”|ØœØœÝ")ØÐ*¨D¬Mñ#ô #ð œØÔ'Ý˜œÐ,¨"Ñ-Ô-Ý& tÐ-?ÀÑFÔFð
ð 
ˆð ”ZØà”
Ø˜
Ô#ØÐ,Ô-Ø˜
Ô#Ø˜
Ô#Ø˜	Ô"Ý�g˜f”oÑ&Ô&ðð
ð 
ˆõ ˜t ^°TÑ:Ô:ˆØð 	Ø)-ˆEÐ%Ñ&ØˆLð	Ø3Ð3°E¸'´NÑCÔCˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøà%.ˆÐ!Ñ"Øˆs   ÃC ÃC&Ã%C&N)Úmodel_overrideÚruntime_overriderx   r~   r   rx   údict | Nonec               óÈ  — ddl m}m}m}m}m}m}	m}
m} | j	        �dS  |
¦   «          |  
                    ¦   «          |                      ¦   «          |                      ¦   «         sdS ddlm}  ||t          | dd¦  «        ¬¦  «         | j        €D	 dd	lm}  |¦   «         | _        n-# t&          $ r }|                     d
|¦  «         Y d}~nd}~ww xY w| j        �rÿ| j        �r÷| j        �sï| j                             | j        ¦  «        }t          | dd¦  «        dk    }|sh|r?t3          d| j        › �t4          j        ¬¦  «         t3          dt4          j        ¬¦  «         n% |	d| j        › |› �¦  «          |	|› d|› �¦  «         dS 	 | j                             | j        ¦  «        }n# t&          $ r
 | j        }Y nw xY w|rx|| j        k    rm |¦   «                              dt;          | j        ¦  «        › dt;          |¦  «        › d�¦  «         || _        | j                             | j        ¦  «        }|r|}t          | dd¦  «        }|rdS |                      d¬¦  «        }|rW|| _        |rt3          d|› �t4          j        ¬¦  «         n- |¦   «                              dt;          |¦  «        › �¦  «         dS | j                              | j        d¬¦  «        }|�r<d„ |D ¦   «         }|| _        tC          d„ |D ¦   «         ¦  «        }d}| "                    d¦  «        rd|d         › d�}|rEt3          d | j        › |› d!|› d"|d#k    rd$nd› d%tC          |¦  «        › d&�
t4          j        ¬¦  «         nw |¦   «                              d' |¦   «         › d(t;          | j        ¦  «        › d) |¦   «         › d*t;          |¦  «        › d+|› d"|d#k    rd$nd› d%tC          |¦  «        › d&�¦  «         |  #                    ||¬,¦  «         |  $                    ||¬,¦  «         ne|r%t3          d-| j        › d.�t4          j        ¬¦  «         n> |¦   «                              d' |¦   «         › d/t;          | j        ¦  «        › d0�¦  «         	 | j        j%         &                    d1| j        f¦  «         | j        j%         '                    ¦   «          n# t&          $ r Y nw xY w	 |pZ| j(        | j)        | j*        t          | d2| j*        ¦  «        | j+        | j,        t[          | j.        pg ¦  «        t          | d3d¦  «        d4œ}|p| j/        } |dji d5|“d6| "                    d6¦  «        “d7| "                    d7¦  «        “d8| "                    d8¦  «        “d2| "                    d2¦  «        “d9| "                    d9¦  «        “d:| "                    d;¦  «        “d<| "                    d=¦  «        “d>| "                    d>¦  «        “d?| j0        “d@| j1        “dA| j2        “dB| j3        “dC| j4        “dD| j4         “dt          | ddE¦  «        “dF| j5        r| j5        nd“dG| j6        pd“dH| j7        “dI| j8        “dJ|“dK| j9        “dL| j:        “dM| j;        “dN| j<        “dO| j=        “dP| j>        “dQ| j?        “dR| j        “dSdT“dU| j        “dV| j@        “dW|  A                    ¦   «         “dX| jB        “dY| jC        “dZ| jD        “d[| jE        “d\| jF        “d]| jG        “d^| jH        “d_| jI        “d`| jI        “da| jJ        “db| jK        r| jL        nd“dc| jK        r| jM        nd“dd| jN        r| jO        nd“de| jN        r| jP        nd“df| jQ        “dg| jR        “dh| jS        “Ž| _	        ddl }| j	        |_T        |	| j	        _U        	 ddilVmW}  || j	        ¦  «         n# t&          $ r Y nw xY w|| "                    d8¦  «        | "                    d2¦  «        | "                    d7¦  «        | "                    d9¦  «        | "                    d;¦  «        t±          | "                    d=¦  «        pdj¦  «        f| _Y        | jZ        r | j        r™| j	        r’	 | j	         [                    ¦   «          | j	        j\        r?| j         ]                    | j        | jZ        ¦  «          |	dk| jZ        › �¦  «         d| _Z        n,# t¼          t&          f$ r} |	dl|› �¦  «         Y d}~nd}~ww xY wdS # t&          $ rW} |¦   «         }|                     dm|› dn�¦  «         ddol_m`}  ||¦  «        D ]}|                     |¦  «         ŒY d}~dS d}~ww xY w)pzÐ
        Initialize the agent on first use.
        When resuming a session, restores conversation history from SQLite.
        
        Returns:
            bool: True if successful, False otherwise
        r   )ÚAIAgentr
   Ú_DIMÚ_RSTÚ_accent_hexr   Ú_prepare_deferred_agent_startupr   NTF)Ú'ensure_mcp_discovery_before_agent_buildÚ_single_query_mode)r   Úsingle_query)Ú	SessionDBuF   SQLite session store not available â€” session will NOT be indexed: %sÚtool_progress_modeÚfullÚoffzSession not found: )Úfilez@Use a session ID from a previous CLI run (hermes sessions list).z[1;31mSession not found: ú[dim]Session ú was compressed into z5; resuming the descendant with your transcript.[/dim]Ú_resume_history_error)Útip_onlyzCannot resume session: ú$[bold red]Cannot resume session:[/] )Úrepair_alternationc                óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS ©ÚroleÚsession_meta©r0   ©Ú.0Úms     r\   ú
<listcomp>z2CLIAgentSetupMixin._init_agent.<locals>.<listcomp>«  s,   € ÐSÐSÐS !°1·5²5¸±=´=ÀNÒ3RÐ3R˜AÐ3RÐ3RÐ3Ró    c                óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS )r—   Úuserr™   rš   s     r\   r�   z2CLIAgentSetupMixin._init_agent.<locals>.<listcomp>­  s,   € Ð PÐ PÐ P q¸¿º¸f¹¼ÈÒ8OÐ8O Ð8OÐ8OÐ8Orž   r   Útitleú "ú"u   â†» Resumed session ú (ú user messageé   Úsú, z total messages)z[bold u   ]â†» Resumed session[/] [bold]z	[/][bold Ú]z[/] ()ÚquietzSession z+ found but has no messages. Starting fresh.ú	]Session ú. found but has no messages. Starting fresh.[/]úCUPDATE sessions SET ended_at = NULL, end_reason = NULL WHERE id = ?r(   r;   ru   r   r   r   r   r   r9   r   r:   r   r   Ú
max_tokensÚmax_iterationsÚenabled_toolsetsÚdisabled_toolsetsÚverbose_loggingÚ
quiet_modeÚallÚephemeral_system_promptÚprefill_messagesÚreasoning_configrw   rx   Úproviders_allowedÚproviders_ignoredÚproviders_orderÚprovider_sortÚprovider_require_parametersÚprovider_data_collectionÚopenrouter_min_coding_scoreÚ
session_idÚplatformr&   Ú
session_dbÚclarify_callbackÚ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)Úseed_credits_at_session_startr%   z  Session title applied: z!  Could not apply pending title: z&[bold red]Failed to initialize agent: r   )Úpartial_update_hint)ar&   r‚   r
   rƒ   r„   r…   r   r†   r   r@   Ú_install_tool_callbacksÚ_ensure_tirith_securityr]   Úhermes_cli.mcp_startupr‡   ry   Ú_session_dbÚhermes_staterŠ   r+   r4   Ú_resumedÚconversation_historyÚget_sessionr¿   r5   ÚsysÚstderrÚresolve_resume_session_idÚ_escapeÚ_resume_history_limit_errorr‘   Úget_messages_as_conversationÚlenr0   Ú_restore_session_cwdÚ_restore_session_yoloÚ_connÚexecuteÚcommitr   r   r   r   r9   r/   r:   r   r®   Ú	max_turnsr°   r±   ÚverboseÚsystem_promptr¶   r·   rw   Ú_providers_onlyÚ_providers_ignoreÚ_providers_orderÚ_provider_sortÚ_provider_require_paramsÚ_provider_data_collectionÚ_openrouter_min_coding_scoreÚ_clarify_callbackÚ_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Ú	_print_fnÚagent.credits_trackerrÕ   rz   rA   Ú_pending_titleÚ_ensure_db_sessionÚ_session_db_createdÚset_session_titleÚ
ValueErrorÚhermes_constantsrÖ   )rB   r~   r   rx   r‚   r
   rƒ   r„   r…   r   r†   r   r‡   rŠ   Úer˜   Ú_quiet_modeÚresolved_idÚresolved_metaÚprior_resume_errorÚresume_limit_errorÚrestoredÚ	msg_countÚ
title_partrD   Úeffective_modelÚ_clirÕ   ÚconsolerÖ   Úlines                                  r\   Ú_init_agentzCLIAgentSetupMixin._init_agentM  s°  € ð 	xÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwÐwØŒ:Ð!Ø�4à'Ð'Ñ)Ô)Ð)Ø×$Ò$Ñ&Ô&Ð&Ø×$Ò$Ñ&Ô&Ð&à×/Ò/Ñ1Ô1ð 	Ø�5àRÐRÐRÐRÐRÐRà/Ð/ØÝ  Ð';¸UÑCÔCð	
ñ 	
ô 	
ð 	
ð ÔÐ#ðlØ2Ð2Ð2Ð2Ð2Ð2Ø#, 9¡;¤;�Ô Ð øÝð lð lð lØ—’ÐgÐijÑkÔkÐkÐkÐkÐkÐkÐkøøøøðløøøð Œ=ñ `	˜TÔ-ñ `	°dÔ6Oñ `	ØÔ+×7Ò7¸¼ÑHÔHˆLõ " $Ð(<¸fÑEÔEÈÒNˆKØð 
Øð mÝÐA°´ÐAÐAÍÌ
ÐSÑSÔSÐSÝØZÝ œZðñ ô ð ð ð
 �GÐS¸D¼OÐSÈTÐSÐSÑTÔTÐTØ�G˜tÐkÐkÐeiÐkÐkÑlÔlÐlØ�uð.Ø"Ô.×HÒHÈÌÑYÔY��øÝð .ð .ð .Ø"œo���ð.øøøàð 	1˜{¨d¬oÒ=Ð=Ø�‘”×#Ò#ð)¥G¨D¬OÑ$<Ô$<ð )ð )Ý˜{Ñ+Ô+ð)ð )ð )ñô ð ð
 #.�”Ø $Ô 0× <Ò <¸T¼_Ñ MÔ M�Ø ð 1Ø#0�LÝ!(¨Ð/FÈÑ!MÔ!MÐØ!ð Ø�uð "&×!AÒ!AÈ4Ð!AÑ!PÔ!PÐØ!ð Ø-?�Ô*Øð ÝÐHÐ4FÐHÐHÍsÌzÐZÑZÔZÐZÐZà�K‘M”M×'Ò'Ø\½wÐGYÑ?ZÔ?ZÐ\Ð\ñô ð ð �uØÔ'×DÒDØ”°Dð Eñ ô ˆHð ñ  ØSÐS xÐSÑSÔS�Ø,4�Ô)ÝÐ PÐ P¨HÐ PÑ PÔ PÑQÔQ�	Ø�
Ø×#Ò# GÑ,Ô,ð AØ!@ |°GÔ'<Ð!@Ð!@Ð!@�JØð Ýð;¨t¬ð ;À
ð ;ð ;Ø%ð;ð ;Ø;DÈº>¸>°C°CÈrð;ð ;å˜x™=œ=ð;ð ;ð ;õ !œZð	ñ ô ð ð ð  �K‘M”M×'Ò'ðu  ¡¤ð uð uÝ!(¨¬Ñ!9Ô!9ðuð uà!, ¡¤ðuð uå18¸Ñ1DÔ1Dðuð uð &ðuð uð <EÈº>¸>°C°CÈrðuð uõ VYÐYaÑUbÔUbðuð uð uñô ð ð ×)Ò)¨,¸kÐ)ÑJÔJÐJØ×*Ò*¨<¸{Ð*ÑKÔKÐKÐKàð ÝØ_ 4¤?Ð_Ð_Ð_Ý œZðñ ô ð ð ð
  �K‘M”M×'Ò'ð B  ¡¤ð  Bð  B½ÀÄÑ9QÔ9Qð  Bð  Bð  Bñô ð ðØÔ Ô&×.Ò.ØYØ”_Ð&ñô ð ð Ô Ô&×-Ò-Ñ/Ô/Ð/Ð/øÝð ð ð Ø�ðøøøðy	Ø&ð Øœ<Ø œMØ œMÝ&-ØÐ.°´ñ'ô 'ð !œMØÔ+Ý˜Tœ]Ð0¨bÑ1Ô1Ý#*¨4Ð1CÀTÑ#JÔ#Jð+ð +ˆGð -Ð:°´
ˆOØ ˜ð 4ð 4ð 4Ø%�oð4àŸš IÑ.Ô.Ð.ð4ð !Ÿš ZÑ0Ô0Ð0ð4ð !Ÿš ZÑ0Ô0Ð0ð	4ð
 $+§;¢;Ð/CÑ#DÔ#DÐ#Dð4ð !Ÿš ZÑ0Ô0Ð0ð4ð $ŸKšK¨	Ñ2Ô2Ð2ð4ð !Ÿš VÑ,Ô,Ð,ð4ð !(§¢Ð,=Ñ >Ô >Ð >ð4ð  œ?˜?ð4ð  $œ~˜~ð4ð "&Ô!6Ð!6ð4ð #'Ô"8Ð"8ð4ð !%¤ ð4ð  $œ|Ð+Ð+ð4õ  $+¨4Ð1EÀuÑ#MÔ#MÐ#Mð!4ð" ?CÔ>PÐ(Z¨Ô(:Ð(:ÐVZøð#4ð$ "&Ô!6Ð!>¸$øð%4ð& "&Ô!6Ð!6ð'4ð( "Ô.Ð.ð)4ð* #4Ð"3ð+4ð, #'Ô"6Ð"6ð-4ð. #'Ô"8Ð"8ð/4ð0 !%Ô 5Ð 5ð14ð2 #Ô1Ð1ð34ð4 -1Ô,IÐ,Ið54ð6 *.Ô)GÐ)Gð74ð8 -1Ô,MÐ,Mð94ð:  œ?˜?ð;4ð< ˜ð=4ð>  Ô+Ð+ð?4ð@ "&Ô!7Ð!7ðA4ðB $(×#CÒ#CÑ#EÔ#EÐ#EðC4ðF  $Ô3Ð3ðG4ðH #'Ô"3Ð"3ðI4ðJ %)Ô$<Ð$<ðK4ðL *.Ô)FÐ)FðM4ðN .2Ô-NÐ-NðO4ðP -1Ô,LÐ,LðQ4ðR !%Ô 4Ð 4ðS4ðT $(Ô#4Ð#4ðU4ðV !Ô-Ð-ðW4ðX (,Ô'=Ð'=ðY4ðZ <@Ô;UÐ$_ DÔ$7Ð$7Ð[_øð[4ð\ BFÔA[Ð'e tÔ'=Ð'=Ðaeøð]4ð^ =AÔ<RÐ&\ dÔ&8Ð&8ÐX\øð_4ð` >BÔ=SÐ"] $Ô"9Ð"9ÐY]øða4ðb !%¤ ðc4ðd '+Ô&;Ð&;ðe4ðf #'Ô"3Ð"3ðg4ˆDŒJð| ÐÐÐØ%)¤ZˆDÔ"ð $+ˆDŒJÔ ð
ØOÐOÐOÐOÐOÐOà-Ð-¨d¬jÑ9Ô9Ð9Ð9øÝð ð ð Ø�ðøøøð  Ø—’˜JÑ'Ô'Ø—’Ð0Ñ1Ô1Ø—’˜JÑ'Ô'Ø—’˜JÑ'Ô'Ø—’˜IÑ&Ô&Ý�g—k’k &Ñ)Ô)Ð/¨RÑ0Ô0ð2ˆDÔ.ð Ô"ð 	E tÔ'7ð 	E¸D¼Jð 	EðEØ”J×1Ò1Ñ3Ô3Ð3Ø”zÔ5ð 3ØÔ(×:Ò:¸4¼?ÈDÔL_Ñ`Ô`Ð`Ø˜Ð Q¸DÔ<OÐ QÐ QÑRÔRÐRØ.2˜Ô+øøå"¥IÐ.ð Eð Eð EØ�GÐCÀÐCÐCÑDÔDÐDÐDÐDÐDÐDÐDøøøøðEøøøð �4øÝð 	ð 	ð 	Ø!�k‘m”mˆGØ�MŠMÐIÀ1ÐIÐIÐIÑJÔJÐJØ<Ð<Ð<Ð<Ð<Ð<à+Ð+¨AÑ.Ô.ð $ð $�Ø—’˜dÑ#Ô#Ð#Ð#Ø�5�5�5�5�5øøøøð	øøøs§   ÂB& Â&
CÂ0CÃCÆ
F* Æ*F>Æ=F>ÒAS
 Ó

SÓSÓKd  Þ!^8 Þ7d  Þ8
_ßd  ß_ßB'd  á-A$c ãd  ãc;ã#c6ã1d  ã6c;ã;d  ä 
e!ä
Aeåe!Fr’   c                ó(  — | j         sdS ddlm}m}m} 	 |rnt          | j         dd¦  «        }t          |¦  «        sdS  |¦   «         }|dk    rdS 	  || j        |¬¦  «         nX# |$ r} ||j        |d¬¦  «        |‚d}~ww xY wt          | j         dd¦  «        }t          |¦  «        sdS  || j        ¦  «         nU# |$ r}t          |¦  «        cY d}~S d}~wt          $ r,}t                               d	| j        |¦  «         Y d}~dS d}~ww xY wdS )
u´  Return a safe-resume error without materializing transcript rows.

        ``tip_only`` matches call sites that load only the tip session's rows
        (``get_messages_as_conversation`` without ancestors) â€” counting the
        full lineage there would over-reject heavily-compressed sessions
        whose tip is small. Generic guard failures fail OPEN (resume
        proceeds) â€” only a genuine over-limit result blocks.
        Nr   )ÚSessionExportTooLargeErrorÚSessionResumeTooLargeErrorÚresolved_max_resume_messagesÚassert_export_safe)Úmax_messageszin its tip segment)ÚscopeÚassert_resume_safez@Resume safety check failed for %s (proceeding without guard): %s)rÚ   rÛ   r  r  r  ry   r6   r¿   Úmessage_countr7   r+   r   r4   )	rB   r’   r  r  r  Ú	tip_checkÚlimitrE   Úsafety_checks	            r\   rã   z.CLIAgentSetupMixin._resume_history_limit_errorP  s¾  € ð Ôð 	Ø�4ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	Øð .Ý# DÔ$4Ð6JÈDÑQÔQ�	Ý 	Ñ*Ô*ð  Ø˜4Ø4Ð4Ñ6Ô6�Ø˜A’:�:Ø˜4ðØ�I˜dœo¸EÐBÑBÔBÐBÐBøØ1ð ð ð Ø4Ð4ØÔ)¨5Ð8Lðñ ô àðøøøøðøøøõ
  ' tÔ'7Ð9MÈtÑTÔT�Ý Ñ-Ô-ð  Ø˜4Ø�˜Tœ_Ñ-Ô-Ð-øøØ)ð 	ð 	ð 	Ý�s‘8”8ˆOˆOˆOˆOˆOˆOøøøøÝð 	ð 	ð 	Ý�NŠNØRØ” ñô ð ð �4�4�4�4�4øøøøð	øøøð ˆtsX   •'B= ¾B= ÁA$ Á#B= Á$BÁ)A=Á=BÂ(B= Â,B= Â=DÃCÃDÃDÃ#!D
Ä
Dc                óˆ  ‡— ddl m} | j        r| j        sdS | j                             | j        ¦  «        }|s5|                      d| j        › d�¦  «         |                      d¦  «         dS 	 | j                             | j        ¦  «        }n# t          $ r
 | j        }Y nw xY w|rV|| j        k    rK|                      d| j        › d|› d	�¦  «         || _        | j                             | j        ¦  «        }|r|}|  	                    ¦   «         }|r!|| _
        |                      d
|› �¦  «         dS | j                             | j        ¦  «        \  }}|}|räd„ |D ¦   «         }|| _        d„ |D ¦   «         | _        ddlmŠ t!          ˆfd„| j        D ¦   «         ¦  «        }	d}
|                     d¦  «        rd|d         › d�}
 |¦   «         }|                      d|› d| j        › d|
› d|	› d|	dk    rdnd› dt!          |¦  «        › d�¦  «         |                      |¦  «         |                      |¦  «         n- |¦   «         }|                      d|› d| j        › d�¦  «         dS 	 | j        j                             d| j        f¦  «         | j        j                             ¦   «          n# t          $ r Y nw xY wdS ) aå  Load a resumed session's history from the DB early (before first chat).

        Called from run() so the conversation history is available for display
        before the user sends their first message.  Sets
        ``self.conversation_history`` and prints the one-liner status.  Returns
        True if history was loaded, False otherwise.

        The corresponding block in ``_init_agent()`` checks whether history is
        already populated and skips the DB round-trip.
        r   )r…   Fz[bold red]Session not found: r   zH[dim]Use a session ID from a previous CLI run (hermes sessions list).[/]r�   r�   z2; resuming the descendant with your transcript.[/]r“   c                óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS r–   r™   rš   s     r\   r�   z?CLIAgentSetupMixin._preload_resumed_session.<locals>.<listcomp>³  s,   € ÐOÐOÐO˜a¨q¯uªu°V©}¬}ÀÒ/NÐ/N˜Ð/NÐ/NÐ/Nrž   c                óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS r–   r™   rš   s     r\   r�   z?CLIAgentSetupMixin._preload_resumed_session.<locals>.<listcomp>µ  s3   € ð ,ð ,ð ,Ø¨a¯eªe°F©m¬m¸~Ò.MÐ.M�Ð.MÐ.MÐ.Mrž   )Úis_user_originated_turnc                ó*   •— g | ]} ‰|¦  «        ¯|‘ŒS r%   r%   )r›   rœ   r)  s     €r\   r�   z?CLIAgentSetupMixin._preload_resumed_session.<locals>.<listcomp>½  s:   ø€ ð ð ð àØ.Ð.¨qÑ1Ô1ðØðð ð rž   r   r¡   r¢   r£   Ú[u   ]â†» Resumed session [bold]z[/bold]r¤   r¥   r¦   r§   r¨   z total messages)[/]r«   r¬   r­   T)r&   r…   rÜ   rÚ   rÞ   r¿   Ú_console_printrá   r+   rã   r‘   Úget_resume_conversationsrÝ   Ú_resume_display_historyÚagent.context_compressorr)  rå   r0   ræ   rç   rè   ré   rê   )rB   r…   r˜   r  r  r  Úmodel_historyÚdisplay_historyr  r  r  Úaccent_colorr)  s               @r\   Ú_preload_resumed_sessionz+CLIAgentSetupMixin._preload_resumed_session~  s  ø€ ð 	$Ð#Ð#Ð#Ð#Ð#ØŒ}ð 	 DÔ$4ð 	Ø�5àÔ'×3Ò3°D´OÑDÔDˆØð 	Ø×ÒØD°´ÐDÐDÐDñô ð ð ×Òð-ñô ð ð �5ð	*ØÔ*×DÒDÀTÄ_ÑUÔUˆKˆKøÝð 	*ð 	*ð 	*Øœ/ˆKˆKˆKð	*øøøàð 	-˜;¨$¬/Ò9Ð9Ø×ÒðS ¤ð Sð SØðSð Sð Sñô ð ð *ˆDŒOØ Ô,×8Ò8¸¼ÑIÔIˆMØð -Ø,�à!×=Ò=Ñ?Ô?ÐØð 	Ø);ˆDÔ&Ø×ÒØKÐ7IÐKÐKñô ð ð �5à)-Ô)9×)RÒ)RÐSWÔSbÑ)cÔ)cÑ&ˆ�Ø ˆØð #	ØOÐO 8ÐOÑOÔOˆHØ(0ˆDÔ%ð,ð ,Ø*ð,ñ ,ô ,ˆDÔ(ð IÐHÐHÐHÐHÐHõ ðð ð ð à!Ô9ðñ ô ñô ˆIð ˆJØ×Ò Ñ(Ô(ð ;Ø: ,¨wÔ"7Ð:Ð:Ð:�
Ø&˜;™=œ=ˆLØ×Òð6�Lð 6ð 6¸T¼_ð 6ð 6Øð6ð 6àð6ð 6à3<À²>°>¨C¨CÀrð6ð 6õ �x‘=”=ð6ð 6ð 6ñô ð ð ×%Ò% lÑ3Ô3Ð3Ø×&Ò& |Ñ4Ô4Ð4Ð4à&˜;™=œ=ˆLØ×Òð0�Lð 0ð 0¨4¬?ð 0ð 0ð 0ñô ð ð �5ð	ØÔÔ"×*Ò*ðà”Ð"ñô ð ð
 ÔÔ"×)Ò)Ñ+Ô+Ð+Ð+øÝð 	ð 	ð 	ØˆDð	øøøð ˆts%   Á/B ÂB#Â"B#É-AJ2 Ê2
J?Ê>J?c                ó´  ‡ ‡0— ddl m}m}m}m} ddlm} t          ‰ d‰ j        ¦  «        }|sdS ‰ j	        dk    rdS | 
                    di ¦  «        }t          | 
                    dd	¦  «        ¦  «        }t          | 
                    d
d¦  «        ¦  «        }	t          | 
                    dd¦  «        ¦  «        }
t          | 
                    dd¦  «        ¦  «        }| 
                    dd¦  «        }g }d}d}|D �]}| 
                    dd¦  «        }| 
                    d¦  «        }| 
                    d¦  «        }| 
                    d¦  «        pg }|dk    rŒa|dk    r|                     d¦  «         Œ}|dk    r|                     d¦  «         Œ™|dk    r|                     d¦  «         Œµ|dk    rŒ¼|dk    rŒÃ|d k    �r#|€dnt          |¦  «        }t          |t          ¦  «        r·g }|D ]�}t          |t           ¦  «        rC| 
                    d!¦  «        d"k    r*|                     | 
                    d"d¦  «        ¦  «         ŒZt          |t           ¦  «        r.| 
                    d!¦  «        d#k    r|                     d$¦  «         Œžd%                     |¦  «        } ||¦  «        }t%          |¦  «        |	k    r|d|	…         d&z   }|                     d |f¦  «         �Œí|d'k    �r|€dnt          |¦  «        } | ||¦  «        ¦  «        }g }g }|r‘|                     |¦  «         |                     ¦   «         }t%          |¦  «        |k    r d(                     |d|…         ¦  «        d)z   }t%          |¦  «        |
k    r|d|
…         d&z   }|                     |¦  «         |rçt%          |¦  «        }g }|D ]^}| 
                    d*i ¦  «        }t          |t           ¦  «        r| 
                    d+d,¦  «        nd,}||vr|                     |¦  «         Œ_d-                     |dd.…         ¦  «        }t%          |¦  «        d.k    r|d/z  }|d0k    rd1nd2} d3|› d4| › d5|› d6�}!|                     |!¦  «         |                     |!¦  «         |s�ŒŸt)          |¦  «        }"|r|"s|r�Œ¶|                     d'd%                     |¦  «        f¦  «         t%          |¦  «        d0z
  }d%                     |¦  «        }�Œ	|sdS d}#t%          |¦  «        |d7z  k    rt%          |¦  «        |d7z  z
  }#||#d…         }|�+|r)||#z
  }$d|$cxk    rt%          |¦  «        k     r
n nd8|f||$<   dd9lm}% dd:lm}& 	 dd;lm}'  |'¦   «         }(|(                     d<d=¦  «        })|(                     d>d?¦  «        }*|(                     d@dA¦  «        }+|(                     dBdC¦  «        },n# t8          $ r d=})d?}*dA}+dC},Y nw xY w |&¦   «         }|#r|                     dD|#› dE�dF¬G¦  «         t;          |¦  «        D �]Ç\  }-\  }}|dHk    r|                     dI|› d(�dF¬G¦  «         �np|d k    rw|                     dJdK|*› �¬G¦  «         |                     ¦   «         }.|                     |.d         d(z   dL¬G¦  «         |.d0d…         D ]}/|                     dM|/› d(�dL¬G¦  «         Œnó|d8k    rw|                     dNdO|,› �¬G¦  «         |                     ¦   «         }.|                     |.d         d(z   d¬G¦  «         |.d0d…         D ]}/|                     dP|/› d(�d¬G¦  «         Œnv|                     dNdK|,› �¬G¦  «         |                     ¦   «         }.|                     |.d         d(z   dL¬G¦  «         |.d0d…         D ]}/|                     dP|/› d(�dL¬G¦  «         Œ|-t%          |¦  «        d0z
  k     r|                     d¦  «         �ŒÉ |%|dQ|*› dR�dS|+› �dT|)¬U¦  «        Š0 |ˆ0ˆ fdV„¦  «          |¦   «         5  ‰                      ‰0¦  «         ddd¦  «         dS # 1 swxY w Y   dS )WaP  Render a compact recap of previous conversation messages.

        Uses Rich markup with dim/muted styling so the recap is visually
        distinct from the active conversation.  Caps the display at the
        last ``MAX_DISPLAY_EXCHANGES`` user/assistant exchanges and shows
        an indicator for earlier hidden messages.
        r   )Ú
CLI_CONFIGÚ_record_output_history_entryÚ_strip_reasoning_tagsÚ_suspend_output_history)Úsanitize_display_textr.  NÚminimalÚdisplayÚresume_exchangesé
   Úresume_max_user_charsi,  Úresume_max_assistant_charséÈ   Úresume_max_assistant_linesé   Úresume_skip_tool_onlyTr—   r   Údisplay_kindÚcontentÚ
tool_callsÚhiddenÚmodel_switch)Úeventzmodel changedÚasync_delegation_complete)rI  zbackground delegation completedÚauto_continue)rI  zresumed interrupted turnÚsystemÚtoolr    ÚtypeÚtextÚ	image_urlz[image]Ú z...Ú	assistantÚ
z ...Úfunctionr#   Úunknownr¨   é   z, ...r¦   ÚcallÚcallsr+  z tool z: r©   é   Úassistant_last)ÚPanel)ÚText)Úget_active_skinÚbanner_textz#FFF8DCÚsession_labelz#DAA520Úsession_borderz#8B8682Úui_okz#8FBC8Fz  ... z earlier messages ...

z
dim italic)ÚstylerI  u     â—ˆ u     â—� You: z	dim bold Údimz	         u     â—† Hermes: zbold z            z[dim z]Previous Conversation[/]zdim )r   r¦   )r¡   Úborder_styleÚpaddingrb  c                 ó.   •— ‰                      ‰ ¦  «        S )N)Ú"_render_resume_history_panel_lines)ÚpanelrB   s   €€r\   ú<lambda>z=CLIAgentSetupMixin._display_resumed_history.<locals>.<lambda>ž  s   ø€ ¨T×-TÒ-TÐUZÑ-[Ô-[€ rž   )r&   r5  r6  r7  r8  Útools.ansi_stripr9  ry   rÝ   Úresume_displayr0   ÚintÚappendr7   r-   r/   r_   Újoinrå   Ú
splitlinesr   Ú
rich.panelr[  Ú	rich.textr\  Úhermes_cli.skin_enginer]  Ú	get_colorr+   Ú	enumerater,  )1rB   r5  r6  r7  r8  Ú_sanitize_display_textr1  Ú_dispÚMAX_DISPLAY_EXCHANGESÚMAX_USER_LENÚMAX_ASST_LENÚMAX_ASST_LINESÚSKIP_TOOL_ONLYÚentriesÚ_last_asst_idxÚ_last_asst_fullÚmsgr—   rD  rE  rF  rO  ÚpartsÚpartÚ
full_partsÚlinesÚtc_countÚnamesÚtcÚfnr#   Ú	names_strÚnounÚ
tc_summaryÚhas_textÚskippedÚadj_idxr[  r\  r]  Ú_skinÚ_history_text_cÚ_session_label_cÚ_session_border_cÚ_assistant_label_cÚiÚ	msg_linesÚmlrh  s1   `                                               @r\   Ú_display_resumed_historyz+CLIAgentSetupMixin._display_resumed_historyä  sR
  øø€ ð 	qÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpØTÐTÐTÐTÐTÐTÝ! $Ð(AÀ4ÔC\Ñ]Ô]ˆØð 	ØˆFð Ô )Ò+Ð+ØˆFð —’˜y¨"Ñ-Ô-ˆÝ # E§I¢IÐ.@À"Ñ$EÔ$EÑ FÔ FÐÝ˜5Ÿ9š9Ð%<¸cÑBÔBÑCÔCˆÝ˜5Ÿ9š9Ð%AÀ3ÑGÔGÑHÔHˆÝ˜UŸYšYÐ'CÀQÑGÔGÑHÔHˆØŸšÐ#:¸DÑAÔAˆð ˆØˆØˆØ"ð Q	7ñ Q	7ˆCØ—7’7˜6 2Ñ&Ô&ˆDØŸ7š7 >Ñ2Ô2ˆLØ—g’g˜iÑ(Ô(ˆGØŸš Ñ.Ô.Ð4°"ˆJà˜xÒ'Ð'ØØ˜~Ò-Ð-Ø—’Ð9Ñ:Ô:Ð:ØØÐ:Ò:Ð:Ø—’ÐKÑLÔLÐLØØ˜Ò.Ð.Ø—’ÐDÑEÔEÐEØà�xÒÐØØ�vŠ~ˆ~Øà�vŠ~‰~Ø$˜_�r�rµ#°g±,´,�å˜g¥tÑ,Ô,ð +Ø�EØ 'ð 4ð 4˜Ý% d­DÑ1Ô1ð 4°d·h²h¸vÑ6FÔ6FÈ&Ò6PÐ6PØ!ŸLšL¨¯ª°&¸"Ñ)=Ô)=Ñ>Ô>Ð>Ð>Ý'¨­dÑ3Ô3ð 4¸¿ºÀÑ8HÔ8HÈKÒ8WÐ8WØ!ŸLšL¨Ñ3Ô3Ð3øØŸ8š8 E™?œ?�Dð
 .Ð-¨dÑ3Ô3�Ý�t‘9”9˜|Ò+Ð+Ø   Ô.°Ñ6�DØ—’ ¨˜~Ñ.Ô.Ð.Ñ.à˜Ò$Ñ$Ø$˜_�r�rµ#°g±,´,�Ø-Ð-Ð.CÐ.CÀDÑ.IÔ.IÑJÔJ�Ø�Ø�
Øð 'Ø×%Ò% dÑ+Ô+Ð+Ø ŸOšOÑ-Ô-�EÝ˜5‘z”z NÒ2Ð2Ø#Ÿyšy¨¨°¨Ô)?Ñ@Ô@À6ÑI˜Ý˜4‘y”y <Ò/Ð/Ø# M \ MÔ2°UÑ:˜Ø—L’L Ñ&Ô&Ð&Øð 2Ý" :™œ�Hà�EØ(ð /ð /˜ØŸVšV J°Ñ3Ô3˜Ý<FÀrÍ4Ñ<PÔ<PÐ_˜rŸvšv f¨iÑ8Ô8Ð8ÐV_˜Ø uÐ,Ð,Ø!ŸLšL¨Ñ.Ô.Ð.øØ $§	¢	¨%°°°¬)Ñ 4Ô 4�IÝ˜5‘z”z A’~�~Ø! WÑ,˜	Ø%-°¢] ]˜6˜6¸�DØ!I XÐ!IÐ!I°TÐ!IÐ!I¸YÐ!IÐ!IÐ!I�JØ—L’L Ñ,Ô,Ð,Ø×%Ò% jÑ1Ô1Ð1Øð áå ™:œ:�Ø!ð ¨(ð °zð ÙØ—’ ¨S¯XªX°e©_¬_Ð=Ñ>Ô>Ð>Ý!$ W¡¤°Ñ!1�Ø"%§(¢(¨:Ñ"6Ô"6�ùàð 	ØˆFð ˆÝˆw‰<Œ<Ð/°!Ñ3Ò3Ð3Ý˜'‘l”lÐ%:¸QÑ%>Ñ>ˆGØ˜g˜h˜hÔ'ˆGð Ð%¨/Ð%Ø$ wÑ.ˆGØ�GÐ*Ð*Ò*Ð*�c '™lœlÒ*Ð*Ð*Ð*Ð*Ø$4°oÐ#F�˜Ñ ð 	%Ð$Ð$Ð$Ð$Ð$Ø"Ð"Ð"Ð"Ð"Ð"ð	+Ø>Ð>Ð>Ð>Ð>Ð>Ø#�OÑ%Ô%ˆEØ#Ÿošo¨m¸YÑGÔGˆOØ$Ÿš¨À	ÑJÔJÐØ %§¢Ð0@À)Ñ LÔ LÐØ!&§¢°¸)Ñ!DÔ!DÐÐøÝð 	+ð 	+ð 	+Ø'ˆOØ(ÐØ )ÐØ!*ÐÐÐð		+øøøð �‘”ˆØð 	Ø�LŠLØ;˜Ð;Ð;Ð;Ø"ð ñ ô ð õ
  )¨Ñ1Ô1ð 	!ñ 	!‰OˆA‰|��dØ�wŠˆØ—’Ð. dÐ.Ð.Ð.°l�ÑCÔCÐCÑCØ˜’�Ø—’˜]Ð2PÐ>NÐ2PÐ2P�ÑQÔQÐQà ŸOšOÑ-Ô-�	Ø—’˜Y qœ\¨DÑ0¸�Ñ>Ô>Ð>Ø# A B Bœ-ð Bð B�BØ—L’LÐ!3¨RÐ!3Ð!3Ð!3¸5�LÑAÔAÐAÐAðBàÐ)Ò)Ð)à—’Ð-Ð5QÐ=OÐ5QÐ5Q�ÑRÔRÐRØ ŸOšOÑ-Ô-�	Ø—’˜Y qœ\¨DÑ0¸�Ñ;Ô;Ð;Ø# A B Bœ-ð Bð B�BØ—L’LÐ!6°Ð!6Ð!6Ð!6¸b�LÑAÔAÐAÐAðBð —’Ð-Ð5UÐASÐ5UÐ5U�ÑVÔVÐVØ ŸOšOÑ-Ô-�	Ø—’˜Y qœ\¨DÑ0¸�Ñ>Ô>Ð>Ø# A B Bœ-ð Eð E�BØ—L’LÐ!6°Ð!6Ð!6Ð!6¸e�LÑDÔDÐDÐDØ•3�w‘<”< !Ñ#Ò#Ð#Ø—’˜RÑ Ô Ð ùà�ØØEÐ*ÐEÐEÐEØ3Ð 1Ð3Ð3ØØ!ð
ñ 
ô 
ˆð 	%Ð$Ð%[Ð%[Ð%[Ð%[Ð%[Ñ\Ô\Ð\Ø$Ð$Ñ&Ô&ð 	'ð 	'Ø×Ò Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's%   Õ:A(W# ×#W8×7W8à*aáaáa)r   r   )rr   r7   r   r_   )r~   r7   r   r_   rx   r€   r   r   )F)r’   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r]   r`   rq   r}   r  rã   r3  r–  r%   rž   r\   r   r      sé   € € € € € ØPÐPð`ð `ð `ð `ðD 
ð  
ð  
ð  
ðD>ð >ð >ð >ð@.ð .ð .ð .ð` 48ÐRVÐy}ð Að Að Að Að Að AðF,ð ,ð ,ð ,ð ,ð\dð dð dð dðL|'ð |'ð |'ð |'ð |'rž   r   )rš  Ú
__future__r   rß   Úrich.markupr   râ   r   r%   rž   r\   ú<module>r�     sz   ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
à )Ð )Ð )Ð )Ð )Ð )ðJ'ð J'ð J'ð J'ð J'ñ J'ô J'ð J'ð J'ð J'rž   