You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's New
✨ Features
Isolation convenience APIs — sandbox.isolation.run_once(code, workspace=...) for one-shot create → run → delete flows, and async with sandbox.isolation.session(req) / with ... session(req) for scoped multi-run workflows. Cleanup is best-effort so it never masks the original exception. Available on both async and sync clients. (#1222)
List isolated sessions — sandbox.isolation.list() (async + sync). (#1269)
Isolated bind mounts — CreateIsolatedSessionRequest.binds accepts BindMount(source, dest, readonly) for arbitrary host→namespace path mappings; also exposes the previously missing uid_mode. Threaded through the run_once helper as well. (#1264)
Sandbox pool destroy — SandboxPoolManager FORCE-destroy support with DESTROYING fence + DESTROYED tombstone; both in-memory and Redis stores implement the new tombstone semantics. Failed destroys leave the pool in DESTROYING so callers can retry safely. (#1225)
Endpoint cache with inflight dedup — cache (sandbox_id, port, use_server_proxy) → Endpoint to avoid repeated HTTP roundtrips. Default on: TTL 600s, MaxSize 1024, configurable via ConnectionConfig; kill() actively invalidates cached entries. (#1133)
Sandbox extensions in lifecycle responses — CreateSandboxResponse and Sandbox models now expose extensions, restoring Kubernetes opensandbox.io/extensions.* annotations as opensandbox.extensions.* in response data. (#1112)
IsolationService / IsolationServiceSync protocols now include run_once and session — built-in adapters inherit default implementations via IsolationServiceMixin, but custom protocol implementations must satisfy the extended contract. (#1222)
CredentialMatch.ports removed; intercept port is derived from scheme (http→80, https→443). Drop any ports=[...] arguments. (#1189)
PoolStateStoreContentionError removed (never actually raised by in-memory or Redis stores). (#1198)
🐛 Bug Fixes
Handled adapter warnings/errors are demoted so they no longer surface as noisy tracebacks, while still remaining visible in logs.
Python SDK logging unified to f-strings.
🔒 Security
Patch 21 Dependabot CVEs — bumps pydantic-settings → 2.14.2, python-multipart → 0.0.32, starlette → 1.3.1, cryptography → 49.0.0, pyjwt → 2.13.0 via pyproject.toml lower bounds and [tool.uv] constraint-dependencies for transitive deps. Resolves all open Dependabot alerts for Python packages. (#1145)
📦 Misc
Removed unused server-side PendingSandbox async provisioning path and corrected the POST /sandboxes 202 spec — both Docker and K8s provision synchronously and return Running directly, so no polling loop is needed. Regenerated Python API clients accordingly. (#1178)
Repository metadata URLs in pyproject.toml now point at opensandbox-group/OpenSandbox. (#1135)
Bumped the Python sandbox SDK fallback_version to 0.1.14 and aligned the default User-Agent (OpenSandbox-Python-SDK/0.1.14, async + sync) which had drifted behind the released version. A regression test now locks the User-Agent to the package version. (#1248)