Repository navigation
Releases
v0.3.0 — 按光标插入 + 适配 DSH 0.2.0-rc.1
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
dsh-file-upload v0.2.1 — 适配 DSH 0.1.5-rc.2
🐛 修复
- 插件装不起来:
@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 条目 idfile-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
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:PowerShell
- 粘贴纯路径文本自动转
@引用:「监听剪贴板 = 全部文件」时生效。
🐛 修复
- 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。