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