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
refactor: 统一Hands系统常量到单个源文件 refactor: 更新Hands中文名称和描述 fix: 修复技能市场在连接状态变化时重新加载 fix: 修复身份变更提案的错误处理逻辑 docs: 更新多个功能文档的验证状态和实现位置 docs: 更新Hands系统文档 test: 添加测试文件验证工作区路径
715 lines
23 KiB
Markdown
715 lines
23 KiB
Markdown
# ZCLAW 功能验证计划
|
||
|
||
> **版本**: v0.2.5
|
||
> **创建日期**: 2026-03-24
|
||
> **验证范围**: 所有已实现功能的完整性、可用性验证
|
||
|
||
---
|
||
|
||
## 一、验证概述
|
||
|
||
### 1.1 验证目标
|
||
|
||
基于 `docs/features` 目录的文档,系统化验证 ZCLAW 所有已实现功能的:
|
||
- **完整性** - 功能是否完整实现
|
||
- **可用性** - 功能是否可正常使用
|
||
- **集成性** - 前后端是否正确集成
|
||
- **持久性** - 数据是否正确持久化
|
||
|
||
### 1.2 验证范围统计
|
||
|
||
| 模块 | 功能数量 | 验证点数量 |
|
||
|------|---------|-----------|
|
||
| 架构层 | 3 | 45 |
|
||
| 核心功能 | 6 | 38 |
|
||
| 智能层 | 6 | 42 |
|
||
| 技能系统 | 3 | 15 |
|
||
| Hands 系统 | 9 | 20 |
|
||
| 后端集成 | 100+ | 25 |
|
||
| **总计** | **127+** | **185** |
|
||
|
||
---
|
||
|
||
## 二、Phase 1: 架构层验证
|
||
|
||
### 2.1 通信层验证 (01-communication-layer.md)
|
||
|
||
#### 2.1.1 LLM Provider 连接验证
|
||
|
||
| # | 验证项 | 测试方法 | 预期结果 |
|
||
|---|--------|---------|---------|
|
||
| 1.1 | Kimi Provider | 配置 Kimi API Key,发送消息 | 流式响应正常 |
|
||
| 1.2 | Qwen Provider | 配置通义千问 API Key | 流式响应正常 |
|
||
| 1.3 | DeepSeek Provider | 配置 DeepSeek API Key | 流式响应正常 |
|
||
| 1.4 | 智谱 Provider | 配置智谱 API Key | 流式响应正常 |
|
||
| 1.5 | OpenAI Provider | 配置 OpenAI Key | 流式响应正常 |
|
||
| 1.6 | Anthropic Provider | 配置 Claude API Key | 流式响应正常 |
|
||
| 1.7 | Gemini Provider | 配置 Gemini API Key | 流式响应正常 |
|
||
| 1.8 | Local Provider (Ollama) | 启动 Ollama,配置 localhost:11434 | 流式响应正常 |
|
||
| 1.9 | 自定义 baseUrl | 配置自定义 URL | 请求发送到自定义地址 |
|
||
|
||
**关键文件**: `desktop/src/lib/kernel-client.ts`, `crates/zclaw-runtime/src/driver/`
|
||
|
||
#### 2.1.2 Tauri 命令验证
|
||
|
||
| # | 命令 | 验证方法 | 预期结果 |
|
||
|---|------|---------|---------|
|
||
| 2.1 | `kernel_init` | 首次启动应用 | `initialized: true` |
|
||
| 2.2 | `kernel_status` | 调用状态 API | 返回当前状态 |
|
||
| 2.3 | `kernel_shutdown` | 关闭应用 | 优雅关闭 |
|
||
| 2.4 | `agent_create` | 创建新 Agent | 返回 `{ id, name, state }` |
|
||
| 2.5 | `agent_list` | 调用列表 API | 返回 Agent 数组 |
|
||
| 2.6 | `agent_get` | 获取 Agent 详情 | 返回完整信息 |
|
||
| 2.7 | `agent_delete` | 删除 Agent | 成功删除 |
|
||
| 2.8 | `agent_chat` | 发送非流式消息 | 返回完整响应 |
|
||
| 2.9 | `agent_chat_stream` | 发送流式消息 | 收到流式事件 |
|
||
|
||
**关键文件**: `desktop/src-tauri/src/kernel_commands.rs`
|
||
|
||
#### 2.1.3 流式响应验证
|
||
|
||
| # | 验证项 | 测试方法 | 预期结果 |
|
||
|---|--------|---------|---------|
|
||
| 3.1 | delta 事件 | 发送消息 | UI 逐字显示 |
|
||
| 3.2 | tool_start 事件 | 触发工具调用 | 显示工具开始状态 |
|
||
| 3.3 | tool_end 事件 | 工具完成 | 显示工具输出 |
|
||
| 3.4 | complete 事件 | 消息完成 | 停止流式,显示 token 统计 |
|
||
| 3.5 | error 事件 | 模拟错误 | 显示错误信息 |
|
||
| 3.6 | sessionId 路由 | 并发发送多条 | 事件正确路由 |
|
||
| 3.7 | 流式取消 | 调用 cancelStream | 清理监听器 |
|
||
|
||
#### 2.1.4 错误处理验证
|
||
|
||
| # | 场景 | 预期行为 |
|
||
|---|------|---------|
|
||
| 4.1 | 未配置模型 | 显示中文提示 |
|
||
| 4.2 | API Key 无效 | 显示 401 错误 |
|
||
| 4.3 | 网络中断 | 显示连接失败 |
|
||
| 4.4 | 流式错误 | UI 恢复可交互 |
|
||
| 4.5 | 自动重连 | reconnecting 状态 |
|
||
|
||
---
|
||
|
||
### 2.2 状态管理验证 (02-state-management.md)
|
||
|
||
#### 2.2.1 Store 持久化验证
|
||
|
||
| # | Store | 验证项 | 测试方法 |
|
||
|---|-------|--------|---------|
|
||
| 5.1 | chatStore | 对话历史保留 | 刷新页面后验证 |
|
||
| 5.2 | chatStore | partialize | 检查 localStorage 内容 |
|
||
| 5.3 | configStore | 配置保留 | 修改后刷新验证 |
|
||
| 5.4 | offlineStore | 离线队列保留 | 离线发送后刷新 |
|
||
|
||
**关键文件**: `desktop/src/store/chatStore.ts`, `desktop/src/store/configStore.ts`
|
||
|
||
#### 2.2.2 Store 间通信验证
|
||
|
||
| # | 验证项 | 测试方法 |
|
||
|---|--------|---------|
|
||
| 6.1 | 客户端注入 | 检查 initializeStores() |
|
||
| 6.2 | 连接状态同步 | 连接后验证 Agent 自动加载 |
|
||
| 6.3 | 跨 Store 访问 | 发送消息时检查连接状态 |
|
||
| 6.4 | 单例模式 | 多次调用验证同一实例 |
|
||
|
||
#### 2.2.3 Date 对象恢复验证
|
||
|
||
| # | 验证项 | 测试方法 |
|
||
|---|--------|---------|
|
||
| 7.1 | 日期转换 | 刷新后验证时间显示 |
|
||
| 7.2 | streaming 清除 | 流式中刷新验证 |
|
||
| 7.3 | 当前会话恢复 | 切换对话后刷新 |
|
||
|
||
---
|
||
|
||
### 2.3 安全认证验证 (03-security-auth.md)
|
||
|
||
#### 2.3.1 设备认证验证
|
||
|
||
| # | 验证项 | 测试方法 |
|
||
|---|--------|---------|
|
||
| 8.1 | 密钥生成 | 清空存储后启动 |
|
||
| 8.2 | 密钥持久化 | 验证 Keyring 调用 |
|
||
| 8.3 | JWT Token 存储 | 验证非明文存储 |
|
||
| 8.4 | Token 刷新 | 过期后自动刷新 |
|
||
|
||
**关键文件**: `desktop/src/lib/secure-storage.ts`
|
||
|
||
#### 2.3.2 存储后端验证
|
||
|
||
| # | 平台 | 存储后端 |
|
||
|---|------|---------|
|
||
| 9.1 | Windows | DPAPI |
|
||
| 9.2 | macOS | Keychain |
|
||
| 9.3 | Linux | Secret Service |
|
||
| 9.4 | 降级 | AES-GCM 加密 localStorage |
|
||
|
||
---
|
||
|
||
## 三、Phase 2: 核心功能验证
|
||
|
||
### 3.1 聊天界面验证
|
||
|
||
| # | 功能 | 验证方法 | 预期结果 |
|
||
|---|------|---------|---------|
|
||
| 10.1 | 流式响应展示 | 发送消息 | 实时显示 |
|
||
| 10.2 | Markdown 渲染 | 发送 Markdown 内容 | 正确渲染 |
|
||
| 10.3 | 代码块渲染 | 发送代码 | 语法高亮 |
|
||
| 10.4 | 多会话管理 | 创建/切换/删除 | 状态正确 |
|
||
| 10.5 | 模型选择 | 切换模型 | 使用新模型 |
|
||
| 10.6 | 消息自动滚动 | 长对话 | 自动滚动到底部 |
|
||
| 10.7 | 输入框调整 | 输入多行 | 高度自动调整 |
|
||
| 10.8 | 记忆增强注入 | 发送相关历史 | 自动注入上下文 |
|
||
| 10.9 | 上下文压缩 | 超过阈值 | 自动压缩 |
|
||
|
||
**关键文件**: `desktop/src/components/ChatArea.tsx`, `desktop/src/store/chatStore.ts`
|
||
|
||
### 3.2 Agent 分身管理验证
|
||
|
||
| # | 功能 | 验证方法 | 预期结果 |
|
||
|---|------|---------|---------|
|
||
| 11.1 | 创建 Agent | 通过向导创建 | 成功创建 |
|
||
| 11.2 | 配置 Agent | 修改 SOUL.md | 配置生效 |
|
||
| 11.3 | 切换 Agent | 切换当前 Agent | 状态更新 |
|
||
| 11.4 | 人格预设 | 选择不同预设 | SOUL.md 不同 |
|
||
| 11.5 | 身份持久化 | 重启应用 | Agent 保留 |
|
||
|
||
**关键文件**: `desktop/src/components/AgentOnboardingWizard.tsx`, `desktop/src/lib/personality-presets.ts`
|
||
|
||
### 3.3 多 Agent 协作验证
|
||
|
||
| # | 模式 | 验证方法 | 预期结果 |
|
||
|---|------|---------|---------|
|
||
| 12.1 | Sequential | 创建链式任务 | 按顺序执行 |
|
||
| 12.2 | Parallel | 创建并行任务 | 并发执行 |
|
||
| 12.3 | Debate | 创建辩论任务 | 多轮讨论后综合 |
|
||
|
||
**关键文件**: `desktop/src/components/SwarmDashboard.tsx`, `desktop/src/lib/agent-swarm.ts`
|
||
|
||
---
|
||
|
||
## 四、Phase 3: 智能层验证
|
||
|
||
### 4.1 Agent 记忆系统验证 (00-agent-memory.md)
|
||
|
||
#### 4.1.1 记忆类型验证
|
||
|
||
| # | 类型 | 测试方法 | 预期结果 |
|
||
|---|------|---------|---------|
|
||
| 13.1 | fact | 存储事实记忆 | 正确存储 |
|
||
| 13.2 | preference | 存储偏好记忆 | 正确存储 |
|
||
| 13.3 | lesson | 存储教训记忆 | 正确存储 |
|
||
| 13.4 | context | 存储上下文记忆 | 正确存储 |
|
||
| 13.5 | task | 存储任务记忆 | 正确存储 |
|
||
|
||
#### 4.1.2 记忆操作验证
|
||
|
||
| # | 操作 | Tauri 命令 | 验证方法 |
|
||
|---|------|-----------|---------|
|
||
| 14.1 | 初始化 | `memory_init` | 调用成功 |
|
||
| 14.2 | 存储 | `memory_store` | 存储成功 |
|
||
| 14.3 | 获取 | `memory_get` | 正确获取 |
|
||
| 14.4 | 搜索 | `memory_search` | 返回相关记忆 |
|
||
| 14.5 | 删除 | `memory_delete` | 删除成功 |
|
||
| 14.6 | 统计 | `memory_stats` | 返回统计 |
|
||
| 14.7 | 导出 | `memory_export` | 导出 Markdown |
|
||
| 14.8 | 导入 | `memory_import` | 导入成功 |
|
||
|
||
**关键文件**: `desktop/src-tauri/src/memory_commands.rs`, `desktop/src/components/MemoryPanel.tsx`
|
||
|
||
#### 4.1.3 记忆 UI 集成验证
|
||
|
||
| # | 组件 | 验证方法 |
|
||
|---|------|---------|
|
||
| 15.1 | MemoryPanel | 点击 RightPanel | 显示记忆面板 |
|
||
| 15.2 | MemoryGraph | 查看记忆图谱 | 正确渲染 |
|
||
| 15.3 | 统计显示 | 查看统计 | 显示正确 |
|
||
| 15.4 | 清理功能 | 点击清理 | 正确执行 |
|
||
|
||
### 4.2 身份演化验证 (01-identity-evolution.md)
|
||
|
||
| # | 功能 | API/命令 | 验证方法 |
|
||
|---|------|---------|---------|
|
||
| 16.1 | 获取身份 | `identity_get` | 返回身份文件 |
|
||
| 16.2 | 更新文件 | `identity_update_file` | 更新成功 |
|
||
| 16.3 | 变更提案 | `identity_propose_change` | 创建提案 |
|
||
| 16.4 | 批准提案 | `identity_approve_proposal` | 应用变更 |
|
||
| 16.5 | 拒绝提案 | `identity_reject_proposal` | 丢弃提案 |
|
||
| 16.6 | 快照历史 | `identity_get_snapshots` | 返回历史 |
|
||
| 16.7 | 回滚 | `identity_restore_snapshot` | 恢复成功 |
|
||
|
||
**关键文件**: `desktop/src/lib/intelligence-client.ts`, `desktop/src/components/IdentityChangeProposal.tsx`
|
||
|
||
### 4.3 反思引擎验证 (03-reflection-engine.md)
|
||
|
||
| # | 功能 | Tauri 命令 | 验证方法 |
|
||
|---|------|-----------|---------|
|
||
| 17.1 | 记录对话 | `reflection_record_conversation` | 记录成功 |
|
||
| 17.2 | 触发检查 | `reflection_should_reflect` | 返回是否触发 |
|
||
| 17.3 | 执行反思 | `reflection_reflect` | 返回结果 |
|
||
| 17.4 | 获取历史 | `reflection_get_history` | 返回历史 |
|
||
|
||
**验证触发条件**:
|
||
- 对话次数: 每 5 次后
|
||
- 时间间隔: 每 24 小时
|
||
- 首次触发: 3 次对话后
|
||
|
||
**关键文件**: `desktop/src-tauri/src/intelligence/reflection.rs`, `desktop/src/components/ReflectionLog.tsx`
|
||
|
||
### 4.4 心跳引擎验证 (04-heartbeat-engine.md)
|
||
|
||
| # | 功能 | Tauri 命令 | 验证方法 |
|
||
|---|------|-----------|---------|
|
||
| 18.1 | 初始化 | `heartbeat_init` | 初始化成功 |
|
||
| 18.2 | 启动 | `heartbeat_start` | 开始跳动 |
|
||
| 18.3 | 停止 | `heartbeat_stop` | 停止跳动 |
|
||
| 18.4 | 手动触发 | `heartbeat_tick` | 执行检查 |
|
||
| 18.5 | 获取配置 | `heartbeat_get_config` | 返回配置 |
|
||
| 18.6 | 更新配置 | `heartbeat_update_config` | 更新成功 |
|
||
| 18.7 | 获取历史 | `heartbeat_get_history` | 返回历史 |
|
||
|
||
**验证检查函数**:
|
||
- `check_pending_tasks` - 待办任务积压
|
||
- `check_memory_health` - 记忆健康
|
||
- `check_idle_greeting` - 长时间未互动
|
||
- `check_personality_improvement` - 人格改进
|
||
- `check_learning_opportunities` - 学习机会
|
||
|
||
**关键文件**: `desktop/src-tauri/src/intelligence/heartbeat.rs`
|
||
|
||
### 4.5 自主授权验证 (05-autonomy-manager.md)
|
||
|
||
#### 4.5.1 自主级别验证
|
||
|
||
| # | 级别 | 行为 | 验证方法 |
|
||
|---|------|------|---------|
|
||
| 19.1 | supervised | 所有操作需确认 | 设置后验证 |
|
||
| 19.2 | assisted | 低风险自动,中高需确认 | 设置后验证 |
|
||
| 19.3 | autonomous | 低中风险自动,高需确认 | 设置后验证 |
|
||
|
||
#### 4.5.2 风险等级验证
|
||
|
||
| # | 等级 | 操作类型 | 验证方法 |
|
||
|---|------|---------|---------|
|
||
| 20.1 | Low | memory_save, reflection_run | 验证自动执行 |
|
||
| 20.2 | Medium | hand_trigger, skill_install | 验证需确认 |
|
||
| 20.3 | High | memory_delete, identity_update | 验证始终需确认 |
|
||
|
||
**关键文件**: `desktop/src/lib/autonomy-manager.ts`, `desktop/src/components/AutonomyConfig.tsx`
|
||
|
||
### 4.6 上下文压缩验证
|
||
|
||
| # | 功能 | Tauri 命令 | 验证方法 |
|
||
|---|------|-----------|---------|
|
||
| 21.1 | Token 估算 | `compactor_estimate_tokens` | 返回估算值 |
|
||
| 21.2 | 阈值检查 | `compactor_check_threshold` | 返回是否超阈值 |
|
||
| 21.3 | 执行压缩 | `compactor_compact` | 返回压缩结果 |
|
||
|
||
**压缩配置**:
|
||
- 阈值: 15000 tokens
|
||
- 策略: 滑动窗口 + 摘要
|
||
|
||
---
|
||
|
||
## 五、Phase 4: 技能系统验证
|
||
|
||
### 5.1 技能发现验证
|
||
|
||
| # | 验证项 | 测试方法 | 预期结果 |
|
||
|---|--------|---------|---------|
|
||
| 22.1 | 技能扫描 | 调用 `skill_list` | 返回 77 个技能 |
|
||
| 22.2 | 技能刷新 | 调用 `skill_refresh` | 重新扫描成功 |
|
||
| 22.3 | 技能分类 | 检查分类 | 14 个分类正确 |
|
||
|
||
**关键文件**: `crates/zclaw-skills/src/registry.rs`, `desktop/src/lib/skill-discovery.ts`
|
||
|
||
### 5.2 技能执行验证
|
||
|
||
| # | 验证项 | 测试方法 | 预期结果 |
|
||
|---|--------|---------|---------|
|
||
| 23.1 | 执行技能 | 调用 `skill_execute` | 正确执行 |
|
||
| 23.2 | 触发词匹配 | 发送触发词消息 | 自动推荐技能 |
|
||
| 23.3 | 工具权限 | 检查 SKILL.md tools | 正确限制 |
|
||
|
||
### 5.3 技能分类抽样验证
|
||
|
||
| 分类 | 代表技能 | 验证项 |
|
||
|------|---------|-------|
|
||
| 开发工程 | senior-developer | 代码生成 |
|
||
| 测试/QA | code-reviewer | 代码审查 |
|
||
| 设计/UX | ui-designer | 设计建议 |
|
||
| 安全 | security-engineer | 安全分析 |
|
||
| 数据分析 | analytics-reporter | 数据报告 |
|
||
| 运维/DevOps | devops-automator | 自动化 |
|
||
|
||
---
|
||
|
||
## 六、Phase 5: Hands 系统验证
|
||
|
||
### 6.1 已实现 Hands 验证 (9/11)
|
||
|
||
| # | Hand | 触发方式 | 需审批 | 验证方法 |
|
||
|---|------|---------|-------|---------|
|
||
| 24.1 | browser | 手动/Webhook | 是 | 启动浏览器会话 |
|
||
| 24.2 | researcher | 手动/事件 | 否 | 执行研究任务 |
|
||
| 24.3 | collector | 定时/事件/手动 | 否 | 数据收集 |
|
||
| 24.4 | slideshow | 手动 | 否 | 生成幻灯片 |
|
||
| 24.5 | speech | 手动/事件 | 否 | 语音合成 |
|
||
| 24.6 | quiz | 手动 | 否 | 生成测验 |
|
||
| 24.7 | whiteboard | 手动 | 否 | 白板协作 |
|
||
| 24.8 | clip | 手动/定时 | 否 | **需 FFmpeg** |
|
||
| 24.9 | twitter | 定时/事件 | 是 | **需 API Key** |
|
||
|
||
**关键文件**: `crates/zclaw-hands/src/hands/`, `desktop/src/store/handStore.ts`
|
||
|
||
### 6.2 依赖检查验证
|
||
|
||
| # | Hand | 依赖 | 验证方法 |
|
||
|---|------|------|---------|
|
||
| 25.1 | clip | FFmpeg | 检测 FFmpeg 可用性 |
|
||
| 25.2 | twitter | Twitter API Key | 检测 API Key |
|
||
| 25.3 | browser | WebDriver | 检测浏览器驱动 |
|
||
|
||
### 6.3 审批流程验证
|
||
|
||
| # | 验证项 | 测试方法 |
|
||
|---|--------|---------|
|
||
| 26.1 | 状态流转 | 触发需审批 Hand | pending → needs_approval → completed |
|
||
| 26.2 | 批准操作 | 点击批准 | 继续执行 |
|
||
| 26.3 | 拒绝操作 | 点击拒绝 | 取消执行 |
|
||
|
||
---
|
||
|
||
## 七、Phase 6: 后端集成验证
|
||
|
||
### 7.1 Kernel 集成验证
|
||
|
||
| # | 验证项 | 测试方法 | 预期结果 |
|
||
|---|--------|---------|---------|
|
||
| 27.1 | 内部 Kernel | 调用 `kernel_init` | initialized: true |
|
||
| 27.2 | 多 LLM 支持 | 配置不同 Provider | 正确切换 |
|
||
| 27.3 | Agent 生命周期 | 创建/删除 Agent | 正确管理 |
|
||
| 27.4 | 流式响应 | 发送流式消息 | 事件正确 |
|
||
| 27.5 | MCP 协议 | 检查 MCP 支持 | 已实现 |
|
||
|
||
**关键文件**: `crates/zclaw-kernel/src/lib.rs`
|
||
|
||
### 7.2 浏览器自动化验证
|
||
|
||
| # | 命令 | 验证方法 |
|
||
|---|------|---------|
|
||
| 28.1 | `browser_create_session` | 创建会话 |
|
||
| 28.2 | `browser_navigate` | 导航页面 |
|
||
| 28.3 | `browser_click` | 点击元素 |
|
||
| 28.4 | `browser_type` | 输入文本 |
|
||
| 28.5 | `browser_screenshot` | 截图 |
|
||
| 28.6 | `browser_execute_script` | 执行 JS |
|
||
| 28.7 | `browser_scrape_page` | 抓取页面 |
|
||
|
||
---
|
||
|
||
## 八、验证执行顺序
|
||
|
||
### 8.1 推荐执行顺序
|
||
|
||
```
|
||
Phase 1 (架构层)
|
||
├── 通信层 (45 min)
|
||
├── 状态管理 (30 min)
|
||
└── 安全认证 (30 min)
|
||
|
||
Phase 2 (核心功能)
|
||
├── 聊天界面 (30 min)
|
||
├── Agent 管理 (20 min)
|
||
└── 多 Agent 协作 (20 min)
|
||
|
||
Phase 3 (智能层)
|
||
├── 记忆系统 (30 min)
|
||
├── 身份演化 (20 min)
|
||
├── 反思引擎 (15 min)
|
||
├── 心跳引擎 (15 min)
|
||
├── 自主授权 (15 min)
|
||
└── 上下文压缩 (10 min)
|
||
|
||
Phase 4 (技能系统)
|
||
└── 技能验证 (30 min)
|
||
|
||
Phase 5 (Hands 系统)
|
||
└── Hands 验证 (45 min)
|
||
|
||
Phase 6 (后端集成)
|
||
└── Kernel 验证 (30 min)
|
||
```
|
||
|
||
**预计总时间**: 约 6 小时
|
||
|
||
### 8.2 自动化测试
|
||
|
||
| 类型 | 位置 | 命令 |
|
||
|------|------|------|
|
||
| 单元测试 | `tests/desktop/` | `pnpm vitest run` |
|
||
| E2E 测试 | `desktop/tests/e2e/` | `pnpm test:e2e` |
|
||
| 类型检查 | - | `pnpm tsc --noEmit` |
|
||
|
||
---
|
||
|
||
## 九、验证记录模板
|
||
|
||
### 9.1 功能验证记录
|
||
|
||
```markdown
|
||
## [功能名称] 验证记录
|
||
|
||
**日期**: YYYY-MM-DD
|
||
**验证人**:
|
||
**环境**: Windows/macOS/Linux
|
||
|
||
### 验证结果
|
||
|
||
| # | 验证项 | 状态 | 备注 |
|
||
|---|--------|------|------|
|
||
| 1 | xxx | ✅/❌ | |
|
||
|
||
### 发现的问题
|
||
|
||
1. [问题描述]
|
||
- 严重程度: 高/中/低
|
||
- 复现步骤:
|
||
- 预期结果:
|
||
- 实际结果:
|
||
|
||
### 建议
|
||
|
||
- [改进建议]
|
||
```
|
||
|
||
---
|
||
|
||
## 十、关键文件路径汇总
|
||
|
||
### 10.1 前端文件
|
||
|
||
| 模块 | 路径 |
|
||
|------|------|
|
||
| Kernel Client | `desktop/src/lib/kernel-client.ts` |
|
||
| 智能客户端 | `desktop/src/lib/intelligence-client.ts` |
|
||
| 技能发现 | `desktop/src/lib/skill-discovery.ts` |
|
||
| 自主管理 | `desktop/src/lib/autonomy-manager.ts` |
|
||
| 安全存储 | `desktop/src/lib/secure-storage.ts` |
|
||
| 聊天 Store | `desktop/src/store/chatStore.ts` |
|
||
| Hand Store | `desktop/src/store/handStore.ts` |
|
||
|
||
### 10.2 后端文件
|
||
|
||
| 模块 | 路径 |
|
||
|------|------|
|
||
| Kernel 命令 | `desktop/src-tauri/src/kernel_commands.rs` |
|
||
| 记忆命令 | `desktop/src-tauri/src/memory_commands.rs` |
|
||
| 心跳引擎 | `desktop/src-tauri/src/intelligence/heartbeat.rs` |
|
||
| 反思引擎 | `desktop/src-tauri/src/intelligence/reflection.rs` |
|
||
| 身份管理 | `desktop/src-tauri/src/intelligence/identity.rs` |
|
||
| Kernel 核心 | `crates/zclaw-kernel/src/lib.rs` |
|
||
| 技能注册 | `crates/zclaw-skills/src/registry.rs` |
|
||
| Hands 实现 | `crates/zclaw-hands/src/hands/` |
|
||
|
||
### 10.3 文档文件
|
||
|
||
| 文档 | 路径 |
|
||
|------|------|
|
||
| 功能索引 | `docs/features/README.md` |
|
||
| 通信层 | `docs/features/00-architecture/01-communication-layer.md` |
|
||
| 状态管理 | `docs/features/00-architecture/02-state-management.md` |
|
||
| 记忆系统 | `docs/features/02-intelligence-layer/00-agent-memory.md` |
|
||
| 身份演化 | `docs/features/02-intelligence-layer/01-identity-evolution.md` |
|
||
| 技能系统 | `docs/features/04-skills-ecosystem/00-skill-system.md` |
|
||
| Hands 系统 | `docs/features/05-hands-system/00-hands-overview.md` |
|
||
|
||
---
|
||
|
||
## 十一、验收标准
|
||
|
||
### 11.1 通过标准
|
||
|
||
| 指标 | 标准 |
|
||
|------|------|
|
||
| 功能完整性 | ≥ 95% 验证点通过 |
|
||
| 关键功能 | 100% 通过 (聊天、Agent、记忆) |
|
||
| 无阻塞性问题 | 0 个 High 严重度问题 |
|
||
| 数据持久化 | 100% 正确 |
|
||
|
||
### 11.2 阻塞问题定义
|
||
|
||
- **High**: 功能完全不可用
|
||
- **Medium**: 功能部分可用,有规避方案
|
||
- **Low**: UI/体验问题,不影响核心功能
|
||
|
||
---
|
||
|
||
## 十二、硬编码问题审计报告
|
||
|
||
> **审计日期**: 2026-03-24
|
||
> **触发原因**: 发现 `skills_dir: None` 导致技能系统完全失效
|
||
|
||
### 12.1 已修复问题
|
||
|
||
#### 问题 #1: `skills_dir: None` 导致技能不加载 (CRITICAL - 已修复)
|
||
|
||
**文件**: `crates/zclaw-kernel/src/config.rs:337`
|
||
|
||
**问题描述**:
|
||
```rust
|
||
// 修复前
|
||
Self {
|
||
database_url: default_database_url(),
|
||
llm,
|
||
skills_dir: None, // ← 硬编码为 None!
|
||
}
|
||
```
|
||
|
||
**影响**: 通过 Tauri 初始化 Kernel 时,技能目录永远不会被扫描,导致:
|
||
- `skills.list()` 返回空列表
|
||
- 系统提示词中没有任何技能信息
|
||
- LLM 无法调用 `execute_skill` 工具
|
||
|
||
**修复**:
|
||
```rust
|
||
// 修复后
|
||
skills_dir: default_skills_dir(), // 使用默认的 ./skills 目录
|
||
```
|
||
|
||
**验证方法**:
|
||
1. 启动应用,发送 "查询腾讯财报"
|
||
2. 预期: LLM 应调用 `execute_skill("finance-tracker", {...})`
|
||
|
||
---
|
||
|
||
### 12.2 待修复问题清单
|
||
|
||
#### 高优先级 (HIGH)
|
||
|
||
| # | 问题 | 文件:行号 | 影响 |
|
||
|---|------|----------|------|
|
||
| H1 | `default_skills_dir()` 依赖 `current_dir()` | `config.rs:161-165` | 工作目录不同时技能加载失败 |
|
||
| H2 | `categorize_skills()` 包含 50+ 硬编码技能 ID | `kernel.rs:173-185` | 新增/重命名技能后分类失效 |
|
||
| H3 | 前端 Hand ID 硬编码在多处 | `automation.ts`, `hands.ts` | Hand 配置变更后前端不一致 |
|
||
|
||
#### 中优先级 (MEDIUM)
|
||
|
||
| # | 问题 | 文件:行号 | 影响 |
|
||
|---|------|----------|------|
|
||
| M1 | 默认模型不一致 | `kernel_commands.rs` vs `config-parser.ts` | `gpt-4o-mini` vs `gpt-4` |
|
||
| M2 | API URL 硬编码在多处 | `config.rs`, `llm/mod.rs`, driver 文件 | 无法统一配置 |
|
||
| M3 | 系统提示词示例硬编码 `finance-tracker` | `kernel.rs:162` | 技能重命名后示例过时 |
|
||
| M4 | 前端存储键硬编码 | `gateway-storage.ts`, 多个 store | 无法自定义前缀 |
|
||
|
||
#### 低优先级 (LOW)
|
||
|
||
| # | 问题 | 文件:行号 | 影响 |
|
||
|---|------|----------|------|
|
||
| L1 | 工具名称有常量但未使用 | `tool.rs:79-90` vs builtin/*.rs | 代码不一致 |
|
||
| L2 | 超时/阈值等配置硬编码 | `compactor.rs`, `heartbeat.rs` | 无法动态调整 |
|
||
| L3 | Tauri 允许来源硬编码 | `lib.rs:97` | 安全配置不灵活 |
|
||
|
||
---
|
||
|
||
### 12.3 硬编码位置详细列表
|
||
|
||
#### 后端 (Rust)
|
||
|
||
| 类别 | 文件 | 内容 |
|
||
|------|------|------|
|
||
| **配置默认值** | `config.rs:200-247` | 9 个 LLM Provider URL |
|
||
| **配置默认值** | `config.rs:285-326` | 8 个 fallback URL |
|
||
| **驱动 URL** | `driver/local.rs:27,31,35` | Ollama/LM Studio/vLLM localhost |
|
||
| **驱动 URL** | `driver/gemini.rs:25` | Google Generative Language API |
|
||
| **驱动 URL** | `driver/anthropic.rs:27` | Anthropic API |
|
||
| **驱动 URL** | `driver/openai.rs:31` | OpenAI API |
|
||
| **模型默认值** | `kernel_commands.rs:43-46` | openai, gpt-4o-mini, 4096, 0.7 |
|
||
| **技能分类** | `kernel.rs:173-185` | 11 个分类,50+ 技能 ID |
|
||
| **阈值配置** | `compactor.rs:38-44` | 15000, 20000, 4000, 6, 800 |
|
||
| **心跳配置** | `heartbeat.rs:36-37` | 30s interval, 5 max alerts |
|
||
| **浏览器** | `browser/commands.rs:63` | localhost:4444 WebDriver |
|
||
| **网关** | `lib.rs:554` | ws://127.0.0.1:4200 |
|
||
|
||
#### 前端 (TypeScript)
|
||
|
||
| 类别 | 文件 | 内容 |
|
||
|------|------|------|
|
||
| **网关 URL** | `gateway-storage.ts:47,51` | 127.0.0.1:50051, 127.0.0.1:4200 |
|
||
| **模型默认值** | `config-parser.ts:77,81-82` | gpt-4, openai |
|
||
| **模型默认值** | `llm-service.ts:57-66` | gpt-4o-mini, doubao-pro-32k |
|
||
| **内核默认值** | `kernel-client.ts:248,340-341` | openai, anthropic, claude-sonnet-4 |
|
||
| **存储键** | 多个 store 文件 | zclaw-*, zclaw-main |
|
||
| **Hand ID** | `automation.ts:49-57,267-279` | 7 个 Hand 映射 |
|
||
| **Hand 定义** | `hands.ts:97-189` | 完整 Hand 定义 |
|
||
| **技能 ID** | `skillMarketStore.ts:304+` | 技能市场定义 |
|
||
|
||
---
|
||
|
||
### 12.4 建议修复方案
|
||
|
||
#### H1: `default_skills_dir()` 改进
|
||
|
||
```rust
|
||
// 当前 (不可靠)
|
||
fn default_skills_dir() -> Option<PathBuf> {
|
||
std::env::current_dir().ok().map(|cwd| cwd.join("skills"))
|
||
}
|
||
|
||
// 建议 (更可靠)
|
||
fn default_skills_dir() -> Option<PathBuf> {
|
||
// 1. 优先使用可执行文件目录
|
||
std::env::current_exe()
|
||
.ok()
|
||
.and_then(|exe| exe.parent().map(|p| p.join("skills")))
|
||
// 2. 回退到当前目录
|
||
.or_else(|| std::env::current_dir().ok().map(|cwd| cwd.join("skills")))
|
||
}
|
||
```
|
||
|
||
#### H2: 技能分类改为动态
|
||
|
||
```rust
|
||
// 当前 (硬编码)
|
||
let category_patterns = [
|
||
("开发工程", vec!["senior-developer", ...]),
|
||
...
|
||
];
|
||
|
||
// 建议 (从 SKILL.md 读取)
|
||
// 在 SKILL.md frontmatter 中添加 category 字段
|
||
// categories:
|
||
// - development
|
||
// 或从目录结构推断
|
||
```
|
||
|
||
#### H3: Hand ID 集中管理
|
||
|
||
```typescript
|
||
// 创建常量文件
|
||
// hands/constants.ts
|
||
export const HAND_IDS = {
|
||
BROWSER: 'browser',
|
||
RESEARCHER: 'researcher',
|
||
COLLECTOR: 'collector',
|
||
...
|
||
} as const;
|
||
|
||
// 所有地方引用常量而非硬编码字符串
|
||
```
|
||
|
||
---
|
||
|
||
### 12.5 验证检查清单
|
||
|
||
修复后需验证:
|
||
|
||
- [ ] 从不同工作目录启动应用,技能仍能正确加载
|
||
- [ ] 新增技能后,系统提示词自动包含
|
||
- [ ] 重命名技能后,分类仍正确(如使用动态分类)
|
||
- [ ] 前端 Hand 配置与后端一致
|
||
|
||
---
|
||
|
||
*本验证计划基于 ZCLAW v0.2.5 代码状态生成*
|