Ë
    ³Œj’y  ã                  ó  — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZ ddlZddlmZmZmZ ddlmZ dd	lmZmZmZmZmZmZmZ dd
lm Z  ddl!m"Z"m#Z#m$Z$ e	rddl%m&Z& ddl'm(Z( ddl)m*Z* eee+e+f      Z,e G d„ d«      «       Z-y)z?Sandbox class for interacting with a specific sandbox instance.é    )Úannotations)ÚMapping)Ú	dataclassÚfield)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚOptionalÚUnionÚoverloadN)ÚDataplaneNotConfiguredErrorÚResourceNotFoundErrorÚSandboxRetryableConnectionError)Úhandle_sandbox_http_error)ÚCommandHandleÚDownloadContentDispositionÚDownloadURLÚExecutionResultÚ
ServiceURLÚSnapshotÚ_StreamEndedBeforeStarted)ÚTunnel)ÚWEBSOCKETS_AVAILABLEÚconnect_deadlineÚopen_timeout_for)ÚAsyncSandboxClient©ÚAsyncSandbox)ÚSandboxClientc                  ó  — e Zd ZU dZded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    edd¬«      Zded<    edd¬«      Zded<   e	 dB	 	 	 	 	 	 	 dCd„«       ZddœdDd„ZdEd„Z	 	 	 	 	 	 	 	 dFd „ZdGd!„Zed"d"d"d"d"d"d"d"d"d"d"d"d#œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dHd$„«       Zed"d"d"d"d"d"d"d"d"d"d"d%œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dId&„«       Zd'ddd(ddd)dd*dddd#œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJd+„Zd)dd*ddd,œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dKd-„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dLd.„Zd/d/dd0œ	 	 	 	 	 	 	 	 	 dMd1„Zd'dd2œ	 	 	 	 	 	 	 	 	 dNd3„Z d'dd2œ	 	 	 	 	 	 	 dOd4„Z!d/d5dd6œ	 	 	 	 	 	 	 	 	 dPd7„Z"d*dd8œ	 	 	 	 	 	 	 dQd9„Z#ddddd:œ	 	 	 	 	 	 	 	 	 	 	 dRd;„Z$d<dd2œ	 	 	 	 	 dSd=„Z%dd>œdTd?„Z&dd>œdTd@„Z'd'dd2œ	 	 	 	 	 	 	 dUdA„Z(y)VÚSandboxa  Represents an active sandbox for running commands and file operations.

    This class is typically obtained from SandboxClient.sandbox() and supports
    the context manager protocol for automatic cleanup.

    Attributes:
        name: Display name (can be updated).
        dataplane_url: URL for data plane operations (file I/O, command execution).
            Only functional when status is "ready".
        id: Unique identifier (UUID). Remains constant even if name changes.
            May be None for resources created before ID support was added.
        status: Sandbox lifecycle status. One of "provisioning", "ready",
            "failed", "stopped".
        status_message: Human-readable details when status is "failed", None otherwise.
        created_at: Timestamp when the sandbox was created.
        updated_at: Timestamp when the sandbox was last updated.
        idle_ttl_seconds: Idle timeout TTL in seconds (``0`` means disabled).
            Newly-created sandboxes receive a server-side default of ``600``
            seconds (10 minutes) when the caller did not set ``idle_ttl_seconds``
            explicitly. The launcher stops the sandbox after this many idle
            seconds; deletion is anchored to ``stopped_at`` and controlled by
            ``delete_after_stop_seconds`` (see below).
        delete_after_stop_seconds: Seconds after a sandbox enters the
            ``stopped`` state before it (and its filesystem clone) are
            permanently deleted. ``0`` disables stop-anchored deletion;
            ``None`` falls back to the server default.
        stopped_at: Timestamp when the sandbox transitioned to ``stopped``,
            or ``None`` while running. The deletion deadline is
            ``stopped_at + delete_after_stop_seconds``.
        snapshot_id: Snapshot ID used to create this sandbox.
        vcpus: Number of vCPUs allocated.
        mem_bytes: Memory allocation in bytes.
        fs_capacity_bytes: Root filesystem capacity in bytes.

    Example:
        with client.sandbox(snapshot_id="<snapshot-uuid>") as sandbox:
            result = sandbox.run("python --version")
            print(result.stdout)
    ÚstrÚnameNúOptional[str]Údataplane_urlÚidÚreadyÚstatusÚstatus_messageÚ
