272 Commits

Author SHA1 Message Date
Your Name
58b9c1cbd5 fix: 工具栏显示在图片外部上方
1. 修改画布容器为 overflow-visible
2. 工具栏定位到图片上方 (-top-12)
3. 提高 z-index 确保不被遮挡

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 15:24:11 +08:00
Your Name
8f1f924421 feat: 优化画布图片选中工具栏
1. 选中图片时在顶部显示工具栏(放大、移除背景、场景、角度、扩展、调整)
2. 工具栏使用圆角胶囊样式,类似竞品设计
3. 显示图片标题和尺寸信息
4. 添加更多操作下拉菜单(下载、删除)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 15:21:29 +08:00
Your Name
049795e264 feat: 画布聊天支持智能自动模式
1. 添加「智能自动」模型选项(默认选中)
2. 使用 qwen3-vl 先对话理解需求、优化提示词
3. 然后自动调用最佳生图模型生成图片
4. 支持历史图片上下文自动关联

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 15:17:18 +08:00
Your Name
8f90aaba08 feat: 画布聊天面板功能增强
1. 加载历史对话消息(从 API 获取)
2. 选中画布图片时自动添加到对话附件
3. 修复类型错误

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 15:13:09 +08:00
Your Name
6464135cf6 debug: 添加自动命名调试日志
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 15:09:18 +08:00
Your Name
3bac27265b fix: 修复图片提取逻辑避免重复添加
1. 只提取原始图片 URL,不提取缩略图
2. 有 markdown 格式时不再匹配普通 URL

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:47:55 +08:00
Your Name
e0366c43fd fix: 上传图片立即添加到画布
1. 图片上传成功后立即显示在画布中
2. 同时触发自动命名和设置缩略图
3. 移除发送时重复添加图片的逻辑

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:45:41 +08:00
Your Name
5e642165df feat: 上传图片自动识别并命名画布
1. 使用千问VL模型识别图片主体作为画布名称
2. 第一张上传的图片自动设为画布缩略图
3. 画布列表显示缩略图预览

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:41:01 +08:00
Your Name
ccf610bcf8 fix: 用户上传的图片也添加到画布中
发送消息时将用户上传的图片立即添加到画布

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:38:05 +08:00
Your Name
c78743cbed fix: 修复画布聊天 ID 格式问题
从 canvas-{uuid} 格式中提取纯 UUID,以满足后端 schema 要求

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:32:54 +08:00
Your Name
339bf91019 fix: 修复画布聊天面板发送消息格式
1. 修复 handleSend 中 parts 数组的顺序(文件在前,文本在后)
2. 添加 videoParams: undefined 确保 schema 兼容
3. 添加调试日志帮助排查问题

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:22:41 +08:00
Your Name
057014900c feat: 完善画布功能按钮与后端 API 对接
1. 修复 CanvasChatPanel 中的图片上传 - 使用 parts 数组而非 attachments
2. 扩展 chat schema 支持更多图片格式(gif, bmp, svg)
3. 实现尺寸调整功能 - 添加对话框选择尺寸
4. 更新 imageGenerationService.resizeImage 使用 canvas API 调整尺寸
5. 所有图片编辑功能已对接:抠图、变清晰、扩展、角度编辑、场景裂变、尺寸调整

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 12:18:16 +08:00
Your Name
a779555f3f fix: 更新 chat 和 dynamic-provider 配置
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 11:24:05 +08:00
Your Name
a6a267e819 fix: 修复占位图和图片显示问题
1. 移除 onFinish 中的数据库重新加载逻辑(时机不对,会打断图片生成流程)
2. 保留 appendedMessages 和 mergedMessages 合并逻辑
3. 修复 dynamic-provider.ts 的循环依赖(使用动态导入)
4. 不在 onFinish 中调用 completeGeneration(),因为图片可能还在生成

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 11:18:39 +08:00
Your Name
d6073ec091 fix: 改进消息合并逻辑,确保历史消息不丢失
1. 简化 initialMessagesRef 初始化
2. 在 mergedMessages 中使用 baseMessages 作为后备
3. 添加 initialMessages 到 useMemo 依赖数组

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 11:11:22 +08:00
Your Name
12ae592746 fix: 修复历史消息消失和用户消息重复问题
1. 移除 wrappedSendMessage,避免用户消息 ID 冲突导致重复
2. 添加 initialMessagesRef 保存初始消息,防止历史消息丢失
3. 改进 mergedMessages 逻辑:合并 初始消息 + useChat消息 + appendedMessages
4. 使用 Map 进行去重,按创建时间排序

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 11:04:29 +08:00
Your Name
05236a7b86 fix: 在 onFinish 后从数据库重新加载消息
这是根治方案 B:
1. 添加 GET /api/messages 端点从数据库获取消息
2. 在 onFinish 后延迟 500ms,然后从数据库重新加载消息
3. 更新 setMessages 和清空 appendedMessages

