运行时可观测性:
- 新增 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 补充蓝图驱动开发规范
3.7 KiB
3.7 KiB
运行时可观测性
为炼境建立运行时诊断层。当 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)
- db.rs 新增 runtime_logs 表:
✅ 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.rs:inject/remove 成功/失败 → log_event("mcp_inject", "info"/"error", context 含 project_id + group_id)
- commands/groups.rs:add_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 + messagerecent_errors:最近 20 条 level=error/warn 的日志(ts + category + message)
- 响应为 Markdown 格式文本,Claude 可直接阅读
- tools/list 新增
✅ 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 显示错误信息
- add_group_member command 返回
✅ 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_healthTauri command:尝试 HTTP GEThttp://localhost:{port}/health,返回{ ok: bool, latency_ms: u64, error: Option<String> } - 设置页 MCP 区块:挂载时自动调用一次,显示真实状态(绿色"运行中 {latency}ms" / 红色"端口未响应: {error}")
- 端口保存后自动重新检查
- 新增
决策记录
- runtime_logs 存 SQLite 而非内存,炼境重启后仍可查历史注入记录
- get_diagnostics 返回 Markdown 而非 JSON,Claude 读取更自然,无需额外解析
- T4 只改 add_group_member,remove 失败影响较小(幂等清理),不做 UI 反馈
- 表上限 500 条:足够覆盖数天的操作记录,不会无限膨胀