+
    lHàjV  ã                   ó¶  a€ RV tO0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IH t H!t!H"t"H#t# ]PH                  ! R4      t%Rs&] ^ k R R lt'R R lt(R R lt)Rt*RWt+Rt,RXt-RYt.RZR[R\R]R^R_R`R. 3RaR. 3R/ 3RbR. 3RcRdReRfRgRhRi3t/RR. 3RjRR. 3RR/ 3RkRlRR. 3RmRnRoRpRq3t0R R lt1R  R! lt2R" R# lt3R$ R% lt4R& R' lt5R( R) lt6R* R+ lt7R,R/R- lt8R. t9R/ t:R0R1 RR2 3R3R4 RR5 3/t;R6 t<]Pz                  ! ]<R04      t>]Pz                  ! ]<R34      t?R7R/R8 lt@R9 R: ltAR; tBR<]8R=]9R>]:R0]>R3]?R?]@/tCRrR@ RA lltDRB RC ltERD RE ltFRF RG ltGRH RI ltHR</ R=RJRK RLRM3/R?RN]G/R>RN]FRORs/R3RN]E/R0RP]H//tI] ^k R=RQ/tJRR RS ltKRT RU ltL]I U u/ uF  q ]P{                  ]KV 4      bK  	  up tM]MR3,          tNR# u up i )ta  Execution-environment backends for the terminal tool: per-backend builders, config-to-kwargs
shapers, and requirement checkers, routed by dispatch/spec tables. Split out of ``tools/terminal_tool.py``;
the terminal tool imports the builders/checkers it uses from here.N)ÚAnyÚDictÚOptional)ÚDockerEnvironment)ÚLocalEnvironment)ÚManagedModalEnvironment)ÚModalEnvironment)ÚSSHEnvironment)Úis_managed_tool_gateway_ready)Ú_get_plugin_env_provider)Úhas_direct_modal_credentialsÚmanaged_nous_tools_enabledÚ%nous_tool_gateway_unavailable_messageÚresolve_modal_backend_stateztools.terminal_toolc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚreasonÚreturn©ÚstrÚbool)Úformats   "ÚA/home/ubuntu/.hermes/hermes-agent/tools/terminal_tool_backends.pyÚ__annotate__r      s   € ÷ ñ ”Cð œDñ ó    c                ó4   € V s \        P                  V 4       R# )zWLog *reason*, remember it for the user-facing notice, and return False for the checker.F)Ú_last_unavailable_reasonÚloggerÚerror©r   s   &r   Ú_rejectr       s   € ð  &ÐÜ
‡L�L�ÔÙr   c                ó>   € V ^8„  d   QhR\         \        ,          RR/# )r   r   r   N©r   r   )r   s   "r   r   r   '   s   € ÷ &ñ &¤x´¥}ð &¸ñ &r   c                ó
   € V s R# )z^Store (or clear) the last failure reason without logging; used by check_terminal_requirements.N©r   r   s   &r   Ú_record_unavailable_reasonr%   '   s
   € ð  &Òr   c                ó:   € V ^8„  d   QhR\         \        ,          /# )r   r   r"   )r   s   "r   r   r   -   s   € ÷ $ñ $¬X´c­]ñ $r   c                 ó   € \         # )zUWhy the last terminal requirements check failed, in plain words; None when it passed.r$   © r   r   Ú#terminal_backend_unavailable_reasonr)   -   s   € ä#Ð#r   z/vercel/sandboxz2local, docker, modal, daytona, vercel_sandbox, sshTÚdocker_volumesFÚdocker_forward_envÚ
docker_envÚdocker_extra_argsÚvolumesÚforward_envÚenvÚ
extra_argsc                óR   € V ^8„  d   QhR\         \        \        3,          R\         /# ©r   Úconfigr   ©Údictr   r   )r   s   "r   r   r   O   s&   € ÷ Nñ N¤D¬¬c¨¥Nð N´tñ Nr   c           
     óh   € \          UUUu/ uF  w  rq1V P                  W#4      bK  	  uppp# u upppi )zZ``ssh_config`` for :func:`_create_environment` (shared with the lazy ``ensure_task_env``).)Ú	_SSH_KEYSÚget)r4   ÚoutÚkeyÚdefaults   &   r   Ú_ssh_config_from_configr=   O   s+   € åCLÕMÁ9Ñ.?¨c¸�—‘˜CÓ)Ò)Á9ÓMÐMùÔMó   ‹-c                óR   € V ^8„  d   QhR\         \        \        3,          R\         /# r3   r5   )r   s   "r   r   r   T   s&   € ÷ @ñ @¤d¬3´¨8¥nð @¼ñ @r   c                ó*   € RV P                  RR4      /# )zY``local_config`` for :func:`_create_environment` (TERMINAL_LOCAL_PERSISTENT, default on).Ú
