+
    jHàjm¶  ã            
       óº  a€ RT t;0 t R t^ RIt^ RIHt ^ RIHtHtHtH	t	H
t
 R R lt]! 0 RUm4      tR R ltR t. RVOt] ^ k R	tR
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 R ltRRRRRRRR/R R  lltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* lt RWR+ R, llt!R- R. lt"]#! 4       t$R/ R0 lt%R1^ R2R3/R4 lt&R5R6.t'RXt(]( U UUUu/ uF  w  p  rV F  q3V bK  	  K  	  upppp t)RYR7 R8 llt*R9 R: lt+RYR; lt,RYR< lt-RZR= lt.R> t/RYR?R/R@ llt0RA RB lt1RC RD lt2RE RF lt3RG RH lt4RWRI RJ llt5RK RL lt6RM RN lt7RO t8RP RQ lt9RR RS lt:R# u upppp i )[zýProvider setup wizard helpers: provider picker, custom-provider save/remove, auxiliary-model
routing menu, API-key/reasoning prompts, Anthropic OAuth.

Split out of ``hermes_cli/main.py``. Names that still live in main are imported lazily at call time.
N)ÚOptional)Ú_askÚ_ensure_dict_sectionÚ_print_numberedÚ
_radiolistÚ_sayc                ó0   € V ^8„  d   QhR\         R\        /# )é   Úprovider_idÚreturn©ÚstrÚbool)Úformats   "ÚC/home/ubuntu/.hermes/hermes-agent/hermes_cli/main_provider_setup.pyÚ__annotate__r      s   € ÷ ñ ¬cð ´dñ ó    c                óz   €  ^ RI Hp V! V 4      pVRJ;'       d    VP                  R8H  #   \         d     R# i ; i)u­   True when *provider_id* maps to a profile with ``auth_type='api_key'`` â€” the catch-all
in select_provider_and_model() so plugin providers dispatch to the generic key flow.)Úget_provider_profileNÚapi_keyF)Ú	providersr   Ú	auth_typeÚ	Exception)r
   r   Ú_ps   &  r   Ú_is_profile_api_key_providerr      sA   € ðÝ2Ù! +Ó.ˆØ˜ˆ~×;Ð; "§,¡,°)Ñ";Ð;øÜô Úðús   ‚+ ›+ «:¹:c                ó0   € V ^8„  d   QhR\         R\         /# )r	   Úurlr   ©r   )r   s   "r   r   r      s   € ÷ Jñ J”Cð JœCñ Jr   c                ód   € V P                  RR4      P                  RR4      P                  R4      # )z8``https://host/path/`` -> ``host/path`` for menu labels.zhttps://Ú zhttp://Ú/)ÚreplaceÚrstrip)r   s   &r   Ú
_short_urlr#      s+   € à�;‰;�z 2Ó&×.Ñ.¨y¸"Ó=×DÑDÀSÓIÐIr   c                 ó˜  € ^ RI Hp HpHp V! 4       P	                  R/ 4      p\        V\        4      '       d8   VP	                  R4      ;'       g    RP                  4       P                  4       MRpVR8X  g	   V'       g   R# V ! R4      pV'       d9   V! RR4       \        V4      ^(8”  d   VR,           R	2MTp\        R
V R24       R# R# )u©   Remove OPENAI_BASE_URL from ~/.hermes/.env unless the active provider is 'custom' â€” a
leftover value routes provider:auto auxiliary clients to the old custom endpoint.)Úget_env_valueÚsave_env_valueÚload_configÚmodelÚproviderr   ÚcustomNÚOPENAI_BASE_URL:Né(   Nz...z.Cleared stale OPENAI_BASE_URL from .env (was: Ú))Úhermes_cli.configr%   r&   r'   ÚgetÚ
isinstanceÚdictÚstripÚlowerÚlenÚprint)r%   r&   r'   Ú	model_cfgr)   Ú	stale_urlÚshowns          r   Ú_clear_stale_openai_base_urlr9   $   s²   € ÷ MÑLÙ“×!Ñ! '¨2Ó.€IÜDNÈyÔZ^×D_ÒD_�	—‘˜jÓ)×/Ð/¨R×6Ñ6Ó8×>Ñ>Ô@Ðeg€HØ�8Ô§8ÙáÐ/Ó0€IßÙÐ(¨"Ô-Ü*-¨i«.¸2Ô*=�9˜S•>Ð" #Ñ&À9ˆÜÐ>¸u¸gÀQÐGÖHñ r   Ú
delegationÚ
Delegationzsubagent model (delegate_task)c                óf   € V ^8„  d   QhR\         \        \        \        \        3,          ,          /# ©r	   r   )ÚlistÚtupler   )r   s   "r   r   r   O   s#   € ÷ 	ñ 	œœU¤3¬¬S =Õ1Õ2ñ 	r   c            	     ó  € \        \        4      p \        P                  ! \        4      ;_uu_ 4        ^ RIHp V! 4        F,  pV P                  VR,          VR,          VR,          34       K.  	  RRR4       V #   + '       g   i     T # ; i)z„Built-in aux tasks (in order) followed by plugin-registered ones
(:meth:`hermes_cli.plugins.PluginContext.register_auxiliary_task`).©Úget_plugin_auxiliary_tasksÚkeyÚdisplay_nameÚdescriptionN)r>   Ú
_AUX_TASKSÚ
contextlibÚsuppressr   Úhermes_cli.pluginsrB   Úappend)ÚtasksrB   Úentrys      r   Ú_all_aux_tasksrM   O   sl   € ô ”Ó€Eä	×	Ò	œY×	'Õ	'ÝAÙ/Ö1ˆEØ�L‰L˜% �,¨¨nÕ(=¸uÀ]Õ?SÐTÖUñ 2÷ 
(ð €L÷	 
(Ö	'ð €Lús   ²>A:Á:B	c                ó0   € V ^8„  d   QhR\         R\        /# ©r	   Útask_cfgr   ©r1   r   )r   s   "r   r   r   [   s   € ÷ ñ ¤$ð ¬3ñ r   c                óV  € \        V \        4      '       g   R# \        V P                  R4      ;'       g    R4      P	                  4       p\        V P                  R4      ;'       g    R4      P	                  4       ;'       g    Rp\        V P                  R4      ;'       g    R4      P	                  4       p\        V 4      pV'       d   RV 2MRV'       d   RV 2MR,           pV'       d   R\        V4       R2V,           # VR8X  d
   RV,           # V'       d   V V 2# W%,           # )	z;Render the current aux config for display in the task menu.ÚautoÚbase_urlr   r)   r(   õ    Â· zcustom (r-   )r0   r1   r   r/   r2   Ú_aux_effort_wordr#   )rP   rT   r)   r(   ÚeffortÚsuffixs   &     r   Ú_format_aux_currentrY   [   sù   € ä�h¤×%Ò%ÙÜ�8—<‘< 
Ó+×1Ð1¨rÓ2×8Ñ8Ó:€HÜ�8—<‘< 
Ó+×5Ð5¨vÓ6×<Ñ<Ó>×HÐHÀ&€HÜ�—‘˜WÓ%×+Ð+¨Ó,×2Ñ2Ó4€EÜ˜hÓ'€Fß %��U�G‰n¨2ÇV°D¸¸±/ÐQSÕT€FßØœ* XÓ.Ð/¨qÐ1°FÕ:Ð:Ø�6ÔØ˜�ÐßØ�˜F˜8Ð$Ð$ØÕÐr   c                ó0   € V ^8„  d   QhR\         R\        /# rO   rQ   )r   s   "r   r   r   m   s   € ÷ *ñ *œtð *¬ñ *r   c                óÆ   € \        V \        4      '       d   V P                  R4      MRpVRJ d   R# \        T;'       g    R4      P	                  4       P                  4       # )z_The stored ``reasoning_effort`` as a display word ("" = provider default; YAML False = "none").Úreasoning_effortNFÚnoner   )r0   r1   r/   r   r2   r3   )rP   Úraws   & r   rV   rV   m   sK   € ä.8¸Ä4×.HÒ.Hˆ(�,‰,Ð)Ô
*Èd€CØ
ˆeƒ|ÙÜˆs�yˆy�b‹>×ÑÓ!×'Ñ'Ó)Ð)r   c                ó0   € V ^8„  d   QhR\         R\         /# )r	   Úcfgr   )r1   )r   s   "r   r   r   u   s   € ÷ ñ ¤ð ¬$ñ r   c           	     ó  € V P                  R4      p\        V\        4      '       g   / pR Uu/ uF5  q"\        VP                  V4      ;'       g    R4      P	                  4       bK7  	  ppVP                  RR4      VR&   V# u upi )z¤Project the top-level ``delegation`` section into aux-task shape (provider/model/
base_url/api_key); an empty provider means "inherit parent" and renders as "auto".r:   r   r\   )r)   r(   rT   r   )r/   r0   r1   r   r2   )r`   ÚdÚkÚouts   &   r   Ú_delegation_cfg_as_taskre   u   s{   € ð 	�‰�Ó€AÜ�aœ×ÒØˆÙ3_Ó
`Ñ3_¨aŒc�!—%‘%˜“(—.�.˜bÓ!×'Ñ'Ó)Ò)Ñ3_€CÐ
`ØŸe™eÐ$6¸Ó;€CÐÑØ€Jùò as   ®!BÁBc                ó<   € V ^8„  d   QhR\         R\        R\         /# ©r	   r`   Útaskr   rQ   )r   s   "r   r   r   €   s&   € ÷ Hñ H”tð H¤3ð H¬4ñ Hr   c                ó  € V\         8X  d   \        V 4      # \        V P                  R4      \        4      '       d   V P                  R/ 4      M/ p\        VP                  V4      \        4      '       d   VP                  V/ 4      # / # )zLThe stored routing dict for *task* (delegation reads its top-level section).Ú	auxiliary)Ú_DELEGATION_TASK_KEYre   r0   r/   r1   )r`   rh   Úauxs   && r   Ú_aux_task_cfgrm   €   sh   € àÔ#Ô#Ü& sÓ+Ð+Ü&0°·±¸Ó1EÄt×&LÒ&Lˆ#�'‰'�+˜rÔ
"ÐRT€CÜ *¨3¯7©7°4«=¼$× ?Ò ?ˆ3�7‰7�4˜ÓÐGÀRÐGr   c                ó<   € V ^8„  d   QhR\         R\        R\         /# rg   rQ   )r   s   "r   r   r   ˆ   s!   € ÷ 	$ñ 	$¤4ð 	$¬sð 	$´tñ 	$r   c                ój  a€ \         P                  ! \        4      ;_uu_ 4        ^ RIHp \
        ;QJ d$    V3R lV! 4        4       F  '       g   K   RM	  RM! V3R lV! 4        4       4      '       d   ^ RIHp V! S4      uuRRR4       #  RRR4       \        V S4      #   + '       g   i     L; i)a  The routing dict to *display* for *task*. A plugin task registered with ``inherit_from``
