python/sandbox/v0.1.14
opensandbox-group/OpenSandboxpython/sandbox/v0.1.14Jul 13, 2026by Pangjiping
AI Summary
Python SDK v0.1.14 introduces isolation convenience APIs, sandbox pool management, and credential vault enhancements.
Key Highlights
- Isolation convenience APIs for one-shot and scoped workflows
- Sandbox pool destroy support with tombstone semantics
- Credential Vault placeholder substitutions
- Endpoint cache with in-flight deduplication
Breaking Changes
- CredentialMatch.ports removed; port is now derived from scheme
- PoolStateStoreContentionError removed (never raised)
New Features
- Isolation convenience APIs (run_once, session)
- List isolated sessions API
- Isolated bind mounts support
- Sandbox pool destroy with FORCE-destroy support
- Credential Vault placeholder substitutions
- Endpoint cache with TTL and deduplication
- Extensions in lifecycle responses
- Protocol extensions for isolation services
Full Release Notes
## 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) - **Credential Vault placeholder substitutions** — opt-in placeholders for `path` / `query` / `header` / `body` request surfaces (incl. `passthrough` bindings). (#1251) - **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) ### 👥 Contributors - @GreenShadeZhang - @jianpingpei - @jwx0925 - @ninan-nn - @Pangjiping - @ryanzhang-oss