dsh-cd:DeepSeek Harness 工作目录切换插件

前言

DeepSeek Harness (DSH) 的会话在创建时 cwd(当前工作目录)会被冻结,它是会话身份的一部分,决定了会话存储位置、沙箱根目录以及 AGENTS.md 和 skills 的发现根。当工作重心长期移出原目录时,文件工具需要写完整绝对路径,且项目指令和技能发现可能还停留在旧位置。dsh-cd 插件为此提供了两种操作粒度。

是什么

dsh-cd 是一个为 DeepSeek Harness (DSH) 提供的插件,由 johnnren 维护。它为模型增加了一个 cd 工具,并为用户增加了 /cd 命令。核心价值在于解决“只换基准”和“真切搬迁”两种场景。

安装

安装插件无需额外配置,安装命令如下:

dsh plugin --profile web add dsh-cd

安装后,插件自带的 cordis.patch.yml 会自动挂载,模型即可使用 cd 工具,输入框可用 /cd 命令。

核心功能

插件提供两种粒度的切换模式:

  1. 工作基准覆盖(轻量)
    • 入口:cd {"path": "..."}
    • 效果:只改变“相对路径解析基准”。文件工具(read/write/edit/glob/grep 等)和 bash 工具的默认 workdir 会跟随新目录,但会话身份不变(存储位置、沙箱根等不变)。这是一种可逆的快速切换。
  2. 真切工作区搬迁(重量)
    • 入口:cd {"path": "...", "workspace": true, "confirmed": true}
    • 效果:真正改变会话身份。会话的存储位置、沙箱根、AGENTS.md、skills 发现、侧边栏分组全部跟随新目录。这需要会话处于空闲状态,且用户明确同意(confirmed: true)。

典型用法

模型调用

模型可以使用以下方式调用 cd 工具:

cd {"path": "/tmp/some-dir"}

请求真切搬迁时,需带上 workspace: true 和 confirmed: true:

cd {"path": "/path/to/other-project", "workspace": true, "confirmed": true}

其他用法:
* 回到上一个目录:cd {"path": "-"}
* 查看当前目录与排队状态:cd {}

用户命令

用户在输入框输入以下命令(不消耗模型回合):
* /cd <directory>:真正搬迁会话到该目录。
* /cd:查看当前目录、所属工作区、覆盖状态与排队中的真切切换。

技术细节与注意事项

  • 状态持久化:覆盖状态会写入 $DSH_HOME/dsh-cd/state.json,实例重启后该会话的覆盖设置会自动恢复。
  • 子代理继承:从当前会话派生的子代理会继承父会话的覆盖目录。
  • 真切搬迁限制:
    • 必须由用户明确同意(confirmed: true),模型不得自行补全。
    • 会话必须在回合空闲时执行,否则本轮仍按工作基准工作,回合结束后才完成搬迁。
    • 搬迁会重写会话日志,任何一步失败都会回滚。
  • 环境要求:
    • 需 Node.js >= 22.5。
    • 依赖宿主的 @deepseek-ai/dsh-tools 和 @deepseek-ai/dsh-home-paths。
  • 侧边栏同步:真切搬迁后,会话本身立即可用,但侧边栏分组通常需要刷新页面(F5)才能更新。

总结

dsh-cd 通过插件化的方式解决了 DSH 会话工作目录冻结的问题,既提供了轻量的路径基准覆盖,也提供了重量的工作区搬迁能力。适合需要在同一会话内频繁切换上下文,或需要将工作重心永久转移至其他项目的场景。

  • 插件目录: https://www.skillhub.cn/plugins/john-walks-slow/dsh-cd
  • GitHub 仓库: https://github.com/john-walks-slow/dsh-cd
羽毛球分组比赛记分
小程序二维码

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

小夜