Skip to content

Releases

v0.3.0 — 按光标插入 + 适配 DSH 0.2.0-rc.1

Choose a tag to compare

@666emmm 666emmm released this 30 Sep 01:07

dsh-file-upload v0.3.0 — 按光标插入 + 适配 DSH 0.2.0-rc.1

🐛 修复:点「读取剪贴板路径」不再清空输入框

根因(源码级确认):会话插槽的标准 props 只有 { useConversation, useInput, inputActions }
(ui-conversation/apply.ts 的 uiSession.provide({ hooks: ['conversation','input'], props: ['inputActions'] })),
没有 input 对象。旧代码读 props.input?.draft 恒得空串,"追加"于是退化成 setDraft(路径) ——
而 setDraft 是整篇替换(Lexical root.clear() + 逐行重建 + selectEnd()),已输入内容被清掉、光标跳到末尾。

现在改用官方 useInput 钩子读实时草稿;上传按钮、文件夹上传、粘贴接管三处同样的缺陷一并修掉。

✨ 新增:按光标插入

  • 读 composer([data-composer-input])内的真实选区 → 路径文本插到光标处(有选中内容则替换)→ 光标还原到插入内容之后;
  • 读不到光标(无会话 / 选区不在编辑器 / 草稿里已有 @引用 chip)→ 退化为追加到末尾;两条路径都不会丢文本;
  • 两个按钮 mousedown 阻止默认行为,避免点击抢走 composer 的焦点与选区。

✅ 兼容 DSH 0.2.0-rc.1 / rc.2

0.2.0-rc.1 把 settings 服务换成 SettingsForms(配置文档编辑器),不再有 register(ns, schema) / get(ns)
—— 旧版(≤ v0.2.2)在此会因 apply 抛 TypeError 而完全加载不了。v0.3.0 改为能力探测:

  • 有命名空间注册表(≤ 0.1.x)→ 照旧 register/get/update,行为完全不变;
  • 没有(≥ 0.2.0-rc.1)→ 跳过注册 + export const Config,读取用 loader 注入的条目 config,
    写入落 $DSH_HOME/file-upload-settings.json(条目 config 打底、自管文件覆盖它显式保存过的键)。

客户端依赖的 useInput / inputActions.setDraft / [data-composer-input] / conversation.input.left /
settings.section 在 rc.1 经源码核对均未变。详见仓库内 COMPAT-dsh版本.md。

你的 DSH 版本 该装哪个
0.2.0-rc.1 / rc.2 本版(v0.3.0+)
0.1.5-rc.2 v0.2.1+(本版同样可用)
0.1.1-rc.2 / 0.1.2-alpha.1 v0.2.0+

📦 安装 / 升级

dsh plugin --profile web add "github:666emmm/dsh-file-upload#v0.3.0"

# 已装旧版的先移除再装(pnpm 对同一 spec 可能判为"已是最新")
dsh plugin --profile web remove dsh-file-upload
dsh plugin --profile web add "github:666emmm/dsh-file-upload#v0.3.0"

装完重启 dsh web(host 半有改动;client 改动刷新页面即可)。

🧪 本次验证

  • 客户端:Node + 最小 DOM/React 桩实测 4 用例 —— 光标中间插入(光标还原到 2+插入串长度)、末尾插入、
    选区替换、无选区降级追加;原文本零丢失。
  • host:两种 settings 形态各跑一遍 —— 注册表形态(注册/读取/写入照旧)、SettingsForms 形态
    (apply 不抛错、读条目 config、写自管文件并回读)。
  • 如实说明:0.2.0-rc.1 部分是源码级核对 + 桩模拟,尚未在真实 rc.1 实例上跑过。

v0.2.1 — 适配 DSH 0.1.5-rc.2

Choose a tag to compare

@666emmm 666emmm released this 16 Sep 07:13

dsh-file-upload v0.2.1 — 适配 DSH 0.1.5-rc.2

⚠️ v0.2.0 在 DSH 0.1.5-rc.2 上完全无法加载(host 导入即抛 SyntaxError),请使用 v0.2.1+。

