Files
map-client-vue/release.md
douboer d5ffc3214c 🎉 Release v1.0.3: 完善停止生成功能
 新功能
- 实现完整的停止生成功能(参考 Cherry Studio PAUSED 状态)
- 立即响应停止操作(< 100ms)
- 保留已生成内容并标记为'已停止'状态

🐛 Bug 修复
- 修复按钮点击无响应问题
- 修复停止后仍显示'发送中...'状态
- 修复按钮文字显示'确认'而非'发送'
- 修复停止后消息列表不更新

🎨 UI 优化
- 按钮文字从'确认'改为'发送'
- 停止后显示黄色'已停止'标签
- 停止的消息可以进行复制、重新生成、删除操作

🔧 技术改进
- 新增 paused 消息状态和事件类型
- 完整的 AbortController 信号传递链
- 流读取循环实时检查中止信号
- 优化错误处理逻辑(区分用户中止和真实错误)

📚 文档
- 新增 STOP_GENERATION_SUMMARY.md
- 新增 STOP_GENERATION_FIX.md
- 新增 STOP_GENERATION_PATCH.md
- 新增 STOP_GENERATION_TEST.md
- 新增 STOP_GENERATION_VERIFY.md
- 更新 release.md 添加 v1.0.3 说明

📦 版本更新
- package.json: 1.0.2 → 1.0.3
- web/package.json: 1.0.2 → 1.0.3
2025-10-15 15:10:24 +08:00

