IDE デーモンアダプター草案
目標
VS Code コンパニオン拡張機能が、エクステンションホストから qwen serve へ DaemonSessionClient を通じて接続することで、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 .最小フロー
- エクステンションホストが
DaemonClientを作成する。 /capabilitiesをフェッチしてワークスペースの互換性を確認する。DaemonSessionClient.createOrAttach()でセッションを作成または接続する。- エクステンションホストで
session.events()を購読する。 - デーモンイベントを既存の webview メッセージに変換する。
session.prompt()を通じてユーザープロンプトを送信する。- キャンセル/モデル切り替えを
session.cancel()およびsession.setModel()にルーティングする。 - 権限判断を
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