16 KiB
16 KiB
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 协议通信:
连接握手
// 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: 基础连通 (当前优先)
- 安装 OpenClaw 并验证 Gateway 可运行
- 创建 Tauri 项目结构 (保留现有 desktop/)
- 实现 Gateway 子进程管理 (Rust sidecar)
- 实现 WebSocket 客户端连接
- 前端显示 Gateway 状态 + 基础聊天
Phase 2: 自定义插件
- 实现
@zclaw/chinese-modelsProvider Plugin (智谱GLM/Qwen/Kimi) - 实现
@zclaw/feishuChannel Plugin - 注册插件到 OpenClaw Gateway
Phase 3: 完整 UI
- 实现设置页面体系 (对标 AutoClaw 10 个页面)
- 实现分身管理 UI
- 实现 Skills 管理 UI
- 实现 MCP 服务管理 UI
Phase 4: 高级功能
- 微信/QQ Channel Plugin
- 自定义 Skills 开发
- 工作区管理
- 打包发布
七、与之前代码的关系
可复用
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 多 Agentsrc/core/memory/→ OpenClaw Memory Plugin 自带src/core/proactive/→ OpenClaw Heartbeat Engine 自带src/im/gateway.ts→ OpenClaw Channel 系统自带src/app.ts→ OpenClaw Gateway 就是 appsrc/api/→ 通过 WebSocket + Tauri Commands 替代src/db/→ OpenClaw 自带 SQLitesrc/config/→ OpenClaw 配置系统替代
本架构设计基于对 OpenClaw 官方文档 (docs.openclaw.ai) 的深度研究, 参考 AutoClaw v0.2.12 的 13 张界面截图进行功能对标。