前言¶
DeepSeek Harness(dsh)的工具跑在本机上:读文件、改代码、执行命令,用的都是操作系统里的真实路径。网页界面却是另一套规则。出于安全考虑,浏览器几乎从不把拖入文件的真实文件系统路径交给页面,最多给一个本地文件 URI,很多时候什么都不给。结果就是:把 PDF、源码目录或配置文件拖进输入框,要么被当成上传(得到一份切断了相邻依赖的副本),要么触发「仅支持 PNG、JPG、WebP、GIF」一类提示,要么只能手敲一长串绝对路径。
dsh 的设计口号是「一切皆插件」。模型和工具可以换,Web UI 的交互同样可以补。社区目录里的 dsh-drag-and-drop 就是在补这个缺口:把文件或文件夹拖到页面任意位置,插件在运行 dsh 的那台机器上把路径解析回来,再以可移除标签的形式挂到输入框上方。
需要先说清楚:下面介绍的是 DeepSeek Harness 插件库 收录的社区插件。该站点是独立目录,与 DeepSeek / 幻方没有官方从属关系,不是官方应用商店。本文依据目录详情页、GitHub 仓库的 README / package.json / CHANGELOG,以及 DeepSeek Harness 官方仓库 交叉核对。
这是什么¶
dsh-drag-and-drop 是一款界面增强插件,由 akiracod 维护,当前发布版本为 v0.2.0(CHANGELOG 标注日期 2026-08-14)。仓库主要语言是 TypeScript,许可证为 BSD-3-Clause。GitHub 仓库页面当前显示 2 星;社区目录页收录时显示 1 星。
它解决的问题很具体:在 DSH Web UI 里拖入本地文件或文件夹,得到的是原始绝对路径,而不是一份上传副本。文档和文件夹会变成输入框上方的可移除芯片(chip),输入框本身保持空白,方便继续打字;也可以直接点芯片栏的发送按钮,不打字就发出去。
仓库 README 写明:这是 omdsh-dev/dsh-drag-and-drop(原 bill9109/dsh-drag-and-drop)的维护 fork。package.json 里的包名仍是 @omdsh-dev/dsh-drag-and-drop,卸载时要用这个名字。
核心功能¶
拖入即挂路径,不上传文件¶
把文件拖到 Web UI 任意位置即可。拖拽过程中会有全页面压暗和模糊提示。松开后,每个项目变成输入框上方文件栏里的一枚芯片:悬停可看完整解析路径,点 × 移除。支持一次拖入多个文件或文件夹。
插件不会上传、复制、移动、修改或删除文件。文件始终留在原来的目录里。草稿通过 DSH 的输入状态服务写入,不直接改输入框 DOM。
文档走芯片,图片走原生¶
v0.2.0 相对上游的主要变化在交互,而不是定位算法:
- 文档和文件夹显示为芯片,不再把
C:\...\file.docx这类路径文本塞进输入框。 - 芯片栏自带「发送」按钮,解析出的路径会自动拼进发出的消息。
- 拖入文档不再触发输入框那个「仅支持 PNG、JPG、WebP、GIF」提示。
- 纯图片拖放仍走原生逻辑,显示缩略图附件。
浏览器藏路径时,在本机把文件找回来¶
如果浏览器提供了本地文件 URI,插件直接转成当前系统的原生路径,覆盖 POSIX、Windows 盘符和 UNC 网络路径。
如果浏览器把路径完全藏起来,定位顺序是:
- 当前 Workspace
- 其他已注册 Workspace
- Desktop、Documents、Downloads
- 操作系统文件索引
- 有边界限制的平台目录搜索
系统索引按平台不同:macOS 用 Spotlight;Linux 优先 plocate,其次 locate;Windows 优先 Everything CLI,其次 PowerShell。Linux 在索引没有结果时还会搜用户主目录以及 /mnt、/media 下的挂载点;Windows 则会搜用户目录和可用固定磁盘。
搜索是有上限的:单次外部索引命令 3 秒超时,最多保留 100 个候选,每个递归根最多访问 20,000 个目录项,读不到的目录和文件直接跳过。
同名文件先按完整文件名和大小过滤,修改时间只用于排序。只剩一个候选时不读文件内容;多个候选才比较开头、中间、结尾的采样指纹,大文件采样仍冲突才会算完整 SHA-256。内容完全相同、无法自动区分时,弹出路径列表让用户选。文件夹按名称匹配,结构相同则再对最多 24 个确定性选择的文件做内容采样。目录遍历最多 10,000 个项目、32 层,不跟随符号链接或 Windows junction。
安装与启用¶
社区目录页给出的安装命令是:
dsh plugin add github:akiracod/dsh-drag-and-drop
这是一个 Web UI 插件。仓库 README 要求装进 web profile,并声明 package.json 里带有 dsh.bundle 与 dsh.client,不需要改 DSH 源码,也不再读取旧的 config.yaml:
dsh plugin --profile web add github:AKIRACOD/dsh-drag-and-drop
本地 checkout 可以写成:
dsh plugin --profile web add /path/to/dsh-drag-and-drop
仓库已提交 lib/ 构建产物,安装后不用再构建。package.json 要求 Node.js ^20.0.0 || >=22.0.0。
需要可复现安装时,按目录页说明固定 commit 哈希:
dsh plugin add github:akiracod/dsh-drag-and-drop#commit
把 commit 换成实际哈希。
装好之后,按你平时启动 DSH Web UI 的方式重启,再刷新浏览器。插件会出现在浏览器引导图 __DSH_BOOT__ 里,client bundle 随页面加载。只装不重启,页面上不会生效。
升级:
dsh plugin --profile web update github:AKIRACOD/dsh-drag-and-drop
卸载要用包名,不是 GitHub 路径:
dsh plugin --profile web remove @omdsh-dev/dsh-drag-and-drop
卸载后同样需要重启 Web UI 并硬刷新浏览器。
目录页和仓库都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应检查源代码仓库和许可证。
典型用法¶
仓库 README 里的操作步骤可以按原样做:
- 从 Finder、Linux 文件管理器或 Windows 资源管理器,把文件或文件夹拖到 DSH Web UI 的任意位置。
- 出现全页面拖拽提示后再松开。每个项目变成输入框上方文件栏里的芯片。
- 悬停芯片查看完整路径,点 × 移除不需要的项。
- 只想发送这些文件时,点文件栏的「发送」按钮;如果同时还写了文字,按回车或点右下角原生发送按钮,路径会一并带上。
纯图片继续走原生附件。文档和文件夹走芯片栏。
拖完没有反应时,README 建议先确认全页面提示是否出现,再用下面命令检查 bundle 是否在 web profile 里,并确认已经重启 Web UI 且硬刷新过页面:
dsh --profile web --dump-config | grep drag-and-drop
大磁盘上定位偏慢时,Linux 可安装 plocate,Windows 可安装 Everything 及其命令行工具,并尽量把文件放在 Workspace 或常用目录里。macOS / Linux 上,浏览器隐藏路径时,位于所有可搜索根之外的文件夹可能定位失败,需要移进 Workspace 或安装系统索引。
适用场景与注意事项¶
适合已经在用 DSH Web UI、需要把本机文档、源码目录或配置文件交给智能体处理的人。典型情况是:文件就在 Workspace 或桌面 / 文档 / 下载目录里,你希望智能体读的是原路径,而不是一份上传副本。
几点需要留意:
- 这是 Web UI 插件,要装进
webprofile,装完必须重启 Web UI 并刷新浏览器。 - 插件以当前 dsh 进程权限运行。安装前阅读源码和 BSD-3-Clause 许可证;社区目录不是 DeepSeek 官方商店。
- 多数情况下只读元数据;只有多个同名同大小候选时才会读少量内容做指纹,采样仍无法区分才会读完整文件算 SHA-256。全部发生在运行 dsh 的本机。
- 卸载命令是
remove @omdsh-dev/dsh-drag-and-drop,因为 fork 仍沿用上游包名。 - 旧版 README 里的
pnpm --filter @deepseek-ai/dsh add ...加config.yaml流程已经过时,不要再用。
小结¶
dsh-drag-and-drop 把浏览器拖放和 DSH 需要的真实路径接起来:文档变成输入框上方的芯片,图片仍走原生附件,文件不离开原来的目录。当前版本是 v0.2.0,维护者是 akiracod,许可证 BSD-3-Clause。
目录详情页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-drag-and-drop-akiracod/
GitHub 仓库:https://github.com/akiracod/dsh-drag-and-drop