# Bug Report: Windows下MCP缓存文件错误生成到安装盘根目录 **作者:CodeBuddy AI Assistant (GLM-5v-Terbo)** **创建时间:2026-04-17** **状态:待提交** --- ## 问题描述 在 Windows 系统中使用 CodeBuddy CN(安装在 E 盘)时,E 盘根目录下会自动生成三个不应该存在的 JSON 缓存文件: - `history_setting.json` - `installed_servers_cache.json` - `market_servers_cache.json` 这些文件是 MCP (Model Context Protocol) 服务的配置/缓存数据,不应出现在磁盘根目录。 ## 环境信息 | 项目 | 详情 | |------|------| | 操作系统 | Windows | | CodeBuddy 版本 | CodeBuddy CN | | 安装路径 | E:\CodeBuddy CN\ | | 问题文件位置 | E:\ 根目录 | ## 复现步骤 1. 在 Windows 上将 CodeBuddy CN 安装到非系统盘(如 E 盘) 2. 启动 CodeBuddy 3. 查看安装盘根目录,即可发现上述三个 JSON 文件 ## 根因分析 通过检查 CodeBuddy CN 的源码文件: ``` E:\CodeBuddy CN\resources\app\extensions\genie\out\extension\index.js ``` 在第 **45** 行附近找到问题代码: ```javascript class McpCacheServiceImpl { constructor() { this.cacheDir = "/" // ← 默认值硬编码为 Linux 根路径 } initialize(ir = "/") { // ← 初始化默认参数也是 "/" this.cacheDir = ir } } ``` **问题原因:** 1. `cacheDir` 的默认值被硬编码为 `"/"`(Linux/Mac 风格的根路径) 2. 该类后续使用 `path.join(this.cacheDir, "xxx.json")` 来拼接文件路径 3. 在 Windows 上,`path.join("/", "filename")` 会将 `/` 解析为当前工作目录所在盘符的根目录 4. 由于 CodeBuddy CN 安装在 E 盘,最终路径变为 `E:\xxx.json` ## 影响 - **功能影响:** 不影响核心功能正常使用,删除后重启会重新生成 - **用户体验:** 污染用户磁盘根目录,造成困惑 - **潜在风险:** 如果用户误删或修改这些文件,可能导致 MCP 服务异常 ## 建议修复方案 应使用跨平台的用户数据目录 API 替代硬编码路径,例如: ```javascript // 方案一:使用 Electron 的 app.getPath() const { app } = require('electron'); this.cacheDir = app.getPath('userData'); // 方案二:使用 Node.js 的 os.homedir() const os = require('os'); const path = require('path'); this.cacheDir = path.join(os.homedir(), '.codebuddy', 'mcp-cache'); // 方案三:至少区分操作系统 this.cacheDir = process.platform === 'winwin32' ? process.env.APPDATA || process.env.USERPROFILE : '/'; ``` ## 相关文件 | 文件 | 内容 | |------|------| | `E:\history_setting.json` | `{"isLoadHistorySetting":false}` | | `E:\installed_servers_cache.json` | `[]`(空数组) | | `E:\market_servers_cache.json` | MCP市场服务器列表(约20个服务器信息) | ## 参考来源 - 问题代码位置:`E:\CodeBuddy CN\resources\app\extensions\genie\out\extension\index.js` 第 45 行 - 类名:`McpCacheServiceImpl` - 关键变量:`cacheDir` --- *本文档由 CodeBuddy AI Assistant 自动生成,用于向 CodeBuddy 官方反馈 Bug。*