热重载整体方案
本目录跟踪 issue #3696 的设计工作:为 skill、extension、MCP 服务器、LSP 服务器和运行时配置构建一个全面的热重载系统。
目标
用户应能够在不重启当前 Qwen Code 会话的情况下,更新 skill、extension 状态、MCP/LSP 配置以及支持的设置。系统应在保留对话上下文的同时,使运行时状态的变化可预测且可见。
子任务拆解
热重载方案包含 6 个顶层子任务。为了便于实现,当前的跟踪 issue 将子任务 3 拆分为 3a 和 3b,因此执行清单包含 7 个条目。
| 任务 | 范围 | 状态 | 设计文档 |
|---|---|---|---|
| 1 | 设置文件变更检测 | 已在 #4933 中完成 | settings-change-detection.md |
| 2 | Skill 热重载改进 | 已通过 #2415 和 #3923 完成 | 不在本目录中 |
| 3a | MCP 服务器运行时重新初始化 | 正通过 #5561 进行中 | mcp-runtime-reinitialization.md |
| 3b | LSP 服务器运行时重新初始化 | 进行中 | lsp-runtime-reinitialization.md |
| 4 | 统一的刷新/缓存编排 | 未开始 | 待定 |
| 5 | 面向用户的 /reload 斜杠命令 | 未开始 | 待定 |
| 6 | needsRefresh 应用状态/UI 通知 | 未开始 | 待定 |
文档映射
settings-change-detection.md对应 子任务 1:设置文件变更检测。它提供了 watcher 基础设施:检测受支持的settings.json变更,从磁盘重新加载设置,并通知监听器。它有意不将更新后的值推送到Config快照中,也不重启运行时子系统。mcp-runtime-reinitialization.md对应 子任务 3a:MCP 服务器运行时重新初始化。它消费设置变更事件,更新运行时 MCP 配置,并增量协调活跃的 MCP 连接。原始 issue 将 MCP 和 LSP 归在顶层子任务 3 下;本文档仅涵盖 MCP 部分。lsp-runtime-reinitialization.md对应 子任务 3b:LSP 服务器运行时重新初始化。它监听工作区.lsp.json的变更,复用现有的原生 LSP 客户端,并增量协调活跃的 LSP 服务器。
实现顺序
- 将子任务 1 作为基础:检测并分发设置变更,但由消费者决定刷新什么。
- 完成子任务 3a,使 MCP 服务器的添加、移除和配置编辑能够在运行时生效。
- 添加子任务 3b 以实现 LSP 运行时重新初始化,采用相同的原则:更新运行时配置,停止受影响的服务器,并仅重启发生变更的部分。
- 引入子任务 4 作为跨 skill、命令、提示词、extension、MCP 和 LSP 的缓存与运行时刷新的共享编排层。
- 添加子任务 5 作为用户的手动入口:
/reload应调用统一的编排路径并报告变更内容。 - 添加子任务 6 以处理后台变更的 UX:当检测到的变更无法或不应自动完全应用时,设置
needsRefresh,然后提示用户运行/reload。
设计原则
保持各层职责专一:
- 文件监听负责检测并报告设置变更;
- 子系统重新初始化仅更新受影响的运行时状态;
- 统一编排负责按顺序执行现有的刷新操作;
- UI 命令和通知对外暴露该行为,而不重复实现重载逻辑。
Last updated on