dsh-folder-attach:在 DSH 网页版 composer 里引用文件夹

前言

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 槽位、一个斜杠命令和两个事件监听器,不写全局对象,卸载后不应残留。

典型用法

  1. 安装并刷新 DSH 网页后,在对话输入框左侧点击「添加文件夹」,在系统对话框中选中目录,输入框会出现 @某目录/。
  2. 在 composer 中输入 /folder 并执行,效果与按钮相同。
  3. 从文件管理器将单个文件夹拖入输入区,或粘贴文件夹;插件在工作区内按文件夹名称解析并插入 @目录/。若同一次操作里还有普通文件,文件仍按 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
羽毛球分组比赛记分
小程序二维码

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

小夜