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
添加了关于管家主动性与行业配置体系的发散探讨文档,包含现状诊断、关键讨论、架构设计等内容。同时添加了测试失败的截图和日志文件。
10 KiB
10 KiB
ZCLAW 端到端功能一致性与完整性验证报告
日期: 2026-04-10 | 验证环境: Tauri 桌面端 (1420) + SaaS 后端 (8080) + Admin V2 (5173)
一、服务状态
| 服务 | 端口 | 状态 |
|---|---|---|
| SaaS 后端 (Axum) | 8080 | ✅ healthy, DB connected |
| Admin V2 (Vite) | 5173 | ✅ running |
| Tauri 桌面端 | 1420 | ✅ running |
二、Tauri 桌面端验证结果
2.1 登录流程
- ✅ SaaS 登录(admin/admin123)成功,返回 JWT + refresh_token
- ✅ 登录后自动跳转到主聊天界面
2.2 主界面 (专业模式)
- ✅ 侧边栏:对话列表 + 智能体面板 + 搜索
- ✅ 聊天区域:流式响应、思考过程展示、工具调用展示 (file_write, shell_exec, 澄清问题)
- ✅ 输入区:文本输入 + 附件 + 模型选择 (kimi-for-coding) + 发送
- ✅ 智能体面板:默认助手 + 创建新 Agent
- ✅ 模式切换:简洁/专业模式正常切换
2.3 设置页面 (19 个分类)
| 设置页 | 状态 | 内容 |
|---|---|---|
| 通用 | ✅ 正常 | Gateway token、简洁/专业模式切换 |
| 用量统计 | ⚠️ 部分 | 6会话/100消息,但 Token 统计为 0 |
| 积分详情 | ❌ 开发中 | 显示"积分系统开发中" |
| 模型与 API | ✅ 正常 | 已连接 Gateway、模型列表、Embedding 配置 |
| MCP 服务 | ⚠️ 未接入 | "新增/删除/详细参数配置尚未在桌面端接入" |
| IM 频道 | ⚠️ 未接入 | 0 个频道,飞书/Discord 等为规划中 |
| 工作区 | ✅ 正常 | 项目目录、文件监听、自动保存 |
| 数据与隐私 | ✅ 正常 | 本地数据路径、备案信息 |
| 安全存储 | ✅ 正常 | Keyring 可用,6 类密钥槽位 |
| SaaS 平台 | ❌ 加载失败 | "SaaS 平台加载失败,请稍后重试" |
| 订阅与计费 | ❌ 加载失败 | "计费信息加载失败,请稍后重试" |
| 技能管理 | ⚠️ 空 | 0 个技能加载,"连接 Gateway 后加载" |
| 语义记忆 | ✅ 正常 | SQLite+FTS5+TF-IDF,0 条记忆,搜索可用 |
| 安全状态 | ✅ 正常 | 评分 94,16 层防护展示 |
| 审计日志 | ✅ 正常 | Live Stream 模式,0 条记录 |
| 定时任务 | ⚠️ 空 | 0 个定时任务 |
| 心跳配置 | ✅ 正常 | 巡检间隔、主动性级别、免打扰、检查项 |
| 提交反馈 | ✅ 存在 | 反馈入口 |
| 关于 | ✅ 正常 | 版本 0.1.0 |
2.4 Tauri 桌面端问题清单
| 严重度 | 问题 | 影响 |
|---|---|---|
| P1 | SaaS 平台页加载失败 | 桌面端无法管理 SaaS 账户 |
| P1 | 订阅与计费页加载失败 | 桌面端无法查看订阅状态 |
| P2 | 积分系统显示"开发中" | 用户看到占位 UI |
| P2 | 技能管理显示 0 个技能 | 75 个 SKILL.md 未加载到前端 |
| P3 | MCP 服务前端未接入 | 只能配置文件手动添加 |
| P3 | IM 频道为规划中 | 功能未实现 |
| P3 | Token 统计为 0 | 用量统计不完整 |
三、SaaS 后端 API 验证结果
3.1 全端点状态总览
| 模块 | 端点数 | 200 OK | 4xx/5xx | 说明 |
|---|---|---|---|---|
| Auth | 10 | 9 | 1 (password 参数错误) | ✅ |
| Account | 11 | 11 | 0 | ✅ |
| Model Config | 13 | 12 | 1 (usage 500) | ⚠️ |
| Relay | 5 | 5 | 0 | ✅ |
| Role | 7 | 7 | 0 | ✅ |
| Prompt | 6 | 6 | 0 | ✅ |
| Agent Template | 9 | 9 | 0 | ✅ |
| Scheduled Task | 5 | 5 | 0 | ✅ |
| Telemetry | 4 | 4 | 0 | ✅ |
| Billing | 10 | 10 | 0 | ✅ |
| Knowledge | 16 | 13 | 3 (422参数错误) | ✅ |
| Migration | 7 | 7 | 0 | ✅ |
| 总计 | 103 | 95 | 8 | 92% 通过 |
3.2 后端问题
| 严重度 | 端点 | 状态码 | 根因 | 修复文件 |
|---|---|---|---|---|
| P0 | POST /auth/register | 连接重置/崩溃 | ConnectInfo<SocketAddr> extractor 在某些条件下引发 panic |
auth/handlers.rs:65 |
| P0 | GET /usage | 500 | Option<String> 绑定到 $2::timestamptz,PostgreSQL 无法隐式转换 |
model_config/types.rs:148-149, service.rs:419 |
| P0 | POST /auth/refresh | 500 | refresh_tokens 表 expires_at 列 TEXT 类型无法转为 TIMESTAMPTZ |
refresh token 相关代码 |
| P3 | POST /knowledge/items/batch | 422 | 参数验证问题 | - |
| P3 | POST /knowledge/items/import | 422 | 参数验证问题 | - |
四、Admin V2 前端-后端集成对比
4.1 统计概览
| 指标 | 数量 |
|---|---|
| 前端定义的 API 调用 | 83 |
| 前端✅匹配后端 | 47 |
| 前端❌调用后端不存在 | 8 |
| 后端⚠️存在但前端未调用 | 34 |
| 有 service 但无页面调用 | ~10 |
4.2 前端调了但后端不存在的路由 (❌ 断链)
| 路径 | 说明 |
|---|---|
| DELETE /knowledge/categories/:id | 后端有 categories 但无单条删除 |
| PUT /knowledge/categories/:id | 后端无单条更新 |
| GET /knowledge/items/:id | 后端无单条查询 |
| DELETE /knowledge/items/:id | 后端无单条删除 |
| POST /knowledge/items/:id/rollback/:version | 后端无版本回滚 |
| PUT /config/items/:id | 后端路由不同,无法单条更新 |
| GET /billing/payments/:id | 后端无单条支付查询 |
| POST /prompts/:name/rollback/:version | 后端有 rollback 但需确认路径 |
4.3 后端存在但前端完全未接入的路由 (⚠️ 开发了没接)
| 路由 | 模块 | 功能 |
|---|---|---|
| POST /auth/register | Auth | 用户注册 |
| PUT /auth/password | Auth | 修改密码 |
| POST /auth/totp/* (3个) | Auth | TOTP 2FA |
| GET /accounts/:id | Account | 账户详情 |
| GET /tokens | Account | Token 管理 |
| GET /devices | Account | 设备管理 |
| GET /model-groups/* (5个) | Model Config | 模型分组管理(整套) |
| POST /keys/:id/rotate | Model Config | Key 轮换 |
| POST /relay/chat/completions | Relay | Chat 代理 |
| GET /relay/models | Relay | 可用模型列表 |
| GET /agent-templates/available | Agent Template | 可用模板 |
| POST /agent-templates/:id/create-agent | Agent Template | 从模板创建 Agent |
| POST /accounts/me/assign-template | Agent Template | 分配模板 |
| GET /prompts/check | Prompt | Prompt 更新检查 |
| GET /billing/usage | Billing | 计费用量 |
| GET /billing/invoices/* | Billing | 发票 PDF |
| POST /config/analysis | Config | 配置分析 |
| POST /config/seed | Config | 配置种子 |
| POST /config/sync | Config | 配置同步 |
| POST /config/diff | Config | 配置差异 |
| GET /config/pull | Config | 配置拉取 |
4.4 空壳/问题页面
| 页面 | 问题 |
|---|---|
| API Keys | service 定义了 CRUD 但无独立页面,路由指向 ModelServices |
| Usage Service | 定义了 daily()/byModel() 但无页面调用,Usage 页用 telemetryService |
| Knowledge | 前端定义了 16 个子功能,部分后端不存在,UI 按钮可能触发 404 |
五、一致性交叉验证
5.1 Tauri 桌面端 vs Admin V2 功能对比
| 功能 | Tauri 桌面端 | Admin V2 | 一致性 |
|---|---|---|---|
| 账户管理 | ❌ SaaS页加载失败 | ✅ Accounts 页完整 CRUD | ❌ 不一致 |
| 模型管理 | ✅ 设置→模型与API | ✅ ModelServices 页完整 | ✅ 一致 |
| 提供商管理 | ✅ 设置→模型与API | ✅ Provider CRUD | ✅ 一致 |
| 订阅/计费 | ❌ 加载失败 | ✅ Billing 页 | ❌ 不一致 |
| 角色权限 | ❌ 无入口 | ✅ Roles 页完整 CRUD | ❌ Admin独有 |
| Prompt 管理 | ❌ 无入口 | ✅ Prompts 页完整 | ❌ Admin独有 |
| 知识库 | ✅ 语义记忆(本地) | ✅ Knowledge 页(SaaS) | ⚠️ 不同实现 |
| 审计日志 | ✅ 有展示 | ✅ Logs 页 | ✅ 一致 |
| 定时任务 | ✅ 有展示 | ✅ ScheduledTasks 页 | ✅ 一致 |
| 技能管理 | ⚠️ 0 个加载 | ❌ 无页面 | ❌ 不一致 |
| MCP 服务 | ⚠️ 未接入 | ❌ 无页面 | ❌ 两端都缺 |
5.2 功能闭环验证
| 闭环流程 | 验证结果 |
|---|---|
| 登录→聊天→流式响应 | ✅ 完整 |
| 登录→设置→配置→生效 | ⚠️ Gateway 配置生效,SaaS 配置失败 |
| Admin→创建账户→桌面端登录 | ✅ 可行(后端已验证) |
| Admin→配置模型→桌面端切换 | ✅ 可行 |
| Admin→管理角色→桌面端生效 | ✅ 可行(RBAC 通过 JWT) |
| Admin→管理 Prompt→桌面端使用 | ⚠️ Prompt 系统未接入桌面端 |
| Admin→知识库→桌面端搜索 | ❌ 两端实现不同(本地 vs SaaS) |
六、优先修复建议
P0 - 必须修复(影响核心用户体验)
- POST /auth/register 服务器崩溃 -
ConnectInfo<SocketAddr>在auth/handlers.rs:65引发 panic,需要改用Optional或移除该 extractor - GET /usage 500 错误 -
model_config/types.rs:148-149的from/to字段为Option<String>,但 SQL 绑定到$2::timestamptz,需改为Option<chrono::DateTime>或在查询中解析 - POST /auth/refresh 500 错误 -
refresh_tokens表的expires_at列类型为 TEXT,需迁移为 TIMESTAMPTZ 或在查询中显式转换 - Tauri 桌面端 SaaS 平台页加载失败 - 排查 saasStore 连接逻辑,可能是 token 传递或 API 路径问题
- Tauri 桌面端 订阅与计费页加载失败 - 同上,与 billing API 交互失败
P1 - 应该修复(影响功能完整性)
- Knowledge 前端 8 个断链路由 - 前端调了后端不存在的路由,需补齐后端或修正前端
- 技能管理前端为空 - 75 个 SKILL.md 未加载到桌面端,可能是 Gateway 加载逻辑问题
- Model Groups 完整模块未接入前端 - 后端 5 个端点已实现,Admin 无页面
P2 - 建议修复(提升产品完成度)
- 34 个后端路由未接入前端 - 包括 TOTP 2FA、设备管理、配置同步等
- 积分系统显示"开发中" - 补齐或隐藏
- MCP 服务前端未接入 - 只能手动配置
- Usage Service 空壳 - service 定义了但无页面使用
七、验证方法说明
- Tauri 桌面端: 通过 Tauri MCP (Chrome DevTools Protocol) 进行 DOM 交互、截图、JS 执行验证
- SaaS 后端: 通过 curl 对全部 103 个 API 端点进行 HTTP 状态码验证
- Admin V2: 通过代码分析(services/.ts + pages/.tsx)对比后端路由定义(crates/zclaw-saas/src/*/mod.rs)
- Admin V2 浏览器验证: Tauri MCP 在 Admin V2 (5173) 上 DOM 查询超时(疑似 Vite HMR CSP 限制),仅截图可用