+
    „WÝjkŽ  ã                  ó  € R t ^ RIHt ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RI	H	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtHtHt ^ R
IHtHtHt ]P6                  ! R4      tRtR tR tR t R t!]R 4       t" ! R R4      t#R# )zîHermesCLI constructor phases: display options, model/provider routing, turn limits, toolsets, checkpoints, prompt/reasoning, runtime state, session store and UI state.

Mixin split out of ``cli.py``; bound onto ``HermesCLI`` via the MRO.
)Úannotations)ÚcontextmanagerN)Údatetime)Úget_fallback_chain©Únew_session_id)ÚPath)ÚConsole)ÚAnyÚDictÚListÚOptional)Úbase_url_host_matchesÚbase_url_hostnameÚis_truthy_valueÚclic                ó¢  € VP                   ;'       g    / P                  R4      ;'       g    / p\        V RR4      f=   \        VP                  R4      \        4      '       d   \	        VR,          4      V n        VP                  R4      '       d>   ^ RIHp RP                  VR,          4      pV P                  RV! RVR	7       R
24       R# R# )zÎThe profile default the gateway resolved for the opened session, when this process has no list to
show (display only), and main's "Unknown toolsets" warning as the gateway judged it against its own
plugins.ÚinfoÚenabled_toolsetsNÚunknown_toolsets©Útz, z
[bold red]zcli.startup.unknown_toolsets)Únamesz[/])
ÚcurrentÚgetÚgetattrÚ
isinstanceÚlistr   Ú
agent.i18nr   ÚjoinÚ_console_print)r   Ústorer   Ú_tr   s   &&   ÚMC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\cli_init_mixin.pyÚ_adopt_gateway_toolsetsr$      s°   € ð �M‰M×Ð˜R×$Ñ$ VÓ,×2Ð2°€DÜˆsÐ&¨Ó-Ò5¼*ÀTÇXÁXÐN`ÓEaÔcg×:hÒ:hÜ# DÐ);Õ$<Ó=ˆÔØ‡x�xÐ"×#Ò#Ý&Ø—	‘	˜$Ð1Õ2Ó3ˆØ×Ñ˜Z©Ð+IÐQVÔ(WÐ'XÐX[Ð\Ö]ñ $ó    c                ó   € \        V RR4      p\        V RR4      pRV'       d   V P                  MRRV'       d
   VR9  d   TMRR\        V RR4      R	\        V R
R4      R\        V RR4      '       d   \        V RR4      MRR\        V RR4      R\        V RR4      R\        V RR4      ;'       g    RR\        V RR4      ;'       g    RR\        V RR4      ;'       g    RR\        V RR4      R\        V RR4      ;'       g    RR\        V 4      /# )zdThis run's explicit launch flags as gateway ``session.create`` policy (main handed them to AIAgent).Ú_explicit_model_overrideFÚ_explicit_providerNÚmodelÚproviderÚapi_keyÚ_explicit_api_keyÚbase_urlÚ_explicit_base_urlÚtoolsetsÚ_explicit_toolsetsr   Ú	reasoningÚ_explicit_reasoningÚ	max_turnsÚ_explicit_max_turnsÚcheckpointsÚ_explicit_checkpointsÚpass_session_idÚignore_rulesÚ
run_budgetÚ_explicit_run_budgetÚverboseÚskills>   NÚ Úauto)r   r)   Ú_explicit_launch_skills)r   Úexplicit_modelr*   s   &  r#   Ú_gateway_launchrA   )   s  € ä˜SÐ"<¸eÓD€NÜ�sÐ0°$Ó7€HØ§.�S—Y’Y°dØ§N°xÐGYÔ7Y™Ð_cØ”w˜sÐ$7¸Ó>Øœ Ð%9¸4Ó@àÄ'È#ÐOcÐej×BkÒBkœ Ð%7¸Ô>ÐquØœ Ð&;¸TÓBØœ Ð&;¸TÓBØœ7 3Ð(?ÀÓG×OÐOÈ4Øœw sÐ,=¸uÓE×MÐMÈØœG C¨¸Ó?×GÐGÀ4Øœ' #Ð'=¸tÓDØ”w˜s I¨uÓ5×=Ð=¸ØÔ-¨cÓ2ð4ð 4r%   c                ó
  € \        V RR4      ;'       g    . pV'       g   R# ^ RIHp ^ RIHp \        V RR4      '       d   \        4       M\        V! V4      4      pV Uu. uF  qUV9  g   K  VNK  	  up;'       g    R# u upi )zÇThe `-s/--skills` names, which the gateway renders into the session once at creation (the CLI's
own prompt never reaches it). ``skills.auto_load`` names are left out: the gateway's agent loads those.Ú_preload_skills_requestedN)Úresolve_auto_load_skills©Ú
CLI_CONFIGr8   F)r   Úagent.skill_commandsrD   r   rF   Úset)r   Ú	requestedrD   rF   r>   Únames   &     r#   r?   r?   =   sq   € ô ˜Ð8¸$Ó?×EÐEÀ2€IßÙÝ=ÝÜ˜C °×7Ò7Œ3Œ5¼SÑAYÐZdÓAeÓ=f€DÙ&Ó;™Y�T°dÑ*:�DˆD™YÑ;×CÐC¸tÐCùÒ;s   Á B Á-B c                 ón  € ^ RI Hp  V ! 4       p\        P                  P	                  RR4      P                  4       '       g/   VP	                  R4      '       g   VP	                  R4      '       d   R#  ^ RIHp ^ RIH	p V! V! 4       4       R#   \         d    \        P                  R	R
R7        R# i ; i)aŽ  Main's first-use shell-hook prompt, on this terminal. The gateway that registers the hooks
has no TTY; it reads the allowlist this writes when the session opens (create or resume).
``--accept-hooks`` / ``HERMES_ACCEPT_HOOKS`` / ``hooks_auto_accept`` approve without asking.
A remote gateway has its own home and allowlist, and a bypass launch reads no profile hooks,
so nothing is asked for either.)Úenv_launch_flagsÚHERMES_TUI_GATEWAY_URLr=   Ú	safe_modeÚignore_user_configN)Úrecord_consent_from_config)Úload_configzshell-hook consent check failedT)Úexc_info)Úhermes_cli.gateway_chatrL   ÚosÚenvironr   ÚstripÚagent.shell_hooksrP   Úhermes_cli.configrQ   Ú	ExceptionÚloggerÚwarning)rL   ÚflagsrP   rQ   s       r#   Ú_record_shell_hook_consentr]   I   s‰   € õ 9ÙÓ€EÜ	‡z�z‡~�~Ð.°Ó3×9Ñ9×;Ò;¸u¿y¹yÈ×?UÒ?UÐY^×YbÑYbÐcw×YxÒYxÙðIÝ@Ý1Ù"¡;£=Ö1øÜô IÜ�‰Ð8À4ˆ×HðIús   Á3B Â"B4Â3B4c              #  óâ   "  € V'       g   Rx € R# V P                  4         Rx € T P                  RRR7      '       g   \        R4      hR#   \         d    T P                  RRR7       h i ; i5i)aù  Run a gateway attach without this CLI's own active-session lease, then re-claim it.

A row the gateway has not imported yet (a legacy / in-process session) is imported under the
active-session registry lock, which refuses (``runtime_coordination_required``) while ANY live
lease holds the id, including this process's own. The block may move ``cli.session_id`` to the
id the gateway returned: the lease is re-claimed for that id (main's exclusivity is kept), or
for the unchanged id when the block raises.Nr   T©ÚstderrÚsession_already_owned)Ú_release_active_sessionÚBaseExceptionÚ_claim_active_sessionÚRuntimeError)r   Úhelds   &&r#   Úlease_handed_overrg   [   ss   é € ÷ ÛÙØ×ÑÔ!ðÛð ×$Ñ$ U°4Ð$×8Ò8ÜÐ2Ó3Ð3ñ 9øô ô Ø×!Ñ! %°Ð!Ô5Øðüs    ‚A/¢A ¦A/¿A/Á A,Á,A/c                  ón   € ] tR t^qtRtR tR tR tR tR t	R t
R tR	 tR
 tR tRRRR/R ltR tRtR# )ÚCLIInitMixinz§HermesCLI constructor phases: display options, model/provider routing, turn limits, toolsets, checkpoints, prompt/reasoning, runtime state, session store and UI state.c           	     óv  € ^ RI HpHpHp \	        4       V n        W0n        ^ RIHp V! VR,          4      pVe   TMVP                  RR4      V n
        VP                  RR4      pVRJ d   R	M
\        V4      V n        \        VP                  R
R4      4      V n        R;V n        V n        ^ V n        V P                  '       d&   ^ RIHp	Hp
 V
! V P                  4      V n        W�n        TP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        V! VP                  RR4      VP                  R^È4      R7       ^ RIHpHpHp V! V4      V n        V! V P<                  4       V! V4      pVR&9   d   TMRV n        Ve   \        V4      MRV n         VP                  RR4      V n!        VP                  RR4      V n"        VP                  RR4      V n#        \        VP                  RR4      4      PI                  4       PK                  4       pVR'9   d   TMRV n&        VP                  RR4      V n'        \        VP                  RR4      4      V n(        \        VP                  R R4      4      V n)        RV n*        R!V n+        ^ V n,        RV n-        VP                  R"/ 4      p\]        V\^        4      '       d   TM/ p\a        ^V! VP                  R#^4      ^4      4      V n1        \a        ^ V! VP                  R$^4      ^4      4      V n2        R%V n3        R%V n4        R;V n5        ;V n6        V n7        R%V n8        . V n9        . V n:        RV n;        / V n<        R;V n=        V n>        R;V n?        V n@        R# )(zeDisplay-related config: compact/tool-progress/focus view, bells, streaming, previews, stream buffers.)rF   Ú_configure_output_historyÚ_int_or)Úlocal_display_configÚdisplayNÚcompactFÚtool_progressÚallÚoffÚ
focus_view)ÚFOCUS_TOOL_PROGRESS_MODEÚnormalize_tool_progress_modeÚresume_displayÚfullÚbell_on_completeÚbell_on_promptÚshow_reasoningTÚreasoning_fullÚpersistent_outputÚpersistent_output_max_lines)ÚenabledÚ	max_lines)Úbusy_input_mode_from_configÚlayout_from_configÚ
set_activeÚ	interruptÚ	streamingÚ
timestampsÚtimestamp_formatz%H:%MÚfinal_response_markdownrV   Úinline_diffsÚturn_summaryÚspinner_token_flowç        Úuser_message_previewÚfirst_linesÚ
last_linesr=   )ÚqueueÚsteer>   ÚrawrV   Úrender)Ar   rF   rk   rl   r	   ÚconsoleÚconfigÚgateway.display_configrm   r   ro   ÚstrÚtool_progress_modeÚboolÚ_focus_view_enabledÚ_focus_saved_tool_progressÚ_focus_last_counted_toolÚ_focus_hidden_linesÚhermes_cli.focus_viewrt   ru   rv   rx   ry   rz   r{   Úhermes_cli.cli_modern_layoutr€   r�   r‚   Ú_modern_layoutÚbusy_input_moder;   Ústreaming_enabledÚshow_timestampsr†   rV   Úlowerr‡   Ú_inline_diffs_enabledÚ_turn_summary_enabledÚ_spinner_token_flow_enabledÚ_turn_summary_collectorÚ_turn_summary_startÚ_turn_token_baselineÚ_interactive_turnr   ÚdictÚmaxÚ user_message_preview_first_linesÚuser_message_preview_last_linesÚ_stream_bufÚ_reasoning_preview_bufÚ_stream_startedÚ_stream_box_openedÚ_stream_box_liveÚ_streamed_text_this_turnÚ_held_status_linesÚ_stream_table_bufÚ_in_stream_tableÚ_pending_edit_snapshotsÚ_last_input_mode_recoveryÚ_last_termios_drift_checkÚ!_input_mode_recovery_notice_shownÚ_termios_drift_notice_shown)Úselfr;   ro   rF   rk   rl   rm   rn   Ú_raw_tprt   ru   r€   r�   r‚   Ú_bimÚ_frmÚ_umps   &&&              r#   Ú_init_display_optionsÚ"CLIInitMixin._init_display_optionst   sW  € çFÑFÜ“yˆŒØ Œå?Ù& z°)Õ'<Ó=ˆØ")Ò"5‘w¸7¿;¹;ÀyÐRWÓ;XˆŒà—+‘+˜o¨uÓ5ˆØ+2°eÓ+;¡%ÄÀWÃˆÔô $(¨¯©°LÀ%Ó(HÓ#IˆÔ ØJNÐNˆÔ'¨$Ô*GØ#$ˆÔ Ø×#×#Ð#ßdá.JÈ4×KbÑKbÓ.cˆDÔ+Ø&>Ô#Ø%Ÿk™kÐ*:¸FÓCˆÔØ '§¡Ð,>ÀÓ FˆÔØ%Ÿk™kÐ*:¸EÓBˆÔØ%Ÿk™kÐ*:¸DÓAˆÔØ%Ÿk™kÐ*:¸EÓBˆÔÙ!Ø—K‘KÐ 3°TÓ:Ø—k‘kÐ"?ÀÓEõ	
÷ 	mÑlÙ0°Ó9ˆÔÙ�4×&Ñ&Ô'á*¨7Ó3ˆØ'+Ð/AÔ'A™tÀ{ˆÔð )0Ò(;”t˜G”}ÀˆŒà!(§¡¨[¸%Ó!@ˆÔØ&Ÿ{™{¨<¸Ó?ˆÔØ '§¡Ð,>ÀÓ HˆÔÜ�7—;‘;Ð8¸'ÓBÓC×IÑIÓK×QÑQÓSˆØ/3Ð7QÔ/Q¡tÐW^ˆÔ$à%,§[¡[°ÀÓ%FˆÔ"ô &*¨'¯+©+°nÀdÓ*KÓ%LˆÔ"Ü+/°·±Ð<PÐRVÓ0WÓ+XˆÔ(Ø'+ˆÔ$Ø#&ˆÔ Ø$%ˆÔ!Ø!&ˆÔà�{‰{Ð1°2Ó6ˆÜ! $¬×-Ò-‰t°2ˆÜ03°A±w¸t¿x¹xÈÐWXÓ?YÐ[\Ó7]Ó0^ˆÔ-Ü/2°1±g¸d¿h¹hÀ|ÐUVÓ>WÐYZÓ6[Ó/\ˆÔ,ð ˆÔØ&(ˆÔ#ØQVÐVˆÔÐV˜tÔ6¸Ô9NØ(*ˆÔ%Ø-/ˆÔà,.ˆÔØ %ˆÔØ')ˆÔ$ØJNÐNˆÔ&¨Ô)GØTYÐYˆÔ.°Ö1Qr%   c                ó´   € V P                  WWV4       V P                  Wx4       V P                  V4       V P                  WšV4       V P	                  V4       R# )ztResolve model/provider/base_url, turn limits, toolsets, checkpoints, prompt/personality, reasoning + routing config.N)Ú_init_model_and_providerÚ_init_turn_limitsÚ_init_toolsetsÚ_init_checkpoints_and_rulesÚ_init_prompt_and_reasoning)r½   r)   r/   r*   r1   r+   r-   r3   r9   r5   r7   r8   s   &&&&&&&&&&&&r#   Ú_init_model_routingÚ CLIInitMixin._init_model_routingÀ   sL   € à×%Ñ% e°wÔIØ×Ñ˜yÔ5Ø×Ñ˜HÔ%Ø×(Ñ(¨À|ÔTØ×'Ñ'¨	Ö2r%   c           	     óò  € ^ RI HpHpHp VR,          pT! VP	                  R4      ;'       g    VP	                  R4      ;'       g    R4      w  rš\        V4      V n        T;'       g    T	;'       g    RV n        VP	                  R4      ;'       g    \        P                  ! R4      pR;p;rÞV P                  '       d�   ^ RI
Hp T! V P                  T;'       g    RT;'       g    T
;'       g    T;'       g    RVP	                  R4      VP	                  R	4      R
7      pVe6   VP                  V n        VP                  pVP                  pVP                  pV! V P                  4      w  pV n        V P                  R8X  dS   VP	                  R4      ;'       g    Rp\        V4      R9   d(   ^ RIHp V! V4      ;'       g    V P                  V n        V'       * ;'       d    V	'       * V n        T;'       g    T;'       g    RV n        T;'       g    RV n        T;'       g    T;'       g    RV n        T;'       g+    T;'       g!    T;'       g    T
;'       g    T;'       g    RV n        T;'       g    T;'       g    T;'       g    RV n        V'       gj   V'       db    ^ RIHp V! V4      p\9        T;'       g    / P	                  R4      ;'       g    R4      P;                  4       pV'       d   VV n        RV n        RV n        V P,                  V n        RV n        RV n         . V n!        T;'       gF    T;'       g<    VP	                  RR4      ;'       g"    \        P                  ! RR4      ;'       g    RV n        \        P                  ! R4      \        P                  ! R4      .pV P                  '       d   \E        V P                  R4      '       g   VRRR1,          pM)^ RI#H$p V! V^,          4      '       d
   V^,          MRV^&   T;'       g    V^ ,          ;'       g
    V^,          V n        R#   \2         d%   p\4        P7                  RTT4       Rp Rp?EL¸Rp?ii ; i)z,Priority: CLI args > env vars > config file.)rF   Ú_normalize_moa_modelÚ_split_model_config_defaultr)   Údefaultr=   r*   ÚHERMES_INFERENCE_PROVIDER)Úresolve_startup_model_routeÚ	providersÚcustom_providers)Úexplicit_providerÚcurrent_providerÚuser_providersrÓ   Nr-   )Ú_auto_detect_local_modelr>   )Ú_get_named_custom_providerzPCould not resolve --provider %s default model; keeping global model.default (%s)FÚchat_completionsÚOPENROUTER_BASE_URLÚOPENROUTER_API_KEYÚOPENAI_API_KEYzopenrouter.ai)Úlooks_like_openrouter_key)Ú	localhostz	127.0.0.1éÿÿÿÿ)%r   rF   rÍ   rÎ   r   r˜   r'   r)   rT   ÚgetenvÚhermes_cli.model_switchrÑ   r*   r-   r+   r   Úhermes_cli.runtime_providerr×   Ú_model_is_defaultr,   Ú_typed_api_keyr.   Úrequested_providerr(   rØ   rY   rZ   r[   r–   rV   Ú_provider_sourceÚapi_modeÚacp_commandÚacp_argsr   Úhermes_cli.authrÝ   )r½   r)   r*   r+   r-   rF   rÍ   rÎ   Ú_model_configÚ_config_modelÚ_nested_providerÚ_cfg_providerÚ_startup_provider_overrideÚ_startup_base_url_overrideÚ_startup_api_key_overriderÑ   Ú_startup_routeÚ_moa_provider_overrideÚ	_base_urlr×   rØ   Ú_named_customÚexcÚ_provider_defaultÚ_keysrÝ   s   &&&&&                     r#   rÅ   Ú%CLIInitMixin._init_model_and_providerÈ   sû  € çUÑUð # 7Õ+ˆñ +FØ×Ñ˜iÓ(×LÐL¨M×,=Ñ,=¸gÓ,F×LÐLÈ"ó+
Ñ'ˆô )-¨U«ˆÔ%Ø×1Ð1˜m×1Ð1¨rˆŒ
Ø%×)Ñ)¨*Ó5×_Ð_¼¿ºÐC^Ó9_ˆØ^`Ð`Ð"Ð`Ð%?Ø�:�:ˆ:ÝKá8Ø—
‘
Ø"*§. .¨bØ"*×"UÐ"UÐ.>×"UÐ"UÀ-×"UÐ"UÐSUØ)Ÿ~™~¨kÓ:Ø!+§¡Ð0BÓ!CôˆNð Ò)Ø+×1Ñ1�”
Ø-;×-DÑ-DÐ*Ø-;×-DÑ-DÐ*Ø,:×,BÑ,BÐ)ñ
 .BÀ$Ç*Á*Ó-MÑ*Ð ¤
