wip(vscode-ide-companion): 实现 quick win 功能

- 将 WebView 调整到编辑器右侧
- 添加 ChatHeader 组件,实现会话下拉菜单
- 替换模态框为紧凑型下拉菜单
- 更新会话切换逻辑,显示当前标题
- 清理旧的会话选择器样式
基于 Claude Code v2.0.43 UI 分析实现。
This commit is contained in:
yiliang114
2025-11-19 00:16:45 +08:00
parent 729a3d0ab3
commit 732220e651
52 changed files with 16502 additions and 1420 deletions

View File

@@ -0,0 +1,210 @@
# Qwen Code VSCode Extension Migration Summary
## 迁移完成 ✅
已成功将 `/Users/jinjing/projects/projj/github.com/yiliang114/aionui-vscode` 中的功能迁移到 `packages/vscode-ide-companion`
## 迁移的文件列表
### 1. ACP 协议相关
-`src/shared/acpTypes.ts` - ACP JSON-RPC 协议类型定义
-`src/acp/AcpConnection.ts` - ACP 连接管理器,处理与 Qwen CLI 的通信
### 2. 核心服务
-`src/agents/QwenAgentManager.ts` - Qwen Agent 管理器,管理 AI 会话
-`src/services/QwenSessionReader.ts` - 会话读取服务,读取本地 Qwen 会话文件
-`src/storage/ConversationStore.ts` - 对话存储,使用 VSCode GlobalState
### 3. WebView UI
-`src/WebViewProvider.ts` - WebView 提供器,管理聊天界面
-`src/webview/App.tsx` - React 主应用组件
-`src/webview/App.css` - UI 样式
-`src/webview/index.tsx` - WebView 入口文件
-`src/webview/hooks/useVSCode.ts` - VSCode API Hook
### 4. 配置更新
-`package.json` - 添加了 React 依赖和新的命令/配置
-`esbuild.js` - 更新为双入口构建extension + webview
-`src/extension.ts` - 集成 WebViewProvider
## 新增功能
### 命令
- `qwenCode.openChat` - 打开 Qwen Code 聊天界面
- 快捷键: `Ctrl+Shift+A` (Mac: `Cmd+Shift+A`)
- 也可以从编辑器标题栏按钮打开
### 配置项
在 VSCode 设置中添加了以下配置项(前缀: `qwenCode.qwen.*`:
- `enabled` - 启用/禁用 Qwen agent 集成
- `cliPath` - Qwen CLI 可执行文件路径(默认: "qwen"
- `openaiApiKey` - OpenAI API Key可选
- `openaiBaseUrl` - OpenAI Base URL可选
- `model` - 使用的模型(可选)
- `proxy` - 代理配置(格式: schema://user:password@host:port
## 功能特性
### 聊天界面
- 💬 实时流式响应
- 📋 会话管理(查看和切换历史会话)
- 🔄 创建新会话
- 🛡️ 工具权限请求处理
- 💾 自动保存对话历史
### ACP 协议集成
- 支持完整的 ACP JSON-RPC 协议
- 会话管理 (session/new, session/switch, session/list)
- 流式消息处理 (agent_message_chunk)
- 工具调用更新 (tool_call)
- 权限请求处理 (session/request_permission)
### 本地会话读取
-`~/.qwen/tmp/` 读取本地会话文件
- 支持跨项目会话浏览
- 会话标题自动生成(基于首条用户消息)
## 下一步操作
### 1. 安装依赖
由于权限问题,请手动运行:
```bash
cd /Users/jinjing/projects/projj/github.com/QwenLM/qwen-code
npm install
```
如果遇到权限问题,可以尝试:
```bash
# 方案 1: 使用 sudo
sudo npm install
# 方案 2: 修复 node_modules 权限
sudo chown -R $(whoami) node_modules
# 方案 3: 清理后重新安装
rm -rf node_modules package-lock.json
npm install
```
### 2. 构建项目
```bash
cd packages/vscode-ide-companion
npm run build
```
### 3. 测试扩展
1. 在 VSCode 中打开项目根目录
2. 按 F5 启动调试
3. 在新窗口中按 `Cmd+Shift+A` 打开聊天界面
4. 测试各项功能
### 4. 打包扩展(可选)
```bash
cd packages/vscode-ide-companion
npm run package
```
## 技术栈
- **Frontend**: React 18 + TypeScript
- **Build**: esbuild (双入口extension + webview)
- **Protocol**: ACP (Agent Communication Protocol) - JSON-RPC 2.0
- **State**: VSCode GlobalState API
- **Styling**: CSS with VSCode theme variables
## 注意事项
1. **配置命名**: 所有配置项使用 `qwenCode` 前缀(与原来的 `aionui` 不同)
2. **CLI 路径**: 默认使用 `qwen` 命令,需要确保 Qwen CLI 已安装
3. **会话持久化**: 对话历史存储在 VSCode GlobalState 中
4. **本地会话**: 可以读取 Qwen CLI 创建的本地会话文件
5. **代理支持**: 支持配置 HTTP/HTTPS 代理
## 文件结构
```
packages/vscode-ide-companion/
├── src/
│ ├── acp/
│ │ └── AcpConnection.ts # ACP 协议连接
│ ├── agents/
│ │ └── QwenAgentManager.ts # Agent 管理
│ ├── services/
│ │ └── QwenSessionReader.ts # 会话读取
│ ├── storage/
│ │ └── ConversationStore.ts # 对话存储
│ ├── shared/
│ │ └── acpTypes.ts # ACP 类型定义
│ ├── webview/
│ │ ├── hooks/
│ │ │ └── useVSCode.ts # VSCode API Hook
│ │ ├── App.tsx # React 主组件
│ │ ├── App.css # 样式
│ │ └── index.tsx # 入口
│ ├── WebViewProvider.ts # WebView 管理器
│ └── extension.ts # 扩展主入口
├── dist/
│ ├── extension.cjs # 编译后的扩展
│ └── webview.js # 编译后的 WebView
└── package.json # 扩展配置
```
## 已完成的任务
- [x] 迁移 ACP 连接相关代码 (AcpConnection.ts, acpTypes.ts)
- [x] 迁移 Agent 管理器 (QwenAgentManager.ts)
- [x] 迁移会话读取服务 (QwenSessionReader.ts)
- [x] 迁移对话存储 (ConversationStore.ts)
- [x] 迁移 WebView Provider (WebViewProvider.ts)
- [x] 迁移 React WebView UI (App.tsx, useVSCode.ts, App.css, index.tsx)
- [x] 更新 package.json 添加依赖和配置
- [x] 更新 extension.ts 集成新功能
- [x] 更新构建配置支持 React 和多入口
- [x] 无 Linting 错误
## 测试建议
1. **基础连接测试**
- 启动扩展
- 打开聊天界面
- 验证 Qwen CLI 连接成功
2. **消息发送测试**
- 发送简单消息
- 验证流式响应
- 检查消息历史保存
3. **会话管理测试**
- 创建新会话
- 查看会话列表
- 切换到历史会话
4. **权限测试**
- 触发工具调用
- 验证权限请求提示
- 测试允许/拒绝功能
5. **配置测试**
- 测试代理配置
- 测试 OpenAI API 配置
- 测试自定义 CLI 路径
---
迁移完成!🎉