+
    jHàjPQ  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ]P                  ! R4      tRt	RR/R R llt
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R R ltR R R lltR R ltR R ltR R ltR# )!zþStreamlined setup flows: the Nous Portal one-shot (`hermes portal`), first-time quick setup,
Blank Slate setup and the `--quick` missing-items pass. Names from setup.py are imported lazily
per function so test patches on ``hermes_cli.setup`` take effect.N)ÚPathzhermes_cli.setupÚintroc          
      óZ   € V ^8„  d   QhR\         R\        R\        R\        R,          RR/# )é   ÚconfigÚ
tools_lineÚextrar   NÚreturn)ÚdictÚstr)Úformats   "Ú;/home/ubuntu/.hermes/hermes-agent/hermes_cli/setup_quick.pyÚ__annotate__r      s7   € ÷ .ñ .œdð .¼Sð .Ì#ð .ÔVYÐ\`ÕV`ð .Ðlpñ .ó    c               óŽ   € ^ RI HpHpHp \	        4        V! R4       T! . V'       d   V.M. OVNRNRNVORNRN5!   V! W4       R# )zXShared Blank Slate epilogue: success banner, the "enable later" hints, then the summary.)Ú_infoÚ_print_setup_summaryÚprint_successu3   Blank Slate setup complete â€” minimal agent ready.z2  Seed skills:         hermes skills opt-in --syncz%  Add MCP servers:     hermes mcp addz)  Tune agent settings: hermes setup agentN)Úhermes_cli.setupr   r   r   Úprint)r   Úhermes_homer   r   r   r   r   r   s   &&&$*   r   Ú_blank_slate_doner      sj   € çKÑKÜ	„GÙÐGÔHÙ	ð n—uˆU‰G "ð n zð nÐ3gð nØ
1ðnØ49ðnØ;fðnØhlôná˜Ö-r   Ú	dict_onlyFc                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r   r   r	   N©r
   Úbool)r   s   "r   r   r      s!   € ÷ !ñ !¤ð !´Dð !ÀTñ !r   c               ó¢   € ^ RI Hp V! 4       pV'       d   \        V\        4      '       d$   V P	                  4        V P                  V4       R# R# )z•Re-sync the in-memory config dict from disk after a sub-flow that saved via its own
load/save cycle, so a later save_config(config) can't clobber it.)Úload_configN)r   r   Ú
isinstancer
   ÚclearÚupdate)r   r   r   Ú	refresheds   &$  r   Ú_reload_config_intor"      s7   € õ -Ù“€Ißœ
 9¬d×3Ò3Ø�‰ŒØ�‰�iÖ ñ 4r   c          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )r   r   ÚcontextÚ
cancel_excÚcancel_linesr	   )r
   r   Útupler   )r   s   "r   r   r   &   s1   € ÷ ñ œ4ð ¬Sð ¼eð ÔSXð Ôjnñ r   c               ó¼   € ^ RI Hp  ^ RIHp V! V 4       R#   T d    T! T!    R# \         d*   p\
        P                  RY4       T! T4        Rp?R# Rp?ii ; i)uÐ   Run ``_model_flow_nous`` (login, model pick, provider switch, Tool Gateway opt-in) â€” the