544 lines
13 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MCP Client Vue - 版本发布记录
## v1.0.3
发布时间: 2025-10-15
### 🎯 重大功能:停止生成 & UI 优化
本版本实现了完整的停止生成功能,参考 Cherry Studio 的 PAUSED 状态设计,提供更好的用户体验。
#### ✨ 核心功能
**⏸️ 智能停止生成**
- 点击停止按钮立即中断 AI 回复(响应时间 < 100ms
- 保留已生成的内容标记为"已停止"状态
- 区分用户主动停止和系统错误
- 停止后可立即继续对话
**🎨 UI 体验优化**
- 按钮文字从"确认"改为"发送"
- 停止后显示黄色"已停止"标签而非红色"发送失败"
- 停止的消息可以复制重新生成删除
- 实时状态反馈发送中 已停止 可操作
**🔄 状态管理增强**
- 新增 `paused` 消息状态
- 新增 `paused` 流式事件类型
- 完整的 AbortController 信号传递链
- 流读取循环实时检查中止信号
#### 🛠️ 技术实现
**按钮事件修复**
- 修复点击事件绑定问题从三元表达式改为函数调用
- 运行时动态判断状态而非编译时
```typescript
// Before: @click="store.state.isSending ? handleStopGeneration : handleSendMessage"
// After: @click="handleButtonClick"
const handleButtonClick = () => {
if (store.state.isSending) {
handleStopGeneration()
} else {
handleSendMessage()
}
}
```
**中止信号传递链**
```
UI (点击停止)
↓ handleStopGeneration()
↓ store.stopGeneration()
↓ abortController.abort()
↓ chatService.sendMessageStream(signal)
↓ modelServiceManager.makeChatRequestStream(signal)
↓ while循环检查 signal.aborted
↓ reader.cancel() + 抛出 AbortError
↓ 状态设置为 'paused'
↓ UI 更新显示"已停止"
```
**流读取中止检查**
```typescript
while (true) {
// ⚠️ 关键:每次读取前检查中止信号
if (signal?.aborted) {
console.log('🛑 检测到中止信号,停止读取流')
reader.cancel()
throw new DOMException('用户中止操作', 'AbortError')
}
const { done, value } = await reader.read()
if (done) break
// 处理数据...
}
```
**错误处理优化**
```typescript
catch (error) {
const isAborted = error instanceof Error && error.name === 'AbortError'
if (isAborted) {
// 用户主动停止 - 标记为 paused保留内容
assistantMessage.status = 'paused'
assistantMessage.error = undefined
onChunk({ type: 'paused', messageId: assistantMessage.id })
// ✅ 关键:更新消息列表,触发 UI 刷新
state.messages = [...chatService.getMessages(currentTopicId)]
} else {
// 真实错误 - 标记为 error
assistantMessage.status = 'error'
assistantMessage.error = error.message
}
}
```
#### 🐛 Bug 修复
- 修复按钮点击无响应问题事件绑定错误
- 修复停止后仍显示"发送中..."状态
- 修复停止后消息列表不更新
- 修复 AbortError 被错误标记为失败
- 修复按钮文字显示"确认"而非"发送"
#### 🔧 修改的文件
**类型定义**
- `/web/src/types/chat.ts`
- MessageStatus 添加 `'paused'` 类型
- StreamEvent 添加 `'paused'` 事件类型
**UI 组件**
- `/web/src/components/Chat/ChatLayout.vue`
- 修复按钮点击事件绑定
- 按钮文字改为"发送"
- 添加"已停止"状态标签显示
- paused 状态消息显示操作按钮
**服务层**
- `/web/src/services/chatService.ts`
- 区分 AbortError 和其他错误
- 设置 paused 状态和事件
- `/web/src/services/modelServiceManager.ts`
- 流读取循环中检查 signal.aborted
- 调用 reader.cancel() 中止读取
- 正确处理 AbortError
**状态管理**
- `/web/src/stores/chatStore.ts`
- catch 块中更新消息列表
- 确保 UI 显示最新状态
#### 💡 使用示例
```
1. 用户发送:"请详细介绍 Vue 3 的新特性"
2. AI 开始回复,显示"发送中..."
3. 用户点击"停止"按钮
4. 立即响应:
- 输出停止
- 标签变为"已停止"(黄色)
- 显示已生成的内容
- 显示操作按钮
5. 用户可以:
- 复制已生成的内容
- 重新生成完整回复
- 删除该消息
- 继续发送新消息
```
#### 🎯 设计亮点
1. **参考 Cherry Studio** - 借鉴成熟产品的设计理念
2. **立即响应** - 停止操作 < 100ms 响应
3. **内容保留** - 部分生成的内容依然有价值
4. **状态区分** - paused vs error语义更清晰
5. **完整操作** - 停止的消息仍可进行各种操作
6. **信号传递** - 完整的中止信号链确保可靠性
#### 📊 用户体验对比
**修复前 ❌**
- 点击停止无反应
- 继续显示"发送中..."
- 显示 loading 动画
- 按钮文字为"确认"
**修复后 ✅**
- 点击立即停止
- 显示"已停止"黄色
- 隐藏 loading 动画
- 按钮文字为"发送"
- 可以操作停止的消息
- 立即可继续对话
#### 📚 相关文档
- `STOP_GENERATION_SUMMARY.md` - 修复总结
- `STOP_GENERATION_FIX.md` - 详细技术文档
- `STOP_GENERATION_PATCH.md` - 补充修复说明
- `STOP_GENERATION_TEST.md` - 测试指南
- `STOP_GENERATION_VERIFY.md` - 快速验证清单
#### 🚀 升级指南
```bash
# 拉取最新代码
git pull origin main
# 安装依赖
cd web && npm install
# 启动开发服务器
npm run dev
# 测试停止功能
# 1. 发送消息
# 2. 在 AI 回复时点击"停止"
# 3. 验证显示"已停止"标签
# 4. 验证可以继续对话
```
#### ✅ 验收标准
- [x] 按钮点击有明显反应
- [x] 流输出在 100ms 内停止
- [x] 显示"已停止"而非"失败"
- [x] 保留已生成内容
- [x] 停止后可立即继续对话
- [x] 可对停止的消息进行操作
- [x] 无意外错误日志
#### 🔜 下一步计划
- 停止后自动保存草稿
- 停止历史记录统计
- 批量停止多个会话
- 停止原因记录用户主动/超时/错误
- 性能监控和优化
**v1.0.3 - 完美的停止体验,让对话更可控!** 🎉⏸
---
## v1.0.0
重构时间: 2025-10-12
### 🎯 初始发布
#### 核心特性
- **MCP客户端基础功能** - 支持Model Context Protocol
- **双传输协议** - HTTP和SSE(Server-Sent Events)传输
- **Vue 3 + TypeScript** - 现代化前端技术栈
- **Naive UI组件库** - 美观的用户界面
- **Pinia状态管理** - 响应式数据流
#### 基础功能
- 服务器连接管理
- 工具调用执行
- 资源获取支持
- 提示词管理
- 基本的错误处理
#### 技术实现
- 前后端分离架构
- RESTful API设计
- 实时双向通信
- 模块化组件设计
- TypeScript类型安全
### 📋 项目结构
```
mcp-client-vue/
├── src/ # 后端服务
│ ├── server/ # Express服务器
│ └── types/ # TypeScript类型
├── web/ # Vue前端应用
│ ├── src/ # Vue组件和服务
│ ├── public/ # 静态资源
│ └── dist/ # 构建输出
└── docs/ # 项目文档
```
### 🎯 设计理念
- **用户友好** - 直观的操作界面
- **开发者友好** - 清晰的代码结构
- **可扩展性** - 模块化架构设计
- **跨平台** - 基于Web技术实现
---
## 下载和安装
### 系统要求
- Node.js 18.0+
- 现代浏览器Chrome 90+, Firefox 88+, Safari 14+
### 快速开始
```bash
# 克隆项目
git clone [repository-url]
cd mcp-client-vue
# 安装依赖
cd web && npm install
# 启动开发服务器
npm run dev
# 访问应用
open http://localhost:5173
```
### 生产构建
```bash
# 构建项目
npm run build
# 预览构建
npm run preview
```
---
## 支持和反馈
- 📖 [完整文档](./README.md)
- 📋 [更新日志](./CHANGELOG.md)
- 🐛 [问题报告](./CURRENT_STATUS.md)
- 📚 [开发指南](./DEVELOPMENT_GUIDE.md)
**MCP Client Vue - 让MCP集成变得简单高效** 🚀
## v1.0.1
重构时间: 2025-10-14
### 🎉 重大改进
基于v1.0.0的深度优化版本全面提升了用户体验和系统稳定性
#### 🚀 核心功能
- **完善的服务器管理系统**
- 支持HTTP和SSE双传输协议
- 可视化连接状态管理
- 自动重连机制页面刷新恢复连接
- 智能URL地址转换0.0.0.0 localhost
#### 🛠️ 主要修复
- **编辑按钮响应** - 修复点击无响应问题
- **连接协议** - 修复HTTP 406和SSE 404错误
- **界面显示** - 修复模态框空白页问题
- **表单数据** - 修复字段不填充问题
- **状态持久化** - 修复页面刷新断连问题
#### 🎨 用户体验
- 优化模态框尺寸90vw宽度最大1200px
- 改进表单验证和错误提示
- 实时连接状态指示
- 详细的操作日志和调试信息
#### 🏗️ 技术栈升级
- Vue 3.4.15
- TypeScript 5.3.3
- Naive UI 2.43.1
- vue-tsc 2.0.6从1.8.25升级
### 📦 发布内容
```bash
# 安装和启动
cd web && npm install
npm run dev
```
### 🔧 配置要求
#### HTTP服务器
```json
{
"name": "HTTP服务器",
"url": "http://localhost:3100",
"type": "http"
}
```
#### SSE服务器
```json
{
"name": "SSE服务器",
"url": "http://localhost:3200/sse",
"type": "sse"
}
```
### ⚠️ 已知问题
- TypeScript类型错误47个不影响功能
- 使用 `npm run build:skip-check` 跳过类型检查
---
## v1.0.2
发布时间: 2025-10-14
### 🎯 重大功能MCP 工具调用集成
本版本实现了完整的 MCP 工具调用功能AI 可以智能调用 MCP 服务器提供的工具并整合结果
#### ✨ 核心功能
**🔧 智能工具调用**
- AI 自动识别何时需要调用工具
- 支持 OpenAI Function Calling 协议
- 兼容多个 AI 服务商OpenAI火山引擎阿里云等
- 完整的多轮对话支持AI Tool AI
**🔄 流式工具执行**
- 实时显示工具调用进度
- 流式体验不中断
- 友好的状态提示
- 🔧 正在调用工具: [工具名]...
- 工具执行完成
- 工具执行失败: [错误信息]
- 🤖 正在生成回复...
**📋 工具格式转换**
- MCP 工具 OpenAI Function 格式
- 自动提取 inputSchema 作为 parameters
- 支持完整的 JSON Schema 定义
#### 🛠️ 技术实现
**服务层改进**
- `MCPClientService.getTools()` - 获取工具列表
- `chatService.convertToolsToOpenAIFormat()` - 格式转换
- `chatService.executeToolCalls()` - 工具执行逻辑
- `modelServiceManager.sendChatRequestStream()` - 增强工具参数支持
**流式解析增强**
- SSE 流中检测 `tool_calls`
- 累积多个流片段中的工具调用数据
- 正确拼接 `function.arguments` JSON 字符串
- 返回完整的工具调用数组
**消息格式支持**
```typescript
// 工具调用消息
{
role: 'assistant',
content: '',
tool_calls: [{
id: '...',
type: 'function',
function: { name: '...', arguments: '{}' }
}]
}
// 工具结果消息
{
tool_call_id: '...',
role: 'tool',
name: 'tool_name',
content: '{...}'
}
```
#### 📦 使用方式
1. **配置 AI 服务** - "模型服务"中添加支持函数调用的 AI
2. **连接 MCP 服务器** - "MCP 设置"中添加工具服务器
3. **选择模型和 MCP** - 在对话界面选择
4. **开始对话** - AI 会自动调用相关工具
#### 💡 使用示例
```
用户: "查询今天北京的天气"
系统: 🔧 正在调用工具: get_weather...
✅ 工具执行完成
🤖 正在生成回复...
AI: "根据天气数据,今天北京晴天,温度 15-25°C
空气质量良好,适合户外活动。"
```
#### 🐛 Bug 修复
- 修复 MCPClientService 类型导入问题
- 修复 types.ts types/index.ts 路径冲突
- 修复 modelServiceManager 返回类型
- 修复未使用变量警告
#### 🔧 技术细节
**修改的文件**
- `/web/src/services/chatService.ts` - 工具调用主逻辑
- `/web/src/services/modelServiceManager.ts` - 工具参数支持
- `/web/src/services/MCPClientService.ts` - 工具列表获取
**新增方法**
- `MCPClientService.getTools(serverId)` - 获取服务器工具
- `chatService.convertToolsToOpenAIFormat()` - 格式转换
- `chatService.executeToolCalls()` - 执行工具调用
**改进方法**
- `modelServiceManager.sendChatRequestStream()` - 支持 tools 参数
- `modelServiceManager.makeChatRequestStream()` - 检测和收集 tool_calls
#### 🎯 设计亮点
1. **无缝集成** - 不改变现有对话流程
2. **错误恢复** - 工具调用失败不影响对话继续
3. **类型安全** - 完整的 TypeScript 类型定义
4. **性能优化** - 流式处理保持响应速度
5. **用户友好** - 清晰的进度提示
#### ⚙️ 配置要求
**AI 服务要求**
- 支持 OpenAI Function Calling 格式
- 推荐OpenAI GPT-3.5+, GPT-4+
- 兼容火山引擎阿里云等 OpenAI 兼容服务
**MCP 服务器要求**
- 实现 `tools/list` 接口
- 实现 `tools/call` 接口
- 提供标准的 inputSchema (JSON Schema)
### 📚 相关文档
- [完整文档](./README.md)
- [更新日志](./CHANGELOG.md)
- [故障排除](./CURRENT_STATUS.md)
### 🚀 升级指南
```bash
# 拉取最新代码
git pull origin main
# 安装依赖(如有更新)
cd web && npm install
# 启动开发服务器
npm run dev
```
### 🔜 下一步计划
- 工具调用历史记录
- 工具执行超时控制
- 批量工具调用优化
- 工具调用权限管理
- 工具调用性能监控
**v1.0.2 - AI + MCP 工具调用,让对话更智能!** 🚀🔧