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
11 KiB
11 KiB
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 |
详细测试结果
登录系统 ✅ 通过
测试操作:
- 启动应用后显示 SaaS 登录页面(用户名/密码表单)
- 输入
admin / admin123,点击登录 - 登录成功,跳转到主聊天界面
验证结果:
- 登录页面正常渲染(表单、按钮、Logo)
- 用户名密码输入正常
- SaaS 后端(8080 端口)响应正常
- 登录成功后
isLoggedIn状态更新 - Cookie/Token 持久化到 localStorage(加密存储
enc_zclaw-saas-token) - 会话恢复机制(
restoreSession)存在
状态数据:
{
"connectionMode": "saas",
"saasUrl": "http://127.0.0.1:8080",
"username": "admin",
"tokenStorage": "encrypted (AES)"
}
T1: 聊天核心功能 ⚠️ 部分通过 (P0 x1)
测试操作:
- 在 textarea 中输入测试消息
- 通过 React nativeInputValueSetter 设置值并触发 input/change 事件
- 点击发送按钮(aria-label="发送消息")
- 等待 LLM 流式响应
验证结果:
- Textarea 输入框正常渲染,placeholder "今天我能为你做些什么?"
- React 受控组件输入正常(需用 nativeInputValueSetter)
- 发送按钮在空输入时 disabled,有内容时 enabled
- 消息发送后 textarea 自动清空
- 思考模式(Thinking)已启用
- 当前模型显示:
glm-4-flash - P0: LLM 响应 500 错误 — 发送消息后收到
API error 500 Internal Server Error: {"error":"INTERNAL_ERROR","message":"服务内部错误"} - 历史消息中有成功回复("收到"),说明 LLM 调用链路本身是通的
LLM 调用链路:
用户输入 → KernelClient → SaaS Relay (8080) → GLM API → 流式响应
错误日志:
[KernelClient] Stream error: LLM error: API error 500 Internal Server Error
流式存储状态:
{ "chatMode": "thinking" }
T2: 会话管理 ⚠️ 部分通过 (P1 x1)
测试操作:
- 查看侧边栏对话列表
- 检查 localStorage 中的对话存储
验证结果:
- 侧边栏显示对话列表("你叫什么名字 — 2小时前5条消息")
- 对话搜索框存在(placeholder "搜索对话...")
- "新对话" 按钮存在(2个位置:顶部和主内容区)
- P1: 消息持久化位置不明 —
zclaw-chat-storage为{state:{}, version:0},但页面上能看到历史消息- 消息可能存储在 IndexedDB 或内存中
- 刷新页面后消息是否能恢复未验证
存储数据:
{
"zclaw-chat-storage": "{\"state\":{},\"version\":0}",
"zclaw-stream-storage": "{\"state\":{\"chatMode\":\"thinking\"}}"
}
T3: Agent 人格系统 ⚠️ 部分通过 (P1 x1)
测试操作:
- 检查 localStorage 中 Agent 身份数据
- 点击侧边栏"智能体"按钮
- 验证 CloneManager 组件是否渲染
验证结果:
- 5 个 Agent 身份存储在
zclaw-agent-identities - 每个 Agent 有完整的三件套:
soul+instructions+userProfile - Soul 内容完整(ZCLAW 人格定义,含核心特质和语气)
- Instructions 完整(操作规范、记忆管理)
- UserProfile 初始状态:"尚未收集到用户偏好信息"
- P1: 侧边栏 "智能体" tab 切换失效 — 点击"智能体"按钮后:
- 按钮样式变为 active(font-medium class 已添加)
- 但内容区仍显示 ConversationList 而不是 CloneManager
activeTab状态确实切换到了 'clones'(通过按钮样式确认)- 根因: AnimatePresence mode="wait" 可能导致渲染问题,或 CloneManager 组件渲染失败
Soul 内容示例:
# ZCLAW 人格
你是 ZCLAW(小龙虾),一个基于 OpenClaw 定制的中文 AI 助手。
## 核心特质
- **高效执行**: 你不只是出主意,你会真正动手完成任务
- **中文优先**: 默认使用中文交流,必要时切换英文
- **专业可靠**: 对技术问题给出精确答案,不确定时坦诚说明
- **持续成长**: 你会记住与用户的交互,不断改进自己的服务方式
## 语气
简洁、专业、友好。避免过度客套,直接给出有用信息。
问题:
- 所有 5 个 Agent 共享相同的 Soul 模板(没有个性化差异)
- 新创建的 Agent 没有独特的 personality/communicationStyle 设置
T4: 记忆系统 ⚠️ 部分通过 (P2 x1)
测试操作:
- 检查
zclaw-intelligence-fallback(本地降级记忆) - 检查
zclaw-agent-memories(Agent 记忆) - 检查
zclaw-memory-stats(记忆统计) - 检查
zclaw-memory-graph(记忆图谱过滤器)
验证结果:
- Fallback 记忆: 4 条,存储在 localStorage
- Agent 记忆: 3 条任务类型记忆
- 记忆统计: 4 entries, 1337 bytes
- 记忆图谱过滤器支持 5 种类型: fact/preference/lesson/context/task
- 记忆图谱有 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)
测试操作:
- 检查自主配置(
zclaw-autonomy-config) - 检查反思引擎(
zclaw-reflection-*) - 检查心跳系统(
zclaw-heartbeat-*) - 检查审计日志(
zclaw-autonomy-audit-log) - 点击"自动化"按钮,验证 Pipeline 列表
验证结果:
- 自主等级:
autonomous(最高级别) - 所有自主操作均已启用:
- memoryAutoSave: true
- identityAutoUpdate: true
- skillAutoInstall: true
- selfModification: true
- autoCompaction: true
- autoReflection: true
- 反思引擎配置完整:
- 每 5 次对话触发
- 允许修改 Soul
- 需要用户批准
- 支持 LLM 增强分析
- 反思历史: 8 条记录
- 反思状态: 距上次反思已过 2 次对话
- 心跳系统: 已启用,30 分钟间隔,3 个检查项
- 待办任务检查
- 记忆健康检查
- 空闲问候
- Pipeline 模板: 15 个,支持 7 个行业分类
- 自动化面板 UI 渲染正常(Pipeline/Hands/Workflows 三个标签)
- P2: 审计日志单一 — 6 条日志全部是
reflection_run,没有 Hands 触发或技能执行记录- 可能是因为没有触发过 Hands
- 也可能是审计日志记录不完整
Prompt Cache 验证:
已缓存 3 个 prompt 模板:
- reflection: 反思引擎系统提示
- compaction: 上下文压缩提示
- extraction: 记忆提取提示
T6: 技能市场 ✅ 通过
测试操作:
- 检查
zclaw-skill-index数据 - 点击"技能市场"按钮
验证结果:
- 12 个技能已安装
- 覆盖 8 个分类
- 每个技能有 5-6 个触发器
- 技能列表:
技能 分类 触发器数 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 端口仍未监听。可能原因:
- Cargo 需要重新编译才能识别新 feature(增量编译可能跳过)
dev_server::start_dev_server()可能在绑定端口时失败但静默吞掉了错误- 需要完全重新构建:
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/技能执行日志 |