Skip to Content
ДизайнHot ReloadОбщий план горячей перезагрузки

Общий план горячей перезагрузки

В этом каталоге ведется работа над проектированием задачи #3696 : комплексной системы горячей перезагрузки для скиллов, расширений, MCP-серверов, LSP-серверов и конфигурации runtime.

Цель

Пользователи должны иметь возможность обновлять скиллы, состояние расширений, конфигурацию MCP/LSP и поддерживаемые настройки без перезапуска текущей сессии Qwen Code. Система должна сохранять контекст диалога, делая изменения состояния runtime предсказуемыми и заметными.

Разбивка на подзадачи

План горячей перезагрузки включает 6 основных подзадач. В текущей задаче подзадача 3 разделена на 3a и 3b для ясности реализации, поэтому чек-лист выполнения содержит 7 пунктов.

ЗадачаОбласть примененияСтатусДокумент с дизайном
1Обнаружение изменений в файле настроекВыполнено в #4933settings-change-detection.md
2Улучшения горячей перезагрузки скилловВыполнено через #2415 и #3923Не в этом каталоге
3aПовторная инициализация MCP-сервера в runtimeВ процессе через #5561mcp-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. Оставить подзадачу 1 в качестве фундамента: изменения настроек обнаруживаются и распределяются, но потребители сами решают, что обновлять.
  2. Завершить подзадачу 3a, чтобы добавления, удаления и изменения конфигурации MCP-серверов могли вступать в силу в runtime.
  3. Добавить подзадачу 3b для повторной инициализации LSP в runtime по тому же принципу: обновить конфигурацию runtime, остановить затронутые серверы и перезапустить только то, что изменилось.
  4. Внедрить подзадачу 4 как общий слой оркестрации для обновления кэша и runtime для скиллов, команд, промптов, расширений, MCP и LSP.
  5. Добавить подзадачу 5 как ручную точку входа для пользователя: /reload должна вызывать единый путь оркестрации и сообщать о том, что изменилось.
  6. Добавить подзадачу 6 для UX фоновых изменений: устанавливать needsRefresh, когда обнаруженное изменение не может или не должно применяться полностью автоматически, а затем предлагать пользователю выполнить /reload.

Принцип проектирования

Каждый слой должен иметь узкую зону ответственности:

  • отслеживание файлов обнаруживает и сообщает об изменениях настроек;
  • повторная инициализация подсистем обновляет только затронутое состояние runtime;
  • единая оркестрация выстраивает последовательность существующих операций обновления;
  • UI-команды и уведомления предоставляют доступ к этому поведению без дублирования логики перезагрузки.
Last updated on