Files
zclaw_openfang/docs/superpowers/reports/2026-04-05-tauri-functional-test-report.md
iven f9e1ce1d6e
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
docs: add Tauri functional test report with P0-P2 findings
2026-04-05 22:03:14 +08:00

317 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ZCLAW Tauri 端功能测试报告
**日期:** 2026-04-05
**测试环境:** Windows 11, Tauri 2.x, React 19, pnpm start:dev
**测试方法:** UI 交互 + JS 注入探针 + localStorage/Store 数据验证
**测试人员:** Claude (自动化)
---
## 测试总结
| 模块 | 状态 | P0 | P1 | P2 | 备注 |
|------|------|----|----|-----|------|
| T1 聊天核心 | ⚠️ 部分通过 | 1 | 0 | 0 | LLM 500 错误导致消息发送失败 |
| T2 会话管理 | ⚠️ 部分通过 | 0 | 1 | 0 | 消息持久化位置不明 |
| T3 Agent 人格 | ⚠️ 部分通过 | 0 | 1 | 0 | 侧边栏切换 Bug |
| T4 记忆系统 | ⚠️ 部分通过 | 0 | 0 | 1 | 记忆去重缺失 |
| T5 自动化 | ✅ 通过 | 0 | 0 | 1 | 审计日志单一 |
| T6 技能市场 | ✅ 通过 | 0 | 0 | 0 | 12 个技能正常 |
| 登录系统 | ✅ 通过 | 0 | 0 | 0 | SaaS 登录正常 |
| **总计** | | **1** | **2** | **2** | |
---
## 详细测试结果
### 登录系统 ✅ 通过
**测试操作:**
1. 启动应用后显示 SaaS 登录页面(用户名/密码表单)
2. 输入 `admin / admin123`,点击登录
3. 登录成功,跳转到主聊天界面
**验证结果:**
- [x] 登录页面正常渲染表单、按钮、Logo
- [x] 用户名密码输入正常
- [x] SaaS 后端8080 端口)响应正常
- [x] 登录成功后 `isLoggedIn` 状态更新
- [x] Cookie/Token 持久化到 localStorage加密存储 `enc_zclaw-saas-token`
- [x] 会话恢复机制(`restoreSession`)存在
**状态数据:**
```json
{
"connectionMode": "saas",
"saasUrl": "http://127.0.0.1:8080",
"username": "admin",
"tokenStorage": "encrypted (AES)"
}
```
---
### T1: 聊天核心功能 ⚠️ 部分通过 (P0 x1)
**测试操作:**
1. 在 textarea 中输入测试消息
2. 通过 React nativeInputValueSetter 设置值并触发 input/change 事件
3. 点击发送按钮aria-label="发送消息"
4. 等待 LLM 流式响应
**验证结果:**
- [x] Textarea 输入框正常渲染placeholder "今天我能为你做些什么?"
- [x] React 受控组件输入正常(需用 nativeInputValueSetter
- [x] 发送按钮在空输入时 disabled有内容时 enabled
- [x] 消息发送后 textarea 自动清空
- [x] 思考模式Thinking已启用
- [x] 当前模型显示: `glm-4-flash`
- [ ] **P0: LLM 响应 500 错误** — 发送消息后收到 `API error 500 Internal Server Error: {"error":"INTERNAL_ERROR","message":"服务内部错误"}`
- [x] 历史消息中有成功回复("收到"),说明 LLM 调用链路本身是通的
**LLM 调用链路:**
```
用户输入 → KernelClient → SaaS Relay (8080) → GLM API → 流式响应
```
**错误日志:**
```
[KernelClient] Stream error: LLM error: API error 500 Internal Server Error
```
**流式存储状态:**
```json
{ "chatMode": "thinking" }
```
---
### T2: 会话管理 ⚠️ 部分通过 (P1 x1)
**测试操作:**
1. 查看侧边栏对话列表
2. 检查 localStorage 中的对话存储
**验证结果:**
- [x] 侧边栏显示对话列表("你叫什么名字 — 2小时前5条消息"
- [x] 对话搜索框存在placeholder "搜索对话..."
- [x] "新对话" 按钮存在2个位置顶部和主内容区
- [ ] **P1: 消息持久化位置不明**`zclaw-chat-storage``{state:{}, version:0}`,但页面上能看到历史消息
- 消息可能存储在 IndexedDB 或内存中
- 刷新页面后消息是否能恢复未验证
**存储数据:**
```json
{
"zclaw-chat-storage": "{\"state\":{},\"version\":0}",
"zclaw-stream-storage": "{\"state\":{\"chatMode\":\"thinking\"}}"
}
```
---
### T3: Agent 人格系统 ⚠️ 部分通过 (P1 x1)
**测试操作:**
1. 检查 localStorage 中 Agent 身份数据
2. 点击侧边栏"智能体"按钮
3. 验证 CloneManager 组件是否渲染
**验证结果:**
- [x] 5 个 Agent 身份存储在 `zclaw-agent-identities`
- [x] 每个 Agent 有完整的三件套: `soul` + `instructions` + `userProfile`
- [x] Soul 内容完整ZCLAW 人格定义,含核心特质和语气)
- [x] Instructions 完整(操作规范、记忆管理)
- [x] UserProfile 初始状态:"尚未收集到用户偏好信息"
- [ ] **P1: 侧边栏 "智能体" tab 切换失效** — 点击"智能体"按钮后:
- 按钮样式变为 activefont-medium class 已添加)
- 但内容区仍显示 ConversationList 而不是 CloneManager
- `activeTab` 状态确实切换到了 'clones'(通过按钮样式确认)
- **根因**: AnimatePresence mode="wait" 可能导致渲染问题,或 CloneManager 组件渲染失败
**Soul 内容示例:**
```markdown
# ZCLAW 人格
你是 ZCLAW小龙虾一个基于 OpenClaw 定制的中文 AI 助手。
## 核心特质
- **高效执行**: 你不只是出主意,你会真正动手完成任务
- **中文优先**: 默认使用中文交流,必要时切换英文
- **专业可靠**: 对技术问题给出精确答案,不确定时坦诚说明
- **持续成长**: 你会记住与用户的交互,不断改进自己的服务方式
## 语气
简洁、专业、友好。避免过度客套,直接给出有用信息。
```
**问题:**
- 所有 5 个 Agent 共享相同的 Soul 模板(没有个性化差异)
- 新创建的 Agent 没有独特的 personality/communicationStyle 设置
---
### T4: 记忆系统 ⚠️ 部分通过 (P2 x1)
**测试操作:**
1. 检查 `zclaw-intelligence-fallback`(本地降级记忆)
2. 检查 `zclaw-agent-memories`Agent 记忆)
3. 检查 `zclaw-memory-stats`(记忆统计)
4. 检查 `zclaw-memory-graph`(记忆图谱过滤器)
**验证结果:**
- [x] Fallback 记忆: 4 条,存储在 localStorage
- [x] Agent 记忆: 3 条任务类型记忆
- [x] 记忆统计: 4 entries, 1337 bytes
- [x] 记忆图谱过滤器支持 5 种类型: fact/preference/lesson/context/task
- [x] 记忆图谱有 minImportance 和 dateRange 过滤
- [ ] **P2: 记忆去重缺失** — 同一内容 "用户偏好: 不用进行人格设置么" 重复存储 4 次ID 不同)
- 时间戳递增说明是多次独立写入
- 缺少基于内容的去重检查
**记忆数据:**
```
Fallback 记忆 (4条):
- mem_...a0s5z9: "用户偏好: 不用进行人格设置么" (preference)
- mem_...pbx96r: "用户偏好: 不用进行人格设置么" (preference) ← 重复
- mem_...q6rqwo: "用户偏好: 不用进行人格设置么" (preference) ← 重复
- mem_...u8mger: "用户偏好: 不用进行人格设置么" (preference) ← 重复
Agent 记忆 (3条):
- "帮我起草一份产品需求文档" (task)
- "帮我写一个 Python 脚本处理 Excel 文件" (task)
- "帮我梳理服饰公司的业务SOP" (task)
```
---
### T5: 自动化系统 ✅ 通过 (P2 x1)
**测试操作:**
1. 检查自主配置(`zclaw-autonomy-config`
2. 检查反思引擎(`zclaw-reflection-*`
3. 检查心跳系统(`zclaw-heartbeat-*`
4. 检查审计日志(`zclaw-autonomy-audit-log`
5. 点击"自动化"按钮,验证 Pipeline 列表
**验证结果:**
- [x] 自主等级: `autonomous`(最高级别)
- [x] 所有自主操作均已启用:
- memoryAutoSave: true
- identityAutoUpdate: true
- skillAutoInstall: true
- selfModification: true
- autoCompaction: true
- autoReflection: true
- [x] 反思引擎配置完整:
- 每 5 次对话触发
- 允许修改 Soul
- 需要用户批准
- 支持 LLM 增强分析
- [x] 反思历史: 8 条记录
- [x] 反思状态: 距上次反思已过 2 次对话
- [x] 心跳系统: 已启用30 分钟间隔3 个检查项
- 待办任务检查
- 记忆健康检查
- 空闲问候
- [x] Pipeline 模板: 15 个,支持 7 个行业分类
- [x] 自动化面板 UI 渲染正常Pipeline/Hands/Workflows 三个标签)
- [ ] **P2: 审计日志单一** — 6 条日志全部是 `reflection_run`,没有 Hands 触发或技能执行记录
- 可能是因为没有触发过 Hands
- 也可能是审计日志记录不完整
**Prompt Cache 验证:**
```
已缓存 3 个 prompt 模板:
- reflection: 反思引擎系统提示
- compaction: 上下文压缩提示
- extraction: 记忆提取提示
```
---
### T6: 技能市场 ✅ 通过
**测试操作:**
1. 检查 `zclaw-skill-index` 数据
2. 点击"技能市场"按钮
**验证结果:**
- [x] 12 个技能已安装
- [x] 覆盖 8 个分类
- [x] 每个技能有 5-6 个触发器
- [x] 技能列表:
| 技能 | 分类 | 触发器数 |
|------|------|----------|
| Code Review | development | 5 |
| Frontend Developer | development | 6 |
| Backend Architect | development | 5 |
| Security Engineer | security | 5 |
| Data Analysis | analytics | 5 |
| Chinese Writing | content | 5 |
| DevOps Automator | ops | 6 |
| Senior PM | management | 5 |
| Git Operations | development | 6 |
| API Tester | testing | 5 |
| Finance Tracker | business | 5 |
| Social Media Strategist | marketing | 6 |
---
## 额外发现
### 环境信息
| 项目 | 值 |
|------|-----|
| 运行时 | Tauri (桌面端) |
| 连接模式 | SaaS relay |
| SaaS 后端 | http://127.0.0.1:8080 (运行中) |
| Dev Server | 端口 50051 (未监听) |
| MCP 插件 | 端口 4000 (未监听) |
| 当前模型 | glm-4-flash |
| 用户 | admin |
### 已知但未测试的功能
- [ ] 新建对话流程(点击"新对话"后的完整流程)
- [ ] 切换对话(点击侧边栏不同对话)
- [ ] 删除对话
- [ ] 创建新 Agent因 CloneManager 未渲染无法测试)
- [ ] Agent 人格编辑
- [ ] 记忆搜索功能
- [ ] Pipeline 运行
- [ ] Hand 触发执行
- [ ] 技能安装/卸载
- [ ] 模型切换(点击 glm-4-flash 按钮)
### Dev Server 端口 50051 问题
`dev-server` feature 已添加到 `tauri:dev` 命令(本次测试中修改了 `desktop/package.json`),但重启后 50051 端口仍未监听。可能原因:
1. Cargo 需要重新编译才能识别新 feature增量编译可能跳过
2. `dev_server::start_dev_server()` 可能在绑定端口时失败但静默吞掉了错误
3. 需要完全重新构建:`cargo clean && pnpm start:dev`
---
## 缺陷清单
### P0 (阻塞性)
| ID | 模块 | 描述 | 复现步骤 |
|----|------|------|----------|
| P0-1 | T1 聊天 | SaaS relay 模式下 glm-4-flash 偶发 500 错误 | 发送消息后 LLM 返回 INTERNAL_ERROR |
### P1 (严重)
| ID | 模块 | 描述 | 复现步骤 |
|----|------|------|----------|
| P1-1 | T3 Agent | 侧边栏"智能体"tab 切换后内容区不更新 | 点击"智能体"按钮 → 内容区仍显示对话列表 |
| P1-2 | T2 会话 | 消息持久化位置不明确 | 检查 zclaw-chat-storage 为空,但页面有历史消息 |
### P2 (一般)
| ID | 模块 | 描述 | 复现步骤 |
|----|------|------|----------|
| P2-1 | T4 记忆 | 记忆写入无去重 | 多次对话产生相同内容的重复记忆 |
| P2-2 | T5 自动化 | 审计日志仅记录反思运行 | 无 Hands/技能执行日志 |