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

@@ -1,31 +1,31 @@
# ZClaw: 从 OpenClaw 迁移到 OpenFang 可行性方案
# ZClaw: 从 ZCLAW 迁移到 ZCLAW 可行性方案
> **规划日期**: 2026-03-13
> **目标**: 制定从 OpenClaw 到 OpenFang 的渐进式迁移策略,实现平稳过渡
> **目标**: 制定从 ZCLAW 到 ZCLAW 的渐进式迁移策略,实现平稳过渡
---
## 一、背景与动机
### 1.1 当前架构 (OpenClaw)
### 1.1 当前架构 (ZCLAW)
```
┌─────────────────────────────────────────────────────────────────┐
│ ZClaw Desktop (当前) │
├─────────────────────────────────────────────────────────────────┤
│ React 19 UI → Zustand Store → GatewayClient → OpenClaw
│ React 19 UI → Zustand Store → GatewayClient → ZCLAW
│ 技术栈: Tauri 2.0 + TypeScript + Node.js Gateway │
│ 内存: >1GB | 启动: 2-5s | 安装: 500MB │
└─────────────────────────────────────────────────────────────────┘
```
### 1.2 目标架构 (OpenFang)
### 1.2 目标架构 (ZCLAW)
```
┌─────────────────────────────────────────────────────────────────┐
│ ZClaw Desktop (OpenFang) │
│ ZClaw Desktop (ZCLAW) │
├─────────────────────────────────────────────────────────────────┤
│ React 19 UI → Zustand Store → OpenFangClient → OpenFang
│ React 19 UI → Zustand Store → ZCLAWClient → ZCLAW
│ 技术栈: Tauri 2.0 + TypeScript + Rust Gateway │
│ 内存: ~40MB | 启动: 180ms | 安装: 32MB │
└─────────────────────────────────────────────────────────────────┘
@@ -33,7 +33,7 @@
### 1.3 迁移动机
| 维度 | OpenClaw | OpenFang | 提升 |
| 维度 | ZCLAW | ZCLAW | 提升 |
|------|----------|----------|------|
| **启动速度** | 5.98s | 180ms | **33x 更快** |
| **内存占用** | 394MB | 40MB | **90% 更少** |
@@ -48,7 +48,7 @@
### 2.1 协议差异
| 方面 | OpenClaw | OpenFang |
| 方面 | ZCLAW | ZCLAW |
|------|----------|----------|
| **WebSocket URL** | `ws://127.0.0.1:18789` | `ws://127.0.0.1:4200/ws` |
| **协议格式** | 自定义 JSON 帧 | 标准 JSON + gRPC |
@@ -56,15 +56,15 @@
### 2.2 配置差异
| 方面 | OpenClaw | OpenFang |
| 方面 | ZCLAW | ZCLAW |
|------|----------|----------|
| **配置目录** | `~/.openclaw/` | `~/.openfang/` |
| **配置目录** | `~/.zclaw/` | `~/.zclaw/` |
| **配置格式** | YAML/JSON | TOML |
| **插件系统** | TypeScript (`index.ts`) | SKILL.md + WASM |
### 2.3 API 差异
| 功能 | OpenClaw RPC | OpenFang API |
| 功能 | ZCLAW RPC | ZCLAW API |
|------|-------------|--------------|
| 发送消息 | `agent` | `chat` / `/api/chat` |
| 列出 Agent | `zclaw.clones.list` | `GET /api/agents` |
@@ -79,7 +79,7 @@
### 3.1 策略原则
1. **双版本并行**: 保持 OpenClaw 可用,同时开发 OpenFang
1. **双版本并行**: 保持 ZCLAW 可用,同时开发 ZCLAW
2. **适配层抽象**: 通过接口隔离后端差异
3. **功能对等优先**: 先保证核心功能,再添加新特性
4. **灰度发布**: Beta 测试验证后全面切换
@@ -108,18 +108,18 @@ Phase 7 (2周): 测试验证 ─────────────────
**关键任务**:
1. 创建 `GatewayBackend` 接口抽象
2. 创建 `OpenFangClient` 骨架
2. 创建 `ZCLAWClient` 骨架
3. 配置双后端切换机制
4. 设置 OpenFang 开发环境
4. 设置 ZCLAW 开发环境
**交付物**:
- `desktop/src/lib/types/gateway-backend.ts` - 接口定义
- `desktop/src/lib/openfang-client.ts` - 客户端骨架
- `desktop/src/lib/zclaw-client.ts` - 客户端骨架
- `desktop/src/lib/backend-factory.ts` - 后端工厂
### Phase 2: 客户端实现 (Week 3-4)
**目标**: 完整实现 OpenFang 客户端
**目标**: 完整实现 ZCLAW 客户端
**关键文件**: [gateway-client.ts](desktop/src/lib/gateway-client.ts)
@@ -134,20 +134,20 @@ interface GatewayBackend {
// ... 其他方法
}
// 2. OpenClaw 实现 (现有代码重构)
class OpenClawBackend implements GatewayBackend { ... }
// 2. ZCLAW 实现 (现有代码重构)
class ZCLAWBackend implements GatewayBackend { ... }
// 3. OpenFang 实现 (新建)
class OpenFangBackend implements GatewayBackend {
// 3. ZCLAW 实现 (新建)
class ZCLAWBackend implements GatewayBackend {
private ws: WebSocket;
private url = 'ws://127.0.0.1:4200/ws';
async connect(): Promise<void> {
// OpenFang 认证协议
// ZCLAW 认证协议
}
async chat(message: string, opts?: ChatOptions): Promise<{runId: string}> {
// OpenFang chat 格式
// ZCLAW chat 格式
}
}
```
@@ -162,8 +162,8 @@ class OpenFangBackend implements GatewayBackend {
```typescript
interface GatewayStore {
// 新增
backendType: 'openclaw' | 'openfang';
switchBackend(type: 'openclaw' | 'openfang'): void;
backendType: 'zclaw' | 'zclaw';
switchBackend(type: 'zclaw' | 'zclaw'): void;
// 修改 connect 方法
connect: async (url?, token?) => {
@@ -175,7 +175,7 @@ interface GatewayStore {
### Phase 4: 插件迁移 (Week 7-9)
**目标**: 迁移现有插件到 OpenFang 格式
**目标**: 迁移现有插件到 ZCLAW 格式
| 插件 | 当前格式 | 目标格式 | 复杂度 |
|------|----------|----------|--------|
@@ -187,11 +187,11 @@ interface GatewayStore {
```
plugins/
├── zclaw-chinese-models/
│ ├── openclaw.plugin.json → 删除
│ ├── zclaw.plugin.json → 删除
│ └── index.ts → 转换为 providers.toml
├── zclaw-feishu/
│ └── index.ts → 迁移到 OpenFang channels
│ └── index.ts → 迁移到 ZCLAW channels
└── zclaw-ui/
└── index.ts → 拆分为 REST 端点
@@ -199,30 +199,30 @@ plugins/
### Phase 5: Tauri 后端 (Week 10-11)
**目标**: 更新 Rust 后端支持 OpenFang
**目标**: 更新 Rust 后端支持 ZCLAW
**关键文件**: [lib.rs](desktop/src-tauri/src/lib.rs)
**修改内容**:
```rust
// 新增 OpenFang 命令
// 新增 ZCLAW 命令
#[tauri::command]
async fn openfang_status() -> Result<OpenFangStatus, String> { ... }
async fn zclaw_status() -> Result<ZCLAWStatus, String> { ... }
#[tauri::command]
async fn openfang_start() -> Result<(), String> { ... }
async fn zclaw_start() -> Result<(), String> { ... }
#[tauri::command]
async fn openfang_stop() -> Result<(), String> { ... }
async fn zclaw_stop() -> Result<(), String> { ... }
// 新增配置迁移命令
#[tauri::command]
async fn migrate_to_openfang() -> Result<MigrationResult, String> { ... }
async fn migrate_to_zclaw() -> Result<MigrationResult, String> { ... }
```
### Phase 6: UI 增强 (Week 12-14)
**目标**: 添加 OpenFang 特有的 UI 功能
**目标**: 添加 ZCLAW 特有的 UI 功能
**新增组件**:
1. `HandsPanel.tsx` - Hands 管理界面
@@ -232,7 +232,7 @@ async fn migrate_to_openfang() -> Result<MigrationResult, String> { ... }
**修改组件**:
1. `SettingsLayout.tsx` - 添加后端切换选项
2. `General.tsx` - 添加 OpenFang 配置项
2. `General.tsx` - 添加 ZCLAW 配置项
### Phase 7: 测试验证 (Week 15-16)
@@ -254,7 +254,7 @@ async fn migrate_to_openfang() -> Result<MigrationResult, String> { ... }
|------|------|----------|
| 协议不兼容 | 高 | 创建适配层,保持双后端 |
| 插件迁移复杂 | 高 | 分阶段迁移,保持 TypeScript 桥接 |
| OpenFang 不成熟 | 中 | 持续关注上游,建立社区联系 |
| ZCLAW 不成熟 | 中 | 持续关注上游,建立社区联系 |
| 配置格式差异 | 中 | 构建自动迁移工具 |
### 5.2 运营风险
@@ -272,11 +272,11 @@ async fn migrate_to_openfang() -> Result<MigrationResult, String> { ... }
const USE_OPENFANG = process.env.ZCLAW_USE_OPENFANG === 'true';
// localStorage 切换
const backendType = localStorage.getItem('zclaw-backend') || 'openclaw';
const backendType = localStorage.getItem('zclaw-backend') || 'zclaw';
// 一键回滚
function rollbackToOpenClaw() {
localStorage.setItem('zclaw-backend', 'openclaw');
function rollbackToZCLAW() {
localStorage.setItem('zclaw-backend', 'zclaw');
window.location.reload();
}
```
@@ -296,7 +296,7 @@ function rollbackToOpenClaw() {
- [ ] 使用统计
- [ ] 配置管理
**OpenFang 新特性**:
**ZCLAW 新特性**:
- [ ] Hand 触发 (Clip, Lead, Researcher 等)
- [ ] Workflow 执行
- [ ] 16 层安全验证
@@ -304,7 +304,7 @@ function rollbackToOpenClaw() {
### 6.2 性能基准
| 指标 | OpenClaw 基线 | OpenFang 目标 |
| 指标 | ZCLAW 基线 | ZCLAW 目标 |
|------|---------------|---------------|
| 冷启动 | 5.98s | < 500ms |
| 空闲内存 | 394MB | < 100MB |
@@ -317,13 +317,13 @@ function rollbackToOpenClaw() {
| 文件 | 修改类型 | 说明 |
|------|----------|------|
| [gateway-client.ts](desktop/src/lib/gateway-client.ts) | 重构 | 抽取接口创建 OpenFang 实现 |
| [gateway-client.ts](desktop/src/lib/gateway-client.ts) | 重构 | 抽取接口创建 ZCLAW 实现 |
| [gatewayStore.ts](desktop/src/store/gatewayStore.ts) | 修改 | 添加后端切换逻辑 |
| [chatStore.ts](desktop/src/store/chatStore.ts) | 修改 | 适配新事件格式 |
| [lib.rs](desktop/src-tauri/src/lib.rs) | 扩展 | 添加 OpenFang 管理命令 |
| [lib.rs](desktop/src-tauri/src/lib.rs) | 扩展 | 添加 ZCLAW 管理命令 |
| [zclaw-ui/index.ts](plugins/zclaw-ui/index.ts) | 迁移 | 转换为 REST API |
| [zclaw-chinese-models/index.ts](plugins/zclaw-chinese-models/index.ts) | 迁移 | 转换为 TOML 配置 |
| [zclaw-feishu/index.ts](plugins/zclaw-feishu/index.ts) | 迁移 | 使用 OpenFang channel |
| [zclaw-feishu/index.ts](plugins/zclaw-feishu/index.ts) | 迁移 | 使用 ZCLAW channel |
---
@@ -331,11 +331,11 @@ function rollbackToOpenClaw() {
| 阶段 | 周期 | 开始 | 结束 | 关键交付物 |
|------|------|------|------|------------|
| Phase 1 | 2周 | Week 1 | Week 2 | OpenFangClient 骨架 |
| Phase 1 | 2周 | Week 1 | Week 2 | ZCLAWClient 骨架 |
| Phase 2 | 2周 | Week 3 | Week 4 | 完整客户端 + 流式处理 |
| Phase 3 | 2周 | Week 5 | Week 6 | 更新后的 stores |
| Phase 4 | 3周 | Week 7 | Week 9 | 迁移后的插件 |
| Phase 5 | 2周 | Week 10 | Week 11 | Rust OpenFang 支持 |
| Phase 5 | 2周 | Week 10 | Week 11 | Rust ZCLAW 支持 |
| Phase 6 | 3周 | Week 12 | Week 14 | Hands/Workflow UI |
| Phase 7 | 2周 | Week 15 | Week 16 | 测试套件验证报告 |
@@ -371,14 +371,14 @@ function rollbackToOpenClaw() {
| 追求差异化竞争 | **建议迁移** |
| 目标是内容创作者/销售 | **强烈建议迁移** |
| 资源有限 | 渐进评估 |
| 追求快速迭代 | 保持 OpenClaw关注 OpenFang |
| 追求快速迭代 | 保持 ZCLAW关注 ZCLAW |
### 9.3 下一步行动
1. **立即**: 确认迁移决策分配资源
2. **Week 1**: 创建 `GatewayBackend` 接口
3. **Week 2**: 搭建 OpenFang 开发环境
4. **Week 3-4**: 实现 `OpenFangClient`
3. **Week 2**: 搭建 ZCLAW 开发环境
4. **Week 3-4**: 实现 `ZCLAWClient`
---