dsh-host-paths:拖入文件变成 @路径 引用,而不是上传副本

前言

在 DeepSeek Harness(DSH)里给模型喂本地文档时,常见做法是拖文件进输入框。官方 composer 其实支持两种落地方式:能解析到宿主路径时,生成 @路径 的引用 chip,不读盘上传;解析不到时,走上传,把文件物化到会话附件目录。

在 DSH Desktop(Electron)里,壳层已经通过 window.__DSH_DESKTOP_FILE_PATH__ 暴露了真实路径,但输入框侧的接缝 globalThis.__DSH_HOST_PATHS__ 在桌面环境里默认没有人写入。结果是第二条分支永远不走,拖什么都会上传——即便 Electron 已经知道文件在磁盘上的位置。对经常在工作区内引用 docx、pdf、zip 的开发者,这会多一次复制、多占附件空间,也和「用路径让 Agent 直接读工作区文件」的习惯不一致。

下面介绍社区插件 dsh-host-paths(维护者 SereneJi,分类:客户端):只做一件事,把桌面壳的路径桥接到 composer 已有的宿主路径接缝上,让官方逻辑自己把拖入的非图片文件转成 @路径 chip。

这是什么

dsh-host-paths 是一个 DSH bundle 小插件,版本 0.1.0(MIT)。它不抢拖拽事件、不读文件内容,只是在客户端启动时把 __DSH_DESKTOP_FILE_PATH__ 接到 __DSH_HOST_PATHS__ 上;接上之后,官方 addFiles 分支会按既有规则选择「上传」或「@路径引用」。

生态上,DSH 奉行「一切皆插件」;社区目录在 SkillHub 插件页,与 DeepSeek / 幻方无官方从属关系。源码仓库见 GitHub(README 中的安装示例指向 github:384124694/dsh-host-paths,以 README 原文为准)。

官方 composer 的两条路径(背景)

dsh-client-ui-conversation 的 addFiles 逻辑可以概括为:

path = 宿主路径桥?.pathFor(file) ?? ""
path === "" || 图片        → 上传(file draft,物化到会话附件目录)
否则                      → @路径 引用 chip(零上传)

本插件补的就是 pathFor 这一侧:用 Electron webUtils.getPathForFile 桥出的能力,填进 __DSH_HOST_PATHS__。

核心功能

装上之后,行为与 README 中的对照表一致:

操作 结果
拖入非图片文件(docx / xlsx / pdf / zip 等) 输入框出现 @绝对路径 chip,零上传、零复制;文件在工作区内时写成相对路径
拖入文件夹 出现 @路径/ 文件夹 chip
拖入图片 仍走原生图片上传(缩略图、尺寸探测、多图限额等官方逻辑不变)
路径含空格 自动使用 @"带 空格 的 路径.docx" 引号语法
壳拿不到真路径(OneDrive 占位符、压缩包内拖出、纯浏览器) 回落为官方上传,不报错

插件不做的事:不读内容、不复制、不搬移、不删改、不联网、不注册 host 服务;若环境里已有别人写入的 __DSH_HOST_PATHS__,检测到已有值则不覆盖。

安装与启用

--profile 填你实际使用的配置名(DSH Desktop 多为 desktop,纯 dsh web 为 web)。包内已带 lib/ 构建产物,无需本地构建。

从 GitHub 安装(建议钉住 commit):

dsh plugin --profile desktop add github:384124694/dsh-host-paths#<sha>

从本地检出目录安装(README 原文;安装前请自行检查源码与许可证):

dsh plugin --profile desktop add link:$HOME/dsh-host-paths

重启 DSH Desktop(或重跑 dsh web)并刷新页面后生效——客户端脚本在启动时编入 __DSH_BOOT__。

卸载:

dsh plugin --profile desktop remove dsh-host-paths

重启后接缝消失,拖拽恢复官方默认上传行为。

典型用法与验证

  1. 按上一节安装并重启 Desktop。
  2. 打开开发者工具 Console,确认接缝已挂上:
window.__DSH_HOST_PATHS__                        // 装好后应为 { pathFor: ƒ }
typeof window.__DSH_DESKTOP_FILE_PATH__?.getPathForFile   // 应为 "function"
  1. 从资源管理器拖一个非图片文件到输入框:应出现 @路径 chip,输入框上方不应出现文件上传卡片(卡片表示走了上传分支)。
  2. 需要更细调试时,可在 Elements 里选中 file input 对应的 File,再执行:
window.__DSH_HOST_PATHS__.pathFor($0)

适用场景与注意

适合谁

  • 主要在 DSH Desktop(Electron) 里开发,希望拖入工作区内的文档、压缩包、文件夹时直接得到 @路径,让会话侧按路径引用而不是附件副本。
  • 接受图片仍上传的官方设计,不指望本插件改变图片通道。

边界与权限

  • 普通浏览器没有桌面路径桥,插件会静默不装接缝,拖拽保持上传——不会假装成功。
  • 引用 chip:文件在工作区内时为相对 cwd 的路径,否则为绝对路径。
  • 插件随当前 dsh 进程 在客户端加载;安装前请阅读仓库源码与 MIT 许可证,确认符合你的安全策略。社区插件非官方应用商店分发,SkillHub 目录与上游仓库归属以页面与 README 为准。

维护者仓库提供 npm test(node --test,7 项行为测试,无需 DSH 服务器);改 lib/client.js 后重启 profile 即可,无额外构建步骤。

结尾

dsh-host-paths 用一行接缝把 DSH Desktop 已有的路径能力接回 composer,恢复「能走 @路径 就不上传」的官方分支。若你受困于「拖文件必上传」,可以先在 Desktop profile 装上、用 Console 与拖拽验证,再决定是否长期启用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