à�:‰:˜ÔØ%×)Ñ)¨*Ó5×;Ð;¸ˆIÜ  Ó+Ð/IÔIÝPÙ5°iÓ@×NÐNÀDÇJÁJ�”
ð &+¤×!@Ð!@°=Ô/@ˆÔð ")×!MÐ!MÐ,E×!MÐ!MÈˆÔØ%Ÿo˜o¨ˆÔØ"*×"PÐ"PÐ.H×"PÐ"PÈDˆÔð #÷ 'ð ' h÷ 'ð 'Ð2L÷ 'ð 'ÐP`÷ 'ð 'Ø÷'ð 'Ø &ð 	Ôð #9×"jÐ"j¸H×"jÐ"jÐHb×"jÐ"jÐfjˆÔ÷ Ÿð	%ÝRá :¸8Ó D�ô !$ ]×%8Ð%8°b×$=Ñ$=¸gÓ$F×$LÐ$LÈ"Ó M× SÑ SÓ UÐß Ø.�”
Ø).�Ô&Ø/3ˆÔØ×/Ñ/ˆŒØ*ˆŒØ*.ˆÔØ#%ˆŒà÷ð4Ð2÷ð4°m×6GÑ6GÈ
ÐTVÓ6W÷ð4Ü�yŠyÐ.°Ó3÷ð ð ð 	Œô —’Ð/Ó0´"·)²)Ð<LÓ2MÐNˆØ——�Ô"7¸¿¹À×"WÒ"WØ™$˜B˜$•K‰EåAÙ#<¸UÀ1½X×#FÒ#F�u˜Q–xÈDˆE�!‰HØ×6Ð6 %¨¥(×6Ð6¨e°A­hˆŽøô7 ô %Ü—‘ØfØ˜côð !%–ûð%ús   Ê+Q ÑQ6ÑQ1Ñ1Q6c           
     ó.  € ^ RI Hp ^ RIHp V! \	        R WR,          P                  R4      VP                  R4      3 4       \        P                  ! R4      4      4      V n        Ve   TMVR,          P                  R4      V n	        W n
        Wn        R# )	zOmax_turns: CLI arg > config > env var > default; run budget: CLI flag > config.rE   )Úresolve_turn_limitc              3  ó0   "  € T F  qf   K  Vx € K  	  R # 5i©N© )Ú.0Úvs   & r#   Ú	<genexpr>Ú1CLIInitMixin._init_turn_limits.<locals>.<genexpr>1  s   é € ÐxÑf�1�QŠQÓfùs   ‚Œ