shows its resolved route (base included), so the menu never reports "auto" while the task
actually runs on the base's provider; every other task shows exactly what is stored.rA   c              3   ó|   <"  € T F1  qP                  R 4      S8H  ;'       d    VP                  R4      x € K3  	  R# 5i)rC   Úinherit_fromN)r/   )Ú.0Úerh   s   & €r   Ú	<genexpr>Ú,_aux_task_cfg_for_display.<locals>.<genexpr>Ž   s2   øé € ÐdÑGcÀ!�u‰u�U‹|˜tÑ#×=Ð=¨¯©¨nÓ(=Ô=ÓGcùs   ƒ<¢<TF)Ú_get_auxiliary_task_configN)	rG   rH   r   rI   rB   ÚanyÚagent.auxiliary_clientrv   rm   )r`   rh   rB   rv   s   &f  r   Ú_aux_task_cfg_for_displayry   ˆ   su   ø€ ô 
×	Ò	œY×	'Õ	'ÝAß‹3ÔdÑGaÔGcÓd�3�3Š3ÔdÑGaÔGcÓd×dÒdÝIÙ-¨dÓ3÷	 
(Ò	'àd÷ 
(ô
 ˜˜dÓ#Ð#÷ 
(×	'ús   ¤+B"Á"B"Á5B"Â"B2	c                ó0   € V ^8„  d   QhR\         R\         /# ©r	   rh   r   r   )r   s   "r   r   r   ”   s   € ÷ Rñ R¤ð R¬ñ Rr   c                ób   a € S \         8X  d   \        # \        V 3R l\        4        4       S 4      # )zCDisplay name for a task key, covering the special delegation entry.c              3   ó>   <"  € T F  w  rq1S8X  g   K  Vx € K  	  R # 5i©N© )rr   rC   ÚnameÚ_rh   s   &   €r   rt   Ú)_aux_task_display_name.<locals>.<genexpr>˜   s   øé € ÐJÑ*:™,˜# QÀT¹k—’Ó*:ùs   ƒ“
)rk   Ú_DELEGATION_TASK_NAMEÚnextrM   )rh   s   fr   Ú_aux_task_display_namer…   ”   s(   ø€ àÔ#Ô#Ü$Ð$ÜÔJ¬.Ô*:ÓJÈDÓQÐQr   r(   r   rT   r   r\   c                óz   € V ^8„  d   QhR\         R\         R\         R\         R\         R\        \         ,          RR/# )	r	   rh   r)   r(   rT   r   r\   r   N©r   r   )r   s   "r   r   r   ›   sD   € ÷ ñ œ3ð ¬Sð ¼ð ÌSð Ü!ðÜ:BÄ3½-ðØSWñr   c               ó:  € ^ RI HpHp V! 4       pV \        8X  d   \	        VR4      p	VR8X  d   RMTpM\	        \	        VR4      V 4      p	WR&   T;'       g    RV	R&   T;'       g    RV	R&   T;'       g    RV	R	&   Ve   \        V 4      '       d   WYR&   V! V4       R
# )a  Persist an aux task's four routing fields (timeout etc. untouched; main model config never
modified). ``delegation`` writes the top-level section, with "auto" stored as an empty provider.
``reasoning_effort``: a level word or "" (provider default) to write; None leaves the key alone.©r'   Úsave_configr:   rS   r   rj   r)   r(   rT   r   Nr\   )r.   r'   rŠ   rk   r   Ú_aux_task_takes_reasoning)
rh   r)   r(   rT   r   r\   r'   rŠ   r`   rL   s
   &$$$$$    r   Ú_save_aux_choicerŒ   ›   sž   € ÷
 ;Ù
‹-€CØÔ#Ô#Ü$ S¨,Ó7ˆØ! VÔ+‘2°‰ä$Ô%9¸#¸{Ó%KÈTÓRˆØ ˆ*ÑØ—[�[˜b€Eˆ'�NØ Ÿ˜ B€Eˆ*ÑØ—}�} "€Eˆ)ÑØÒ#Ô(AÀ$×(GÒ(GØ$4Ð Ñ!Ù�Ör   c                ó0   € V ^8„  d   QhR\         R\        /# r{   r   )r   s   "r   r   r   °   s   € ÷ 
ñ 
¤Cð 
¬Dñ 
r   c                ó¶   € V \         8X  d   R# ^ RIHp VP                  R4      ;'       g    / P                  V 4      p\	        V\
        4      '       d   RV9   # R# )züWhether the task's config block honours ``reasoning_effort``. MoA slots and
``memory_query_rewrite`` omit the key by design (``config_defaults._aux``); ``review``
routes through delegation which reads ``delegation.reasoning_effort``, not its own block.T©ÚDEFAULT_CONFIGrj   r\   )rk   Úhermes_cli.config_defaultsr�   r/   r0   r1   )rh   r�   Úblocks   &  r   r‹   r‹   °   sQ   € ð Ô#Ô#ÙÝ9Ø×Ñ Ó,×2Ð2°×7Ñ7¸Ó=€EÜ�%œ×ÒØ! UÑ*Ð*Ùr   c                óR   € V ^8„  d   QhR\         R\         R\        \         ,          /# )r	   rh   Úcurrentr   r‡   )r   s   "r   r   r   ½   s*   € ÷ Tñ T¤sð T´Sð T¼XÄc½]ñ Tr   c                óX   € ^ RI Hp V \        8X  d   RMRp\        \	        V4      WR7      # )a  Effort step for an aux task: a level, "none", "" (provider default / inherit parent), or None to
keep current. The empty-value row is "Inherit parent" for delegation (a child inherits the parent's
effort; wording from #105431 by @fangliquanflq) and "Provider default" for aux tasks.©ÚVALID_REASONING_EFFORTSzInherit parentzProvider default)Úcurrent_effortÚdefault_label)Úhermes_constantsr—   rk   Ú"_prompt_reasoning_effort_selectionr>   )rh   r”   r—   Úlabels   &&  r   Ú_prompt_aux_reasoning_effortr�   ½   s2   € õ 9Ø $Ô(<Ô <ÑÐBT€EÜ-ÜÐ$Ó%°gôTð Tr   c                ó$   € V ^8„  d   QhR\         /# r=   ©Úint)r   s   "r   r   r   Ç   s   € ÷ ñ œCñ r   c                 óT  aaa€ ^ RI Hp Hp ^ RIHp VP                  R4      ;'       g    / oR	R V3R llloV ! 4       p\        VR4      o\        VV3R l\        4        4       4      pVP                  R4      p\        V\        4      '       d   VS! VR4      ,          pV! V4       V# )
zXReset every known aux task (built-in + plugin) back to auto/empty. Returns number reset.r‰   r�   rj   r   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r	   rL   rS   rh   r   )r1   r   r   )r   s   "r   r   Ú(_reset_aux_to_auto.<locals>.__annotate__Í   s(   € ÷ ñ ”dð ¤#ð ¬Sð ¼$ñ r   c                 óÌ  <€ R pV P                  R4      RRV09  d   WR&   RpR F»  p\        SP                  V4      \        4      '       d>   \        SP                  V4      ;'       g    / P                  V4      ;'       g    R4      MRpV P                  V4      '       g    V P                  V4      R J g   V'       g   K�  V P                  V4      V8w  g   Kµ  WPV&   RpK½  	  V# )Fr)   Nr   T)r(   rT   r   r\   )r/   r0   r1   r   )rL   rS   rh   ÚchangedÚfieldÚdefaultÚdefaultss   &&&   €r   Ú_clearÚ"_reset_aux_to_auto.<locals>._clearÍ   sÍ   ø€ ð ˆØ�9‰9�ZÓ ¨¨r°4Ð(8Ô8Ø $�*ÑØˆGÛIˆEäJTÐU]×UaÑUaÐbfÓUgÔim×JnÒJn”c˜8Ÿ<™<¨Ó-×3Ð3°×8Ñ8¸Ó?×EÐEÀ2ÔFÐtvˆGØ—	‘	˜%× Ò  E§I¡I¨eÓ$4¸Ó$=ÇÁÈeÏiÉiÐX]ÓN^ÐbiÖNiØ&�e‘Ø’ñ Jð ˆr   c              3   óR   <"  € T F  w  rpS! \        SV4      R V4      x € K  	  R# 5i)rS   N)r   )rr   rh   Ú_nameÚ_descr©   rl   s   &   €€r   rt   Ú%_reset_aux_to_auto.<locals>.<genexpr>ß   s-   øé € ÐqÑ`pÑJ\È$ÐW\‘Ô+¨C°Ó6¸À×EÐEÓ`pùs   ƒ$'r:   ©r   )r.   r'   rŠ   r‘   r�   r/   r   ÚsumrM   r0   r1   )	r'   rŠ   r�   r`   ÚcountÚdeler©   rl   r¨   s	         @@@r   Ú_reset_aux_to_autor³   Ç   s�   ú€ ç:Ý9Ø×!Ñ! +Ó.×4Ð4°"€H÷ò ñ  ‹-€CÜ
˜s KÓ
0€CÜÕqÔ`nÔ`pÓqÓq€EØ�7‰7�<Ó €DÜ�$œ×ÒØ‘˜˜bÓ!Õ!ˆÙ�ÔØ€Lr   c                ó   € V ^8„  d   QhRR/# )r	   r   Nr   )r   s   "r   r   r   ç   s   € ÷ !"ñ !"˜$ñ !"r   c                 óø  € ^ RI Hp   V ! 4       p\        RRRRRRRRR4	       \        4       \        \
        \        3.,           p\        R	 V 4       4      ^,           p\        R
 V 4       4      ^,           pV UUUu. uFM  w  rVpWVP                  V4       RV,           R,           P                  V4       \        \        W4      4       23NKO  	  ppppVP                  R4       VP                  R4       \        V U	U
