dev-manager-tauri/.blueprint/modules/runtime-diagnostics.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

3.7 KiB
Raw Permalink Blame History

运行时可观测性

为炼境建立运行时诊断层。当 Claude 需要排查功能状态时,可以通过 MCP 工具直接拿到结构化的真实数据,而不是靠读代码推断。

设计思路

运行时事件(启动/注入/调用/报错)
        ↓
  SQLite runtime_logs 表(持久化)
        ↓
  MCP get_diagnostics 工具Claude 可调用)
        ↓
  Claude 得到结构化诊断数据 → 精准定位问题

同时修复两个已知的 UI 盲点:

  • 设置页 MCP 状态硬编码为"运行中",不反映真实端口状态
  • 产品组成员注入失败时前端无感知toast 始终显示成功

任务卡

T1 · SQLite runtime_logs 表

  • status: done
  • complexity: S
  • files: src-tauri/src/db.rs, src-tauri/src/lib.rs
  • acceptance:
    • db.rs 新增 runtime_logs 表:(id, ts TEXT, category TEXT, level TEXT, message TEXT, context TEXT)
    • 提供全局 log_event(category, level, message, context_json) 函数,内部 get pool 写入
    • 表保留最近 500 条(写入时超出自动删除最旧的)
    • db::init() 中建表IF NOT EXISTS

T2 · 替换 eprintln! 为结构化日志

  • status: done
  • complexity: S
  • files: src-tauri/src/mcp_server.rs, src-tauri/src/mcp_inject.rs, src-tauri/src/commands/groups.rs
  • depends: T1
  • acceptance:
    • mcp_server.rs端口绑定成功/失败 → log_event("mcp_server", "info"/"error", ...)
    • mcp_inject.rsinject/remove 成功/失败 → log_event("mcp_inject", "info"/"error", context 含 project_id + group_id)
    • commands/groups.rsadd_group_member 注入失败 → log_event("mcp_inject", "warn", ...)
    • 保留 eprintln! 作为备份输出log_event 写入失败时不 panic

T3 · MCP Server 新增 get_diagnostics 工具

  • status: done
  • complexity: M
  • files: src-tauri/src/mcp_server.rs
  • depends: T1, T2
  • acceptance:
    • tools/list 新增 get_diagnostics 工具,无必填参数
    • 返回结构:
      • server:端口号、进程启动时间(从全局 OnceCell 记录)
      • inject_summary:从 runtime_logs 聚合每个 project_id 最后一次注入的 level + message
      • recent_errors:最近 20 条 level=error/warn 的日志ts + category + message
    • 响应为 Markdown 格式文本Claude 可直接阅读

T4 · 注入失败结果返回前端

  • status: done
  • complexity: S
  • files: src-tauri/src/commands/groups.rs, src/components/manage/ManagePage.tsx
  • depends: T2
  • acceptance:
    • add_group_member command 返回 { ok: bool, inject_warning: Option<String> }
    • 前端 AddMemberModal注入成功 → 绿色 toast "成员已添加MCP 已注入"inject_warning 有值 → 黄色 toast 显示警告内容
    • 产品组成员卡片inject 最后一次为 error/warn → 橙色 ⚠ MCP 徽标替代绿点hover 显示错误信息

T5 · 设置页 MCP 真实健康检查

  • status: done
  • complexity: S
  • files: src-tauri/src/commands/settings.rs, src/lib/commands.ts, src/components/settings/SettingsPage.tsx
  • depends: T1
  • acceptance:
    • 新增 check_mcp_health Tauri command尝试 HTTP GET http://localhost:{port}/health,返回 { ok: bool, latency_ms: u64, error: Option<String> }
    • 设置页 MCP 区块:挂载时自动调用一次,显示真实状态(绿色"运行中 {latency}ms" / 红色"端口未响应: {error}"
    • 端口保存后自动重新检查

决策记录

  • runtime_logs 存 SQLite 而非内存,炼境重启后仍可查历史注入记录
  • get_diagnostics 返回 Markdown 而非 JSONClaude 读取更自然,无需额外解析
  • T4 只改 add_group_memberremove 失败影响较小(幂等清理),不做 UI 反馈
  • 表上限 500 条:足够覆盖数天的操作记录,不会无限膨胀