created_atÚ
updated_atúOptional[int]Úidle_ttl_secondsÚdelete_after_stop_secondsÚ
stopped_atÚsnapshot_idÚvcpusÚ	mem_bytesÚfs_capacity_bytesF)ÚreprÚdefaultr    Ú_clientTÚboolÚ_auto_deletec           	     ó  —  | di d|j                  dd«      “d|j                  d«      “d|j                  d«      “d|j                  dd«      “d|j                  d«      “d|j                  d«      “d	|j                  d	«      “d
|j                  d
«      “d|j                  d«      “d|j                  d«      “d|j                  d«      “d|j                  d«      “d|j                  d«      “d|j                  d«      “d|“d|“ŽS )a4  Create a Sandbox from API response dict.

        Args:
            data: API response dictionary containing sandbox data.
            client: Parent SandboxClient for operations.
            auto_delete: Whether to delete the sandbox on context exit.

        Returns:
            Sandbox instance.
        r$   Ú r&   r'   r)   r(   r*   r+   r,   r.   r/   r0   r1   r2   r3   r4   r7   r9   © )Úget)ÚclsÚdataÚclientÚauto_deletes       úd/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/sandbox/_sandbox.pyÚ	from_dictzSandbox.from_dicth   s2  € ñ" ò 
Ø—‘˜& "Ô%ð
àŸ(™( ?Ô3ð
ð �x‰x˜Œ~ð
ð —8‘8˜H gÔ.ð	
ð
  Ÿ8™8Ð$4Ô5ð
ð —x‘x Ô-ð
ð —x‘x Ô-ð
ð "ŸX™XÐ&8Ô9ð
ð '+§h¡hÐ/JÔ&Kð
ð —x‘x Ô-ð
ð Ÿ™ Ô/ð
ð —(‘(˜7Ô#ð
ð —h‘h˜{Ô+ð
ð #Ÿh™hÐ':Ô;ð
ñ ð
ñ  %ð!
ð 	
ó    )r@   c               óÊ  — ddl m}  |di d| j                  “d| j                  “d| j                  “d| j
                  “d| j                  “d| j                  “d	| j                  “d
| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d|�|n| j                   j#                  «       “dd“ŽS )a"  Create an AsyncSandbox for the same underlying sandbox.

        The returned instance has ``auto_delete`` disabled so the sandbox's
        lifecycle stays tied to this instance; both refer to the same
        server-side sandbox.

        Args:
            client: AsyncSandboxClient to use for operations. If not provided,
                one is created with the same configuration as this sandbox's
                client (see :meth:`SandboxClient.to_async`).

        Returns:
            AsyncSandbox referring to the same sandbox.
        r   r   r$   r&   r'   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r4   r7   r9   Fr<   )Ú langsmith.sandbox._async_sandboxr   r$   r&   r'   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r4   r7   Úto_async)Úselfr@   r   s      rB   rG   zSandbox.to_asyncŒ   s
  € õ 	Báò 
Ø—’ð
à×,Ò,ð
ð �wŠwð
ð —;’;ð	
ð
  ×.Ò.ð
ð —’ð
ð —’ð
ð "×2Ò2ð
ð '+×&DÒ&Dð
ð —’ð
ð ×(Ò(ð
ð —*’*ð
ð —n’nð
ð #×4Ò4ð
ð %Ð0‘F°d·l±l×6KÑ6KÓ6Møð
ñ  ð!
ð 	
rD   c                ó   — | S )zEnter context manager.r<   ©rH   s    rB   Ú	__enter__zSandbox.__enter__°   s   € àˆrD   c                óˆ   — | j                   r'	 | j                  j                  | j                  «       yy# t        $ r Y yw xY w)z6Exit context manager, optionally deleting the sandbox.N)r9   r7   Údelete_sandboxr$   Ú	Exception)rH   Úexc_typeÚexc_valÚexc_tbs       rB   Ú__exit__zSandbox.__exit__´   sA   € ð ×ÒðØ—‘×+Ñ+¨D¯I©IÕ6ð øô ò áðús   Ž%5 µ	AÁ Ac                ód   — | j                   st        d| j                  › d�«      ‚| j                   S )aã  Return the dataplane URL.

        The client does not gate on lifecycle status: a stopped sandbox is
        resumed by the platform when the dataplane request arrives, so only the
        presence of a URL is required here. A genuinely not-ready box surfaces
        the server's ``SandboxNotReadyError`` from the request itself.

        Returns:
            The dataplane URL.

        Raises:
            DataplaneNotConfiguredError: If dataplane_url is not configured.
        z	Sandbox 'zW' does not have a dataplane_url configured. Runtime operations require a dataplane URL.)r&   r   r$   rJ   s    rB   Ú_require_dataplane_urlzSandbox._require_dataplane_urlÂ   s=   € ð ×!Ò!Ü-Ø˜DŸI™I˜;ð '>ð >óð ð ×!Ñ!Ð!rD   .)ÚtimeoutÚenvÚcwdÚshellÚ	on_stdoutÚ	on_stderrÚidle_timeoutÚkill_on_disconnectÚttl_secondsÚptyÚheadersÚwaitc                ó   — y ©Nr<   ©rH   ÚcommandrU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   s                 rB   ÚrunzSandbox.run×   s   € ð" rD   )rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   c                ó   — y rb   r<   rc   s                 rB   re   zSandbox.runê   s   € ð" rD   é<   z	/bin/bashi,  iX  c               ó  — |s|s|rt        d«      ‚| j                  «        | xs |xs |}|r| j                  ||||||||||	|
||¬«      S t        r| j                  |||||ddd||	|
||¬«      S | j	                  ||||||¬«      S )aS
  Execute a command in the sandbox.

        Args:
            command: Shell command to execute.
            timeout: Command timeout in seconds.
            env: Environment variables to set for the command.
            cwd: Working directory for command execution. If None, uses sandbox default.
            shell: Shell to use for command execution. Defaults to "/bin/bash".
            on_stdout: Callback invoked with each stdout chunk as it arrives.
                Blocks until the command completes and returns ExecutionResult.
                Cannot be combined with wait=False.
            on_stderr: Callback invoked with each stderr chunk as it arrives.
                Blocks until the command completes and returns ExecutionResult.
                Cannot be combined with wait=False.
            idle_timeout: Idle timeout in seconds. If the command has no
                connected clients for this duration, it is killed. Defaults
                to 300 (5 minutes). Set to -1 for no idle timeout.
                Only applies to WebSocket execution.
            kill_on_disconnect: If True, kill the command immediately when
                the last client disconnects. Defaults to False (command
                continues running and can be reconnected to).
            ttl_seconds: How long (in seconds) a finished command's session
                is kept for reconnection. Defaults to 600 (10 minutes).
                Set to -1 to keep indefinitely.
            pty: If True, allocate a pseudo-terminal for the command.
                Useful for commands that require a TTY (e.g., interactive
                programs, commands that use terminal control codes).
                Defaults to False.
            wait: If True (default), block until the command completes and
                return ExecutionResult. If False, return a
                CommandHandle immediately for streaming output,
                kill, stdin input, and reconnection. Cannot be combined with
                on_stdout/on_stderr callbacks.

        Returns:
            ExecutionResult when wait=True (default).
            CommandHandle when wait=False.

        Raises:
            ValueError: If wait=False is combined with callbacks.
            DataplaneNotConfiguredError: If dataplane_url is not configured.
            SandboxOperationError: If command execution fails.
            CommandTimeoutError: If command exceeds its timeout.
            SandboxConnectionError: If connection to sandbox fails after retries.
            SandboxNotReadyError: If sandbox is not ready.
            SandboxClientError: For other errors.
        z}Cannot combine wait=False with on_stdout/on_stderr callbacks. Use wait=False and iterate the CommandHandle, or use callbacks.)rU   rV   rW   rX   r`   rY   rZ   r[   r\   r]   r^   r_   TN)rU   rV   rW   rX   r_   )Ú
ValueErrorrT   Ú_run_wsr   Ú	_run_http)rH   rd   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   Úuse_wss                  rB   re   zSandbox.runý   sì   € ñ@ ™¡iÜðRóð ð
 	×#Ñ#Ô%ð �Ò3˜YÒ3¨)ˆÙØ—<‘<ØØØØØØØ#Ø#Ø)Ø#5Ø'ØØð  ó ð õ$  Ø—<‘<ØØØØØØØØØ)Ø#5Ø'ØØð  ó ð ð �~‰~ØØØØØØð ó 
ð 	
rD   )r[   r\   r]   r^   r_   c          
     ó²  — ddl }ddlm} ddlm} | j                  «       }| j                  j                  } |«       j                  }||||||	|
||dœ	}| j                  j                  |«      }|r||d<   d}t        «       }	 t        |«      |d<    ||||fi |¤Ž\  }}	 t        ||| ||¬«      }	 |s|S |j*                  S # t        t        f$ r… |d	z  }|t        j                  kD  r‚ t!        t        j"                  d
|d	z
  z  z  t        j$                  «      }|�%||j'                  «       z
  }|dk  r‚ t!        ||«      }|j)                  |«       Y nw xY wŒÖ)z"Execute via WebSocket /execute/ws.r   N)Úrun_ws_stream)Úuuid7)	Ú
command_idrU   rV   rW   rX   r[   r\   r]   r^   r_   Úopen_timeout)rY   rZ   é   é   )ÚtimeÚlangsmith.sandbox._ws_executern   Úlangsmith.uuidro   rT   r7   Ú_api_keyÚhexÚ_ws_default_headersr   r   r   r   r   ÚMAX_AUTO_RECONNECTSÚminÚ_BACKOFF_BASEÚ_BACKOFF_MAXÚ	monotonicÚsleepÚresult)rH   rd   rU   rV   rW   rX   r`   rY   rZ   r[   r\   r]   r^   r_   rt   rn   ro   r&   Úapi_keyrp   Ú	ws_kwargsÚmergedÚattemptÚdeadlineÚ
msg_streamÚcontrolÚhandleÚbackoffÚ	remainings                                rB   rj   zSandbox._run_wss  s•  € ó$ 	å?Ý(à×3Ñ3Ó5ˆØ—,‘,×'Ñ'ˆñ “W—[‘[ˆ
ð %ØØØØØ(Ø"4Ø&Øñ
%
ˆ	ð —‘×1Ñ1°'Ó:ˆÙØ#)ˆI�iÑ àˆÜ#Ó%ˆØÜ(8¸Ó(BˆI�nÑ%Ù"/ØØØñ#ð ñ	#ÑˆJ˜ð$Ü&ØØØØ'Ø'ô�ð ñ* ØˆMà�}‰}Ðøô- *Ü/ðò $ð ˜1‘�Øœ]×>Ñ>Ò>ØÜÜ!×/Ñ/°1¸À1¹Ñ3EÑFÜ!×.Ñ.ó�ð Ð'Ø (¨4¯>©>Ó+;Ñ ;�IØ  A’~ØÜ! '¨9Ó5�GØ—
‘
˜7Ö#ð%$úð# s   Â C ÃBEÅEc               óê  — | j                  «       }|› d�}|||dœ}	|�||	d<   |�||	d<   	 | j                  j                  j                  ||	|dz   | j                  j	                  |«      ¬«      }
|
j                  «        |
j                  «       }t        |j                  dd	«      |j                  d
d	«      |j                  dd«      ¬«      S # t        j                  $ r}t        |«       ‚ d}~ww xY w)z9Execute via HTTP POST /execute (existing implementation).z/execute)rd   rU   rX   NrV   rW   é
   )ÚjsonrU   r_   Ústdoutr;   ÚstderrÚ	exit_codeéÿÿÿÿ)rŽ   r�   r�   )rT   r7   Ú_httpÚpostÚ_request_headersÚraise_for_statusr�   r   r=   ÚhttpxÚHTTPStatusErrorr   )rH   rd   rU   rV   rW   rX   r_   r&   ÚurlÚpayloadÚresponser?   Úes                rB   rk   zSandbox._run_httpÎ  s  € ð ×3Ñ3Ó5ˆØ�˜xÐ(ˆàØØñ#
ˆð
 ˆ?Ø ˆG�E‰NØˆ?Ø ˆG�E‰Nð	Ø—|‘|×)Ñ)×.Ñ.ØØØ "™ØŸ™×5Ñ5°gÓ>ð	 /ó ˆHð ×%Ñ%Ô'Ø—=‘=“?ˆDÜ"Ø—x‘x ¨"Ó-Ø—x‘x ¨"Ó-ØŸ(™( ;°Ó3ôð øô
 ×$Ñ$ò 	Ü% aÔ(Øûð	ús   «B"C ÃC2Ã!C-Ã-C2r   )Ústdout_offsetÚstderr_offsetr_   c               óæ   — ddl m} | j                  «       }| j                  j                  }||dœ}| j                  j                  |«      }	|	r|	|d<    ||||fi |¤Ž\  }
}t        |
|| |||¬«      S )a³  Reconnect to a running or recently-finished command.

        Resumes output from the given byte offsets. Any output produced while
        the client was disconnected is replayed from the server's ring buffer.

        Args:
            command_id: The command ID from handle.command_id.
            stdout_offset: Byte offset to resume stdout from (default: 0).
            stderr_offset: Byte offset to resume stderr from (default: 0).

        Returns:
            A CommandHandle for the command.

        Raises:
            SandboxOperationError: If command_id is not found or session expired.
            SandboxConnectionError: If connection to sandbox fails after retries.
        r   )Úreconnect_ws_stream)rœ   r�   r_   )rp   rœ   r�   )ru   rŸ   rT   r7   rw   ry   r   )rH   rp   rœ   r�   r_   rŸ   r&   r�   Úreconnect_kwargsrƒ   r†   r‡   s               rB   Ú	reconnectzSandbox.reconnect÷  sœ   € õ2 	Fà×3Ñ3Ó5ˆØ—,‘,×'Ñ'ˆð +Ø*ñ,