u. uF  w  ršV
NK	  	  up
p	^ R7      pVf   R# W‹,          ^ ,          pVR8X  d   R# VR8X  d(   \        4       p\        V'       d   RV R2MRR4       EKZ  \        V4       EKh  u upppi u up
p	i )zDTop-level auxiliary-model picker; loops until the user picks "Back".©r'   r   u(     Auxiliary models â€” side-task routingz@  Side tasks (vision, compression, web extraction, etc.) defaultu@     to your main chat model.  "auto" means "use my main model" â€”z>  Hermes only falls back to a lightweight backend (OpenRouter,z<  Nous Portal) if the main model is unavailable.  Override az@  task below if you want it pinned to a specific provider/model.c              3   ó>   "  € T F  w  rp\        V4      x € K  	  R # 5ir~   ©r4   )rr   r�   r€   s   &  r   rt   Ú#_aux_config_menu.<locals>.<genexpr>ô   s   é € Ð>±:¡Z Q¨a”s˜4—y�y³:ùó   ‚c              3   ó>   "  € T F  w   r\        V4      x € K  	  R # 5ir~   r¸   )rr   r�   Údescs   &  r   rt   r¹   õ   s   é € Ð>±:¡Z Q¨”s˜4—y�y³:ùrº   Ú(r-   Ú	__reset__Ú__back__©r§   NzReset z auxiliary task(s) to auto.z-All auxiliary tasks were already set to auto.)r¾   zReset all to auto)r¿   ÚBack)r.   r'   r   rM   rk   rƒ   Ú_DELEGATION_TASK_DESCÚmaxÚljustrY   ry   rJ   Ú_prompt_provider_choicer³   Ú_aux_select_for_task)r'   r`   Ú
menu_tasksÚname_colÚdesc_colÚtask_keyr€   r¼   Úentriesr�   rœ   ÚidxrC   Úns                 r   Ú_aux_config_menurÎ   ç   s{  € å-Ø
Ù‹mˆÜˆRÐ;¸RØOØOØMØKØOÐQSô	Uô $Ó%Ô*>Ô@UÔWlÐ)mÐ(nÕnˆ
ÜÑ>±:Ó>Ó>ÀÕBˆÜÑ>±:Ó>Ó>ÀÕBˆñ )3õ4ñ )3Ñ$� ð Ÿ*™* XÓ.Ð/°°tµ¸cÕ1A×0HÑ0HÈÓ0RÐ/SÜ-Ô.GÈÓ.VÓWÐXðZó [á(2ð 	ò 4ð 	�‰Ð9Ô:Ø�‰Ð+Ô,ä%¹WÔ&E¹W±°£u¹WÒ&EÈqÔQˆØŠ;ÙØ�l˜1�oˆØ�*ÔÙØ�+ÔÜ"Ó$ˆAÜ¿A�6˜!˜Ð7Ñ8ÐCrØôâÜ˜S×!ùô%4ùó 'Fs   Á;AE/Ã>E6
c                ó(   € V ^8„  d   QhR\         RR/# )r	   rh   r   Nr   )r   s   "r   r   r     s   € ÷ *oñ *oœsð *o tñ *or   c                óz  € ^ RI Hp ^ RIHpHp V! 4       p\        W@4      p\        VP                  R4      ;'       g    R4      P                  4       ;'       g    Rp\        VP                  R4      ;'       g    R4      P                  4       p\        VP                  R4      ;'       g    R4      P                  4       p\        V 4      p	 V! WgVR7      p
VR8X  d   V'       g   RMRpV \        8X  d   RMRpRV V 2. 3.pVP                  V! W¦VR7      4       V'       d   RMRpVP                  RRV 2. 34       VP                  RR. 34       \        RRV	 R\!        \#        W@4      4       2R4       \%        V UUu. uF	  w  pppVNK  	  upp^ R7      pVf   R
# VV,          w  pppVR8X  d   R
# VR8X  d"   \'        V RRRRRR7       \        V	 R24       R
# VR8X  d   \)        W4       R
# \+        V VVV\-        V4      R7       R
#   \         d   p\        R	T 24       . p
 R
p?ELXR
p?ii ; iu uppi )z¡Pick a provider + model for one aux task and persist it. Rows come from
``build_aux_picker_rows()`` (shared substrate): only already-configured providers appear.r¶   )Úbuild_aux_picker_rowsÚformat_aux_picker_entriesr)   rS   r(   r   rT   )Úcurrent_providerÚcurrent_modelÚcurrent_base_urlz*Could not detect authenticated providers: Nu     â†� currentzauto (inherit main agent)zauto (recommended)Ú__auto__)rÓ   rÕ   Ú
__custom__zCustom endpoint (direct URL)r¿   rÁ   z  Configure u    â€” current: rÀ   ©r)   r(   rT   r   r\   z: reset to auto.©r˜   )r.   r'   Úhermes_cli.inventoryrÑ   rÒ   rm   r   r/   r2   r…   r   r5   rk   ÚextendrJ   r   rY   ry   rÅ   rŒ   Ú_aux_flow_custom_endpointÚ_aux_flow_provider_modelrV   )rh   r'   rÑ   rÒ   r`   rP   rÓ   rÔ   rÕ   rD   r   ÚexcÚauto_markerÚ
auto_labelrË   Úcustom_markerr�   rœ   rÌ   ÚslugÚ_labelÚmodelss   &                     r   rÆ   rÆ     s,  € õ .ßUÙ
‹-€CÜ˜SÓ'€HÜ˜8Ÿ<™<¨
Ó3×=Ð=°vÓ>×DÑDÓF×PÐPÈ&ÐÜ˜Ÿ™ WÓ-×3Ð3°Ó4×:Ñ:Ó<€MÜ˜8Ÿ<™<¨
Ó3×9Ð9°rÓ:×@Ñ@ÓBÐÜ)¨$Ó/€LðÙ)Ð;KØ;KôMˆ	ð &6¸Ô%?×HX‘/Ð^`€KØ04Ô8LÔ0LÑ,ÐRf€JØ2<ÀÀÈ[ÈMÐ>ZÐ\^Ð1_Ð0`€GØ‡N�NÑ,¨YØ>NôPô Qç'7‘O¸R€MØ‡N�N�LÐ$@ÀÀÐ"PÐRTÐUÔVØ‡N�N�J ¨Ð+Ô,äˆˆ|˜L˜>¨Ô8KÔLeÐfiÓLpÓ8qÐ7rÐsÐuwÔxÜ
!¹GÔ"D¹G©[¨Q°°q£5¹GÒ"DÈaÔ
P€CØ
‚{ÙØ" 3�<Ñ€Dˆ&�&ØˆzÔÙØˆzÔÜ˜¨°bÀ2ÈrÐdfÕgÜ��Ð.Ð/Ö0Ø	�Ô	Ü! $Ö1ä   t¨V°]ÔScÐdlÓSm×nøô7 ô ÜÐ:¸3¸%Ð@ÔAØŽ	ûðüó #Es   Ã
H ÆH7
ÈH4ÈH/È/H4c                óX   € V ^8„  d   QhR\         R\         R\        R\         R\         RR/# )r	   rh   Úprovider_slugÚcurated_modelsrÔ   r˜   r   N)r   r>   )r   s   "r   r   r   8  sA   € ÷ "Xñ "X¤3ð "X´sð "XÌDð "XÜ,/ð"XÜFIð"XØSWñ"Xr   c           	     ó  € ^ RI Hp ^ RIHp \	        V 4      p V! V4      ;'       g    / p\        V4      p	V	'       g%   \        RV R2R4       \        RRR7      p
V
f   R	# MV! W“VVR
7      p
V
f   \        R4       R	# \        V 4      '       d   \        W4      MR	p\        YT
;'       g    RRRVR7       V'       d   RV 2MRpV
'       d   \        V RV RV
 V 24       R	# \        V RV RV 24       R	#   \
         d    / p LÝi ; i)zdPrompt for a model under an already-authenticated provider (then its reasoning effort),
save to aux.)Ú_prompt_model_selection)Úget_pricing_for_providerzNo curated model list for Ú.z;Enter a model slug manually (blank = use provider default):zModel: r   ©Ú
cancel_msgN)rÔ   ÚpricingÚconfirm_providerú
No change.rØ   õ    Â· reasoning z: rU   z (provider default model))Úhermes_cli.authré   Úhermes_cli.models_pricingrê   r…   r   r>   r   r   r5   r‹   r�   rŒ   )rh   ræ   rç   rÔ   r˜   ré   rê   rD   rî   Ú
model_listÚselectedrW   Úeffort_notes   &&&&&        r   rÝ   rÝ   8  s%  € õ 8ÝBÜ)¨$Ó/€LðÙ*¨=Ó9×?Ð?¸Rˆô �nÓ%€J÷ ÜÐ)¨-¨¸Ð:Ð<yÔzÜ˜	¨bÔ1ˆØÒÙð ñ +¨:Ð\cØ<IôKˆàÒÜ�,ÔÙäC\Ð]a×CbÒCbÔ)¨$Ô?Ðhl€FÜ�T¸¿¸ÀRÐRTÐ^`Ø&,õ.ç/5�N 6 (Ñ+¸2€KßÜ��˜b  ¨t°H°:¸k¸]ÐKÖLä��˜b  Ð/HÈÈÐVÖWøô3 ô ØŠðús   ™C9 ¨C9 Ã9D	ÄD	c                ó4   € V ^8„  d   QhR\         R\        RR/# )r	   rh   rP   r   N)r   r1   )r   s   "r   r   r   ]  s!   € ÷ ;ñ ;¤Cð ;´4ð ;¸Dñ ;r   c           	     óþ  € \        V 4      p\        VP                  R4      ;'       g    R4      P                  4       p\        VP                  R4      ;'       g    R4      P                  4       p\	        RRV 2RR4       \        V'       d   RV R2MRRR	7      pVf   R
# T;'       g    TpV'       g   \        R4       R
# \        V'       d   RV R2MRRR	7      pVf   R
# T;'       g    Tp\        RRRR7      pVf   R
# \        V 4      '       d   \        V \        V4      4      MR
p\        V RWeWxR7       \        V R\        V4       R2V'       d   RV 2MR,           V'       d   RV 2MR,           4       R
# )zHPrompt for a direct OpenAI-compatible base_url + optional api_key/model.rT   r   r(   z  Custom endpoint for zH  Provide an OpenAI-compatible base URL (e.g. http://localhost:11434/v1)z
Base URL [ú]: z
Base URL: rì   NzNo URL provided. No change.zModel slug (optional) [zModel slug (optional): z0API key (optional, blank = use OPENAI_API_KEY): T©Úsecretrí   r*   rØ   z
: custom (r-   rU   rñ   )r…   r   r/   r2   r   r   r5   r‹   r�   rV   rŒ   r#   )	rh   rP   rD   rÕ   rÔ   r   r(   r   rW   s	   &&       r   rÜ   rÜ   ]  sr  € ä)¨$Ó/€LÜ˜8Ÿ<™<¨
Ó3×9Ð9°rÓ:×@Ñ@ÓBÐÜ˜Ÿ™ WÓ-×3Ð3°Ó4×:Ñ:Ó<€MäˆÐ% l ^Ð4Ø	SÐUWôYä
×5E�Ð,Ð-¨SÑ1È<ÐdfÔ
g€CØ
‚{ÙØ
×
!Ð
!Ð!€CßÜÐ+Ô,ÙÜÇÐ*¨=¨/¸Ñ=ÐTmØô €Eà‚}ÙØ×"Ð"�]€EÜÐEÈdÐ_aÔb€GØ‚Ùä*¨4×0Ò0ô +¨4Ô1AÀ(Ó1KÔLØ6:ð ô �T H°EÐQXÕrÜ	ˆ\ˆN˜*¤Z°£_Ð$5°QÐ
7ÏU¸TÀ%À¹>ÐXZÕ
[ß*0ˆ~˜f˜XÑ&°bõ:ö ;r   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r	   Úpromptr±   Úecho_cancel)r   r    r   )r   s   "r   r   r     s!   € ÷ ñ ”sð ¤3ð ¼ñ r   c               óD  €   \        V 4      P                  4       pV'       g   R# \        V4      ^,
          p^ Tu;8:  d
   V8  d    V#  \        RV 24       KZ    \         d    \        R4        Ks  \
        \        3 d    T'       d   \        4        \        u # i ; i)z—Numbered-menu input loop: 0-based index in ``range(count)``, ``None`` on blank,
``_CANCELLED`` on Ctrl-C/EOF (*echo_cancel* prints a blank line first).NzPlease enter 1-zPlease enter a number)Úinputr2   r    r5   Ú
ValueErrorÚKeyboardInterruptÚEOFErrorÚ
_CANCELLED)rý   r±   rþ   ÚvalrÌ   s   &&$  r   Ú
_ask_indexr    sŠ   € ð ð	Ü˜“-×%Ñ%Ó'ˆCßÙÜ�c“(˜Q•,ˆCØ�CÖ˜%ÕØ�
ð  ä�O E 7Ð+Ö,øÜô 	+ÜÐ)×*Ü!¤8Ð,ô 	ßÜ”ÜÒð	ús.   ƒ!A ¦#A Á
A ÁBÁ4BÂBÂBÂBr§   ÚtitlezSelect provider:c               óˆ  € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! W V4      pV^ 8¼  d   \        4        VuuRRR4       #  RRR4       \        W V4       \        4        \        R\        V 4       RV^,            R2\        V 4      RR7      pVf   V# V\        J d   R# T#   + '       g   i     Lh; i)z¨Provider menu with curses arrow keys; numbered-list fallback when curses is unavailable
(piped stdin, non-TTY). Returns the selected index, or None if the user cancels.)Ú_curses_prompt_choiceNú
Choice [1-z] (ú): T©rþ   )
rG   rH   r   Úhermes_cli.setupr	  r5   r   r  r4   r  )Úchoicesr§   r  r	  rÌ   s   &$$  r   rÅ   rÅ   “  s¥   € ô 
×	Ò	œY×	'Õ	'Ý:Ù# E°GÓ<ˆØ�!Œ8ÜŒGØ÷ 
(Ò	'ð ÷ 
(ô �E GÔ,Ü	„GÜ
�z¤# g£, ¨s°7¸Qµ;°-¸sÐCÄSÈÃ\Ð_cÔ
d€CØ
‚{ØˆØœ*Ó$ˆ4Ð-¨#Ð-÷ 
(×	'ús   £"B1Â1C	zqwen3-coder-pluszqwen3-coderc                óR   € V ^8„  d   QhR\         R\         R\        \         ,          /# )r	   rT   Úcurrent_api_moder   r‡   )r   s   "r   r   r   µ  s(   € ÷ ñ ´ð Äsð ÔT\Ô]`ÕTañ r   c                óä  € ^ RI Hp V! V 4      p\        T;'       g    R4      P                  4       P	                  4       ;'       g    T;'       g    Rp\        RR4       \        \        ^4       Fh  w  pw  rgr‰RWc8H  3RWd8H  33 U
Uu. uF  w  r«V'       g   K  V
NK  	  pp
pV'       d   RRP                  V4       R2MRp\        R	V R
V V 2RV 24       Kj  	   \        R4      P                  4       P	                  4       pT'       g   T;'       g    R# T\        9   d   \        T,          ;'       g    R# \        RT R24       R# u upp
i   \        \        3 d    \        R4       h i ; i)zXPrompt for a custom provider API mode: an explicit mode string, or None for auto-detect.)Ú_detect_api_mode_for_urlr   zSelect API compatibility mode:Údetectedr”   z [z / Ú]ú  ú. z     z.Choice [1-4, Enter to keep current/detected]: z
Cancelled.NzInvalid API mode choice: z. Falling back to auto-detect.)Úhermes_cli.runtime_providerr  r   r2   r3   r   Ú	enumerateÚ_CUSTOM_API_MODESÚjoinr   r  r  r5   Ú_CUSTOM_API_MODE_ANSWERS)rT   r  r  Údetected_modeÚdefault_moderÌ   Úvaluerœ   rE   Ú_answersÚmÚhitÚmarkersrX   r^   s   &&             r   Ú!_prompt_custom_api_mode_selectionr#  µ  sm  € åDÙ,¨XÓ6€MÜÐ'×-Ð-¨2Ó.×4Ñ4Ó6×<Ñ<Ó>×UÐUÀ-×UÐUÐSU€LäˆÐ-Ô.Ü6?Ô@QÐSTÖ6UÑ2ˆÑ2ˆe˜KØ%/°Ñ1GÐ$HÈ9ÐV[ÑVkÐJlÑ#mÔuÑ#m™˜Ôqt—1�1Ñ#mˆÑuß07�2�e—j‘j Ó)Ð*¨!Ñ,¸RˆÜˆr�#��b˜˜ ˜xÐ(¨E°+°Ð*?Ö@ñ 7Vð
ÜÐDÓE×KÑKÓM×SÑSÓUˆ÷
 Ø×#Ð#˜tÐ#Ø