persistentÚlocal_persistentT©r9   ©r4   s   &r   Ú_local_config_from_configrE   T   s   € à˜&Ÿ*™*Ð%7¸Ó>Ð?Ð?r   c                óR   € V ^8„  d   QhR\         \        \        3,          R\         /# r3   r5   )r   s   "r   r   r   Y   s"   € ÷ =ñ =¬$¬s´C¨x­.ð =¼Tñ =r   c           	     ó`   € \          UUu/ uF  w  rWP                  W4      bK  	  upp# u uppi )z```container_config`` for :func:`_create_environment` (shared with the lazy ``ensure_task_env``).)Ú_CONTAINER_KEYSr9   )r4   ÚkÚds   &  r   Ú_container_config_from_configrK   Y   s(   € å,;Ô<©O¡D AˆA�z‰z˜!ÓÒ©OÒ<Ð<ùÓ<s   Š*c                óR   € V ^8„  d   QhR\         \        \        3,          R\         /# )r   Úccr   r5   )r   s   "r   r   r   ^   s&   € ÷ Oñ O”4œœS˜•>ð O¤dñ Or   c           
     óh   € \          UUUu/ uF  w  rq1V P                  W#4      bK  	  uppp# u upppi )zICommon sandbox resource kwargs (cpu/memory in MB/disk in MB/persistence).)Ú_RESOURCE_KEYSr9   )rM   r:   r;   r<   s   &   r   Ú
_resourcesrP   ^   s+   € å?MÕN¹~Ñ*;¨#°G�—‘˜Ó%Ò%¹~ÓNÐNùÔNr>   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úruntimer   r   )r   s   "r   r   r   c   s   € ÷ @ñ @¬#ð @´$ñ @r   c                 ó2   € V '       * ;'       g
    V \         9   # )N)Ú_SUPPORTED_VERCEL_RUNTIMES)rR   s   &r   Ú_is_supported_vercel_runtimerU   c   s   € ØŒ;×?Ð?˜'Ô%?Ñ?Ð?r   c                ó`   € V ^8„  d   QhR\         R,          R\        \        \        3,          /# )r   Ú
modal_modeNr   )Úobjectr6   r   r   )r   s   "r   r   r   g   s*   € ÷ ]ñ ]¬°$­ð ]¼4ÄÄSÀ½>ñ ]r   c                ó@   € \        V \        4       \        R4      R7      # )z2Resolve direct vs managed Modal backend selection.Úmodal)Ú
has_directÚmanaged_ready)r   r   r
   )rW   s   &r   Ú_get_modal_backend_stater]   g   s"   € ä& zÔ>ZÓ>\Ü5RÐSZÓ5[ô]ð ]r   c                ót   € V ^8„  d   QhR\         \        \        3,          R\        \        \        3,          /# )r   Úmodal_stater   )r6   r   r   Útuple)r   s   "r   r   r   m   s.   € ÷ Wñ W¬4´´S°­>ð W¼eÄCÌÀH½oñ Wr   c                ó<  € \        R4      pV R,          '       g   V R,          R8X  d%   V R,          '       d   RV R2MRV 2pRV 2R	V 23# \        4       pV R,          R
