# ZCLAW 系统全面代码分析与演化路线图 ## 上下文 (Context) **目的**: 对 ZCLAW 系统进行全面的代码层面现状分析,识别偏离点、潜在风险,制定分阶段演化路线图。 **当前状态**: - OpenFang v0.4.0 + ZClaw Desktop v0.2.0 - API 覆盖率: 93% (63/68 端点) - UI 完成度: 100% (30/30 组件) - Skills 定义: 68 个已完成 - Phase 1-8 已完成 **技术栈**: - React 19.1.0 + TypeScript 5.8.3 - Tauri 2.x (Rust 后端) - Zustand 5.0.11 (状态管理) - Vite 7.0.4 + Tailwind CSS 4.2.1 --- ## 一、代码结构分析 ### 1.1 项目结构 ``` ZClaw_openfang/ ├── desktop/ # Tauri 桌面应用 (主要代码) │ ├── src/ │ │ ├── components/ # React UI (46 组件) │ │ ├── store/ # Zustand stores (3 个) │ │ ├── lib/ # API 客户端和工具 │ │ ├── types/ # TypeScript 类型定义 │ │ └── App.tsx # 主应用组件 │ └── src-tauri/ # Rust 后端 ├── skills/ # 68 个 SKILL.md 定义 ├── hands/ # 7 个 HAND.toml 配置 ├── config/ # OpenFang TOML 配置 ├── tests/ # Vitest 测试 └── docs/ # 文档 ``` ### 1.2 核心数据流 ``` React UI → Zustand Store → GatewayClient → OpenFang Kernel (端口 50051) ↓ WebSocket (ws://127.0.0.1:50051/ws) REST API (http://127.0.0.1:50051/api/*) ``` --- ## 二、架构问题分析 ### 2.1 Store 层问题 (高优先级) | 问题 | 位置 | 影响 | |------|------|------| | **gatewayStore 巨型化** | `store/gatewayStore.ts` | 50+ 字段、40+ actions 在单一 store | | **持久化策略不一致** | 所有 stores | chatStore 用 Zustand persist,teamStore 手动 localStorage | | **Agent/Clone ID 混淆** | `chatStore.ts` | 前端 `clone_` 前缀与后端 ID 不一致 | ### 2.2 安全问题 (关键) | 问题 | 位置 | 严重程度 | |------|------|----------| | **Token 存储在 localStorage** | `gateway-client.ts:103` | HIGH | | **Ed25519 密钥无加密** | `gateway-client.ts:157-188` | HIGH | | **JSON.parse 无保护** | `HandParamsForm.tsx:409`, `WorkflowEditor.tsx:167` | HIGH | | **默认使用 ws://** | `gateway-client.ts:20-22` | MEDIUM | ### 2.3 代码质量问题 | 问题 | 数量 | 主要位置 | |------|------|----------| | **`any` 类型滥用** | 60+ 处 | `gatewayStore.ts` (~35), `gateway-client.ts` (~12) | | **错误处理不完整** | 多处 | 部分 catch 块静默忽略错误 | | **测试覆盖不足** | - | `gateway-client.ts`, `toml-utils.ts` 无测试 | | **代码重复** | 30+ 处 | 错误处理模式重复 | ### 2.4 性能问题 | 问题 | 位置 | 影响 | |------|------|------| | **消息数组频繁 map** | `chatStore.ts` | 长对话性能下降 | | **无消息分页** | `chatStore.ts` | 内存持续增长 | | **无 WebSocket 批处理** | `gateway-client.ts` | 高频消息处理效率低 | --- ## 三、分阶段演化路线图 ### Phase 9: 安全加固 (1 周) - 3 代理并行 **目标**: 修复关键安全漏洞 #### 并行执行架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Agent A: JSON 安全 │ Agent B: Token 迁移 │ │ ├── lib/json-utils.ts │ ├── gateway-client.ts │ │ ├── HandParamsForm.tsx │ ├── gatewayStore.ts │ │ └── WorkflowEditor.tsx │ └── 迁移工具 │ ├─────────────────────────────┼───────────────────────────────┤ │ Agent C: 加密增强 │ 完成后合并 → 文档更新 → 推送 │ │ ├── secure-storage.ts │ ├── docs/SYSTEM_ANALYSIS.md │ │ ├── secure_storage.rs │ ├── PROGRESS.md │ │ └── WSS 配置 │ └── git commit + push │ └─────────────────────────────┴───────────────────────────────┘ ``` | 任务 | 文件 | 工作量 | 代理 | |------|------|--------|------| | 创建 `safeJsonParse()` | `lib/json-utils.ts` | 4h | A | | 替换不安全 JSON.parse | `HandParamsForm.tsx`, `WorkflowEditor.tsx` | 3h | A | | Token 迁移到 secure-storage | `gateway-client.ts`, `gatewayStore.ts` | 6h | B | | Ed25519 密钥加密 | `secure-storage.ts`, `secure_storage.rs` | 4h | C | | 添加 WSS 配置 | `gateway-client.ts` | 2h | C | **完成后同步**: ```bash # 1. 更新文档 git add docs/SYSTEM_ANALYSIS.md PROGRESS.md git commit -m "docs: update Phase 9 security hardening progress" git push origin main # 2. 代码提交 git add . && git commit -m "security(phase-9): complete security hardening - Add safeJsonParse utility with schema validation - Migrate tokens to OS keyring storage - Add Ed25519 key encryption at rest - Enable WSS configuration option Co-Authored-By: Claude " git push origin main ``` **验收标准**: - [ ] 所有 JSON.parse 有 try-catch 保护 - [ ] Token 存储在 OS keyring - [ ] TypeScript 编译通过 - [ ] 现有测试通过 - [ ] **文档已更新并推送** --- ### Phase 10: 类型安全强化 (1 周) - 3 代理并行 **目标**: 减少 `any` 使用,提升类型安全 #### 并行执行架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Agent A: API 类型 │ Agent B: Store 类型 │ │ ├── types/api-responses.ts │ ├── store/gatewayStore.ts │ │ ├── types/errors.ts │ └── 35 处 any 替换 │ │ └── 所有 API 响应类型化 │ │ ├─────────────────────────────┼───────────────────────────────┤ │ Agent C: Client 类型 │ 完成后 → 统计 any 减少 → 推送 │ │ ├── lib/gateway-client.ts │ grep -r ": any" | wc -l │ │ └── 12 处 any 替换 │ git commit + push │ └─────────────────────────────┴───────────────────────────────┘ ``` | 任务 | 文件 | 工作量 | 代理 | |------|------|--------|------| | 创建 API 响应类型 | `types/api-responses.ts` | 4h | A | | 创建错误类型层级 | `types/errors.ts` | 2h | A | | 替换 gatewayStore any | `store/gatewayStore.ts` (35处) | 8h | B | | 替换 gateway-client any | `lib/gateway-client.ts` (12处) | 4h | C | **完成后同步**: ```bash # 统计并提交 echo "## Phase 10 类型安全 (完成)" >> docs/SYSTEM_ANALYSIS.md git add . && git commit -m "refactor(phase-10): reduce any usage by 50%" && git push ``` **验收标准**: - [ ] `any` 使用减少 50% (从 60+ 降到 30) - [ ] 所有 API 响应有类型定义 - [ ] TypeScript strict mode 通过 - [ ] **文档已更新并推送** --- ### Phase 11: Store 重构 (2 周) - 分步并行 **目标**: 分解巨型 gatewayStore (1500+ 行) **目标架构**: ``` gatewayStore (协调器, <100 行) ├── connectionStore (WebSocket, 认证, ~200 行) ├── agentStore (分身, 配置文件, ~200 行) ├── handStore (Hands, 触发器, ~200 行) ├── workflowStore (工作流, 执行历史, ~200 行) └── configStore (设置, 工作区, ~200 行) ``` #### 分步并行执行 ``` Step 1 (阻塞): 创建所有 store 接口定义 (1 天) ↓ Step 2 (并行): 同时提取 connectionStore, agentStore, handStore (3 天) ↓ Step 3 (并行): 同时提取 workflowStore, configStore (2 天) ↓ Step 4 (阻塞): 创建协调层 + 更新组件导入 (3 天) ↓ Step 5 (同步): 测试 + 文档更新 + 推送 (1 天) ``` | 任务 | 工作量 | 执行方式 | |------|--------|----------| | 创建 store 接口定义 | 1 天 | 阻塞 | | 提取 connectionStore | 3 天 | 并行 A | | 提取 agentStore | 3 天 | 并行 B | | 提取 handStore | 3 天 | 并行 C | | 提取 workflowStore | 2 天 | 并行 A | | 提取 configStore | 2 天 | 并行 B | | 创建协调层 + 组件更新 | 3 天 | 阻塞 | **完成后同步**: ```bash git add . && git commit -m "refactor(phase-11): decompose gatewayStore - Extract connectionStore (WebSocket, auth) - Extract agentStore (clones, profiles) - Extract handStore (hands, triggers) - Extract workflowStore (workflows, runs) - Extract configStore (settings, workspace) - Add coordinator layer Each store now < 300 lines with clear separation of concerns. Co-Authored-By: Claude " git push origin main ``` **验收标准**: - [ ] 每个 store < 300 行 - [ ] 清晰的关注点分离 - [ ] 所有组件正常工作 - [ ] **文档已更新并推送** --- ### Phase 12: 性能优化 (1 周) - 2 代理并行 **目标**: 优化消息处理和渲染 #### 并行执行架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Agent A: 消息渲染优化 │ Agent B: WebSocket 优化 │ │ ├── ChatArea.tsx 虚拟化 │ ├── gateway-client.ts │ │ ├── chatStore.ts 分页 │ ├── 消息批处理 │ │ └── lib/message-cache.ts │ └── 节流/防抖 │ └─────────────────────────────┴───────────────────────────────┘ ``` | 任务 | 文件 | 工作量 | 代理 | |------|------|--------|------| | 实现消息虚拟化 | `ChatArea.tsx` | 8h | A | | 添加消息分页 | `chatStore.ts` | 6h | A | | 实现 LRU 消息缓存 | `lib/message-cache.ts` | 4h | A | | WebSocket 消息批处理 | `gateway-client.ts` | 4h | B | **完成后同步**: ```bash git add . && git commit -m "perf(phase-12): optimize message handling - Add message virtualization for long conversations - Implement message pagination in chatStore - Add LRU cache for rendered messages - Add WebSocket message batching Handles 10k+ messages without performance degradation. Co-Authored-By: Claude " git push origin main ``` **验收标准**: - [ ] 支持 10,000+ 消息无性能下降 - [ ] 内存使用保持稳定 - [ ] 滚动流畅 - [ ] **文档已更新并推送** --- ### Phase 13: 测试覆盖 (1 周) - 3 代理并行 **目标**: 建立完整测试体系,达到 80% 覆盖率 #### 并行执行架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Agent A: 核心模块测试 │ Agent B: 工具模块测试 │ │ ├── gateway-client.test.ts │ ├── secure-storage.test.ts │ │ ├── 连接生命周期测试 │ ├── toml-utils.test.ts │ │ └── 消息帧解析测试 │ └── json-utils.test.ts │ ├─────────────────────────────┼───────────────────────────────┤ │ Agent C: 集成测试 │ 完成后 → 覆盖率报告 → 推送 │ │ ├── chat-flow.test.ts │ pnpm vitest --coverage │ │ └── React 组件测试 │ git commit + push │ └─────────────────────────────┴───────────────────────────────┘ ``` | 任务 | 文件 | 工作量 | 代理 | |------|------|--------|------| | gateway-client 单元测试 | `tests/desktop/gateway-client.test.ts` | 6h | A | | secure-storage 单元测试 | `tests/desktop/secure-storage.test.ts` | 2h | B | | toml-utils 单元测试 | `tests/desktop/toml-utils.test.ts` | 2h | B | | json-utils 单元测试 | `tests/desktop/json-utils.test.ts` | 2h | B | | 聊天流程集成测试 | `tests/desktop/integration/chat-flow.test.ts` | 4h | C | | React 组件测试 | `tests/desktop/components/` | 8h | C | **完成后同步**: ```bash # 生成覆盖率报告 pnpm vitest run --coverage git add . && git commit -m "test(phase-13): achieve 80% test coverage - Add gateway-client unit tests - Add secure-storage, toml-utils, json-utils tests - Add chat flow integration tests - Add React component tests Coverage: 80%+ for core modules. Co-Authored-By: Claude " git push origin main ``` **验收标准**: - [ ] 核心模块测试覆盖率 > 80% - [ ] 关键用户流程有集成测试 - [ ] CI/CD 流水线通过 - [ ] **文档已更新并推送** --- ## 四、关键文件清单 ### 需要修改的文件 | 优先级 | 文件路径 | 修改类型 | |--------|----------|----------| | P0 | `desktop/src/lib/gateway-client.ts` | 安全修复, 类型安全 | | P0 | `desktop/src/store/gatewayStore.ts` | 重构分解, 类型安全 | | P0 | `desktop/src/components/HandParamsForm.tsx` | JSON 解析安全 | | P0 | `desktop/src/components/WorkflowEditor.tsx` | JSON 解析安全 | | P1 | `desktop/src/store/chatStore.ts` | 性能优化 | | P1 | `desktop/src/lib/secure-storage.ts` | 密钥加密 | | P1 | `desktop/src-tauri/src/secure_storage.rs` | Rust 安全存储 | ### 需要创建的文件 | 文件路径 | 用途 | |----------|------| | `desktop/src/lib/json-utils.ts` | 安全 JSON 解析 | | `desktop/src/types/api-responses.ts` | API 响应类型 | | `desktop/src/types/errors.ts` | 错误类型定义 | | `desktop/src/lib/message-cache.ts` | 消息 LRU 缓存 | | `desktop/src/store/connectionStore.ts` | 连接状态管理 | | `desktop/src/store/agentStore.ts` | Agent 管理 | | `desktop/src/store/handStore.ts` | Hand 管理 | | `desktop/src/store/workflowStore.ts` | 工作流管理 | | `tests/desktop/gateway-client.test.ts` | 客户端测试 | --- ## 五、多代理并行执行策略 ### 5.1 并行执行原则 **核心原则**: 独立任务并行执行,依赖任务顺序执行 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 多代理并行执行架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Phase 9 (安全修复) - 并行执行: │ │ ├── Agent A: JSON 安全包装 + 输入验证 │ │ ├── Agent B: Token 迁移到 secure-storage │ │ └── Agent C: WSS 配置 + 密钥加密 │ │ │ │ Phase 10 (类型安全) - 并行执行: │ │ ├── Agent A: API 响应类型定义 │ │ ├── Agent B: gatewayStore any 替换 │ │ └── Agent C: gateway-client any 替换 │ │ │ │ Phase 11 (Store 重构) - 顺序执行 + 并行提取: │ │ ├── Step 1: 创建接口定义 (阻塞) │ │ ├── Step 2: 并行提取 connectionStore, agentStore, handStore │ │ ├── Step 3: 并行提取 workflowStore, configStore │ │ └── Step 4: 协调层 + 组件更新 │ │ │ │ Phase 12-13 (性能+测试) - 并行执行: │ │ ├── Agent A: 消息虚拟化 + 分页 │ │ ├── Agent B: WebSocket 批处理优化 │ │ └── Agent C: 测试编写 (与 A/B 同步) │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 5.2 代理分工 | 代理类型 | 职责 | 适用阶段 | |----------|------|----------| | **Security Engineer** | 安全修复、加密、Token 迁移 | Phase 9 | | **Senior Developer** | 类型定义、Store 重构 | Phase 10-11 | | **Frontend Developer** | UI 组件、性能优化 | Phase 12 | | **Test Engineer** | 单元测试、集成测试 | Phase 13 | | **Documentation Writer** | 文档更新、CHANGELOG | 所有阶段 | ### 5.3 每阶段完成后的同步动作 ```bash # 每个阶段完成后必须执行: # 1. 更新相关文档 # - docs/SYSTEM_ANALYSIS.md (添加 Phase 进度) # - docs/DEVELOPMENT.md (如有新开发指南) # - PROGRESS.md (进度追踪) # 2. 提交到仓库 git add . git commit -m "feat(phase-N): 完成阶段任务描述 - 具体改动 1 - 具体改动 2 Co-Authored-By: Claude " # 3. 推送到远程 git push origin main ``` ### 5.4 文档更新检查清单 每个阶段完成后必须更新: - [ ] `docs/SYSTEM_ANALYSIS.md` - 添加 Phase 完成记录 - [ ] `PROGRESS.md` - 更新进度百分比 - [ ] `CLAUDE.md` - 如有新的开发规范 - [ ] `README.md` - 如有新功能或依赖变更 --- ## 六、资源需求 (多代理优化后) ### 时间估算对比 | 阶段 | 串行执行 | 3代理并行 | 节省 | |------|----------|-----------|------| | Phase 9 (安全) | 2 周 | **1 周** | 50% | | Phase 10 (类型) | 2 周 | **1 周** | 50% | | Phase 11 (Store重构) | 3 周 | **2 周** | 33% | | Phase 12 (性能) | 2 周 | **1 周** | 50% | | Phase 13 (测试) | 2 周 | **1 周** | 50% | | **总计** | **11 周** | **6 周** | **45%** | ### 代理配置 | 阶段 | 所需代理 | 技能要求 | |------|----------|----------| | Phase 9 | 3 并行 | Security Engineer, Backend Dev, Rust Dev | | Phase 10 | 3 并行 | TypeScript Expert, Frontend Dev | | Phase 11 | 3 并行 → 顺序 | Senior Developer, State Management Expert | | Phase 12 | 2 并行 | Frontend Dev, Performance Engineer | | Phase 13 | 3 并行 | Test Engineer, Integration Specialist | ### 技能矩阵 | 技能 | Phase 9 | Phase 10 | Phase 11 | Phase 12 | Phase 13 | |------|---------|----------|----------|----------|----------| | TypeScript | 高 | 高 | 高 | 高 | 高 | | React | 中 | 中 | 高 | 高 | 中 | | Tauri/Rust | 高 | 低 | 低 | 低 | 低 | | WebSocket | 高 | 中 | 中 | 高 | 中 | | 状态管理 | 中 | 中 | 高 | 高 | 中 | | 安全 | 高 | 中 | 中 | 低 | 中 | | 测试 | 中 | 中 | 高 | 中 | 高 | --- ## 七、风险评估 | 风险 | 概率 | 影响 | 缓解措施 | |------|------|------|----------| | Store 重构破坏现有功能 | 中 | 高 | 重构前完善测试覆盖 | | 持久化迁移丢失数据 | 低 | 严重 | 迁移工具, 回滚能力 | | ID 标准化破坏 API 通信 | 中 | 高 | 集成测试验证 | | 性能优化引入新 bug | 中 | 中 | 渐进式发布, 功能开关 | --- ## 七、成功指标 ### Phase 9-10 指标 - [ ] 零安全漏洞 (静态分析) - [ ] `any` 使用减少 50% - [ ] 所有 Token 在安全存储中 ### Phase 11 指标 - [ ] 所有 store < 300 行 - [ ] 清晰的关注点分离 - [ ] 持久化策略一致 ### Phase 12-13 指标 - [ ] 10k+ 消息无性能下降 - [ ] UI 响应时间 < 100ms - [ ] 测试覆盖率 > 80% --- ## 八、验证计划 ### 自动化验证 ```bash # TypeScript 类型检查 pnpm tsc --noEmit # 单元测试 pnpm vitest run # 安全审计 pnpm audit ``` ### 手动验证 1. 连接 OpenFang (端口 50051) 2. 发送消息并验证流式返回 3. 触发 Hand 并验证执行 4. 保存配置并验证持久化 5. 测试长对话性能 (>1000 消息) --- ## 九、执行时间表 (6 周计划) ``` 周次 Phase 任务 代理数 交付物 ───────────────────────────────────────────────────────────────── W1 Phase 9 安全加固 3 并行 安全修复完成 + 文档 W2 Phase 10 类型安全强化 3 并行 类型定义 + any 减少 50% W3-4 Phase 11 Store 重构 3 → 顺序 5 个子 Store + 协调层 W5 Phase 12 性能优化 2 并行 消息虚拟化 + 批处理 W6 Phase 13 测试覆盖 3 并行 80% 覆盖率 + CI 通过 ───────────────────────────────────────────────────────────────── 完成 全部 Phase 9-13 文档更新 + 推送 ``` --- *计划创建: 2026-03-15* *多代理并行执行: 3 代理同时工作* *预计完成: 6 周 (从 11 周优化 45%)* *每阶段完成后: 文档更新 + Git 推送*