Úagentr3   ÚHERMES_MAX_ITERATIONSNÚrun_budget_seconds)r   rF   rX   rû   Únextr   rT   rà   r3   r  r:   r4   )r½   r3   r9   rF   Ú_resolve_turn_limits   &&&  r#   rÆ   ÚCLIInitMixin._init_turn_limits)  s�   € å"õ 	PÙ,¬TÙx˜¨wÕ$7×$;Ñ$;¸KÓ$HÈ*Ï.É.ÐYdÓJeÑfÓxÜ�IŠIÐ-Ó.ó.
ó ˆŒð 1;Ò0F¡*ÈJÐW^ÕL_×LcÑLcÐdxÓLyˆÔØ$.Ô!à#,Ö r%   c                	ó‚   € ^ RI Hp Wn        VRJV n        ^ RIHp V! VR,          P                  R4      4      V n        R# )é    rE   N)Úparse_config_string_listr  Údisabled_toolsets)r   rF   r   r0   Úagent.skill_utilsr  r   r  )r½   r/   rF   r  s   &&  r#   rÇ   ÚCLIInitMixin._init_toolsets9  s;   € Ý"Ø (Ôð #+°$Ð"6ˆÔÝ>á!9¸*ÀWÕ:M×:QÑ:QÐReÓ:fÓ!gˆÖr%   c                	óð  € ^ RI Hp VP                  R/ 4      p\        V\        4      '       d   RV/pT;'       g    VP                  RR4      V n        \	        V4      V n        VP                  R^4      V n        VP                  RR4      V n        VP                  R^
4      V n	        W n
        T;'       g)    \        \        P                  P                  R	4      4      V n        \	        V4      V n        R
