+
    Ki&                        R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
HtHtHt ^ RIHtHtHt ^ RIHt ]P(                  ! ]4      tR R lt]	! R	R
7       ! R R4      4       t ! R R]4      tR# )z1Managed Modal environment backed by tool-gateway.)annotationsN)	dataclass)AnyDictOptional)BaseModalExecutionEnvironmentModalExecStartPreparedModalExec)resolve_managed_tool_gatewayc               $    V ^8  d   QhRRRRRR/# )   namestrdefaultfloatreturn )formats   "=/home/ubuntu/hermes-agent/tools/environments/managed_modal.py__annotate__r      s!      s U u     c                     \        \        P                  ! V \        V4      4      4      pV^ 8  d   V# T#   \        \
        3 d    Tu # i ; i)    )r   osgetenvr   	TypeError
ValueError)r   r   values   && r   _request_timeout_envr      sJ    biic'l34	u.w.z" s   16 6 AAT)frozenc                  "    ] tR t^t$ R]R&   RtR# )_ManagedModalExecHandler   exec_idr   N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r   r   r   r!   r!      s    Lr   r!   c                    a  ] tR t^$tRt]! RR4      t]! RR4      t]! RR4      tRt	Rt
R	tR&R V 3R llltR R ltR R ltR R ltR R ltR tR R ltR R ltRR
R^RR
/R R lltR R  lt]R! R" l4       t]R# R$ l4       tR%tV ;t# )'ManagedModalEnvironmentzCGateway-owned Modal sandbox with Hermes-compatible execute/cleanup..TERMINAL_MANAGED_MODAL_CONNECT_TIMEOUT_SECONDSg      ?0TERMINAL_MANAGED_MODAL_POLL_READ_TIMEOUT_SECONDSg      @2TERMINAL_MANAGED_MODAL_CANCEL_READ_TIMEOUT_SECONDSg      $@z4[Command interrupted - Modal sandbox exec cancelled]Managed Modal exec failedNc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   imager   cwdtimeoutintmodal_sandbox_kwargszOptional[Dict[str, Any]]persistent_filesystembooltask_idr   )r   s   "r   r   $ManagedModalEnvironment.__annotate__.   sF     2 22 2 	2
 72  $2 2r   c                	  < \         SV `  W#R 7       V P                  4        \        R4      pVf   \	        R4      hVP
                  P                  R4      V n        VP                  V n	        W`n
        WPn        Wn        \        T;'       g    / 4      V n        \        \         P"                  ! 4       4      V n        V P'                  4       V n        R# ))r1   r2   modalNzDManaged Modal requires a configured tool gateway and Nous user token/)super__init__)_guard_unsupported_credential_passthroughr
   r   gateway_originrstrip_gateway_originnous_user_token_nous_user_token_task_id_persistent_imagedict_sandbox_kwargsr   uuiduuid4_create_idempotency_key_create_sandbox_sandbox_id)	selfr0   r1   r2   r4   r5   r7   gateway	__class__s	   &&&&&&& r   r=    ManagedModalEnvironment.__init__.   s     	S2668.w7?cdd&55<<SA ' 7 70#$8$>$>B?'*4::<'8$//1r   c                    V ^8  d   QhRRRR/# )r   preparedr	   r   r   r   )r   s   "r   r   r8   H   s     /O /O*; /O /Or   c                	j   \        \        P                  ! 4       4      pR VRVP                  RVP                  R\        VP                  R,          4      /pVP                  e   VP                  VR&    V P                  RRV P                   R	2V^
R
7      pTP                  R8  d,   \        T P                  T P                  RT4      4      R7      # TP                  4       pTP!                  R4      pTR9   d=   \        T P#                  TP!                  RR4      TP!                  R^4      4      R7      # TP!                  R 4      T8w  d   \        T P                  R4      R7      # \        \%        TR7      R7      #   \         d)   p\        T P                  RT 24      R7      u Rp?# Rp?ii ; i)execIdcommandr1   	timeoutMs  N	stdinDataPOST/v1/sandboxes/z/execsjsonr2   zManaged Modal exec failed: )immediate_result  r.   statusoutput 
returncodez<Managed Modal exec start did not return the expected exec id)r"   )handle>   failedr2   	cancelled	completed)r   rI   rJ   rV   r1   r3   r2   
stdin_data_requestrM   	Exceptionr   _error_resultstatus_code_format_errorr]   get_resultr!   )rN   rS   r"   payloadresponseexcbodyr`   s   &&      r   _start_modal_exec)ManagedModalEnvironment._start_modal_execH   s   djjl#gx''8<<X--45	#
 *#+#6#6GK 
	}} !1!1 2&9	 % H 3&!!%!3!3&&'BHM"  }}(#DD!!%HHXr*HH\1-"  88H(!!%!3!3R"  %<W%MNN;  	!!%!3!36QRUQV4W!X 	s   5#E? ?F2
F-'F2-F2c                    V ^8  d   QhRRRR/# )r   rd   r!   r   zdict | Noner   )r   s   "r   r   r8   y   s      '> ; r   c                	D    V P                  R RV P                   RVP                   2V P                  V P                  3R7      pTP                  R8X  d   T P                  R4      # TP                  R8  d"   T P                  T P                  R	T4      4      # TP                  4       pTP                  R
4      pTR9   d3   T P                  TP                  RR4      TP                  R^4      4      # R#   \
         d   pT P                  RT 24      u Rp?# Rp?ii ; i)GETr[   /execs/r2   z Managed Modal exec poll failed: Ni  zManaged Modal exec not foundr_   zManaged Modal exec poll failedr`   ra   rb   rc   >   re   r2   rf   rg   )ri   rM   r"   _CONNECT_TIMEOUT_SECONDS_POLL_READ_TIMEOUT_SECONDSrj   rk   rl   rm   r]   rn   ro   )rN   rd   status_responserr   status_bodyr`   s   &&    r   _poll_modal_exec(ManagedModalEnvironment._poll_modal_execy   s(   	P"mm !1!1 2'&..9IJ668W8WX , O &&#-%%&DEE&&#-%%""#C_U  &**,*DD<<"-a0  %  	P%%(H&NOO	Ps   AC6 6DDDDc                    V ^8  d   QhRRRR/# )r   rd   r!   r   Noner   )r   s   "r   r   r8      s     * *)@ *T *r   c                	<    V P                  VP                  4       R # N)_cancel_execr"   )rN   rd   s   &&r   _cancel_modal_exec*ManagedModalEnvironment._cancel_modal_exec   s    &..)r   c                    V ^8  d   QhRRRR/# )r   r2   r3   r   rG   r   )r   s   "r   r   r8      s     S S S Sr   c                	.    V P                  R V R2^|4      # )z#Managed Modal exec timed out after s)ro   )rN   r2   s   &&r   _timeout_result_for_modal1ManagedModalEnvironment._timeout_result_for_modal   s    ||A'!LcRRr   c                	   \        V R R4      '       g   R#  V P                  RRV P                   R2RV P                  /^<R7       RV n        R#   \         d!   p\
        P                  RT4        Rp?L/Rp?ii ; i  RT n        i ; i)rM   NrZ   r[   z
/terminatesnapshotBeforeTerminater\   z Managed Modal cleanup failed: %s)getattrri   rM   rE   rj   loggerwarning)rN   rr   s   & r   cleanupManagedModalEnvironment.cleanup   s    t]D11	$MM !1!1 2*=-t/?/?     $D  	DNN=sCC	D  $Ds)   /A A:A50A= 5A::A= =	Bc                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r8      s     ( ( (r   c                	l   V P                  V P                  P                  R 4      ^4      pV P                  V P                  P                  RV P                  P                  R4      4      R4      pV P                  V P                  P                  RV P                  P                  R4      4      R4      pRV P                  RV P                  R VRVR	R
R\        R\        V P                  R,          4      4      RV P                  RV P                  /pVe   W4R&   V P                  RRV^<RV P                  /R7      pVP                  R8  d   \        V P                  RV4      4      hVP                  4       pVP                  R4      p\!        V\"        4      '       d	   V'       g   \        R4      hV# )cpu	memoryMiBmemoryi   ephemeral_diskdiskMiBNr0   r1   rW   i6 idleTimeoutMsi rX   persistentFilesystem
logicalKeyrZ   z/v1/sandboxeszx-idempotency-key)r]   r2   extra_headersr_   zManaged Modal create failedidz0Managed Modal create did not return a sandbox id)_coerce_numberrH   rn   rF   r1   maxr3   r2   rE   rD   ri   rK   rl   RuntimeErrorrm   r]   
isinstancer   )rN   r   r   diskcreate_payloadrq   rs   
sandbox_ids   &       r   rL   'ManagedModalEnvironment._create_sandbox   s   !!$"6"6":":5"A1E$$  $$[$2F2F2J2J82TU
 ""  $$%5t7K7K7O7OPY7Z[
 T[[4883S#dllT.A*BC"D$4$4$--	
 (,9%==#T%A%A ! 
 3&t112OQYZ[[}}XXd^
*c***QRRr   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r8      s      4 r   c                l     ^ RI Hp T! 4       pT'       d   \        R4      hR#   \         d     R# i ; i)z;Managed Modal does not sync or mount host credential files.)get_credential_file_mountsNzManaged Modal does not support host credential-file passthrough. Use TERMINAL_MODAL_MODE=direct when skills or config require credential files inside the sandbox.)tools.credential_filesr   rj   r   )rN   r   mountss   &  r   r>   AManagedModalEnvironment._guard_unsupported_credential_passthrough   sB    	I ,-7  	  		s   $ 33r]   r2   r   c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   methodr   pathr]   zDict[str, Any] | Noner2   r3   r   zDict[str, str] | Noner   requests.Responser   )r   s   "r   r   r8      s@     
 
s 
# 
,

 !6
 BS
r   c               	    R RV P                    2RR/pV'       d   VP                  V4       \        P                  ! VV P                   V 2VVVR7      # )AuthorizationzBearer zContent-Typezapplication/json)headersr]   r2   )rC   updaterequestsrequestrA   )rN   r   r   r]   r2   r   r   s   &&&$$$ r   ri    ManagedModalEnvironment._request   sg    
 wt'<'<&=>.
 NN=)##$TF+
 	
r   c                    V ^8  d   QhRRRR/# )r   r"   r   r   r   r   )r   s   "r   r   r8      s     H HC HD Hr   c                	     V P                  R RV P                   RV R2V P                  V P                  3R7       R#   \         d"   p\
        P                  RT4        Rp?R# Rp?ii ; i)rZ   r[   ry   z/cancelrz   z$Managed Modal exec cancel failed: %sN)ri   rM   r{   _CANCEL_READ_TIMEOUT_SECONDSrj   r   r   )rN   r"   rr   s   && r   r   $ManagedModalEnvironment._cancel_exec   so    	HMM !1!1 2'''J668Y8YZ  
  	HNNA3GG	Hs   ;? A+
A&&A+c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r   r   )r   s   "r   r   r8     s!      c E e r   c                	X     V f   V# \        V 4      #   \        \        3 d    Tu # i ; ir   )r   r   r   )r   r   s   &&r   r   &ManagedModalEnvironment._coerce_number  s4    	}<:& 	N	s    
 ))c               $    V ^8  d   QhRRRRRR/# )r   prefixr   rq   r   r   r   )r   s   "r   r   r8     s"     8 8c 8-> 83 8r   c                	    VP                  4       p\        V\        4      '       d   VP                  R 4      ;'       g+    VP                  R4      ;'       g    VP                  R4      p\        V\        4      '       d   V'       d   V  RV 2# V  R\         P
                  ! VRR7       2#  VP                  P                  4       pV'       d   V  RV 2# V  RVP                   2#   \         d     LGi ; i)errormessagecodez: F)ensure_asciiz: HTTP )
r]   r   rG   rn   r   dumpsrj   textstriprl   )r   rq   rp   r   r   s   &&   r   rm   %ManagedModalEnvironment._format_error  s    	mmoG'4((!++g.__'++i2H__GKKX^L_gs++$XRy11 DJJwU$K#LMM	 ) }}""$XRv&&!5!5 677  		s)   =C(  C( /C( 	C( C( (C65C6)rK   rA   rF   rC   rE   rM   rH   rD   )z/root<   NTr   )r#   r$   r%   r&   __doc__r   r{   r|   r   _client_timeout_grace_seconds_interrupt_output_unexpected_error_prefixr=   rt   r   r   r   r   rL   r>   ri   r   staticmethodr   rm   r(   __classcell__)rP   s   @r   r*   r*   $   s    M34dfij!56hjm!n#78lnq#r $(!N:2 24/Ob6*S$$(T
/3
 "
 9=
&H   8 8r   r*   )r   
__future__r   r]   loggingr   r   rI   dataclassesr   typingr   r   r   tools.environments.modal_commonr   r   r	   tools.managed_tool_gatewayr
   	getLoggerr#   r   r   r!   r*   r   r   r   <module>r      su    7 "   	   ! & & 
 D			8	$ $  v8; v8r   