Files
zclaw_openfang/docs/architecture-v2.md
2026-03-12 00:23:42 +08:00

328 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 张界面截图进行功能对标。*