# 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` extractor 在某些条件下引发 panic | `auth/handlers.rs:65` | | **P0** | GET /usage | 500 | `Option` 绑定到 `$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 - 必须修复(影响核心用户体验) 1. **POST /auth/register 服务器崩溃** - `ConnectInfo` 在 `auth/handlers.rs:65` 引发 panic,需要改用 `Optional` 或移除该 extractor 2. **GET /usage 500 错误** - `model_config/types.rs:148-149` 的 `from/to` 字段为 `Option`,但 SQL 绑定到 `$2::timestamptz`,需改为 `Option` 或在查询中解析 3. **POST /auth/refresh 500 错误** - `refresh_tokens` 表的 `expires_at` 列类型为 TEXT,需迁移为 TIMESTAMPTZ 或在查询中显式转换 4. **Tauri 桌面端 SaaS 平台页加载失败** - 排查 saasStore 连接逻辑,可能是 token 传递或 API 路径问题 5. **Tauri 桌面端 订阅与计费页加载失败** - 同上,与 billing API 交互失败 ### P1 - 应该修复(影响功能完整性) 4. **Knowledge 前端 8 个断链路由** - 前端调了后端不存在的路由,需补齐后端或修正前端 5. **技能管理前端为空** - 75 个 SKILL.md 未加载到桌面端,可能是 Gateway 加载逻辑问题 6. **Model Groups 完整模块未接入前端** - 后端 5 个端点已实现,Admin 无页面 ### P2 - 建议修复(提升产品完成度) 7. **34 个后端路由未接入前端** - 包括 TOTP 2FA、设备管理、配置同步等 8. **积分系统显示"开发中"** - 补齐或隐藏 9. **MCP 服务前端未接入** - 只能手动配置 10. **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 限制),仅截图可用