+
    jHàj¯@  ã                   óœ  € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	H
t
 ^ RIHt ]P                  ! R4      t^ RIHtHt ]! RRR	R
R7      tR R ltR2R R lltRR/R R lltR R ltR R ltR3R 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' lt!. R4Ot"R(]R)]R*]R,]R-]R+] /t#R*R5R-R.R/]3/t$R0 R1 lt%^ RI&H't( R# )6zìTerminal-backend setup wizard (local/docker/modal/daytona/vercel/ssh/plugin).
setup.py names are resolved through the module object so test patches on ``hermes_cli.setup.<name>``
take effect; setup.py re-exports the public entry points.N)ÚPath)Útool_backend_helpers)Údocker_runtime_nameÚfind_docker)Únous_subscriptionzhermes_cli.setup)ÚDEFAULT_SANDBOX_IMAGEÚDEFAULT_VERCEL_IMAGETzutf-8Úreplace)Úcapture_outputÚtextÚencodingÚerrorsc                ó$   € V ^8„  d   QhR\         /# ©é   Úconfig©Údict)Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/setup_terminal.pyÚ__annotate__r      s   € ÷ )2ñ )2¬Dñ )2ó    c                ó  € V P                  R/ 4      p\        P                  ! RRRR4       VP                  R4      ;'       g    \        p\        P
                  ! RV4      P                  4       ;'       g    TpW1R&   \        P                  ! RV4       VP                  R	4      '       d#   \        P                  ! R
VR	,          : R24       VP                  RR4      '       d   RMRp\        P
                  ! RV4      P                  4       pVR9   VR&   RR^\        3RRR\        33 F>  w  rgr‰ V	! \        P
                  ! V\        VP                  Wh4      4      4      4      W&   K@  	  VP                  RR4      R 9  d   \        P                  ! R4       RVR&   \        P                  ! RRR4       \        4       p
V
'       d   \        P                  ! R4       \        P                   ! R4       R! Fx  w  r{rÍ\        P"                  ! V4      ;'       g    V'       d   V
P                  VR4      MRp\        P
                  ! WxVR7      pV'       g   Kb  \        P                  ! W¾4       Kz  	  R#   \         d     EKY  i ; i)"zLPrompt for Vercel Sandbox settings without exposing unsupported disk sizing.ÚterminalNzVercel Sandbox settings:z/  Filesystem persistence uses Vercel snapshots.zX  Snapshots restore files only; live processes do not continue after sandbox recreation.Úvercel_imagez6  Image (Vercel managed image or VCR repository[:tag])ÚTERMINAL_VERCEL_IMAGEÚvercel_runtimezterminal.vercel_runtime=zR is deprecated by Vercel and overrides the image; unset it to use the image above.Úcontainer_persistentTÚyesÚnoz-  Persist filesystem with snapshots? (yes/no)Úcontainer_cpuz  CPU coresÚcontainer_memoryz  Memory in MB (5120 = 5GB)i   Úcontainer_diské È  zVVercel Sandbox does not support custom disk sizing; resetting container_disk to 51200.zVercel authentication:z=  Use a long-lived Vercel access token plus project/team IDs.z1  Found defaults in nearest .vercel/project.json.ÚVERCEL_OIDC_TOKENÚ ©Úpassword>   Ú1Úyr   Útrue>   é    r#   ))z    Vercel access tokenÚVERCEL_TOKENNT)z    Vercel project IDÚVERCEL_PROJECT_IDÚ	projectIdF)z    Vercel team IDÚVERCEL_TEAM_IDÚorgIdF)Ú