Ô&Ô&Ü'¨Õ,×4Ð4°Ð4Ü	Ð% c UÐ*HÐ
IÔJÙùó vøô œxÐ(ô ÜˆnÔØðús   ÂEÂEÃ'E ÅE/c                ó0   € V ^8„  d   QhR\         R\         /# ©r	   rT   r   r   )r   s   "r   r   r   Ï  s   € ÷ 	ñ 	¤#ð 	¬#ñ 	r   c                óì   € ^ RI pVP                  RR\        V 4      4      P                  R4      ^ ,          pRV9   g   RV9   d   RV R2# R	VP	                  4       9   d   R
V R2# VP                  4       # )u™   Display name from a custom endpoint URL, e.g. "Local (localhost:11434)" or
"RunPod (xyz.runpod.io)" â€” the default offered during custom endpoint setup.Nz/v1/?$r   r    Ú	localhostz	127.0.0.1zLocal (r-   ÚrunpodzRunPod ()ÚreÚsubr#   Úsplitr3   Ú
capitalize)rT   r)  r€   s   &  r   Ú_auto_provider_namer-  Ï  sv   € ó Ø�6‰6�)˜R¤¨HÓ!5Ó6×<Ñ<¸SÓAÀ!ÕD€DØ�dÔ˜k¨TÔ1Ø˜˜˜aÐ Ð Ø�4—:‘:“<ÔØ˜$˜˜qÐ!Ð!Ø�?‰?ÓÐr   c                ó¶  € \        V P                  RR4      ;'       g    R4      P                  4       pV'       d   V# \        V P                  RR4      ;'       g    R4      P                  4       pV'       d@   \        V P                  RR4      ;'       g    R4      P                  4       '       g   RV R2# \        T;'       g    R4      P                  4       # )zDReturn the value that should be persisted for a custom provider key.Úapi_key_refr   Úkey_envr   ú${Ú}©r   r/   r2   )Úprovider_infoÚresolved_api_keyr/  r0  s   &&  r   Ú%_custom_provider_api_key_config_valuer6  Û  s²   € ä�m×'Ñ'¨°rÓ:×@Ð@¸bÓA×GÑGÓI€KßØÐÜ�-×#Ñ# I¨rÓ2×8Ð8°bÓ9×?Ñ?ÓA€Gß”s˜=×,Ñ,¨Y¸Ó;×AÐA¸rÓB×HÑH×JÒJØ�W�I˜RÐ Ð ÜÐ×%Ð% 2Ó&×,Ñ,Ó.Ð.r   c                ó¾   € \        V P                  RR4      ;'       g    R4      P                  4       ;'       g$    \        T;'       g    R4      P                  4       # )zDReturn the value that should be persisted for a custom provider URL.Úbase_url_refr   r3  )r4  Úresolved_base_urls   &&r   Ú&_custom_provider_base_url_config_valuer:  æ  sK   € äˆ}× Ñ  °Ó4×:Ð:¸Ó;×AÑAÓC×kÐkÄsÐK\×KbÐKbÐ`bÓGc×GiÑGiÓGkÐkr   c                ó0  € ^ RI HpHp V! 4       p	V	P                  R4      ;'       g    . p
\	        V
\
        4      '       g   . p
V
 EF;  p\	        V\        4      '       d6   VP                  RR4      P                  R4      V P                  R4      8X  g   KQ  RpV'       d   VP                  R4      V8w  d   W+R&   RpV'       d   V'       d   R	V/\        VR
4      V&   RpV'       d   VP                  R4      V8w  d   W[R&   RpMRV9   d   VP                  RR4       RpV'       dF   VP                  R4      V8w  g   VP                  R4      '       d   WkR&   VP                  RR4       RpV'       d   W©R&   V! V	4        R# 	  T;'       g    \        V 4      pRVRV /pV'       d   WkR&   MV'       d   WR&   V'       d   W+R&   V'       d   W[R&   V'       d   V'       d
   VR	V//VR
&   V
P                  V4       W©R&   V! V	4       \        RV R24       R# )a#  Save a custom endpoint to ``custom_providers`` in config.yaml, deduplicated by base_url (an
existing entry gets model / context_length / api_mode updated). *key_env* set means the caller
already wrote the key to ``.env``; the entry references it instead of inlining the secret.

