Commit History
2 days ago
-
fix: recover bucket image persistence and finish history ZIPs before download
xiaolongmr2c2b631 -
fix: restore portable history export and HF runtime configuration loading
xiaolongmr1904a10
3 days ago
-
fix: handle disconnected uploads and bound HF image/config reads
xiaolongmr3241f40 -
fix: prevent watchdog CPU spin and reduce navigation polling overhead
xiaolongmr0dc72aa -
tupian lishi neng daohuile, cankaotu yinyong jieguo tu bu chongfu cun zijie
xiaolongmr本地历史包导出时其实已经把参考图打进 references/,但导入端从未读过这个目录, 换机器后参考图全丢(缩略图空白、「拿这张参考图再生成」直接报读不到)。 - 导入分两趟:先落结果图(服务器探活,取不到的从 images/ 回填成本地 blob), 再按引用回填参考图——引用了结果图的直接指回那份 blob / 地址,否则读 references/{turnId}-{index}.{ext},两边都没有才记缺失并丢弃该项,避免留裂图。 清单里能跨会话用的服务端地址(sourceUrl / 老记录的 dataUrl)保留作兜底。 - 参考图就是某张生成结果图时只存指针:记录里写 resultRef,blobKey 直接复用 result: 前缀的键,本地 IndexedDB 不再复制一份 2MB 级字节;导出也跳过对应的 references/ 条目,manifest 增加 reused_reference_count。 - 草稿(composer draft)同理,只存 resultRef,恢复时按需去结果图取字节。 - 修 getLegacyReferenceImages 只按 dataUrl 非空过滤、把「只有 blobKey」的新格式 参考图整条丢弃的问题——这是导入后参考图变 0 张的直接原因。 - 孤儿 blob 回收白名单把共享键算进来,否则列表加载会把还在被引用的结果图删掉。 浏览器实测:保存后 blob 只有结果图一份;导出 zip 为 images/img-1.png + references/turn-1-1.png + manifest.json,reused=1; 清空后导入 referencesReused=1、参考图 storageKey 指向 result: 键且能读回字节; url-only 场景不为参考图另存字节;后端 pytest 失败集合与基线完全一致。64ea6ff -
修复侧栏导出导入按钮被裁切
xiaolongmr侧栏内容区宽度约 228px,而按钮基础样式带 shrink-0 不可压缩, 「新建对话 + 清空 + 导出 + 导入」四个控件最小宽度约 260px, 最后一个按钮被侧栏边界裁掉一半。 把额外操作移到「新建对话 / 清空」下方独立一行,导出与导入各占一半宽度 并补上文字标签,清空按钮改为固定 36px 宽;未传 extraActions 的页面 (商品视觉)布局不受影响。6ba4b86 -
daochu gaicheng chun liulanqi bendi daba
xiaolongmr用户最初的需求是「把这台浏览器上的记录打包带走」,但之前的实现做成了 「导出当前账号在服务器上的任务」:POST /api/image-tasks/export 按 require_identity 过滤 owner,换账号登录就要再导一次,同一浏览器里其他账号 的历史永远导不到。而会话结构本来就只存在 IndexedDB,且 localforage 实例 不带账号前缀(storeName image_conversations,key 是纯 UUID),跨账号的数据 天然都在本地 —— 这个需求只有在浏览器端才做得对。 改动: - 新增 zip-stream.ts:流式 ZIP 写入器,仅 STORED。JSZip 是整包驻留内存, 1.6GB 的历史会直接把标签页撑爆;这里逐条写 FileSystemWritableFileStream, 任意时刻内存里只有当前这一张图。自己实现 CRC32 与 local/central/EOCD 结构。 - 新增 image-history-local.ts:读全部会话,图片按 image.id 存成 images/{id}.{ext},参考图存 references/{turnId}-{n}.{ext},manifest 里带 source=local-browser。保存对话框放在最前面弹,避免读完 IndexedDB 后 Chrome 的 transient activation 过期(Must be handling a user gesture)。 - 旧域名的绝对地址统一折成相对路径:历史任务里存着 https://img2.z-l.top/... 这类换部署前的地址,不折的话那批图会全部记成 missing。 - 新增 image-history-local-import.ts:按 manifest 自动区分本地包与服务器包, 本地包直接写回 IndexedDB,不上传。导入时先并发探测图片 url 是否还能取到, 只有取不到的才从 zip 回填成 blob 存储并清空 url(persistConversation 见到 url 会丢弃 b64_json),避免 1.6GB 历史把 IndexedDB 配额撑爆。 - image/page.tsx:导出改走本地打包,带节流…5c1e443 -
桌面端也能用历史记录导出/导入
xiaolongmr宽屏(lg 以上)用的是常驻侧边栏,没有「历史记录」按钮,那个弹窗根本打不开, 所以之前只把入口放在弹窗里,桌面用户完全看不到。 - ConversationSidebar 增加可选 extraActions 插槽,渲染在「新建对话 / 清空」 同一行;不传就和原来完全一致(chat-room 页不受影响)。 - 图片页桌面侧栏传入两个图标按钮(下载=导出、上传=导入),窄屏仍走历史记录弹窗。 - 文件 input 提到组件顶层:Radix Dialog 关闭时不渲染内容,挂在弹窗里会让桌面 侧栏的导入按钮点不动。2ab5567 -
图片历史记录支持一键导出与导入
xiaolongmr历史记录弹窗新增「导出」「导入」两个按钮,按账号隔离、合并导入。 后端: - ImageTaskService.export_owned_tasks / import_tasks:导出本人全部任务原始数据; 导入时 task_key 按当前身份重算(不信任包里的 owner_id),同 task_id 跳过, 包里未完成的任务标为 error,避免前端一直等一个不存在的轮询,也不重算积分。 - POST /api/image-tasks/export:打包 zip,含 manifest.json、会话结构、任务与 原图(images/ 相对路径与 /images/<rel> 一致)。图片已是压缩格式,用 STORED 存储省 CPU。导出后由后台任务删临时文件。 - POST /api/image-tasks/import:限 8GB 解压上限、逐条校验路径防 zip slip, 图片落到 images_dir(已存在则跳过),并把记录里的图片地址重写到当前部署。 前端: - 会话结构(标题/分组/轮次)只存在浏览器本地,导出时一并上传进包,导入时 写回本地存储,否则导入后标题和分组会丢; - 导入后把会话里的图片地址改成本站相对路径,换部署也能显示; - 按钮带 loading 与结果提示(新增/跳过/图片张数)。 实测:导出 13 条记录 + 5 张图 12.5MB;重复导入返回 skipped=13 imported=0; 坏包与格式不符均返回 400。35a279e
4 days ago
-
init
xiaolongmr85270f9