Skip to content

feat(integrations): add OpenSandbox environment - #6785

Open
jianpingpei wants to merge 3 commits into
google:mainfrom
jianpingpei:feat/opensandbox-environment
Open

feat(integrations): add OpenSandbox environment#6785
jianpingpei wants to merge 3 commits into
google:mainfrom
jianpingpei:feat/opensandbox-environment

Conversation

@jianpingpei

Copy link
Copy Markdown

Link to Issue or Description of Change

1. Link to an existing issue (if applicable):

2. Or, if no issue exists, describe the change:

Problem:

ADK's environment abstraction supports local, E2B, and Daytona execution, but users of a self-hosted OpenSandbox deployment cannot select it as an environment backend.

Solution:

Add an experimental OpenSandboxEnvironment that implements the existing BaseEnvironment contract for command execution, file I/O, lifecycle renewal, owned-sandbox cleanup, and attachment to an existing sandbox. The change also adds an optional opensandbox dependency, feature registration, focused unit coverage, and a runnable sample.

Testing Plan

Unit Tests:

  • I have added or updated unit tests for my change.

  • All unit tests pass locally.

  • Focused OpenSandbox, E2B, Daytona, and EnvironmentToolset regression suite: 60 passed.

  • Full tox suite passed on Python 3.10, 3.11, 3.12, and 3.14.

  • Python 3.13 completed with 12112 passed and 2 failed in tests/unittests/test_import_loading.py. Both failures are caused by the local interpreter preloading sitecustomize; the same two failures reproduce on an unmodified upstream/main worktree.

  • pre-commit run --from-ref upstream/main --to-ref HEAD: passed.

  • ./scripts/update_constraints.sh --check: passed for Python 3.10 through 3.14.

  • Wheel build and installation into a clean virtual environment: passed; OpenSandboxEnvironment imports with the published opensandbox==0.1.15 SDK.

Manual End-to-End (E2E) Tests:

Tested against a local Docker OpenSandbox server using a public Python image:

  1. Created an owned sandbox and ran commands with stdout, stderr, non-zero exit, and timeout handling.
  2. Wrote and read text and binary files through OpenSandboxEnvironment.
  3. Connected to an existing sandbox and verified that close() releases the SDK client without destroying the sandbox.
  4. Ran a model-driven ADK agent that independently invoked WriteFile, Execute, and ReadFile; verified the marker in both the agent result and sandbox file.
  5. Closed the environment and verified that no sandbox or container remained.

Checklist

  • I have read the CONTRIBUTING.md document.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.
  • I have manually tested my changes end-to-end.
  • Any dependent changes have been merged and published in downstream modules.

The two unchecked test boxes reflect only the Python 3.13 ambient sitecustomize failures described above; they reproduce unchanged on upstream main.

Additional context

OpenSandbox is used here as a self-hosted backend. This contribution does not imply or require an official hosted OpenSandbox service.

@google-cla

google-cla Bot commented Aug 18, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@jianpingpei
jianpingpei marked this pull request as ready for review August 19, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(integrations): Add OpenSandboxEnvironment for remote sandbox workspaces

2 participants