
    Cj)                        % S r SSKJr  SSKrSSKJrJr  SSKJrJ	r	  \(       a  SSK
Jr  \R                  " \5      r\S\\\	\	4      4   r        SS jrS	\0rS
\S'   SS jrSS jrSS jrg)uR   Sandbox backend registry — selected via STRIX_RUNTIME_BACKEND (default: docker).    )annotationsN)	AwaitableCallable)TYPE_CHECKINGAny)Manifest.c                   #    SSK nSSKJn  SSKJn  U" UR                  5       5      nU" XS9nUR                  XqS9I Sh  vN nUR                  5       I Sh  vN   Xh4$  N N	7f)u  Bring up a session backed by the local Docker daemon.

Uses :class:`StrixDockerSandboxClient` to inject NET_ADMIN /
NET_RAW caps + ``host.docker.internal`` host-gateway. Imports
``docker`` lazily so deployments that target a non-Docker
backend don't need the docker-py library installed.

``session.start()`` is what materializes the manifest entries
(LocalDir copies, mount setup, etc.) into the running container —
the SDK's ``client.create()`` only builds the inner session object
without applying the manifest. ``async with session:`` would call it
too, but Strix manages session lifetime explicitly via
``client.delete()`` so we trigger ``start()`` ourselves.
r   N)DockerSandboxClientOptions)StrixDockerSandboxClient)imageexposed_ports)optionsmanifest)dockeragents.sandbox.sandboxes.dockerr
   strix.runtime.docker_clientr   from_envcreatestart)	r   r   r   r   r
   r   clientr   sessions	            h/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/strix/runtime/backends.py_docker_backendr      s^     ( JD%foo&78F(uRGMM'MEEG
--/? Fs#   ?A%A!A%A#A%#A%r   zdict[str, SandboxBackend]	_BACKENDSc                    [         R                  U 5      nUc1  SR                  [        [         5      5      n[	        SU < SU S35      e[
        R                  SU 5        U$ )zReturn the backend factory for ``name`` or raise.

Args:
    name: Backend identifier (e.g. ``"docker"``). Match is exact;
        no fallback. Unknown values raise so config typos surface
        immediately instead of silently picking a default.
z, zUnknown STRIX_RUNTIME_BACKEND: z (supported: )zSelected sandbox backend: %s)r   getjoinsorted
ValueErrorloggerdebug)namebackend	supporteds      r   get_backendr&   9   s_     mmD!GIIfY/0	-dX]9+QO
 	
 LL/6N    c                B    U[         U '   [        R                  SU 5        g)u   Register a custom backend under ``name``.

Intended for downstream users who ship their own runtime — register
before any ``session_manager.create_or_reuse`` call. Re-registering
an existing name overwrites the prior entry.
zRegistered sandbox backend: %sN)r   r!   info)r#   r$   s     r   register_backendr*   K   s     IdO
KK0$7r'   c                      [        [        5      $ )N)r   r    r'   r   supported_backendsr-   V   s    )r'   )r   strr   r   r   ztuple[int, ...]returnztuple[Any, Any])r#   r.   r/   SandboxBackend)r#   r.   r$   r0   r/   None)r/   z	list[str])__doc__
__future__r   loggingcollections.abcr   r   typingr   r   agents.sandbox.manifestr   	getLogger__name__r!   tupler0   r   r   __annotations__r&   r*   r-   r,   r'   r   <module>r<      s    X "  / % 0 
		8	$ #ysCx99:  #	
 B o(	$ 
$8r'   