Ðð —‘×1Ñ1°'Ó:ˆÙØ*0Ð˜YÑ'á1ØØØñ
ð ñ	
Ñˆ
�Gô ØØØØ!Ø'Ø'ô
ð 	
rD   ©rU   r_   c          	     ó~  — | j                  «       }|› d�}t        |t        «      r|j                  d«      }dd|fi}	 | j                  j
                  j                  |d|i||| j                  j                  |«      ¬«      }|j                  «        y# t        j                  $ r}	t        |	«       Y d}	~	yd}	~	ww xY w)a*  Write content to a file in the sandbox.

        Args:
            path: Target file path in the sandbox.
            content: File content (str or bytes).
            timeout: Request timeout in seconds.

        Raises:
            DataplaneNotConfiguredError: If dataplane_url is not configured.
            SandboxOperationError: If file write fails.
            SandboxConnectionError: If connection to sandbox fails after retries.
            SandboxNotReadyError: If sandbox is not ready.
            SandboxClientError: For other errors.
        z/uploadzutf-8ÚfileÚpath)ÚparamsÚfilesrU   r_   N)rT   Ú
isinstancer#   Úencoder7   r’   r“   r”   r•   r–   r—   r   )
rH   r¥   ÚcontentrU   r_   r&   r˜   r§   rš   r›   s
             rB   ÚwritezSandbox.write-  s¼   € ð, ×3Ñ3Ó5ˆØ�˜wÐ'ˆô �gœsÔ#Ø—n‘n WÓ-ˆGà˜& 'Ð*Ð+ˆð
	)Ø—|‘|×)Ñ)×.Ñ.ØØ �~ØØØŸ™×5Ñ5°gÓ>ð /ó ˆHð ×%Ñ%Õ'øÜ×$Ñ$ò 	)Ü% a×(Ñ(ûð	)ús   ¾AB ÂB<Â'B7Â7B<c               ó¬  — | j                  «       }|› d�}	 | j                  j                  j                  |d|i|| j                  j	                  |«      ¬«      }|j                  «        |j                  S # t        j                  $ rI}|j                  j                  dk(  rt        d|› d| j                  › d�d¬	«      |‚t        |«       ‚ d
}~ww xY w)aÈ  Read a file from the sandbox.

        Args:
            path: File path to read. Supports both absolute paths (e.g., /tmp/file.txt)
                  and relative paths (resolved from /home/user/).
            timeout: Request timeout in seconds.

        Returns:
            File contents as bytes.

        Raises:
            DataplaneNotConfiguredError: If dataplane_url is not configured.
            ResourceNotFoundError: If the file doesn't exist.
            SandboxOperationError: If file read fails.
            SandboxConnectionError: If connection to sandbox fails after retries.
            SandboxNotReadyError: If sandbox is not ready.
            SandboxClientError: For other errors.
        z	/downloadr¥   )r¦   rU   r_   i”  zFile 'z' not found in sandbox 'Ú'r¤   )Úresource_typeN)rT   r7   r’   r=   r”   r•   rª   r–   r—   rš   Ústatus_coder   r$   r   )rH   r¥   rU   r_   r&   r˜   rš   r›   s           rB   ÚreadzSandbox.readX  sÜ   € ð* ×3Ñ3Ó5ˆØ�˜yÐ)ˆð	Ø—|‘|×)Ñ)×-Ñ-ØØ �~ØØŸ™×5Ñ5°gÓ>ð	 .ó ˆHð ×%Ñ%Ô'Ø×#Ñ#Ð#øÜ×$Ñ$ò 	Ø�z‰z×%Ñ%¨Ò,Ü+Ø˜T˜FÐ":¸4¿9¹9¸+ÀQÐGØ"(ôð ðô & aÔ(àûð	ús   —AA7 Á7CÂ
ACÃCé   ©Ú
local_portÚmax_reconnectsr_   c               ó  — d|cxk  rdk  sn t        d|› d�«      ‚|rd|cxk  rdk  sn t        d|› d�«      ‚| j                  «       }| j                  j                  }t	        ||||||¬«      }|j                  «        |S )aþ  Open a TCP tunnel to a port inside the sandbox.

        Creates a local TCP listener that forwards connections through a
        yamux-multiplexed WebSocket to the specified port inside the sandbox.
        Works with any TCP protocol (databases, Redis, HTTP, etc.).

        Use as a context manager for automatic cleanup::

            with sandbox.tunnel(remote_port=5432) as t:
                conn = psycopg2.connect(host="127.0.0.1", port=t.local_port)

        Or manage the lifecycle explicitly::

            t = sandbox.tunnel(remote_port=5432)
            # ... use tunnel ...
            t.close()

        Args:
            remote_port: TCP port inside the sandbox to tunnel to (1-65535).
            local_port: Local port to listen on. Defaults to mirroring
                remote_port. Use 0 to let the OS pick an available port.
            max_reconnects: Maximum number of automatic reconnect attempts
                when the WebSocket session drops. Set to 0 to disable.

        Returns:
            A Tunnel instance (context manager).

        Raises:
            ValueError: If port values are out of range.
            DataplaneNotConfiguredError: If dataplane_url is not configured.
            SandboxNotReadyError: If sandbox is not ready.
        rr   iÿÿ  z-remote_port must be between 1 and 65535 (got Ú)z,local_port must be between 1 and 65535 (got r²   )ri   rT   r7   rw   r   Ú_start)rH   Úremote_portr³   r´   r_   r&   r�   Úts           rB   ÚtunnelzSandbox.tunnelƒ  s    € ðP �KÔ( 5Ô(ÜØ?À¸}ÈAÐNóð ñ ˜a :Ô6°Ô6ÜØ>¸z¸lÈ!ÐLóð ð ×3Ñ3Ó5ˆØ—,‘,×'Ñ'ˆÜØØØØ!Ø)Øô
