ó
    üÞ jÁØ  ã                  óþ  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
Jr  SSKJr  SSKJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJrJ r J!r!  SSK"J#r#J$r$J%r%J&r&J'r'  SSK(J)r)J*r*J+r+J,r,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  \(       a  SSK8J9r9  SSK:J;r;  SS jr<SS jr=\\\>\>4      r?S S jr@S S jrAS!S jrBS"S jrC      S#S jrD                S$S jrE " S S5      rFg)%zEMain SandboxClient class for interacting with the sandbox server API.é    )ÚannotationsN)ÚCallableÚMapping)ÚPath)ÚTYPE_CHECKINGÚAnyÚOptionalÚUnion)Úquote)Úutils)Ú	Langsmith)Úhttpx)ÚResourceCreationErrorÚResourceNameConflictErrorÚResourceNotFoundErrorÚResourceTimeoutErrorÚSandboxAPIError)Úhandle_client_http_errorÚhandle_sandbox_creation_errorÚmerge_headersÚvalidate_service_paramsÚvalidate_ttl)ÚDownloadContentDispositionÚDownloadURLÚResourceStatusÚ
ServiceURLÚSnapshotÚSnapshotTag)ÚSandboxMountConfigÚ"validate_mount_config_proxy_config)ÚSandboxProxyConfig)ÚSandbox)ÚRetryTransport)ÚRegistriesResource©ÚAsyncSandboxClientc                 óT   • [         R                  " SSS9n U R                  S5       S3$ )z~Get the default sandbox API endpoint from environment.

Derives the endpoint from LANGSMITH_ENDPOINT (or LANGCHAIN_ENDPOINT).
ÚENDPOINTzhttps://api.smith.langchain.com)ÚdefaultÚ/ú/v2/sandboxes)Úls_utilsÚget_env_varÚrstrip)Úbases    ÚS/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/sandbox/_client.pyÚ_get_default_api_endpointr1   8   s.   € ô
 ×Ò 