setdefaultÚ_setupÚ_infoÚgetr   ÚpromptÚstripÚsave_env_valueÚprint_warningÚlowerÚfloatÚintÚstrÚ
ValueErrorÚ_read_nearest_vercel_projectÚ
print_infoÚremove_env_valueÚget_env_value)r   r   Úcurrent_imageÚimageÚpersist_labelÚpersistÚkeyÚlabelÚdefaultÚparseÚlinkedÚenv_varÚ
linked_keyÚsecretÚvalues   &              r   Ú_prompt_vercel_sandbox_settingsrO      s8  € à× Ñ  ¨RÓ0€HÜ
‡L‚L�Ð1Ð3dØkômà—L‘L Ó0×HÐHÔ4H€MÜ�MŠMÐRÐTaÓb×hÑhÓj×{Ð{Ðn{€EØ$ˆ^ÑÜ
×ÒÐ1°5Ô9Ø‡|�|Ð$×%Ò%ä×ÒÐ7¸ÐAQÕ8RÑ7Uð VUð Uô 	Và%Ÿ\™\Ð*@À$×GÒG‘EÈT€MÜ�mŠmÐKÈ]Ó[×aÑaÓc€GØ'.Ð2KÑ'K€HÐ#Ñ$ð 
˜-¨¬EÐ2Ø	Ð:¸DÄ#ÐFó'HÑ"ˆ�Gð	Ù!¤&§-¢-°´s¸8¿<¹<ÈÓ;UÓ7VÓ"WÓXˆH‹Mñ	'Hð ‡|�|Ð$ eÓ,°JÔ>Ü×ÒØdô	fà!&€HÐÑÜ
‡L‚L�Ð/Ð1pÔqÜ)Ó+€FßÜ×ÒÐMÔNÜ
×ÒÐ/Ô0ó/BÑ*ˆ˜
ô ×&Ò& wÓ/×eÐe×R\°F·J±J¸zÈ2Ô4NÐbdˆÜ—’˜e°vÔ>ˆß‰5Ü×!Ò! 'Ö1ó/Bøô ô 	Ûð	ús   Ä27I5É5JÊJc                ó`   € V ^8„  d   QhR\         R,          R\        \        \        3,          /# )r   ÚstartNÚreturn)r   r   r<   )r   s   "r   r   r   ?   s&   € ÷ ñ ¬¨t­ð ¼tÄCÌÀH½~ñ r   c           	     ó²  € T ;'       g    \         P                  ! 4       P                  4       pVP                  4       '       d   VP                  pV.VP
                  O FÊ  pVR,          R,          pVP                  4       '       g   K+   \        P                  ! VP                  RR7      4      p\        T\        4      '       g   / u # R Uu/ uFQ  p\        TP                  T4      \        4      '       g   K*  YE,          P!                  4       '       g   KH  YTT,          bKS  	  upu # 	  / #   \        \        P                  3 d    / u u # i ; iu upi )z=Read project/team defaults from the nearest Vercel link file.z.vercelzproject.jsonz	utf-8-sig)r   )r.   r0   )r   ÚcwdÚresolveÚis_fileÚparentÚparentsÚexistsÚjsonÚloadsÚ	read_textÚOSErrorÚJSONDecodeErrorÚ
isinstancer   r4   r<   r6   )rQ   ÚcurrentÚ	directoryÚproject_fileÚdatarF   s   &     r   r>   r>   ?   s  € à×"Ð"œŸš›
×+Ñ+Ó-€GØ‡�×ÒØ—.‘.ˆØÐ0 §¡Ó0ˆ	Ø  9Õ,¨~Õ=ˆØ×"Ñ"×$Ò$Ùð	Ü—:’:˜l×4Ñ4¸kÐ4ÓJÓKˆDô ˜$¤×%Ò%ØŠIÙ*@ó IÑ*@ 3Ü˜dŸh™h s›m¬S×1ô Ø6:µi·o±o×6Gô �˜#•Y’Ñ*@ñ Iò 	Iñ 1ð €Iøô œ×-Ñ-Ð.ô 	ØŒIð	üòIs$   Â&D/Ã'EÃ;EÄEÄ/EÅEÚconfirm_msgr%   c                ó@   € V ^8„  d   QhR\         R\         R\         RR/# )r   rG   rK   rd   rR   N©r<   )r   s   "r   r   r   S   s(   € ÷ .ñ .œcð .¬Cð .Äð .Èdñ .r   c               ó¶   € \         P                  ! V RR7      pV'       d9   \         P                  ! W4       V'       d   \         P                  ! V4       R# R# R# )z:Prompt for a secret and persist it to .env when non-empty.Tr&   N)r2   r5   r7   Úprint_success)rG   rK   rd   rN   s   &&$ r   Ú_prompt_secret_envri   S   s>   € ä�MŠM˜%¨$Ô/€EßÜ×Ò˜gÔ-ßÜ× Ò  Ö-ñ ñ r   c                óH   € V ^8„  d   QhR\         R\         R\         R\        /# )r   rK   rG   ÚquestionrR   )r<   Úbool)r   s   "r   r   r   \   s(   € ÷ 5ñ 5¤Cð 5´ð 5¼sð 5Ätñ 5r   c                óª   € \         P                  ! V 4      '       g   R# \         P                  ! RV R24       \         P                  ! VR4      '       * # )zHTrue when ``env_var`` is already set and the user declines to update it.Fz  z: already configured)r2   rA   r?   Úprompt_yes_no)rK   rG   rk   s   &&&r   Ú_existing_secret_keepsro   \   sD   € ä×Ò ×(Ò(ÙÜ
×Ò˜˜5˜'Ð!5Ð6Ô7Ü×#Ò# H¨eÓ4Ô4Ð4r   c                ó(   € V ^8„  d   QhR\         RR/# )r   ÚextrarR   Nrf   )r   s   "r   r   r   d   s   € ÷ Vñ V”sð V˜tñ Vr   c                óŽ  € ^ RI p \        V 4       R#   \         d§    \        P                  ! RT  R24        TP                  T .RR7       \        P                  ! T  R24        R#   TP                  \        \        3 d<   p\        P                  ! RT 24       \        P                  ! R4        Rp? R# Rp?ii ; ii ; i)	zEEnable a declared SDK extra without mutating the running interpreter.NzInstalling z SDK...T)Úexplicitz) SDK installed. Restart Hermes to use it.zInstall failed: z!Retry with: hermes setup terminal)ÚpmÚ
__import__ÚImportErrorr2   r?   Ú	sync_venvrh   ÚInstallErrorr]   r=   r8   )rq   rt   Úexcs   &  r   Ú_ensure_sdkrz   d   s²   € ãð
VÜ�5ÖøÜô VÜ×Ò˜K¨ w¨gÐ6Ô7ð	VØ�L‰L˜%˜¨4ˆLÔ0ô
 × Ò  E 7Ð*SÐ!T×Uøð	 —‘¤¬*Ð5ô 	CÜ× Ò Ð#3°C°5Ð!9Ô:Ü×ÒÐA×BÓBûð	Cúð	Vús2   † “%C¹A)ÁCÁ)C Â/B;Â4CÂ;C Ã Cc          
      óZ   € V ^8„  d   QhR\         R,          R\         R\         R\         RR/# )r   ÚfoundNÚmissingÚinstall_hintÚfound_prefixrR   rf   )r   s   "r   r   r   u   s5   € ÷ (ñ (œ# �*ð (¬sð (Ä#ð (ÔUXð (Ðimñ (r   c                 ó¦   € V '       d   \         P                  ! V V  24       R # \         P                  ! V4       \         P                  ! V4       R # ©N)r2   r?   r8   )r|   r}   r~   r   s   &&&&r   Ú_report_binaryr‚   u   s8   € ßÜ×Ò˜\˜N¨5¨'Ð2Ö3ä×Ò˜WÔ%Ü×Ò˜,Ö'r   c                ó(   € V ^8„  d   QhR\         RR/# ©r   r   rR   Nr   )r   s   "r   r   r   }   s   € ÷ ;ñ ;¤ð ;¨$ñ ;r   c                 óÈ   € \         P                  ! R 4       \         P                  ! R4       V R,          P                  R\	        \
        P                  ! 4       4      4       R# )zTerminal backend: Localz&Commands run directly on this machine.r   rT   N)r2   rh   r?   r1   r<   r   Úhome©r   s   &r   Ú_setup_backend_localrˆ   }   s@   € Ü
×ÒÐ2Ô3Ü
×ÒÐ>Ô?à
ˆ:Õ×!Ñ! %¬¬T¯YªY«[Ó)9Ö:r   c                ó(   € V ^8„  d   QhR\         RR/# r„   r   )r   s   "r   r   r   „   s   € ÷ kñ k¤$ð k¨4ñ kr   c                 ó  € \         P                  ! R 4       \        4       p\        TRRV'       d   \	        V4       R2MR4       V R,          P                  R\        4       \         P                  ! RRR	R
4       \         P                  ! RR4      '       dX   V P                  R/ 4      pRVR&   VP                  RR4       \         P                  ! R4       \         P                  ! R4       R# \         P                  ! R4       R# )z!Terminal backend: Docker / Podmanz#Docker or Podman not found in PATH!zbInstall Docker: https://docs.docker.com/get-docker/ or Podman: https://podman.io/docs/installationz found: r%   r   Údocker_imageNzFDocker sandboxes can be protected with the egress credential firewall.ziIt routes sandbox traffic through iron-proxy so containers receive proxy tokens instead of real API keys.zR   Docker only for now; Modal, SSH, Daytona and plugin backends are not wired yet.z.  Enable egress firewall for Docker sandboxes?FÚproxyTÚenabledÚenforce_on_dockerz!Egress firewall enabled in configzYRun `hermes egress setup` then `hermes egress start` to mint tokens and launch the proxy.zMSkipping egress firewall. You can enable it later with `hermes egress setup`.)
r2   rh   r   r‚   r   r1   Ú_SANDBOX_IMAGEr3   rn   r?   )r   Ú
docker_exeÚ	proxy_cfgs   &  r   Ú_setup_backend_dockerr’   „   sè   € Ü
×ÒÐ<Ô=Ü“€JÜ�:ÐDðDçCMÔ)¨*Ó5Ð6°hÑ?ÐSUôWð
 ˆ:Õ×!Ñ! .´.ÔAÜ
