前言¶
DeepSeek Harness(DSH)的输入框支持用 @路径 把文件或目录挂进对话。桌面端通过 Electron 注入 __DSH_HOST_PATHS__,拖入文件夹能映射成真实路径;纯浏览器里则会被拒绝,提示「只有桌面端支持添加文件夹,浏览器里请添加单个文件」。而 @deepseek-ai/dsh 目前并未发布独立桌面端,dsh web 仍是多数人在用的入口。
下面介绍社区插件 dsh-folder-attach(维护者 sixzjd):不改 DSH 核心逻辑,而是借助宿主机 Node host 的目录选择与文件索引,在浏览器里实现与桌面端等价的 @目录/ 引用。
这是什么¶
dsh-folder-attach 是 DSH 的客户端(web profile)插件,分类为客户端扩展。它在网页 composer 上提供三种入口——左侧「添加文件夹」、斜杠命令 /folder、拖入或粘贴文件夹——最终插入的都是标准 @路径 mention,与工作区内相对路径、工作区外绝对路径、含空格加引号等规则与桌面端拖文件夹行为一致。
插件不绕过浏览器安全模型(浏览器仍无法给出拖入文件夹的绝对路径),而是换用宿主机侧能力:系统文件夹对话框返回真实路径;拖入/粘贴则通过宿主上的 fileReferences/list 按名称在工作区内解析。
运行环境要求:dsh >= 0.2.0-rc.2(package.json 中 engines.dsh 与 dsh.compatibility 一致)。当前仓库版本 0.1.4,许可证 MIT。
背景与原理¶
DSH Web 界面分两部分:沙箱内的浏览器 client,以及本机上的 Node host。官方输入框对目录有一条硬编码判断:无 globalThis.__DSH_HOST_PATHS__ 且拖入的是目录时,直接走 attachment.directoryDesktopOnly 文案。
本插件利用 DSH 已有的公开接缝,例如宿主目录选择(README 中提及 dsh-host-directory-picker-auto;在 macOS 且回环绑定时可解析为 native 后端,执行类似 osascript 的「选择文件夹」并返回 POSIX 路径),以及 @ 补全背后的 ctx.remote.fileReferences.list。因此桌面端那条「仅桌面支持文件夹」的判定不会被误触发,composer 里出现的是可参与上下文的 @目录/ 文本。
核心功能¶
| 入口 | 行为 |
|---|---|
| 输入框左侧「添加文件夹」 | 在宿主机弹出系统文件夹对话框,选中后插入 @目录/ |
/folder 命令 |
同上 |
| 拖入 / 粘贴文件夹 | 按名称在工作区内解析,插入 @目录/;同批普通文件仍走原有上传通道 |
插入结果为标准 @路径 mention。拖入解析不到时会明确报错并提示改用对话框,不会猜测路径。
安装与启用¶
插件以当前 dsh 进程权限在宿主机上执行目录选择与索引查询;安装前建议在 GitHub 仓库 查看源码与 MIT 许可证,并确认 profile 与 dsh 版本满足要求。
推荐从插件名安装(web profile):
dsh plugin --profile web add dsh-folder-attach
也可指定 GitHub 源(可钉到某个 tag):
dsh plugin --profile web add github:sixzjd/dsh-folder-attach
或在侧边栏 插件 → 添加插件 中填写上述地址。安装完成后刷新浏览器页面。
卸载:
dsh plugin --profile web remove dsh-folder-attach
或在插件页关闭开关。README 说明插件仅在浏览器内注册 composer 槽位、一个斜杠命令和两个事件监听器,不写全局对象,卸载后不应残留。
典型用法¶
- 安装并刷新 DSH 网页后,在对话输入框左侧点击「添加文件夹」,在系统对话框中选中目录,输入框会出现
@某目录/。 - 在 composer 中输入
/folder并执行,效果与按钮相同。 - 从文件管理器将单个文件夹拖入输入区,或粘贴文件夹;插件在工作区内按文件夹名称解析并插入
@目录/。若同一次操作里还有普通文件,文件仍按 DSH 原有附件流程处理。
工作区内的路径会以相对形式写入 mention;工作区外保留绝对形式。
适用场景与注意¶
适合谁: 主要用 dsh web、又需要把整个项目目录或子目录以 @路径 交给模型的人——例如对照仓库结构提问、让智能体扫某一 subtree,而不想只为拖文件夹去装未发布的桌面 shell。
已知限制(摘自上游 README):
- 拖入/粘贴的文件夹只能按名称在工作区内解析;浏览器不提供绝对路径,解析失败时需改用对话框。
- 拖入生成的是
@目录/纯文本 mention,不是桌面端带图标的文件夹 chip;功能等价,外观不同。 - 索引查询有返回上限,极端情况下同名文件夹可能不在候选中。
- 若 profile 将目录选择解析为
browse后端(远程 / SSH),系统对话框不可用,pick会拒绝并提示;此时仍可用拖拽解析。 - 混合拖拽(文件夹 + 图片)时,插件会复刻 composer 对本次拖入图片的数量/体积预检;与宿主侧整条消息的校验口径可能略有差异,但不影响最终校验。
- 插件页显示名依赖
locale/en.json存在(zh.json才会被读取)。
升级与兼容: 插件仅使用文档点名的扩展点(如 conversation.input.left 注入、ctx.commandUi.register、ctx.remote.directoryPicker.pick、ctx.remote.fileReferences.list),不 monkeypatch 官方代码。若未来 DSH 重命名这些接缝,表现可能是静默不显示,而非拖垮整个 DSH。
结尾¶
dsh-folder-attach 把「网页版不能拖文件夹」的问题转成「向宿主机要路径、向索引要名称」:对话框与 /folder 给确定路径,拖入/粘贴给工作区内按名解析,输出统一为 @路径 mention。DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 与上游仓库相互独立,并非 DeepSeek / 幻方官方应用商店。
- 目录页:https://www.skillhub.cn/plugins/sixzjd/dsh-folder-attach
- GitHub:https://github.com/sixzjd/dsh-folder-attach