Черновик адаптера демона IDE
Цель
Позволить расширению-компаньону VS Code опробовать Mode B, подключившись из
процесса расширения к qwen serve через DaemonSessionClient.
Веб-представление не должно вызывать демона напрямую. Процесс расширения владеет URL демона, токеном, идентификатором сессии и состоянием повторной передачи SSE, а затем передаёт санированные события приложения в веб-представление.
Предлагаемая точка входа
Настройки VS Code:
{
"qwen-code.experimentalDaemon.enabled": true,
"qwen-code.experimentalDaemon.url": "http://127.0.0.1:4170",
"qwen-code.experimentalDaemon.token": ""
}Резервный вариант через переменные окружения для локального тестирования:
QWEN_IDE_DAEMON_URL=http://127.0.0.1:4170 code .Минимальный поток работы
- Процесс расширения создаёт
DaemonClient. - Выполняется запрос
/capabilitiesи проверяется совместимость рабочей области. - Создаётся или подключается сессия через
DaemonSessionClient.createOrAttach(). - В процессе расширения подписываемся на
session.events(). - События демона преобразуются в существующие сообщения веб-представления.
- Запросы пользователя отправляются через
session.prompt(). - Отмена/переключение модели маршрутизируются через
session.cancel()иsession.setModel(). - Решения о разрешениях маршрутизируются через
session.respondToPermission().
Связь с существующим ACP-соединением
Первая реализация вводит параллельный путь подключения, а не заменяет
AcpConnection:
QwenAgentManager
current default -> AcpConnection -> qwen --acp child
experimental -> DaemonIdeConnection -> qwen serve HTTP/SSEОба пути должны, где это практично, подавать одни и те же высокоуровневые колбэки веб-представления. Если какое-либо событие пока невозможно корректно отобразить, путь демона должен выдавать чёткое предупреждение о неподдерживаемом состоянии, а не молча делать вид, что паритет достигнут.
Этот PR добавляет DaemonIdeConnection как локально проверяемую заглушку
адаптера процесса расширения. Он пока не подключён к пути по умолчанию
QwenAgentManager, поэтому существующее поведение VS Code остаётся на базе
ACP-подпроцесса.
Контракт сопоставления событий
| Событие демона | Обработка в IDE |
|---|---|
session_update / agent_message_chunk | Существующий колбэк потока ассистента |
session_update / agent_thought_chunk | Существующий колбэк потока размышлений |
session_update / tool_call | Существующий колбэк обновления вызова инструмента |
permission_request | Существующий колбэк интерфейса подтверждения |
permission_resolved | Закрыть/обновить интерфейс подтверждения |
model_switched | Существующий колбэк состояния модели там, где возможно |
session_died | Интерфейс отключения + возможность переподключения |
Неизвестные события должны игнорироваться или логироваться как отладочные метаданные.
UX локальности во время выполнения
Расширение должно сделать видимым, где находится демон:
- рабочая область/файлы находятся по путям хоста демона
- MCP-серверы запускаются на хосте демона
- навыки загружаются из файловой системы демона
- учётные данные провайдера разрешаются в окружении процесса демона
Не подразумевайте, что локальные расширения VS Code, локальный профиль браузера, локальные службы localhost или локальные учётные данные SSH/kube автоматически доступны демону.
Явно не входит в цели
- Нет миграции по умолчанию от
AcpConnection. - Нет прямого транспорта от веб-представления к демону.
- Нет CRUD для файлов на стороне демона через IDE, пока не появятся границы сервиса файлов.
- Нет обратного RPC для редактора/браузера/буфера обмена.
- Нет полноценной интеграции удалённого управления.
Безопасность слияния
- По умолчанию выключено за настройкой/переменной окружения.
- Аддитивный параллельный путь подключения.
- Существующий путь ACP-подпроцесса VS Code не изменяется.
- Токен демона никогда не попадает в JavaScript веб-представления.
План валидации
- Модульное тестирование фабрики сессий демона и обработки событий SSE.
- Модульное тестирование сопоставления событий демона с существующими колбэками процесса расширения.
- Модульное тестирование перенаправления запросов, отмены, переключения модели и ответов на разрешения.
- Модульное тестирование разрешения настроек/переменных окружения при подключении флага функции.
- Дымовое тестирование локального процесса расширения против
qwen serve:- поток запросов в чат
- отмена работает
- интерфейс разрешений может обработать запрос
- повторное подключение SSE использует отслеживаемый
Last-Event-ID
Блокирующие факторы перед миграцией по умолчанию
- Типизированная схема событий демона.
- Идентификация клиента с пометкой демона.
- Маршрут разрешений с областью сессии.
- Диагностика времени выполнения только для чтения.
- Граница FileSystemService и безопасные маршруты чтения файлов.
- Рефакторинг выходного канала для паритета CLI/TUI.