dev-manager-tauri/.blueprint/modules/health-center.md
lanrtop eb346ae1fd feat: add runtime diagnostics, health center, and project mentor
运行时可观测性:
- 新增 runtime_logs SQLite 表,提供全局 log_event 写入函数(保留最近 500 条)
- mcp_server/mcp_inject/groups 关键路径接入结构化日志
- MCP 新增 get_diagnostics 工具,返回注入摘要与近期错误
- add_group_member 注入失败时前端显示黄色 toast 警告

健康中心:
- 新增 run_health_check 命令(6 项并行检查:MCP/Git 路径/项目路径/GitHub Token/编辑器/DB 延迟)
- 新增质量指标聚合(休眠项目/孤立项目/注入异常组/无路径项目)
- 侧边栏新增健康中心页面,支持手动刷新和诊断报告复制
- 设置页 MCP 状态改为真实 HTTP ping 检测

项目导师:
- 新增 get_mentor_context 后端命令,聚合健康状态/蓝图摘要/近期错误
- MCP 新增 get_project_mentor_context 工具(含产品组归属校验)
- 项目卡片底部新增 🎓 导师按钮,面板支持复制结构化 Markdown 报告
- 修复 WSL 项目路径识别:wsl_path 存 UNC 格式时自动提取 distro 和 Linux 路径,改用 wsl 命令检查路径存在性(规避 Path::exists() 对 \wsl.localhost\... 不可靠的问题)

AI 工作流:
- 新增 AI-WORKFLOW.md、.claude/skills/ 技能体系配置
- 更新 CLAUDE.md 补充蓝图驱动开发规范
2026-04-04 19:58:49 +09:00

91 lines
4.1 KiB
Markdown
Raw Permalink 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.

# 健康中心
呈现炼境核心功能的运行状态与质量分析。分两层代码层做客观健康检查Claude 层做质量推断与优化建议。
## 设计思路
```
Tauri 命令层(客观检测)
├─ Git 仓库路径有效性
├─ 项目本地路径存在性
├─ GitHub Token 有效性
├─ 编辑器路径可用性
└─ SQLite 读写延迟
↓ 聚合为 HealthReport
前端健康中心页面(展示 + 交互)
├─ 每项检查:绿/黄/红状态指示
├─ 质量指标:休眠项目、孤立项目、注入异常组
└─ "生成诊断报告" → 复制结构化 Markdown
↓ 用户粘贴给 Claude / 未来 in-app API
Claude 分析层(推断 + 建议)
└─ 读数据 → 识别模式 → 给出优化建议
```
MCP 路径同步增强:扩展已有 `get_diagnostics` 工具,覆盖全部检查项,让 Claude Code 用户无需打开页面即可获得完整诊断。
## 任务卡
### ✅ T1 · Backend 健康检查聚合命令
- status: done
- complexity: M
- files: src-tauri/src/commands/settings.rs, src-tauri/src/lib.rs, src/lib/commands.ts
- acceptance:
- 新增 `run_health_check` Tauri command无必填参数
- 检查项(全部并行执行,超时 5s
- `git_repos`:遍历所有注册仓库,验证 `win_path` 是否为有效 git 目录(`.git` 存在)
- `project_paths`:遍历所有项目,检查 `win_path` / `wsl_path` 是否存在于文件系统
- `github_token`:若 settings 中有 token`https://api.github.com/user` 验证有效性
- `editor_paths`:读取 settings 中配置的编辑器路径,验证文件是否存在
- `db_latency`:计时一次简单写入+删除,返回 ms 数
- 返回结构:`HealthReport { checked_at, items: Vec<HealthItem { id, name, status, detail }> }`
- `status` 枚举:`ok / warn / error / skip`skip 表示未配置该项,不算失败)
### ✅ T2 · 质量指标聚合
- status: done
- complexity: S
- files: src-tauri/src/commands/settings.rs, src/lib/commands.ts
- depends: T1
- acceptance:
- `run_health_check` 返回值中追加 `quality: QualityMetrics`
- 指标:
- `dormant_projects``last_push_at` 超过 30 天且有 repo_url 的项目列表id + name + days
- `orphaned_projects`:未加入任何产品组且无 repo_url 的项目列表
- `groups_with_inject_warn`runtime_logs 中最近有 error/warn 的产品组列表
- `projects_without_path`win_path 和 wsl_path 均为空的项目数
- 所有指标从已有 SQLite 数据计算,无需新表
### ✅ T3 · 前端健康中心页面
- status: done
- complexity: M
- files: src/components/health/HealthPage.tsx, src/components/layout/Sidebar.tsx, src/lib/commands.ts
- depends: T1, T2
- acceptance:
- 侧边栏新增"健康中心"入口(脉搏图标),路由到 HealthPage
- 页面布局:顶部"上次检查时间 + 刷新",下方两列
- 左列:健康检查项列表,每项显示状态图标 + 名称 + 详情文字
- 右列:质量指标卡片(休眠项目数、孤立项目数、注入异常组数)
- 每项 `error` 状态展开显示具体失败原因
- "生成诊断报告"按钮:将 HealthReport 格式化为 Markdown 复制到剪贴板
- 页面挂载时自动执行一次检查,支持手动刷新
### ✅ T4 · 扩展 MCP get_diagnostics
- status: done
- complexity: S
- files: src-tauri/src/mcp_server.rs
- depends: T1, T2
- acceptance:
- `get_diagnostics` MCP 工具调用 `run_health_check` 聚合数据(复用逻辑,不重复实现)
- 返回 Markdown 追加"系统健康"和"质量指标"两节
- Claude Code 用户对话"帮我看下炼境状态"时可直接获得完整报告
## 决策记录
- 不在应用内直接调用 Anthropic API需要用户填 API Key增加配置成本优先做"复制报告"路径,让用户自行粘贴给 Claude
- `run_health_check` 独立于 `check_mcp_health`,后者只查 MCP前者是全局聚合
- 所有检查并行执行tokio::join!),单项超时 5s不阻塞整体
- 质量指标从已有数据计算,不引入新的数据采集,保持实现简单