update at 2025-10-15 17:28:11

This commit is contained in:
douboer
2025-10-15 17:28:11 +08:00
parent 7aa6ce1ac2
commit 007eb4d0a5
2 changed files with 31 additions and 27 deletions

6
rel.sh
View File

@@ -49,6 +49,10 @@ fi
VERSION=$(grep "^## v" release.md | tail -n 1 | sed 's/^## //') VERSION=$(grep "^## v" release.md | tail -n 1 | sed 's/^## //')
TAG_MESSAGE=$(awk "/^## $VERSION/{flag=1;next}/^## v/{flag=0}flag" release.md) TAG_MESSAGE=$(awk "/^## $VERSION/{flag=1;next}/^## v/{flag=0}flag" release.md)
# 过滤掉 emoji4 字节 unicode范围 U+10000 - U+10FFFF避免 utf8mb4 字符导致服务器侧 collation 问题
# 仅在发送到 Gitea 时使用过滤后的内容,保留原始 TAG_MESSAGE 用于本地 tag 注释
RELEASE_BODY=$(printf '%s' "$TAG_MESSAGE" | perl -CSD -0777 -pe 's/[\x{10000}-\x{10FFFF}]//g')
if [ -z "$VERSION" ]; then if [ -z "$VERSION" ]; then
echo "❌ release.md 中未找到版本号" echo "❌ release.md 中未找到版本号"
exit 1 exit 1
@@ -126,7 +130,7 @@ if [ "$check_http_code" -eq 200 ]; then
fi fi
# 使用 jq 生成正确的 JSON # 使用 jq 生成正确的 JSON
JSON_PAYLOAD=$(echo "$TAG_MESSAGE" | jq -R -s -c --arg version "$VERSION" '{ JSON_PAYLOAD=$(echo "$RELEASE_BODY" | jq -R -s -c --arg version "$VERSION" '{
tag_name: $version, tag_name: $version,
name: $version, name: $version,
body: ., body: .,

View File

@@ -320,31 +320,31 @@ npm run dev
发布时间: 2025-10-15 发布时间: 2025-10-15
### 🎯 重大功能:停止生成 & UI 优化 ### 重大功能:停止生成 & UI 优化
本版本实现了完整的停止生成功能,参考 Cherry Studio 的 PAUSED 状态设计,提供更好的用户体验。 本版本实现了完整的停止生成功能,参考 Cherry Studio 的 PAUSED 状态设计,提供更好的用户体验。
#### 核心功能 #### 核心功能
**⏸️ 智能停止生成** **智能停止生成**
- 点击停止按钮立即中断 AI 回复(响应时间 < 100ms - 点击停止按钮立即中断 AI 回复(响应时间 < 100ms
- 保留已生成的内容标记为"已停止"状态 - 保留已生成的内容标记为"已停止"状态
- 区分用户主动停止和系统错误 - 区分用户主动停止和系统错误
- 停止后可立即继续对话 - 停止后可立即继续对话
**🎨 UI 体验优化** **UI 体验优化**
- 按钮文字从"确认"改为"发送" - 按钮文字从"确认"改为"发送"
- 停止后显示黄色"已停止"标签而非红色"发送失败" - 停止后显示黄色"已停止"标签而非红色"发送失败"
- 停止的消息可以复制重新生成删除 - 停止的消息可以复制重新生成删除
- 实时状态反馈发送中 已停止 可操作 - 实时状态反馈发送中 已停止 可操作
**🔄 状态管理增强** **状态管理增强**
- 新增 `paused` 消息状态 - 新增 `paused` 消息状态
- 新增 `paused` 流式事件类型 - 新增 `paused` 流式事件类型
- 完整的 AbortController 信号传递链 - 完整的 AbortController 信号传递链
- 流读取循环实时检查中止信号 - 流读取循环实时检查中止信号
#### 🛠️ 技术实现 #### 技术实现
**按钮事件修复** **按钮事件修复**
- 修复点击事件绑定问题从三元表达式改为函数调用 - 修复点击事件绑定问题从三元表达式改为函数调用
@@ -378,9 +378,9 @@ UI (点击停止)
**流读取中止检查** **流读取中止检查**
```typescript ```typescript
while (true) { while (true) {
// ⚠️ 关键:每次读取前检查中止信号 // 关键:每次读取前检查中止信号
if (signal?.aborted) { if (signal?.aborted) {
console.log('🛑 检测到中止信号,停止读取流') console.log('检测到中止信号,停止读取流')
reader.cancel() reader.cancel()
throw new DOMException('用户中止操作', 'AbortError') throw new DOMException('用户中止操作', 'AbortError')
} }
@@ -403,7 +403,7 @@ catch (error) {
assistantMessage.error = undefined assistantMessage.error = undefined
onChunk({ type: 'paused', messageId: assistantMessage.id }) onChunk({ type: 'paused', messageId: assistantMessage.id })
// 关键:更新消息列表,触发 UI 刷新 // 关键:更新消息列表,触发 UI 刷新
state.messages = [...chatService.getMessages(currentTopicId)] state.messages = [...chatService.getMessages(currentTopicId)]
} else { } else {
// 真实错误 - 标记为 error // 真实错误 - 标记为 error
@@ -413,15 +413,15 @@ catch (error) {
} }
``` ```
#### 🐛 Bug 修复 #### Bug 修复
- 修复按钮点击无响应问题事件绑定错误 - 修复按钮点击无响应问题事件绑定错误
- 修复停止后仍显示"发送中..."状态 - 修复停止后仍显示"发送中..."状态
- 修复停止后消息列表不更新 - 修复停止后消息列表不更新
- 修复 AbortError 被错误标记为失败 - 修复 AbortError 被错误标记为失败
- 修复按钮文字显示"确认"而非"发送" - 修复按钮文字显示"确认"而非"发送"
#### 🔧 修改的文件 #### 修改的文件
**类型定义** **类型定义**
- `/web/src/types/chat.ts` - `/web/src/types/chat.ts`
@@ -450,7 +450,7 @@ catch (error) {
- catch 块中更新消息列表 - catch 块中更新消息列表
- 确保 UI 显示最新状态 - 确保 UI 显示最新状态
#### 💡 使用示例 #### 使用示例
``` ```
1. 用户发送:"请详细介绍 Vue 3 的新特性" 1. 用户发送:"请详细介绍 Vue 3 的新特性"
@@ -468,7 +468,7 @@ catch (error) {
- 继续发送新消息 - 继续发送新消息
``` ```
#### 🎯 设计亮点 #### 设计亮点
1. **参考 Cherry Studio** - 借鉴成熟产品的设计理念 1. **参考 Cherry Studio** - 借鉴成熟产品的设计理念
2. **立即响应** - 停止操作 < 100ms 响应 2. **立即响应** - 停止操作 < 100ms 响应
@@ -477,15 +477,15 @@ catch (error) {
5. **完整操作** - 停止的消息仍可进行各种操作 5. **完整操作** - 停止的消息仍可进行各种操作
6. **信号传递** - 完整的中止信号链确保可靠性 6. **信号传递** - 完整的中止信号链确保可靠性
#### 📊 用户体验对比 #### 用户体验对比
**修复前** **修复前**
- 点击停止无反应 - 点击停止无反应
- 继续显示"发送中..." - 继续显示"发送中..."
- 显示 loading 动画 - 显示 loading 动画
- 按钮文字为"确认" - 按钮文字为"确认"
**修复后** **修复后**
- 点击立即停止 - 点击立即停止
- 显示"已停止"黄色 - 显示"已停止"黄色
- 隐藏 loading 动画 - 隐藏 loading 动画
@@ -493,7 +493,7 @@ catch (error) {
- 可以操作停止的消息 - 可以操作停止的消息
- 立即可继续对话 - 立即可继续对话
#### 📚 相关文档 #### 相关文档
- `STOP_GENERATION_SUMMARY.md` - 修复总结 - `STOP_GENERATION_SUMMARY.md` - 修复总结
- `STOP_GENERATION_FIX.md` - 详细技术文档 - `STOP_GENERATION_FIX.md` - 详细技术文档
@@ -501,7 +501,7 @@ catch (error) {
- `STOP_GENERATION_TEST.md` - 测试指南 - `STOP_GENERATION_TEST.md` - 测试指南
- `STOP_GENERATION_VERIFY.md` - 快速验证清单 - `STOP_GENERATION_VERIFY.md` - 快速验证清单
#### 🚀 升级指南 #### 升级指南
```bash ```bash
# 拉取最新代码 # 拉取最新代码
@@ -520,7 +520,7 @@ npm run dev
# 4. 验证可以继续对话 # 4. 验证可以继续对话
``` ```
#### 验收标准 #### 验收标准
- [x] 按钮点击有明显反应 - [x] 按钮点击有明显反应
- [x] 流输出在 100ms 内停止 - [x] 流输出在 100ms 内停止
@@ -530,7 +530,7 @@ npm run dev
- [x] 可对停止的消息进行操作 - [x] 可对停止的消息进行操作
- [x] 无意外错误日志 - [x] 无意外错误日志
#### 🔜 下一步计划 #### 下一步计划
- 停止后自动保存草稿 - 停止后自动保存草稿
- 停止历史记录统计 - 停止历史记录统计
@@ -538,5 +538,5 @@ npm run dev
- 停止原因记录用户主动/超时/错误 - 停止原因记录用户主动/超时/错误
- 性能监控和优化 - 性能监控和优化
**v1.0.3 - 完美的停止体验,让对话更可控!** 🎉⏸ **v1.0.3 - 完美的停止体验,让对话更可控!**