8X  d   RV'       d   RMR R2R3# V'       d   RMRpV'       d   RMRpRV RV R2RV R23# )z•(log message, ValueError message) for a modal_state with no selected backend.
Single decision shared by the requirements checker and the env builder.zmanaged Modal executionÚmanaged_mode_blockedÚmodeÚmanagedzgNous Tool Gateway access is not currently available and no direct Modal credentials/config were found. zH Choose TERMINAL_MODAL_MODE=direct/auto to use direct Modal credentials.z)the managed tool gateway is unavailable. z=Modal backend selected with TERMINAL_MODAL_MODE=managed, but z2Modal backend is configured for managed mode, but Údirectz™Modal backend selected with TERMINAL_MODAL_MODE=direct, but no direct Modal credentials/config were found. Configure Modal or choose TERMINAL_MODAL_MODE=zmanaged/autoÚautoÚ.z_Modal backend is configured for direct mode, but no direct Modal credentials/config were found.z!or managed tool gateway was foundz	was foundz , set up the managed gateway, orz orz>Modal backend selected but no direct Modal credentials/config z. Configure Modalz! choose a different TERMINAL_ENV.)r   r   )r_   ÚgatewayÚtailrd   ÚfoundÚfixs   &     r   Ú_modal_unavailable_reasonrl   m   s  € ô 4Ð4MÓN€GØÐ)×*Ô*¨k¸&Õ.AÀYÔ.Nð Ð5×6Ô6ð Ø '˜yÐ(pñrà>gÐhoÐgpÐ<qð 	ð PÐPTÈvÐVØDÀTÀFÐKðMð 	Mä(Ó*€GØ�6Õ˜hÔ&ðMß_fÉ^ÐlrÐLsÐstðvàqðsð 	s÷ 4;Ñ/À€Eß07Ñ
,¸U€CØLÈUÈGð TØ!˜UÐ"CðEàLÈUÈGÐSTÐUðWð Wr   Úlocal_configc                 óP   € \        YT;'       g    / P                  R R4      R7      # )rA   T)ÚcwdÚtimeoutrA   )Ú_LocalEnvironmentr9   )ro   rp   rm   Ú_s   $$$,r   Ú_build_local_envrs   …   s'   € Ü À<×CUÐCUÐSU×BZÑBZÐ[gÐimÓBnÔoÐor   c                 ó‚  € ^ RI HpHpHp	 V	! V4       V! 4       ;'       d    VR8g  ;'       d    V! V4      '       * p
\         UUUu/ uF  w  r¼qÛVP                  WÍ4      bK  	  ppppV
'       d   RVR&   \        RRV RVRVRVR	V/\        V4      BVB pV
'       d    R
Vn        V# V# u upppi   \         d     T# i ; i)é    )Ú!_docker_session_isolation_enabledÚ_has_isolation_overridesÚ_maybe_reap_docker_orphansr<   FÚpersist_across_processesÚimagero   rp   Útask_idÚhost_cwdTr(   )
Útools.terminal_toolrv   rw   rx   Ú_DOCKER_KWARGSr9   Ú_DockerEnvironmentrP   Ú_session_scopedÚAttributeError)rz   ro   rp   rM   r{   r|   rr   rv   rw   rx   Úsession_scopedr:   r;   r<   ÚkwargsÚdocker_env_objs   $$$$$$,         r   Ú_build_docker_envr…   ‰   s  € ÷Añ Añ ˜rÔ"ñ 8Ó9÷ @ð @¸gÈÑ>R÷ @ð @Ù6°wÓ?Ô?ð åAOÕPÁÑ,=¨C°g�2—6‘6˜#Ó'Ò'Á€FÒPßØ-2ˆÐ)Ñ*Ü'ñ D¨eð D¸ð DÀgð DÐW^ð DÐiqð DÜ*4°R«.ðDØ<BñD€N÷ ð	Ø-1ˆNÔ*ð Ðˆ>Ðùô Qøô ô 	ØØÐð	ús   ÁB(ÂB/ Â/B>Â=B>c           	      ó  € \        V4      pR	 Uu/ uF  qvV,          ^ 8”  g   K  WvV,          bK  	  ppVR,          ^ 8”  dK    ^ RIp	R\        P                  ! V	P                  P
                  4      P                  9   d   VR,          VR&   \        VP                  R4      4      p
V
R,          pVR
9  d   \        \        V
4      ^,          4      hVR8X  d   \        M\        pV! WW(VR,          VR7      # u upi   \         d     L}i ; i)ÚcpuÚdiskNÚephemeral_diskrW   Úselected_backendrd   Úpersistent_filesystem)rz   ro   rp   Úmodal_sandbox_kwargsr‹   r{   )r‡   Úmemory)rd   re   )rP   rZ   ÚinspectÚ	signatureÚSandboxÚcreateÚ
parametersÚ	Exceptionr]   r9   Ú
ValueErrorrl   Ú_ManagedModalEnvironmentÚ_ModalEnvironment)rz   ro   rp   rM   r{   rr   ÚresrI   Úsandbox_kwargsrZ   r_   ÚselectedÚclss   $$$$$,       r   Ú_build_modal_envr›   £   sý   € Ü
�R‹.€CÙ):ÓIÑ): AÀ!½fÀq¹j”i�a˜Q�’iÑ):€NÐIØ
ˆ6…{�Q„ð	ÛØ¤7×#4Ò#4°U·]±]×5IÑ5IÓ#J×#UÑ#UÔUØ36°vµ;�Ð/Ñ0ô +¨2¯6©6°,Ó+?Ó@€KØÐ-Õ.€HØÐ,Ô,ÜÔ2°;Ó?ÀÕBÓCÐCØ&.°)Ô&;Õ
"ÔAR€CÙ�U¨WØ%(Ð)@Õ%AÈ7ôTð Tùò Jøô ô 	Ùð	ús   �C6¤C6ÁA	C; Ã;D	ÄD	Údaytonac                  óB   € \         P                  ! R 4      P                  # )ztools.environments.daytona)Ú	importlibÚimport_moduleÚDaytonaEnvironmentr(   r   r   Ú<lambda>r¡   ¹   s   € œ	×/Ò/Ð0LÓM×`Ò`r   c                 ó*   € R \        VR ,          4      /# )r‡   )Úint©rM   Úkws   &&r   r¡   r¡   º   s   €  ¤s¨2¨e­9£~Ñ6r   Úvercel_sandboxc                  óB   € \         P                  ! R 4      P                  # )z!tools.environments.vercel_sandbox)rž   rŸ   ÚVercelSandboxEnvironmentr(   r   r   r¡   r¡   »   s   € œy×6Ò6Ð7ZÓ[×tÒtr   c                 ór   € R V P                  R4      ;'       g    RRV P                  R4      ;'       g    R/# )rR   Úvercel_runtimeNrz   Úvercel_imagerC   r¤   s   &&r   r¡   r¡   ¼   s5   € ¨i¸¿¹Ð@PÓ9Q×9YÐ9YÐUYØ'.°·±°~Ó0F×0NÐ0NÈ$ñ.Pr   c          	      óº   € \         V ,          w  rxp	\        RR VRVRV/\        V4      BV'       d   RV/M/ B p
V
P                  V	! WJ4      4       V! 4       ! R/ V
B # )ro   rp   r{   rz   r(   )Ú_SANDBOX_ROWSr6   rP   Úupdate)Úenv_typerz   ro   rp   rM   r{   rr   rš   Ú
with_imageÚextrarƒ   s   &$$$$$,    r   Ú_build_sandbox_envr²   Á   sk   € Ü*¨8Õ4Ñ€C�UÜñ >�cð > 7ð >°Gð >¼zÈ"»~ð >ß)3�g˜uÑ%¸ñ>€Fà
‡M�M‘%˜Ó#Ô$ÙŒ5‰?�6‰?Ðr   Ú
probe_onlyc                 ó$  € V'       d/   VP                  R 4      '       d   VP                  R4      '       g   \        R4      h\        VR ,          VR,          VP                  R^4      VP                  RR4      WVVP                  RR4      R7      # )	ÚhostÚuserz?SSH environment requires ssh_host and ssh_user to be configuredÚportr;   Ú rA   T)rµ   r¶   r·   Úkey_pathro   rp   r³   rA   )r9   r”   Ú_SSHEnvironment)ro   rp   Ú
ssh_configr³   rr   s   $$$$,r   Ú_build_ssh_envr¼   Í   s}   € ß˜ZŸ^™^¨F×3Ò3¸:¿>¹>È&×;QÒ;QÜÐZÓ[Ð[Ü 
¨6Õ 2¸ÀFÕ9KÐR\×R`ÑR`ÐagÐikÓRlØ$.§N¡N°5¸"Ó$=À3ÐdnØ&0§n¡n°\À4Ó&HôJð Jr   c                ó   € V ^8„  d   QhRR/# )r   r   Nr(   )r   s   "r   r   r   Õ   s   € ÷ ñ °4ñ r   c                ó‚  €  VP                   pVR8X  d   VR8X  d   \        V RR4      MRpMTp\        V\        4      '       d,   VP                  R4      '       d   VR8w  d
    W@n
        R# R# R# R#   \         d1    \        P                  R\	        T4      P
                  RR7       Rp L�i ; i  \         d     R# i ; i)aZ  Record the provider's declared home on this environment: a declared absolute path whatever ``cwd`` the
environment started in (``terminal.cwd`` may pick another directory), or, for ``~``, the path it resolved
to inside THIS sandbox when it started there. Per environment, never per backend, so a second sandbox
with a different home gets its own.z3%s.default_cwd raised; not recording a sandbox homeT)Úexc_infoNÚ~ro   Ú/)Údefault_cwdr“   r   ÚwarningÚtypeÚ__name__ÚgetattrÚ
isinstancer   Ú
startswithÚ_hermes_sandbox_homer�   )Úenv_objÚproviderro   ÚdeclaredÚhomes   &&&  r   Ú_stamp_sandbox_homerÎ   Õ   s»   € ð
Ø×'Ñ'ˆð �3„Ø03°s´
Œw�w  tÔ,À‰àˆÜ�$œ×Ò §¡°×!5Ò!5¸$À#¼+ð	Ø+/Ö(ñ ;FÑ!5Ñøô ô ä�‰ÐLÌdÐS[Ën×NeÑNeØ $ð 	ô 	&àŠð	ûô ô 	Úð	ús#   ‚A1 Á#B/ Á18B,Â+B,Â/B>Â=B>c           	      ó  € \        V 4      pVet   ^ RIHp V! V4      '       d   \        RV  R24      hVP	                  W#WQVR7      p	 VP
                  P                  4       P                  4       V	n        \        W—V4       V	#  ^ RIHp
 V
