Skip to Content
Руководство для разработчиковDaemon Client AdaptersЧерновик адаптера демона IDE

Черновик адаптера демона 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 .

Минимальный поток работы

  1. Процесс расширения создаёт DaemonClient.
  2. Выполняется запрос /capabilities и проверяется совместимость рабочей области.
  3. Создаётся или подключается сессия через DaemonSessionClient.createOrAttach().
  4. В процессе расширения подписываемся на session.events().
  5. События демона преобразуются в существующие сообщения веб-представления.
  6. Запросы пользователя отправляются через session.prompt().
  7. Отмена/переключение модели маршрутизируются через session.cancel() и session.setModel().
  8. Решения о разрешениях маршрутизируются через 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.
Last updated on