‡L‚L�Ð_ð:àeôgô ×ÒÐLÈe×TÒTØ×%Ñ% g¨rÓ2ˆ	Ø#ˆ	�)ÑØ×ÑÐ0°$Ô7Ü×ÒÐ@ÔAÜ×ÒØgö	iô 	×ÒÐiÖjr   c                ó(   € V ^8„  d   QhR\         RR/# r„   r   )r   s   "r   r   r   œ   s   € ÷ Gñ G¤ð G¨$ñ Gr   c                 óì  € \         P                  ! R 4       \         P                  ! R4       ^ RIHp ^ RIHp \        \        P                  ! 4       ;'       d1    \        P                  ! V 4      P                  ;'       d	    V! R4      4      pV! \         P                  ! V RR4      4      pRpV'       dR   R^ R	^/P                  T\         P                  ! R
4      '       d   ^M^ 4      p\         P                   ! RRR.V4      ^ 8H  pV'       ds   RV R,          R&   \         P                  ! R4       \         P                  ! R
4      '       g   \         P                  ! R4      '       d   \         P                  ! R4       R# R	V R,          R&   \         P                  ! R4       \#        R4       \         P$                  ! RRR4       \'        R
RR4      '       d   R# \)        RR
4       \)        RR4       R# )zTerminal backend: Modalz@Serverless cloud sandboxes. Each session gets its own container.)Úis_managed_tool_gateway_ready)Únormalize_modal_modeÚmodalr   Ú
modal_modeFÚmanagedÚdirectÚMODAL_TOKEN_IDz,Select how Modal execution should be billed:zUse my Nous subscriptionzUse my own Modal accountzPModal execution will use the managed Nous gateway and bill to your subscription.ÚMODAL_TOKEN_SECRETzZDirect Modal credentials are still configured, but this backend is pinned to managed mode.Nz+Requires a Modal account: https://modal.comzModal authentication:z/  Get your token at: https://modal.com/settingszModal tokenz  Update Modal credentials?z    Modal Token IDz    Modal Token Secret)r2   rh   r?   Útools.managed_tool_gatewayr•   Útools.tool_backend_helpersr–   rl   r   Úmanaged_nous_tools_enabledr   Úget_nous_subscription_featuresÚnous_auth_presentÚcfg_getr4   rA   Úprompt_choicerz   r3   ro   ri   )r   r•   r–   Úmanaged_modal_availabler˜   Úuse_managed_modalÚdefault_idxs   &      r   Ú_setup_backend_modalr§   œ   s¦  € Ü
×ÒÐ2Ô3Ü
×ÒÐXÔYÝHÝ?Ü"Ü×7Ò7Ó9÷ 	3ð 	3Ü×<Ò<¸VÓD×VÑV÷	3ð 	3á)¨'Ó2ó4Ðñ &¤f§n¢n°V¸ZÈÓ&VÓW€JØÐßà  ! X¨qÐ1×5Ñ5°jÄv×G[ÒG[Ð\l×GmÒGmÁ!ÐstÓuˆÜ"×0Ò0Ø:Ø'Ð)CÐDÀkóSàVWñXÐ÷ Ø+4ˆˆzÕ˜<Ñ(Ü×ÒÐlÔmÜ×ÒÐ 0×1Ò1´V×5IÒ5IÐJ^×5_Ò5_Ü×ÒØlônáØ'/€Fˆ:Õ�|Ñ$Ü
×ÒÐCÔDÜ�ÔÜ
‡L‚L�Ð.Ð0aÔbÜÐ.°Ð?\×]Ò]ÙÜÐ+Ð-=Ô>ÜÐ/Ð1EÖFr   c                ó(   € V ^8„  d   QhR\         RR/# r„   r   )r   s   "r   r   r   ¾   s   € ÷ Cñ C¤4ð C¨Dñ Cr   c                 óZ  € \         P                  ! R 4       \         P                  ! RRR4       \        R4       \	        4        \        \         P                  ! R4      4      p\        RRR4      '       g   \        RRV'       d   R	MR
R7       V R,          P                  R\        4       R# )zTerminal backend: Daytonaz*Persistent cloud development environments.zBEach session gets a dedicated sandbox with filesystem persistence.zSign up at: https://daytona.ioÚdaytonaÚDAYTONA_API_KEYzDaytona API keyz  Update API key?z    Daytona API keyz    Updatedz    Configured)rd   r   Údaytona_imageN)r2   rh   r3   rz   Úprintrl   rA   ro   ri   r1   r�   )r   Úhad_keys   & r   Ú_setup_backend_daytonar¯   ¾   s‰   € Ü
×ÒÐ4Ô5Ü
‡L‚LÐ=ØUØ1ô3ô �	ÔÜ	„GÜ”6×'Ò'Ð(9Ó:Ó;€GÜ!Ð"3Ð5FÐH[×\Ò\ÜÐ0Ð2Cß8?¡}ÐEUõ	Wà
ˆ:Õ×!Ñ! /´>ÖBr   c                ó(   € V ^8„  d   QhR\         RR/# r„   r   )r   s   "r   r   r   Ì   s   € ÷ ,ñ ,¤$ð ,¨4ñ ,r   c                 óŒ   € \         P                  ! R 4       \         P                  ! RR4       \        R4       \	        V 4       R# )z Terminal backend: Vercel SandboxzDCloud microVM sandboxes with snapshot-backed filesystem persistence.z?Requires the optional Vercel SDK (installed through Hermes PM).ÚvercelN)r2   rh   r3   rz   rO   r‡   s   &r   Ú_setup_backend_vercelr³   Ì   s4   € Ü
×ÒÐ;Ô<Ü
‡L‚LÐWØRôTä�ÔÜ# FÖ+r   c                ó(   € V ^8„  d   QhR\         RR/# r„   r   )r   s   "r   r   r   Ô   s   € ÷ Iñ Iœtð I¨ñ Ir   c           	      óh  € \         P                  ! R 4       \         P                  ! R4       RRR\        P                  ! RR4      3RRR	\        \        P                  ! 4       R
,          R,          4      33p. pV F¢  w  r4p\         P                  ! T\         P                  ! V4      ;'       g    T4      pVP                  V4       V'       d'   VR8w  g   VR8w  d   \         P                  ! WF4       Kz  VR8X  g   Kƒ  VR8X  g   KŒ  \         P                  ! V4       K¤  	  Vw  rxršV'       Ed   \         P                  ! RR4      '       dä   \         P                  ! R4       ^ RIp. ROV
'       d   RV
.M. OV	'       d   V	R8w  d   RV	.M. OV'       d   V RV 2MTNRNpVP                  ! V3R^
/\         BRR/B pVP"                  ^ 8X  d   \         P                  ! R4       R# \         P$                  ! RVP&                  P)                  4        24       \         P                  ! R4       R# R# R# )zTerminal backend: SSHz)Run commands on a remote machine via SSH.r%   z
  SSH userÚTERMINAL_SSH_USERÚUSERÚTERMINAL_SSH_PORTÚ22z  SSH private key pathÚTERMINAL_SSH_KEYz.sshÚid_rsaz  Test SSH connection?Tz  Testing connection...Nz-iz-pÚ@zecho okÚtimeoutÚcheckFz  SSH connection successful!z  SSH connection failed: z'  Check your SSH key and host settings.)z  SSH host (hostname or IP)ÚTERMINAL_SSH_HOSTr%   )z
  SSH portr¸   r¹   )Ússhú-ozBatchMode=yesrÁ   zConnectTimeout=5)r2   rh   r?   ÚosÚgetenvr<   r   r†   r5   rA   Úappendr7   r@   rn   Ú
subprocessÚrunÚ_RUN_KWÚ
returncoder8   Ústderrr6   )r   ÚfieldsÚvaluesrG   rK   rH   rN   ÚhostÚuserÚportÚssh_keyrÅ   Ússh_cmdÚresults   &             r   Ú_setup_backend_sshrÒ   Ô   sê  € Ü
×ÒÐ0Ô1Ü
×ÒÐAÔBð 	AØ	Ð*¬B¯IªI°f¸bÓ,AÐBØ1Ø	!Ð#5´s¼4¿9º9»;ÈÕ;OÐRZÕ;ZÓ7[Ð\ð	^€Fð
 €FÛ#)Ñˆ˜Ü—’˜e¤V×%9Ò%9¸'Ó%B×%MÐ%MÀgÓNˆØ�‰�eÔß�gÐ!4Ô4¸À¼Ü×!Ò! 'Ö1ØÐ+Ö+°¸¶ô ×#Ò# GÖ,ñ $*ð !'Ñ€D�ß€t”×$Ò$Ð%=¸t×DÒDÜ×ÒÐ3Ô4Ûòt×`gÈdÐT[É_Ðmoð tß%)¨d°d¬l�d˜D‘\ÀðtßY]ÈÀvÈQÈtÈfÑEUÐcgðtØirðtˆà—’ ÑL°ÐL´wÑLÀeÒLˆØ×Ñ Ô!Ü× Ò Ð!?Ö@ä× Ò Ð#<¸V¿]¹]×=PÑ=PÓ=RÐ<SÐ!TÔUÜ×ÒÐGÖHñ E�tr   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r   ÚbackendrR   N)r   r<   )r   s   "r   r   r   õ   s&   € ÷ 	Iñ 	I¤$ð 	I´ð 	I¸ñ 	Ir   c                 óH  €  ^ RI Hp V! V4      p\        P                  ! RVP                   24       VP                  4        F  p\        P                  ! V4       K  	  VP                  4        R#   \         d%   p\        P                  ! RT 24        Rp?R# Rp?ii ; i)r+   )Úget_providerzTerminal backend: z"Backend plugin setup hook failed: N)
