Skip to content

fix: 支持 AI 任务栏跟随图片目标并修复本地图恢复#197

Merged
chenpingan666 merged 6 commits into
ljquan:developfrom
selwen-0102:codex/target-bound-ai-taskbar
Jul 23, 2026
Merged

fix: 支持 AI 任务栏跟随图片目标并修复本地图恢复#197
chenpingan666 merged 6 commits into
ljquan:developfrom
selwen-0102:codex/target-bound-ai-taskbar

Conversation

@selwen-0102

@selwen-0102 selwen-0102 commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

问题描述

生成图片插入画布后,AI 任务栏无法稳定跟随当前图片目标。局域网环境导入普通本地图时,还可能继承上一目标的提示词或附件、显示旧缩略图,或因 Service Worker / Cache Storage / crypto.subtle 不可用而无法恢复图片。

修复思路

  • 单选生成图片或普通本地图时,复用现有 AI 任务栏并吸附到目标附近
  • 生成图片恢复自身提示词;普通本地图保持空提示词,不回查 /asset-library/... 的历史生成任务
  • 切换图片目标时清理上一目标的附件、知识库和来源任务上下文
  • 目标 URL、prompt、task ID 或 anchor ID 原位变化时立即刷新上下文
  • 缩略图统一使用 RetryImage,隔离旧 Blob 请求和重试定时器,释放旧 Object URL
  • 编辑提示词后创建新任务并原位替换目标图片,保留元素 ID、位置和尺寸
  • Cache Storage 不可用时,将 Blob 降级存入 IndexedDB;旧元数据缺少 Blob 时再次导入可自动修复
  • crypto.subtle 不可用时使用分块 SHA-256,避免大文件一次性读取
  • 文件选择、拖拽、粘贴和素材库统一按 MIME / 扩展名识别本地图片

更新代码架构

  • AIInputBar:当前图片目标识别、上下文隔离、提示词恢复、吸附布局和替换任务提交
  • RetryImage / SelectedContentPreview:稳定虚拟 URL 渲染、快速换源竞态隔离和 Object URL 生命周期管理
  • UnifiedCacheService:IndexedDB v2 media-blobs 降级仓库,删除、批量删除、清空和旧数据自愈
  • @aitu/utils/blob:浏览器无 SubtleCrypto 时的分块 SHA-256
  • 本地图片入口:统一 MIME 兜底与稳定 URL 持久化
  • OpenSpec、经验文档和 QA 已同步,QA 共 14 个场景

验证

  • Drawnix 定向测试:7 个测试文件,51 项通过
  • Utils Blob 测试:1 个测试文件,15 项通过
  • pnpm exec nx run drawnix:typecheck 通过
  • git diff --check 通过
  • pnpm-lock.yaml 仅新增 Drawnix 的 fake-indexeddb 测试依赖

本机未安装 openspec CLI,因此未执行 openspec validate update-target-bound-ai-taskbar --strict

问题描述:生成图片插入画布后,AI任务栏始终固定在底部,无法恢复目标提示词,编辑后也不能稳定替换原图片。

修复思路:为图片、任务与anchor建立轻量绑定;单选生成图片时吸附现有任务栏;编辑提交创建新任务,成功后原位更新元素,失败或目标丢失时不新增图片。

代码架构:目标识别与布局收敛在AIInputBar,任务字段由workflow converter和image MCP透传,useAutoInsertToCanvas负责首次绑定、批量独立绑定和原位替换。
@vercel

vercel Bot commented Jul 15, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the ljquan's projects Team on Vercel.

A member of the Team first needs to authorize it.

@netlify

netlify Bot commented Jul 15, 2026

Copy link
Copy Markdown

Deploy Preview for ai-tu ready!

Name Link
🔨 Latest commit c564c40
🔍 Latest deploy log https://app.netlify.com/projects/ai-tu/deploys/6a6022050d3a650008ab4068
😎 Deploy Preview https://deploy-preview-197--ai-tu.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 66
Accessibility: 80
Best Practices: 100
SEO: 90
PWA: 100
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

水滴鱼 added 2 commits July 15, 2026 15:53
问题描述:AI任务栏跟随 PR 的 Web 类型检查因结构化图片参数扩展为 unknown 后,视频参数仍声明为全字符串映射而失败;Vitest 测试模式又误启用开发代理,导致 provider-routing 回归测试把绝对地址改写成相对地址。

修复思路:视频参数仅保留字符串值,保持原有请求协议;开发代理增加 test 模式守卫,仅在真实开发环境改写 Tuzi 地址。

代码架构:参数类型收窄保留在 workflow converter,环境路由判断收敛在 provider transport,不修改依赖清单和锁文件。
问题描述:上一提交为验证 develop 基线测试临时加入了供应商路由测试环境守卫,超出任务栏跟随功能范围。

修复思路:撤回路由基线调整,仅保留任务栏参数类型修复;provider-routing 与全量测试红灯继续按 develop 基线问题处理。

代码架构:任务栏 PR 只修改任务栏跟随及其直接参数链路,不夹带供应商路由修复。
@selwen-0102

Copy link
Copy Markdown
Contributor Author