ˆð 	
�‰Œ
ØˆrD   ©Úexpires_in_secondsr_   c               óT   — | j                   j                  | j                  |||¬«      S )a¹  Get an authenticated URL for a service running in this sandbox.

        Returns a :class:`ServiceURL` whose properties auto-refresh the
        token transparently before it expires.

        Args:
            port: Port the service is listening on inside the sandbox.
            expires_in_seconds: Token TTL in seconds (1--86400, default 600).
            headers: Optional per-request header overrides.

        Returns:
            ServiceURL with auto-refreshing token and HTTP helpers.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            ValueError: If port or expires_in_seconds is out of range.
            SandboxClientError: For other errors.
        r»   )r7   Úservicer$   )rH   Úportr¼   r_   s       rB   r¾   zSandbox.serviceÀ  s0   € ð2 �|‰|×#Ñ#Ø�I‰IØØ1Øð	 $ó 
ð 	
rD   ©r¼   Úcontent_typeÚcontent_dispositionr_   c               óX   — | j                   j                  | j                  |||||¬«      S )aÐ  Create a link that downloads one file from this sandbox.

        The link carries its own token, so anyone holding the URL can fetch
        that one file without a LangSmith credential. Fetching wakes a
        stopped sandbox.

        Do not modify the file after minting a link for it. The link is
        pinned to a path, not to a snapshot of the contents, so a later
        write to that path may or may not be reflected in what the link
        serves. Write a new file and mint a new link when the contents
        change.

        Args:
            path: File path inside the sandbox.
            expires_in_seconds: Link TTL in seconds. Omit for a link that
                never expires.
            content_type: Content-Type to serve the file as.
            content_disposition: Content-Disposition to serve the file with,
                either ``"attachment"`` or ``"inline"``.
            headers: Optional per-request header overrides.

        Returns:
            DownloadURL with the link and its expiry, if any.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            ValueError: If expires_in_seconds is not positive.
            SandboxClientError: For other errors.
        rÀ   )r7   Úgenerate_download_urlr$   )rH   r¥   r¼   rÁ   rÂ   r_   s         rB   rÄ   zSandbox.generate_download_urlà  s7   € ðL �|‰|×1Ñ1Ø�I‰IØØ1Ø%Ø 3Øð 2ó 