See #69449.
r‰   Úcustom_providersrT   r   r    Fr(   TÚcontext_lengthrä   Úapi_modeNr0  r   r€   u%     ðŸ’¾ Saved to custom providers as "z" (edit in config.yaml))r.   r'   rŠ   r/   r0   r>   r1   r"   r   Úpopr-  rJ   r5   )rT   r   r(   r=  r€   r>  r0  r'   rŠ   r`   r   rL   r¥   s   &&&&&&&      r   Ú_save_custom_providerr@  ë  sé  € ÷ ;Ù
‹-€CØ—‘Ð*Ó+×1Ð1¨r€IÜ�i¤×&Ò&Øˆ	ÜˆÜ˜5¤$×'Ò'¨E¯I©I°jÀ"Ó,E×,LÑ,LÈSÓ,QÐU]×UdÑUdÐehÓUiÔ,iÙØˆß�U—Y‘Y˜wÓ'¨5Ô0Ø"�'‰NØˆGß—^Ø<LÈnÐ;]Ô  ¨Ó1°%Ñ8ØˆGßØ�y‰y˜Ó$¨Ô0Ø$,�jÑ!Ø�øØ˜5Ô Ø�I‰I�j $Ô'ØˆGß˜Ÿ	™	 )Ó,°Ô7¸5¿9¹9ÀY×;OÒ;OØ&�)ÑØ�I‰I�i Ô&ØˆGßØ&/Ð"Ñ#Ù˜ÔÚñ1 ð4 ×0Ð0Ô& xÓ0€DØ�T˜: xÐ0€EßØ"ˆiÒß	Ø"ˆiÑßØˆg‰ßØ$ˆjÑß—Ø Ð#3°^Ð"DÐEˆˆh‰à×Ñ�UÔØ'ÐÑÙ�ÔÜ	Ð1°$°Ð7NÐ
OÖPr   c                ó0  € ^ RI HpHp V! 4       pVP                  R4      ;'       g    . p\	        V\
        4      '       d	   V'       g   \        R4       R# \        R4       V Uu. uFU  p\	        V\        4      '       d2   VP                  RR4       R\        VP                  R	R
4      4       R2M
\        V4      NKW  	  ppVP                  R4       \        R\        V4      4      pVe   \        4        V^ 8  d   RpMs\        V^4       F  w  r‰\        RV RV	 24       K  	  \        4         \        R\        V4       R24      P                  4       p
V
'       d   \!        V
4      ^,
          MRpVe   V\        V4      8¼  d   \        R4       R# VP)                  V4      pWCR&   V! V4       \	        V\        4      '       d   VP                  RR4      M
\        V4      p\        RV R24       R# u upi   \"        \$        \&        3 d    Rp L¡i ; i)z=Let the user remove a saved custom provider from config.yaml.r‰   r<  zNo custom providers configured.NzRemove a custom provider:
r€   Úunnamedú (rT   r   r-   ÚCancelzSelect provider to remove:r  r  r
  rù   rð   u   âœ… Removed "z" from custom providers.)r.   r'   rŠ   r/   r0   r>   r5   r1   r#   r   rJ   r   r  r   r4   r2   r    r  r  r  r?  )Úconfigr'   rŠ   r`   r   rL   r  rÌ   ÚiÚcr  ÚremovedÚremoved_names   &            r   Ú_remove_custom_providerrJ  %  sÞ  € ç:Ù
‹-€CØ—‘Ð*Ó+×1Ð1¨r€IÜ�i¤×&Ò&¯iÜÐ/Ô0Ùä	Ð
'Ô(ñ ó áˆEô XbÐbgÔim×WnÒWnˆ5�9‰9�V˜YÓ'Ð
(¨¬:°e·i±iÀ
ÈBÓ6OÓ+PÐ*QÐQRÑSÔtwÐx}Ót~Ò~Ùð ð  ð ‡N�N�8Ôä
Ð1´4¸³=Ó
A€CØ
‚ÜŒØ�Œ7ØˆCøä˜g qÖ)‰DˆAÜ�B�q�c˜˜A˜3�-Ö ñ *äŒð	Ü˜*¤S¨£\ N°#Ð6Ó7×=Ñ=Ó?ˆCß"%”#�c“(˜Q–,¨4ˆCð ‚{�cœS ›^Ô+ÜˆlÔÙà�m‰m˜CÓ €GØ'ÐÑÙ�ÔÜ5?ÀÌ×5NÒ5N�7—;‘;˜v yÔ1ÔTWÐX_ÓT`€LÜ	ˆM˜,˜Ð'?Ð
@ÖAùò9 øô" Ô-¬xÐ8ô 	ØŠCð	ús   Á%AG5Ä1AG: Ç:HÈHr™   c               óÀ  aa€ \        \        P                  R V  4       4      4      pRoS Uu. uF  qDV9   g   K  VNK  	  ppVP                  V3R lV 4       4       V'       g   R# V3R lpRpRpRV3.p	V'       d$   T	P	                  R	TSR	8X  d   R
MR	,           34       V	P	                  RV34       V	 U
Uu. uF  w  r«V
NK	  	  pp
pSR8X  d#   \        V4      VP                  R4      ,           pMeSV9   d   VP                  S4      pMLV'       d*   SR	8X  d#   \        V4      VP                  R	4      ,           pMRV9   d   VP                  R4      pM^ p\        V4      pV Uu. uF
  qF! V4      NK  	  upV	 UUu. uF  w  r¿VNK	  	  upp,           p\        RVV4      pVe   V^ 8  d   R# \        4        Mp\        R4       \        V^4       F  w  pp\        RV RV 24       K  	  \        4        \        R\        V4       R2\        V4      RR7      pVe   V\        J d   R# VV8  d
   VV,          # VVV,
          ,          # u upi u upp
i u upi u uppi )z”Prompt for a reasoning effort. Returns a level, 'none', "" (only with *default_label*: the
"use the provider default" row), or None to keep current.c              3   ó²   "  € T FM  p\        V4      P                  4       '       g   K$  \        V4      P                  4       P                  4       x € KO  	  R # 5ir~   )r   r2   r3   )rr   rW   s   & r   rt   Ú5_prompt_reasoning_effort_selection.<locals>.<genexpr>Q  s>   é € Ð jÉ7ÀÔVYÐZ`ÓVa×VgÑVg×ViÔ!<¤ V£×!2Ñ!2Ó!4×!:Ñ!:×!<Ð!<Ë7ùs
   ‚!A¨/AÚmediumc              3   ó8   <"  € T F  qS9  g   K  Vx € K  	  R # 5ir~   r   )rr   rW   Úcanonical_orders   & €r   rt   rM  T  s   øé € ÐQ©˜fÀÑ3P—6’6«ùs   ƒ�
Nc                 ó    <€ V S8X  d   V  R 2# T # )õ     â†� currently in user   )rW   r˜   s   &€r   rã   Ú2_prompt_reasoning_effort_selection.<locals>._labelX  s   ø€ Ø4:¸nÔ4L�&�Ð/Ð0ÐXÐRXÐXr   zDisable reasoningzSkip (keep current)r]   r   rR  zSelect reasoning effort:r  r  r
  z] (default: keep current): Fr  )ÚminimalÚlowrN  ÚhighÚxhighrÃ   Úultra)r>   r1   ÚfromkeysrÛ   rJ   r4   Úindexr   r5   r  r  r  )Úeffortsr˜   r™   ÚdedupedrW   Úorderedrã   Údisable_labelÚ
skip_labelÚtailÚvr�   Útail_valuesÚdefault_idxrÍ   rœ   ÚrowsrÌ   rF  ÚrowrP  s   &f$                 @r   r›   r›   N  s,  ù€ ô ”4—=‘=Ñ jÉ7Ó jÓjÓk€GØS€OÙ$3ÓI¡O˜&ÀÑ7H�vˆv¡O€GÐIØ‡N�NÔQ©ÓQÔQßÙõYð (€MØ&€Jà.4°mÐ-DÐ,E€DßØ�‰�R˜ÀnÐXZÔFZÑ*BÐ`bÕcÐdÔeØ‡K�K��zÐ"Ô#Ù!%Ô&¡™˜“1¡€KÑ&Ø˜ÔÜ˜'“l [×%6Ñ%6°vÓ%>Õ>‰Ø	˜7Ô	"Ø—m‘m NÓ3‰ß	˜>¨RÔ/Ü˜'“l [×%6Ñ%6°rÓ%:Õ:‰Ø	�WÔ	Ø—m‘m HÓ-‰àˆäˆG‹€AÙ)0Ó1©˜vˆF�6ŽN©Ñ1É4Ô4PÉ4¹x¸q³UÉ4Ò4PÕP€DÜ
Ð/°°{Ó
C€CØ
‚Ø�Œ7ÙÜ�äÐ(Ô)Ü  aÖ(‰FˆAˆsÜ�B�q�c˜˜C˜5�/Ö"ñ )äŒÜ˜:¤c¨$£i [Ð0KÐLÌcÐRVËiÐejÔkˆØŠ;˜#¤Ó+ÙØ
ˆQ„wØ�s�|ÐØ�s˜Q•wÕÐùòY Jùó 'ùò 2ùÓ4Ps   ®I
»I
Â:IÅ'IÅ>Ic                ó$   € V ^8„  d   QhR\         /# r=   rŸ   )r   s   "r   r   r   ‚  s   € ÷ %ñ %¤#ñ %r   c                 ó   € ^ RI Hp  V ! 4       # )zOSnapshot taken by ``select_provider_and_model`` before a flow runs (see below).©Úmodel_choice_save_count)Úhermes_cli.auth_model_pickerri  rh  s    r   Ú_model_choice_save_countrk  ‚  s   € åDÙ"Ó$Ð$r   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r	   Úmodel_beforeÚsaves_beforer   N)r   r    )r   s   "r   r   r   ˆ  s&   € ÷ Oñ O¬cð OÄð OÈñ Or   c                ól  € ^ RI Hp V! 4       P                  R4      p\        V\        4      '       g   R# \        VP                  R4      ;'       g    R4      P                  4       pV'       d   W@8X  d   \        4       V8X  d   R# \        T\        VP                  R4      ;'       g    R4      4       R# )a{  Post-flow effort step for ``select_provider_and_model``, like the chat ``/model`` picker:
every flow persists through ``_save_model_choice``, so whenever one saved a pick (or
``model.default`` changed) offer the effort for the saved model + provider, including a
provider switch that keeps the same model ID or a re-pick of the current model. Cancel /
"No change." never prompts.r¶   r(   Nr§   r   r)   )	r.   r'   r/   r0   r1   r   r2   rk  Ú_prompt_main_reasoning_effort)rm  rn  r'   r6   r(   s   &&   r   Ú_offer_reasoning_after_pickrq  ˆ  sƒ   € õ .Ù“×!Ñ! 'Ó*€IÜ�i¤×&Ò&ÙÜ�	—‘˜iÓ(×.Ð.¨BÓ/×5Ñ5Ó7€Eß�UÔ*Ô/GÓ/IÈ\Ô/YÙÜ! %¬¨Y¯]©]¸:Ó-F×-LÐ-LÈ"Ó)MÖNr   c                ó4   € V ^8„  d   QhR\         R\         RR/# )r	   r(   r)   r   Nr   )r   s   "r   r   r   ˜  s&   € ÷ rñ r¬ð r¼ð rÀñ rr   c                óê   € ^ RI HpHp ^ RIHpHp \        W4      pVf   R# \        Wd! V! 4       4      R7      pVf   R# V! 4       pV! W‡4       V! V4       \        VR8X  d	   R4       R# RV 24       R# )aJ  The effort step every ``hermes model`` flow shares: after a main-model pick, offer the
model's supported levels (Copilot publishes a per-model set; everything else gets the full
ladder) and persist ``agent.reasoning_effort``. Skipped when the catalog says the route has
no reasoning control; "Skip" leaves the current value alone.r‰   )Ú_current_reasoning_effortÚ_set_reasoning_effortNrÙ   r]   z"Reasoning disabled for this model.zReasoning effort set to: )	r.   r'   rŠ   r  rt  ru  Ú_main_model_reasoning_effortsr›   r5   )	r(   r)   r'   rŠ   rt  ru  r[  rõ   r`   s	   &&       r   rp  rp  ˜  sq   € ÷
 ;ßQÜ+¨EÓ<€GØ‚ÙÜ1°'ÐJcÑdoÓdqÓJrÔs€HØÒÙÙ
‹-€CÙ˜#Ô(Ù�ÔÜ	°(¸fÔ2DÐ
.ÖqÐLeÐfnÐeoÐJpÖqr   c                óh   € V ^8„  d   QhR\         R\         R\        \        \         ,          ,          /# )r	   r(   r)   r   )r   r   r>   )r   s   "r   r   r   «  s*   € ÷ )ñ )¬ð )¼ð )ÄÌÌcÍÕ@Sñ )r   c                ó"  € ^ RI Hp T;'       g    RP                  4       P                  4       pVR8X  d   ^ RIHp V! V 4      ;'       g    R#  ^ RIHp V! W04      pVe   VP                  RJ d   R# \        V4      #   \         d    Rp L0i ; i)zXLevels to offer for *model* on *provider*: None when the route has no reasoning control.r–   r   Úcopilot)Úgithub_model_reasoning_effortsN)Úget_model_capabilitiesF)rš   r—   r2   r3   Úhermes_cli.modelsrz  Úagent.models_devr{  r   Úsupports_reasoningr>   )r(   r)   r—   râ   rz  r{  Úmetas   &&     r   rv  rv  «  sŒ   € å8Ø�NˆN˜×!Ñ!Ó#×)Ñ)Ó+€DØˆyÔÝDÙ-¨eÓ4×<Ð<¸Ð<ðÝ;Ù% dÓ2ˆð Ò˜D×3Ñ3°uÓ<ÙÜÐ'Ó(Ð(øô	 ô ØŠðús   ÁA> Á>BÂBc                óH   € V ^8„  d   QhR\         R\         R\         R\        /# )r	   Úexisting_keyr
   Úexisting_sourcer   )r   r?   )r   s   "r   r   r   ¼  s*   € ÷ ;ñ ;¬3ð ;¼Sð ;ÔX[ð ;Ôejñ ;r   c                ó¦  aaa€ ^ RI Ho ^ RIHp V P                  '       d   V P                  ^ ,          MRoR VVV3R llpV'       g[   \        RV P                   R24       S'       g   R# V! RR	7      pV'       g   \        R