检查说明:

  • 本 PR 无依赖冲突:pnpm install --frozen-lockfile 已通过,且未修改 package.jsonpnpm-lock.yamlpnpm-workspace.yaml
  • 本 PR 当前为 MERGEABLE,与 develop 无 Git 合并冲突。
  • 本次任务栏代码的 Web typecheck 已通过;任务栏相关 4 个测试文件、84 项测试已通过。
  • CI / main 剩余失败来自 develop 的 Drawnix 全量测试基线(17 个旧测试文件、51 项)和既有 AI Chat 包体积限制,失败测试文件与本 PR 修改无重叠。最近合入的 PR 修复 tuzi-api 端点路由兜底 #193 也带有相同 main 红灯。
  • Vercel 是团队部署授权失败;当前提交者对上游仓库仅有 READ 权限,需仓库/Vercel 团队管理员授权或忽略该非代码检查。
  • Netlify Deploy Preview 已通过:https://deploy-preview-197--ai-tu.netlify.app

问题描述:\n局域网环境导入本地图后,任务栏可能显示旧图片、继承旧提示词,或因缓存能力不可用导致图片无法恢复。

修复思路:\n按当前图片目标隔离提示词、附件和知识库上下文;缩略图统一通过 RetryImage 读取稳定虚拟 URL,并隔离旧 Blob 请求与重试定时器。

更新代码架构:\n白板持久化稳定 URL,Cache Storage 不可用时 Blob 降级存入 IndexedDB;哈希按分块处理,四类本地图片入口统一 MIME 识别,临时 Object URL 仅用于渲染。
@selwen-0102 selwen-0102 changed the title feat: 支持AI任务栏跟随生成图片目标 fix: 支持 AI 任务栏跟随图片目标并修复本地图恢复 Jul 21, 2026
@selwen-0102

Copy link
Copy Markdown
Contributor Author

CI 结果说明

本次提交 fb7c6a36 的功能相关测试在 GitHub CI 中全部通过:

  • retry-image.test.tsx:5 项通过
  • unified-cache-service.test.ts:3 项通过
  • data/blob.test.ts:4 项通过
  • useAutoInsertToCanvas.test.ts:10 项通过
  • useImageGenerationAnchorSync.test.ts:7 项通过
  • image anchor lookup/task:22 项通过

主 CI 仍为红色,但失败来自仓库既有全量测试与预算基线:

  • Drawnix 全量:15 个文件失败、49 项失败;上一提交的 CI 已是 17 个文件失败、51 项失败
  • 典型错误仍为 settings-manager mock 缺少 providerPricingCacheSettings / LEGACY_DEFAULT_PROVIDER_PROFILE_ID、Workspace storage 初始化、Node/jsdom Blob 类型不一致等,与本 PR 修改文件无关
  • AI Chat bundle:当前超限 709.15 kB;上一提交已超限 707.1 kB
  • Vercel 仍为仓库授权失败;Netlify deploy preview 成功

因此本次功能回归已通过,剩余红灯继续属于仓库基线和部署授权问题。

@selwen-0102

Copy link
Copy Markdown
Contributor Author

依赖冲突已处理

已将最新 develop 合入当前 PR 分支,提交:c4c90e78

验证结果:

  • GitHub:MERGEABLE,无代码合并冲突
  • pnpm install --frozen-lockfile 通过,锁文件与包清单一致
  • Drawnix 定向测试:7 个文件,51 项通过
  • Utils Blob 测试:15 项通过
  • drawnix:typecheck 通过
  • git diff --check 通过

fake-indexeddb 继续作为 Drawnix 测试依赖保留,未产生重复版本或锁文件漂移。新的 CI 已触发。

问题描述:传入 contentHash 的缓存选项会被误判为普通元数据,导致局域网本地图缓存重复计算哈希;新增缓存测试使用 Node 全局注入后还会影响 Drawnix 的 jsdom 测试环境。

修复思路:将 contentHash 纳入结构化选项识别,保留调用方已计算的哈希;测试改为文件内独立 IndexedDB,并兼容 jsdom Blob 的结构化克隆和读取。

更新代码架构:缓存选项归一化继续收敛在 UnifiedCacheService,测试环境适配只保留在 unified-cache-service.test.ts,不修改全局 Vitest 配置。
@selwen-0102

Copy link
Copy Markdown
Contributor Author

最新修复与 CI 复验

已追加提交 c564c400

  • 修复 contentHash 被误判为普通 metadata,避免局域网本地图缓存重复计算哈希
  • 缓存测试改为文件内独立 IndexedDB/jsdom Blob 适配,不污染全量测试环境
  • 本地定向测试:7 个文件、51 项通过
  • drawnix:typecheckgit diff --check 通过

GitHub CI Run 29884218138 已复验:

  • 新增 unified-cache-service.test.ts:3 项全部通过
  • 全量结果仍为 15 个文件、49 项失败,与上一轮完全一致,没有新增回归
  • AI Chat 仍为 849.15 kB(超限 709.15 kB),数值与上一轮完全一致,本提交未增加包体
  • Netlify Deploy Preview 通过
  • Vercel 仍是团队授权失败,需要管理员处理

PR 当前仍为 MERGEABLE,无 Git 或依赖冲突;剩余红灯属于仓库测试/包体基线与外部部署授权。

@chenpingan666
chenpingan666 merged commit 4783b00 into ljquan:develop Jul 23, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants