# ZCLAW v2 架构设计 — 基于 OpenClaw 定制化

**日期**: 2026-03-11  
**定位**: 像 AutoClaw 一样，对 OpenClaw 进行定制化封装，打造 Tauri 桌面版

---

## 一、架构总览

```
┌─────────────────────────────────────────────────────────┐
│                    ZCLAW (Tauri App)                     │
│  ┌──────────────────────────────────────────────────┐   │
│  │              React 19 + TailwindCSS               │   │
│  │  ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────┐  │   │
│  │  │ 分身Tab │ │IM频道  │ │定时任务│ │ 设置页面 │  │   │
│  │  └────────┘ └────────┘ └────────┘ └──────────┘  │   │
│  │  ┌──────────────────────────────────────────┐    │   │
│  │  │            聊天区域 + 工具调用展示          │    │   │
│  │  └──────────────────────────────────────────┘    │   │
│  └──────────────────────────────────────────────────┘   │
│                         │ Tauri Commands                 │
│  ┌──────────────────────────────────────────────────┐   │
│  │              Rust Sidecar / Bridge                │   │
│  │  • 管理 OpenClaw Gateway 子进程生命周期           │   │
│  │  • WebSocket 客户端连接 Gateway                   │   │
│  │  • 转发 Gateway 事件到前端                        │   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
                         │ WebSocket (ws://127.0.0.1:18789)
┌─────────────────────────────────────────────────────────┐
│              OpenClaw Gateway (Node.js daemon)           │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐  │
│  │ Agent    │ │ Skills   │ │ Sessions │ │ Heartbeat │  │
│  │ Runtime  │ │ System   │ │ Manager  │ │ Engine    │  │
│  └──────────┘ └──────────┘ └──────────┘ └───────────┘  │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐  │
│  │ Tools    │ │ Memory   │ │ MCP      │ │ Provider  │  │
│  │ (bash/   │ │ (SQLite/ │ │ Server   │ │ (models)  │  │
│  │  file/   │ │  LanceDB)│ │          │ │           │  │
│  │  browse) │ │          │ │          │ │           │  │
│  └──────────┘ └──────────┘ └──────────┘ └───────────┘  │
│  ┌──────────────────────────────────────────────────┐   │
│  │              Channel Plugins (IM 渠道)             │   │
│  │  WhatsApp │ Telegram │ Discord │ Slack │ ...      │   │
│  └──────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────┐   │
│  │           ZCLAW Custom Plugins (我们的)            │   │
│  │  @zclaw/feishu │ @zclaw/wechat │ @zclaw/qq       │   │
│  │  @zclaw/chinese-models (GLM/Qwen/Kimi/MiniMax)   │   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
                         │
              ┌──────────┴──────────┐
              │  Bootstrap Files    │
              │  AGENTS.md          │
              │  SOUL.md            │
              │  IDENTITY.md        │
              │  USER.md            │
              │  TOOLS.md           │
              └─────────────────────┘
```

---

## 二、核心设计决策

### 1. OpenClaw 作为执行引擎

**不重新发明轮子**。OpenClaw 已经实现了：
- ✅ 真实工具执行 (bash/file/browser)
- ✅ Skills 系统 (SKILL.md + 渐进式披露)
- ✅ MCP 协议支持
- ✅ 心跳引擎 (Heartbeat)
- ✅ 持久记忆 (SQLite + LanceDB)
- ✅ Agent 运行时 (Session/Queue/Streaming)
- ✅ 10+ IM 渠道适配器
- ✅ 插件体系 (Channel/Tool/Memory/Provider)

我们只需要：**包装 + 定制 + 中文化**

### 2. Tauri 作为桌面壳

AutoClaw 用的是自己的桌面框架，QClaw 用 Electron。我们用 **Tauri 2.0** (Rust + React)：
- 更小体积 (~10MB vs Electron ~150MB)
- 更好性能 (Rust native)
- 系统级集成能力
- 管理 OpenClaw Gateway 子进程

### 3. 自定义插件做差异化

通过 OpenClaw 的 Plugin API 添加中国特色功能：

| 插件 | 功能 |
|------|------|
| `@zclaw/feishu` | 飞书 Channel Plugin |
| `@zclaw/wechat` | 微信 Channel Plugin (通过 WeCom API 或 itchat 桥接) |
| `@zclaw/qq` | QQ Channel Plugin |
| `@zclaw/chinese-models` | 中文模型 Provider (智谱GLM/通义千问/Kimi/MiniMax) |
| `@zclaw/zclaw-ui` | 自定义 Gateway RPC 方法供 Tauri UI 调用 |

---

## 三、项目结构 (重构后)

```
ZClaw/
├── desktop/                          # Tauri 2.0 桌面应用
│   ├── src-tauri/                    # Rust 后端
│   │   ├── src/
│   │   │   ├── main.rs              # Tauri 入口
│   │   │   ├── gateway.rs           # OpenClaw Gateway 子进程管理
│   │   │   ├── ws_client.rs         # WebSocket 客户端
│   │   │   └── commands.rs          # Tauri Commands (前端调用)
│   │   ├── Cargo.toml
│   │   └── tauri.conf.json
│   ├── src/                          # React 前端
│   │   ├── App.tsx
│   │   ├── main.tsx
│   │   ├── index.css
│   │   ├── components/
│   │   │   ├── Sidebar.tsx           # 左侧栏 (分身/IM/定时)
│   │   │   ├── ChatArea.tsx          # 聊天区域 + 工具调用展示
│   │   │   ├── RightPanel.tsx        # 右侧面板
│   │   │   └── Settings/             # 设置页面 (对标 AutoClaw)
│   │   │       ├── General.tsx       # 通用设置
│   │   │       ├── UsageStats.tsx    # 用量统计
│   │   │       ├── ModelsAPI.tsx     # 模型与 API
│   │   │       ├── MCPServices.tsx   # MCP 服务管理
│   │   │       ├── Skills.tsx        # 技能管理
│   │   │       ├── IMChannels.tsx    # IM 频道管理
│   │   │       ├── Workspace.tsx     # 工作区设置
│   │   │       ├── Privacy.tsx       # 数据与隐私
│   │   │       └── About.tsx         # 关于
│   │   ├── store/
│   │   │   ├── chatStore.ts          # 聊天状态
│   │   │   ├── gatewayStore.ts       # Gateway 连接状态
│   │   │   └── settingsStore.ts      # 设置状态
│   │   └── lib/
│   │       ├── gateway-client.ts     # WebSocket 客户端封装
│   │       └── protocol.ts           # Gateway 协议类型定义
│   └── package.json
│
├── plugins/                          # ZCLAW 自定义 OpenClaw 插件
│   ├── zclaw-feishu/                 # 飞书频道插件
│   │   ├── index.ts
│   │   ├── plugin.json               # 插件清单
│   │   └── README.md
│   ├── zclaw-wechat/                 # 微信频道插件
│   │   ├── index.ts
│   │   └── plugin.json
│   ├── zclaw-qq/                     # QQ 频道插件
│   │   ├── index.ts
│   │   └── plugin.json
│   ├── zclaw-chinese-models/         # 中文模型 Provider 插件
│   │   ├── index.ts
│   │   ├── providers/
│   │   │   ├── zhipu.ts              # 智谱 GLM
│   │   │   ├── qwen.ts              # 通义千问
│   │   │   ├── kimi.ts              # Moonshot Kimi
│   │   │   └── minimax.ts           # MiniMax
│   │   └── plugin.json
│   └── zclaw-ui/                     # UI 扩展 RPC 插件
│       ├── index.ts
│       └── plugin.json
│
├── skills/                           # ZCLAW 自定义 Skills
│   ├── chinese-writing/              # 中文写作技能
│   │   └── SKILL.md
│   ├── weibo-automation/             # 微博自动化技能
│   │   └── SKILL.md
│   └── feishu-docs/                  # 飞书文档操作技能
│       └── SKILL.md
│
├── config/                           # ZCLAW 默认配置
│   ├── openclaw.default.json         # 预设的 OpenClaw 配置
│   ├── SOUL.md                       # 默认人格
│   ├── AGENTS.md                     # 默认 Agent 指令
│   ├── IDENTITY.md                   # 默认身份
│   └── USER.md                       # 默认用户配置
│
├── scripts/                          # 构建/安装脚本
│   ├── setup.ts                      # 首次设置脚本
│   ├── install-openclaw.ts           # OpenClaw 安装检测
│   └── register-plugins.ts           # 注册自定义插件
│
├── docs/
│   ├── architecture-v2.md            # 本文件
│   ├── deviation-analysis.md         # 偏离分析报告
│   ├── DEVELOPMENT.md
│   └── autoclaw界面/                 # AutoClaw 参考截图
│
├── package.json                      # 根项目管理
├── tsconfig.json
└── README.md
```

---

## 四、与 AutoClaw 功能对标

### AutoClaw 设置页面 → ZCLAW 实现方式

| AutoClaw 功能 | ZCLAW 实现 |
|---|---|
| **通用** (账号/主题/开机启动/工具调用显示) | Tauri 窗口设置 + Gateway config |
| **用量统计** (会话/消息/Token 按模型分) | 读取 OpenClaw sessions JSONL + 统计 |
| **积分详情** | 自定义积分系统 (可选) |
| **模型与API** (内置+自定义模型+Gateway URL) | `openclaw config` + Provider Plugin |
| **MCP 服务** (File System/Web Fetch/+添加) | 读取 OpenClaw MCP 配置 + UI 管理 |
| **技能** (SKILL.md 管理/额外目录) | 读取 Skills 目录 + UI 管理 |
| **IM 频道** (添加/管理/快速添加飞书) | Channel Plugin 配置 UI |
| **工作区** (项目目录/文件限制/上下文保存/文件监听) | `agents.defaults.workspace` + sandbox 配置 |
| **数据与隐私** (本地路径/优化计划) | OpenClaw 数据目录 + 隐私配置 |
| **提交反馈** | 自定义反馈表单 |
| **关于** (版本/更新) | 显示 ZCLAW + OpenClaw 版本 |