single source of truth shared with ``hermes model``. False when cancelled or failed (the
message is already printed).©r   )Ú_model_flow_nousTz$_model_flow_nous error during %s: %sNF)r   r   Úhermes_cli.model_setup_flowsr*   Ú	ExceptionÚloggerÚdebug)r   r$   r%   r&   Úprint_errorr   r*   Úexcs   &$$$$   r   Ú_run_nous_flowr1   &   s`   € õ 'ð
ÝAÙ˜Ô ÙøØô ñ 	ˆ|Óñ ô ô Ü�‰Ð;¸WÔJÙ�C×ÐÙûðús   ˆ ˜A¨A±A²AÁAc                ó(   € V ^8„  d   QhR\         RR/# )r   r   r	   N©r
   )r   s   "r   r   r   9   s   € ÷ $ñ $¤ð $¨$ñ $r   c           	     ó”  aa€ ^ RI HpHpHpHoHoHp V! R4       V! RRRRRRR4       R VV3R	 llp\        V R
\        \        \        3RVR7      '       g   R# \        P                  ! \        4      ;_uu_ 4        \        V RR7       RRR4       \        4        V! R4       V! RR4       V! V 4       R#   + '       g   i     L5; i)zKOne-shot Nous Portal setup (``hermes setup --portal`` / ``hermes portal``).)r   Ú_print_bannerÚ_record_setup_completedr/   Ú
print_infor   uC   â”‚     â˜¤ Hermes Setup â€” Nous Portal (one-shot)             â”‚Nz7  One subscription, 300+ models, plus the Tool Gateway:z9    web search, image generation, TTS, browser automationu0       â€” all routed through your Nous Portal sub.z>  Sign up: https://portal.nousresearch.com/manage-subscriptionc                ó(   € V ^8„  d   QhR\         RR/# ©r   r0   r	   N©r,   )r   s   "r   r   Ú*_run_portal_one_shot.<locals>.__annotate__B   s   € ÷ $ñ $”yð $ Tñ $r   c                 ó|   <€ ^ RI Hp \        4        V! V RR7      vr#S! RV 24       V F  pS! RV 24       K  	  R# )é    ©Úprovider_setup_failure_lineszhermes portal©Úretry_commandú  N)Úhermes_cli.auth_error_copyr?   r   )r0   r?   ÚleadÚrestÚliner/   r7   s   &    €€r   Ú	_on_errorÚ'_run_portal_one_shot.<locals>._on_errorB   s?   ø€ ÝKÜŒÙ2°3ÀoÔVˆˆÙ�b˜˜�KÔ ÛˆDÙ˜˜D˜6�{Ö#ó r   z`hermes portal`©r$   r%   r&   r/   T)r   zPortal setup complete.z.  Run `hermes portal info` to inspect routing.z!  Run `hermes` to start chatting.)Nz  Setup cancelled.z+  You can retry later with `hermes portal`.)r   r   r5   r6   r/   r7   r   r1   ÚKeyboardInterruptÚEOFErrorÚ
SystemExitÚ
contextlibÚsuppressr,   r"   r   )r   r   r5   r6   r   rG   r/   r7   s   &     @@r   Ú_run_portal_one_shotrO   9   s¯   ù€ çv×vÙÐWÔXÙ	ˆ$ÐIØ
EØ
<¸dØ
JÈDôR÷
$ñ $ô ˜&Ð*;ÔIZÔ\dÔfpÐHqØ'rØ&/÷1ó 1ñ 	ô 
×	Ò	œY×	'Õ	'Ü˜F¨dÕ3÷ 
(ä	„GÙÐ*Ô+Ù	Ð
:Ð<_Ô`Ù˜FÖ#÷ 
(×	'ús   Á<B7Â7C	c                ó0   € V ^8„  d   QhR\         R\        /# ©r   r   Úis_existingr   )r   s   "r   r   r   X   s   € ÷ 1.ñ 1.¬ð 1.Ìñ 1.r   c                ó   aa€ ^ RI HpHpHpHoHpHpHoHpH	p	H
p
Hp V! RRR7       V! RRRR4       R	 VV3R
 llp\        V R\        \        3RVR7       \        V 4       V! V 4       V! V 4       V	! V 4       \!        4        V! RRR.^ 4      pV^ 8X  d   V
! V 4       V	! V 4       M^ RIHp V! RRV R7       \!        4        V! R4       V! RR4       V^ 8w  d	   S! R4       \'        4        \!        4        V! W4       R# )zpStreamlined first-time setup via Nous Portal: OAuth, model, terminal & messaging;
everything else gets defaults.)Ú_apply_default_agent_settingsr   Úprint_headerr7   r   r   Úprint_warningÚprompt_choiceÚsave_configÚsetup_gatewayÚsetup_terminal_backendzNous PortalT©Úgapz5One subscription, 300+ models, plus the Tool Gateway:z8  web search, image generation, TTS, browser automation.z<Sign up: https://portal.nousresearch.com/manage-subscriptionNc                ó(   € V ^8„  d   QhR\         RR/# r9   r:   )r   s   "r   r   Ú1_run_first_time_quick_setup.<locals>.__annotate__e   s   € ÷ ñ ”yð  Tñ r   c                 ó\   <€ ^ RI Hp V! V RR7      vr#S! V4       V F  pS! V4       K  	  R# )r=   r>   zhermes modelr@   N)rC   r?   )r0   r?   rD   rE   rF   r7   rV   s   &    €€r   rG   Ú._run_first_time_quick_setup.<locals>._on_errore   s.   ø€ ÝKÙ2°3ÀnÔUˆˆÙ�dÔÛˆDÙ�tÖó r   zquick setuprI   z7Connect a messaging platform? (Telegram, Discord, etc.)z"Set up messaging now (recommended)u1   Skip â€” set up later with 'hermes setup gateway')Úensure_gateway_serviceÚsetup)r$   Úinteractiver   z#Setup complete! You're ready to go.z)  Configure all settings:    hermes setupz1  Connect Telegram/Discord:  hermes setup gateway)NzNous Portal setup cancelled.)r   rT   r   rU   r7   r   r   rV   rW   rX   rY   rZ   r1   rJ   rK   r"   r   Ú hermes_cli.gateway_setup_servicera   Ú_print_macos_fda_tip)r   r   rR   rT   r   rU   r   r   rW   rX   rY   rZ   rG   Úgateway_choicera   r7   rV   s   &&&            @@r   Ú_run_first_time_quick_setuprg   X   s  ù€ ÷÷ ÷ ñ ñ
 � DÕ)Ù	Ð
