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

Черновик адаптера демона TUI

Устарело: этот документ описывает ранний прототип DaemonTuiAdapter. Устаревший адаптер всё ещё существует в packages/cli/src/ui/daemon/, но переиспользуемое направление теперь — это общий слой UI-транскриптов SDK. Актуальную архитектуру см. в ../daemon/14-cli-tui-adapter.md.


Цель (историческая)

Добавить TUI-транспорт, управляемый флагом, который взаимодействует с qwen serve через DaemonSessionClient вместо создания внутрипроцессного Config + агентской среды выполнения.

Это внутренний путь валидации для миграции клиента Mode B. Он не должен заменять стандартный путь TUI до тех пор, пока выходные приёмники, типизированные события демона, разрешения в рамках сессии и диагностика жизненного цикла не станут стабильными.

Предлагаемая точка входа

QWEN_DAEMON_URL=http://127.0.0.1:4170 qwen --experimental-daemon-tui

Опционально:

QWEN_DAEMON_TOKEN=... QWEN_DAEMON_WORKSPACE=/repo qwen --experimental-daemon-tui

CLI должен отказаться от этого режима, если не выполнены оба условия:

  • установлены QWEN_DAEMON_URL или --daemon-url.
  • GET /capabilities рекламирует session_create, session_prompt и session_events.

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

  1. Создать DaemonClient с URL и токеном демона.
  2. Выполнить запрос /capabilities.
  3. Создать или присоединиться с помощью DaemonSessionClient.createOrAttach().
  4. Подписаться на session.events().
  5. Отправлять запросы пользователя через session.prompt().
  6. Направлять отмену через session.cancel().
  7. Направлять переключение модели через session.setModel().
  8. Направлять голоса разрешений через session.respondToPermission().

Контракт рендеринга

Первая реализация добавляет DaemonTuiAdapter — локально проверяемый редуктор и прототип транспорта. Он отображает только следующие события демона:

Событие демонаОбработка TUI
session_update / agent_message_chunkДобавить текст ассистента
session_update / agent_thought_chunkДобавить текст размышлений
session_update / tool_callПоказать жизненный цикл вызова инструмента
permission_requestПоказать существующий UI подтверждения, где возможно
permission_resolvedЗакрыть или обновить UI подтверждения
model_switchedОбновить отображение футера/модели
session_diedПоказать состояние отключения и остановить стриминг

Неизвестные события должны игнорироваться, не быть фатальными. Типизированные редукторы событий появятся в более позднем PR протокола.

Адаптер ещё не подключён к стандартному приложению Ink. Существующее интерактивное TUI, JSONL, stream-json и поведение двойного вывода остаются неизменными.

Явные не-цели

  • Не удалять текущую внутрипроцессную среду выполнения TUI.
  • Не изменять поведение JSONL, stream-json или двойного вывода в этом PR.
  • Не выставлять пока через TUI CRUD файлов, управление MCP, CRUD памяти или изменение провайдера/аутентификации.
  • Не делать предположений о прямом доступе к демону из браузера/веба; это только терминал.

Безопасность слияния

  • Отключено по умолчанию.
  • Аддитивный путь кода.
  • Никакие существующие флаги CLI не меняют поведение.
  • Если демон недоступен, экспериментальный путь завершается ошибкой до запуска TUI и сообщает пользователю запустить qwen serve.

План валидации

  • Модульное тестирование отображения событий в состояние TUI с синтетическими событиями демона.
  • Модульное тестирование пересылки запросов, отмены, переключения модели и голосов разрешений.
  • Модульное тестирование разбора флагов/переменных окружения при подключении флага функции.
  • Дымовое тестирование с локальным qwen serve:
    • текст запроса стримится в TUI
    • отмена завершает активный запрос
    • запрос разрешения может быть принят или отклонён
    • повторное подключение отправляет отслеживаемый Last-Event-ID

Блокировки перед миграцией по умолчанию

  • Типизированная схема событий демона.
  • Маршрут разрешений в рамках сессии.
  • Рефакторинг выходных приёмников для паритета JSONL / stream-json / двойного вывода.
  • Семантика закрытия/удаления жизненного цикла сессии.
  • Диагностика времени выполнения для MCP, навыков, провайдеров и окружения рабочей области.
Last updated on