! 4       pRP                  R \        P!                  R4      \#        V4      ,            4       4      p^ RIHp \        R	V  R
V V! V 4       24      h  \         d     Lƒi ; i  \         d    . p Lzi ; i)N)Úis_hosted_objectzterminal.backend is zË, a plugin that runs in the plugin host (plugins.isolation: host), and the host cannot hand its environment to Hermes, so commands cannot run in it. Set plugins.isolation: in_process to use this backend.)ro   rp   r{   rz   Úcontainer_config)Úplugin_backend_namesú, c              3   ó.   "  € T F  pR V R 2x € K  	  R# 5i)Ú'Nr(   )Ú.0Úns   & r   Ú	<genexpr>Ú$_build_plugin_env.<locals>.<genexpr>  s   é € Ð[Ñ(Z 1˜˜!˜˜A•hÓ(Zùs   ‚©Úterminal_backend_install_hintzUnknown environment type: z. Use )r   Úhermes_cli.plugin_hostrÐ   r”   Úcreate_environmentÚnameÚstripÚlowerÚ_hermes_backend_namer�   rÎ   Úagent.terminal_env_registryrÒ   r“   ÚjoinÚ_BUILTIN_BACKENDSÚsplitÚlistÚhermes_cli.left_core_migrationrÛ   )r¯   rz   ro   rp   rM   r{   rr   rË   rÐ   rÊ   rÒ   Úplugin_namesÚknownrÛ   s   $$$$$$,       r   Ú_build_plugin_envrê   ì   s%  € Ü'¨Ó1€HØÒÝ;Ù˜H×%Ò%ô Ø& x jð 1Eð FóGð Gð ×-Ñ-°#ÐPWØ?Að .ó Cˆð	Ø+3¯=©=×+>Ñ+>Ó+@×+FÑ+FÓ+HˆGÔ(ô 	˜G¨sÔ3ØˆðÝDÙ+Ó-ˆð �I‰IÑ[Ô(9×(?Ñ(?ÀÓ(EÌÈ\ÓHZÖ(ZÓ[Ó[€EÝLÜ
Ð1°(°¸6À%ÀÑIfÐgoÓIpÐHqÐrÓ
sÐsøô ô 	Ùð	ûô ô ØŠðús$   Á-C+ ÂC< Ã+C9Ã8C9Ã<DÄDÚlocalÚdockerrZ   Ússhc                óÐ   € V ^8„  d   QhR\         R\         R\         R\        R\        R,          R\        R,          R\        R,          R	\         R
\        \         ,          R\        /
# )r   r¯   rz   ro   rp   r»   NrÑ   rm   r{   r|   r³   )r   r£   r6   r   r   )r   s   "r   r   r     so   € ÷ ñ ¤#ð ¬cð ¼ð Äcð Ü$(¨4¥KðÜJNÐQUÍ+ðä&*¨T¥kðäCFðô #+¬3¥-ðô EIñr   c
                óÊ   € \         P                  V 4      p
\        YY5;'       g    / VWFW‰R7	      pV
e
   V
! R/ VB pM\        RRV /VB p Wn        V#   \
         d     T# i ; i)aŸ  Create an execution environment (instance with ``execute()``) for *env_type*. ``image`` is ignored
for local/ssh/vercel; ``container_config`` carries the container_*/docker_* resource keys; ``host_cwd`` is
the host dir bound into Docker when cwd mounting is enabled. ``probe_only`` asks ssh for a throwaway
connection with no remote setup/sync (the prompt-time probe). Unknown types fall through to plugin backends.)	rz   ro   rp   rM   r{   r»   rm   r|   r³   r¯   r(   )Ú_ENV_BUILDERSr9   r6   rê   r¯   r“   )r¯   rz   ro   rp   r»   rÑ   rm   r{   r|   r³   Úbuilderrƒ   r0   s   &&&&&&&&&&   r   Ú_create_environmentrò     sƒ   € ô ×Ñ Ó)€GÜ˜°×<RÐ<RÐPRÐ\cØ'ÈXôn€FàÒÙÑ˜Ñ‰äÑ<¨Ð<°VÑ<ˆðØŒð €Jøô ô ØØ€Jðús   ÁA ÁA"Á!A"c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r3   ©r6   r   r   r   )r   s   "r   r   r   .  s&   € ÷ xñ xœ$œs¤C˜x�.ð x¬Tñ xr   c                óN  € V P                  R4      ;'       g    RP                  4       pV P                  RR4      p\        V4      '       g'   \        RV: RRP	                  \
        4       R24      # VR9  d   \        R	V R