AØ
DØ
HÈ$ôP÷ñ ô �6 =Ô>OÔQYÐ=ZØ FÐT]õ_ô ˜Ôñ ˜6Ô"Ù! &Ô)Ù�Ôô 
„GÙ"Ð#\Ø,Ð.að_àó
€Nð ˜ÔÙ�fÔÙ�FÕõ 	LÙ w¸DÈÕPÜ	„GÙÐ7Ô8Ù	ˆ$Ð;Ô<Ø˜ÔÙÐFÔGÜÔÜ	„GÙ˜Ö-r   c                ó   € V ^8„  d   QhRR/# ©r   r	   N© )r   s   "r   r   r   Œ   s   € ÷ Kñ K˜dñ Kr   c                 ó  € ^ RI Hp  \        P                  R8w  d   R#  \        P
                  ! \        P                  ! 4       R,          R,          R,          4       R#   \         d     M\         d     R# i ; iT ! RRRR	R
R4       R# )aH  One-time macOS tip: one Full Disk Access grant kills every per-folder prompt. Same
prompt-free probe as doctor's check_macos_full_disk_access (the FDA-gated TCC dir never
triggers a dialog); silent on non-macOS and when FDA is granted or indeterminate.

every per-folder permission prompt, permanently (issue #52010 follow-up).
r)   ÚdarwinNÚLibraryzApplication Supportzcom.apple.TCCuF     macOS tip: silence ALL folder permission prompts with one switch â€”uH     System Settings â†’ Privacy & Security â†’ Full Disk Access â†’ enablez<  your terminal (and Hermes.app if you use Desktop), or run:zS    open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"u=     The grant is permanent â€” it survives every Hermes update.)
r   r   ÚsysÚplatformÚosÚlistdirr   ÚhomeÚPermissionErrorÚOSErrorr)   s    r   re   re   Œ   sw   € õ 'Ü
‡|�|�xÔÙðÜ
�
Š
”4—9’9“; Õ*Ð-BÕBÀ_ÕTÔUÙøÜô ÙÜô Úðúá	ˆ$ÐXØ
TØ
HØ
aØ
Iö	Ks   Ÿ>A ÁA:Á,A:Á5A:Á9A:c                ó$   € V ^8„  d   QhR\         /# ©r   r   r3   )r   s   "r   r   r   ¤   s   € ÷ Sñ S¬$ñ Sr   c                ó–  € 0 Rmp\        V4      V P                  R/ 4      R&    ^ RIHp ^ RIHpHp V UUu0 uF  w  p qekK
  	  pppVP                  V! 4       4       VP                  4        Fs  w  rXVP                  R4      '       gE   \        V\        4      '       d1   VP                  R4      '       g   VP                  R4      '       d   Kb  VP                  V4       Ku  	  \        Wq,
          4      p	V	'       d   W�P                  R/ 4      R	&   R# R# u uppi   \         d"   p