# )r
  rE   r5   r~   FÚmax_snapshotsÚmax_total_size_mbiô  Úmax_file_size_mbÚHERMES_IGNORE_RULESN)r   rF   r   r   r˜   Úcheckpoints_enabledr6   Úcheckpoint_max_snapshotsÚcheckpoint_max_total_size_mbÚcheckpoint_max_file_size_mbr7   r   rT   rU   r8   Ú_explicit_ignore_rules)r½   r5   r7   r8   rF   Úcp_cfgs   &&&&  r#   rÈ   Ú(CLIInitMixin._init_checkpoints_and_rulesF  sÅ   € Ý"Ø—‘ ¨rÓ2ˆÜ�fœd×#Ò#Ø Ð(ˆFØ#.×#NÐ#N°&·*±*¸YÈÓ2NˆÔ Ü%)¨+Ó%6ˆÔ"Ø(.¯
©
°?ÀBÓ(GˆÔ%Ø,2¯J©JÐ7JÈCÓ,PˆÔ)Ø+1¯:©:Ð6HÈ"Ó+MˆÔ(Ø.Ôà(×bÐb¬O¼B¿J¹J¿N¹NÐK`Ó<aÓ,bˆÔä&*¨<Ó&8ˆÖ#r%   c                ó’  € ^ RI HpHpHpHpHp ^ RIHpHp \        P                  ! RR4      ;'       g	    V! V4      T n        V! V4      V n        V! V! V4      4      V n        ^ RIHp	 V	! W P                   4      V n        RV n        RV n        Vem   \)        V4      P+                  4       '       dN   V! V4      p
V
f   \,        P/                  RV4       M*W n        W n        \)        V4      P+                  4       V n        V! VR,          P1                  R	R4      4      V n        VP1                  R
/ 4      ;'       g    / pVP1                  R4      V n        VP1                  R4      V n        VP1                  R4      V n        VP1                  R4      V n        VP1                  RR4      V n        VP1                  R4      V n        VP1                  R/ 4      ;'       g    / P1                  R4      pRV n         VR9  d%    \C        V4      pRTu;8:  d   R8:  d
   M MWÐn         \I        V4      V n%        R#   \D        \F        3 d     L%i ; i)zdEphemeral system prompt/prefill, reasoning + service tier, OpenRouter routing knobs, fallback chain.)rF   Ú_load_prefill_messagesÚ_parse_reasoning_configÚ_parse_service_tier_configÚ_resolve_prefill_messages_file)Úavailable_personalitiesÚresolve_ephemeral_system_promptÚHERMES_EPHEMERAL_SYSTEM_PROMPTr=   )Úresolve_reasoning_configNz6Unknown --reasoning '%s', keeping the configured levelr  Úservice_tierÚprovider_routingÚsortÚonlyÚignoreÚorderÚrequire_parametersFÚdata_collectionÚ