这确保了 data-appendMessage 保存到数据库的消息能正确显示

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:58:08 +08:00
Your Name
7943b7fa5b fix: 简化占位图逻辑,确保文字回复显示
1. 简化 useEffect 中的占位图逻辑
2. 当收到 AI 文字回复后,立即隐藏占位图让用户看文字
3. 修复 hasRestoredPending 逻辑,收到 AI 回复后不再显示恢复的占位图

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:52:51 +08:00
Your Name
52286c40f8 fix: 修复占位图不消失的问题
只用 isGeneratingImageFlag 来控制生图占位图的显示,
不再检查消息中的 GENERATING_IMAGE 标记,
因为该标记会一直存在于消息中

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:44:48 +08:00
Your Name
2fc702b543 fix: 优化占位图显示时序
1. AI 文字回复显示后延迟 3 秒再显示动态占位图
2. 延迟期间隐藏占位图,让用户有时间阅读文字
3. 只有 isGeneratingImageFlag=true 时才显示图片生成占位图

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:42:28 +08:00
Your Name
b60afb16cb fix: 使用 wrappedSendMessage 保存用户消息到独立状态
1. 创建 wrappedSendMessage 包装函数
2. 在发送消息时同时保存用户消息到 appendedMessages
3. 这样即使 useChat 重置消息状态,用户消息也会保留在 mergedMessages 中

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:35:03 +08:00
Your Name
b3d37f815a fix: 使用独立的 appendedMessages 状态避免与 useChat 冲突
参考 lobe-chat-pro 的架构,将 data-appendMessage 消息存储在
独立的状态中,通过 mergedMessages 合并后传递给组件,
避免直接修改 useChat 的内部状态导致消息丢失

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:29:21 +08:00
Your Name
3737b1ce99 fix: 修复占位图逻辑和移除导致错误的刷新
1. 移除 onFinish 中的 router.refresh(),它导致 React 错误
2. 简化占位图逻辑:hasImageContent 优先级最高
3. 当有图片内容时,无论其他标记如何,都隐藏占位图

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 10:20:59 +08:00
Your Name
096faa257a debug: 添加图片检测日志
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 03:09:03 +08:00
Your Name
22b9ad0d70 fix: 使用 requestAnimationFrame 立即添加消息
问题:延迟到 onFinish 处理消息导致消息被 useChat 重置
解决:使用 requestAnimationFrame 在收到消息时立即添加,避免延迟

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 03:04:07 +08:00
Your Name
2d0b556ee9 fix: 当 isGeneratingImageFlag=true 时强制显示占位图
问题:hasImageContent 检测到历史消息中的图片导致占位图提前消失
解决:isGeneratingImageFlag 优先级最高,为 true 时忽略 hasImageContent

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:58:50 +08:00
Your Name
ed30ca214d debug: 添加 isGeneratingImageFlag 调试日志
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:54:23 +08:00
Your Name
c6180e8610 fix: 修复智能自动模式占位图提前消失问题
问题:
- appendMessage 放入队列延迟处理导致 GENERATING_IMAGE 标记无法被及时检测
- status 变成 ready 时占位图消失,但图片还在生成中

解决方案:
- 添加 isGeneratingImageFlag 状态来跟踪图片生成进度
- 在收到包含 GENERATING_IMAGE 标记的消息时立即设置标志
- 在收到包含图片的消息时清除标志
- 将标志传递给 Messages 组件用于占位图显示判断

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:49:52 +08:00
Your Name
ed4c2fe8cd debug: 添加更多消息追踪日志
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:40:45 +08:00
Your Name
1dd9500f22 debug: 添加消息数组追踪日志
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:40:20 +08:00
Your Name
fbe797d436 fix: 简化智能自动模式占位图逻辑
问题修复:
1. 移除复杂的延迟状态管理
2. 使用 isGeneratingImage 标记来区分阶段
3. 简化占位图显示条件

流程:
1. 提交/streaming -> 显示思考动画
2. 收到对话消息+GENERATING_IMAGE标记 -> 显示生图占位图
3. 收到图片 -> 隐藏占位图

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:34:39 +08:00
Your Name
98807b135a fix: 对话消息出现后延迟6秒再显示生图占位图
流程:
1. 用户发送请求 → 显示思考动画
2. 对话消息出现 → 思考动画消失,显示对话文字
3. 等待6秒 → 显示生图占位图
4. 图片生成完成 → 占位图消失

修改:
- 添加 showImagePlaceholderDelayed 状态
- 收到 GENERATING_IMAGE 标记后延迟6秒设置状态
- 生图占位图根据延迟状态显示

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:28:38 +08:00
Your Name
58d0b8b5dd fix: 智能自动模式分阶段显示占位图
流程:
1. 用户发送请求 → 显示'AI正在思考'(Qwen3在分析)
2. 对话消息出现(带GENERATING_IMAGE标记)→ 切换到生图占位图
3. 图片生成完成 → 隐藏占位图

修改:
- 检测 GENERATING_IMAGE 标记来区分阶段
- 分析阶段显示 ThinkingMessage
- 生图阶段显示 ImageGenerationLoading

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:24:53 +08:00
Your Name
231d726b37 fix: 完善智能自动模式对话流程
修复内容:
1. 前端:检查用户最后一条消息是否有图片(而不是整个对话最后一条)
2. 前端:useEffect 依赖项添加 selectedModelId
3. 后端:错误回退时也生成友好消息
4. 后端:保存消息时添加完整的数据库字段
5. 分析器:增加颜色调整关键词匹配(改成X色、换成X色)

现在大模型(Qwen3 VL)会生成自然对话回复

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:18:30 +08:00
Your Name
ddada59db1 fix: 使用特殊标记保持占位图显示
问题:对话消息发送后占位图消失
解决:
1. 后端在对话消息末尾加上 <!-- GENERATING_IMAGE --> 标记
2. 前端检测到此标记时继续显示占位图
3. 渲染时清理掉这个标记(用户看不到)
4. 数据库保存时不带标记(纯对话)

流程:
1. 用户发送请求
2. AI回复对话(带标记)+ 占位图继续显示
3. 图片生成后显示

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:12:08 +08:00
Your Name
ff9f45858b feat: 智能自动模式先对话再生图
流程:
1. 用户发送请求(图片+文字)
2. AI立即回复对话('好的,我来帮你...')
3. 显示占位图(正在生成中...)
4. 图片生成后显示

修改:
- 后端:先发送对话消息,再调用生图API
- 前端:检查用户消息后所有assistant消息是否有图片
- 只有图片出现才隐藏占位图,对话文字不影响

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 02:00:21 +08:00
Your Name
73d1ab7912 fix: 智能自动模式对话和图片合并发送
修复流程:
1. 用户发送请求
2. 显示占位图
3. 图片生成后显示(对话文字 + 图片)

- 将对话消息和图片合并成一条消息
- 对话文字在前,图片在后
- 占位图显示到图片出现为止

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 01:56:18 +08:00
Your Name
6462fe2456 feat: 智能自动模式先对话再生图
修复内容:
1. 修复变量名 smartAutoHistoryImage -> smartAutoHistoryImages
2. 修复 model-router.ts 循环依赖问题
3. 智能自动模式显示占位图(当用户发送图片时)
4. 先发送对话消息(如:好的,我来帮你...),再生成图片
5. 让用户感受到是在和AI对话,而不是机器执行

流程:
用户发送请求 -> AI回复对话 -> 显示生图占位图 -> 显示生成结果

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 00:08:37 +08:00
Your Name
64dbbd8e6e fix: 智能自动模式使用通用思考动画
- 智能自动模式后端还在分析意图时,显示通用思考动画
- 避免在后端未确定生图前就显示生图占位图
- 等后端确定是生图模型后,自然切换到对应占位图

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 23:46:30 +08:00
Your Name
6d37542b0b fix: 智能自动模式 - 将 auto 传递给后端而非前端选择
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 23:17:53 +08:00
Your Name
8d580ad3ab chore: sync local changes
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:39:49 +08:00
Your Name
81d2489649 refactor: clean up debug logs and simplify message handling
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:36:29 +08:00
Your Name
258c4ce173 fix: clean up timer logic to prevent memory leaks
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:33:55 +08:00
Your Name
eca231575d fix: show loading placeholder when streaming but last message is user message
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:29:00 +08:00
Your Name
ddd0006f1e fix: use replaceState instead of redirect to preserve message state
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:25:58 +08:00
Your Name
cd5669a8bf fix: redirect to /chat/id after image generation to ensure messages load correctly
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:20:08 +08:00
Your Name
2fdf27e611 debug: add logging to track message state during image generation
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:18:02 +08:00
Your Name
390ab1b935 fix: add timeout protection for loading placeholder and improve image content detection
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:17:18 +08:00
Your Name
2e62d17317 fix: preserve chat context after image generation by updating URL to /chat/id
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:11:29 +08:00
Your Name
9fcb170483 fix: reduce zoom step to 2% for even finer scaling control
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 22:05:26 +08:00