ð 	
rD   éx   c               ó˜   — | j                   j                  | j                  ||¬«      }|j                  | _        |j                  | _        y)a1  Start a stopped sandbox and wait until ready.

        After starting, the sandbox's status and dataplane_url are updated
        in place.

        Args:
            timeout: Timeout in seconds when waiting for ready.
            headers: Optional per-request header overrides.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            ResourceCreationError: If sandbox fails during startup.
            ResourceTimeoutError: If sandbox doesn't become ready within timeout.
            SandboxClientError: For other errors.
        r¢   N)r7   Ústart_sandboxr$   r)   r&   )rH   rU   r_   Ú	refresheds       rB   ÚstartzSandbox.start  sE   € ð* —L‘L×.Ñ.Ø�I‰I˜w°ð /ó 
ˆ	ð  ×&Ñ&ˆŒØ&×4Ñ4ˆÕrD   ©r_   c               ó`   — | j                   j                  | j                  |¬«       d| _        y)a  Stop a running sandbox (preserves sandbox files for later restart).

        Args:
            headers: Optional per-request header overrides.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            SandboxClientError: For other errors.
        rÊ   ÚstoppedN)r7   Ústop_sandboxr$   r)   ©rH   r_   s     rB   ÚstopzSandbox.stop*  s(   € ð 	�‰×!Ñ! $§)¡)°WÐ!Ô=ð  ˆ�rD   c               óR   — | j                   j                  | j                  |¬«       y)zäDelete this sandbox.

        Args:
            headers: Optional per-request header overrides.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            SandboxClientError: For other errors.
        rÊ   N)r7   rM   r$   rÎ   s     rB   ÚdeletezSandbox.delete9  s   € ð 	�‰×#Ñ# D§I¡I°wÐ#Õ?rD   c               óT   — | j                   j                  | j                  |||¬«      S )a!  Capture a snapshot from this sandbox.

        Args:
            name: Snapshot name.
            timeout: Timeout in seconds when waiting for ready.
            headers: Optional per-request header overrides.

        Returns:
            Snapshot in "ready" status.

        Raises:
            ResourceNotFoundError: If sandbox not found.
            ResourceTimeoutError: If snapshot doesn't become ready within timeout.
            ResourceCreationError: If snapshot capture fails.
            SandboxClientError: For other errors.
        r¢   )r7   Úcapture_snapshotr$   )rH   r$   rU   r_   s       rB   rÓ   zSandbox.capture_snapshotE  s0   € ð. �|‰|×,Ñ,Ø�I‰IØØØð	 -ó 
ð 	
rD   )T)r?   zdict[str, Any]r@   r    rA   r8   Úreturnr"   )r@   zOptional[AsyncSandboxClient]rÔ   r   )rÔ   r"   )rO   zOptional[type]rP   zOptional[BaseException]rQ   zOptional[Any]rÔ   ÚNone)rÔ   r#   )rd   r#   rU   ÚintrV   úOptional[dict[str, str]]rW   r%   rX   r#   rY   úOptional[Callable[[str], Any]]rZ   rØ   r[   rÖ   r\   r8   r]   rÖ   r^   r8   r_   ÚRequestHeadersr`   zLiteral[True]rÔ   r   )rd   r#   rU   rÖ   rV   r×   rW   r%   rX   r#   rY   rØ   rZ   rØ   r[   rÖ   r\   r8   r]   rÖ   r^   r8   r_   rÙ   r`   zLiteral[False]rÔ   r   )rd   r#   rU   rÖ   rV   r×   rW   r%   rX   r#   rY   rØ   rZ   rØ   r[   rÖ   r\   r8   r]   rÖ   r^   r8   r_   rÙ   r`   r8   rÔ   ú%Union[ExecutionResult, CommandHandle])rd   r#   rU   rÖ   rV   r×   rW   r%   rX   r#   r`   r8   rY   rØ   rZ   rØ   r[   rÖ   r\   r8   r]   rÖ   r^   r8   r_   rÙ   rÔ   rÚ   )rd   r#   rU   rÖ   rV   r×   rW   r%   rX   r#   r_   rÙ   rÔ   r   )
rp   r#   rœ   rÖ   r�   rÖ   r_   rÙ   rÔ   r   )
r¥   r#   rª   zUnion[str, bytes]rU   rÖ   r_   rÙ   rÔ   rÕ   )r¥   r#   rU   rÖ   r_   rÙ   rÔ   Úbytes)
r¸   rÖ   r³   rÖ   r´   rÖ   r_   rÙ   rÔ   r   )r¿   rÖ   r¼   rÖ   r_   rÙ   rÔ   r   )r¥   r#   r¼   r-   rÁ   r%   rÂ   z$Optional[DownloadContentDisposition]r_   rÙ   rÔ   r   )rU   rÖ   r_   rÙ   rÔ   rÕ   )r_   rÙ   rÔ   rÕ   )r$   r#   rU   rÖ   r_   rÙ   rÔ   r   ))Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r&   r'   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r4   r   r7   r9   ÚclassmethodrC   rG   rK   rR   rT   r   re   rj   rk   r¡   r«   r°   rº   r¾   rÄ   rÉ   rÏ   rÑ   rÓ   r<   rD   rB   r"   r"   *   s_  … ñ&ðR ƒIØ#'€M�=Ó'Ø€BˆÓØ€FˆCÓØ$(€N�MÓ(Ø $€J�Ó$Ø $€J�Ó$Ø&*Ð�mÓ*Ø/3Ð˜}Ó3Ø $€J�Ó$Ø!%€K�Ó%Ø€Eˆ=ÓØ#€Iˆ}Ó#Ø'+Ð�}Ó+ñ #¨°tÔ<€Gˆ]Ó<Ù E°4Ô8€L�$Ó8àð
 !ð	!
