feat(sandbox): add Daytona cloud sandbox backend plugin (#121554)

* feat: @openclaw/daytona-sandbox inital version

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* feat: plugin config params extended

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* feat: implement ClawSweeper review notes

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* fix(daytona): honor abort signals and clean up remote staging on failure

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* fix(daytona): register launcher as knip entry and refresh manifest schema

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* fix(daytona): cancellable session transport and auto-stopped sandbox restart

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* fix(daytona): deny egress by default and arm launcher cleanup before startup

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>

* fix(daytona): stop cancelled startup before submission

* test(daytona): satisfy deferred race lint

* test(release): update plugin publisher inventory

* fix(daytona): close provisioning and PTY cleanup gaps

* test(daytona): type PTY launcher mock

* fix(acpx): avoid promise-returning line handler

* fix(daytona): await PTY signal cleanup

* fix(daytona): declare ClawHub install route

* fix(daytona): forward PTY stdin EOF

* fix(daytona): serialize PTY input

* docs(daytona): document sandbox backend config

---------

Signed-off-by: Mislav Ivanda <mislavivanda454@gmail.com>
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
This commit is contained in:
Mislav Ivanda
2026-08-27 05:52:12 +02:00
committed by GitHub
parent 3255882803
commit 3a5cb3847c
30 changed files with 4580 additions and 29 deletions
@@ -13,7 +13,7 @@ describe("external plugin local dist build", () => {
const packageDirs = listExternalPluginLocalDistPackageDirs();
const excludedPluginIds = collectRootPackageExcludedExtensionDirs();
expect(packageDirs).toHaveLength(63);
expect(packageDirs).toHaveLength(64);
expect(packageDirs).toEqual(
expect.arrayContaining([
"extensions/diffs",
@@ -21,6 +21,7 @@ describe("external plugin local dist build", () => {
"extensions/slack",
"extensions/sms",
"extensions/mxc",
"extensions/daytona",
]),
);
expect(packageDirs).not.toContain("extensions/whatsapp");
+3 -3
View File
@@ -1115,7 +1115,7 @@ mutateModule.syncBuiltinESMExports();
);
});
it("matches the exact current publisher inventory: 93 npm and 89 ClawHub packages", () => {
it("matches the exact current publisher inventory: 94 npm and 90 ClawHub packages", () => {
const root = tempDirs.make("openclaw-release-plan-current-");
const candidateSha = execFileSync("git", ["rev-parse", "HEAD"], {
cwd: resolve("."),
@@ -1141,8 +1141,8 @@ mutateModule.syncBuiltinESMExports();
const clawHubPackages = plan.inventory.packages.filter((entry) =>
entry.targets.includes("clawhub"),
);
expect(npmPackages).toHaveLength(93);
expect(clawHubPackages).toHaveLength(89);
expect(npmPackages).toHaveLength(94);
expect(clawHubPackages).toHaveLength(90);
const coreNpmPackages = new Set([
"@openclaw/ai",
"@openclaw/gateway-client",