Ð4UÑV€DØ�k‰k˜#ÓÐ˜}Ð-Ð-ó    c                 ó.   • [         R                  " S5      $ )z)Get the default API key from environment.ÚAPI_KEY)r,   r-   © r2   r0   Ú_get_default_api_keyr6   A   s   € ä×Ò 	Ó*Ð*r2   c                ó:   • U (       d  [        S5      e[        U SS9$ )zCQuote a user-controlled value for use as a single URL path segment.ú+URL path segment must be a non-empty stringÚ ©Úsafe©Ú
ValueErrorr   ©Úvalues    r0   Ú_quote_path_segmentr@   I   s   € æÜÐFÓGÐGÜ�˜RÑ Ð r2   c                ó:   • U (       d  [        S5      e[        U SS9$ )zÓQuote a Docker-style ``name[:tag]`` reference as one URL path segment.

The colon is left literal: it is a legal path character and the server splits
the reference on it, so percent-encoding would hide the tag.
r8   Ú:r:   r<   r>   s    r0   Ú_quote_reference_segmentrC   P   s    € ö ÜÐFÓGÐGÜ�˜SÑ!Ð!r2   c                ó`   • U(       a  SSR                  U5      -   OSnU  S[        U5       U 3$ )zDBuild the URL for a sandbox, optionally with trailing path segments.r*   r9   z/boxes/)Újoinr@   )Úbase_urlÚnameÚsegmentsÚsuffixs       r0   Ú_box_urlrJ   [   s5   € æ)1ˆS�3—8‘8˜HÓ%Ò%°r€FØˆZ�wÔ2°4Ó8Ð9¸&¸ÐBÐBr2   c                ó´  • [         R                  " 5       n[        R                  " USS9 n[	        U R                  S5      5       HX  nUR                  U 5      nUR                  (       a  UR                  S   S:X  a  M:  UR                  X4R                  5       SS9  MZ     S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)NÚw)ÚfileobjÚmodeÚ*r   z.gitF)ÚarcnameÚ	recursive)ÚioÚBytesIOÚtarfileÚopenÚsortedÚrglobÚrelative_toÚpartsÚaddÚas_posixÚgetvalue)Úcontext_pathÚbufÚtarÚpathÚrels        r0   Ú_make_docker_context_tarrb   a   s    € Ü
�*Š*‹,€CÜ	�Š˜c¨Ò	,°Ü˜<×-Ñ-¨cÓ2Ö3ˆDØ×"Ñ" <Ó0ˆCØ�y�y˜SŸY™Y q™\¨VÓ3ÙØ�G‰G�D§,¡,£.¸EˆGÓBñ	 4÷ 
-ð �<‰<‹>Ð÷ 
-Ô	,ð �<‰<‹>Ðús   «A7B:Â:
Cc                óâ  • [        U5      R                  5       R                  5       n[        U 5      R                  5       nUR                  5       (       d  X#-  nUR                  5       nUR	                  5       (       d  [        SU 35      eUR                  5       (       d  [        SU 35      e UR                  U5      nX$R                  5       4$ ! [
         a  n[        S5      UeS nAff = f)Nzcontext must be a directory: zdockerfile must be a file: z!dockerfile must be inside context)	r   Ú
expanduserÚresolveÚis_absoluteÚis_dirr=   Úis_filerX   r[   )Ú
dockerfileÚcontextr]   Údockerfile_pathÚdockerfile_relÚexcs         r0   Ú_resolve_dockerfile_contextrn   l   sè   € ô ˜“=×+Ñ+Ó-×5Ñ5Ó7€LÜ˜:Ó&×1Ñ1Ó3€OØ×&Ñ&×(Ñ(Ø&Ñ8ˆØ%×-Ñ-Ó/€OØ×Ñ× Ñ ÜÐ8¸¸ÐGÓHÐHØ×"Ñ"×$Ñ$ÜÐ6°Ð6GÐHÓIÐIðGØ(×4Ñ4°\ÓBˆð ×0Ñ0Ó2Ð2Ð2øô ó GÜÐ<Ó=À3ÐFûðGús   Â1C Ã
C.ÃC)Ã)C.c                óž  • [         R                  " X5      n[         R                  " U5      n[         R                  " U5      n	[         R                  " US5      n
SSSU
-   SSSSS	S
U -   S	SU-   SSU	-   SSU-   /nUb  UR	                  SSU-   /5        [        U=(       d    0 R                  5       5       H  u  pÍUR	                  SSU SU 3/5        M      S[        R                  " U5       S[        R                  " U5       S[        R                  " SU
-   5       S[        R                  " U5       S[        R                  " US-   5       S[        R                  " SU
-   5       S[        R                  " US-   5       S[        R                  " US-   5       S[        R                  " U5       S[        R                  " U5       S3$ )Nzbuildkitd.sockÚbuildctlz--addrzunix://Úbuildz--progress=plainz
--frontendzdockerfile.v0z--localzcontext=zdockerfile=z--optz	filename=z--outputztype=docker,name=ztarget=z
build-arg:Ú=zset -euo pipefail
mkdir -p Ú z
buildkitd --addr z --root zq --oci-worker=true --containerd-worker=false --oci-worker-snapshotter=native --oci-worker-binary buildkit-runc > z/buildkitd.logz— 2>&1 &
buildkitd_pid=$!
cleanup() { kill "$buildkitd_pid" >/dev/null 2>&1 || true; }
trap cleanup EXIT
for i in $(seq 1 300); do
  if buildctl --addr zi debug workers >/dev/null 2>&1; then break; fi
  if ! kill -0 "$buildkitd_pid" >/dev/null 2>&1; then cat z+; exit 1; fi
  if [ "$i" = 300 ]; then cat z¬; exit 1; fi
  sleep 0.1
done
for i in $(seq 1 300); do
  if docker info >/dev/null 2>&1; then break; fi
  if [ "$i" = 300 ]; then docker info; exit 1; fi
  sleep 0.1
done
z | docker load
rm -rf z	 || true
)	Ú	posixpathrE   ÚdirnameÚbasenameÚextendrV   ÚitemsÚshlexr   )Úremote_contextrl   Ú	image_refÚbuildkit_rootÚbuildkit_runÚ
build_argsÚtargetÚdockerfile_remoteÚdockerfile_dirÚdockerfile_nameÚsocket_pathrp   Úkeyr?   s                 r0   Ú_make_dockerfile_build_commandr…   €   så  € ô "Ÿš ~ÓFÐÜ×&Ò&Ð'8Ó9€NÜ×(Ò(Ð):Ó;€OÜ—.’. Ð/?Ó@€KàØØ�KÑØØØØØØ�^Ñ#ØØ˜Ñ&ØØ�oÑ%ØØ˜iÑ'ð€Hð" ÑØ�‰˜ )¨fÑ"4Ð5Ô6Ü˜j×.¨B×5Ñ5Ó7Ö8‰
ˆØ�‰˜ J¨s¨e°1°U°GÐ"<Ð=Ö>ñ 9ð	Ü—K’K Ó.Ð/¨q´·²¸\Ó1JÐ0Kð LÜ!ŸKšK¨	°KÑ(?Ó@ÐAð BÜ—+’+˜mÓ,Ð-ð .ô �[Š[˜Ð(8Ñ8Ó9Ð:ð ; ô
 !&§¢¨I¸Ñ,CÓ DÐEð Fô �{Š{˜<Ð*:Ñ:Ó;Ð<ð =ä�{Š{˜<Ð*:Ñ:Ó;Ð<ð =ô �:Š:�hÓÐ
 ð !Ü—+’+˜mÓ,Ð-¨Zð5	9ðr2   c                  ó,  • \ rS rSrSrSSSSSS.         S<S jjrS=S jr\S>S	 j5       rS?S
 jr	S?S jr
S@S jrSAS jrSAS jrSBS jr        SCS jrS=S jr SDSSSSSSSSSSSSS.                           SES jjjr SDSSSSSSSSSSSSSS.                             SFS jjjrSS.SGS jjrSS.SHS jjrSSSSS.           SIS jjrSS.SJS jjrSS.     SKS jjrSSS .         SLS! jjrSSSSS".             SMS# jjrS$S%SS&.         SNS' jjrS$SS(.       SOS) jjrSS.SJS* jjrSSS+SS,.               SPS- jjr SDS.SSSSSS+SS/.                       SQS0 jjjrSSSS+SS1.               SRS2 jjrSS.     SSS3 jjr SS.     STS4 jjr!SSSSS5.         SUS6 jjr"SS.     SVS7 jjr#S8S9SS&.         SWS: jjr$S;r%g)XÚSandboxClientéÂ   aR  Client for interacting with the Sandbox Server API.

This client provides a simple interface for managing sandboxes and snapshots.

Example:
    # Uses LANGSMITH_ENDPOINT and LANGSMITH_API_KEY from environment
    client = SandboxClient()

    # Or with explicit configuration
    client = SandboxClient(
        api_endpoint="https://api.smith.langchain.com/v2/sandboxes",
        api_key="your-api-key",
    )

    # Create a sandbox with the default runtime and run commands
    with client.sandbox() as sandbox:
        result = sandbox.run("python --version")
        print(result.stdout)
Ng      $@é   ©Úapi_endpointÚtimeoutÚapi_keyÚmax_retriesÚheadersc               óˆ  • U=(       d
    [        5       R                  S5      U l        U=(       d
    [        5       nX`l        X l        X@l        U(       a  [        U5      O0 U l        0 nU(       a  XgS'   U R                  (       a  [        XpR                  5      n[        US9n[        R                  " X‚US9U l        SU l        g)a9  Initialize the SandboxClient.

Args:
    api_endpoint: Full URL of the sandbox API endpoint. If not provided,
                  derived from LANGSMITH_ENDPOINT environment variable.
    timeout: Default HTTP timeout in seconds.
    api_key: API key for authentication. If not provided, uses
             LANGSMITH_API_KEY environment variable.
    max_retries: Maximum number of retries for transient errors (502, 503,
                 504), rate limits (429), and connection failures. Set to 0
                 to disable retries. Default: 3.
    headers: Optional default headers attached to every request on this
             client, including the data-plane ``/execute`` HTTP endpoint
             and the ``/execute/ws`` WebSocket upgrade. Use this to pass
             additional auth headers (e.g. ``X-Service-Key``).
r*   z	X-Api-Key)rŽ   )Ú	transportrŒ   r�   N)r1   r.   Ú	_base_urlr6   Ú_api_keyÚ_timeoutÚ_max_retriesÚdictÚ_default_headersr   r#   r   ÚClientÚ_httpÚ_registries_client)	Úselfr‹   rŒ   r�   rŽ   r�   Úresolved_api_keyÚclient_headersr‘   s	            r0   Ú__init__ÚSandboxClient.__init__×   s    € ð2 '×EÔ*CÓ*E×MÑMÈcÓRˆŒØ"×<Ô&:Ó&<ÐØ(ŒØŒØ'ÔÞAH´°W´ÈbˆÔØ)+ˆÞØ*:˜;Ñ'Ø× × Ü*¨>×;PÑ;PÓQˆNÜ"¨{Ñ;ˆ	Ü—\’\Ø¸.ñ
ˆŒ
ð 8<ˆÕr2   c                ó�   • SnU R                   R                  U5      (       a  U R                   S[        U5      *  $ U R                   $ )z>Return the API root URL, without the ``/v2/sandboxes`` suffix.r+   N)r’   ÚendswithÚlen)r›   rI   s     r0   Ú	_api_rootÚSandboxClient._api_root  s=   € à ˆØ�>‰>×"Ñ" 6×*Ñ*Ø—>‘> .¤S¨£[ LÐ1Ð1Ø�~‰~Ðr2   c                óÒ   • U R                   c;  [        U R                  U R                  5       U R                  =(       d    SS9U l         U R                   R
                  R                  $ )af  Manage sandbox image registries: create, list, retrieve, update, delete.

A registry stores credentials for pulling private images. Create one,
then pass its ``id`` as ``registry_id`` when building a snapshot.

Example:
    registry = client.registries.create(
        name="internal",
        url="registry.example.com",
        username="robot",
        password=os.environ["REGISTRY_PASSWORD"],
    )
    snapshot = client.create_snapshot(
        "internal-python",
        docker_image="registry.example.com/internal/python:3.12",
        fs_capacity_bytes=2 * 1024**3,
        registry_id=registry.id,
    )
N)r�   rF   Údefault_headers)rš   r   r“   r£   r—   Ú	sandboxesÚ
registries©r›   s    r0   r¨   ÚSandboxClient.registries  sV   € ð* ×"Ñ"Ñ*Ü&/ØŸ™ØŸ™Ó)Ø $× 5Ñ 5× =¸ñ'ˆDÔ#ð
 ×&Ñ&×0Ñ0×;Ñ;Ð;r2   c                óJ   • Uc  g[        U R                  R                  U5      $ )z8Merge default client headers with per-request overrides.N)r   r™   r�   ©r›   r�   s     r0   Ú_request_headersÚSandboxClient._request_headers%  s!   € à‰?ØÜ˜TŸZ™Z×/Ñ/°Ó9Ð9r2   c                óX   • U R                   (       d  Uc  g[        U R                   U5      $ )zÄMerge constructor-supplied default headers with per-request overrides.

Used by the WebSocket exec path so headers like ``X-Service-Key``
set on the client are attached to the WS upgrade request.
N)r—   r   r¬   s     r0   Ú_ws_default_headersÚ!SandboxClient._ws_default_headers+  s'   € ð ×$×$¨©ØÜ˜T×2Ñ2°GÓ<Ð<r2   c                ó˜   • SSK Jn  U" U R                  U R                  U R                  U R
                  U R                  =(       d    SS9$ )a+  Create an AsyncSandboxClient with the same configuration.

The returned client has its own HTTP connection pool; close it
independently (``await client.aclose()`` or ``async with``).