àð!
ð ð!
ð ð	!
ð
 
ò!
ó ð!
ðF BFõ "
óHðà ðð )ðð ð	ð
 
óó"ð* ð
 Ø(+Ø ØØ47Ø47ØØ#&ØØØ"%Ø!ñàðð ð	ð
 &ðð ðð ðð 2ðð 2ðð ðð !ðð ðð ðð  ðð ðð  
ò!ó ðð$ ð
 Ø(+Ø ØØ47Ø47ØØ#&ØØØ"%ñàðð ð	ð
 &ðð ðð ðð 2ðð 2ðð ðð !ðð ðð ðð  ðð ðð  
ò!ó ðð, Ø(,Ø!Ø Ø48Ø48ØØ#(ØØØ"&Øñt
àðt
ð ð	t
ð
 &ðt
ð ðt
ð ðt
ð 2ðt
ð 2ðt
ð ðt
ð !ðt
ð ðt
ð ðt
ð  ðt
ð ðt
ð  
/ó!t
ðB  Ø#(ØØØ"&ñYàðYð ð	Yð
 &ðYð ðYð ðYð ðYð 2ðYð 2ðYð ðYð !ðYð ðYð ðYð  ðYð  
/ó!Yðv'àð'ð ð	'ð
 &ð'ð ð'ð ð'ð  ð'ð 
ó'ðZ ØØ"&ñ4
àð4
ð ð	4
ð
 ð4
ð  ð4
ð 
ó4
ðv Ø"&ñ))àð))ð #ð))ð
 ð))ð  ð))ð 
ó))ðX ,.Èñ)Øð)Ø%(ð)Ø8Fð)à	ó)ð^ ØØ"&ñ;àð;ð ð	;ð
 ð;ð  ð;ð 
ó;ðB #&Ø"&ñ
àð
ð  ð	
ð
  ð
ð 
ó
ðH -1Ø&*ØDHØ"&ñ-
àð-
ð *ð	-
ð
 $ð-
ð Bð-
ð  ð-
ð 
ó-
ðd Ø"&ñ	5ð ð5ð  ð	5ð
 
ó5ð6 15õ  ð 37õ 
@ð  Ø"&ñ
àð
ð ð	
ð
  ð
ð 
ô
rD   r"   ).rß   Ú
__future__r   Úcollections.abcr   Údataclassesr   r   Útypingr   r   r	   r
   r   r   r   r–   Úlangsmith.sandbox._exceptionsr   r   r   Úlangsmith.sandbox._helpersr   Úlangsmith.sandbox._modelsr   r   r   r   r   r   r   Úlangsmith.sandbox._tunnelr   ru   r   r   r   Úlangsmith.sandbox._async_clientr   rF   r   Úlangsmith.sandbox._clientr    r#   rÙ   r"   r<   rD   rB   Ú<module>rì      sŠ   ðÙ Eå "å #ß (ß S× SÑ Sã ÷ñ õ
 A÷÷ ñ õ -÷ñ ñ ÝBÝ=Ý7ð ˜' # s (Ñ+Ñ,€ð ÷v
ð v
ó ñv
rD   