4       R# V! SV4       \        RR4       VR3# ^ RIH	p S'       d	   V! S4      MRp\        RV P                   RVR,           RV 24       S'       g   \        4        VR3# VP                  R4      p	V	'       d   RMRp
\        V
RRRR7      P                  4       pVP                  R4      '       d;   V! RR	7      pV'       g   \        RR4       VR3# V! SV4       \        RR4       VR3# VP                  R4      '       d-   V	'       g%   V! SR4       \        RV P                   R24       R# \        4        VR3# )a  API-key entry for ``hermes setup`` / ``hermes model``: first-time entry, or [K]eep / [R]eplace /
[C]lear when a key exists (a malformed paste is recoverable without editing ``.env``).
Returns ``(resolved_key, abort)``; ``abort=True`` means the caller must ``return`` at once.)ÚLMSTUDIO_NOAUTH_PLACEHOLDER)r&   r   c                ó0   € V ^8„  d   QhR\         R\        /# )r	   Úallow_lmstudio_defaultr   )r   r   )r   s   "r   r   Ú%_prompt_api_key.<locals>.__annotate__Ä  s   € ÷ ñ ´4ð ¼Cñ r   c                 ó    <€ SR 8H  ;'       d    T pV'       d   S RS: R2pMS R2p\        VRRR7      pVf   R# V'       g   V'       d   S# V# )Úlmstudioz (Enter for no-auth default r  z (or Enter to cancel): Tr   rú   )r   )r†  Úlmstudio_defaultrý   Úenteredr„  r0  r
   s   $   €€€r   Ú_prompt_new_keyÚ(_prompt_api_key.<locals>._prompt_new_keyÄ  sd   ø€ Ø&¨*Ñ4×OÐOÐ9OÐßØ�yÐ <Ð=XÑ<[Ð[^Ð_‰Fà�yÐ 7Ð8ˆFÜ�v d°rÔ:ˆØŠ?Ùß×+Ø.Ð.Øˆr   zNo z API key configured.T)r†  z
Cancelled.zAPI key saved.F)Úformat_secret_source_suffixr  z
 API key: :Né   Nu   ... âœ“zcredential_pool:z"  [K]eep / [R]eplace (default K): z,  [K]eep / [R]eplace / [C]lear (default K): rc   )r^   rí   Ú	on_cancelÚrz  No change.z  API key updated.rG  z7  API key cleared.  Re-run `hermes setup` to configure z again.)r   T)rò   r„  r.   r&   Úapi_key_env_varsr5   r€   r   Úhermes_cli.env_loaderrŽ  Ú
startswithr   r3   )Úpconfigr�  r
   r‚  r&   rŒ  Únew_keyrŽ  Úsource_suffixÚpool_backedÚmenuÚchoicer„  r0  s   &&f&        @@r   Ú_prompt_api_keyr›  ¼  s«  ú€ õ <Ý0Ø-4×-E×-EÐ-Eˆg×&Ñ& qÖ)È2€G÷ò ÷ Ü��G—L‘L�>Ð!5Ð6Ô7ßØˆOÙ!¸Ô>ˆßÜ�,ÔØˆOÙ�w Ô(ÜÐ˜rÔ"Ø˜ˆ~Ðõ Bß<CÑ/°Ô8È€MÜ	ˆBˆw�|‰|ˆn˜J |°BÕ'7Ð&8¸À¸Ð
OÔPßäŒØ˜UÐ"Ð"Ø!×,Ñ,Ð-?Ó@€Kß3>Ñ/ÐDr€DÜ�$˜D¨R¸3Ô?×EÑEÓG€Fà×Ñ˜×ÒÙ!¸Ô?ˆßÜ� Ô$Ø Ð&Ð&Ù�w Ô(ÜÐ! 2Ô&Ø˜ˆ~ÐØ×Ñ˜×Ò§kÙ�w Ô#ÜÐGÈÏÉÀ~ÐU\Ð]Ô^Øˆä	„GØ˜ÐÐr   c                ó0   € V ^8„  d   QhR\         R\         /# r%  r   )r   s   "r   r   r   ú  s   € ÷ añ a¤Cð a¬Cñ ar   c                ód   € RT ;'       g    RP                  4       P                  4       9   d   R# R# )z>Infer the current StepFun region from the configured endpoint.zapi.stepfun.comr   ÚchinaÚinternational)r2   r3   )rT   s   &r   Ú_infer_stepfun_regionr   ú  s-   € à'¨H¯N¨N¸×+AÑ+AÓ+C×+IÑ+IÓ+KÔKˆ7Ð`ÐQ`Ð`r   c                ó0   € V ^8„  d   QhR\         R\         /# )r	   Úregionr   r   )r   s   "r   r   r   ÿ  s   € ÷ cñ c¬ð c´ñ cr   c                 ó(   € ^ RI HpHp V R8X  d   V# T# )é    )ÚSTEPFUN_STEP_PLAN_CN_BASE_URLÚSTEPFUN_STEP_PLAN_INTL_BASE_URLrž  )rò   r¥  r¦  )r¢  r¥  r¦  s   &  r   Ú_stepfun_base_url_for_regionr§  ÿ  s   € ß^Ø,2°gÔ,=Ð(ÐbÐCbÐbr   c                óâ  a aaaa	€ ^ RI HpHoHo ^ RIHoHo	 R VVV V	3R llpR VV 3R llp \        RRR	R4       V! 4       pV'       d'   V! 4       '       d   R
# S! VS R7       \        R4       R
# \        RRR4       V! R4      pVf   R# V'       d   R
# \        R4       R#   \         d@    \        RRRRRRRRRRRR4       T! R4      pTf    R# T'       d    R
# \        R4        R# i ; i)zNRun the Claude OAuth setup-token flow. Returns True if credentials were saved.)Úrun_oauth_setup_tokenÚread_claude_code_credentialsÚis_claude_code_token_valid)Úsave_anthropic_oauth_tokenÚ%use_anthropic_claude_code_credentialsc                ó$   € V ^8„  d   QhR\         /# r=   )r   )r   s   "r   r   Ú/_run_anthropic_oauth_flow.<locals>.__annotate__	  s   € ÷ ñ ¼Dñ r   c                  ó
  <€  S! 4       p V '       d_   S! V 4      '       g!   \        V P                  R4      4      '       d1   S! SR7       \        R4       ^ RIHp \        RV! 4        R24       R# R#   \          d    R p  Lwi ; i)	NÚrefreshToken©Úsave_fnu%     âœ“ Claude Code credentials linked.)Údisplay_hermes_homez]    Hermes will use Claude's credential store directly instead of copying a setup-token into z/.env.TF)r   r   r/   r5   rš   r´  )ÚcredsÚ_dhh_fnr«  rª  r&   r­  s     €€€€r   Ú._activate_claude_code_credentials_if_availableÚQ_run_anthropic_oauth_flow.<locals>._activate_claude_code_credentials_if_available	  s…   ø€ ð	Ù0Ó2ˆE÷ Ñ0°×7Ò7¼4ÀÇ	Á	È.Ó@Y×;ZÒ;ZÙ1¸.ÕIÜÐ9Ô:ÝGÜÐqÑryÓr{Ðq|ð  }Cð  Dô  EÙÙøô ô 	ØŠEð	ús   ƒA2 Á2BÂBc                ó$   € V ^8„  d   QhR\         /# )r	   rý   r   )r   s   "r   r   r¯    s   € ÷ ñ œSñ r   c                ób   <€ \        V RRR7      pV'       g   V# S! VSR7       \        R4       R# )zBManual setup-token entry: True saved, False empty, None cancelled.Tr   rú   r²  u     âœ“ Setup-token saved.)r   r5   )rý   Útokenr¬  r&   s   & €€r   Ú_paste_tokenÚ/_run_anthropic_oauth_flow.<locals>._paste_token  s/   ø€ ä�V D°RÔ8ˆßØˆLÙ" 5°.ÕAÜÐ(Ô)Ùr   r   u<     Running 'claude setup-token' â€” follow the prompts below.z9  A browser window will open for you to authorize access.Tr²  u     âœ“ OAuth credentials saved.z8  If the setup-token was displayed above, paste it here:z*  Paste setup-token (or Enter to cancel): Fu)     âš  Could not detect saved credentials.z/  The 'claude' CLI is required for OAuth login.z  To install and authenticate:zE    1. Install Claude Code:  npm install -g @anthropic-ai/claude-codez/    2. Run:                  claude setup-tokenz.    3. Follow the browser prompts to authorizez)    4. Re-run:               hermes modelz8  Or paste an existing setup-token now (sk-ant-oat-...):z$  Setup-token (or Enter to cancel): u2     Cancelled â€” install Claude Code and try again.)