\        P!                  R
T
4        Rp
?
R# Rp
?
ii ; i)aË  Write the minimal toolset state for a Blank Slate install: only ``file``, ``terminal``,
``vision`` (``read_file`` can't read images) and ``skills`` (the seeded ``hermes-agent`` skill
needs ``skill_view``) stay on. Two layers enforce it: ``platform_toolsets["cli"]`` (explicit,
so defaults aren't re-expanded) and ``agent.disabled_toolsets`` (hard-suppression applied last
in ``_get_platform_tools``, overriding the recovery that would re-add e.g. ``kanban``).Úplatform_toolsetsÚcli)ÚTOOLSETS)ÚCONFIGURABLE_TOOLSETSÚ_get_plugin_toolset_keyszhermes-ÚincludesÚpostureÚagentÚdisabled_toolsetsz5blank-slate disabled_toolsets computation skipped: %sN>   ÚfileÚskillsÚvisionÚterminal)ÚsortedÚ
setdefaultÚtoolsetsrz   Úhermes_cli.tools_configr{   r|   r    ÚitemsÚ
startswithr   r
   ÚgetÚaddr,   r-   r.   )r   Úkeeprz   r{   r|   ÚkÚ_Úall_keysÚtdefÚdisabledr0   s   &          r   Ú_blank_slate_minimal_toolsetsr“   ¤   s  € ò 4€DÜ8>¸t»€F×ÑÐ)¨2Ó.¨uÑ5ðSÝ%ß[Ù%:Ô;Ñ%:™'˜!˜Q ’AÑ%:ˆÑ;Ø�‰Ñ0Ó2Ô3ð  —~‘~Ö'‰GˆAØ�|‰|˜I×&Ò&¬:°d¼D×+AÒ+AÀtÇxÁxÐPZ×G[ÒG[Ð_c×_gÑ_gÐhq×_rÒ_rÙð �L‰L˜ŽOñ (ô ˜(�/Ó*ˆßØBJ×Ñ˜g rÓ*Ð+>Ó?ñ ùó <øô ô SÜ�‰ÐLÈc×RÒRûðSús6   ¤D ·DÁA1D Â7D ÃAD ÄD ÄEÄ'EÅEc                ó$   € V ^8„  d   QhR\         /# rv   r3   )r   s   "r   r   r   Â   s   € ÷ Dñ D¬ñ Dr   c                óæ   € ^ZV P                  R/ 4      R&   RV P                  R/ 4      R&   V P                  R/ 4      pRVR&   RVR&   RV P                  R	/ 4      R&   RV P                  R
/ 4      R&   R# )zSTurn OFF every optional config feature; all opt back in via ``hermes setup agent``.r   Ú	max_turnsFÚcompressionÚenabledÚmemoryÚmemory_enabledÚuser_profile_enabledÚcheckpointsÚsmart_model_routingN)r†   )r   Úmems   & r   Ú_blank_slate_minimize_configrŸ   Â   s‡   € à24€F×Ñ�g˜rÓ" ;Ñ/Ø6;€F×Ñ�m RÓ(¨Ñ3Ø
×
Ñ
˜H bÓ
)€CØ!€CÐÑØ"'€CÐÑØ6;€F×Ñ�m RÓ(¨Ñ3Ø>C€F×ÑÐ+¨RÓ0°Ó;r   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   Úopt_outÚ	log_labelr	   N)r   r   )r   s   "r   r   r   Í   s"   € ÷ ñ ¬ð ¼#ð Ðbfñ r   c                óà   €  ^ RI Hp ^ RIHp V! V 4       V! RR7      pVe   V! V4       R# R#   \         d4   p\
        P                  RY4       Te   T! T4        Rp?R#  Rp?R# Rp?ii ; i)z›Record the bundled-skills opt-out marker and sync (essential skills are always seeded);
``on_success(sync_result)`` / ``on_error(exc)`` report the outcome.)Úsync_skills)Úset_bundled_skills_opt_outT)ÚquietNzblank-slate %s error: %s)Útools.skills_syncr¤   Útools.skills_sync_bundled_opsr¥   r,   r-   r.   )r¡   r¢   Ú
on_successÚon_errorr¤   r¥   Úresultr0   s   &&&&    r   Ú_set_bundled_skills_opt_outr¬   Í   se   € ð
Ý1ÝLÙ" 7Ô+Ù 4Ô(ˆØÒ!Ù�vÖñ "øäô Ü�‰Ð/°Ô@ØÒÙ�S�MŠMõ  ûðús   ‚)/ ¯A-º"A(Á(A-c                ó0   € V ^8„  d   QhR\         R\        /# rQ   r   )r   s   "r   r   r   Ý   s   € ÷ 1Añ 1A¤4ð 1AÄ4ñ 1Ar   c                óÎ  € ^ RI HpHpHpHpHpHpHp	Hp
 V! RRR7       V! RRRRR	R
