Releases: srtab/daiv-sandbox
v0.3.1
Changed
- Standardized sandbox filesystem root to
/archivesfor all containers, removing dependency on base image WORKDIR. - Removed image inspection logic (
_inspect_imagemethod andImageAttrsusage in sessions). - Updated permission normalization to use
chmodinstead ofchown, improving compatibility with non-root users. - Fixed patch extraction logic to correctly handle
Noneworkdir by treating it as "." relative to archive root.
v0.3.0
🎉 DAIV Sandbox v0.3.0 – Sentry Controls, Leaner Sessions, Python 3.14
DAIV Sandbox v0.3.0 ships with better Sentry configurability, a smarter session flow, and an upgrade to Python 3.14—plus a schema fix for .daiv.yml.
🚀 What’s New
-
Added an
AGENTS.mdfile to document agent behavior and repo conventions. -
New Sentry settings:
SENTRY_ENABLE_LOGSSENTRY_TRACES_SAMPLE_RATESENTRY_PROFILES_SAMPLE_RATESENTRY_SEND_DEFAULT_PII
🔁 Breaking Changes
extract_patchis now handled at session start, avoiding unnecessary side-car containers when not needed.extract_patchnow requires the provided archive to be a git repository.- Migrated from Python 3.12 → Python 3.14.
- Replaced
SENTRY_ENABLE_TRACINGwithSENTRY_TRACES_SAMPLE_RATE+SENTRY_PROFILES_SAMPLE_RATE.
🐛 Fixes
- Updated the
.daiv.ymlschema to match the newerdaivversion.
v0.2.0
Session-based execution, patches, and GHCR image
This release is a total refactor that focuses the project on safe, session-based command execution. You can now run multiple commands across multiple requests within the same session, get a patch of the changes produced by those commands, and optionally fail fast on the first error. A Docker image is now built and pushed to GitHub Container Registry on pushes to main.
⚠️ Breaking changes
- The run commands endpoint is now session-based. You can run multiple commands over multiple requests using the same session.
- The run commands response now returns a patch (diff) of file changes instead of an archive of changed files.
- Removed support to run arbitrary code.
Please review the migration guide below before upgrading.
Highlights
- Session-like API for multi-step executions.
- Patch-first design: concise diffs instead of full archives.
- Safety & ergonomics:
fail_fastto stop early on errors. - CI enhancement: Docker image automatically published to GHCR.
Migration guide
-
Adopt sessions
- Before: single-shot command execution per request.
- Now: create/use a session, then send one or more command batches tied to that session until you close it.
-
Consume patches instead of archives
- Update downstream tooling to parse unified diffs.
- Apply with standard tools (e.g.,
git applyorpatch) if you need to materialize file changes.
-
Stop on first failure (optional)
- Opt into stricter behavior with
fail_fast=trueto abort on the first failing command.
- Opt into stricter behavior with
-
Enable/handle
extract_patch- Use
extract_patch=truewhen you specifically want to retrieve the generated patch artifact.
- Use
-
Audit any arbitrary code execution paths
- Replace usage with explicit command execution via sessions.
Tip: If you previously automated downloads of an archive, switch to saving the returned patch (e.g.,
changes.patch) and apply it where needed.
Documentation
README.mdhas been updated to reflect session-based execution and patch responses.
Full Changelog
v0.1.1
v0.1.0
🧪 daiv-sandbox v0.1.0 – First Official Release 🎉
We’re proud to announce the first official release of daiv-sandbox following the v0.1.0-rc.* candidate cycle! This marks the beginning of public availability, with a stable feature set and robust container-based sandboxing for command and code execution.
Note
While still under the 0.x prefix (indicating ongoing development), this release is suitable for real-world usage and follows a tested and consistent API.
🚀 What's Included
-
Secure Containerized Execution
- Run untrusted code and shell commands inside isolated Docker containers.
- Each execution is ephemeral — containers are spun up and torn down per request.
-
FastAPI-Based REST Interface
POST /run/commands/: Run shell commands on provided archives.POST /run/code/: Execute Python code with optional dependencies.
-
gVisor Runtime Support (Optional)
- Use Google’s
gVisor(runsc) for added kernel isolation. - Toggle runtime via the
DAIV_SANDBOX_RUNTIMEenv variable.
- Use Google’s
-
Docker Image Available
- Pull from GitHub Container Registry:
ghcr.io/srtab/daiv-sandbox:latest
- Pull from GitHub Container Registry:
⚠️ Known Limitations
- Only
pythonis supported in/run/code/(more languages planned!). distrolessbase images are unsupported (lack shell for command execution).gVisormay introduce minor performance overhead in exchange for improved isolation.
📦 Quick Start
docker run --rm -d -p 8000:8000 \
-e DAIV_SANDBOX_API_KEY=my-secret-api-key \
ghcr.io/srtab/daiv-sandbox:latestRefer to the README for full configuration and API usage details.
💬 Feedback & Contribution
This is a great time to report bugs, request features, or contribute!
Open an issue or PR on GitHub to help shape the future of daiv-sandbox.
v0.1.0-rc.10
Changed
- Moved
LANGUAGE_BASE_IMAGESfromdaiv_sandbox/main.pytodaiv_sandbox/languages.py.
Fixed
- Changed strategy to determine where the run will execute inside the container. Now the default user and working directory are considered to avoid privileges issues.
v0.1.0-rc.9
Fixed
- Fixed issue when images have limited privileges.
Chore:
- Updated dependencies:
ipythonfrom 8.30 to 8.31pydanticfrom 2.10.3 to 2.10.4pydantic-settingsfrom 2.6.1 to 2.7.0rufffrom 0.8.2 to 0.8.4mypyfrom 1.13.0 to 1.14.0
v0.1.0-rc.8
Added
- Added
HOSTandPORTsettings to allow overriding the host and port of the service. - Added
LOG_LEVELsetting to allow overriding the log level of the service.
Fixed
- Fixed logging configuration for
daiv_sandboxlogger, no logs where being written to the console. - Fixed
SENTRY_ENABLE_TRACINGsetting to be a boolean or an integer.
v0.1.0-rc.7
Added
- Added
pingmethod toSandboxDockerSessionto check if the Docker client is responding.
Changed
- Changed
healthendpoint to check if the Docker client is responding and avoid starting the service if it is not responding. - Changed default
DOCKER_GIDto991.
v0.1.0-rc.6
Added
- Added
SENTRY_ENABLE_TRACINGconfiguration to enable Sentry tracing. - Added
EXPOSE 8000to theDockerfileto explicitly expose the port.
Changed
- Updated dependencies:
ipythonfrom 8.29 to 8.30pyopensslfrom 24.2.1 to 24.3.0rufffrom 0.8.0 to 0.8.2