Returns:
    AsyncSandboxClient with the same endpoint, credentials, timeout,
    retry, and header configuration.
r   r%   NrŠ   )Úlangsmith.sandbox._async_clientr&   r’   r”   r“   r•   r—   )r›   r&   s     r0   Úto_asyncÚSandboxClient.to_async5  sA   € õ 	Gá!ØŸ™Ø—M‘MØ—M‘MØ×)Ñ)Ø×)Ñ)×1¨Tñ
ð 	
r2   c                óˆ   • U R                   R                  5         U R                  b  U R                  R                  5         gg)zClose the HTTP client.N)r™   Úcloserš   r©   s    r0   r·   ÚSandboxClient.closeI  s5   € à�
‰
×ÑÔØ×"Ñ"Ñ.Ø×#Ñ#×)Ñ)Õ+ð /r2   c                óà   •  U R                   R                  (       d  U R                   R                  5         U R                  b  U R                  R                  5         gg! [         a     gf = f)z,Close the HTTP client on garbage collection.N)r™   Ú	is_closedr·   rš   Ú	Exceptionr©   s    r0   Ú__del__ÚSandboxClient.__del__O  sY   € ð	Ø—:‘:×'×'Ø—
‘
× Ñ Ô"Ø×&Ñ&Ñ2Ø×'Ñ'×-Ñ-Õ/ð 3øäó 	Ùð	ús   ‚AA  Á 
A-Á,A-c                ó   • U $ )zEnter context manager.r5   r©   s    r0   Ú	__enter__ÚSandboxClient.__enter__Y  s   € àˆr2   c                ó$   • U R                  5         g)zExit context manager.N)r·   )r›   Úexc_typeÚexc_valÚexc_tbs       r0   Ú__exit__ÚSandboxClient.__exit__]  s   € ð 	�
‰
�r2   c                ó"   • SU R                    S3$ )ziReturn a string representation of the instance.

Returns:
    The string representation of the instance.
zSandboxClient (API URL: Ú))r’   r©   s    r0   Ú__repr__ÚSandboxClient.__repr__f  s   € ð *¨$¯.©.Ð)9¸Ð;Ð;r2   é   ©ÚsnapshotÚsnapshot_namerG   rŒ   Úidle_ttl_secondsÚdelete_after_stop_secondsÚvcpusÚ	mem_bytesÚfs_capacity_bytesÚmount_configÚproxy_configr�   c               óJ   • U R                  UUUUUUUUU	U
UUUS9nSUl        U$ )a.  Create a sandbox and return a Sandbox instance.

This is the primary method for creating sandboxes. Use it as a
context manager for automatic cleanup:

    with client.sandbox(snapshot_id="<uuid>") as sandbox:
        result = sandbox.run("echo hello")

    # Resolve by snapshot name instead of ID:
    with client.sandbox(snapshot_name="my-snap") as sandbox:
        result = sandbox.run("echo hello")

The sandbox is automatically deleted when exiting the context manager.
For sandboxes with manual lifecycle management, use create_sandbox().

Args:
    snapshot_id: Optional snapshot ID to boot from. Mutually exclusive
        with ``snapshot`` and ``snapshot_name``.
    snapshot: Snapshot to boot from, as a UUID, ``name:tag``, or a bare
        ``name`` (which means ``name:latest``). Prefer this over
        ``snapshot_id`` and ``snapshot_name``: it covers all three forms.
    snapshot_name: Deprecated synonym for ``snapshot``, kept for callers
        that predate it.
    name: Optional sandbox name (auto-generated if not provided).
    timeout: Timeout in seconds when waiting for ready.
    idle_ttl_seconds: Idle timeout in seconds. The launcher
        automatically stops the sandbox after this duration of
        inactivity. Must be a multiple of 60. ``0`` explicitly
        disables the idle stop. When omitted (``None``), the server
        applies a default of ``600`` seconds (10 minutes).
    delete_after_stop_seconds: Seconds after the sandbox enters the
        ``stopped`` state before it (and its filesystem clone) are
        permanently deleted. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion (manual cleanup required). When
        omitted (``None``), the server applies its configured default.
    vcpus: Number of vCPUs.
    mem_bytes: Memory in bytes.
    fs_capacity_bytes: Root filesystem capacity in bytes.
    mount_config: Mount configuration forwarded to the server as
        ``mount_config``. The backend expands mount auth into runtime
        proxy rules. Explicit AWS/GCP proxy rules in ``proxy_config``
        conflict with mount auth for the same provider.
    proxy_config: Per-sandbox proxy configuration forwarded to the
        server as-is. Shape matches the backend `proxy_config` field:
        ``{"rules": [...], "no_proxy": [...], "access_control":
        {"allow_list": [...]}}`` or ``{"access_control":
        {"deny_list": [...]}}``. Use ``access_control.allow_list`` to
        restrict outbound HTTPS to a set of host patterns (exact
        domains, globs like ``*.example.com``, IPs, CIDRs, or
        ``~regex``). Use ``proxy_config`` with provider rule helpers
        such as ``aws_auth`` to let the proxy sign supported
        AWS HTTPS requests on the sandbox's behalf.

Returns:
    Sandbox instance.

Raises:
    ResourceTimeoutError: If timeout waiting for sandbox to be ready.
    ResourceCreationError: If sandbox creation fails.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid, or if more than one of
        ``snapshot_id``, ``snapshot`` and ``snapshot_name`` is provided.