openrouterÚmin_coding_scorer‹   g      ð?>   Nr=   )&r   rF   r  r  r  r  Úhermes_cli.personalityr   r!  rT   rà   Úsystem_promptÚpersonalitiesÚprefill_messagesÚhermes_constantsr#  r)   Úreasoning_configÚ_explicit_reasoning_configr2   r–   rV   rZ   r[   r   r$  Ú_provider_sortÚ_providers_onlyÚ_providers_ignoreÚ_providers_orderÚ_provider_require_paramsÚ_provider_data_collectionÚ_openrouter_min_coding_scoreÚfloatÚ	TypeErrorÚ
ValueErrorr   Ú_fallback_model)r½   r1   rF   r  r  r  r  r   r!  r#  Ú_cli_reasoningÚprÚ
_raw_scoreÚ_fs   &&            r#   rÉ   Ú'CLIInitMixin._init_prompt_and_reasoningV  sô  € ÷ 	Põ  	PçcäŸYšYÐ'GÈÓL×{Ð{ÑPoÐpzÓP{ˆÔÙ4°ZÓ@ˆÔá 6Ñ7UÐV`Ó7aÓ bˆÔõ
 	>Ù 8¸ÇZÁZÓ PˆÔØ*.ˆÔ'Ø#'ˆÔ àÒ ¤S¨£^×%9Ñ%9×%;Ò%;Ù4°YÓ?ˆNØÒ%Ü—‘ÐWÐYbÕcà(6Ô%Ø2@Ô/Ü+.¨y«>×+?Ñ+?Ó+A�Ô(Ù6°zÀ'Õ7J×7NÑ7NÈ~Ð_aÓ7bÓcˆÔà�^‰^Ð.°Ó3×9Ð9°rˆØ Ÿf™f V›nˆÔØ!Ÿv™v f›~ˆÔØ!#§¡¨Ó!1ˆÔØ "§¡ w£ˆÔØ(*¯©Ð/CÀUÓ(KˆÔ%Ø)+¯©Ð0AÓ)BˆÔ&ð !—n‘n \°2Ó6×<Ð<¸"×AÑAÐBTÓUˆ
Ø=AˆÔ)Ø˜ZÔ'ðÜ˜:Ó&�Ø˜"Ö# ×#Ø8:Ô5ô  2°*Ó=ˆÖøô œzÐ*ô Ùðús   Ç=H2 ÈH2 È2IÉIc                ó¼  € ^ RI Hp RV n        RV n        RV n        RV n        . V n        \        P                  ! 4       V n	        RV n
        RV n        RV n        V P                  4        RV n        \        V4      V n        T;'       g    \#        V P                  4      V n        \'        V RR 4      ! 4        VR,          V n        RV n        V P-                  4        R# )zZSession store + all per-run mutable state (queues, overlays, pet/voice/status-bar fields).)Ú_hermes_homeNFr‹   Ú_write_terminal_breadcrumbc                 ó   € R # rý   rþ   rþ   r%   r#   Ú<lambda>Ú2CLIInitMixin._init_runtime_state.<locals>.<lambda>›  s   € ¹Dr%   z.hermes_history)r   rF  Ú_active_agent_route_signaturer  Ú_tool_callbacks_installedÚ_appÚconversation_historyr   ÚnowÚsession_startÚ_prompt_start_timeÚ_prompt_durationÚ_last_turn_finished_atÚ_init_session_storeÚ_pending_titler˜   Ú_resumedr   Ú
session_idr   Ú_history_fileÚ_last_invalidateÚ_init_ui_state)r½   ÚresumerF  s   && r#   Ú_init_runtime_stateÚ CLIInitMixin._init_runtime_stateˆ  s¼   € å$à-1ˆÔ*Ø$(ˆŒ
Ø).ˆÔ&ØˆŒ	à:<ˆÔ!Ü%Ÿ\š\›^ˆÔà37ˆÔØ'*ˆÔØ7;ˆÔ#Ø× Ñ Ô"Ø-1ˆÔÜ˜V›ˆŒØ ×FÐF¤N°4×3EÑ3EÓ$FˆŒÜ�Ð2±LÔAÔCà)Ð,=Õ=ˆÔØ.2ˆÔØ×ÑÖr%   c                ó  aaaa€ RV n         RV n         ^ RIHp V! 4       V n         R#   \         dX   oRT n        \
        P                  RS4       ^ RIHpH	o ^ RI