RRRR4
       V! R4       V	! V 4       V! V 4       V! R4       V
! V 4       \        V 4       \        V 4       V! V 4       \        4        V! R4       V! R4       V! R4       V! RRR7       V! RRR.^ 4      pV^ 8w  d   \        W4       R# V! V 4       \        RR4       \        WRRRR7       R# )u´   Blank Slate setup â€” essentials only, everything else OFF; then finish now or walk through
opting capabilities back in. Nothing is enabled that the user did not explicitly choose.)r   rU   r7   r   rW   rX   Úsetup_model_providerrZ   zBlank Slate SetupTr[   zAEverything starts OFF. First we force-enable only what's requiredz>to run an agent, then you choose whether to stop there or walku=   through enabling more â€” opting in to exactly what you want.Ú zGForced on: Provider & Model, File Operations, Terminal, Vision, Skills.z1Everything else (web, browser, code exec, memory,u9   delegation, cron, plugins, MCP, â€¦) starts disabled. Thez:essential `hermes-agent` skill is always kept so the agentz/can help you drive and configure Hermes itself.Nu&   Step 1 â€” Provider & Model (required)u   Step 2 â€” Terminal BackendzMinimal baseline applied:z@  Toolsets: file, terminal, vision, skills (everything else off)z6  Compression, memory, checkpoints, smart routing: offzHow far do you want to go?z'Your minimal agent is ready. What next?u<   Start with everything disabled â€” finish now (most minimal)uI   Walk through all configurations â€” opt in to tools, skills, plugins, MCPzskill opt-outz#  Enable tools:        hermes toolsz%  Enable plugins:      hermes pluginsz!Enable anything later, on demand:)r   )r   r   rU   r7   r   rW   rX   r¯   rZ   r“   rŸ   r   Ú_blank_slate_walkthroughr¬   r   )r   r   rR   r   rU   r7   r   rW   rX   r¯   rZ   Úpaths   &&&         r   Ú_run_blank_slate_setupr³   Ý   s  € ÷÷ ó ñ Ð$¨$Õ/Ù	Ð
MØ
JØ
IÈ2Ø
SØ
=Ø
EØ
FØ
;¸TôCñ Ð9Ô:Ù˜Ô Ù�Ôñ Ð.Ô/Ù˜6Ô"ô " &Ô)Ü  Ô(Ù�ÔÜ	„GÙÐ-Ô.ÙÐQÔRÙÐGÔHñ Ð-°4Õ8ÙÐBØFØSðEð 	ó
€Dð ˆq„yÜ  Ô5ÙÙ�Ôô    oÔ6Ü�fÐ+PÐRyØ?÷Ar   c                ó$   € V ^8„  d   QhR\         /# rv   r3   )r   s   "r   r   r     s   € ÷ :Rñ :R¤Tñ :Rr   c                ó¤  aaa€ ^ RI HoHpHpHoHoHpHpHp V! RRR7       V! R4       V! RRR7      pR	 V3R
 llpR V3R llp	\        V'       * RV'       d   TMT	V3R lR7       V! RRR7       S! RRR4       V! RRR7      '       d    ^ RI
Hp
 V
! RV R7       \        V 4       MV! R4       R F*  w  rÍrïV! VRR7       T! V! VRR7      '       d   TMT4       K,  	  \!        4        V! RRR7      '       d	   V! V 4       V! V 4       \#        WR4       R#   \         d,   p\        P                  RT4       S! RT 24        Rp?L™Rp?ii ; i)zIOpt-in walkthrough for Blank Slate: skills, tools, plugins, MCP, gateway.)r   rU   r7   r   rV   Úprompt_yes_norX   rY   zBundled SkillsTr[   z4Blank Slate ships with NO bundled skills by default.zBSeed the full bundled skill catalog? (No = start with zero skills)F)Údefaultc                ó   € V ^8„  d   QhRR/# ri   rj   )r   s   "r   r   Ú._blank_slate_walkthrough.<locals>.__annotate__  s   € ÷ :ñ :˜4ñ :r   c                 ó†   <€ \        V \        4      '       d   \        V P                  R . 4      4      M^ pS! RV R24       R# )ÚcopiedzSeeded z bundled skills.N)r   r
   Úlenr‹   )r«   r»   r   s   & €r   Ú_seededÚ)_blank_slate_walkthrough.<locals>._seeded  s9   ø€ Ü2<¸VÄT×2JÒ2J”�V—Z‘Z ¨"Ó-Ô.ÐPQˆÙ˜ ˜xÐ'7Ð8Ö9r   c                ó   € V ^8„  d   QhRR/# ri   rj   )r   s   "r   r   r¹     s   € ÷ :ñ :˜tñ :r   c                 ó   <€ S! R RRR4       R# )z5No skills seeded (except the essential `hermes-agent`z0skill). A .no-bundled-skills marker keeps futurez<`hermes update` runs from re-injecting them. Opt back in anyz(time with `hermes skills opt-in --sync`.Nrj   )Ú_resultr   s   &€r   Ú
