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

11 KiB
Raw Blame History

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. 登录成功,跳转到主聊天界面

验证结果:

  • 登录页面正常渲染表单、按钮、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)

测试操作:

  1. 在 textarea 中输入测试消息
  2. 通过 React nativeInputValueSetter 设置值并触发 input/change 事件
  3. 点击发送按钮aria-label="发送消息"
  4. 等待 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)

测试操作:

  1. 查看侧边栏对话列表
  2. 检查 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)

测试操作:

  1. 检查 localStorage 中 Agent 身份数据
  2. 点击侧边栏"智能体"按钮
  3. 验证 CloneManager 组件是否渲染

验证结果:

  • 5 个 Agent 身份存储在 zclaw-agent-identities
  • 每个 Agent 有完整的三件套: soul + instructions + userProfile
  • Soul 内容完整ZCLAW 人格定义,含核心特质和语气)
  • Instructions 完整(操作规范、记忆管理)
  • UserProfile 初始状态:"尚未收集到用户偏好信息"
  • P1: 侧边栏 "智能体" tab 切换失效 — 点击"智能体"按钮后:
    • 按钮样式变为 activefont-medium class 已添加)
    • 但内容区仍显示 ConversationList 而不是 CloneManager
    • activeTab 状态确实切换到了 'clones'(通过按钮样式确认)
    • 根因: AnimatePresence mode="wait" 可能导致渲染问题,或 CloneManager 组件渲染失败

Soul 内容示例:

# ZCLAW 人格
你是 ZCLAW小龙虾一个基于 OpenClaw 定制的中文 AI 助手。

## 核心特质
- **高效执行**: 你不只是出主意,你会真正动手完成任务
- **中文优先**: 默认使用中文交流,必要时切换英文
- **专业可靠**: 对技术问题给出精确答案,不确定时坦诚说明
- **持续成长**: 你会记住与用户的交互,不断改进自己的服务方式

## 语气
简洁、专业、友好。避免过度客套,直接给出有用信息。

问题:

  • 所有 5 个 Agent 共享相同的 Soul 模板(没有个性化差异)
  • 新创建的 Agent 没有独特的 personality/communicationStyle 设置

T4: 记忆系统 ⚠️ 部分通过 (P2 x1)

测试操作:

  1. 检查 zclaw-intelligence-fallback(本地降级记忆)
  2. 检查 zclaw-agent-memoriesAgent 记忆)
  3. 检查 zclaw-memory-stats(记忆统计)
  4. 检查 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)

测试操作:

  1. 检查自主配置(zclaw-autonomy-config
  2. 检查反思引擎(zclaw-reflection-*
  3. 检查心跳系统(zclaw-heartbeat-*
  4. 检查审计日志(zclaw-autonomy-audit-log
  5. 点击"自动化"按钮,验证 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: 技能市场 通过

测试操作:

  1. 检查 zclaw-skill-index 数据
  2. 点击"技能市场"按钮

验证结果:

  • 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 端口仍未监听。可能原因:

  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/技能执行日志