Ho T! S4      oTTTT3R lp^ R	IHp T! TR
R7        Ro>R# Ro>ii ; i)zHOpen the session store early (so /title works before the first message).NF)Úsession_storeTuM   Failed to initialize SessionDB â€” session will NOT be indexed for search: %s)Údescribe_storage_failureÚstorage_failure_detailsr   c            
     óü   <€  \        R R7      P                  S! RSP                  SP                  S! S 4      R7      4       R#   \         d-    \        S! RSP                  SP                  R7      4        R# i ; i)Tr_   z"cli.session_store.unavailable_rich)ÚreasonÚactionÚdetailsz#cli.session_store.unavailable_plain)rc  rd  N)r	   ÚprintÚglossrd  rY   )ÚeÚfailurera  r   s   €€€€r#   Ú_present_store_warningÚ@CLIInitMixin._init_session_store.<locals>._present_store_warning¸  sn   ø€ ðqÜ 4Ô(×.Ñ.©qØ<Ø&Ÿ}™}°W·^±^ÑMdÐefÓMgô0iö jøô !ô qÜ™!ÐAÈ'Ï-É-Ð`g×`nÑ`nÔo×pðqús   ƒ?A Á3A;Á:A;)Úrender_notificationr   )Úplatform)Ú_session_dbÚ_session_db_unavailableÚ hermes_cli.gateway_session_storer_  rY   rZ   r[   Úhermes_state_user_copyr`  ra  r   r   Úgateway.warning_notificationsrl  )	r½   r_  r`  rj  rl  rh  ri  ra  r   s	   &    @@@@r#   rT  Ú CLIInitMixin._init_session_store¡  s…   û€ àˆÔØ',ˆÔ$ð	Hõ
 GÙ,›ˆDÖøÜô 	Hð ,0ˆDÔ(Ü�N‰NÐjÐlmÔnß`Ý$Ù.¨qÓ1ˆG÷qð qõ JÙÐ 6À×GÓGûð+	Hús   ”( ¨B
³ABÂB
c                óZ  a a€ ^ RI Hp \        S RR4      p\        S RR4      '       g   \        W!4      '       g   R# \	        S 4      p\        S RR4      ;'       d    \        S RR4      RJp\        4        \        S V4      ;_uu_ 4        VP                  S V4      pRS n        ^ R	I	H
oHp VV 3R
 lVn        \        S V4       ^ RIHp V! S VP                   4       V'       d,   VS P"                  8w  d   VS n        \        S RR 4      ! 4        RRR4       R#   + '       g   i     R# ; i)z¶Create (or resume) this CLI's gateway session and adopt the id it returns, before the banner
and the first turn. Idempotent; a store without the gateway facade (tests) is left alone.©ÚGatewaySessionStorern  NÚ_gateway_session_openFrV  Ú_active_session_leaseT)Úgateway_plugin_commandsÚtools_configc                 ó&   <€ S P                  S4      # rý   )r/   )ry  r½   s   €€r#   rI  Ú6CLIInitMixin._ensure_gateway_session.<locals>.<lambda>Ò  s   ø€ Ð<S×<\Ñ<\Ð]aÔ<br%   )Úbind_sessionrG  c                 ó   € R # rý   rþ   rþ   r%   r#   rI  r|  Ø  s   € ÁDr%   )rp  rv  r   r   rA   r]   rg   Úopen_sessionrw  Ú
hermes_cliry  rz  Ú_gateway_plugin_toolsetsr$   Úhermes_cli.gateway_toolsr}  Ú
connectionrW  )	r½   rv  r!   Úlaunchrf   Úsidrz  r}  ry  s	   f       @r#   Ú_ensure_gateway_sessionÚ$CLIInitMixin._ensure_gateway_sessionÄ  sî   ù€ õ 	IÜ˜˜m¨TÓ2ˆÜ�4Ð0°%×8Ò8Ä
È5×@fÒ@fÙÜ  Ó&ˆÜ�t˜Z¨Ó/×lÐl´G¸DÐBYÐ[_Ó4`ÐhlÐ4lˆÜ"Ô$Ü˜t T×*Õ*Ø×$Ñ$ T¨6Ó2ˆCØ)-ˆDÔ&ßHÝ4bˆLÔ1Ü# D¨%Ô0Ý=Ù˜˜u×/Ñ/Ô0ß�s˜dŸo™oÔ-Ø"%�”Ü˜Ð:¹LÔIÔK÷ +×*×*Ò*ús   Â	BDÄD*	Ú	branch_ofNÚtitlec               óÖ  € ^ RI Hp \        V RR4      p\        WT4      '       d   \        V RR4      '       g   ^ RIHp V! V4      # V'       dD   TP                  W#4      p^ RIHpH	p	 V	! V4      '       d   VP                  VR4       V! V4       V# \        V 4      P                  4        U
Uu/ uF  w  r«V
\        9  g   K  W«bK  	  pp
pVP                  VRR	7      pWÐn        V# u upp
i )
aó  The id main mints for /new (``new_session_id``) and /branch (``mint_session_id``). On a gateway
store it is a session the gateway created: /new is a fresh ``session.create`` on the profile's
default model (an explicit -m was for the previous session only) with the run's other launch
flags, /branch the child of
``session.mutate branch``. Before this CLI opened its gateway session (or off the gateway) it is
main's local mint, which ``_ensure_gateway_session`` replaces on first use, as at startup.ru  rn  Nrw  Fr   )Úenable_session_yoloÚis_session_yolo_enabledT)Ú
record_cwd)rp  rv  r   r   Úhermes_state_idsr   ÚbranchÚtools.approvalr‹  rŒ  Úset_session_yolorA   ÚitemsÚ_ROUTE_FLAGSÚcreaterW  )r½   rO  rˆ  r‰  rv  r!   r   Úchildr‹  rŒ  ÚkeyÚvaluer„  r…  s   &&$$          r#   Ú_new_session_idÚCLIInitMixin._new_session_idÚ  sÓ   € õ 	IÜ˜˜m¨TÓ2ˆÜ˜%×5Ò5¼WÀTÐKbÐdi×=jÒ=jÝ7Ù! #Ó&Ð&ßØ—L‘L Ó2ˆE÷
 TÙ& y×1Ò1Ø×&Ñ& u¨dÔ3Ù# EÔ*ØˆLä/>¸tÓ/D×/JÑ/JÔ/LÔhÑ/L¡ ÐPSÔ[gÑPg”*�#’*Ñ/LˆÑhØ�l‰l˜6¨eˆlÓ4ˆØŒØˆ