_opted_outÚ,_blank_slate_walkthrough.<locals>._opted_out  s   ø€ ÙÐEØ@ØLØ8ö	:r   zskill handlingc                 ó   <€ S! R V  24      # )z'Skill setup step encountered an error: rj   )r0   rV   s   &€r   Ú<lambda>Ú*_blank_slate_walkthrough.<locals>.<lambda>(  s   ø€ ™]Ð-TÐUXÐTYÐ+ZÔ[r   )r©   rª   ÚToolsz2Pick exactly which additional toolsets to turn on.zA(file and terminal are already on; leave the rest off if you wantz the most minimal agent.)z,Open the tool selector to enable more tools?)Útools_command)Úfirst_installr   z#blank-slate tools_command error: %sz$Tool selector encountered an error: NzAKeeping the minimal toolset. Add tools later with `hermes tools`.u6   Connect a messaging platform (Telegram, Discord, â€¦)?z#  Enable more tools:   hermes tools))ÚPluginsz'Review and enable built-in plugins now?zEManage plugins with `hermes plugins list` / `hermes plugins install`.z4No plugins enabled. Add later with `hermes plugins`.)zMCP ServerszAdd an MCP server now?zCAdd servers with `hermes mcp add <name> --url ... | --command ...`.z;No MCP servers configured. Add later with `hermes mcp add`.)r   r   rU   r7   r   rV   r¶   rX   rY   r¬   rˆ   rÈ   r"   r,   r-   r.   r   r   )r   r   rU   r7   r¶   rX   rY   Úseed_skillsr½   rÂ   rÈ   r0   ÚheaderÚquestionÚyes_msgÚno_msgr   r   rV   s   &&              @@@r   r±   r±     sR  ú€ ÷÷ ó ñ Ð! tÕ,ÙÐEÔFÙÐ dÐnsÔt€K÷:ð :÷:ð :ô  ØŒÐ)Ç±gÐR\Ü[õñ �˜dÕ#Ù	Ð
>Ø
MÐOjôláÐCÈU×SÓSð	HÝ=Ù¨°fÕ=Ü Õ'ñ
 	ÐVÔWó.Ñ)ˆ˜'ñ 	�V Õ&Ù™m¨H¸e×DÓD‘7È&ÖQñ.ô 