rÌ   T)Úcreate_sandboxÚ_auto_delete)r›   Úsnapshot_idrÍ   rÎ   rG   rŒ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   r�   Úsbs                  r0   ÚsandboxÚSandboxClient.sandboxr  sO   € ð` × Ñ ØØØ'ØØØ-Ø&?ØØØ/Ø%Ø%Øð !ð 
ˆð ˆŒØˆ	r2   T)rÍ   rÎ   rG   rŒ   Úwait_for_readyrÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   r�   c               ó  • U=(       d    UnU(       a  U(       a  X#:w  a  [        S5      eU(       a  U(       a  [        S5      e[        US5        [        US5        U R                   S3nSU0nU(       a  UUS'   U(       a  UUS'   OU(       a  UUS	'   U(       a  UUS
'   U(       a  UUS'   Ub  UUS'   Ub  UUS'   U	b  U	US'   U
b  U
US'   Ub  UUS'   Ub  [        XÍ5        UUS'   Ub  UUS'   U(       a  US-   OSn U R                  R                  UUUU R                  U5      S9nUR                  5         [        R                  " UR                  5       U SS9$ ! [        R                   a  n[        U5        e SnAff = f)a(  Create a new Sandbox.

The sandbox is NOT automatically deleted. Use delete_sandbox() for cleanup,
or use sandbox() for automatic cleanup with a context manager.

Args:
    snapshot_id: Optional snapshot ID to boot from. Mutually exclusive
        with ``snapshot`` and ``snapshot_name``.
    snapshot: Snapshot to boot from, as a UUID, ``name:tag``, or a bare
        ``name`` (which means ``name:latest``). Prefer this over
        ``snapshot_id`` and ``snapshot_name``: it covers all three forms.
    snapshot_name: Deprecated synonym for ``snapshot``, kept for callers
        that predate it.
    name: Optional sandbox name (auto-generated if not provided).
    timeout: Timeout in seconds when waiting for ready (only used when
        wait_for_ready=True).
    wait_for_ready: If True (default), block until sandbox is ready.
        If False, return immediately with status "provisioning". Use
        get_sandbox_status() or wait_for_sandbox() to poll for readiness.
    idle_ttl_seconds: Idle timeout in seconds. The launcher
        automatically stops the sandbox after this duration of
        inactivity. Must be a multiple of 60. ``0`` explicitly
        disables the idle stop. When omitted (``None``), the server
        applies a default of ``600`` seconds (10 minutes).
    delete_after_stop_seconds: Seconds after the sandbox enters the
        ``stopped`` state before it (and its filesystem clone) are
        permanently deleted. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion (manual cleanup required). When
        omitted (``None``), the server applies its configured default.
    vcpus: Number of vCPUs.
    mem_bytes: Memory in bytes.
    fs_capacity_bytes: Root filesystem capacity in bytes.
    mount_config: Mount configuration forwarded to the server as
        ``mount_config``. The backend expands mount auth into runtime
        proxy rules. Explicit AWS/GCP proxy rules in ``proxy_config``
        conflict with mount auth for the same provider.
    proxy_config: Per-sandbox proxy configuration forwarded to the
        server as-is. Shape matches the backend `proxy_config` field:
        ``{"rules": [...], "no_proxy": [...], "access_control":
        {"allow_list": [...]}}`` or ``{"access_control":
        {"deny_list": [...]}}``. Use ``access_control.allow_list`` to
        restrict outbound HTTPS to a set of host patterns (exact
        domains, globs like ``*.example.com``, IPs, CIDRs, or
        ``~regex``). Use ``proxy_config`` with provider rule helpers
        such as ``aws_auth`` to let the proxy sign supported
        AWS HTTPS requests on the sandbox's behalf.

Returns:
    Created Sandbox. When wait_for_ready=False, the sandbox will have
    status="provisioning" and cannot be used for operations until ready.

Raises:
    ResourceTimeoutError: If timeout waiting for sandbox to be ready.
    ResourceCreationError: If sandbox creation fails.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid, or if more than one of
        ``snapshot_id``, ``snapshot`` and ``snapshot_name`` is provided.
z,snapshot and snapshot_name must not disagreez@At most one of snapshot_id, snapshot or snapshot_name may be setrÏ   rÐ   ú/boxesrÝ   rÙ   rÍ   rÎ   rŒ   rG   NrÑ   rÒ   rÓ   rÔ   rÕ   rË   )ÚjsonrŒ   r�   F©ÚclientÚauto_delete)r=   r   r’   r    r™   Úpostr­   Úraise_for_statusr"   Ú	from_dictrà   r   ÚHTTPStatusErrorr   )r›   rÙ   rÍ   rÎ   rG   rŒ   rÝ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   r�   Ú	referenceÚurlÚpayloadÚhttp_timeoutÚresponseÚes                        r0   r×   ÚSandboxClient.create_sandboxÔ  sº  € ðX ×- ˆ	Þž¨(Ó*CÜÐKÓLÐLÞž9ÜØRóð ô 	Ð%Ð'9Ô:ÜÐ.Ð0KÔLà—‘Ð  Ð'ˆð ˜nð#
ˆö Ø%0ˆG�MÑ"ÞØ"*ˆG�JÒÞØ'4ˆG�OÑ$ÞØ!(ˆG�IÑÞØ"ˆG�F‰OØÑ'Ø*:ˆGÐ&Ñ'Ø$Ñ0Ø3LˆGÐ/Ñ0ØÑØ$ˆG�GÑØÑ Ø#,ˆG�KÑ ØÑ(Ø+<ˆGÐ'Ñ(ØÑ#Ü.¨|ÔJØ&2ˆG�NÑ#ØÑ#Ø&2ˆG�NÑ#æ)7˜ "š¸Rˆð	Ø—z‘z—‘ØØØ$Ø×-Ñ-¨gÓ6ð	 'ð ˆHð ×%Ñ%Ô'Ü×$Ò$ X§]¡]£_¸TÈuÑUÐUøÜ×$Ñ$ó 	Ü)¨!Ô,Øûð	ús   Ã=AE ÅFÅ0E<Å<F©r�   c               óŠ  • [        U R                  U5      n U R                  R                  X0R	                  U5      S9nUR                  5         [        R                  " UR                  5       U SS9$ ! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e S	nAff = f)
zþGet a Sandbox by name.

The sandbox is NOT automatically deleted. Use delete_sandbox() for cleanup.

Args:
    name: Sandbox name.

Returns:
    Sandbox.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
rï   Frá   é”  ú	Sandbox 'ú' not foundrÛ   ©Úresource_typeN)rJ   r’   r™   Úgetr­   rå   r"   ræ   rà   r   rç   rì   Ústatus_coder   r   ©r›   rG   r�   ré   rì   rí   s         r0   Úget_sandboxÚSandboxClient.get_sandboxX  s²   € ô �t—~‘~ tÓ,ˆð
	Ø—z‘z—~‘~ c×3HÑ3HÈÓ3Q�~ÐRˆHØ×%Ñ%Ô'Ü×$Ò$ X§]¡]£_¸TÈuÑUÐUøÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	ús   ˜AA4 Á4CÂ5B=Â=Cc          	     óÊ  • U R                    S3n U R                  R                  X R                  U5      S9nUR	                  5         UR                  5       nUR                  S/ 5       Vs/ sH  n[        R                  " XPSS9PM     sn$ s  snf ! [        R                   a;  nUR                  R                  S:X  a  [        SU S35      Ue[        U5        e S	nAff = f)
z5List all Sandboxes.

Returns:
    List of Sandboxes.
rß   rï   r§   Frá   rñ   úAPI endpoint not found: ú%. Check that api_endpoint is correct.N)r’   r™   rö   r­   rå   rà   r"   ræ   r   rç   rì   r÷   r   r   )r›   r�   ré   rì   ÚdataÚcrí   s          r0   Úlist_sandboxesÚSandboxClient.list_sandboxesu  sé   € ð —‘Ð  Ð'ˆð	Ø—z‘z—~‘~ c×3HÑ3HÈÓ3Q�~ÐRˆHØ×%Ñ%Ô'Ø—=‘=“?ˆDð Ÿ™ +¨rÔ2óá2�Aô ×!Ò! !¸eÔDÙ2ñð ùò øô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü%Ø.¨s¨eð 4:ð ;óð ðô % QÔ'Øûð	ús*   ‘AB Á-BÂB ÂB ÂC"Â'6CÃC")Únew_namerÏ   rÐ   r�   c               ó<  • [        US5        [        US5        [        U R                  U5      n0 nUb  X'S'   Ub  X7S'   Ub  XGS'    U R                  R	                  XgU R                  U5      S9nUR                  5         [        R                  " UR                  5       U SS9$ ! [        R                   ac  n	U	R                  R                  S:X  a  [        S	U S
3SS9U	eU	R                  R                  S:X  a  [        SU S3SS9U	e[!        U	5        e Sn	A	ff = f)aÍ  Update a sandbox's properties.

Args:
    name: Current sandbox name.
    new_name: New display name.
    idle_ttl_seconds: Idle timeout in seconds. Must be a multiple of
        60. ``0`` disables idle-stop. ``None`` leaves the existing
        value unchanged.
    delete_after_stop_seconds: Seconds after entering ``stopped``
        before deletion. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion. ``None`` leaves the existing value
        unchanged.

Returns:
    Updated Sandbox.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ResourceNameConflictError: If new_name is already in use.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid.
rÏ   rÐ   NrG   ©rà   r�   Frá   rñ   rò   ró   rÛ   rô   i™  zSandbox name 'z' already in use)r   rJ   r’   r™   Úpatchr­   rå   r"   ræ   rà   r   rç   rì   r÷   r   r   r   )
r›   rG   r  rÏ   rÐ   r�   ré   rê   rì   rí   s
             r0   Úupdate_sandboxÚSandboxClient.update_sandboxŽ  s<  € ô> 	Ð%Ð'9Ô:ÜÐ.Ð0KÔLä�t—~‘~ tÓ,ˆØ"$ˆØÑØ&�F‰OØÑ'Ø*:Ð&Ñ'Ø$Ñ0Ø3LÐ/Ñ0ð	Ø—z‘z×'Ñ'Ø¨4×+@Ñ+@ÀÓ+Ið (ð ˆHð ×%Ñ%Ô'Ü×$Ò$ X§]¡]£_¸TÈuÑUÐUøÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðð �z‰z×%Ñ%¨Ó,Ü/Ø$ X JÐ.>Ð?Ø"+ñð ðô % QÔ'Øûð	ús   ÁAB$ Â$DÂ8ADÄDc               óL  • [        U R                  U5      n U R                  R                  X0R	                  U5      S9nUR                  5         g! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f)z•Delete a Sandbox.

Args:
    name: Sandbox name.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
rï   rñ   rò   ró   rÛ   rô   N)rJ   r’   r™   Údeleter­   rå   r   rç   rì   r÷   r   r   rø   s         r0   Údelete_sandboxÚSandboxClient.delete_sandboxÌ  sš   € ô �t—~‘~ tÓ,ˆð	(Ø—z‘z×(Ñ(¨×6KÑ6KÈGÓ6TÐ(ÐUˆHØ×%Ñ%Õ'øÜ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(ús   ˜8A ÁB#Á%4BÂB#c               óŒ  • [        U R                  US5      n U R                  R                  X0R	                  U5      S9nUR                  5         [        R                  " UR                  5       5      $ ! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e SnAff = f)	aˆ  Get the provisioning status of a sandbox.

This is a lightweight endpoint designed for high-frequency polling
during sandbox provisioning. It returns only the status fields
without full sandbox data.

Args:
    name: Sandbox name.

Returns:
    ResourceStatus with status and status_message.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
Ústatusrï   rñ   rò   ró   rÛ   rô   N)rJ   r’   r™   rö   r­   rå   r   ræ   rà   r   rç   rì   r÷   r   r   rø   s         r0   Úget_sandbox_statusÚ SandboxClient.get_sandbox_statusâ  s°   € ô& �t—~‘~ t¨XÓ6ˆð
	Ø—z‘z—~‘~ c×3HÑ3HÈÓ3Q�~ÐRˆHØ×%Ñ%Ô'Ü!×+Ò+¨H¯M©M«OÓ<Ð<øÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	ús   ™AA5 Á5CÂ	5B>Â>CiX  ©Úexpires_in_secondsr�   c               óÐ  ^ ^^^^• [        TT5        [        T R                  TS5      nTTS.nSUUUUU 4S jjn T R                  R	                  XVT R                  T5      S9nUR                  5         [        R                  " UR                  5       US9$ ! [        R                   a:  n	U	R                  R                  S:X  a  [        ST S3S	S
9U	e[        U	5        e Sn	A	ff = f)aé  Get an authenticated URL for a service running inside a sandbox.

Returns a :class:`ServiceURL` whose properties auto-refresh the
token transparently before it expires.  The object also provides
HTTP helper methods (``.get``, ``.post``, etc.) that inject the
authentication header automatically.

Args:
    name: Sandbox name.
    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.
zservice-url)Úportr  c                 ó(   >• TR                  TTT TS9$ )Nr  )Úservice)r  r�   rG   r  r›   s   €€€€€r0   Ú
_refresherÚ)SandboxClient.service.<locals>._refresher$  s%   ø€ Ø—<‘<ØØØ#5Øð	  ð ð r2   r  )r  rñ   rò   ró   rÛ   rô   N)Úreturnr   )r   rJ   r’   r™   rä   r­   rå   r   ræ   rà   r   rç   rì   r÷   r   r   )
r›   rG   r  r  r�   ré   rê   r  rì   rí   s
   `````     r0   r  ÚSandboxClient.service  sÝ   ü€ ô: 	  Ð&8Ô9Ü�t—~‘~ t¨]Ó;ˆØÐ7IÑJˆ÷	ó 	ð	Ø—z‘z—‘Ø¨4×+@Ñ+@ÀÓ+Ið 'ð ˆHð ×%Ñ%Ô'Ü×'Ò'¨¯©«ÀJÑOÐOøÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	ús   »AB ÂC%Â+5C Ã C%)r  Úcontent_typeÚcontent_dispositionr�   c               óð  • Ub  US:  a  [        SU S35      e[        U R                  US5      nSU0nUb  X8S'   Ub  XHS'   Ub  XXS	'    U R                  R	                  XxU R                  U5      S
9n	U	R                  5         [        R                  " U	R                  5       5      $ ! [        R                   a:  n
U
R                  R                  S:X  a  [        SU S3SS9U
e[        U
5        e Sn
A
ff = f)a…  Create a link that downloads one file from a sandbox.

The link carries its own token, so anyone holding the URL can fetch
that one file without a LangSmith credential. It is pinned to the
sandbox and the exact path and cannot be repointed at another file.
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:
    name: Sandbox name.
    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.
Né   z/expires_in_seconds must be greater than 0 (got z(); omit it for a link that never expireszdownload-urlr`   r  r  r  r  rñ   rò   ró   rÛ   rô   )r=   rJ   r’   r™   rä   r­   rå   r   ræ   rà   r   rç   rì   r÷   r   r   )r›   rG   r`   r  r  r  r�   ré   rê   rì   rí   s              r0   Úgenerate_download_urlÚ#SandboxClient.generate_download_url:  s!  € ðR Ñ)Ð.@À1Ó.DÜðØ*Ð+Ð+SðUóð ô �t—~‘~ t¨^Ó<ˆØ#)¨4 .ˆØÑ)Ø,>Ð(Ñ)ØÑ#Ø&2�NÑ#ØÑ*Ø-@Ð)Ñ*ð	Ø—z‘z—‘Ø¨4×+@Ñ+@ÀÓ+Ið 'ð ˆHð ×%Ñ%Ô'Ü×(Ò(¨¯©«Ó9Ð9øÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	ús   Á
AB' Â'C5Â;5C0Ã0C5éx   g      ð?)rŒ   Úpoll_intervalr�   c               óˆ  • SSK nUR                  5       U-   n U R                  XS9nUR                  S:X  a  U R	                  XS9$ UR                  S:X  a  [        UR                  =(       d    SSS9eXeR                  5       -
  nUS::  a  [        S	U S
U S3SUR                  S9eUR                  [        X85      5        M«  )a7  Poll until a sandbox reaches "ready" or "failed" status.

Uses the lightweight status endpoint for polling, then fetches the
full sandbox data once ready.

Args:
    name: Sandbox name.
    timeout: Maximum time to wait in seconds.
    poll_interval: Time between status checks in seconds.

Returns:
    Sandbox in "ready" status.

Raises:
    ResourceCreationError: If sandbox status becomes "failed".
    ResourceTimeoutError: If timeout expires while still "provisioning".
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
r   Nrï   ÚreadyÚfailedzSandbox provisioning failedrÛ   rô   rò   ú' not ready after Ús©rõ   Úlast_status)
ÚtimeÚ	monotonicr  r  rù   r   Ústatus_messager   ÚsleepÚmin)	r›   rG   rŒ   r!  r�   r)  Údeadliner  Ú	remainings	            r0   Úwait_for_sandboxÚSandboxClient.wait_for_sandbox  sÓ   € ó6 	à—>‘>Ó# gÑ-ˆØØ×,Ñ,¨TÐ,ÐCˆFØ�}‰} Ó'Ø×'Ñ'¨Ð'Ð>Ð>Ø�}‰} Ó(Ü+Ø×)Ñ)×JÐ-JØ"+ñð ð !§>¡>Ó#3Ñ3ˆIØ˜A‹~Ü*Ø ˜vÐ%7¸°yÀÐBØ"+Ø &§¡ñð ð
 �J‰J”s˜=Ó4Ô5ñ! r2   ©rŒ   r�   c               óp  • [        U R                  US5      n U R                  R                  U0 U R	                  U5      S9nUR                  5         U R                  XUS	9$ ! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAN]SnAff = f)
a˜  Start a stopped sandbox and wait until ready.

Args:
    name: Sandbox name.
    timeout: Timeout in seconds when waiting for ready.

Returns:
    Sandbox in "ready" status.

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.
Ústartr  rñ   rò   ró   rÛ   rô   Nr2  )rJ   r’   r™   rä   r­   rå   r   rç   rì   r÷   r   r   r0  )r›   rG   rŒ   r�   ré   rì   rí   s          r0   Ústart_sandboxÚSandboxClient.start_sandbox¯  s¿   € ô, �t—~‘~ t¨WÓ5ˆð
	(Ø—z‘z—‘Ø˜" d×&;Ñ&;¸GÓ&Dð 'ð ˆHð ×%Ñ%Ô'ð ×$Ñ$ TÀGÐ$ÐLÐLøô ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(ús   ™:A# Á#B5Á74B0Â0B5c               óR  • [        U R                  US5      n U R                  R                  U0 U R	                  U5      S9nUR                  5         g! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f)	zÇStop a running sandbox (preserves sandbox files for later restart).

Args:
    name: Sandbox name.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
Ústopr  rñ   rò   ró   rÛ   rô   N)rJ   r’   r™   rä   r­   rå   r   rç   rì   r÷   r   r   rø   s         r0   Ústop_sandboxÚSandboxClient.stop_sandboxÕ  s¥   € ô �t—~‘~ t¨VÓ4ˆð
	(Ø—z‘z—‘Ø˜" d×&;Ñ&;¸GÓ&Dð 'ð ˆHð ×%Ñ%Õ'øÜ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(ús   ™:A ÁB&Á(4B!Â!B&é<   )ÚtagÚregistry_idrŒ   r�   c               óˆ  • U R                    S3nUUUS.n	Ub  XIS'   Ub  XYS'    U R                  R                  X‰U R                  U5      S9n
U
R	                  5         [
        R                  " U
R                  5       5      nU R                  UR                  XgS9$ ! [        R                   a  n[        U5        e SnAff = f)a/  Build a snapshot from a Docker image.

Blocks until the snapshot is ready (polls with 2s interval).

Args:
    name: Snapshot name.
    docker_image: Docker image to build from (e.g., "python:3.12-slim").
    fs_capacity_bytes: Filesystem capacity in bytes.
    tag: Tag to publish the snapshot under, within ``name``. Re-using a
        tag moves it to the new snapshot, leaving the previous one
        addressable by id. Defaults server-side to the Docker image's
        own tag, else ``latest``.
    registry_id: Private registry ID.
    timeout: Timeout in seconds when waiting for ready.

Returns:
    Snapshot in "ready" status.

Raises:
    ResourceTimeoutError: If snapshot doesn't become ready within timeout.
    ResourceCreationError: If snapshot build fails.
    SandboxClientError: For other errors.
ú
/snapshots)rG   Údocker_imagerÓ   Nr<  r=  r  r2  )r’   r™   rä   r­   rå   r   ræ   rà   r   rç   r   Úwait_for_snapshotÚid)r›   rG   r@  rÓ   r<  r=  rŒ   r�   ré   rê   rì   rÍ   rí   s                r0   Úcreate_snapshotÚSandboxClient.create_snapshotñ  sÓ   € ðD —‘Ð  
Ð+ˆð Ø(Ø!2ñ#
ˆð
 ‰?Ø �E‰NØÑ"Ø%0�MÑ"ð	Ø—z‘z—‘Ø¨4×+@Ñ+@ÀÓ+Ið 'ð ˆHð ×%Ñ%Ô'Ü×)Ò)¨(¯-©-«/Ó:ˆHð
 ×%Ñ% h§k¡k¸7Ð%ÐTÐTøô	 ×$Ñ$ó 	Ü$ QÔ'Øûð	ús   ¥AB ÂCÂ0B<Â<CÚ.)rj   r~   r   Úon_build_logrÑ   rÒ   rŒ   r�   c               óÜ  • [        X$5      u  pÍS[        R                  " 5       R                  SS  3nS[        R                  " 5       R                  SS  3n[        R
                  " US5      n[        R
                  " US5      nS[        R                  " 5       R                   3n[        R
                  " US5      n[        R
                  " US	5      nU R                  UU
UU	UUS
9 nUR                  U[        U5      U
US9  UR                  S[        R                  " U5      -   S-   [        R                  " U5      -   S-   [        R                  " U5      -   S-   [        R                  " U5      -   U
US9  UR                  [        UUUUUUUS9U
UUUS9nUR                  S:w  a
  [        SSS9eU R                  UR                   UUUU
US9sSSS5        $ ! , (       d  f       g= f)aˆ  Build a snapshot from a local Dockerfile context.

When ``fs_capacity_bytes`` is omitted, the server applies its default.
``vcpus`` and ``mem_bytes`` size the temporary builder sandbox. The
build runs BuildKit plus the native snapshotter's layer copies inside
it, which contend for a single core by default, so giving the builder
an extra vCPU can cut a cold build's wall time substantially.
zsnapshot-builder-Né   z/var/lib/langsmith-build/rj   zcontext.tarzlangsmith-snapshot-build:zbuildkit-rootzbuildkit-run)rG   rŒ   rÑ   rÒ   rÓ   r�   r2  zrm -rf z && mkdir -p z && tar -xf z -C )rz   rl   r{   r|   r}   r~   r   )rŒ   Ú	on_stdoutÚ	on_stderrr�   r   z Dockerfile snapshot build failedrÍ   rô   )r@  rÓ   rŒ   r�   )rn   ÚuuidÚuuid4Úhexrt   rE   rÛ   Úwriterb   Úrunry   r   r…   Ú	exit_coder   Úcapture_snapshotrG   )r›   rG   ri   rÓ   rj   r~   r   rF  rÑ   rÒ   rŒ   r�   r]   rl   Úbuilder_nameÚ
build_rootrz   Ú
remote_tarr{   r|   r}   rÛ   Úresults                          r0   Úcreate_snapshot_from_dockerfileÚ-SandboxClient.create_snapshot_from_dockerfile+  s  € ô. (CÀ:Ó'WÑ$ˆà*¬4¯:ª:«<×+;Ñ+;¸C¸RÐ+@Ð*AÐBˆð 1´·²³×1AÑ1AÀ#À2Ð1FÐ0GÐHˆ
Ü"Ÿš¨
°IÓ>ˆÜ—^’^ J°Ó>ˆ
Ø/´·
²
³×0@Ñ0@Ð/AÐBˆ	Ü!Ÿš z°?ÓCˆÜ —~’~ j°.ÓAˆà�\‰\ØØØØØ/Øð ñ 
ð Ø�M‰MØÜ(¨Ó6ØØð	 ñ ð �K‰KØÜ—+’+˜nÓ-ñ.à!ñ"ô —+’+˜nÓ-ñ.ð !ñ	!ô
 —+’+˜jÓ)ñ*ð ñô —+’+˜nÓ-ñ.ð  Øð ñ ð —[‘[Ü.Ø#1Ø#1Ø'Ø"/Ø!-Ø)Ø!ñð  Ø&Ø&Øð !ð ˆFð ×Ñ 1Ó$Ü+Ø6Ø",ñð ð ×(Ñ(Ø—‘ØØ&Ø"3ØØð )ð ÷_
÷ 
÷ 
ús   Ã*C)GÇ
G+)r<  r@  rÓ   rŒ   r�   c               óô  • [        U R                  US5      nSU0n	Ub  X9S'   Ub  XIS'   Ub  XYS'    U R                  R                  X‰U R	                  U5      S9n
U
R                  5         [        R                  " U
R                  5       5      nU R                  UR                   XgS9$ ! [        R                   a:  nUR                  R                  S:X  a  [        S	U S
3SS9Ue[        U5        e SnAff = f)a°  Capture a snapshot from a running sandbox.

Blocks until the snapshot is ready (polls with 2s interval).

Args:
    sandbox_name: Name of the sandbox to capture from.
    name: Snapshot name.
    tag: Tag to publish the snapshot under, within ``name``. Re-using a
        tag moves it to the new snapshot, leaving the previous one
        addressable by id. Defaults server-side to ``latest``.
    docker_image: Optional Docker image tag inside the sandbox to export
        into the snapshot instead of capturing the live root filesystem.
    fs_capacity_bytes: Filesystem capacity in bytes for Docker image export.
    timeout: Timeout in seconds when waiting for ready.

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Í   rG   Nr<  r@  rÓ   r  rñ   rò   ró   rÛ   rô   r2  )rJ   r’   r™   rä   r­   rå   r   ræ   rà   r   rç   rì   r÷   r   r   rA  rB  )r›   Úsandbox_namerG   r<  r@  rÓ   rŒ   r�   ré   rê   rì   rÍ   rí   s                r0   rQ  ÚSandboxClient.capture_snapshot‰  s
  € ôF �t—~‘~ |°ZÓ@ˆà#)¨4 .ˆØ‰?Ø �E‰NØÑ#Ø&2�NÑ#ØÑ(Ø+<Ð'Ñ(ð	Ø—z‘z—‘Ø¨4×+@Ñ+@ÀÓ+Ið 'ð ˆHð ×%Ñ%Ô'Ü×)Ò)¨(¯-©-«/Ó:ˆHð ×%Ñ% h§k¡k¸7Ð%ÐTÐTøô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜~¨[Ð9Èñàðô % QÔ'Øûð	ús   ²AB) Â)C7Â=5C2Ã2C7c               ó’  • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9nUR                  5         [        R                  " UR                  5       5      $ ! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e SnAff = f)	ao  Get a snapshot by ID or by a Docker-style reference.

Args:
    snapshot_id: Snapshot UUID, ``name:tag``, or a bare ``name``. A bare
        name means ``name:latest``, falling back to the newest ready
        untagged snapshot of that name.

Returns:
    Snapshot.

Raises:
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
ú/snapshots/rï   rñ   ú
Snapshot 'ró   rÍ   rô   N)r’   rC   r™   rö   r­   rå   r   ræ   rà   r   rç   rì   r÷   r   r   ©r›   rÙ   r�   ré   rì   rí   s         r0   Úget_snapshotÚSandboxClient.get_snapshotÆ  sº   € ð" —‘Ð  Ô,DÀ[Ó,QÐ+RÐSˆð
	Ø—z‘z—~‘~ c×3HÑ3HÈÓ3Q�~ÐRˆHØ×%Ñ%Ô'Ü×%Ò% h§m¡m£oÓ6Ð6øÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø   ¨[Ð9Èñàðô % QÔ'Øûð	ús   œAA8 Á8CÂ5CÃCc               óì  • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9nUR                  5         UR                  5       R                  S5      =(       d    /  Vs/ sH  n[        R                  " U5      PM     sn$ s  snf ! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e S	nAff = f)
a|  List every tag published under a snapshot name.

Args:
    name: Snapshot name, without a tag.

Returns:
    Each tag under the name with the snapshot it resolves to. Empty when
    the name exists but currently carries no tags.

Raises:
    ResourceNotFoundError: If nobody has published under the name.
    SandboxClientError: For other errors, including a name carrying a tag.
z/snapshots-by-name/rï   Útagsrñ   zSnapshot name 'ró   rÍ   rô   N)r’   r@   r™   rö   r­   rå   rà   r   ræ   r   rç   rì   r÷   r   r   )r›   rG   r�   ré   rì   r<  rí   s          r0   Úlist_snapshot_tagsÚ SandboxClient.list_snapshot_tagså  sí   € ð  —‘Ð Ð 3Ô4GÈÓ4MÐ3NÐOˆð	Ø—z‘z—~‘~ c×3HÑ3HÈÓ3Q�~ÐRˆHØ×%Ñ%Ô'à6>·m±m³o×6IÑ6IÈ&Ó6Q×6WÐUWÐ6WóÙ6W¨s”×%Ò% cÖ*Ñ6Wñð ùò øô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø% d V¨;Ð7Àzñàðô % QÔ'Øûð	ús*   œA"B% Á>B ÂB% Â B% Â%C3Â95C.Ã.C3)Úname_containsÚlimitÚoffsetr�   c               ó  • U R                    S3n0 nUb  XS'   Ub  X&S'   Ub  X6S'    U R                  R                  UU=(       d    SU R                  U5      S9nUR	                  5         UR                  5       nUR                  S/ 5       V	s/ sH  n	[        R                  " U	5      PM     sn	$ s  sn	f ! [        R                   a;  n
U
R                  R                  S:X  a  [        S	U S
35      U
e[        U
5        e Sn
A
ff = f)aÆ  List snapshots.

The backend always paginates this endpoint. When ``limit`` is omitted
the server applies a default page size (currently 50), so a single
call is not guaranteed to return every snapshot. To iterate through
all results, repeat the call with increasing ``offset`` values (or an
explicit ``limit``) until fewer than ``limit`` snapshots come back.

Args:
    name_contains: Optional case-insensitive substring filter applied
        to snapshot names server-side.
    limit: Optional maximum number of snapshots to return for a single
        request. Must be between 1 and 500 (inclusive); the server
        rejects values outside that range. Defaults to 50 server-side
        when omitted.
    offset: Optional number of snapshots to skip before returning
        results. Must be ``>= 0``. Useful for paginating through
        large result sets in combination with ``limit``.

Returns:
    A single page of Snapshots matching the provided filters.
r?  Nre  rf  rg  )Úparamsr�   Ú	snapshotsrñ   rü   rý   )r’   r™   rö   r­   rå   rà   r   ræ   r   rç   rì   r÷   r   r   )r›   re  rf  rg  r�   ré   ri  rì   rþ   r&  rí   s              r0   Úlist_snapshotsÚSandboxClient.list_snapshots  s  € ð< —‘Ð  
Ð+ˆà!#ˆØÑ$Ø&3�?Ñ#ØÑØ#�7‰OØÑØ%�8Ñð	Ø—z‘z—~‘~ØØ—~ Ø×-Ñ-¨gÓ6ð &ð ˆHð
 ×%Ñ%Ô'Ø—=‘=“?ˆDØ37·8±8¸KÈÔ3LÓMÑ3L¨a”H×&Ò& qÖ)Ñ3LÑMÐMùÒMøÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü%Ø.¨s¨eð 4:ð ;óð ðô % QÔ'Øûð	ús*   ¨A'B6 ÂB1Â.B6 Â1B6 Â6DÃ
6D Ä Dc               óT  • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9nUR                  5         g! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f)	zŸDelete a snapshot.

Args:
    snapshot_id: Snapshot UUID.

Raises:
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
r\  rï   rñ   r]  ró   rÍ   rô   N)r’   r@   r™   r	  r­   rå   r   rç   rì   r÷   r   r   r^  s         r0   Údelete_snapshotÚSandboxClient.delete_snapshot?  s¦   € ð —‘Ð  Ô,?ÀÓ,LÐ+MÐNˆð	(Ø—z‘z×(Ñ(¨×6KÑ6KÈGÓ6TÐ(ÐUˆHØ×%Ñ%Õ'øÜ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø   ¨[Ð9Èñàðô % Q×'Ñ'ûð	(ús   œ8A ÁB'Á)4B"Â"B'i,  g       @c               ón  • SSK nUR                  5       U-   n U R                  XS9nUR                  S:X  a  U$ UR                  S:X  a  [	        UR
                  =(       d    SSS9eXeR                  5       -
  nUS::  a  [        S	U S
U S3SUR                  S9eUR                  [        X85      5        Mž  )aÆ  Poll until a snapshot reaches "ready" or "failed" status.

Args:
    snapshot_id: Snapshot UUID.
    timeout: Maximum time to wait in seconds.
    poll_interval: Time between status checks in seconds.

Returns:
    Snapshot in "ready" status.

Raises:
    ResourceCreationError: If snapshot status becomes "failed".
    ResourceTimeoutError: If timeout expires.
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
r   Nrï   r#  r$  zSnapshot build failedrÍ   rô   r]  r%  r&  r'  )	r)  r*  r_  r  r   r+  r   r,  r-  )	r›   rÙ   rŒ   r!  r�   r)  r.  rÍ   r/  s	            r0   rA  ÚSandboxClient.wait_for_snapshotW  sÄ   € ó0 	à—>‘>Ó# gÑ-ˆØØ×(Ñ(¨Ð(ÐFˆHØ�‰ 'Ó)Ø�Ø�‰ (Ó*Ü+Ø×+Ñ+×FÐ/FØ",ñð ð !§>¡>Ó#3Ñ3ˆIØ˜A‹~Ü*Ø   Ð-?À¸yÈÐJØ",Ø (§¡ñð ð
 �J‰J”s˜=Ó4Ô5ñ! r2   )r“   r’   r—   r™   r•   rš   r”   )
r‹   úOptional[str]rŒ   Úfloatr�   rr  rŽ   Úintr�   zOptional[RequestHeaders]©r  Ústr)r  r$   )r�   ÚRequestHeadersr  zOptional[dict[str, str]])r  r&   )r  ÚNone)r  r‡   )rÂ   zOptional[type]rÃ   zOptional[BaseException]rÄ   zOptional[Any]r  rx  )N)rÙ   rr  rÍ   rr  rÎ   rr  rG   rr  rŒ   rt  rÏ   úOptional[int]rÐ   ry  rÑ   ry  rÒ   ry  rÓ   ry  rÔ   úOptional[SandboxMountConfig]rÕ   úOptional[SandboxProxyConfig]r�   rw  r  r"   )rÙ   rr  rÍ   rr  rÎ   rr  rG   rr  rŒ   rt  rÝ   ÚboolrÏ   ry  rÐ   ry  rÑ   ry  rÒ   ry  rÓ   ry  rÔ   rz  rÕ   r{  r�   rw  r  r"   )rG   rv  r�   rw  r  r"   )r�   rw  r  zlist[Sandbox])rG   rv  r  rr  rÏ   ry  rÐ   ry  r�   rw  r  r"   )rG   rv  r�   rw  r  rx  )rG   rv  r�   rw  r  r   )
rG   rv  r  rt  r  rt  r�   rw  r  r   )rG   rv  r`   rv  r  ry  r  rr  r  z$Optional[DownloadContentDisposition]r�   rw  r  r   )
rG   rv  rŒ   rt  r!  rs  r�   rw  r  r"   )rG   rv  rŒ   rt  r�   rw  r  r"   )rG   rv  r@  rv  rÓ   rt  r<  rr  r=  rr  rŒ   rt  r�   rw  r  r   )rG   rv  ri   úUnion[str, os.PathLike[str]]rÓ   ry  rj   r}  r~   úOptional[Mapping[str, str]]r   rr  rF  zOptional[Callable[[str], Any]]rÑ   ry  rÒ   ry  rŒ   rt  r�   rw  r  r   )rY  rv  rG   rv  r<  rr  r@  rr  rÓ   ry  rŒ   rt  r�   rw  r  r   )rÙ   rv  r�   rw  r  r   )rG   rv  r�   rw  r  zlist[SnapshotTag])
re  rr  rf  ry  rg  ry  r�   rw  r  zlist[Snapshot])rÙ   rv  r�   rw  r  rx  )
rÙ   rv  rŒ   rt  r!  rs  r�   rw  r  r   )&Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rž   r£   Úpropertyr¨   r­   r°   r´   r·   r¼   r¿   rÅ   rÉ   rÛ   r×   rù   r   r  r
  r  r  r  r0  r5  r9  rC  rV  rQ  r_  rc  rk  rn  rA  Ú__static_attributes__r5   r2   r0   r‡   r‡   Â   sš  † ñð. '+ØØ!%ØØ,0ñ(<ð $ð(<ð ð	(<ð
 ð(<ð ð(<ð *õ(<ôTð ó<ó ð<ô8:ô=ô
ô(,ôôðà ðð )ðð ð	ð
 
ôô<ð &*ð`ð #'Ø'+Ø"ØØ*.Ø37Ø#Ø#'Ø+/Ø59Ø59Ø"&ñ`à"ð`ð  ð	`ð
 %ð`ð ð`ð ð`ð (ð`ð $1ð`ð ð`ð !ð`ð )ð`ð 3ð`ð 3ð`ð  ð`ð  
ö!`ðH &*ðBð #'Ø'+Ø"ØØ#Ø*.Ø37Ø#Ø#'Ø+/Ø59Ø59Ø"&ñ!Bà"ðBð  ð	Bð
 %ðBð ðBð ðBð ðBð (ðBð $1ðBð ðBð !ðBð )ðBð 3ðBð 3ðBð   ð!Bð" 
