前言¶
在 DeepSeek Harness(DSH)桌面端里新建工作区时,会弹出系统自带的文件夹选择框。这个对话框的起点通常是系统默认位置(例如「下载」),而且调用方无法通过参数指定起始目录。如果你习惯把项目集中在某个盘符下的固定目录,每次都要从下载文件夹一路点进去,会浪费不少时间。
下面介绍社区插件 dsh-directory-plugin(中文名「目录插件」)。它在 Windows 上接管「新建工作区」的目录选择流程,把原生选择框的默认起点改成你在设置里配置的路径;子目录仍由你自行挑选。非 Windows 环境可以安装,但不会生效,行为与未装插件时一致。
这是什么¶
- 仓库 / 包名:
dsh-directory-plugin - 维护者:milu7
- 分类:客户端(同时包含宿主路由与浏览器侧槽位接管)
- 许可证:MIT(
package.json版本 1.0.0) - 平台:仅 Windows 10/11 上完整生效;起始目录依赖 Win32 COM 的
IFileDialog::SetFolder
插件不修改 DSH 安装目录里的任何文件;配置与日志写在用户目录下的 .dsh 中。
核心功能¶
- 接管目录选择:替换「新建工作区」弹出的文件夹对话框,从可配置目录开始。
- 设置页:DSH 设置中增加「新建工作区目录」,支持输入路径、「浏览…」、保存,以及「恢复系统默认」。
- 安全回退:插件不可用、目录被删除或对话框出错时,自动退回 DSH 内置选择框,不阻断新建工作区。
- 诊断日志:每次弹框记录起始目录是否生效,便于排错。
同一时刻只会有一个选择框:设置页「浏览…」与「新建工作区」互斥时,后发起的会提示「已经有一个文件夹选择框开着」。选择框为 DSH 窗口上的模态对话框,打开时 DSH 主窗口不可操作。
安装与启用¶
前置条件:Windows 10/11 + DSH 桌面端(Next 内核)。插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证。
官方 README 给出的登记方式是把插件目录以 link: 形式加入 desktop 配置档(不复制文件),需先取得仓库到本地,再通过 DSH 自带的 plugin-cli.js 登记:
# 按实际情况修改这两个变量
$DSH_EXE = 'C:\Program Files\DSH\DSH NEXT.exe' # 你的 DSH 桌面端安装位置
$PLUGIN = 'D:\Plugins\dsh-directory-plugin' # 本仓库所在的本地目录
$CLI = Join-Path (Split-Path $DSH_EXE) 'resources\app.asar\lib\plugin-cli.js'
$env:ELECTRON_RUN_AS_NODE = '1'
$env:DSH_HOME = "$env:USERPROFILE\.dsh"
& $DSH_EXE --expose-internals $CLI desktop add "link:$PLUGIN"
经过上面的步骤之后:
- 重启 DSH 桌面端(插件组合在启动时读取)。
- 打开 设置 →「新建工作区目录」,选择目录并保存。
- 试一次「新建工作区」,确认选择框从设定路径打开。
卸载时在同一环境下执行 desktop remove dsh-directory-plugin 并重启;配置文件与日志仍留在 %USERPROFILE%\.dsh,可手动删除。
$env:ELECTRON_RUN_AS_NODE = '1'
$env:DSH_HOME = "$env:USERPROFILE\.dsh"
& $DSH_EXE --expose-internals $CLI desktop remove dsh-directory-plugin
典型用法¶
- 进入 设置 →「新建工作区目录」。
- 点 「浏览…」 选目录,或手动输入路径,再点 「保存」。「浏览…」会从输入框当前路径打开(未保存也可),但须保存后才对「新建工作区」生效。
- 之后每次「新建工作区」,选择框都从该目录开始。
- 「恢复系统默认」 清空配置,回到 DSH 原有行为。
配置文件路径为 %USERPROFILE%\.dsh\workspace-directory.json,示例:
{ "directory": "D:\\Projects" }
手动编辑 JSON 时,Windows 路径中的反斜杠需写成 \\。旧文件名 workspace-anchor.json / default-workspace-directory.json 会在首次读取时自动迁移,迁移后旧文件改名为 *.migrated 保留。
工作原理(简要)¶
插件在宿主侧注册 HTTP 路由 /dsh-directory-plugin/config 与 /dsh-directory-plugin/pick;浏览器侧接管 conversation.hero.workspace.directoryFlow 与 sidebar.workspaces.directoryFlow 槽位,并注册设置页。弹框时客户端调用 POST /pick,由 lib/dialog-worker.cjs 通过 koffi 调用 Win32 FileOpenDialog,用 IFileDialog::SetFolder 设定起点。失败时回退到桌面端内置的 __DSH_DIRECTORY_PICKER__。
仓库随包携带 koffi 3.1.1(vendor/,安装无需联网)。x64 使用内置二进制;ARM64 会尝试 DSH 安装目录自带的 koffi 3.x,该路径未在 ARM64 上实测。
排错与兼容性¶
诊断日志:%USERPROFILE%\.dsh\workspace-directory.log(超过 1MB 时轮转保留一份)。
判断是否生效可对照 README:
- 重启后日志出现
host-routes-registered→ 宿主侧已加载。 - 新建工作区时新增
pick ... initial={"applied":true}→ 使用本插件对话框。 - 若无
pick行且仍是旧对话框 → 浏览器侧接管未生效,功能退化为 DSH 原生行为。
兼容性要点:Windows 10/11 x64 为主要支持环境;其他系统设置页仅显示说明,「新建工作区」仍用 DSH 自带选择框。依赖 DSH 桌面端槽位与客户端插件机制;若未来版本变更槽位,插件会静默回退。
结尾¶
目录插件解决的是一个小而具体的交互问题:把「新建工作区」文件夹选择框的默认起点固定到你常用的项目根目录,并保留失败时的静默回退。DSH 生态强调「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系,本文信息以仓库 README 为准。
- 社区目录页:https://www.skillhub.cn/plugins/milu7/dsh-directory-plugin
- GitHub:https://github.com/milu7/dsh-directory-plugin