前言¶
在 DeepSeek Harness(DSH)的网页客户端里,智能体产出的交付卡片、对话里的图片,在 DOM 里往往只是带 blob: 的 <img> 或预览区域。浏览器默认拖出到资源管理器或桌面时,经常落成没有扩展名的临时 blob,无法在本地按「真实文件」继续用。桌面端若依赖「另存为」或记路径,步骤也偏长。
dsh-desk-drop 是社区插件(维护者 thawline,分类:客户端),在浏览器半边改 DOM 与拖拽行为,在宿主半边提供磁盘上的真路径与 HTTP 文件服务,让你能把交付卡片和消息图片按原文件名拖到 Windows 桌面,并在卡片上通过菜单「打开所在文件夹」「复制路径」「另存为」。下文按 README 说明其能力与安装方式。
这是什么¶
- 名称:dsh-desk-drop(npm 包名同插件仓名)
- 维护者:thawline
- 定位:Windows 专用客户端插件,解决「网页里所见文件拖不出去、拖出去不是真文件」的问题
- 依赖环境:Node 22.13.0 及以上;仅支持 Windows(使用
explorer.exe /select与 PowerShell + WinForms 等系统能力)
社区目录页:thawline/dsh-desk-drop。源码与说明:GitHub 仓库。DSH 生态奉行「一切皆插件」;SkillHub 等为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
拖拽到桌面或资源管理器¶
交付卡片与消息中的图片均可直接拖到桌面或资源管理器。落地文件带正确扩展名,而不是无名的 blob。
实现上,浏览器半边接管相关 DOM;宿主半边提供真实文件。交付卡片路径来自 .cardPreview 的 title(对应官方 resolveWorkspacePath(cwd, file.path) 的绝对路径),直接读 DOM,不占用官方插槽。图片仅有 blob: 时,在 pointerdown 将字节 POST 到宿主暂存,换回真路径与 http 地址,并把 File 填入 dataTransfer.items,拖拽稳定性优于仅依赖 DownloadURL。
三点菜单与右键(同一套)¶
卡片最右侧 ⋯ 与卡片任意位置右键为同一菜单:
- 打开所在文件夹 —
explorer.exe /select,<路径>,资源管理器内蓝色选中该文件 - 复制文件路径 — 绝对路径写入剪贴板
- 另存为 — 优先 Electron 原生保存对话框;无 Electron 时退到 PowerShell + WinForms
宿主路由(前缀 /dsh-desk-drop)¶
插件在宿主侧注册如下路由,供浏览器半边与文件服务使用:
| 路由 | 说明 |
|---|---|
GET /file?p= |
返回磁盘真文件(inline + RFC 5987 文件名) |
POST /stash?name= |
接收原始字节,存临时文件,返回 { id, path, name, url } |
GET /stashed?id= |
按 32 位 hex 编号读回暂存文件 |
POST /reveal |
请求体 { path },打开文件夹并选中 |
POST /save-as |
请求体 { path },触发另存为 |
GET /ping |
宿主自检 |
GET/POST /hello |
浏览器半边心跳,确认客户端脚本已运行 |
暂存目录为 %TEMP%\dsh-desk-drop;超过 24 小时的文件会自动清理。
安装与启用¶
官方 README 给出的装法如下(需本机可访问 GitHub,且 profile 内能 link 本地目录)。
- 克隆仓库到本机(路径自定):
git clone https://github.com/thawline/dsh-desk-drop
- 在 DSH profile 的
package.json中挂载依赖并加入 bundle:
// <profile>/package.json
"dependencies": { "dsh-desk-drop": "link:<你 clone 下来的路径>" },
"dsh": { "profile": { "bundles": ["...", "dsh-desk-drop"] } }
- 为
node_modules/dsh-desk-drop建立指向源码目录的 junction(Windows):
New-Item -ItemType Junction -Path "<profile>\node_modules\dsh-desk-drop" -Target "<你 clone 下来的路径>"
- 改宿主相关代码后需重启 DSH 客户端(才会重新
require);仅改浏览器注入侧时,刷新页面即可。
安装前请自行阅读仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,涉及读写临时目录与打开资源管理器,请确认与你的安全策略一致。
典型用法¶
无需额外配置项;启用 bundle 并重启(或刷新)后:
- 在会话里出现交付卡片时,将卡片拖到桌面或文件夹,应得到与原路径一致扩展名的文件。
- 对消息图片在按下指针时由插件暂存后再拖出,同样应以具名文件落地。
- 点击卡片
⋯或右键,按需选择打开所在文件夹、复制路径或另存为。
若怀疑宿主未加载,可对照 README 中的 GET /ping 与浏览器侧的 GET/POST /hello 心跳逻辑排查(具体实现见仓库 lib 与 cordis.patch.yml)。
适用场景与注意¶
适合谁:主要在 Windows 上使用 DSH 网页客户端、需要把智能体交付物或对话图片当作本地文件继续编辑、归档或放进其他工具链的开发者。
限制与注意:
- 仅 Windows;Linux / macOS 不在 README 支持范围内。
- Node 版本须 ≥ 22.13.0。
- 图片拖拽依赖临时目录与宿主 HTTP;长时间未用的暂存文件会在 24 小时后清理。
- 当前 package.json 版本为 0.2.0;星标等动态数据以 GitHub 页面为准。
结尾¶
dsh-desk-drop 把「网页里的交付卡片和图片」和「磁盘上的真文件」接在一起:拖得出、带扩展名,并补上空文件夹、复制路径和另存为三条常用路径。若你正在 Windows 上跑 DSH 并厌烦 blob 拖拽,可按上文 link + junction 方式挂进 profile。