Общий план горячей перезагрузки
В этом каталоге ведется работа над проектированием задачи #3696 : комплексной системы горячей перезагрузки для скиллов, расширений, MCP-серверов, LSP-серверов и конфигурации runtime.
Цель
Пользователи должны иметь возможность обновлять скиллы, состояние расширений, конфигурацию MCP/LSP и поддерживаемые настройки без перезапуска текущей сессии Qwen Code. Система должна сохранять контекст диалога, делая изменения состояния runtime предсказуемыми и заметными.
Разбивка на подзадачи
План горячей перезагрузки включает 6 основных подзадач. В текущей задаче подзадача 3 разделена на 3a и 3b для ясности реализации, поэтому чек-лист выполнения содержит 7 пунктов.
| Задача | Область применения | Статус | Документ с дизайном |
|---|---|---|---|
| 1 | Обнаружение изменений в файле настроек | Выполнено в #4933 | settings-change-detection.md |
| 2 | Улучшения горячей перезагрузки скиллов | Выполнено через #2415 и #3923 | Не в этом каталоге |
| 3a | Повторная инициализация MCP-сервера в runtime | В процессе через #5561 | mcp-runtime-reinitialization.md |
| 3b | Повторная инициализация LSP-сервера в runtime | В процессе | lsp-runtime-reinitialization.md |
| 4 | Единая оркестрация обновления и кэша | Не начато | Ожидается |
| 5 | Пользовательская slash-команда /reload | Не начато | Ожидается |
| 6 | Уведомление needsRefresh для состояния приложения/UI | Не начато | Ожидается |
Сопоставление документов
settings-change-detection.mdсоответствует подзадаче 1: Обнаружение изменений в файле настроек. Он предоставляет инфраструктуру watcher: обнаруживает поддерживаемые изменения вsettings.json, перезагружает настройки с диска и уведомляет слушателей. Намеренно не передает обновленные значения в снимкиConfigи не перезапускает подсистемы runtime.mcp-runtime-reinitialization.mdсоответствует подзадаче 3a: Повторная инициализация MCP-сервера в runtime. Он потребляет события изменения настроек, обновляет конфигурацию MCP в runtime и инкрементально согласовывает активные MCP-соединения. В исходной задаче MCP и LSP были объединены в основную подзадачу 3; этот документ охватывает только часть, касающуюся MCP.lsp-runtime-reinitialization.mdсоответствует подзадаче 3b: Повторная инициализация LSP-сервера в runtime. Он отслеживает изменения.lsp.jsonв рабочем пространстве, переиспользует существующий нативный LSP-клиент и инкрементально согласовывает активные LSP-серверы.
Порядок реализации
- Оставить подзадачу 1 в качестве фундамента: изменения настроек обнаруживаются и распределяются, но потребители сами решают, что обновлять.
- Завершить подзадачу 3a, чтобы добавления, удаления и изменения конфигурации MCP-серверов могли вступать в силу в runtime.
- Добавить подзадачу 3b для повторной инициализации LSP в runtime по тому же принципу: обновить конфигурацию runtime, остановить затронутые серверы и перезапустить только то, что изменилось.
- Внедрить подзадачу 4 как общий слой оркестрации для обновления кэша и runtime для скиллов, команд, промптов, расширений, MCP и LSP.
- Добавить подзадачу 5 как ручную точку входа для пользователя:
/reloadдолжна вызывать единый путь оркестрации и сообщать о том, что изменилось. - Добавить подзадачу 6 для UX фоновых изменений: устанавливать
needsRefresh, когда обнаруженное изменение не может или не должно применяться полностью автоматически, а затем предлагать пользователю выполнить/reload.
Принцип проектирования
Каждый слой должен иметь узкую зону ответственности:
- отслеживание файлов обнаруживает и сообщает об изменениях настроек;
- повторная инициализация подсистем обновляет только затронутое состояние runtime;
- единая оркестрация выстраивает последовательность существующих операций обновления;
- UI-команды и уведомления предоставляют доступ к этому поведению без дублирования логики перезагрузки.
Last updated on