Úagent.anthropic_credentialsr©  rª  r«  r.   r¬  r­  r   r5   ÚFileNotFoundError)
r&   r©  r·  r¼  r»  Úsavedr«  rª  r¬  r­  s
   f     @@@@r   Ú_run_anthropic_oauth_flowrÁ    sø   ü€ ç{Ñ{ßc÷ó ÷ñ ð#ÜˆRÐOØHÈ"ô	Ná%Ó'ˆßÙ=×?Ò?ÙÙ& u°nÕEÜÐ2Ô3Ùô 	ˆRÐKÈRÔPÙÐIÓJˆØŠ=ÙßÙÜÐ9Ô:Ùøäô äˆRÐBÀBÐHhÐjlØTØ>Ø=Ø8¸"ØGÈô	Mñ ÐCÓDˆØŠ=ÚßÚÜÐBÔCÚðús;   ¯B$ ÁB$ ÁB$ Á2B$ ÂB$ ÂB$ Â$-C.ÃC.ÃC.Ã-C.c                óh   € V ^8„  d   QhR\         \        \         \        \        3,          3,          /# r=   rQ   )r   s   "r   r   r   E  s(   € ÷ Añ A¤t¬C´´c¼3°hµÐ,?Õ'@ñ Ar   c           "     ó8  € ^ RI HpHp ^ RIHp / p/ pV! 4       p. pVP                  R4      p\        V\        4      '       d   VP                  R V 4       4       VP                  R4      p	\        V	\        4      '       d'   VP                  R V	P                  4        4       4       V EF¾  w  r«p\        VP                  RR4      ;'       g    R4      P                  4       p\        VP                  R	R4      ;'       g7    VP                  R
R4      ;'       g    VP                  RR4      ;'       g    R4      P                  4       p\        T
;'       g    R4      P                  4       p
\        T;'       g    R4      P                  4       p\        VP                  RR4      ;'       g    VP                  RR4      ;'       g    R4      P                  4       pW«3 Uu. uF  pV'       g   K  VP                  4       NK  	  ppV Uu. uF  pV3NK  	  upV Uu. uF  pVV3NK	  	  up,           pWM3W^33 F*  w  ppRV9   g   K  V F  pVP                  VV4       K  	  K,  	  EKÁ  	  R R lp/ pV! V 4       EF‰  p\        V\        4      '       g   K  VP                  R4      ;'       g    RP                  4       p
VP                  R	4      ;'       g    RP                  4       pV
'       d	   V'       g   K€  VP                  R4      ;'       g    RP                  4       pVP                  RR4      pRT
R	TRVP                  RR4      RVP                  R4      ;'       g    VP                  RR4      RVP                  RR4      RVRVP                  R/ 4      RVP                  RR4      RVP                  R/ 4      RVP                  RR4      RVP                  RR4      RVRV! WJW¿4      RV! WZW¿4      /VV! W«4      &   EKŒ  	  V# u upi u upi u upi )zISaved custom providers keyed by slug, with raw ``${ENV}`` refs preserved.)Úget_compatible_custom_providersÚread_raw_config)Úcustom_provider_slugr<  c              3   ó|   "  € T F2  p\        V\        4      '       g   K  VP                  R R4      RV3x € K4  	  R# 5i©r€   r   N©r0   r1   r/   )rr   rs   s   & r   rt   Ú-_named_custom_provider_map.<locals>.<genexpr>T  s0   é € Ð_¹x¸!Ì:ÐVWÔY]×K^Ô5˜AŸE™E &¨"Ó-¨r°1Õ5»xùs   ‚<Ÿ<r   c              3   ó’   "  € T F=  w  r\        V\        4      '       g   K  VP                  R R4      ;'       g    TW3x € K?  	  R# 5irÈ  rÉ  )rr   rc   rs   s   &  r   rt   rÊ  W  s;   é € ÐsÑF[¹d¸aÔ_iÐjkÔmq×_rÔ9˜AŸE™E &¨"Ó-×2Ð2°°AÕ9ÓF[ùs   ‚A¡AºAr   r   rT   r   Úapir(   Údefault_modelr1  c          
      óv   € V ^8„  d   QhR\         \        \        3,          R\        R\        R\        R\        /# )r	   Úrefsr€   Úprovider_keyr(   r   )r1   r?   r   )r   s   "r   r   Ú0_named_custom_provider_map.<locals>.__annotate__g  sA   € ÷ ñ œ$œu¤c˜zÕ*ð ´#ð ÄSð ÔQTð ÔY\ñ r   c                 óJ  a € \        T;'       g    R 4      P                  4       P                  4       p\        T;'       g    R 4      P                  4       P                  4       p\        T;'       g    R 4      P                  4       p\        V 3R lWS3V3WC3V33 4       R 4      # )r   c              3   óh   <"  € T F'  q^ ,          '       g   K  VS9   g   K  SV,          x € K)  	  R# 5i)r¤  Nr   )rr   rF  rÏ  s   & €r   rt   ÚB_named_custom_provider_map.<locals>._lookup_ref.<locals>.<genexpr>k  s/   øé € ÐyÑ&b Ðhi×fjÑfj”WÐopÐtxÑox”W�T˜!—W’WÓ&bùs   ƒ2˜2¡2)r   r2   r3   r„   )rÏ  r€   rÐ  r(   Úname_lcÚpkey_lcs   f&&&  r   Ú_lookup_refÚ/_named_custom_provider_map.<locals>._lookup_refg  sŠ   ø€ Ü�d—j�j˜b“/×'Ñ'Ó)×/Ñ/Ó1ˆÜ�l×(Ð( bÓ)×/Ñ/Ó1×7Ñ7Ó9ˆÜ�E—K�K˜RÓ ×&Ñ&Ó(ˆÜÔy¨Ð'7¸'¸ÀgÐEUÐX_ÐWaÑ&bÓyÐ{}Ó~Ð~r   r€   rÐ  r0  Úapi_key_envÚkey_cmdrä   Úmodels_discoveredFÚextra_headersÚdiscover_modelsTr>  r/  r8  )r.   rÄ  rÅ  Úhermes_cli.providersrÆ  r/   r0   r>   rÛ   r1   Úitemsr   r2   r3   Ú
setdefault)r`   rÄ  rÅ  rÆ  Úraw_api_key_refsÚraw_base_url_refsÚraw_cfgÚraw_entriesÚraw_listÚraw_providersr€   rÐ  Ú	raw_entryÚtemplateÚbase_templater(   rc   ÚkeysÚ
identitiesrÏ  ÚtmplÚidentityr×  Úcustom_provider_maprL   rT   s   &                         r   Ú_named_custom_provider_maprï  E  s�  € çRÝ9ð
 *,ÐØ*,ÐÙÓ€Gà/1€KØ�{‰{Ð-Ó.€HÜ�(œD×!Ò!Ø×ÑÑ_¹xÓ_Ô_Ø—K‘K Ó,€MÜ�-¤×&Ò&Ø×ÑÑsÀm×FYÑFYÔF[ÓsÔsÜ)4Ñ%ˆ˜IÜ�y—}‘} Y°Ó3×9Ð9°rÓ:×@Ñ@ÓBˆÜ˜IŸM™M¨*°bÓ9×wÐw¸Y¿]¹]È5ÐRTÓ=U×wÐwÐYb×YfÑYfÐglÐnpÓYq×wÐwÐuwÓx×~Ñ~ó  AˆÜ�4—:�:˜2‹×$Ñ$Ó&ˆÜ˜<×-Ð-¨2Ó.×4Ñ4Ó6ˆÜ�I—M‘M '¨2Ó.×ZÐZ°)·-±-ÀÐQSÓ2T×ZÐZÐXZÓ[×aÑaÓcˆð %)Ñ#7Ó=Ñ#7˜a¼1”	�—‘–	Ñ#7ˆÐ=Ù$(Ó)¡D˜q�q“d¡DÑ)ÁÓ,FÁ¸A¨a°«ZÁÑ,FÕFˆ
Ø,Ð7Ð:KÐ9[Ó\‰JˆD�$Ø�tŽ|Û *�HØ—O‘O H¨dÖ3ó !+ô ]ñ *5õð ÐÙ0°×5ˆÜ˜%¤×&Ò&ÙØ—	‘	˜&Ó!×'Ð' R×.Ñ.Ó0ˆØ—I‘I˜jÓ)×/Ð/¨R×6Ñ6Ó8ˆßŸ8ÙØŸ	™	 .Ó1×7Ð7°R×>Ñ>Ó@ˆØ—	‘	˜' 2Ó&ˆà�DØ˜Ø�u—y‘y ¨BÓ/Ø�u—y‘y Ó+×KÐK¨u¯y©y¸ÈÓ/KØ�u—y‘y ¨BÓ/Ø�UØ�e—i‘i ¨"Ó-Ø §¡Ð+>ÀÓ!FØ˜UŸY™Y ¸Ó;Ø˜uŸy™yÐ):¸DÓAØ˜Ÿ	™	 *¨bÓ1Ø˜LØ™;Ð'7¸|ÓSØ™KÐ(9ÀÓUðIWÐÑ0°ÓDÔEñ 6ð0 ÐùòM >ùÚ)ùÒ,Fs   Ç#
PÇ2PÈPÈPc                ó4  € V ^8„  d   QhR\         R\        R\         \        \        3,          R\         \        \         \        \        3,          3,          R\        \        \        \        \        \        \        ,          3,          ,          \        3,          /# )r	   rE  ÚactiveÚprovider_labelsrî  r   )r1   r   r?   r>   r    )r   s   "r   r   r   ‰  s|   € ÷ J ñ J ¬ð J ´cð J ÌDÔQTÔVYÐQYÍNð J Ü59¼#¼tÄCÌÀH½~Ð:MÕ5NðJ ÜSXÔY]Ô^cÔdgÔilÔnrÔsvÕnwÐdwÕ^xÕYyÔ{~ÐY~ÕSñJ r   c           
     ó¢  a!a"€ ^ RI HpHp ^ RIHpHpHp V U	u/ uF  q™P                  V	P                  bK  	  p
p	V! 4       pV P                  R/ 4      ;'       g    / P                  R4      ;'       g    .  U	u0 uF4  p	V	'       g   K  \        V	4      P                  4       P                  4       kK6  	  pp	V'       dì   V Uu/ uF(  qÝP                  VP                  P                  4       0bK*  	  ppVP                  4        FD  w  ppVP                  VVP                  4       04      P                  VP                  4       4       KF  	  V U	u. uFR  qžP                  V	P                  V	P                  P                  4       04      V,          '       d   KF  V	P                  NKT  	  pp	MV U	u. uF  q™P                  NK  	  pp	V'       d	   V! V4      MRp. o"^ o!V!V"3R lpV! V4       Fð  pVR,          R8X  dl   VR	,          pVP                  R
R4      pV'       d   VR,           RV R2MVR,           R2pT! RV 2TVR,          \!        V4      ;'       d    VV8H  4       K|  VR,          pV
P                  VVP                  VV4      4      pVR8X  d"   ^ RIHp V! RVR. /4      pVf   KÆ  VR,          pT! TT. \!        V4      ;'       d    VV8H  4       Kò  	  VP                  4        Fg  w  ppVP                  RR4      pV'       d   RV 2MRpT! TVR,           R\'        VR,          4       RV 2. \!        V4      ;'       d    VV8H  4       Ki  	  ^ RIHp ^ RIHp  V\1        V 4      ,          '       g   V! 4       '       d   V! RR. VR8H  4       S"P3                  RR. 34       \5        V P                  R 4      \6        4      '       d,   V P                  R 4      '       d   S"P3                  R!R". 34       S"P3                  R#R$. 34       S"P3                  R%R&. 34       S"P3                  R'R(. 34       S"S!3# u up	i u up	i u upi u up	i u up	i ))au  Rows for the ``hermes model`` provider picker plus the pre-selected index. Canonical providers
fold into display groups (PROVIDER_GROUPS): a group row's ``members`` drive a sub-picker, leaf
rows have ``members == []``; saved custom providers and trailing actions stay flat. Honors
``model_catalog.excluded_providers`` (slug or alias, case-insensitive) like the gateway/TUI.)ÚCANONICAL_PROVIDERSÚ_PROVIDER_ALIASES)Úgroup_providersÚlisted_canonical_providersÚprovider_group_for_slugÚmodel_catalogÚexcluded_providersr   c                 ó^   <€ V'       d   V R 2p\        S4      oSP                  WV34       R# )u     â†� currently activeN)r4   rJ   )rC   rœ   ÚmembersÚ	is_activerc  r]  s   &&&&€€r   Ú_addÚ)_build_provider_picker_rows.<locals>._add¨  s-   ø€ çØ�gÐ3Ð4ˆEÜ˜g›,ˆKØ�‰˜ GÐ,Ö-r   ÚkindÚgroupÚgroup_idrE   rœ   u    â–¸ (r-   u    â–¸zgroup:rü  râ   Únous)Ú_free_tier_nous_rowr€   rä   r(   u    â€” rC  rT   )Úlocal_models_available)ÚLLAMACPP_ALIASESÚllamacppuH   Local models (run open models on this machine â€” no account or API key)r*   z$Custom endpoint (enter URL manually)r<  zremove-customzRemove a saved custom providerÚ	reasoningz)Reasoning effort for the current model...z
aux-configzConfigure auxiliary models...ÚcancelzLeave unchanged)r|  rô  rõ  Ú hermes_cli.models_catalog_staticrö  r÷  rø  râ   Útui_descr/   r   r2   r3   rß  rà  Úaddr   Ú!hermes_cli.model_switch_providersr  r#   Ú"hermes_cli.model_setup_flows_localr  rÞ  r  ÚsetrJ   r0   r>   )#rE  rñ  rò  rî  rô  rõ  rö  r÷  rø  ÚpÚcanonical_descsÚlistedÚ_cli_excludedr   Ú
_names_forÚ_aliasÚ_canonÚ_visible_slugsÚactive_grouprþ  re  ÚgidÚ
group_descrœ   râ   r  Útier_rowrC   r4  Úsaved_modelÚ
model_hintr  r  rc  r]  s#   &&&&                             @@r   Ú_build_provider_picker_rowsr  ‰  sû  ù€ ÷ IßuÑuÙ3FÓGÑ3F¨a—v‘v˜qŸz™zÒ)Ñ3F€OÐGÙ'Ó)€Fð —*‘*˜_¨bÓ1×7Ð7°R×<Ñ<Ð=QÓR×XÐXÐVXÐXóáXˆAÜô 	ŒˆA‹�‰‹×ÑÖÙXð ð ÷ áPcÓ*dÑPcÈ"¯7©7°R·W±W·]±]³_Ð4EÒ+EÑPcˆ
Ð*dØ/×5Ñ5Ö7‰NˆF�FØ×!Ñ! &¨6¯<©<«>Ð*:Ó;×?Ñ?ÀÇÁÃÖOñ 8á*0Óq©& Q¿¹ÀqÇvÁvÐPQ×PVÑPV×P\ÑP\ÓP^ÐO_Ó8`Ðcp×8pÑ8pœ&˜!Ÿ&œ&©&ˆÐqˆá*0Ó1©& QŸ&œ&©&ˆÐ1÷ 7=Ñ*¨6Ô2À"€Lð 13€GØ€Kö.ñ ˜~Ö.ˆØˆv�;˜'Ô!Ø�j•/ˆCØŸ™ °Ó3ˆJß<F�s˜7•|�n F¨:¨,°aÑ8ÈsÐSZÍ|ÈnÐ\`ÐLaˆEÙ�6˜#˜� ¨¨I­¼¸\Ó8J×8bÐ8bÈsÐVbÑObÖcà�v•;ˆDØ#×'Ñ'¨¨o×.AÑ.AÀ$ÈÓ.MÓNˆEØ�vŒ~õ RÙ.°¸¸xÈÐ/LÓM�ØÒ#ÙØ  Õ(�Ù��u˜b¤$ v£,×"AÐ"A°4¸6±>ÖBñ# /ð& 2×7Ñ7Ö9Ñˆˆ]Ø#×'Ñ'¨°Ó4ˆß.9�u˜[˜MÑ*¸rˆ
ÙˆS�] 6Õ*Ð+¨2¬j¸ÀzÕ9RÓ.SÐ-TÐTUÐV`ÐUaÐbÐdfÜ�&‹\×+Ð+˜c V™mö	-ñ :õ JÝ5Øœ3Ð/Ó0×0Ô0Ñ5K×5MÒ5MÙˆZÐcÐegØ�zÑ!ô	#à‡N�N�HÐDÀbÐIÔJÜ�&—*‘*Ð/Ó0´$×7Ò7¸F¿J¹JÐGY×<ZÒ<ZØ�‰˜Ð)IÈ2ÐNÔOØ‡N�N�KÐ!LÈbÐQÔRØ‡N�N�LÐ"AÀ2ÐFÔGØ‡N�N�HÐ/°Ð4Ô5Ø�KÐÐùòE Hùòùò +eùò rùâ1s*   ™P8Á8
P=Â+P=Ã .QÅAQÆQÆ+Qc                ó‚   € V ^8„  d   Qh/ ^ \         9   d+   \        \        \        \        \        3,          ,          ;R&   # )r	   rF   )Ú__conditional_annotations__r>   r?   r   )r   s   "r   r   r      s4   € ÷ ñ ÷h7ò 7ŒD””sœC¤�}Õ%Õ&ñ 7òir   >   ÚgmiÚxaiÚzaiÚarceeÚgeminiÚnvidiaÚxiaomiÚalibabaÚminimaxÚdeepseekÚkilocoder‰  Úhuggingfaceú
minimax-cnú
openai-apiúopencode-goúollama-cloudúopencode-zenúkimi-coding-cnútencent-tokenhubútencent-tokenplan))ÚvisionÚVisionzimage/screenshot analysis)ÚcompressionÚCompressionzcontext summarization)ÚapprovalÚApprovalzsmart command approval)ÚmcpÚMCPzMCP tool reasoning)Útitle_generationzTitle generationzsession titles)ÚreviewÚReviewz/review reviewer subagent)Úmemory_query_rewritezMemory query rewritezmemory retrieval queries)Útts_audio_tagszTTS audio tagszGemini TTS tag insertion)Ú
voice_chatz
Voice chatzspoken voice-mode replies)Ú
skills_hubz
Skills hubzskills search/install)Útriage_specifierzTriage specifierzkanban spec fleshing)Úkanban_decomposerzKanban decomposerztask decomposition)Úprofile_describerzProfile describerzauto profile descriptions)ÚcuratorÚCuratorzskill-usage review pass)r   r   ))r   zAuto-detectzIUse Hermes URL heuristics; best for standard OpenAI-compatible endpoints.)Ú1rS   Údetectzauto-detect)Úchat_completionszChat Completionsz=Use /chat/completions for standard OpenAI-compatible servers.)Ú2ÚchatrK  Úcompletions)Úcodex_responseszResponses / Codexz:Use /responses for Codex-compatible tool-calling backends.)Ú3Ú	responsesÚcodexrO  )Úanthropic_messageszAnthropic Messagesz4Use /v1/messages for Anthropic-compatible endpoints.)Ú4Ú	anthropicrS  Úmessagesr¯   )r   r   NNNr   )<r   Ú__doc__rG   Útypingr   Ú#hermes_cli.model_setup_flows_commonr   r   r   r   r   r   Ú	frozensetÚ_GENERIC_API_KEY_PROVIDERSr#   r9   rF   rk   rƒ   rÂ   rM   rY   rV   re   rm   ry   r…   rŒ   r‹   r�   r³   rÎ   rÆ   rÝ   rÜ   Úobjectr  r  rÅ   Ú_DEFAULT_QWEN_PORTAL_MODELSr  r  r#  r-  r6  r:  r@  rJ  r›   rk  rq  rp  rv  r›  r   r§  rÁ  rï  r  r   )r  r�   ÚanswersÚanswerr   s   0000@r   Ú<module>r`     s¬  øðöó å ß mÕ mõñ 'ò (Só TÐ õJò
Iò"*7€
ó 7ð* $Ð Ø$Ð Ø8Ð õ	õõ$*õõHõ	$õRð¸rð ÐSUð Ø$&ðØJN÷õ*
õTõõ@!"õH*o÷Z"XõJ;ñ> ‹X€
õð(.°ð .Ð9Kô .ð& ˜ð'Ð ð<Ð ñ GXÖnÑFWÑ.B¨e°Q¸ÓfmÐ\b EšMÑfm™FÑFWÔnÐ ÷õ4	ô/ôlô
7Qòt&BñR1 ÐTVõ 1 õh%õOõ rõ&)÷";õ|aõ
cò
>õBA÷HJ ùõo os   ÃE
