NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #277 by repository stars
Last release 8 days ago
30 Sep 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 15 of 15 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
428 releases · first in 2026
One column per month.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CubeSandbox 0.7.2 introduces 3 major features along with multiple enhancements and bug fixes. 56 commits from 29 contributors.
CubeSandbox 0.7.2 introduces 3 major features along with multiple enhancements and bug fixes. 56 commits from 29 contributors.
Sandboxes restored cross-node on the S3 backend read disk data from S3 on demand; this release optimizes that read path systematically:
New JuiceFS storage plugin: sandboxes can mount a JuiceFS filesystem as a persistent volume, with full POSIX semantics.
Idle memory inside sandboxes is reclaimed back to the host: node memory usage falls back dynamically with the real usage of the sandboxes, so a single node can host more sandboxes.
sandbox.connect supports a timeout parameter (#1352).hostNetworkChangeAck); fresh installs are unaffected.envd Connect RPC (#1786).run_code (E2B-compatible code-interpreter interface) can now read environment variables injected at sandbox creation (#1323), matching the behavior of commands.run; the new sandbox-code example image is required.BUILT with database connection timeouts (#1802).end_at=0) in Info / List queries (#1801).Could not restore GICv3ITS state): the vgic state save was incorrectly optimized to all zeros by the compiler (#1658).cubeNode.network.mtu (#1674).CUBE_SANDBOX_CUBE_EGRESS_IMAGE environment variable not being updated in .one-click.env for one-click deployments (#1788).docker-ce (#1789).CubeSandbox 0.7.2 引入了 3 个核心特性以及多个功能增强与问题修复。共计 56 个提交,来自 29 位贡献者。
S3 后端跨机恢复的沙箱,磁盘数据按需从 S3 拉取;本版本对这条读路径做了系统性优化:
新增 JuiceFS 存储插件:沙箱可挂载 JuiceFS 文件系统作为持久卷,具备完整 POSIX 语义。
沙箱内的空闲内存自动回收到宿主机:节点内存占用随沙箱实际用量动态回落,单节点可承载更多沙箱。
sandbox.connect 支持 timeout 参数(#1352)。hostNetworkChangeAck),全新安装不受影响。envd Connect RPC(#1786)。run_code(E2B 兼容代码解释器接口)现在也能读到创建沙箱时注入的环境变量(#1323),与 commands.run 行为一致;需使用新增的 sandbox-code 示例镜像。BUILT 状态,数据库连接超时的竞态问题(#1802)。end_at=0)的问题(#1801)。cubeNode.network.mtu 固定(#1674)。CUBE_SANDBOX_CUBE_EGRESS_IMAGE 环境变量未正确更新到 .one-click.env 的问题(#1788)。docker-ce(#1789)。SQLSTATE 精确分类(#1724)。cubebench CPU 拓扑报告的兼容性问题(#1757)。Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed the Web UI runtime config page showing deprecated settings ( #1573 ).
CubeSandbox 0.7.1 introduces 1 major feature along with multiple enhancements and bug fixes. 70 commits from 24 contributors.
CUBE_DATABASE_DRIVER and connect to a self-managed database instance.[cow.s3] enable = true (or ONE_CLICK_ENABLE_S3LVOL=1 for one-click deploy); it is disabled by default. Also fixes the switch not taking effect during one-click upgrades. Upgrade note: nodes that were using S3 without an explicit setting must enable it after upgrade.redis.db applies to CubeMaster / CubeProxy / CLM, so multiple clusters sharing one Redis instance can isolate logical databases per cluster.tpl delete accepts multiple template IDs in one call.NEVER_TIMEOUT) being immediately treated as expired (#1401).cubecli logs for sandboxes created from a template (#1616).global.imageRegistry overwriting explicitly configured private / third-party registry addresses (#1605).info) not taking effect and falling back to DEBUG (#1597).0 or NEVER_TIMEOUT (#1485).version subcommand being unavailable (#1596).version producing no output by default (#1657).CubeSandbox 0.7.1 引入了 1 个核心特性以及多个功能增强与问题修复。共计 70 个提交,来自 24 位贡献者。
CUBE_DATABASE_DRIVER 选择 MySQL / PostgreSQL,接入自建数据库实例。[cow.s3] enable = true(一键部署用 ONE_CLICK_ENABLE_S3LVOL=1),默认关闭;同时修复一键部署升级时该开关不生效的问题。升级注意:此前未显式配置但实际在使用 S3 的节点,升级后需显式开启。redis.db,统一作用于 CubeMaster / CubeProxy / CLM;多套集群共享同一 Redis 时可按集群隔离逻辑库。tpl delete 支持一次传入多个模板 ID。NEVER_TIMEOUT)后被立即判定为已过期的问题(#1401)。cubecli logs 无输出)的问题(#1616)。global.imageRegistry 误改写显式指定的私有 / 第三方镜像仓库地址的问题(#1605)。info)时不生效、回落到 DEBUG 的问题(#1597)。0 或 NEVER_TIMEOUT 超时后请求永不返回的问题(#1485)。version 子命令不可用的问题(#1596)。version 命令默认无输出的问题(#1657)。Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CubeSandbox 0.7.0 introduces 4 major features along with multiple enhancements and bug fixes. 239 commits from 57 contributors.
CubeSandbox 0.7.0 introduces 4 major features along with multiple enhancements and bug fixes. 239 commits from 57 contributors.
With an S3 backend, sandboxes support pause/resume across nodes as well as creating sandboxes from snapshots. This feature is currently in preview.
Architecturally, operations capabilities are split out of CubeMaster. Node management logic now lives in CubeOps, which supports multi-replica deployment and ships the cubeopscli tool.
volumeMounts, bringing all three languages to parity.Files.ForUser isolates file access by user identity.Sandbox.setTimeout(timeout) supports NEVER_TIMEOUT.Sandbox.create(distribution_scope=...) explicitly specifies the nodes/zones a sandbox can be placed on.Authorization header explicitly set by the caller (including lowercase variants) is no longer overridden by the SDK's default apiKey.kernel-release-* / guest-image-* releases.CubeSandbox 0.7.0 引入了4个核心特性以及多个功能增强与问题修复。共计 239 个提交,来自 57 位贡献者。
基于S3后端存储支持跨机的pause/resume以及基于snapshot创建沙箱,该功能目前是预览版本。
在架构上,将运维能力从CubeMaster中分离。把节点管理逻辑独立到CubeOps中,支持多副本部署,提供cubeopscli工具。
volumeMounts 挂载,三语言能力拉齐。Files.ForUser 按用户身份隔离文件访问。Sandbox.setTimeout(timeout) 支持 NEVER_TIMEOUT。Sandbox.create(distribution_scope=...) 显式指定沙箱可放置的节点/区域。Authorization(含小写形式)不再被 SDK 默认 apiKey 覆盖。kernel-release-* / guest-image-* Release 拉取固定版本Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CVE-2026-24834 / CVE-2026-47243 fixes ( #1066 ).
CubeSandbox 0.6.0 continues to strengthen core capabilities for production deployment and operations.
This release introduces 6 major features along with multiple enhancements and bug fixes. 92 commits from 31 contributors.
Deploy CubeSandbox control-plane components and compute nodes directly onto Tencent Cloud TKE, standard Kubernetes, or k3s clusters via Helm Chart. Perform rolling upgrades, canary releases, and other operations using standard Kubernetes practices. For details, see the Kubernetes Deployment Guide.
::: warning Preview
Kubernetes deployment is currently in preview. Advanced capabilities such as seamless upgrades are still under active development. Feedback is welcome.
:::
Introduces an E2B-compatible Volume framework that lets users plug in custom backend storage while remaining compatible with the E2B standard. Provides four hooks — Create / Destroy / Attach / Detach — and two plugin forms: Binary and RPC. This release includes Volume lifecycle management, sandbox–Volume binding APIs, and supporting SDK and cubemastercli capabilities. For details, see the Volume Plugin Guide.
Support setting an alias when creating a template, and creating sandboxes by specifying that alias.
Note: Aliases can only be set at template creation time; existing templates cannot have aliases added or changed. Specifying an alias when creating a sandbox is currently supported only in the Python SDK; other SDKs will follow soon.
Allow configuring the Host header forwarded to the sandbox (instead of the default <port>-<sandboxId>.<domain>), improving compatibility with Host-based services inside the sandbox. The new network.maskRequestHost parameter can be set when creating a sandbox to specify the Host forwarded to in-sandbox services (for example localhost:${PORT}, which expands to localhost:3000 when accessing port 3000), so applications that rely on Host for routing, validation, or callbacks work correctly.
Support isolating a compute node at the scheduling layer so operators can log in for maintenance, upgrades, and troubleshooting. After isolation, no new sandboxes are scheduled to that node; existing sandboxes continue to run unaffected.
Isolate a node with cubemastercli node isolate <node-id>, and lift isolation with the unisolate subcommand. For details, see Node Isolation.
Web console capabilities are split out of the CubeAPI module into a standalone CubeOps service, making CubeAPI lighter and more extensible.
tpl info / delete / redo.CUBE_AUTO_MIGRATION env var to skip automatic DB migration at startup for controlled upgrades.CubeSandbox 0.6.0 面向生产部署与运维持续增强关键能力。 当前版本引入了 6 个核心特性以及多个功能增强与问题修复。共计 92 个提交,来自 31 位贡献者。
支持通过 Helm Chart,将 CubeSandbox 的控制面组件和计算节点直接部署到腾讯云 TKE、标准 K8s 或 k3s 集群中。可通过标准 K8s 运维方式执行组件滚动升级、灰度发布等操作。关于 K8s 部署的详细信息请参考 K8s 部署指南。
::: warning 预览版本 K8s 部署功能当前处于预览阶段,平滑升级等高级功能仍在积极开发中,欢迎体验和反馈。 :::
新引入兼容 E2B 标准的 Volume 框架,在兼容 E2B 标准的前提下允许用户以插件形式自定义后端存储方案。提供 Create/Destroy/Attach/Detach 四个 HOOK 点,以及 Binary/RPC 两种插件形态。当前版本提供 Volume 生命周期管理、沙箱绑定 Volume 相关 API、配套 SDK 与 cubemastercli 能力。详细信息请参考 Volume 插件文档。
支持在创建模板时为模板设置别名,并通过指定别名创建沙箱。
说明:别名只能在创建模板时设置,不支持为已有模板修改别名。当前仅 Python SDK 支持指定别名创建沙箱,其他 SDK 后续即将支持。
允许配置请求转发至沙箱时的 Host(而非默认的 <port>-<sandboxId>.<domain>),更好地兼容沙箱内基于 Host 的服务。新增 network.maskRequestHost 参数,可在创建沙箱时指定转发给沙箱内服务的 Host(例如 localhost:${PORT},访问 3000 端口时展开为 localhost:3000),以便兼容依赖 Host 做路由、校验或回调的应用。
支持从调度层面“隔离”某个计算节点,便于运维时登录节点进行维护、升级和排查问题。计算节点被隔离后,将不会调度新的沙箱到该节点,存量沙箱运行不受影响。
可通过 cubemastercli node isolate <node-id> 进行节点隔离,通过 unisolate 子命令解除隔离,详细用法请参考节点相关操作。
Web 控制台相关能力从 CubeAPI 模块中剥离,独立为 CubeOps 服务,使 CubeAPI 更轻量、更具可扩展性。
tpl info / delete / redo 命令体验优化。CUBE_AUTO_MIGRATION 环境变量,可跳过启动期数据库自动迁移,便于受控升级。chore: bump image tags from v0.6.0-rc1 to v0.6.0-rc3
chore: bump image tags from v0.6.0-rc1 to v0.6.0-rc3 (#1134)
Bump all image tag references across Makefiles, Helm chart values, docs,
and deployment scripts from v0.6.0-rc1 to v0.6.0-rc3.
## Changes
- Updated default `IMAGE_TAG` in CubeEgress, CubeProxy, and
cube-lifecycle-manager Makefiles
- Updated all image tag references in
`deploy/kubernetes/chart/values.yaml`
- Updated tag references in docs (Kubernetes guide, Terraform deploy
guide, FAQ)
- Updated deployment scripts and Terraform configs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Signed-off-by: jinlong <jinlong@tencent.com>
fix(volume): CubeMaster/Cubelet mixed-version volumeMounts compatibil…
fix(volume): CubeMaster/Cubelet mixed-version volumeMounts compatibil…
…ity (#1123)
## Summary
- **Goal:** keep CubeMaster and Cubelet **new/old versions mutually
compatible** when sandboxes use plugin `volumeMounts` (rolling upgrades
/ mixed clusters).
- **Bug:** newer CubeMaster injected plugin volumes as
`EmptyDir(StorageMediumDefault)` placeholders plus
`plugin-volume-sources`. Older Cubelets have no plugin skip path and
treat every Default EmptyDir as a second rootfs derive
(`sb-<id>-rootfs-gen0`), which collides with `cube_rootfs_rw` and fails
create with `cubecow object already exists` (e.g. CubeAPI `130545`).
- **Fix (CubeMaster):** stop injecting Default EmptyDir for plugin
volumes; wire an empty `VolumeSource` name-only entry. New Cubelets
still Attach via the Volume Plugin framework + annotation; older
Cubelets skip the empty source in `prepareDefaultMedium` and no longer
collide on rootfs.
- **Defense (Cubelet):** keep `isPluginVolume` skip so a CubeMaster that
still sends Default EmptyDir placeholders does not break a newer
Cubelet.
### Compatibility matrix (intended)
| CubeMaster | Cubelet | Plugin volumeMounts create |
|---|---|---|
| new (this PR) | old | OK — no Default EmptyDir placeholder |
| new (this PR) | new | OK — annotation + plugin Attach |
| old (EmptyDir placeholder) | new | OK — Cubelet skips plugin EmptyDir
|
| old (no volume plugin) | old | N/A — volumes API not used |
## Test plan
- [x] Unit: `CubeMaster/pkg/service/sandbox` plugin volume annotation
test asserts no Default EmptyDir on the wire
- [x] Smoke: create sandbox with COS `volumeMounts` succeeds after
deploying fixed CubeMaster
- [x] E2E: `examples/volume/tests/e2e-volume-lifecycle.sh` with
`DRIVER=cos` and `DRIVER=cos-rpc`
- [x] SDK examples: `verify_volume.py` (cos / cos-rpc) and
`volume_complex_concurrent_test.py`
Assisted-by: Cursor:Composer
Made with [Cursor](https://cursor.com)
Signed-off-by: ls-ggg <lishuai@tencent.com>
Co-authored-by: ls-ggg <lishuai@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
v0.6.0-rc1
Nothing published for this version
CubeSandbox 0.5.1 is a production follow-up to 0.5.0, hardening AutoPause, ARM64, and cluster deployment for real-world scale. Headline items: a stand
CubeSandbox 0.5.1 is a production follow-up to 0.5.0, hardening AutoPause, ARM64, and cluster deployment for real-world scale. Headline items: a standalone cube-lifecycle-manager control-plane service (extracted from the CubeProxy sidecar so CubeProxy can scale horizontally), a three-value timeout semantics refactor with server-side defaults and NEVER_TIMEOUT, and host-mount path allowlisting to close arbitrary host bind-mounts. The release also fixes ARM64 64 KB page snapshot integrity and substantially improves egress policy / TAP recycle reliability. 59 commits from 18 contributors.
Splits the former in-image cube-proxy-sidecar into a standalone control-plane service — cube-lifecycle-manager (CLM) — so CubeProxy can run multiple replicas without a single-instance sidecar bottleneck.
cube-sandbox-control.target; one-click and TencentCloud Terraform deployments both include it.cube-lifecycle-manager Deployment; supports TENCENTCLOUD_CUBE_PROXY_REPLICAS multi-replica plus CLM replica count / discovery refresh / admin token knobs.Unifies sandbox idle-timeout semantics (E2B-aligned) and moves the "not set" vs "explicit default" decision from SDK / CubeAPI down to CubeMaster.
| Value | Meaning |
|---|---|
Omitted (None / nil) |
Cluster default_timeout_insec; if unset or ≤0 → never timeout |
NEVER_TIMEOUT (-1) |
Never reclaim on idle |
0 |
Immediate timeout (reclaimed on the first idle sweep) |
N > 0 |
Idle TTL = N seconds |
CreateOptions.Timeout become optional pointers; Create / Connect / Resume no longer inject a hard-coded default. Expose NeverTimeout / NEVER_TIMEOUT sentinels.Option / *int, preserving "unset"; EndAt follows three-value rules (-1 → no deadline).create_timeout_insec (default 300s) bounds only the create/scheduling RPC.TimeoutSeconds < 0; immediate reclaim at == 0; legacy nil falls back to DefaultIdleTimeout.set_timeout() / SetTimeout(), including NEVER_TIMEOUT (#743, #850). Web UI can pass timeout on sandbox create (#798).Host-mount previously accepted any absolute path, letting sandboxes bind-mount arbitrary host directories. Paths are now restricted to configurable prefixes (default /data/shared/), with filepath.Clean neutralizing .. traversal; / is explicitly forbidden in config (#756).
Persistent-storage docs updated (path restriction, permissions, multi-tenant isolation, multi-node shared storage); examples aligned to the default prefix (#768).
@cubesandbox/sdk aligned with the Python / Go surface; still under validation — use with caution in production.set_timeout (#743, #850): E2B-aligned; CubeAPI / CubeMaster accept -1 (NEVER_TIMEOUT) and reject other negatives.AllowPublicTraffic=false is no longer treated as deny-all; matches CubeAPI (deny-all only when AllowInternetAccess=false or denyOut contains 0.0.0.0/0).192.168.0.1; derives the first usable IP from CUBE_SANDBOX_NETWORK_CIDR so custom sandbox networks get correct TPROXY / OpenResty listen addresses.create_nat_session with per-session caching.MIRROR=cn|int and airgap local-cache fallback.release-docker-images.yml pushes multi-arch component images to GHCR / TCR; bump-image.sh is the single source of truth for hard-coded tags.cube.app resolution.CUBE_SANDBOX_NETWORK_CIDR cannot rewrite an empty cube_router_cidr.lifecycle.on_timeout / lifecycle.auto_resume, avoiding silent fallback to kill / no-resume.lan so cube-proxy can reach it via tap IP (auto could resolve to loopback).-drive if=none + -device virtio-blk-pci fixes empty-drive errors on QEMU 10.2.2+.RunCode / /execute stays on Jupyter./data/shared/... to match the default allowlist.run-dev skill; i18n sync checks and change-driven doc audit rules.v0.5.1-rc* candidates (#826, #867).Note: Web Example Center (#615) was merged and immediately reverted (#778); it is not part of this release.
CubeSandbox 0.5.1 是一次面向生产落地的跟进发布,在 0.5.0 的 AutoPause / ARM64 / 集群部署基线上补齐关键能力与稳定性。本版本重点包括:cube-lifecycle-manager 独立控制面服务(从 CubeProxy sidecar 拆出,支持 CubeProxy 多副本扩展)、三值 timeout 语义重构(服务端默认 + NEVER_TIMEOUT / 立即超时 / TTL),以及 host-mount 路径白名单安全加固。同时修复 ARM64 64KB 页场景下的快照完整性问题,并显著提升出向策略与 TAP 回收的可靠性。共计 59 个提交,来自 18 位贡献者。
将原先内嵌在 CubeProxy 镜像中的 cube-proxy-sidecar 拆分为独立控制面服务 cube-lifecycle-manager(CLM),使 CubeProxy 可多副本水平扩展,而不再依赖单实例 sidecar。
cube-sandbox-control.target;一键安装与腾讯云 Terraform 部署均已纳入。cube-lifecycle-manager Deployment;支持 TENCENTCLOUD_CUBE_PROXY_REPLICAS 多副本,以及 CLM 副本数 / discovery refresh / admin token 等配置项。统一沙箱 idle timeout 语义,与 E2B 对齐,并将「未设置」与「显式默认值」区分开——默认超时决策从 SDK / CubeAPI 下沉到 CubeMaster。
| 取值 | 含义 |
|---|---|
省略(None / nil) |
由集群 default_timeout_insec 决定;未配置或 ≤0 时视为永不超时 |
NEVER_TIMEOUT(-1) |
永不因 idle 回收 |
0 |
立即超时(首次 idle sweep 即回收) |
N > 0 |
idle TTL = N 秒 |
CreateOptions.Timeout 改为可选指针;Create / Connect / Resume 不再自动填入硬编码默认值。暴露 NeverTimeout / NEVER_TIMEOUT sentinel。Option / *int,透传「未设置」;EndAt 按三值语义计算(-1 → 无截止时间)。create_timeout_insec(默认 300s)仅约束创建调度 RPC,不再与沙箱 idle TTL 混用。TimeoutSeconds < 0 跳过回收;== 0 立即回收;旧数据 nil 回退到 DefaultIdleTimeout。set_timeout() / SetTimeout(),支持将运行中沙箱改为 NEVER_TIMEOUT (#743, #850)。Web UI 创建沙箱时可传入 timeout (#798)。此前 host-mount 接受任意绝对路径,沙箱可 bind-mount 宿主机任意目录。现改为可配置前缀白名单(默认 /data/shared/),并用 filepath.Clean 消除 .. 路径穿越;配置中显式禁止根路径 / (#756)。
配套更新持久化存储指南(路径限制、权限、多租户隔离、多节点共享存储),示例路径对齐默认前缀 (#768)。
@cubesandbox/sdk,API 面与 Python / Go 对齐;尚在验证中,生产使用请谨慎。set_timeout (#743, #850):对齐 E2B API;CubeAPI / CubeMaster 接受 -1(NEVER_TIMEOUT),拒绝其他负值。AllowPublicTraffic=false 误判为 deny-all;与 CubeAPI 一致,仅在 AllowInternetAccess=false 或 denyOut 含 0.0.0.0/0 时视为全拒绝。192.168.0.1;从 CUBE_SANDBOX_NETWORK_CIDR 取网段首个可用 IP,自定义沙箱网段时 TPROXY / OpenResty 监听地址正确。create_nat_session,按会话缓存结果。MIRROR=cn|int 与 airgap 本地缓存回退。release-docker-images.yml,向 GHCR / TCR 推送 multi-arch 组件镜像;bump-image.sh 统一管理硬编码镜像标签。cube.app 解析失败。CUBE_SANDBOX_NETWORK_CIDR 时误改空的 cube_router_cidr。lifecycle.on_timeout / lifecycle.auto_resume 等 Python 风格字段名,避免静默落到 kill / 无 resume。lan,确保 cube-proxy 可通过 tap IP 访问,避免 auto 落到 loopback。-drive if=none + -device virtio-blk-pci,修复 QEMU 10.2.2+ 的空 drive 错误。RunCode//execute 仍走 Jupyter。/data/shared/...,匹配默认白名单。run-dev skill;i18n 同步检查与变更驱动文档审计规则。v0.5.1-rc* (#826, #867)。说明:Web Example Center(#615)曾合入后随即回滚(#778),不包含在本版本交付中。
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CubeSandbox 0.5.0 带来了四大核心特性:AutoPause/AutoResume 沙箱生命周期自动化(闲置沙箱自动暂停并在请求到达时毫秒级唤醒)、ARM64 (aarch64) 全栈原生支持(从 hypervisor 到 CI/CD 的完整适配)、腾讯云 Terraform 一键集群
CubeSandbox 0.5.0 带来了四大核心特性:AutoPause/AutoResume 沙箱生命周期自动化(闲置沙箱自动暂停并在请求到达时毫秒级唤醒)、ARM64 (aarch64) 全栈原生支持(从 hypervisor 到 CI/CD 的完整适配)、腾讯云 Terraform 一键集群部署(生产级 IaC 部署方案),以及网络安全性增强(入向流量令牌鉴权、CubeEgress 启动期 Fail-Closed、出向策略路由)。其他重要更新包括:纯 Go 原生 rootfs 导出管线(绕过 Docker/skopeo/umoci,显著降低内存与构建时间开销)、快照运行时锁重构(消除高并发回滚死锁)、镜像 uid/gid 保留修复(修复非 root 镜像权限问题)、E2B SDK 对齐(完整的文件系统与 PTY API),以及一键升级模式(三路配置合并)。共计 116 个提交,来自 26 位贡献者。
Agent 工作流中的沙箱大部分时间处于闲置状态——等待用户输入、回调、或 RL 的下一轮 rollout。AutoPause/AutoResume 让平台自动暂停闲置沙箱,并在新请求到达时原地唤醒,将物理资源在闲置期间完全释放。这是一个平台侧承担、per-sandbox 粒度的能力,语义与 E2B 的 lifecycle 参数对齐。
cube-proxy-sidecar 组件内建 sweeper,通过 CubeProxy 的 log_phase.lua 上报的 last_active 时间戳跟踪沙箱活跃状态。当 idle >= timeout_seconds 时,sweeper 通过 CubeMaster → Cubelet 触发暂停:将 MicroVM 的完整状态(内存 + 文件系统)快照到 /data/cubelet/root/pausevm/<sandbox>,然后关闭沙箱。BootstrapWarmup 窗口可防止 sidecar 刚启动时的误暂停。sandbox_state.lua 门控拦截请求,向 sidecar 的 /internal/resume 发起内部子请求。Sidecar 通过 CubeMaster → Cubelet → containerd 驱动恢复流程,从暂停快照中原地恢复 VM。数据面请求会阻塞等待恢复完成(受 nginx proxy_read_timeout 约束)。同沙箱的并发恢复请求在进程内合并(singleflight 模式);跨副本协调通过 Redis SETNX 分布式锁。host.quota.paused_resource_release_ratio(float [0, 1],默认 0)控制暂停沙箱向调度器释放多少 CPU/内存配额。设为 1.0 时,暂停资源全部释放,实现最大调度密度;设为 0 时,保留完整配额,确保恢复链路绝对可靠。恢复前会进行本地准入检查——若节点容量不足,返回 HTTP 409 并附带精确的容量诊断信息。network.allow_public_traffic=false 创建的沙箱会获得一个 per-sandbox 的 traffic_access_token(UUID v4)。CubeProxy 在每个入站请求(包括冷路径和缓存命中路径)强制校验此令牌,缺失或错误令牌返回 HTTP 403。令牌值在所有日志中均被脱敏。兼容 e2b-traffic-access-token 和 cube-traffic-access-token 两种请求头。on_timeout="kill" 的沙箱走闲置超时 Kill 路径(task.Kill)。新增 POST /cube/sandbox/timeout 和 POST /cube/sandbox/refresh API,暴露 end_at 实现确定性的生命周期管理。CubeProxy 门控对 killing/killed 状态返回 410 Gone。新增文件:CubeProxy/sidecar/(Go 二进制——sweeper、resumer、registry、stream consumer、last-active poller、Redis 协调);CubeProxy Lua 模块(sandbox_state.lua、admin_phase.lua);CubeMaster 生命周期端点;Cubelet pause/resume RPC。
CubeSandbox 现已支持在 ARM64 主机上全栈原生运行,覆盖 hypervisor、guest agent、shim、网络(BPF)、构建系统、CI/CD 和部署工具。这是 Arm 工程团队与 Cube 项目组的深度联合研发成果,项目状态已从可行性验证推进到正式 Enablement。
mmio_bus 的 LEGACY_SYS_CTRL_MAPPED_IO_START 地址注册。KVM 寄存器访问(get_one_reg)适配上游 API 变更。Seccomp 过滤规则按 ARM64 系统调用号差异对齐(SYS_lstat vs SYS_fstatat/SYS_newfstatat)。热迁移功能保持 x86_64 专属。ioperm() + PIO 端口写入(端口 0x680)改为 ARM64 的 /dev/mem 在物理地址 0x0903_0000(SysCtrl MMIO 区域)处 mmap + ptr::write_volatile。构建目标自动检测宿主机架构。console=ttyAMA0,115200(ARM PL011 UART)vs console=hvc0(virtio-console)。x86 专用参数(no_timer_check、noreplace-smp)通过 #[cfg(target_arch = "x86_64")] 条件编译。Seccomp 白名单对齐:ARM64 上 SYS_mkdir → SYS_mkdirat;补充缺失的 SYS_faccessat2(ARM64 glibc 路径解析所用)。//go:generate 指令中的硬编码 -target amd64 替换为 -target $GOARCH。按架构提供 vmlinux.h(amd64 + arm64 BTF 导出)。BPF 目标文件改为构建时生成;预编译 .o 文件从 git 中移除。需要 clang ≥ 14(已通过 apt.llvm.org 加入构建镜像)。Dockerfile.builder 通过 TARGETARCH 参数化 Go、protoc、Rust 工具链下载。CubeEgress、CubeAPI 和 envd 镜像支持 Multi-Arch Manifest List。容器化 make guest-kernel 目标支持本地和交叉构建,使用架构特定的内核配置(kernel-oc9.x86_64.config、kernel-oc9.aarch64.config)。release_amd64 和 release_arm64 两个 Job,分别在原生 Runner 运行,上传到同一个 GitHub Release。run_vm.sh)自动检测架构——ARM64 使用 machine virt + UEFI 固件(qemu-efi-aarch64)。Release 打包脚本按架构选择合适的 mkcert 二进制。一套面向腾讯云的生产级、一键式 Terraform IaC 集群部署方案。只需一份 release bundle,执行 create.sh 作为唯一入口,即可自动拉起完整的 CubeSandbox 集群——包含受管控制面、高可用中间件和弹性计算节点。
10.0.0.0/16)及按可用区的子网、NAT 网关(含弹性公网 IP)、安全组、以及一台跳板机(jumpserver)。云上托管服务自动创建:
cube 应用账号及数据库级权限。/data/CubeMaster/storage),ReadWriteMany 模式。可选——开启后启用多副本高可用模式。cubemaster_replicas、cube_api_replicas、cube_proxy_replicas、cube_webui_replicas 变量(POC 模式默认 1 副本)。当 TENCENTCLOUD_USE_CFS=true 时,cube-master 支持多副本高可用,副本数同时驱动 spec.replicas 和调度器并发分配。install.sh --mode=upgrade 自动检测已有安装,执行三路 .env 配置合并(新默认值 + 旧自定义值 + 显式覆盖值),fail-fast 预检(磁盘空间、语义化版本兼容性、CIDR 冲突),并在任何破坏性操作前备份配置。用户自定义修改被保留,密钥值在 diff 报告中脱敏但在实际合并文件中保留。CUBE_EXTERNAL_MYSQL_* / CUBE_EXTERNAL_REDIS_* 变量接入已有的外部 MySQL 和 Redis 实例。本地 Docker 容器被 mask,所有组件(CubeMaster、CubeAPI、CubeProxy)使用外部端点。CUBE_PROXY_HOST_PORT,拆分为 CUBE_PROXY_HTTP_PORT / CUBE_PROXY_HTTPS_PORT (#588)。移除手动 SQL 初始化,改用 CubeMaster 内嵌 goose migration (#628)。CubeEgress 集成到计算节点启动流程 (#707)。改进外部依赖兼容性(Shell 安全的 env 持久化、redis-cli 超时兼容检测)(#673)。腾讯云部署配置了 cubelet 上报间隔与多节点调度器评分 (b8f22421)。镜像默认值更新为 v0.5.0 标签 (#719)。新增文件:deploy/one-click/terraform/tencentcloud/(create.sh、destroy.sh、main.tf、variables.tf、tke-addons.tf、outputs.tf、lib-state-sync.sh、env.example);docs/guide/tencentcloud-terraform-deploy.md(中英文各一份)。
入向、出向、数据面三个维度的关键网络安全补丁。
AllowPublicTraffic=false 时对每个入向请求强制校验 traffic_access_token,缺失或错误返回 403。令牌值不会被记录到任何日志中。cube-router 内核 dummy 网卡允许沙箱出向流量走宿主机 Linux 路由栈,而非被硬性重定向到主网卡。流量可从任意可路由设备(eth0、eth1、GRE 隧道、VXLAN、WireGuard)发出,无缝对接现有网络基础设施。已有的 CubeEgress L7 策略、DNS 白名单和端口映射全部保留。snat_tcp() 函数在仅 TCP 端口值变化的情况下错误使用了 BPF_F_PSEUDO_HDR 参数,导致多节点部署下校验和损坏。from_world TC filter 挂载,减少不必要的 eBPF 挂载点。list、stat、exists、remove、rename、mkdir、watch。含全面集成测试。create、connect、kill、send_stdin、resize,通过 PtyHandle 迭代器提供流式输出。直接通过 httpx 与 envd 的 Connect-JSON RPC 通信,不依赖 e2b Python 包。{transform: {headers: {...}}} 凭据注入格式,翻译为 CubeEgress L7 action.inject 规则。使用 E2B per-host 凭据注入的代码可零改动切换。VIRTIO_BLK_F_SEG_MAX(多段请求)和 VIRTIO_RING_F_INDIRECT_DESC(间接描述符),fio 基准测试中顺序写入吞吐从 2888 MiB/s 提升至 3293 MiB/s。template watch 和 template build-watch CLI 命令,提供交互式 bubbletea TUI(显示下载速度、逐层完成度、步骤清单),非 TTY 终端自动降级为纯文本输出。t_cube_artifact_node_placement 表,独立于 Replica 生命周期跟踪节点级制品放置。周期性制品 GC,以 MySQL GET_LOCK 保证高可用协调。加固 CubeMaster、Cubelet、CubeAPI 级联清理链路。AgentHub 快照级联清理增加路径穿越保护。decrypt_or_passthrough 对不可解密的负载采取 Fail-Closed 策略。--mode=upgrade + 三路 env 合并 + 升级前备份 + fail-fast 预检。CUBE_PROXY_HOST_PORT 废弃;拆分为 CUBE_PROXY_HTTP_PORT(默认 80)和 CUBE_PROXY_HTTPS_PORT(默认 443)。cube-api、cubemaster 和 cubemastercli 现为完全静态二进制(Go CGO_ENABLED=0 / Rust musl 目标),消除宿主机 glibc 依赖和版本偏差风险。resolvectl default-route,防止 RHEL 8.3 等系统安装失败。pkg/base/rediskey 中,采用统一命名规范。移除读写/元数据连接池分离,简化为单连接池,降低多节点部署配置复杂度。POST /nodes/{id}/labels 和 DELETE /nodes/{id}/labels 端点用于管理员标签管理。K8s 兼容命名(DNS1123 子域名前缀),SELECT FOR UPDATE 竞争保护,每节点 64 标签上限,系统保留命名空间保护(kubernetes.io、beta.kubernetes.io、cube.cloud.tencentcloud.com)。CUBEMASTER_HTTP_BIND 使 HTTP 监听地址可配置,支持绑定到私有网卡以进行网络安全加固。real_time_weighted_average 插件,平衡 mvm_num、local_create_num、cpu_usage、quota_mem_usage 权重。priority_select_num 动态上限为 min(compute_node_count, 3)。以下修复针对 v0.4.0 中存在的问题:
t_cube_snapshot_runtime_active 表,引入沙箱级和资源级分布式锁,从根本上消除了 MySQL 1213 死锁错误。WithNoSameOwner() 选项——此前该选项会将所有文件的 uid/gid 压缩为提取用户,破坏镜像原始权限。umoci unpack --rootless 现在仅在 euid ≠ 0 时传递(root 身份运行时不再传递)。Docker-export 回退路径增加 --same-owner --numeric-owner。修复 Browser 沙箱中 Chromium profile 写入失败和 CDP 不可达、以及 Python 镜像 envd exec 因 /home/user 权限导致 EACCES 的问题。X-Cube-Retcode 响应头和 $cube_retcode 访问日志字段。错误响应统一为不透明 HTTP 状态码 + 标准 JSON Body,防止通过区分错误码枚举沙箱 ID 或探测基础设施弱点。X-Request-Method 现在转发到认证回调,实现(路径 + 方法)粒度的鉴权。此前,仅路径白名单无法区分同一路径的 GET 和 DELETE 操作,只读凭证可访问破坏性端点。created_at 和 image_info 字段。.one-click.env,确保重启后镜像仓库选择一致。DATABASE_URL 持久化到本地 MySQL 的安装和 systemd 启动路径。IPOverrideTransport 中请求体拷贝前先缓冲,修复 multipart 上传失败。commands.run 启动 envd 时 create-time 环境变量丢失的问题。/cube/sandbox/preview 路由处理器,此前 cubemastercli tpl render 会静默失败。scripts/common/ 目录导致升级预检脚本不可用的问题。with_cube_ca 参数未正确转发的问题,确保客户端能够控制是否将 CubeEgress 根 CA 注入模板 rootfs。semver_compare 和 version_lt 函数,确保升级决策逻辑正确。cubecli logs 使用指南及示例。python-sdk-v* 标签触发 PyPI 发布。版本交叉校验(tag vs pyproject.toml vs __init__.py),智能变更检测(跳过无变化的发布),twine check 验证。gh release 命令添加 --repo 参数,确保正确的仓库指向。CubeSandbox 0.5.0 introduces AutoPause/AutoResume, a platform-level sandbox lifecycle automation that transparently suspends idle sandboxes and resumes them on-demand on the next dataplane request. This release also delivers ARM64 (aarch64) native support across the entire stack — from hypervisor to CI/CD — a TencentCloud Terraform cluster deployer for production-grade one-click deployment, and network security hardening with per-sandbox traffic access tokens, CubeEgress fail-closed bootstrap, and policy-routing egress. Additional highlights include a pure-Go native rootfs export pipeline that bypasses Docker, skopeo, and umoci entirely, a snapshot runtime locking refactor to eliminate high-concurrency deadlocks, image uid/gid preservation fixes for non-root container images, E2B SDK alignment with complete filesystem and PTY APIs, and a one-click upgrade mode with three-way config merge. 116 commits from 26 contributors.
Sandboxes in agent workflows spend most of their time idle — waiting for user input, callbacks, or the next RL rollout cycle. AutoPause/AutoResume lets the platform automatically suspend idle sandboxes and instantly wake them on the next incoming request, releasing physical host resources during idle periods. This is implemented as a platform-side, per-sandbox capability with semantics aligned to the E2B lifecycle parameter.
CubeProxy/sidecar/) tracks sandbox activity via last_active timestamps reported by CubeProxy's log_phase.lua. When idle >= timeout_seconds, the sidecar triggers a pause through CubeMaster → Cubelet, which snapshots the full VM state (memory + filesystem) to /data/cubelet/root/pausevm/<sandbox>, then shuts down the MicroVM. A configurable BootstrapWarmup window prevents premature pausing during sidecar startup.sandbox_state.lua gate intercepts it and fires an internal sub-request to the sidecar's /internal/resume. The sidecar drives a resume RPC through CubeMaster → Cubelet → containerd, which restores the VM from the pause snapshot. The dataplane request blocks until resume completes (bound by nginx proxy_read_timeout). Concurrent resumes for the same sandbox are coalesced in-process (singleflight pattern); cross-replica coordination uses Redis SETNX locks.host.quota.paused_resource_release_ratio (float [0, 1], default 0) controls how much CPU/memory quota paused sandboxes release back to the scheduler. At ratio 1.0, all quota is released for maximum node density; at ratio 0, paused sandboxes retain full quota (guaranteed resume). Before resuming, a local admission check verifies the node has capacity — if not, the resume is rejected with HTTP 409 and a precise capacity diagnostic.network.allow_public_traffic=false receive a per-sandbox traffic_access_token (UUID v4). CubeProxy enforces this token on every inbound request (both cold-path and cache-hit), returning HTTP 403 for missing or mismatched tokens. Token values are redacted from all logs. Accepts both e2b-traffic-access-token and cube-traffic-access-token headers.on_timeout="kill" go through an idle timeout kill path with task.Kill. New POST /cube/sandbox/timeout and POST /cube/sandbox/refresh APIs expose end_at for deterministic lifecycle management. The CubeProxy gate returns 410 Gone for killing/killed sandboxes.New files: CubeProxy/sidecar/ (Go binary — sweeper, resumer, registry, stream consumer, last-active poller, Redis coordination); CubeProxy Lua modules (sandbox_state.lua, admin_phase.lua); CubeMaster lifecycle endpoints; Cubelet pause/resume RPCs.
CubeSandbox now runs natively on ARM64 hosts, spanning the hypervisor, guest agent, shim, networking (BPF), build system, CI/CD, and deployment tooling. The work was a deep collaboration between Arm engineering and the Cube project team, progressing from feasibility to formal enablement.
mmio_bus at LEGACY_SYS_CTRL_MAPPED_IO_START. KVM register access (get_one_reg) was updated for a changed upstream API signature. Seccomp rules were aligned for ARM64 syscall number differences (SYS_lstat vs SYS_fstatat/SYS_newfstatat). Live migration support remains x86_64-gated.ioperm() + PIO port write (port 0x680) to ARM64 /dev/mem mmap at physical address 0x0903_0000 (SysCtrl MMIO region) with ptr::write_volatile. Build target auto-detected from host arch.console=ttyAMA0,115200 (ARM PL011 UART) vs console=hvc0 (virtio-console). x86-only mitigations (no_timer_check, noreplace-smp) gated to #[cfg(target_arch = "x86_64")]. Seccomp allow-lists aligned: SYS_mkdir → SYS_mkdirat on ARM64; added missing SYS_faccessat2 for glibc path resolution on ARM64.-target amd64 in BPF //go:generate directives replaced with -target $GOARCH. Per-architecture vmlinux.h headers (amd64 + arm64 BTF dumps). BPF object files regenerated at build time; prebuilt .o files removed from git. Requires clang ≥ 14 (added to builder image via apt.llvm.org).Dockerfile.builder parameterized with TARGETARCH for Go, protoc, and Rust toolchain downloads. CubeEgress, CubeAPI, and envd images support multi-arch manifest lists. A containerized make guest-kernel target supports both native and cross builds with architecture-specific kernel configs (kernel-oc9.x86_64.config, kernel-oc9.aarch64.config).release_amd64 and release_arm64 jobs running on native runners; both upload to the same GitHub Release.run_vm.sh) auto-detects architecture — ARM64 uses machine virt with UEFI firmware (qemu-efi-aarch64). Release bundle script packages per-architecture mkcert binaries.A production-grade, one-click cluster deployment for TencentCloud driven entirely by Terraform IaC. From a single release bundle and create.sh entry point, the deployer provisions a full CubeSandbox cluster with managed control plane, HA middleware, and elastic compute nodes.
10.0.0.0/16) with per-zone subnets, NAT Gateway with EIP, security groups, and a bastion jumpserver. Managed cloud services are automatically created:
cube with database-level privileges./data/CubeMaster/storage), mounted ReadWriteMany across replicas. Optional — enables multi-replica HA mode.cubemaster_replicas, cube_api_replicas, cube_proxy_replicas, cube_webui_replicas variables (default 1 for POC mode). When TENCENTCLOUD_USE_CFS=true, cube-master multi-replica HA is enabled with cubemaster_replicas driving both spec.replicas and scheduler concurrency apportionment.install.sh --mode=upgrade detects existing installations, performs three-way .env config merge (new defaults + old customizations + explicit overrides), runs fail-fast preflight checks (disk space, semver compatibility, CIDR conflict), and backs up configuration before any destructive change. User customizations are preserved; secrets are redacted in the diff report but retained in the actual merged file.CUBE_EXTERNAL_MYSQL_* / CUBE_EXTERNAL_REDIS_* variables. Local Docker containers are masked, and all components (CubeMaster, CubeAPI, CubeProxy) are configured to use the external endpoints.CUBE_PROXY_HOST_PORT deprecated, split into CUBE_PROXY_HTTP_PORT / CUBE_PROXY_HTTPS_PORT (#588). Manual SQL seed removed in favor of CubeMaster embedded migrations (#628). CubeEgress integrated into compute node startup (#707). Improved external dependency compatibility with shell-safe env persistence and redis-cli timeout detection (#673). Cubelet reporting interval and scheduler scoring configured for multi-node TencentCloud deployments (b8f22421). Image defaults updated to v0.5.0 tags (#719).New files: deploy/one-click/terraform/tencentcloud/ (create.sh, destroy.sh, main.tf, variables.tf, tke-addons.tf, outputs.tf, lib-state-sync.sh, env.example); docs/guide/tencentcloud-terraform-deploy.md (EN + ZH).
Three critical patches for sandbox network security: inbound access control, outbound fail-closed, and policy-routing egress.
traffic_access_token on every inbound request when AllowPublicTraffic=false, returning 403 for missing/bad tokens. Token values are never logged.cube-router kernel dummy device allows sandbox outbound traffic to enter the Linux host routing stack instead of being hard-redirected to the primary NIC. Traffic can leave through any routable device (eth0, eth1, GRE tunnels, VXLAN, WireGuard), enabling seamless integration with existing multi-NIC and VPN network infrastructure. Existing CubeEgress L7 policy, DNS allow-list, and port mapping are all preserved.snat_tcp() function was incorrectly using BPF_F_PSEUDO_HDR when only the TCP port had changed, causing checksum corruption on multi-node deployments.from_world TC filter attachment on the loopback interface, reducing unnecessary eBPF hook points.list, stat, exists, remove, rename, mkdir, and watch. Comprehensive integration tests included.create, connect, kill, send_stdin, resize — with streaming output via PtyHandle iterator. Speaks envd's Connect-JSON RPC directly; no dependency on e2b Python packages.{transform: {headers: {...}}} credential injection shape, translated into CubeEgress L7 action.inject rules. Drop-in replacement for codebases using E2B's per-host credential injection.VIRTIO_BLK_F_SEG_MAX (multi-segment requests) and VIRTIO_RING_F_INDIRECT_DESC (indirect descriptors) in the hypervisor's virtio-blk device, improving sequential write throughput from 2888 MiB/s to 3293 MiB/s (fio benchmark).template watch and template build-watch CLI commands provide an interactive bubbletea TUI showing live metrics (download speed, per-layer completion, step-by-step checklist), with plain-text fallback on non-TTY terminals.t_cube_artifact_node_placement table for node-level artifact tracking independent of replica lifecycle. Periodic artifact GC with MySQL GET_LOCK for HA coordination. Hardened cascade cleanup across CubeMaster, Cubelet, and CubeAPI. AgentHub snapshot cascade cleanup with path traversal protection.decrypt_or_passthrough now fails closed for undecryptable payloads.--mode=upgrade with three-way env merge, pre-upgrade backup, and fail-fast preflights.CUBE_PROXY_HOST_PORT deprecated; CUBE_PROXY_HTTP_PORT (default 80) and CUBE_PROXY_HTTPS_PORT (default 443) provide separate HTTP/HTTPS control.cube-api, cubemaster, and cubemastercli are now fully static binaries (CGO_ENABLED=0 / musl target), eliminating host glibc dependency and preventing version-skew failures.resolvectl default-route on older systemd (pre-v240), preventing install failures on RHEL 8.3 and similar distributions.pkg/base/rediskey with consistent naming. Read/write pool separation dropped in favor of a single pool, simplifying multi-node deployment configuration.POST /nodes/{id}/labels and DELETE /nodes/{id}/labels endpoints for admin-managed labels. Kubernetes-compatible naming (DNS1123 subdomain prefix), SELECT FOR UPDATE race protection, 64-label limit, system-reserved namespace protection (kubernetes.io, beta.kubernetes.io, cube.cloud.tencentcloud.com).CUBEMASTER_HTTP_BIND makes the HTTP listen address configurable, supporting private-NIC binding for network security hardening.real_time_weighted_average plugin balancing mvm_num, local_create_num, cpu_usage, and quota_mem_usage. priority_select_num dynamically capped at min(compute_node_count, 3).These fixes address issues present in v0.4.0:
t_cube_snapshot_runtime_active table with sandbox-level and resource-level distributed locks. Eliminates MySQL 1213 deadlock errors.WithNoSameOwner() option, which was squashing all file uid/gid to the extracting user, breaking image ownership.umoci unpack --rootless now only passed when euid ≠ 0 (not when running as root). Docker-export fallback uses --same-owner --numeric-owner. Fixes Chromium profile write failures and CDP unreachability in browser sandboxes, and envd exec EACCES on /home/user for Python images.X-Cube-Retcode response header and $cube_retcode access-log field that exposed internal failure-mode codes. Errors now return opaque HTTP status codes with uniform JSON bodies, preventing sandbox ID enumeration and infrastructure probing.X-Request-Method now forwarded to auth callbacks alongside X-Request-Path, enabling fine-grained (path + method) authorization. Previously, a read-only credential could access destructive endpoints on the same path.commands.run./cube/sandbox/preview route handler that caused cubemastercli tpl render to silently fail.scripts/common/ directory in upgrade bundles that broke preflight validation scripts for the upgrade feature (#538).with_cube_ca parameter not being forwarded when creating templates, ensuring clients can control whether the CubeEgress root CA is baked into template rootfs.created_at and image_info fields in template detail responses..one-click.env for consistent image registry selection across restarts.DATABASE_URL now persisted for local MySQL in install and systemd start paths.IPOverrideTransport, fixing multipart upload failures.semver_compare and version_lt functions added for correct upgrade decision logic.cubecli logs usage guide with examples.python-sdk-v* tags. Version cross-validation (tag vs pyproject.toml vs __init__.py), smart change detection to skip unchanged publishes, and twine check validation.--repo flag added to gh release commands for correct repository targeting.Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →