# ZCLAW 开发进度报告
**日期**: 2026-03-11 23:15
**状态**: ✅ v2 架构重构完成 — 基于 OpenClaw 定制化
---
## 🔄 v2 架构重构 (2026-03-11)
### 背景
通过深度研究 QClaw (腾讯)、AutoClaw (智谱 v0.2.12)、OpenClaw (GitHub 28万+ Stars),
发现 v1 代码偏离初衷约 75% — 自创架构而非基于 OpenClaw。v2 进行了完整的架构重构。
详见: [偏离分析报告](docs/deviation-analysis.md) | [v2 架构设计](docs/architecture-v2.md)
### ✅ 新增: OpenClaw Gateway 集成层 (src/gateway/)
- **manager.ts**: Gateway 子进程管理 — 启动/停止/健康检查/自动重启
- **ws-client.ts**: Node.js WebSocket 客户端 — 完整 Gateway Protocol v3 握手/请求/事件
- **index.ts**: 统一导出
### ✅ 新增: 自定义 OpenClaw 插件 (plugins/)
#### @zclaw/chinese-models — 中文模型 Provider
- 智谱 GLM (glm-5, glm-4.7, glm-4-plus, glm-4-flash)
- 通义千问 Qwen (qwen3.5-plus, qwen-max, qwen-vl-max)
- Kimi 月之暗面 (kimi-k2.5, moonshot-v1-128k)
- MiniMax (minimax-m2.5, abab6.5s-chat)
#### @zclaw/feishu — 飞书 Channel Plugin
- OAuth tenant_access_token 自动管理
- 发送文本/富文本消息
- 多账户支持
- 自定义 RPC: feishu.status
#### @zclaw/ui — UI 扩展 RPC
- zclaw.clones.list/create/update/delete — 分身管理
- zclaw.stats.usage/sessions — 用量统计 (读取 JSONL sessions)
- zclaw.config.quick — 快速配置
- zclaw.workspace.info — 工作区信息
- zclaw.plugins.status — 插件状态
### ✅ 新增: 自定义 Skills (skills/)
- **chinese-writing** — 中文写作助手 (SKILL.md)
- **feishu-docs** — 飞书文档操作 (SKILL.md)
### ✅ 新增: OpenClaw 配置模板 (config/)
- **openclaw.default.json** — 预配置中文模型 + 插件路径 + Skills 目录
- **SOUL.md** — ZCLAW 人格定义
- **AGENTS.md** — Agent 操作规范
- **IDENTITY.md** — Agent 身份 (🦞 小龙虾)
- **USER.md** — 默认用户偏好
### ✅ 新增: 前端 Gateway 客户端 (desktop/src/)
- **lib/gateway-client.ts** — 浏览器 WebSocket 客户端 (Gateway Protocol v3)
- **store/gatewayStore.ts** — Zustand 状态管理 (连接/分身/统计)
### ✅ 新增: 设置脚本 (scripts/)
- **setup.ts** — 首次设置: 检测 OpenClaw → 复制配置 → 注册插件 → 创建工作区
### ✅ 编译验证
- TypeScript: **0 errors** (新架构代码)
- 依赖精简: 移除 bullmq/ioredis/better-sqlite3/koishi, 保留 ws + zod
---
## 📊 代码统计 (v2)
| 类别 | 文件数 | 说明 |
|------|--------|------|
| Gateway 层 | 3 | manager.ts, ws-client.ts, index.ts |
| 插件 | 6 | 3 plugins × (index.ts + plugin.json) |
| Skills | 2 | 2 × SKILL.md |
| 配置 | 5 | 1 JSON + 4 MD |
| 前端新增 | 2 | gateway-client.ts, gatewayStore.ts |
| 脚本 | 1 | setup.ts |
| **合计新增** | **19** | v2 新架构文件 |
---
## ✅ Phase 2: 前端 Settings 页面体系 (2026-03-11 23:26)
### Settings 页面 (对标 AutoClaw 10 个页面)
- **SettingsLayout.tsx** — 左侧导航 + 右侧内容的双栏布局
- **General.tsx** — 账号安全 + Gateway 连接状态 + 主题/自启/工具调用
- **UsageStats.tsx** — 会话数/消息数/Token 汇总 + 按模型进度条
- **ModelsAPI.tsx** — 内置/自定义模型列表 + Gateway URL 配置
- **MCPServices.tsx** — MCP 服务列表 + 启停 + 快速添加模板
- **Skills.tsx** — 技能列表 + 额外目录配置 + 筛选标签
- **IMChannels.tsx** — IM 频道管理 + 快速添加飞书
- **Workspace.tsx** — 项目目录 + 文件访问限制 + 自动保存 + 文件监听
- **Privacy.tsx** — 本地数据路径 + 优化计划开关 + 备案信息
- **About.tsx** — 版本信息 + 检查更新 + 更新日志
### App.tsx 重构
- main / settings 视图切换
- Sidebar ⚙ 按钮 → onOpenSettings → SettingsLayout
- SettingsLayout ← 返回 → main view
### 构建修复
- 修复 RightPanel.tsx 未使用 CheckSquare import
- 修复 Tailwind v4: 安装 @tailwindcss/vite, 替换 @tailwind → @import "tailwindcss"
- 修复根 package.json UTF-8 BOM 导致 PostCSS config 解析失败
- **Vite build: ✅ 成功** (1761 modules, 239 KB JS + 23 KB CSS)
- **TypeScript: ✅ 0 errors** (backend + frontend 双项目)
---
## ✅ Phase 3: 聊天对接 + 分身管理 (2026-03-11 23:34)
### chatStore 重构 → Gateway WebSocket
- **sendMessage()** — 通过 Gateway WS 发送 `agent` RPC, 创建流式占位消息
- **initStreamListener()** — 监听 `agent` 事件, 实时追加 assistant delta / tool call / lifecycle
- 支持 session key 连续对话
- Gateway 未连接时优雅降级 (错误显示在气泡中)
### ChatArea 重构
- **流式输出** — assistant 消息带闪烁光标, 实时追加 delta
- **工具调用展示** — `tool` 类型消息, 显示工具名 + 输入 + 输出 (Terminal 图标)
- **模型选择器** — 下拉菜单切换 glm-5 / qwen3.5-plus / kimi-k2.5 / minimax-m2.5
- **连接状态** — 顶部显示 Gateway 连接状态 (绿点/灰点)
- **自动滚动** — 新消息自动滚到底部
- 输入区: 流式回复时禁用, Enter 发送, Shift+Enter 换行
### 分身管理 UI (CloneManager)
- **CloneManager.tsx** — 完整 CRUD: 创建表单 (名称/角色/场景标签) + 列表 + 悬浮删除
- **集成到 Sidebar** — 分身/IM 频道/定时任务 三标签, 分身标签使用 CloneManager
- **Sidebar 重构** — Gateway 连接状态显示在用户区, IM 频道和定时任务占位页
### 编译验证
- **TypeScript: ✅ 0 errors** (backend + frontend)
- **Vite build: ✅ 成功** (1762 modules, 247 KB JS + 24 KB CSS)
---
## ✅ Phase 3.5: 前端质量提升 (2026-03-11 23:42)
### Gateway 自动连接
- **App.tsx** — 启动时自动尝试连接 Gateway (silent fail,不阻塞 UI)
- 导入 `useGatewayStore`,useEffect 在 `disconnected` 状态下触发 `connect()`
### RightPanel 重写 → 实时数据
- **RightPanel.tsx** — 从全硬编码改为从 gatewayStore/chatStore 读取真实数据
- Gateway 连接状态 (绿色/灰色卡片, 地址/版本/当前模型)
- 手动重连按钮 (Gateway 未连接时显示)
- 当前会话统计 (用户消息/助手回复/工具调用/总数)
- 分身列表 (从 Gateway 加载)
- 用量统计 (总会话/消息/Token)
- 插件状态 (名称 + 运行状态)
- 系统信息 (版本/协议/平台)
- 刷新按钮 (一键重新加载所有数据)
### ChatArea 升级
- **多行输入** — `` → `