What's New
✨ Features
- Retrying pool acquire policies — Python sandbox pools now support
RETRY_NEXT_IDLEandRETRY_NEXT_IDLE_THEN_CREATE, allowingacquireto skip stale idle candidates before failing or falling back to direct create. Existing policies keep their current behavior;max_acquire_retriesdefaults to 3. #1347 - Sandbox create metrics — async and sync
Sandbox.createnow report fire-and-forgetsandbox.createlatency events to the lifecycle server. Reporting never blocks callers and can be disabled withOPENSANDBOX_DISABLE_METRICS=1. #1307 - Client IP header — the SDK now best-effort detects the host intranet IPv4 and sends it as
OPEN-SANDBOX-CLIENT-IPon outbound requests. Detection is cached and never overwrites a user-provided header. #1326 - Attach to isolated sessions —
sandbox.isolation.attach(session_id)lets stateless workers rebuild a handle for an existing execd isolated session while that in-memory session is still alive. #1295 - UID mode availability — isolated session responses now expose per-mode
setpriv/usernsavailability, and unavailable requested modes fail with503 NOT_SUPPORTED. #1320 - Exact snapshot name filtering — snapshot listing now supports an exact
namefilter. #1301 - One-call destroy helper —
Sandbox.destroy()andSandboxSync.destroy()now perform remote termination plus local cleanup, preserving the original termination exception ifkill()fails. #1291
📦 Misc
- Bumped Python sandbox SDK version, default User-Agent strings, and generated lifecycle client comments for this release. #1384