DeepSeek Harness (DSH) 的内置会话分叉功能可以复制对话历史,但默认情况下不会同步对应的工作区文件状态。对于需要基于特定回合继续开发或调试的场景,这会造成状态割裂。dsh-workspace-snapshot-fork 插件通过扩展 DSH 的分叉机制,将回合对应的文件快照一并带出新会话,确保源工作区保持不变。
该插件由 Yu-Zhuang1 维护,开源协议为 MIT。它利用 Git 对象作为存储后端,为每个完成的回合生成不可变的检查点。
工作原理¶
DSH 每个已完成的回合都会生成一个基于 Git 的不可变检查点。当在 Web UI 中 fork 该回合时,插件会复制会话日志前缀并在新工作区中实现匹配的文件。
具体行为取决于源工作区的类型:
- 普通目录:从私有快照仓库实现检查点。
- Git 仓库根目录(有提交):创建新 worktree 和
dsh/workspace-fork/<id>分支,保留历史、远程、钩子和仓库配置。 - 嵌套目录或无提交的 Git 仓库:使用私有快照行为。
安装与启用¶
此插件目前仅支持 Web profile。安装命令如下:
dsh plugin --profile web add "github:Yu-Zhuang1/dsh-workspace-snapshot-fork#v0.1.0-alpha.1"
安装或更新后需重启 DSH。
配置说明¶
默认配置项位于 cordis.patch.yml:
mode: workspace
storageRoot: <DSH_HOME>/workspace-snapshot-fork/snapshots
childRoot: <DSH_HOME>/workspace-snapshot-fork/workspaces
exclude: [.git, node_modules, .env, .env.*, .DS_Store]
DSH_HOME 默认为 ~/.dsh。如需覆盖配置,需编辑 $DSH_HOME/profiles/web/cordis.patch.yml 并填入完整配置。注意: DSH 替换完整的 config 值,而非合并字段,因此覆盖时需保留所有配置项。
Native 模式¶
在完整配置中设置 mode: native,可将新分叉委托给 DSH 原生行为。Native 模式不记录新的工作区检查点,但归档清理仍会释放现有检查点。切换回 workspace 模式后,仅后续完成的回合会生成检查点。
清理与维护¶
分叉产生的子 worktree、分支及快照不会自动删除。手动清理命令如下:
git -C <source-repository> worktree remove <child-workspace>
git -C <source-repository> branch --delete dsh/workspace-fork/<id>
注意事项¶
- 平台支持:目前仅 Windows 支持已测试(Web profile)。Linux 和 macOS 尚未验证。
- 版本兼容:支持 DSH
0.1.1-rc.x系列。DeepSeek Harness 处于开发者预览,升级后需验证插件。 - 安全性:快照是本地 Git 对象,未加密。插件不视
.gitignore为安全策略,需在exclude中手动添加敏感文件路径(如.env)。 - 限制:无 headless fork 适配器。存档会话会移除检查点映射。仅
mode: workspace下创建检查点。
链接¶
- GitHub: https://github.com/Yu-Zhuang1/dsh-workspace-snapshot-fork
- 插件目录: https://www.skillhub.cn/plugins/Yu-Zhuang1/dsh-workspace-snapshot-fork