Úagent.terminal_env_registryrÖ   r2   rh   Údisplay_nameÚsetup_instructionsr?   Ú
post_setupÚ	Exceptionr8   )r   rÔ   rÖ   ÚproviderÚlinery   s   &&    r   Ú_setup_backend_pluginrÞ   õ   sŠ   € ðIÝ<Ù Ó(ˆÜ×ÒÐ1°(×2GÑ2GÐ1HÐIÔJØ×/Ñ/Ö1ˆDÜ×Ò˜dÖ#ñ 2à×ÑÖøÜô IÜ×ÒÐAÀ#ÀÐG×HÒHûðIús   ‚A.A2 Á2B!Á=BÂB!ÚlocalÚdockerr—   rÀ   rª   Úvercel_sandboxr   r   c                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r     s   € ÷ (Iñ (I¤4ñ (Ir   c                ó&  € \         P                  ! R4       \         P                  ! RRR\         P                   R2R4       \         P                  ! V RRR	R
7      p\        \        4      p. p ^ RIHp V! 4        ^ RI	H
p V! 4        Fg  pVP                  P                  4       P                  4       pVP                  WvP                   RVP                    234       VP                  V4       Ki  	  V UU	u. uF  w  r‰V	NK	  	  up	pRV R2.,           p
\         P$                  ! RV
\'        V4      4      pV\'        V4      8X  d   \         P(                  ! RV 24       R# ^ Tu;8:  d   \'        V4      8  d   M MW+,          ^ ,          MRpWÀP+                  R/ 4      R&   \,        P/                  V4      pVe   VR8w  g   WÃ9  d
   V! V 4       MWÃ9   d   \1        W4       \         P2                  ! RV4       V\4        9   d>   \4        V,          w  rïp\         P2                  ! WàR,          P/                  VV4      4       \         P6                  ! V 4       \9        4        \         P:                  ! RV 24       R#   \"         d     EL–i ; iu up	pi )z)Configure the terminal execution backend.zTerminal Backendz1Choose where Hermes runs shell commands and code.z8This affects tool execution, file access, and isolation.z
   Guide: z8/user-guide/configuration#terminal-backend-configurationNr   rÔ   rß   )rH   )Údiscover_plugins)Úlist_providersz - zKeep current (Ú)zSelect terminal backend:zKeeping current backend: rÀ   ÚTERMINAL_ENVzTerminal backend set to: )r2   Úprint_headerr3   Ú
_DOCS_BASEr¢   ÚlistÚ_BUILTIN_TERMINAL_BACKENDSÚhermes_cli.pluginsrä   r×   rå   Únamer6   r9   rÄ   rØ   ÚdescriptionrÛ   r£   Úlenr?   r1   Ú_TERMINAL_BACKEND_SETUPr4   rÞ   r7   Ú_BACKEND_ENV_MIRRORÚsave_configr­   rh   )r   Úcurrent_backendÚbackendsÚplugin_backend_namesrä   rå   rÜ   ÚpnameÚ_rG   Úterminal_choicesÚterminal_idxÚselected_backendÚhandlerrK   rF   rH   s   &                r   Úsetup_terminal_backendrü     s=  € ä
×ÒÐ*Ô+Ü
‡L‚LÐDØKØœf×/Ñ/Ð0Ð0hÐiÐkoôqô —n’n V¨Z¸ÈGÔT€OÜÔ.Ó/€Hð Ðð	Ý7ÙÔÝ>Ù&Ö(ˆHØ—M‘M×'Ñ'Ó)×/Ñ/Ó1ˆEØ�O‰O˜U×'<Ñ'<Ð&=¸SÀ×AUÑAUÐ@VÐ$WÐXÔYØ ×'Ñ'¨Ö.ñ )ñ /7Ô7©h¡( !›©hÒ7¸^ÈOÐK\Ð\]Ð;^Ð:_Õ_ÐÜ×'Ò'Ð(BÐDTÔVYÐZbÓVcÓd€LØ”s˜8“}Ô$Ü×ÒÐ5°oÐ5FÐGÔHÙØ45¸Ö4UÌÈHË×4U�xÕ-¨aÖ0Ð[_ÐØ3C×Ñ�j "Ó% iÑ0ä%×)Ñ)Ð*:Ó;€GØÒÐ 0°EÔ 9Ð=MÔ=iÙ��Ø	Ô	1Ü˜fÔ7Ü
×Ò˜.Ð*:Ô;ØÔ.Ô.Ü 3Ð4DÕ EÑˆ�gÜ×Ò˜g¨jÕ'9×'=Ñ'=¸cÀ7Ó'KÔLÜ
×Ò�vÔÜ	„GÜ
×ÒÐ4Ð5EÐ4FÐGÖHøô+ ô Úðüã7s   Á.BI; Ã8JÉ;J
Ê	J
r�   )zFound: ))rß   z.Local - run directly on this machine (default))rà   z>Docker/Podman - isolated container with configurable resources)r—   z Modal - serverless cloud sandbox)rÀ   zSSH - run on a remote machine)rª   z2Daytona - persistent cloud development environment)rá   zCVercel Sandbox - cloud microVM with snapshot filesystem persistence)ÚTERMINAL_MODAL_MODEr˜   Úauto))Ú__doc__rZ   ÚloggingrÂ   Úpathlibr   Útoolsr   Útools.environments.dockerr   r   Ú
hermes_clir   Ú	getLoggerÚloggerÚhermes_cli.config_defaultsr   r�   r   r   rÇ   rO   r>   ri   ro   rz   r‚   rˆ   r’   r§   r¯   r³   rÒ   rÞ   rë   rð   rñ   rü   Úhermes_cli.setupÚsetupr2   © r   r   Ú<module>r     s÷   ðñ=ó Û Û 	Ý Ý &ß FÝ (à	×	Ò	Ð-Ó	.€ç dÙ
˜d¨¸È	Ô
R€õ)2÷Xð(.Àr÷ .õ5õV÷"(õ;õkõ0GõDCõ,õIõB	Iò_Ð ð Ð! 8Ð-BÀGÐMaØÐ%Ð'7Ð9NÐPUÐWiðkÐ ð
 Ð MØ'Ð*AÀ>ÐSgÐ)hðjÐ õ(I÷V "r   