### AutoClaw 主界面 → ZCLAW 对标

| 功能 | 实现 |
|---|---|
| **左侧 - 分身 Tab** | 通过 `agents.list` 配置管理多个 Agent |
| **左侧 - IM 频道 Tab** | 通过 `channels.*` 配置显示已连接频道 |
| **左侧 - 定时任务 Tab** | 通过 heartbeat + cron 事件显示 |
| **中间 - 聊天区域** | WebSocket 订阅 `agent` stream 事件 |
| **中间 - 模型选择器** | 通过 `agents.defaults.models` 配置 |
| **右侧 - 代码/文件面板** | 显示 Agent 工具调用结果 (file/bash output) |
| **快速配置弹窗** | 修改 IDENTITY.md + SOUL.md + USER.md |

---

## 五、WebSocket 通信协议

ZCLAW Tauri 客户端通过标准 OpenClaw Gateway 协议通信：

### 连接握手
```json
// 1. 服务器发送 challenge
{"type": "event", "event": "connect.challenge", "payload": {"nonce": "...", "ts": 1737264000000}}

// 2. 客户端发送 connect
{"type": "req", "id": "1", "method": "connect", "params": {
  "minProtocol": 3, "maxProtocol": 3,
  "client": {"id": "zclaw-tauri", "version": "0.1.0", "platform": "windows", "mode": "operator"},
  "role": "operator",
  "scopes": ["operator.read", "operator.write"],
  "auth": {"token": "..."}
}}

// 3. 服务器回复 hello-ok
{"type": "res", "id": "1", "ok": true, "payload": {"type": "hello-ok", "protocol": 3}}
```

### 核心 RPC 方法
```
agent          → 发送消息给 Agent (触发 Agent Loop)
agent.wait     → 等待 Agent 运行完成
send           → 通过 IM 频道发送消息
health         → 健康检查
status         → 获取 Gateway 状态
system-presence → 系统状态
```

### 事件订阅
```
agent    → Agent 流式输出 (assistant/tool/lifecycle)
chat     → 聊天消息
presence → 在线状态
health   → 健康状态
heartbeat → 心跳
cron     → 定时任务
tick     → 定时心跳
```

---

## 六、开发分期

### Phase 1: 基础连通 (当前优先)
1. 安装 OpenClaw 并验证 Gateway 可运行
2. 创建 Tauri 项目结构 (保留现有 desktop/)
3. 实现 Gateway 子进程管理 (Rust sidecar)
4. 实现 WebSocket 客户端连接
5. 前端显示 Gateway 状态 + 基础聊天

### Phase 2: 自定义插件
1. 实现 `@zclaw/chinese-models` Provider Plugin (智谱GLM/Qwen/Kimi)
2. 实现 `@zclaw/feishu` Channel Plugin
3. 注册插件到 OpenClaw Gateway

### Phase 3: 完整 UI
1. 实现设置页面体系 (对标 AutoClaw 10 个页面)
2. 实现分身管理 UI
3. 实现 Skills 管理 UI
4. 实现 MCP 服务管理 UI

### Phase 4: 高级功能
1. 微信/QQ Channel Plugin
2. 自定义 Skills 开发
3. 工作区管理
4. 打包发布

---

## 七、与之前代码的关系

### 可复用
- `desktop/` 前端组件 (需大幅扩展)
- `plugins/zclaw-chinese-models/` 可复用之前的 AI Provider 代码 (zhipu.ts/openai.ts)
- `plugins/zclaw-feishu/` 可复用之前的飞书适配器代码

### 废弃
- `src/core/remote-execution/` → OpenClaw 自带工具执行
- `src/core/task-orchestration/` → OpenClaw Agent Loop 自带
- `src/core/multi-agent/` → 改为 OpenClaw agents.list 多 Agent
- `src/core/memory/` → OpenClaw Memory Plugin 自带
- `src/core/proactive/` → OpenClaw Heartbeat Engine 自带
- `src/im/gateway.ts` → OpenClaw Channel 系统自带
- `src/app.ts` → OpenClaw Gateway 就是 app
- `src/api/` → 通过 WebSocket + Tauri Commands 替代
- `src/db/` → OpenClaw 自带 SQLite
- `src/config/` → OpenClaw 配置系统替代

---

*本架构设计基于对 OpenClaw 官方文档 (docs.openclaw.ai) 的深度研究，
参考 AutoClaw v0.2.12 的 13 张界面截图进行功能对标。*
