# 健康中心

呈现炼境核心功能的运行状态与质量分析。分两层：代码层做客观健康检查，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，不阻塞整体
- 质量指标从已有数据计算，不引入新的数据采集，保持实现简单