24      # \        P                  P                  R4      f   \        R4      # ^ RI	H
p V! R4      '       d   R# R Uu. uF  p\        V! V4      4      NK  	  pp\        V4      '       d   R# \        V4      '       d   RMRp\        RV R24      # u upi )zZRuntime -> disk -> SDK -> auth (OIDC token, else the full TOKEN/PROJECT_ID/TEAM_ID tuple).rª   r¸   Úcontainer_diské È  zVercel Sandbox runtime z: is not supported. Set TERMINAL_VERCEL_RUNTIME to one of: rÓ   rg   z?Vercel Sandbox does not support custom TERMINAL_CONTAINER_DISK=z,. Use the default shared setting (51200 MB).Úvercelzpvercel is required for the Vercel Sandbox terminal backend. Run hermes setup terminal and select Vercel Sandbox.©Ú
get_secretÚVERCEL_OIDC_TOKENTzkselected with token auth, but VERCEL_TOKEN, VERCEL_PROJECT_ID, and VERCEL_TEAM_ID must all be set together.zselected but no supported auth configuration was found. Set VERCEL_TOKEN, VERCEL_PROJECT_ID, and VERCEL_TEAM_ID for normal use.zVercel Sandbox backend zC VERCEL_OIDC_TOKEN is supported for one-off local development only.>   ru   r÷   )ÚVERCEL_TOKENÚVERCEL_PROJECT_IDÚVERCEL_TEAM_ID)r9   rß   rU   r    rã   rT   rž   ÚutilÚ	find_specÚagent.secret_scoperú   r   ÚallÚany)r4   rR   rˆ   rú   rI   ÚpresentÚheads   &      r   Ú_check_vercelr  .  s9  € à�z‰zÐ*Ó+×1Ð1¨r×8Ñ8Ó:€GØ�:‰:Ð&¨Ó.€DÜ'¨×0Ò0ÜÐ0°±Ð;uØŸ)™)Ô$>Ó?Ð@ÀðCó Dð 	Dà�:ÔÜÐXÐY]ÐX^ð _Dð Dó Eð 	Eä‡~�~×Ñ Ó)Ò1äð  Jó  Kð  	KÝ-ÙÐ%×&Ò&ÙÙ,cÓdÑ,c qŒt‘J˜q“MÖ"Ñ,c€GÐdÜ
ˆ7‡|‚|Ùä" 7Ÿ|š|ñð1ð 	ô Ð,¨T¨FÐ2uÐvÓwÐwùò es   ÃD"c                óh   € V ^8„  d   QhR\         \        \        3,          R\        \        ,          /# r3   )r6   r   r   r   r   )r   s   "r   r   r   H  s&   € ÷ ñ ”tœC¤˜H•~ð ¬(´4­.ñ r   c                 ó¬   € \        V P                  R 4      4      pVR,          R8X  d   R# VR,          R8w  d   \        \        V4      ^ ,          4      # R# )rW   rŠ   rd   Tre   N)r]   r9   r    rl   )r4   r_   s   & r   Ú
_modal_prer	  H  sM   € Ü*¨6¯:©:°lÓ+CÓD€KØÐ%Õ&¨)Ô3ÙØÐ%Õ&¨(Ô2ÜÔ0°Ó=¸aÕ@ÓAÐAÙr   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r3   rô   )r   s   "r   r   r   Q  s&   € ÷ \ñ \”Tœ#œs˜(•^ð \¬ñ \r   c                 óx   € V P                  R 4      '       d   V P                  R4      '       d   R# \        R4      # )Ússh_hostÚssh_userTz—the SSH host and user are not configured (TERMINAL_SSH_HOST / TERMINAL_SSH_USER); run `hermes setup terminal` to enter them or pick the 'local' backend)r9   r    rD   s   &r   Ú_ssh_prer  Q  s7   € Ø‡z�z�*×Ò &§*¡*¨Z×"8Ò"8ÙÜð [ó \ð \r   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r3   rô   )r   s   "r   r   r   X  s"   € ÷ 5ñ 5œ$œs¤C˜x�.ð 5¬Tñ 5r   c                 ó.   € ^ RI Hp ^ RIHp V! R4      RJ# )ru   )ÚDaytonarù   ÚDAYTONA_API_KEYN)rœ   r  r  rú   )r4   r  rú   s   &  r   Ú_daytona_postr  X  s   € ÝÝ-ÙÐ'Ó(°Ð4Ð4r   Úbinaryc                  óJ   € \         P                  ! R 4      P                  4       # )ztools.environments.docker)rž   rŸ   Úfind_dockerr(   r   r   r¡   r¡   `  s   € ¤)×"9Ò"9Ð:UÓ"V×"bÑ"bÔ"dr   ÚversionuW   Docker is not installed â€” no docker executable in PATH or the usual install locationsÚpreÚmoduleÚpostz8Docker is installed but the Docker daemon is not runningc                ó^   € V ^8„  d   QhR\         R\        \         \        3,          R\        /# )r   r¯   r4   r   )r   r6   r   r   )r   s   "r   r   r   o  s)   € ÷ ñ ¤#ð ¬t´C¼°H­~ð Ä$ñ r   c           
      ó²  € \        R 4       \        V ,          pRV9   d   VR,          ! V4      MR pVe   V# RV9   dŸ   VR,          w  rEpV! 4       pV'       g   \        T;'       g    RV : R24      # \        P                  ! Wu.R^\        P
                  RR7      pVP                  ^ 8w  d-   \        \        V ,           RV R	V R
