Skip to Content
デベロッパーガイドDaemon Client AdaptersIDE デーモンアダプター草案

IDE デーモンアダプター草案

目標

VS Code コンパニオン拡張機能が、エクステンションホストから qwen serveDaemonSessionClient を通じて接続することで、Mode B をドッグフードできるようにする。

webview はデーモンを直接呼び出してはならない。エクステンションホストがデーモンの URL、トークン、セッション ID、SSE リプレイ状態を管理し、サニタイズされたアプリイベントを webview に転送する。

提案するエントリーポイント

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. デーモンイベントを既存の webview メッセージに変換する。
  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

両パスは実用的な範囲で同じ上位レベルの webview コールバックを使用する。イベントを忠実にマッピングできない場合、デーモンパスは無音で同等性を装うのではなく、明確な未サポート状態の警告を表示する。

この PR では、ローカルで検証可能なエクステンションホストアダプタースパイクとして DaemonIdeConnection を追加する。デフォルトの QwenAgentManager パスにはまだ組み込まれていないため、既存の VS Code の動作は ACP サブプロセスベースのままとなる。

イベントマッピング仕様

デーモンイベントIDE での処理
session_update / agent_message_chunk既存のアシスタントストリームコールバック
session_update / agent_thought_chunk既存のシンキングストリームコールバック
session_update / tool_call既存のツール呼び出し更新コールバック
permission_request既存の承認 UI コールバック
permission_resolved承認 UI のクローズ/更新
model_switched可能な限り既存のモデル状態コールバック
session_died切断 UI + 再接続アフォーダンス

未知のイベントはデバッグメタデータとして無視またはログ記録する。

ランタイムローカリティ UX

拡張機能はデーモンのローカリティをユーザーに明示する必要がある:

  • ワークスペース/ファイルはデーモンホストのパスである
  • MCP サーバーはデーモンホスト上で動作する
  • スキルはデーモンのファイルシステムからロードされる
  • プロバイダーの認証情報はデーモンプロセスの環境で解決される

ローカルの VS Code 拡張機能、ローカルブラウザプロファイル、ローカルの localhost サービス、またはローカルの SSH/kube 認証情報がデーモンで自動的に利用可能であるとは示唆しないこと。

明示的な非目標

  • AcpConnection からのデフォルト移行は行わない。
  • webview からデーモンへの直接トランスポートは行わない。
  • ファイルサービスの境界が確定するまで IDE 経由のデーモン側ファイル CRUD は行わない。
  • エディター/ブラウザ/クリップボードへのリバース RPC はまだ行わない。
  • フルリモートコントロール統合は行わない。

マージ安全性

  • 設定/環境変数によってデフォルトでオフにする。
  • 追加的な兄弟接続パスである。
  • 既存の VS Code ACP サブプロセスパスは変更しない。
  • デーモントークンは webview の JavaScript に渡らない。

検証計画

  • デーモンセッションファクトリの接続と SSE イベント消費をユニットテストする。
  • デーモンイベントから既存のエクステンションホストコールバックへのマッピングをユニットテストする。
  • プロンプト、キャンセル、モデル切り替え、権限応答の転送をユニットテストする。
  • フィーチャーフラグが接続された際の設定/環境変数の解決をユニットテストする。
  • qwen serve に対してローカルエクステンションホストのスモークテストを行う:
    • プロンプトがチャットにストリームされる
    • キャンセルが機能する
    • 権限 UI がリクエストを解決できる
    • SSE 再接続が追跡された Last-Event-ID を使用する

デフォルト移行前のブロッカー

  • 型付きデーモンイベントスキーマ。
  • デーモンがスタンプしたクライアント ID。
  • セッションスコープの権限ルート。
  • 読み取り専用ランタイム診断。
  • FileSystemService の境界と安全なファイル読み取りルート。
  • CLI/TUI パリティのための出力シンクリファクタリング。
Last updated on