ùó is   Â-C%ÃC%c                ó¶  € ^ RI HpHp \        P                  ! 4       V n        \        P                  ! 4       V n        R;V n        V n        RV n	        RV n
        RV n        RV n        RV n        ^ V n        R;V n        V n        RV n        RV n        R;V n        ;V n        V n        R;V n        V n        ^ ;V n        ;V n        ;V n        V n        \8        P:                  ! 4       V n         ^ RIH p V! 4       V n!        R;V n#        V n$        RV n%        RV n&        ^ V n'        RV n(        / V n)        R;V n*        V n+        RV n,        R;V n-        V n.        R;V n/        V n0        R;V n1        V n2        R;V n3        V n4        ^V n5        RV n6        / V n7        / V n8        ^ ;V n9        V n:        \8        P:                  ! 4       V n;        R;V n<        V n=        RV n>        R;V n?        V n@        . V nA        ^ V nB        ^ RICHDp V! 4       V nE        . V nF        RV nG        RV nH        RV nI        RV nJ        RV nK        . V nL        RV nM        RV nN        \8        P:                  ! 4       V nO        R;V nP        ;V nQ        V nR        R;V nS        V nT        R;V nU        V nV        RV nW        \8        P°                  ! 4       V nY        V P²                  Pµ                  4        \8        P°                  ! 4       V n[        RV n\        RV n]        V! VP½                  R	4      4      V n_        \Á        VR	,          P½                  R
