Title: feat: MCP 服务器手动重连功能 by dengmik-commits · Pull Request #84 · lessweb/deepcode-cli · GitHub
Open Graph Title: feat: MCP 服务器手动重连功能 by dengmik-commits · Pull Request #84 · lessweb/deepcode-cli
X Title: feat: MCP 服务器手动重连功能 by dengmik-commits · Pull Request #84 · lessweb/deepcode-cli
Description: 概述 当前 MCP 服务器初始化失败后直接标记 failed,无法恢复。本 PR 增加了手动重连机制:用户可在 /mcp 界面进入失败的服务器详情,选择 Reconnect 触发单次重连。 设计 /mcp → 服务器列表 fetch: ✗ Failed ↓ 按 Enter 进入详情 > ↻ [Reconnect] ← 二级菜单项 Error: exited with code 7 ↓ 按 Enter 触发重连 fetch: ↻ Reconnecting... ↓ 成功 → ✓ Ready / 失败 → ✗ Failed 关键约束: 失败后不自动重试,由用户主动触发 每次重连仅尝试一次,无 backoff/retry 重连时实时读取磁盘上的最新 settings.json,无需重启 变更 src/mcp/mcp-client.ts 新增 onDisconnect 回调参数,区分主动断开与进程崩溃 新增 isConnected() 方法 safeReject 修复进程退出竞态条件:close 事件可能在 sendRequest 注册前触发,导致 connect() 永远等待超时 适配上游的 Windows spawn 修复(直接传递 command+args,不强制拼 .cmd) src/mcp/mcp-manager.ts McpServerStatus.status 类型新增 "reconnecting" initialize() 拆分出 connectServer():单次尝试,失败直接 setStatus("failed") 新增公开方法 reconnect(name, config?):接受可选的最新配置,更新缓存并重连 onServerCrash():运行时崩溃清理旧条目并标记 failed,不自动重连 可配环境变量:DEEPCODE_MCP_TIMEOUT(单次连接超时,默认 30s) src/session.ts 新增 reconnectMcpServer(name, config?) 委托给 McpManager src/ui/App.tsx McpStatusList 传入 onReconnect 回调 回调内调用 resolveCurrentSettings() 保证每次重连都读取最新配置 src/ui/McpStatusList.tsx enterDetail 允许 failed / reconnecting 服务器进入详情 ServerDetailView 新增 onReconnect prop 对 failed 服务器渲染 [Reconnect] 菜单项,默认 > 光标选中 ItemRow 支持 action 类型,选中时显示 > 前缀 底部提示:Enter to reconnect · Esc back · Ctrl+C close src/tests/session.test.ts SessionManager marks MCP server as failed on single failed attempt (no auto-retry) — 确认失败后无自动重连 SessionManager reconnect succeeds on previously failed server — 确认手动重连成功 验证 自动化测试 npm run typecheck # ✅ 零错误 npm run bundle # ✅ dist/cli.js 335KB DEEPCODE_MCP_TIMEOUT=3000 npm test # ✅ 208/213 pass 手动验证流程 1. 制造失败: 将 ~/.deepcode/settings.json 中 fetch 服务器包名改为不存在的包: "fetch": { "command": "npx", - "args": ["-y", "mcp-fetch-server"] + "args": ["-y", "mcp-fetch-server-BROKEN"] } 2. 启动 deepcode,执行 /mcp: Manage MCP servers (1 ready, 1 starting, 1 failed) ... > ✗ fetch Failed Error: ... exited with code 1 ... 3. Enter 进入详情: ✗ fetch — Status Error: ... exited with code 1 ... ───────────────── > ↻ [Reconnect] 4. Enter 触发重连(包名仍然错误)—— 返回列表,看到 ↻ Reconnecting... 后再次 ✗ Failed。 5. 改回正确包名: - "args": ["-y", "mcp-fetch-server-BROKEN"] + "args": ["-y", "mcp-fetch-server"] 6. 再次 Enter → [Reconnect] → Enter —— fetch 恢复 ✓ Ready。 关键: 步骤 5-6 无需重启 deepcode,reconnect() 每次从磁盘实时读取最新配置。
Open Graph Description: 概述 当前 MCP 服务器初始化失败后直接标记 failed,无法恢复。本 PR 增加了手动重连机制:用户可在 /mcp 界面进入失败的服务器详情,选择 Reconnect 触发单次重连。 设计 /mcp → 服务器列表 fetch: ✗ Failed ↓ 按 Enter 进入详情 > ↻ [Reconnect] ← 二级菜单项 Error: exit...
X Description: 概述 当前 MCP 服务器初始化失败后直接标记 failed,无法恢复。本 PR 增加了手动重连机制:用户可在 /mcp 界面进入失败的服务器详情,选择 Reconnect 触发单次重连。 设计 /mcp → 服务器列表 fetch: ✗ Failed ↓ 按 Enter 进入详情 > ↻ [Reconnect] ← 二级菜单项 Error: ...
Opengraph URL: https://github.com/lessweb/deepcode-cli/pull/84
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:6df9cf78-c8db-cb02-85fd-75a76545c40a |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | E6FC:3C3A87:C43BF7:10D2229:6A4D5674 |
| html-safe-nonce | 39c9dd924cdf8bd96c368c5b418e5e537ad902ca248ff4505f407196d28b05b3 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFNkZDOjNDM0E4NzpDNDNCRjc6MTBEMjIyOTo2QTRENTY3NCIsInZpc2l0b3JfaWQiOiIyNDkwNDg5NjMyNTE3ODczODAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | d7576ae6af20a26b3cb321d8279bb0db75325bee6c7817aa86859179c792fee7 |
| hovercard-subject-tag | pull_request:3694244088 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/lessweb/deepcode-cli/pull/84/files |
| twitter:image | https://avatars.githubusercontent.com/u/270912164?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/270912164?s=400&v=4 |
| og:image:alt | 概述 当前 MCP 服务器初始化失败后直接标记 failed,无法恢复。本 PR 增加了手动重连机制:用户可在 /mcp 界面进入失败的服务器详情,选择 Reconnect 触发单次重连。 设计 /mcp → 服务器列表 fetch: ✗ Failed ↓ 按 Enter 进入详情 > ↻ [Reconnect] ← 二级菜单项 Error: exit... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 92571a8944142227b7e19cd10918b1ddd06e5066c1ad5bc7e4769cf6140a87e6 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/lessweb/deepcode-cli git https://github.com/lessweb/deepcode-cli.git |
| octolytics-dimension-user_id | 118287711 |
| octolytics-dimension-user_login | lessweb |
| octolytics-dimension-repository_id | 1223512305 |
| octolytics-dimension-repository_nwo | lessweb/deepcode-cli |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1223512305 |
| octolytics-dimension-repository_network_root_nwo | lessweb/deepcode-cli |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 56fc8347865a14e2ec811533d68f929cf4e0ec19 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width