Skip to content

Commit 409041f

Browse files
committed
docs: translate new sections in README.md, rename to ClawXSandbox/ClawXKairos
- Add English translations for ClawXGovernor, Claude Code-Liked Features, and Pitfall Guide sections - Update comparison table, highlights, demo video, code structure, and ecosystem projects - Rename edgeclaw-kairos → clawxkairos, edgeclaw-sandbox → ClawXSandbox Made-with: Cursor
1 parent 16ca3c9 commit 409041f

28 files changed

Lines changed: 318 additions & 73 deletions

README.md

Lines changed: 172 additions & 2 deletions
Large diffs are not rendered by default.

extensions/edgeclaw-sandbox/openclaw.plugin.json renamed to extensions/ClawXSandbox/openclaw.plugin.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"id": "edgeclaw-sandbox",
3-
"name": "EdgeClaw OS Sandbox",
4-
"description": "OS-level sandbox backend (bwrap/sandbox-exec) for EdgeClaw agents, powered by @anthropic-ai/sandbox-runtime.",
2+
"id": "clawx-sandbox",
3+
"name": "ClawXSandbox",
4+
"description": "OS-level sandbox backend (bwrap/sandbox-exec) for ClawXSandbox agents, powered by @anthropic-ai/sandbox-runtime.",
55
"version": "0.1.0",
66
"kind": "sandbox",
77
"configSchema": {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"name": "@openclaw/edgeclaw-sandbox",
2+
"name": "@openclaw/clawx-sandbox",
33
"version": "2026.4.1",
44
"private": true,
5-
"description": "OS-level sandbox backend (bwrap/sandbox-exec) for EdgeClaw agents.",
5+
"description": "OS-level sandbox backend (bwrap/sandbox-exec) for ClawXSandbox agents.",
66
"type": "module",
77
"dependencies": {
88
"@anthropic-ai/sandbox-runtime": "^0.0.46"

extensions/edgeclaw-sandbox/src/bwrap-backend.ts renamed to extensions/ClawXSandbox/src/bwrap-backend.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
SandboxBackendHandle,
88
SandboxBackendManager,
99
} from "openclaw/plugin-sdk/sandbox";
10-
import { mapToSandboxRuntimeConfig, type EdgeClawSandboxPluginConfig } from "./config.js";
10+
import { mapToSandboxRuntimeConfig, type ClawXSandboxPluginConfig } from "./config.js";
1111

1212
let initialized = false;
1313

@@ -67,7 +67,7 @@ function runWrappedCommand(
6767
}
6868

6969
export function createBwrapSandboxBackendFactory(
70-
getPluginConfig: () => EdgeClawSandboxPluginConfig,
70+
getPluginConfig: () => ClawXSandboxPluginConfig,
7171
) {
7272
const factory = async (params: CreateSandboxBackendParams): Promise<SandboxBackendHandle> => {
7373
const pluginConfig = getPluginConfig();
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
import type { SandboxRuntimeConfig } from "@anthropic-ai/sandbox-runtime";
22

3-
export type EdgeClawSandboxNetworkConfig = {
3+
export type ClawXSandboxNetworkConfig = {
44
allowedDomains?: string[];
55
deniedDomains?: string[];
66
allowUnixSockets?: string[];
77
allowAllUnixSockets?: boolean;
88
allowLocalBinding?: boolean;
99
};
1010

11-
export type EdgeClawSandboxFilesystemConfig = {
11+
export type ClawXSandboxFilesystemConfig = {
1212
allowWrite?: string[];
1313
denyWrite?: string[];
1414
allowRead?: string[];
1515
denyRead?: string[];
1616
};
1717

18-
export type EdgeClawSandboxPluginConfig = {
19-
network?: EdgeClawSandboxNetworkConfig;
20-
filesystem?: EdgeClawSandboxFilesystemConfig;
18+
export type ClawXSandboxPluginConfig = {
19+
network?: ClawXSandboxNetworkConfig;
20+
filesystem?: ClawXSandboxFilesystemConfig;
2121
};
2222

2323
/**
24-
* Convert EdgeClaw plugin config + backend params into the
24+
* Convert ClawXSandbox plugin config + backend params into the
2525
* SandboxRuntimeConfig shape that @anthropic-ai/sandbox-runtime expects.
2626
*
2727
* The workspace directory is always added to allowWrite so sandboxed
2828
* commands can operate on the agent's working tree.
2929
*/
3030
export function mapToSandboxRuntimeConfig(
31-
pluginConfig: EdgeClawSandboxPluginConfig,
31+
pluginConfig: ClawXSandboxPluginConfig,
3232
workspaceDir: string,
3333
agentWorkspaceDir?: string,
3434
): SandboxRuntimeConfig {
File renamed without changes.
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
22
import { registerSandboxBackend } from "openclaw/plugin-sdk/sandbox";
33
import { bwrapSandboxBackendManager, createBwrapSandboxBackendFactory } from "./bwrap-backend.js";
4-
import type { EdgeClawSandboxPluginConfig } from "./config.js";
4+
import type { ClawXSandboxPluginConfig } from "./config.js";
55
import { createBwrapFsBridge } from "./fs-bridge.js";
66

7-
let storedPluginConfig: EdgeClawSandboxPluginConfig = {};
7+
let storedPluginConfig: ClawXSandboxPluginConfig = {};
88

99
const plugin = definePluginEntry({
10-
id: "edgeclaw-sandbox",
11-
name: "EdgeClaw OS Sandbox",
12-
description: "OS-level sandbox backend (bwrap/sandbox-exec) for EdgeClaw agents.",
10+
id: "clawx-sandbox",
11+
name: "ClawXSandbox",
12+
description: "OS-level sandbox backend (bwrap/sandbox-exec) for ClawXSandbox agents.",
1313

1414
register(api) {
15-
storedPluginConfig = (api.pluginConfig as EdgeClawSandboxPluginConfig) ?? {};
15+
storedPluginConfig = (api.pluginConfig as ClawXSandboxPluginConfig) ?? {};
1616

1717
const factory = createBwrapSandboxBackendFactory(() => storedPluginConfig);
1818

extensions/edgeclaw-sandbox/tests/bwrap-backend.test.ts renamed to extensions/ClawXSandbox/tests/bwrap-backend.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
createBwrapSandboxBackendFactory,
1717
resetBwrapState,
1818
} from "../src/bwrap-backend.js";
19-
import type { EdgeClawSandboxPluginConfig } from "../src/config.js";
19+
import type { ClawXSandboxPluginConfig } from "../src/config.js";
2020

2121
function makeParams(overrides?: Record<string, unknown>) {
2222
return {
@@ -68,7 +68,7 @@ function makeParams(overrides?: Record<string, unknown>) {
6868
}
6969

7070
describe("createBwrapSandboxBackendFactory", () => {
71-
let pluginConfig: EdgeClawSandboxPluginConfig;
71+
let pluginConfig: ClawXSandboxPluginConfig;
7272

7373
beforeEach(() => {
7474
pluginConfig = {};
@@ -110,7 +110,7 @@ describe("createBwrapSandboxBackendFactory", () => {
110110
});
111111

112112
describe("buildExecSpec", () => {
113-
let pluginConfig: EdgeClawSandboxPluginConfig;
113+
let pluginConfig: ClawXSandboxPluginConfig;
114114

115115
beforeEach(() => {
116116
pluginConfig = {};

extensions/edgeclaw-sandbox/tests/config.test.ts renamed to extensions/ClawXSandbox/tests/config.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from "vitest";
2-
import { mapToSandboxRuntimeConfig, type EdgeClawSandboxPluginConfig } from "../src/config.js";
2+
import { mapToSandboxRuntimeConfig, type ClawXSandboxPluginConfig } from "../src/config.js";
33

44
describe("mapToSandboxRuntimeConfig", () => {
55
const workspaceDir = "/home/agent/workspace";
@@ -32,47 +32,47 @@ describe("mapToSandboxRuntimeConfig", () => {
3232
});
3333

3434
it("maps network allowedDomains", () => {
35-
const pluginConfig: EdgeClawSandboxPluginConfig = {
35+
const pluginConfig: ClawXSandboxPluginConfig = {
3636
network: { allowedDomains: ["npmjs.org", "pypi.org"] },
3737
};
3838
const config = mapToSandboxRuntimeConfig(pluginConfig, workspaceDir);
3939
expect(config.network?.allowedDomains).toEqual(["npmjs.org", "pypi.org"]);
4040
});
4141

4242
it("maps network deniedDomains", () => {
43-
const pluginConfig: EdgeClawSandboxPluginConfig = {
43+
const pluginConfig: ClawXSandboxPluginConfig = {
4444
network: { deniedDomains: ["evil.com"] },
4545
};
4646
const config = mapToSandboxRuntimeConfig(pluginConfig, workspaceDir);
4747
expect(config.network?.deniedDomains).toEqual(["evil.com"]);
4848
});
4949

5050
it("maps filesystem denyWrite", () => {
51-
const pluginConfig: EdgeClawSandboxPluginConfig = {
51+
const pluginConfig: ClawXSandboxPluginConfig = {
5252
filesystem: { denyWrite: ["~/.ssh", "~/.gnupg"] },
5353
};
5454
const config = mapToSandboxRuntimeConfig(pluginConfig, workspaceDir);
5555
expect(config.filesystem?.denyWrite).toEqual(["~/.ssh", "~/.gnupg"]);
5656
});
5757

5858
it("maps filesystem denyRead", () => {
59-
const pluginConfig: EdgeClawSandboxPluginConfig = {
59+
const pluginConfig: ClawXSandboxPluginConfig = {
6060
filesystem: { denyRead: ["/etc/shadow"] },
6161
};
6262
const config = mapToSandboxRuntimeConfig(pluginConfig, workspaceDir);
6363
expect(config.filesystem?.denyRead).toEqual(["/etc/shadow"]);
6464
});
6565

6666
it("merges extra allowWrite paths with workspace", () => {
67-
const pluginConfig: EdgeClawSandboxPluginConfig = {
67+
const pluginConfig: ClawXSandboxPluginConfig = {
6868
filesystem: { allowWrite: ["/tmp/build"] },
6969
};
7070
const config = mapToSandboxRuntimeConfig(pluginConfig, workspaceDir);
7171
expect(config.filesystem?.allowWrite).toEqual([workspaceDir, "/tmp/build"]);
7272
});
7373

7474
it("passes through unix socket and local binding settings", () => {
75-
const pluginConfig: EdgeClawSandboxPluginConfig = {
75+
const pluginConfig: ClawXSandboxPluginConfig = {
7676
network: {
7777
allowUnixSockets: ["/var/run/docker.sock"],
7878
allowAllUnixSockets: false,

extensions/edgeclaw-sandbox/tests/fs-bridge.test.ts renamed to extensions/ClawXSandbox/tests/fs-bridge.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe("createBwrapFsBridge", () => {
88
let tmpDir: string;
99

1010
beforeEach(async () => {
11-
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "edgeclaw-sandbox-test-"));
11+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "clawx-sandbox-test-"));
1212
});
1313

1414
afterEach(async () => {

0 commit comments

Comments
 (0)