ö#BðH CG÷ ð: ;?÷ ð: #'Ø*.Ø37Ø"&ñ<àð<ð  ð	<ð
 (ð<ð $1ð<ð  ð<ð 
õ<ð| FJ÷ (ð. 7;ñØðØ%3ðà	õðL #&Ø"&ñ5àð5ð ð5ð
  ð5ð  ð5ð 
õ5ðx -1Ø&*ØDHØ"&ñCàðCð ðCð
 *ðCð $ðCð BðCð  ðCð 
õCðR Ø"Ø"&ñ.6àð.6ð ð	.6ð
 ð.6ð  ð.6ð 
õ.6ðh Ø"&ñ$Màð$Mð ð	$Mð
  ð$Mð 
õ$MðL DH÷ (ðD "Ø%)ØØ"&ñ8Uàð8Uð ð8Uð ð	8Uð ð8Uð #ð8Uð ð8Uð  ð8Uð 
õ8Uð| ,0ð	\ð 14Ø26Ø $Ø7;Ø#Ø#'ØØ"&ñ\àð\ð 1ð\ð )ð	\ð .ð\ð 0ð\ð ð\ð 5ð\ð ð\ð !ð\ð ð\ð  ð\ð 
ö\ðF "Ø&*Ø+/ØØ"&ñ;Uàð;Uð ð;Uð
 ð;Uð $ð;Uð )ð;Uð ð;Uð  ð;Uð 
õ;Uð| >BñØðØ,:ðà	õð@ 7;ñØðØ%3ðà	õðF (,Ø#Ø $Ø"&ñ8ð %ð8ð ð	8ð
 ð8ð  ð8ð 
õ8ðv >Bñ(Øð(Ø,:ð(à	õ(ð8 Ø"Ø"&ñ+6àð+6ð ð	+6ð
 ð+6ð  ð+6ð 
÷+6ð +6r2   r‡   ru  )r  rr  )r?   rv  r  rv  )rF   rv  rG   rv  rH   rv  r  rv  )r]   r   r  Úbytes)ri   r}  rj   r}  r  ztuple[Path, str])rz   rv  rl   rv  r{   rv  r|   rv  r}   rv  r~   r~  r   rr  r  rv  )Grƒ  Ú
__future__r   rR   Úosrt   ry   rT   rK  Úcollections.abcr   r   Úpathlibr   Útypingr   r   r	   r
   Úurllib.parser   Ú	langsmithr   r,   Úlangsmith._openapi_clientr   Ú langsmith._openapi_client._httpxr   Úlangsmith.sandbox._exceptionsr   r   r   r   r   Úlangsmith.sandbox._helpersr   r   r   r   r   Úlangsmith.sandbox._modelsr   r   r   r   r   r   Úlangsmith.sandbox._mountsr   r    Úlangsmith.sandbox._proxy_configr!   Úlangsmith.sandbox._sandboxr"   Úlangsmith.sandbox._transportr#   Ú8langsmith._openapi_client.resources.sandboxes.registriesr$   r³   r&   r1   r6   rv  rw  r@   rC   rJ   rb   rn   r…   r‡   r5   r2   r0   Ú<module>r˜     s$  ðÙ Kå "ã 	Û 	Û Û Û Û ß -Ý ß 6Ó 6Ý å 'Ý /Ý 2÷õ ÷õ ÷÷ ÷õ ?Ý .Ý 7æõõ Cô.ô+ð
 ˜' # s (Ñ+Ñ,€ô!ô"ôCôð3Ø,ð3à)ð3ð ô3ð(?àð?ð ð?ð ð	?ð
 ð?ð ð?ð ,ð?ð ð?ð 	ô?÷D@6ò @6r2   