refactor: 统一项目名称从OpenFang到ZCLAW
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

重构所有代码和文档中的项目名称,将OpenFang统一更新为ZCLAW。包括:
- 配置文件中的项目名称
- 代码注释和文档引用
- 环境变量和路径
- 类型定义和接口名称
- 测试用例和模拟数据

同时优化部分代码结构,移除未使用的模块,并更新相关依赖项。
This commit is contained in:
iven
2026-03-27 07:36:03 +08:00
parent 4b08804aa9
commit 0d4fa96b82
226 changed files with 7288 additions and 5788 deletions

View File

@@ -4,13 +4,13 @@
### 1.1 核心发现
基于 `docs/openclaw-deep-dive.md` 的目标与实际代码的对比:
基于 `docs/zclaw-deep-dive.md` 的目标与实际代码的对比:
| 模块 | 目标状态 | 实际状态 | 差距程度 |
|------|----------|----------|----------|
| **Gateway 连接** | 设备认证 + Challenge 签名 | ✅ 完整实现 | 无差距 |
| **分身系统** | 映射到 OpenClaw `agents.list` | ⚠️ 独立存储在 `zclaw-data.json` | **严重** |
| **设置页** | OpenClaw Runtime 配置面板 | ⚠️ 大部分是前端本地状态 | **严重** |
| **分身系统** | 映射到 ZCLAW `agents.list` | ⚠️ 独立存储在 `zclaw-data.json` | **严重** |
| **设置页** | ZCLAW Runtime 配置面板 | ⚠️ 大部分是前端本地状态 | **严重** |
| **右侧面板** | 真实 Agent 身份与状态 | ⚠️ 混合真实数据与硬编码值 | **中等** |
### 1.2 关键差距详解
@@ -27,21 +27,21 @@
│ ❌ 无同步
┌─────────────────────────────────────────────────────────────┐
OpenClaw agents.list (openclaw.json) │
ZCLAW agents.list (zclaw.json) │
│ 只有: [{ id: "main", groupChat: {...} }] │
└─────────────────────────────────────────────────────────────┘
```
**后果**
- 所有分身实际共用同一个 `main` Agent
- 聊天时不传递 `agentId`OpenClaw 不知道当前是哪个分身
- 聊天时不传递 `agentId`ZCLAW 不知道当前是哪个分身
- Bootstrap 文件IDENTITY.md, SOUL.md 等)生成了但未被运行时使用
#### 差距 2设置页是"假状态"
| 设置页 | 当前实现 | 应该实现 |
|--------|----------|----------|
| 模型选择 | 存在 `chatStore.currentModel`(前端状态) | 调用 `config.patch` 修改 OpenClaw 配置 |
| 模型选择 | 存在 `chatStore.currentModel`(前端状态) | 调用 `config.patch` 修改 ZCLAW 配置 |
| MCP 服务 | 存 `quickConfig`,部分同步到 Gateway | 管理 `plugins.load.paths` |
| 技能目录 | 存 `quickConfig` | 管理 `skills.load.extraDirs` |
| IM 频道 | 存 `quickConfig`,只显示状态 | 管理 `channels.*` 配置 |
@@ -49,7 +49,7 @@
| 隐私 | 存 `quickConfig` | 管理 telemetry/优化计划 |
**缺失的 RPC 方法**
- `config.get` - 读取 OpenClaw 配置
- `config.get` - 读取 ZCLAW 配置
- `config.patch` - 修改配置
- `config.apply` - 热更新配置
@@ -68,16 +68,16 @@ const defaultUserName = '用户7141'; // 假用户名
### 2.1 架构层面的偏差
**文档期望**
> ZClaw 应该是 OpenClaw Runtime 的控制界面
> ZClaw 应该是 ZCLAW Runtime 的控制界面
**实际实现**
> ZClaw 是一个有自己数据模型的前端应用,与 OpenClaw 是松耦合
> ZClaw 是一个有自己数据模型的前端应用,与 ZCLAW 是松耦合
### 2.2 数据模型的分裂
```
OpenClaw 数据模型:
openclaw.json → agents.list → Agent workspace → Bootstrap files
ZCLAW 数据模型:
zclaw.json → agents.list → Agent workspace → Bootstrap files
ZClaw 数据模型:
zclaw-data.json → clones[] → (独立的) workspace 路径
@@ -85,21 +85,21 @@ ZClaw 数据模型:
两套数据模型没有桥接,导致:
1. 分身不能路由到正确的 Agent
2. 设置不能影响 OpenClaw 行为
2. 设置不能影响 ZCLAW 行为
3. Bootstrap 文件与运行时脱节
---
## 三、头脑风暴:改进方案
### 3.1 方案 A完全对齐 OpenClaw(推荐)
### 3.1 方案 A完全对齐 ZCLAW(推荐)
**核心思路**:让 ZClaw 分身直接映射到 OpenClaw Agent
**核心思路**:让 ZClaw 分身直接映射到 ZCLAW Agent
```
改进后架构:
┌─────────────────────────────────────────────────────────────┐
│ ZClaw 分身 = OpenClaw Agent │
│ ZClaw 分身 = ZCLAW Agent │
│ │
│ clone_1 ↔ agents.list[0] (id: "programmer") │
│ clone_2 ↔ agents.list[1] (id: "designer") │
@@ -110,9 +110,9 @@ ZClaw 数据模型:
```
**优点**
- 符合 `openclaw-deep-dive.md` 的设计哲学
- 符合 `zclaw-deep-dive.md` 的设计哲学
- 分身真正有独立人格、记忆、工具权限
- 设置页可以直接操作 OpenClaw 配置
- 设置页可以直接操作 ZCLAW 配置
**缺点**
- 改动较大,需要修改多个模块
@@ -129,7 +129,7 @@ ZClaw 数据模型:
│ zclaw-data.json → clones[] │
│ │ │
│ ▼ (单向同步) │
openclaw.json → agents.list (从分身生成) │
zclaw.json → agents.list (从分身生成) │
└─────────────────────────────────────────────────────────────┘
```
@@ -139,13 +139,13 @@ ZClaw 数据模型:
**缺点**
- 数据冗余,需要维护同步
- 不符合 OpenClaw 的设计哲学
- 不符合 ZCLAW 的设计哲学
### 3.3 方案 C混合模式
**核心思路**
- 简单分身:共用 `main` Agent通过 Bootstrap 文件区分
- 高级分身:映射到独立 OpenClaw Agent
- 高级分身:映射到独立 ZCLAW Agent
---
@@ -153,12 +153,12 @@ ZClaw 数据模型:
### P0让分身真正工作最小可行
**目标**:创建分身时同步到 OpenClaw `agents.list`,聊天时传递 `agentId`
**目标**:创建分身时同步到 ZCLAW `agents.list`,聊天时传递 `agentId`
**关键修改**
1. **`plugins/zclaw-ui/index.ts`**
- `createClone` 时调用 OpenClaw API 添加到 `agents.list`
- `createClone` 时调用 ZCLAW API 添加到 `agents.list`
- `deleteClone` 时从 `agents.list` 移除
- 新增 `zclaw.agents.sync` 方法
@@ -172,17 +172,17 @@ ZClaw 数据模型:
- `sendMessage` 时传递 `currentAgent.id` 作为 `agentId`
4. **新增 Gateway RPC**
- `zclaw.config.get` - 读取 OpenClaw 配置
- `zclaw.config.get` - 读取 ZCLAW 配置
- `zclaw.config.patch` - 修改配置
**验收标准**
- [ ] 创建分身后,`openclaw.json` 的 `agents.list` 包含新 Agent
- [ ] 创建分身后,`zclaw.json` 的 `agents.list` 包含新 Agent
- [ ] 切换分身后,聊天请求携带正确的 `agentId`
- [ ] 每个分身有独立的对话上下文
### P1设置页 Runtime 化
**目标**:设置修改直接影响 OpenClaw Runtime
**目标**:设置修改直接影响 ZCLAW Runtime
**关键修改**
@@ -201,7 +201,7 @@ ZClaw 数据模型:
- 配置变更后显示"需要重启"提示(如需要)
**验收标准**
- [ ] 模型选择后,`openclaw.json` 的 `agents.defaults.model` 更新
- [ ] 模型选择后,`zclaw.json` 的 `agents.defaults.model` 更新
- [ ] 添加技能目录后,`skills.load.extraDirs` 更新
- [ ] Gateway 重启后配置生效
@@ -242,7 +242,7 @@ ZClaw 数据模型:
| `desktop/src/components/CloneManager.tsx` | 显示同步状态 |
| `desktop/src/components/RightPanel.tsx` | 显示真实 Agent 数据 |
| `desktop/src/components/Settings/*.tsx` | 改造为 Runtime 配置面板 |
| `config/openclaw.default.json` | 更新默认 Agent 模板 |
| `config/zclaw.default.json` | 更新默认 Agent 模板 |
---
@@ -251,7 +251,7 @@ ZClaw 数据模型:
| 风险 | 缓解措施 |
|------|----------|
| 数据迁移复杂 | 提供迁移脚本,保留 `zclaw-data.json` 作为备份 |
| OpenClaw 版本兼容 | 检测 OpenClaw 版本,低版本降级到兼容模式 |
| ZCLAW 版本兼容 | 检测 ZCLAW 版本,低版本降级到兼容模式 |
| 破坏现有功能 | 灰度发布,支持回滚 |
| 性能下降 | 懒加载 Agent 配置,缓存 RPC 结果 |
@@ -259,12 +259,12 @@ ZClaw 数据模型:
## 七、确认的方案
**选择:方案 A - 完全对齐 OpenClaw**
**选择:方案 A - 完全对齐 ZCLAW**
理由:
1. 符合 `openclaw-deep-dive.md` 的设计哲学
1. 符合 `zclaw-deep-dive.md` 的设计哲学
2. 分身真正有独立人格、记忆、工具权限
3. 设置页可以直接操作 OpenClaw 配置
3. 设置页可以直接操作 ZCLAW 配置
4. 长期维护成本最低
---
@@ -277,7 +277,7 @@ ZClaw 数据模型:
**修改点**:
1. `createClone` 方法增加:
- 调用 OpenClaw 内部 API 将分身添加到 `agents.list`
- 调用 ZCLAW 内部 API 将分身添加到 `agents.list`
- 设置 `agentId` 字段关联分身与 Agent
2. `deleteClone` 方法增加:
- 从 `agents.list` 移除对应 Agent
@@ -315,7 +315,7 @@ ZClaw 数据模型:
**文件**: `desktop/src/lib/gateway-client.ts` + `plugins/zclaw-ui/index.ts`
**新增方法**:
- `zclaw.config.get` - 读取 OpenClaw 配置
- `zclaw.config.get` - 读取 ZCLAW 配置
- `zclaw.config.patch` - 修改配置(不重启)
- `zclaw.config.apply` - 热更新配置(如需重启)
@@ -335,7 +335,7 @@ ZClaw 数据模型:
### P0 完成标准
- [ ] 创建分身后,`~/.openclaw/openclaw.json` 的 `agents.list` 包含新 Agent
- [ ] 创建分身后,`~/.zclaw/zclaw.json` 的 `agents.list` 包含新 Agent
- [ ] 删除分身后,对应 Agent 从 `agents.list` 移除
- [ ] 切换分身后,聊天请求携带正确的 `agentId`
- [ ] 每个分身有独立的对话上下文(不串聊)