docs: reorganize docs — archive outdated, create brainstorming folder
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

- Create docs/brainstorming/ with 5 discussion records (Mar 16 - Apr 7)
- Archive ~30 outdated audit reports (V5-V11) to docs/archive/old-audits/
- Archive superseded analysis docs to docs/archive/old-analysis/
- Archive completed session plans to docs/archive/old-plans/
- Archive old test reports/validations to respective archive folders
- Remove empty directories left after moves
- Keep current docs: TRUTH.md, feature docs, deployment, knowledge-base, superpowers
This commit is contained in:
iven
2026-04-07 09:54:30 +08:00
parent 8e9fc54d92
commit 2e5f63be32
101 changed files with 1829 additions and 17 deletions

View File

@@ -0,0 +1,541 @@
# ZCLAW 项目系统性深度分析报告 v2
> **分析日期:** 2026-03-21
> **分析范围:** 代码结构、架构设计、技术栈、业务逻辑、数据流、性能安全
---
## 一、项目概览
### 1.1 项目定位
ZCLAW 是一个基于 ZCLAW 的中文优先 AI Agent 桌面客户端,采用 **Tauri 2.0 (Rust + React 19)** 架构,目标对标智谱 AutoClaw 和腾讯 QClaw。
### 1.2 技术栈全景
| 层级 | 技术选型 | 成熟度 |
|------|----------|--------|
| 桌面框架 | Tauri 2.0 (Rust + React 19) | ✅ 合理 |
| 前端 | React 19 + TailwindCSS 4 + Zustand 5 + Framer Motion + Lucide | ✅ 现代 |
| 后端通信 | WebSocket (Gateway Protocol v3) + Tauri Commands | ✅ 完整 |
| 状态管理 | Zustand (13 个 Store) + Facade Pattern | ⚠️ 过度拆分但已收敛 |
| 配置格式 | TOML | ✅ 用户友好 |
| 测试 | Vitest + Playwright | ✅ 覆盖较好 |
| 依赖 | 精简 (React 19, Zustand 5, Tauri 2) | ✅ 轻量 |
### 1.3 规模数据
| 维度 | 数量 |
|------|------|
| 前端组件 | 50+ .tsx 文件 |
| Lib 工具 | 40+ 文件 |
| Store 文件 | 13 个 Zustand stores |
| 类型定义 | 13 个类型文件 |
| Skills | 68 个 SKILL.md |
| Hands | 7 个 HAND.toml |
| Rust 模块 | 8 个主要模块 |
| 测试文件 | 15+ 测试文件 |
---
## 二、架构深度分析
### 2.1 整体架构图
```
┌──────────────────────────────────────────────────────────────────┐
│ React UI Layer │
│ ChatArea, Sidebar, HandsPanel, WorkflowEditor, TeamView... │
├──────────────────────────────────────────────────────────────────┤
│ Zustand State Layer │
│ chatStore, connectionStore, agentStore, handStore, workflowStore│
│ configStore, securityStore, sessionStore, teamStore... │
├──────────────────────────────────────────────────────────────────┤
│ Client Layer │
│ GatewayClient │ IntelligenceClient │ TeamClient │ BrowserClient │
├──────────────────────────────────────────────────────────────────┤
│ Tauri IPC / WebSocket │
├──────────────────────────────────────────────────────────────────┤
│ Rust Backend │
│ browser │ intelligence │ memory │ llm │ viking │ secure_storage │
└──────────────────────────────────────────────────────────────────┘
ZCLAW Kernel / OpenViking
```
### 2.2 前端架构分析
#### 2.2.1 组件层 (desktop/src/components/)
**组件分类:**
| 类别 | 组件数 | 代表组件 |
|------|--------|----------|
| 聊天/对话 | 8 | ChatArea, ConversationList, MessageSearch |
| Agent/Clone | 6 | CloneManager, AgentOnboardingWizard, PersonalitySelector |
| 自动化 Hands | 10 | HandsPanel, HandList, HandParamsForm, HandApprovalModal |
| 工作流 | 4 | WorkflowList, WorkflowEditor, WorkflowHistory |
| 团队协作 | 5 | TeamList, TeamCollaborationView, DevQALoop |
| 记忆/智能 | 6 | MemoryPanel, MemoryGraph, ActiveLearningPanel, ReflectionLog |
| 安全/审计 | 5 | SecurityLayersPanel, SecurityStatus, AuditLogsPanel |
| 浏览器自动化 | 8 | BrowserHandCard, ScreenshotPreview, TaskTemplateModal |
| 设置 | 12 | SettingsLayout, General, ModelsAPI, MCPServices... |
| UI 基础组件 | 15 | Button, Card, Input, Badge, Toast, EmptyState... |
**评价:** ✅ 组件职责划分清晰,分类合理
#### 2.2.2 状态管理层 (desktop/src/store/)
**13 个 Zustand Stores**
| Store | 职责 | 状态 |
|-------|------|------|
| chatStore | 聊天消息、会话管理 | ✅ 活跃 |
| connectionStore | Gateway 连接状态 | ✅ 活跃 |
| agentStore | Clone/Agent 管理 | ✅ 活跃 |
| handStore | Hands/Triggers/Approvals | ✅ 活跃 |
| workflowStore | 工作流管理 | ✅ 活跃 |
| configStore | 配置/渠道/技能/模型 | ✅ 活跃 |
| securityStore | 安全状态/审计日志 | ✅ 活跃 |
| sessionStore | 会话管理 | ✅ 活跃 |
| teamStore | 团队协作 | ✅ 活跃 |
| skillMarketStore | 技能市场 | ✅ 活跃 |
| memoryGraphStore | 记忆图谱 | ✅ 活跃 |
| activeLearningStore | 主动学习 | ✅ 活跃 |
| browserHandStore | 浏览器自动化 | ✅ 活跃 |
**gatewayStore.ts 门面模式:**
- 从 1800+ 行缩减到 352 行
- 作为向后兼容的 facade 层
- 标记为 `@deprecated`,推荐使用领域 Store
**评价:** ✅ Store 架构已统一,拆分合理
#### 2.2.3 通信层 (desktop/src/lib/)
**核心客户端:**
| 客户端 | 规模 | 职责 |
|--------|------|------|
| gateway-client.ts | 65KB | WebSocket/REST 通信、认证、心跳 |
| intelligence-client.ts | ~15KB | 记忆/心跳/反思/身份统一API |
| team-client.ts | ~8KB | Team API REST 客户端 |
| browser-client.ts | ~5KB | 浏览器自动化客户端 |
| autonomy-manager.ts | ~15KB | L4 分层授权系统 |
**GatewayClient 核心功能:**
- ✅ WebSocket 连接管理(自动重连、心跳)
- ✅ REST API 降级ZCLAW 模式)
- ✅ Ed25519 设备认证
- ✅ 流式响应处理chatStream
- ✅ 事件订阅机制
**问题:**
- ⚠️ 文件过大65KB职责过重
- ⚠️ 部分方法过长(如 handleZCLAWStreamEvent 100+ 行)
### 2.3 Rust 后端架构分析
#### 2.3.1 模块组织 (desktop/src-tauri/src/)
```
lib.rs (入口)
├── viking_commands.rs # OpenViking CLI sidecar
├── viking_server.rs # OpenViking 本地服务器管理
├── memory/ # 内存提取和上下文构建
│ ├── extractor.rs # LLM 驱动的记忆提取
│ ├── context_builder.rs # L0/L1/L2 分层上下文
│ └── persistent.rs # SQLite 持久化
├── llm/ # LLM 接口Doubao/OpenAI/Anthropic
├── browser/ # 浏览器自动化Fantoccini
├── secure_storage.rs # OS Keyring/Keychain
├── memory_commands.rs # 持久化内存命令
└── intelligence/ # 智能层(已从前端迁移)
├── heartbeat.rs # 心跳引擎
├── compactor.rs # 上下文压缩
├── reflection.rs # 反思引擎
└── identity.rs # Agent 身份管理
```
#### 2.3.2 状态管理模式
**Tauri State 注入:**
```rust
// 使用 Arc<Mutex<T>> 包装
pub struct BrowserState {
client: Arc<RwLock<BrowserClient>>,
}
// Tauri 命令中使用 State 管理
#[tauri::command]
async fn browser_navigate(
state: State<'_, BrowserState>,
url: String,
) -> Result<String, String>
```
**评价:** ✅ 线程安全,模式合理
#### 2.3.3 SQLite 持久化
**数据库架构:**
```sql
CREATE TABLE memories (
id TEXT PRIMARY KEY,
agent_id TEXT NOT NULL,
memory_type TEXT NOT NULL,
content TEXT NOT NULL,
importance INTEGER DEFAULT 5,
source TEXT DEFAULT 'auto',
tags TEXT DEFAULT '[]',
conversation_id TEXT,
created_at TEXT NOT NULL,
last_accessed_at TEXT NOT NULL,
access_count INTEGER DEFAULT 0,
embedding BLOB
);
-- 索引: agent_id, memory_type, created_at, importance
```
**评价:** ✅ 结构清晰,有索引优化
#### 2.3.4 安全存储
**keyring crate 使用:**
- Windows: Credential Manager
- macOS: Keychain
- Linux: libsecret
**评价:** ✅ 符合安全最佳实践
---
## 三、技术栈分析
### 3.1 框架选型
| 框架 | 选择 | 评价 |
|------|------|------|
| 桌面框架 | Tauri 2.0 | ✅ 体积小(~10MB性能好 |
| 前端框架 | React 19 | ✅ 最新特性,但未充分利用 |
| 状态管理 | Zustand 5 | ✅ 轻量、类型安全 |
| 样式 | TailwindCSS 4 | ✅ 原子化,开发效率高 |
| 动画 | Framer Motion | ✅ 声明式动画 |
| 桌面封装 | Tauri 2 | ✅ 成熟稳定 |
### 3.2 依赖管理
**package.json 关键依赖:**
```json
{
"dependencies": {
"@tauri-apps/api": "^2",
"react": "^19.1.0",
"zustand": "^5.0.11",
"framer-motion": "^12.36.0",
"lucide-react": "^0.577.0"
}
}
```
**Cargo.toml 关键依赖:**
```toml
[dependencies]
tauri = { version = "2", features = [] }
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.7", features = ["runtime-tokio", "sqlite"] }
fantoccini = "0.21" # Browser automation
keyring = "3" # Secure storage
```
**评价:** ✅ 依赖精简,版本稳定
---
## 四、业务逻辑分析
### 4.1 聊天功能实现
**消息流程:**
```
用户输入 → sendMessage()
→ 上下文压缩检查 (compactor.checkThreshold)
→ 记忆增强 (intelligenceClient.memory.search)
→ 添加用户消息
→ 创建流式占位消息
→ gatewayClient.chatStream()
→ 收集 tool/hand/workflow 事件
→ 流结束 → 提取记忆 (memory-extractor)
→ 触发反思 (intelligenceClient.reflection)
```
**评价:** ✅ 流程完整,异常处理充分
### 4.2 记忆系统实现
**记忆提取模式:**
1. **LLM 提取** - 使用 `llmExtract()` 语义提取
2. **规则提取** - 正则匹配模式
**记忆分类:**
- fact: 用户事实
- preference: 用户偏好
- lesson: 经验教训
- context: 上下文
- task: 任务
**分层上下文加载L0/L1/L2**
```
L0 (Quick Scan): 向量相似度搜索,返回概览
L1 (Standard): 加载 top 候选的 overview
L2 (Deep): 加载最相关项的完整内容
```
**评价:** ✅ 设计完善,已迁移到 Rust 后端
### 4.3 自主能力系统
**L4 分层授权:**
| 级别 | 自动内存保存 | 自动压缩 | 自动反思 |
|------|-------------|---------|---------|
| supervised | ❌ | ❌ | ❌ |
| assisted | ✅ | ✅ | ✅ |
| autonomous | ✅ | ✅ | ✅ |
**风险评估:**
- ACTION_RISK_MAP 定义每种操作的风险等级
- importanceMax + riskMax 双重判断
- 所有操作记录审计日志
**评价:** ✅ 授权机制完善
---
## 五、数据流与接口分析
### 5.1 整体数据流
```
用户操作 → React UI → Zustand Store → GatewayClient
WebSocket / REST
ZCLAW Kernel
Skills / Hands 执行
```
### 5.2 Gateway Protocol v3
**消息类型:**
- req/res: 请求/响应模式
- event: 事件推送
- stream: 流式响应
**认证:** Ed25519 签名
### 5.3 Tauri Commands
**70+ Commands 分类:**
| 类别 | 命令数 | 示例 |
|------|--------|------|
| Browser | 18 | browser_navigate, browser_click, browser_screenshot |
| Memory | 12 | memory_store, memory_search, memory_stats |
| Intelligence | 15 | heartbeat_*, reflection_*, identity_* |
| Viking | 9 | viking_status, viking_find, viking_read |
| Gateway | 8 | gateway_start, gateway_stop, gateway_status |
| LLM | 3 | llm_complete |
**评价:** ✅ 接口粒度合理,类型安全
---
## 六、性能与安全分析
### 6.1 性能分析
#### 6.1.1 渲染性能
**虚拟滚动:** 已使用 react-window
**潜在问题:**
- ⚠️ 大量消息时可能 re-render
- ⚠️ 某些 Store selector 未优化
#### 6.1.2 网络性能
**WebSocket 心跳:**
- 间隔30 秒
- 超时10 秒
- 最大丢失3 次
**问题:**
- ⚠️ 单 WebSocket 连接,复用机制可优化
#### 6.1.3 计算性能
**Token 估算:**
```rust
// CJK: ~1.5 tokens/字符
// ASCII: ~0.3 tokens/字符
```
**评价:** ✅ 算法合理
### 6.2 安全分析
#### 6.2.1 认证机制
**Ed25519 设备认证:** ✅ 安全
#### 6.2.2 敏感数据
**存储:**
- API Key: OS Keyring ✅
- Token: OS Keyring ✅
- Theme: localStorage ⚠️
**问题:**
- ⚠️ localStorage 仍用于部分前端配置
- ⚠️ 日志可能包含敏感信息
#### 6.2.3 输入验证
**SQL 注入:** ✅ 使用参数化查询
**XSS** ⚠️ 需要确认输出转义
---
## 七、测试覆盖分析
### 7.1 测试文件分布
| 测试文件 | 覆盖范围 |
|----------|----------|
| autonomy-manager.test.ts | L4 授权逻辑 |
| agent-memory.test.ts | 记忆系统 |
| context-compactor.test.ts | 上下文压缩 |
| heartbeat-reflection.test.ts | 心跳和反思 |
| gatewayStore.test.ts | Store 状态 |
| chatStore.test.ts | 聊天逻辑 |
| teamStore.test.ts | 团队协作 |
| browserHandStore.test.ts | 浏览器手 |
| ws-client.test.ts | WebSocket 客户端 |
**评价:** ✅ 核心逻辑有覆盖,但可增加更多边界测试
### 7.2 E2E 测试
**Playwright 配置:** ✅ 已配置 chromium/chromium-headed
---
## 八、代码质量分析
### 8.1 大型文件
| 文件 | 规模 | 问题 |
|------|------|------|
| gateway-client.ts | 65KB | 职责过重 |
| gatewayStore.ts | 352行 | 已是 facade仍偏大 |
### 8.2 技术债务
**TODO/FIXME**
- intelligence/mod.rs: Phase 3 迁移中
- viking_commands.rs: 平台二进制解析
**Rust unsafe**
- context_builder.rs: 多处 unwrap()
### 8.3 localStorage 使用
**仍在使用 localStorage 的模块:**
- intelligence-client.ts: 降级模式
- skill-discovery.ts: 技能索引缓存
- agent-swarm.ts: 蜂群历史
- gateway-api.ts: 主题等配置
---
## 九、分析维度评分
| # | 维度 | 评分 | 主要发现 |
|---|------|------|----------|
| 1 | 代码结构 | 4/5 | 组件划分清晰,文件组织合理 |
| 2 | 架构设计 | 4/5 | 分层清晰,模块职责明确 |
| 3 | 技术选型 | 4/5 | 框架选择合理,依赖精简 |
| 4 | 业务实现 | 4/5 | 核心流程完整,异常处理充分 |
| 5 | 数据流设计 | 4/5 | 流向清晰,同步机制完善 |
| 6 | 接口设计 | 4/5 | Tauri Commands 粒度合理 |
| 7 | 性能表现 | 3/5 | 存在优化空间re-render、WebSocket |
| 8 | 安全合规 | 4/5 | 认证机制完善,部分数据需加强 |
| 9 | 测试覆盖 | 3/5 | 核心逻辑有覆盖,边界测试不足 |
| 10 | 文档质量 | 4/5 | 文档详尽,部分需更新 |
| 11 | 可维护性 | 4/5 | 架构清晰,部分大文件需重构 |
| 12 | 可扩展性 | 4/5 | Plugin 机制、Skills 系统完善 |
**综合评分3.8 / 5.0**
---
## 十、关键问题清单
### 🔴 P0 - 需立即处理
1. **gateway-client.ts 过大** (65KB)
- 建议:拆分为 gateway-core.ts, gateway-ws.ts, gateway-rest.ts
2. **localStorage 降级风险**
- intelligence-client.ts 在非 Tauri 环境使用 localStorage
- 建议:统一使用 Rust 后端,移除 localStorage 降级
### 🟡 P1 - 应尽快处理
3. **Rust unwrap() 风险**
- context_builder.rs 多处 unsafe unwrap
- 建议:使用 expect() 并添加错误信息
4. **测试覆盖不足**
- E2E 测试不稳定
- 建议:增加边界测试,提高测试稳定性
### 🟢 P2 - 计划处理
5. **Store selector 优化**
- 避免不必要的 re-render
- 建议:使用 Zustand 的 shallow 比较
6. **WebSocket 连接池化**
- 当前单连接,可考虑连接池
- 建议:评估性能瓶颈后优化
---
## 十一、头脑风暴议题
详见 `BRAINSTORMING-SESSION.md`
---
## 十二、附录
### A. 关键文件索引
| 文件 | 位置 | 说明 |
|------|------|------|
| CLAUDE.md | 根目录 | 项目规范文档 |
| gateway-client.ts | desktop/src/lib/ | 核心通信客户端 |
| intelligence-client.ts | desktop/src/lib/ | 智能层统一 API |
| chatStore.ts | desktop/src/store/ | 聊天状态管理 |
| lib.rs | desktop/src-tauri/src/ | Rust 后端入口 |
| intelligence/ | desktop/src-tauri/src/ | 智能层 Rust 实现 |
| memory/ | desktop/src-tauri/src/ | 内存持久化 |
### B. 参考文档
- docs/analysis/ZCLAW-DEEP-ANALYSIS.md (2026-03-20)
- docs/features/00-architecture/
- docs/plans/INTELLIGENCE-LAYER-MIGRATION.md