前言¶
DeepSeek Harness (DSH) 的核心设计理念是「一切皆插件」。在默认的工作流中,模型通常仅能访问单一目录。当开发者需要在多个项目、库或依赖目录间切换时,传统的切换方式效率较低且容易出错。sttrevens/dsh-linked-folders 插件旨在解决这一限制,它模仿 Codex 的链接文件夹机制,通过注入多目录上下文,使模型能够访问多个文件夹。
是什么¶
这是一个 DSH 插件,提供多文件夹工作区访问能力。它支持全局持久化链接列表(跨会话有效)以及会话临时动态链接(随对话结束失效)。插件由维护者 Sttrevens 开发,遵循 MIT 许可证。
安装与启用¶
安装时需指定 Web 配置文件,因为该插件依赖 Web 端的侧边栏与管理界面。
- 执行以下命令安装插件:
dsh plugin --profile web add @steven-wu/dsh-linked-folders
- 安装完成后,重启 Web 配置文件并刷新页面。
核心功能¶
- 多文件夹工作区:允许模型访问多个目录,而非单一目录。
- 全局持久化链接:维护一个跨会话的全局链接列表。
- 会话临时链接:在当前对话中动态添加或移除链接。
- Web 管理界面:提供可视化的侧边栏管理面板。
- 工具支持:提供
link_folder和unlink_folder工具供模型调用。 - 工作区选择器增强(可选):提供补丁脚本以增强工作区选择器功能。
使用方法¶
通过界面管理¶
在 Composer 输入栏左侧点击 📁 按钮(或左侧的文件夹图标)。在打开的面板中,可以查看全局链接列表、添加新链接(支持绝对路径或浏览按钮)、移除链接,以及查看当前会话的临时链接。
通过对话指令¶
在对话中,模型可以通过自然语言指令调用工具:
* 添加链接:说 “link folder /path/to/foo”,模型会调用 link_folder 工具。
* 移除链接:说 “unlink /path/to/foo”,模型会调用 unlink_folder 工具。
会话内添加的临时链接会在系统提示中以 (this session) 标识。
增强工作区选择器(可选)¶
官方的工作区选择器菜单不支持插件直接注入。插件提供了补丁脚本,将新入口添加到菜单中。执行以下命令:
python3 scripts/patch-workspace-picker.py
执行后需重启 dsh web。注意:该脚本在 dsh 更新后需要重新运行。
配置与文件存储¶
插件的状态保存在本地配置文件中。默认路径为:
~/.dsh/linked-folders.json
配置文件结构示例:
{
"global": ["/Users/you/projects/app", "/Users/you/projects/lib"],
"sessions": { "session-abc…": ["/tmp/scratch"] }
}
可以通过环境变量 DSH_LINKED_FOLDERS 或 bundle 行的 config.path 覆盖默认路径。所有链接路径会被标准化为真实路径,且必须为已存在的目录。
沙盒与权限说明¶
插件仅向模型宣传文件夹并提供管理 UI,不改变底层的文件沙盒机制:
* 在 danger-full-access 模式下,模型拥有读写任意位置的权限。
* 在 workspace-write 模式下,模型仅可读取链接文件夹,写入操作仍受限于会话工作区根目录。
注意事项¶
- 路径有效性:配置的路径必须为已存在的目录。
- 补丁维护:如果安装了增强工作区选择器的补丁,在 DSH 更新后需重新运行补丁脚本。
- 包名一致性:注意包名
@steven-wu/dsh-linked-folders与 GitHub 维护者名Sttrevens不一致,这是已知的不一致点。
总结¶
dsh-linked-folders 为 DSH 提供了类似 Codex 的多目录访问能力。通过全局持久化列表和会话临时链接的结合,开发者可以在不提升模型系统权限的前提下,为模型构建一个灵活的工作区环境。更多细节与源码可参考:GitHub 仓库。