🐛 修复

  • 插件装不起来:@deepseek-ai/dsh-settings 自 0.1.5 起不再导出 settingsNamespace。现在设置命名空间就是字面量 'file-upload',注册/读写继续走 provider 级 API(settings.register(NS, schema) / get(NS) / update(NS, patch),在 0.1.5-rc.2 中仍是公开契约)。
  • 官方草稿附件 API 改名:conversation.createDraftImages(files) + inputActions.addImages(ids) → conversation.createDrafts(sessionId, files) + inputActions.addAttachments(ids)(回滚 releaseDraftAttachments)。客户端现在两代自动兼容(存在性检查选路),图片仍进官方附件条。
  • loader 条目 id 冲突:DSH 自带 @deepseek-ai/dsh-client-file-upload 已占用 loader 条目 id file-upload,重复 id 会让整个 profile 启动失败。本插件条目 id 改为 file-upup;settings 命名空间与 HTTP 路由保持 file-upload(避免孤立已有用户设置)。

📦 安装 / 升级

# 新装(建议锁定 tag)
dsh plugin --profile web add "github:666emmm/dsh-file-upload#v0.2.1"

# 从旧版升级:先移除再装(pnpm 对同一 github spec 可能判为"已是最新")
dsh plugin --profile web remove dsh-file-upload
dsh plugin --profile web add "github:666emmm/dsh-file-upload#v0.2.1"

装完重启 dsh web(host 半改动需重启;client 改动刷新页面即可)。

若你的 profile 用 pnpm 10 建的(store v10),请用 pnpm 10 执行 dsh plugin,pnpm 11 会因 store 版本不匹配报 ERR_PNPM_UNEXPECTED_STORE。

✅ 本次验证

对 源码版 DSH 0.1.5-rc.2(fb2c4b9e69)+ schemastery 3.18.2 实测:

  • 模块导入 ✓ → apply() 注册 6 条路由 ✓ → settings.register('file-upload', schema) 收到合法 schema ✓
  • GET /api/file-upload/config → 200 且读到 settings 值 ✓
  • GET /api/file-upload/files → 200 且列表/分类正确 ✓

破坏性变更清单与核对结果见仓库内 COMPAT-dsh版本.md。

v0.2.0

Choose a tag to compare

@666emmm 666emmm released this 31 Aug 02:50

dsh-file-upload v0.2.0

Fork 自 a903067276-rgb/dsh-file-upload(MIT,v0.1.7),新增文件管理与剪贴板读路径。

✨ 新增

  • 已上传文件管理:设置卡片「文件上传」内浏览附件库(全部/图片/文件/文件夹,分页、按修改时间倒序),每行显示原始名/大小/时间/相对路径;一键复制 @路径 或删除(二次确认 + host 端路径包含校验,防目录穿越)。
  • 剪贴板读真实路径(零拷贝):在文件管理器复制文件/文件夹后,点输入框上传按钮旁的剪贴板按钮 → host 读系统剪贴板真实路径列表 → 以 @路径/@"路径" 插入草稿。不传内容、不落盘、无大小限制,模型按地址现读。
    • Windows:PowerShell Get-Clipboard -Format FileDropList(完整支持,含中文路径)
    • macOS:osascript furl Linux:xclip / wl-paste(text/uri-list)
  • 粘贴纯路径文本自动转 @引用:「监听剪贴板 = 全部文件」时生效。

🐛 修复

  • Windows「打开文件夹」误报失败:explorer.exe 成功打开时退出码也常为 1(单实例委派),已容忍该退出码。

📦 安装

dsh plugin --profile web add "github:666emmm/dsh-file-upload#main"

重启 dsh web(需 pnpm 在 PATH)。升级到 v0.2.0 会替换同名旧安装;若提示版本冲突可先 dsh plugin --profile web remove dsh-file-upload 再装。

✅ 兼容性

dsh 版本 说明
0.1.1-rc.2 直接可用,无需改动
0.1.2-alpha.1+ dsh.client.inject 已适配:@deepseek-ai/dsh-client-runtime → @deepseek-ai/dsh-client-ui-renderer

详见仓库内 COMPAT-dsh版本.md。

🙏 致谢

原版:https://github.com/a903067276-rgb/dsh-file-upload (MIT)