Skip to content

Releases: GLFzr/dsh-file-upload

v2.1.0 — 修复深度实测发现的 8 个问题

Choose a tag to compare

@GLFzr GLFzr released this 15 Aug 19:57

v2.1.0 修复内容(均经实测复现验证)

  • P1 快路径误复用:同名同大小但内容已改的文件不再被秒回旧路径(File.lastModified + .dsh-manifest.json 登记校验);重复拖同一文件仍秒回
  • P2 清理误标:新增 manifest 清单,冗余副本只认清单登记,notes_2024.txt 这类自然命名不再被误标/误删
  • P3 失败泄漏:上传失败立即 abort,不再滞留宿主内存 10 分钟
  • P4 静默丢弃:移除 16 文件上限截断(一次拖 20 个文件实测 20 个 chip 全插入)
  • P5 插入乱序:同一次拖拽的多个文件按拖拽顺序整体插入(批次聚合,实测 [大文件, a, b] 按原顺序插入)
  • P6 busy/scope 卡死:composer 忙或会话 scope 未就绪时插入失败自动重试
  • P7 sanitize 兜底:纯非法字符名落盘为 file
  • P8 跨源防护:HTTP 路由拒绝跨源请求(403 前排空请求体,keep-alive 连接不被污染)

测试

  • 官方套件 21 → 27 例全绿(新增 P1/P2/P3/P7/P8 回归 + 旧文件迁移 + 清单生命周期)
  • 独立真实 HTTP 层验证 17/17
  • 新版本完整栈在线实例验证 17/17(隔离端口 3099 实测)
  • 浏览器 E2E:P4/P5 修复生效验证通过

v2.0.0

Choose a tag to compare

@GLFzr GLFzr released this 15 Aug 16:08

v2.0.0 — DSH 文件上传插件(正式更名)

定位变更:从"拖拽文件转路径"正式更名为 任意文件上传 —— 把 DSH Web GUI 原版只支持图片的附件通道,扩展为任意文件上传(PDF、3MF、ZIP、Excel、代码、图片……)。路径只是内部机制,用户界面不再出现任何路径概念。

本版本内容

  • 📦 任意文件拖入(多文件/图片均可),原版"仅图片"附件通道被静默接管
  • 📍 本机文件零上传直引(Chromium entry API);Firefox 等走上传中转
  • 🔵 文件以整体蓝色 chip 插入输入框(只显示文件名),提交给 agent 的是完整真实路径
  • ♻️ 两级去重(begin 秒回 + end 内容哈希),同名同大小不同内容绝不误复用
  • 🛡️ 完整性校验(分块长度/齐全性/解码字节数),绝不落盘损坏文件
  • ⏳ 插入点待机圆环(150ms 延迟、镜像层定位、chip 插入瞬间同步消失)
  • 🗑️ 侧边栏垃圾桶图标(设置图标上方):上传目录清理(冗余副本/按大小/清空)
  • 🔧 bundle patch 自引用 dsh-file-upload(修复旧名引用导致 dsh 启动崩溃的问题)

升级注意

  • 插件 id / 路由 / source 全部更名为 file-upload(/api/file-upload/*)
  • 旧包名 dsh-drop-file-to-path 不再使用;GitHub 仓库已改名(旧地址 301 重定向)
  • profile 依赖更新为 "dsh-file-upload": "github:GLFzr/dsh-file-upload" 后重新 install 即可

测试

21 例宿主行为测试 + GitHub Actions CI。

v1.4.8

Choose a tag to compare

@GLFzr GLFzr released this 15 Aug 14:24

v1.4.8 — 拖拽文件转路径插件(完整版)

为 DSH Web GUI 提供 Codex 式拖拽交互:拖入任意文件 → 路径以蓝色整体 chip 插入输入框光标处(Hermes 风格)。本版本整合了此前全部迭代,一次发布。

功能

  • 🖱️ 页面任意位置拖入任意文件(多文件、图片均可),拖拽时全屏提示
  • 📍 本机文件直接引用原路径(Chromium entry API):零上传、零复制;Firefox 等拿不到路径时才回退到 dropbox 上传
  • 🔵 路径以一个整体 chip 插入:蓝色文字(只显示文件名+格式)、不可局部删改、篮筐宽度随文件名自适应(composer 真实字体实测 + NBSP 扩宽)
  • 🙈 .b64 后缀与 _1/_2 重名序号显示隐藏:提交给 agent 的仍是带后缀的真实路径
  • ♻️ 两级去重(先查后传):begin 同名同大小秒回旧路径(零上传);end 内容 sha256 逐字节比对,同名同大小不同内容绝不误复用
  • 🛡️ 完整性校验:分块精确长度、齐全性、解码字节数 === 声明大小——截断/缺块/伪造一律拒绝
  • 插入点待机圆环:只有真正需要等待的上传才显示(150ms 延迟,瞬间完成不出圈);DeepSeek 蓝渐隐拖尾转圈环,定位在光标右侧一个字符处(镜像层测量);chip 插入的同一瞬间同步消失
  • 🗑️ 侧边栏垃圾桶图标(设置图标上方,悬停提示):打开 Dropbox 清理浮层——文件清单、清理冗余 _N 副本、按大小清理、清空全部,操作前确认
  • 🚀 ~4MB 分块、512MB 上限、16MB/次请求体上限

关键修复(本版本整合)

  • >4MB 文件损坏(分块非 3 的倍数导致 base64 中间 == 截断)→ 分块 4194303(4MiB−1)
  • 草稿投影损坏(无 pad 补丁的 DSH 上 NaN 截断)→ 自动回退 [offset, offset+1)
  • 去重失效/误复用 → begin 快路径 + end 内容哈希两级
  • chip 样式丢失(动态规则时序 bug)→ 恢复全局规则

用法

  1. 安装:dsh plugin --profile web add <本仓库路径>(或源码版 pnpm dsh plugin --profile web add ./plugins/drop-file-to-path),重启 DSH
  2. 拖文件进页面 → 需要等待时插入点出现蓝环 → chip 出现在光标处
  3. 侧边栏垃圾桶图标 → 清理 dropbox(冗余副本/按大小/清空)
  4. 浏览器限制说明、.b64 解码约定、开发/测试方式详见 README

测试

21 例宿主行为测试(node --test)+ GitHub Actions CI(语法检查 + 测试)。

v1.1.0

Choose a tag to compare

@GLFzr GLFzr released this 14 Aug 19:38

v1.1.0 更新内容(相对 v1.0.0)

  • 路径以整体 chip 插入输入框:蓝色文件名文字、不可被局部删改(Backspace/Delete 一次整删),光标处插入
  • chip 宽度随文件名自适应:插入时按 composer 真实字体实测文件名宽度,以 NBSP 扩展占位符贴合(误差 <1 个字符),不再有固定宽度空槽
  • 输入框只显示文件名+格式:落盘痕迹(.b64 后缀、重名 _1/_2 序号、目录路径)全部隐藏;提交给 agent 的仍是完整真实路径
  • 同名同大小自动复用:重复拖入同一文件时宿主端直接返回已有 dropbox 路径,不再重复落盘、序号不再增长
  • 本机文件直接引用:若浏览器暴露源路径(webkitGetAsEntry)则直接引用原文件,跳过上传
  • 新增 \ ools/patch-chip-font.mjs\:chip 基础字体(1em)生成工具

注意:chip 的扩展占位机制需要配套核心 composer(dsh-client-ui-conversation)的 pad 支持,详见 README「工作原理」。