This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryUpdates π¦ Misc, β¨ Features, and π Bug Fixes across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds PTY session takeover via `?takeover=1` query parameter. Adds PTY session takeover via `?takeover=1` query parameter. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
Adds optional `command` field to `POST /pty` for one-shot command execution. Adds optional `command` field to `POST /pty` for one-shot command execution. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
Adds `GET /directories/list` endpoint with configurable depth and file type field. Adds `GET /directories/list` endpoint with configurable depth and file type field. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
Adds lineβbased `offset` and `limit` parameters to `GET /files/download`. Adds lineβbased `offset` and `limit` parameters to `GET /files/download`. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
`POST /files/replace` now returns `replacedCount` per file. `POST /files/replace` now returns `replacedCount` per file. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
OTLP endpoint autoβdiscovery falls back to node IP when env vars unset. OTLP endpoint autoβdiscovery falls back to node IP when env vars unset. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
Includes `opensandbox-supervisor` binary in execd runtime image. Includes `opensandbox-supervisor` binary in execd runtime image. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Medium |
`GET /files/info` now returns 404 instead of 500 for missing paths. `GET /files/info` now returns 404 instead of 500 for missing paths. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Medium |
`POST /files/mv` now returns 404 instead of 500 for missing source. `POST /files/mv` now returns 404 instead of 500 for missing source. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Medium |
`MakeDir` no longer chmod/chown preβexisting directories. `MakeDir` no longer chmod/chown preβexisting directories. Source: llm_adapter@2026-06-15 Confidence: low |
β |
| Bugfix | Low |
`MakeDir` no longer changes permissions or ownership on directories that already exist. `MakeDir` no longer changes permissions or ownership on directories that already exist. Source: granite4.1:30b@2026-06-15-audit Confidence: low |
β |
Full changelog
What's New
β¨ Features
-
PTY session takeover for device handoff. New
?takeover=1query parameter onGET /pty/:sessionId/wslets a second client reclaim a live PTY session instead of getting409 ALREADY_CONNECTED. The existing holder is evicted with close code4001(TAKEN_OVER), the shell process keeps running untouched, and the new client can replay scrollback via?since=<offset>for seamless screen restore. Enables desktop β mobile session handoff without restarting the shell. Fully backward compatible β without the flag, behavior is unchanged. (#997) -
PTY custom command execution.
POST /ptynow accepts an optionalcommandfield. When set, the PTY session runsbash -c <command>for one-shot terminal I/O instead of an interactive shell. When omitted, behavior is unchanged (interactive bash). (#1032) -
Directory listing endpoint. New
GET /directories/listendpoint withdepth-controlled directory traversal (defaultdepth=1for immediate children). Also adds atypefield (file,directory,symlink,other) toFileInforesponses β/files/infonow usesLstatso symlinks are reported as symlinks instead of being resolved to their target type. Supported across all five SDKs. (#1001) -
Line-based file reading.
GET /files/downloadnow supportsoffset(1-based line number) andlimit(line count) query parameters for line-based reads, mutually exclusive with the existingRangeheader. Uses streamingbufio.Readerwithout buffering the entire file. Updated across OpenAPI spec and all SDKs. (#1030) -
Replace file content feedback.
POST /files/replacenow returns areplacedCountper file, so callers can detect no-match (replacedCount=0) and multi-match scenarios. Response going from empty body to JSON is non-breaking; old SDKs ignoring the body continue to work. Updated across all SDKs and MCP server. (#991) -
OTLP endpoint auto-discovery. When neither
OTEL_EXPORTER_OTLP_METRICS_ENDPOINTnorOTEL_EXPORTER_OTLP_ENDPOINTis set, execd now resolves the node IP fromHOST_IPenv var or/etc/hostinfoand points the OTLP/HTTP exporter at<node-ip>:4318. Eliminates the need for callers to template the full endpoint URL. (#963) -
Supervisor binary in container image. The
opensandbox-supervisorbinary (built fromcomponents/internal/cmd/supervisor) is now included in the execd runtime image for future process management use. (#1056)
π Bug Fixes
-
GET /files/infonow returns 404 for missing paths instead of 500. Two cooperating bugs βfmt.Errorfusing%sinstead of%w(stripping theos.ErrNotExistsentinel) andos.IsNotExistnot walking wrapped errors β made the 404 branch inhandleFileErrorunreachable. Both fixed. (#1026) -
POST /files/mvnow returns 404 for missing source instead of 500. Same sentinel-stripping pattern as #1026 inRenameFileβ%sβ%wfixes the error chain sohandleFileErrorreaches its 404 branch. (#1028) -
MakeDirno longer chmod/chown pre-existing directories. PreviouslyMakeDirappliedChmodFileunconditionally, which could change permissions on directories that already existed. Now checks existence first and only applies permissions to newly created dirs.SetFileOwnershipalso returns nil when both owner and group are empty. (#1025)
π¦ Misc
- Modernize all
os.IsNotExistcalls toerrors.Is(err, fs.ErrNotExist)across 7 callsites in 5 files, matching Go's recommended idiom. Also fixes a pre-emptive%sβ%wsentinel loss inValidateWorkingDir. (#1029)
π₯ Contributors
Thanks to these contributors β€οΈ
- @andrewjamesbrown
- @asiudgufgbukbsa
- @ferponse
- @Pangjiping
- @504097723
- Docker Hub: opensandbox/execd:v1.0.19
- Aliyun Registry: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.19
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Earlier breaking changes
- vpython/sandbox/v0.1.14 Removes `CredentialMatch.ports`; port now derived from scheme.
- vjava/sandbox/v1.0.16 Removes CredentialMatch.ports; port derived from scheme instead.
- vdocker/egress/v1.1.4 `Match.Ports` field removed from Credential Vault bindings; ports derived from scheme.
- vdocker/egress/v1.1.4 'X-Forwarded-Proto' is trusted only from configured proxy CIDRs.
- vdocker/egress/v1.1.4 Credential Vault requires `dns+nft` enforcement for egress connections.
Beta — feedback welcome: [email protected]