R4      4      V na        \Á        VR	,          P½                  RR4      4      V nb        R;V nc        V nd        \8        P:                  ! 4       V ne        R;V nf        V ng        RV nh        / V ni        ^ V nj        ^ ;V nk        ;V nl        V nm        RV nn        R#   \D         d    RT n!         ELÚi ; i)z^Per-run mutable UI state; must exist before any chat() call since -q never goes through run().)rF   Ú'_status_bar_visible_from_display_configFNr=   )Úget_random_composer_placeholderr‹   gffffffæ?)ÚPromptStashrn   ÚbatteryÚvim_mode)or   rF   r›  r�   ÚQueueÚ_pending_inputÚ_interrupt_queueÚ_agent_runningÚ_should_exitÚ_detach_on_exitÚ_last_turn_interruptedÚ_terminal_io_brokenÚ_delete_session_on_exitÚ_pending_relaunchÚ_last_ctrl_c_timeÚ_clarify_stateÚ_clarify_multi_baseÚ_clarify_freetextÚ_clarify_prefillÚ_sudo_stateÚ_modal_input_snapshotÚ_approval_stateÚ_slash_confirm_stateÚ_model_picker_stateÚ_clarify_deadlineÚ_sudo_deadlineÚ_approval_deadlineÚ_slash_confirm_deadlineÚ	threadingÚLockÚ_approval_lockÚhermes_cli.tipsrœ  Ú_composer_placeholderrY   Ú_command_palette_stateÚ_secret_stateÚ_pending_resume_sessionsÚ_pending_agent_seedÚ_secret_deadlineÚ_tool_start_timeÚ_pending_tool_infoÚ_spinner_textÚ_command_statusÚ_last_scrollback_toolÚ_command_runningÚ_command_blocks_inputÚ_pet_rendererÚ_pet_anim_threadÚ	_pet_slugÚ_pet_kitty_pendingÚ_pet_enabledÚ_pet_anim_runningÚ	_pet_colsÚ
_pet_scaleÚ_pet_frames_cacheÚ_pet_kitty_cacheÚ_pet_kitty_image_idÚ_pet_frame_idxÚ	_pet_lockÚ_pet_cfg_checkedÚ_pet_event_untilÚ
_pet_eventÚ_pet_reasoningÚ_pet_turn_errorÚ_attached_imagesÚ_image_counterÚhermes_cli.prompt_stashr�  Ú_prompt_stashÚpreloaded_skillsÚ_startup_skills_line_shownÚ_auto_load_skills_resultÚ_preload_skills_threadÚ_preload_skills_resultÚ_preload_skills_errorrC   Ú_preload_skills_finalizedrx  Ú_voice_lockÚ_voice_modeÚ
_voice_ttsÚ_voice_recordingÚ_voice_processingÚ_voice_continuousÚ_voice_recorderÚ_voice_tts_stopÚ_voice_live_textÚEventÚ_voice_tts_donerH   Ú_voice_barge_captureÚ_voice_last_tts_textÚ_voice_barge_phaser   Ú_status_bar_visibler˜   Ú_battery_visibleÚ	_vim_modeÚ#_status_bar_suppressed_after_resizeÚ_resize_recovery_pendingÚ_resize_recovery_lockÚ_resize_recovery_timerÚ_status_bar_unsuppress_timerÚ_last_resize_widthÚ_background_tasksÚ_background_task_counterÚ_cache_hit_baseline_promptÚ_cache_hit_baseline_readÚ _cache_hit_baseline_compressionsÚ_cache_hit_baseline_model)r½   rF   r›  rœ  Ú_PromptStashs   &    r#   rZ  ÚCLIInitMixin._init_ui_state÷  s¹  € çKÜ#Ÿkšk›mˆÔÜ %§¢£ˆÔØ27Ð7ˆÔ˜dÔ/Ø$ˆÔØ&+ˆÔ#Ø#(ˆÔ Ø',ˆÔ$ð
 48ˆÔØ!"ˆÔà9=Ð=ˆÔ˜dÔ6Ø!&ˆÔØ "ˆÔØOSÐSˆÔÐS˜4Ô5¸Ô8LØ?CÐCˆÔ! DÔ$<ØpqÐqˆÔÐq Ô!4Ðq°tÔ7NÐQUÔQmÜ'ŸnšnÓ.ˆÔð	,ÝGÙ)HÓ)JˆDÔ&ð <@Ð?ˆÔ# dÔ&8Ø(,ˆÔ%Ø#'ˆÔ Ø !ˆÔØ'*ˆÔØ(*ˆÔØ46Ð6ˆÔ˜TÔ1Ø*,ˆÔ"Ø=BÐBˆÔ Ô :à59Ð9ˆÔ˜TÔ2Ø35Ð5ˆŒ˜Ô0Ø5:Ð:ˆÔ˜DÔ2Ø ˆŒØ!$ˆŒØ')ˆÔØ&(ˆÔØ9:Ð:ˆÔ  4Ô#6Ü"ŸšÓ)ˆŒØ8;Ð;ˆÔ Ô 5Ø!ˆŒØ5:Ð:ˆÔ˜dÔ2Ø,.ˆÔØˆÔåGÙ)›^ˆÔØ+-ˆÔØ*/ˆÔ'ð :>ˆÔ%àBFˆÔ#Ø7;ˆÔ#Ø>BˆÔ"Ø/1ˆÔ&Ø).ˆÔ&Ø%)ˆÔ"ô %Ÿ>š>Ó+ˆÔØEJÐJˆÔÐJ˜4œ?¨TÔ-BØ:?Ð?ˆÔ Ô!7Ø6:Ð:ˆÔ˜tÔ3Ø "ˆÔÜ(ŸšÓ0ˆÔØ×Ñ× Ñ Ô"Ü$-§O¢OÓ$5ˆÔ!Ø$&ˆÔ!Ø"&ˆÔá#JÈ:Ï>É>ÐZcÓKdÓ#eˆÔ Ü $ Z°	Õ%:×%>Ñ%>¸yÈ%Ó%PÓ QˆÔô ˜j¨Õ3×7Ñ7¸
ÀEÓJÓKˆŒð TYÐXˆÔ0°4Ô3PÜ%.§^¢^Ó%5ˆÔ"ØJNÐNˆÔ# dÔ&GØ"&ˆÔà>@ˆÔØ()ˆÔ%ð stÐsˆÔ'Ðs¨$Ô*GÈ$ÔJoØ8<ˆÖ&øôO ô 	,Ø)+ˆD×&ð	,ús   Ã+O ÏOÏO)ÈrK  rx  r£  rM  r¶  rº  r±  rÛ  rá  rþ  rý  rõ  r  r  rÿ  r   r´  r­  r¬  r®  r«  rÈ  r½  rÇ  rÅ  r¼  r¨  r¥  r,   r.   r6   r  r4   r'   r(   r2   r4  r:   r0   r?  rœ   r›   rš   r™   rw  rµ   rX  rÜ  r·   r¤   r»   rª   r¢  rª  r¹   rY  rü  rÆ  rº   rS  r¦  r°  rã   r³  rŸ   r;  rÀ  r¸   r¡  r©  r¿  rU  rÃ  rÎ  rÊ  rÖ  rÏ  rÍ  rØ  r×  rÔ  rÑ  rÒ  rÓ  rÌ  rÕ  rÙ  rÉ  rÐ  rË  rÚ  rä  rå  rC   rã  râ  rR  rQ  rÞ  r:  r9  r5  ræ   r7  r6  r8  r°   rù  rø  rú  rV  rÁ  r¾  rn  ro  r¤  r·  r²  rÄ  r¦   rà  r÷  rû  rô  r³   r²   r¯   r±   r¶   r´   rµ  r¯  r§  r¼   rL  rÂ  r§   r¥   r¨   r©   rä   rö  rñ  ró  rë  rò  rî  ræ  rç  rê  rì  ré  rè  rð  rí  ré   rè   r  r+   rç   r-   rx   ry   r    r  r  r  r  ro   r”   r“   rN  r  r   r‡   r8   r3   r)   r7   r0  r1  rß  r*   r3  r{   rå   rv   r  r$  rW  rP  rz   r¢   r¡   r/  r†   r—   r­   r®   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÂ   rÊ   rÅ   rÆ   rÇ   rÈ   rÉ   r\  rT  r†  r˜  rZ  Ú__static_attributes__rþ   r%   r#   ri   ri   q   s]   † ñ ròJZòX3ò_7òB-ò hò9ò 0>òdò2 HòFLð,°ð ¸Dô ö:b=r%   ri   )r)   r*   r+   r-   )$r	  Ú
__future__r   Ú
contextlibr   ÚloggingrT   r�   r¸  r   Úhermes_cli.fallback_configr   rŽ  r   Úpathlibr   Úrich.consoler	   Útypingr
   r   r   r   Úutilsr   r   r   Ú	getLoggerrZ   r“  r$   rA   r?   r]   rg   ri   rþ   r%   r#   Ú<module>r     s‰   ðñõ
 #å %Û Û 	Û Û Ý Ý 9Ý +Ý Ý  ß ,Ó ,ß KÑ Kð 
×	Ò	˜5Ó	!€ð <€ò
^ò4ò(	DòIð$ ñ4ó ð4÷*h=ó h=r%   