VP                   R24      # R# RV9   dI   \        P                  P                  VR,          ^ ,          4      f   \        VR,          ^,          4      # RV9   d&   VR,          ! V4      '       g   \        RV : R24      # R# )Nr  r  úthe z# backend's executable was not foundTF)Úcapture_outputrp   ÚstdinÚcheckz (`Ú z` exited with code Ú)r  r  z& backend is missing its API key or SDK)r%   Ú_BACKEND_SPECSr    Ú
subprocessÚrunÚDEVNULLÚ
returncodeÚ_PROBE_FAILED_REASONSrž   rÿ   r   )	r¯   r4   ÚspecÚverdictÚfinderÚargÚmissing_msgÚ
executableÚprobes	   &&       r   Ú_check_requirementsr0  o  s?  € Ü˜tÔ$Ü˜(Õ#€DØ%*¨d¤]ˆd�5Žk˜&Ô!¸€GØÒØˆØ�4ÔØ#'¨¥>Ñ ˆ�[Ù“Xˆ
ßÜ˜;×`Ð`¨D°±Ð<_Ð*`ÓaÐaÜ—’ 
Ð0ÀÈqÔXb×XjÑXjÐrwÔxˆØ×Ñ˜qÔ ÜÔ3°HÕ=Ð>¸cÀ*ÀÈQÈsÈeÐSfÐgl×gwÑgwÐfxÐxyÐzÓ{Ð{ÙØ�4ÔœIŸN™N×4Ñ4°T¸(µ^ÀAÕ5FÓGÒOÜ�t˜H•~ aÕ(Ó)Ð)Ø�„~˜d 6žl¨6×2Ò2Ü˜˜h™\Ð)OÐPÓQÐQÙr   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r3   rô   )r   s   "r   r   r   …  s&   € ÷ 	Hñ 	H¤t¬C´¨H¥~ð 	H¼$ñ 	Hr   c           
      óø   € \        R 4       V R,          p\        V4      pVe5   \        VP                  V 4      4      pT;'       g    \	        RV: R24      # ^ RIHp \	        RV R\         RV! V4       24      # )Nr¯   r  z5 plugin backend reported its requirements are not metrÚ   zUnknown TERMINAL_ENV 'z'. Use one of: z , or a plugin-registered backend)r%   r   r   Úcheck_requirementsr    rç   rÛ   rä   )r4   r¯   rË   ÚokrÛ   s   &    r   Ú_check_plugin_requirementsr5  …  sŽ   € Ü˜tÔ$Ø�jÕ!€HÜ'¨Ó1€HØÒÜ�(×-Ñ-¨fÓ5Ó6ˆØ×fÐf”W˜t H¡<Ð/dÐeÓfÐfÝLÜÐ+¨H¨:°_ÔEVÐDWð XÙ:¸8ÓDÐEðGó Hð Hr   c                óÂ   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   ^\         9   d,   \        \        \        \        \        3,          3,          ;R&   # )r   r   r#  )Ú__conditional_annotations__r   r   r6   r   )r   s   "r   r   r      sP   € ÷ Fñ F÷6 /Ò .œ(¤3�-Ñ .ñ7F÷z
	ò 	””Sœ$œs¤C˜x�.Ð(Õ)ñ 	ò{
Fr   )Únode24Únode22z
python3.13))rµ   r  r¸   )r¶   r  r¸   )r·   Ússh_porté   )r;   Ússh_keyr¸   )rA   Ússh_persistentT))r‡   Úcontainer_cpué   )r�   Úcontainer_memoryé   )rˆ   rö   r÷   )r‹   Úcontainer_persistentT)r>  r?  )r@  rA  )rö   r÷   )rB  T)rW   rf   )rª   r¸   )r«   r¸   )Údocker_mount_cwd_to_workspaceF)Údocker_run_as_host_userF)Údocker_shm_sizeÚ1g)Údocker_networkT)Údocker_persist_across_processesT)Údocker_shared_container_keyr¸   )Údocker_orphan_reaperT)Údocker_snap_compatF)Údocker_image_pinnedF)Úauto_mount_cwdrC  F)Úrun_as_host_userrD  F)ÚnetworkrG  T)ry   rH  T)Úshared_container_keyrI  r¸   )Úshm_sizerE  rF  )Úsnap_compatrK  F)Úimage_pinnedrL  F)NNNr<   NF)rZ   z`modal is required for direct modal terminal backend. Run hermes setup terminal and select Modal.)Pr7  Ú__doc__Ú	functoolsÚimportlib.utilrž   rŽ   Úloggingr$  Útypingr   r   r   Útools.environments.dockerr   r   Útools.environments.localr   rq   Ú tools.environments.managed_modalr   r•   Útools.environments.modalr   r–   Útools.environments.sshr	   rº   Útools.managed_tool_gatewayr
   Útools.terminal_tool_configr   Útools.tool_backend_helpersr   r   r   r   Ú	getLoggerr   r   r    r%   r)   Ú_VERCEL_SANDBOX_DEFAULT_CWDrT   rä   r8   rO   rH   r~   r=   rE   rK   rP   rU   r]   rl   rs   r…   r›   r­   r²   ÚpartialÚ_build_daytona_envÚ_build_vercel_envr¼   rÎ   rê   rð   rò   r  r	  r  r  r#  r(  r0  r5  Ú_REQUIREMENT_CHECKERSÚ"_check_vercel_sandbox_requirementsr   )rÞ   r7  s   0@r   Ú<module>rh     sö  øðöFó Û Û Û Û ß &Ñ &å MÝ JÝ `Ý JÝ DÝ DÝ ?÷ló lð 