„GÙÐMÐW\×]Ó]Ù�fÔÙ�ÔÜ�fÐ+PÖQøô/ ô 	HÜ�L‰LÐ>ÀÔDÙÐ@ÀÀÐF×GÑGûð	Hús   ÂD ÄEÄ$!E
Å
Ec                ó$   € V ^8„  d   QhR\         /# rv   r3   )r   s   "r   r   r   N  s   € ÷ G.ñ G.œTñ G.r   c           	     óè  a€ ^ RI HpHpHpHpHpHpHpHp	H	p
H
pHpHp ^ RIHpHpHp V! RRR7       V! RR7      pV Uu. uF  pVP#                  R4      '       g   K  VNK   	  ppV Uu. uF  pVP#                  R4      '       d   K  VNK   	  ppV! 4       pV! 4       w  ppV'       g,   V'       g$   V'       g   VV8  g   V! R	4       V! R
RR4       R
# V'       dÙ   V! R
\%        V4       R24       V F  o\'        RSR,           24       K  	  \'        4        V F•  o\'        4        \'        V! RSR,           2VP(                  4      4       V! RSP#                  RR4       24       SP#                  R4      '       d   V! RSR,           24       V	! SRSR,           2RSR,           24       K—  	  V Uu. uF  pVP#                  R4      R8X  g   K  VNK  	  ppV Uu. uF6  pVP#                  R4      R8X  g   K  VP#                  R4      '       d   K4  VNK8  	  ppV'       d’   V! RRR7       V Uu. uF\  pVP#                  RVR,          4      VP#                  R4      '       d#   RRP+                  VR,          R,          4       2MR,           NK^  	  ppV! R V4       F  pV
! VV,          4       K  	  V'       Ed=   V! R!RR7       V! R"R#4       / p/ pV Fb  o\-        V3R$ l\.         4       R
4      pV'       g   K'  VP1                  V^ ,          . 4      P3                  S4       V^,          VV^ ,          &   Kd  	  \5        V4      p V  U!u. uF  p!VV!,           R%V! 2NK  	  pp!V! R&V4       Fˆ  pV V,          p"V! VV",           R%V" 24       VV",           F[  oV! RSP#                  RR4       24       SP#                  R4      '       d   V! RSR,           24       V	! SR'R(4       \'        4        K]  	  KŠ  	  V'       dI   V! R
R)\%        V4       R*24       V F  p#V! R+V#R,,           R-V#R.,           24       K!  	  VV R/&   V! V 4       V! W4       R
# u upi u upi u upi u upi u upi u up!i )0u6   Quick setup â€” only configure items that are missing.)ÚcolorÚColorsr   rU   r7   r   r   Ú_prompt_and_save_env_varÚ_prompt_api_keyÚ_section_ruleÚprompt_checklistrX   )Úget_missing_env_varsÚget_missing_config_fieldsÚcheck_config_versionu"   Quick Setup â€” Missing Items OnlyTr[   F)Úrequired_onlyÚis_requiredz(Everything is configured! Nothing to do.Nz:Run 'hermes setup' and choose 'Full Setup' to reconfigure,z)or pick a specific section from the menu.z required setting(s) missing:u	        â€¢ ÚnamerB   Údescriptionr°   Úurlz  Get key at: z  Saved z
  Skipped ÚcategoryÚtoolÚ	messagingÚadvancedzTool API KeysÚtoolsu    â†’ z, :Nr   Nz(Which tools would you like to configure?zMessaging Platformsz7Connect Hermes to messaging apps to chat from anywhere.z:You can configure these later with 'hermes setup gateway'.c              3   óN   <"  € T F  w  rq1SR ,          9   g   K  W#3x € K  	  R# 5i)rÝ   Nrj   )Ú.0ÚneedleÚplatÚemojiÚvars   &   €r   Ú	<genexpr>Ú#_run_quick_setup.<locals>.<genexpr>~  s(   øé € ÐqÑCWÑ,?¨F¸%ÐehÐioÕepÑ[pœ-˜4�-ÓCWùs   ƒ%š%Ú z)Which platforms would you like to set up?u     âœ“ Savedz	  SkippedzAdding z& new config option(s) with defaults...z  Added Úkeyz = r·   Ú_config_version)r   rÒ   rÓ   r   rU   r7   r   r   rÔ   rÕ   rÖ   r×   rX   Úhermes_cli.configrØ   rÙ   rÚ   r‹   r¼   r   ÚCYANÚjoinÚnextÚ_MESSAGING_PLATFORMSr†   ÚappendÚlist)$r   r   rÒ   rÓ   r   rU   r7   r   r   rÔ   rÕ   rÖ   r×   rX   rØ   rÙ   rÚ   Úmissing_envÚvÚmissing_requiredÚmissing_optionalÚmissing_configÚcurrent_verÚ
latest_verÚmissing_toolsÚmissing_messagingrê   ÚlabelsÚidxÚgroupedÚemojisÚmatchÚplatform_orderÚprè   Úfields$   &&                        `         r   Ú_run_quick_setupr  N  s@  ø€ ÷÷ ÷ ó ÷ jÑiÙÐ5¸4Õ@ñ '°UÔ;€KÙ#.ÓG¡;˜a°!·%±%¸×2FŸ˜¡;ÐÐGÙ#.ÓK¡;˜a°a·e±e¸M×6JŸ˜¡;ÐÐKÙ.Ó0€NÙ2Ó4Ñ€K�ß× 0·NÀkÐT^ÔF^ÙÐ@ÔAÙˆdÐPØ9ô	;áßÙˆd”sÐ+Ó,Ð-Ð-JÐKÔLÛ#ˆCÜ�I˜c &�k˜]Ð+Ö,ñ $äŒÛ#ˆCÜŒGÜ‘%˜"˜S �[˜MÐ*¨F¯K©KÓ8Ô9Ù˜˜CŸG™G M°2Ó6Ð7Ð8Ô9Ø�w‰w�u�~Š~Ù˜^¨C°­J¨<Ð8Ô9Ù$ S¨H°S¸µ[°MÐ*BÀjÐQTÐU[ÕQ\ÐP]ÐD^Ö_ñ $ñ !1ÓPÑ 0˜1°A·E±E¸*Ó4EÈÑ4O—Q�QÑ 0€MÐPÙ$4ÓsÑ$4˜q¸¿¹¸jÓ8IÈ[Ñ8XœÐab×afÑafÐgq×arŸ˜Ñ$4ÐÐsßÙ�_¨$Õ/á*ó,Ù*�cð —'‘'˜-¨¨V­Ó5Ðbe×biÑbiÐjq×brÒbr¸5ÀÇÁÈ3ÈwÍ<ÐXZÕK[ÓA\Ð@]Ñ9^Ðxz×{Ð{Ù*ð 	ð ,á#Ð$NÐPVÖWˆCÙ˜M¨#Õ.Ö/ñ XçÐÙÐ*°Õ5ÙÐGØJô	Lð $&ˆØˆÛ$ˆCÜÔqÕCWÓqÐswÓxˆEß‰uØ×"Ñ" 5¨¥8¨RÓ0×7Ñ7¸Ô<Ø#(¨¥8��u˜Q•xÓ ñ	 %ô
 ˜g›ˆÙ.<Ó=©n¨�V˜A•Y�K˜q  Ó$©nˆÐ=Ù#Ð$OÐQWÖXˆCØ! #Õ&ˆDÙ˜V D�\˜N¨!¨D¨6Ð2Ô3Ø˜t—}�}�Ù˜R §¡¨°rÓ :Ð;Ð<Ô=Ø—7‘7˜5—>’>Ù  C¨¥J <Ð0Ô1Ù(¨¨m¸[ÔIÜ–ó %ñ Y÷ Ùˆd�gœc .Ó1Ð2Ð2XÐYÔZÛ#ˆEÙ˜H U¨5¥\ N°#°e¸IÕ6FÐ5GÐHÖIñ $à$.ˆÐ Ñ!Ù�FÔÙ˜Ö-ùòy HùÚKùò( QùÚsùò,ùò" >sG   ¿QÁQÁ)QÂQÆ7Q ÇQ Ç Q%Ç=Q%ÈQ%È43Q*É(.Q*ÍQ/))ÚTELEGRAMÚTelegramu   ðŸ“±)ÚDISCORDÚDiscordu   ðŸ’¬)ÚSLACKÚSlacku   ðŸ’¼)NN)Ú__doc__rM   Úloggingrp   rn   Úpathlibr   Ú	getLoggerr-   rô   r   r"   r1   rO   rg   re   r“   rŸ   r¬   r³   r±   r  rj   r   r   Ú<module>r     sŠ   ðñEó Û Û 	Û 
Ý à	×	Ò	Ð-Ó	.€ð vÐ ð.Ðcg÷ .ð!¸5÷ !õõ&$õ>1.õhKõ0Sõ<D÷õ 1Aõh:R÷zG.r   