×	Ò	Ð0Ó	1€ð
 +/Ð Ó .õõ&õ$ð
 0Ð Ø?Ð ØHÐ ðM€	ðn€ð Ð4Ð6OØ"Ð$:Ð<RÐThØ�rÐÐDÐG[Ð]_ÐF`Ø�2ÐÐ:Ð=PÐRTÐ<UØÐ7Ð9bØ'Ð)GÐIfØ"ð€ð Ð  "Ð%Ð'aØÐ(¨"Ð-°°|ÀRÐ/HØ:Ð<_ØÐ&¨Ð+Ð-rØ?ÐAfØ0Ð2`ð€õNõ
@õ
=õ
Oõ
@õ]õWð0p°4ô pòò4Tð, Ñ`ÐbfÙ6ð8àÑtØñ PðQð€òð ×&Ò&Ð'9¸9ÓEÐ Ø×%Ò%Ð&8Ð:JÓKÐ ðJ¸5ô Jõò.tðB Ð*¨HÐ6GÈÐRbØÐ.Ð0@ÐBSØ˜ð(€÷
õ8xõ4õ\õ5ð ˆRØˆxÑdÐfoØsðuð và	ˆE�8ÐØˆe�ZØð  FðGà�u˜mÐ,Ø�˜Ð&ð	-€ó 	ð ÐHðÐ õ
õ,	Hñ YgÓgÑXfÐPT˜y×0Ñ0Ð1DÀdÓKÒKÑXfÑgÐ Ø%:Ð;KÕ%LÒ "ùò hs   Æ-G