dsh-enterworktree:在 DSH 里创建 git worktree 并开隔离 session

前言

在 DSH(DeepSeek Harness)里做并行开发时,常见做法是切分支或在主工作区里来回改。Claude Code 提供 /enterworktree:新建 git worktree,让 agent 在隔离目录里工作,不污染主树。DSH 的 session 工作目录(session.header.cwd)是只读的,无法像桌面 IDE 那样「原地切换 cwd」,因此需要宿主插件把「建 worktree + 开新 session」串成一步。下面介绍社区插件 dsh-enterworktree(维护者 scccy,分类:工作流),它在 DSH 里注册 enter_worktree 工具,行为上对标 Claude Code 的 EnterWorktree。

这是什么

dsh-enterworktree 是 DSH 宿主(Host)插件,通过 ctx.tools.register(defineTool(...)) 注册 enter_worktree,注册方式与 dsh-speckit-workflow 一致。它会创建或复用 git worktree,并在 worktree 路径上调用 ctx.remote.session.create({ cwd }) 开启隔离 session;你在 Web GUI 打开返回的 sessionId,即等于「进入」该 worktree。仓库:https://github.com/scccy/dsh-enterworktree;社区目录页:https://www.skillhub.cn/plugins/scccy/dsh-enterworktree。

核心功能

与 Claude Code EnterWorktree 的对应关系

Claude Code 的 EnterWorktree 会创建 git worktree 并把 agent 切进去。DSH 下等价流程是:

  1. 在嵌套布局 .worktrees/<branch>/,或兄弟布局 ../<repo>--<branch> 创建 git worktree;
  2. 用 ctx.remote.session.create({ cwd }) 在该路径开全新隔离 session;
  3. 返回 sessionId 与路径;当前 session 不会被移动,仍指向原目录,后续改动发生在你在 GUI 打开的那个 worktree session 里。

工具 enter_worktree 参数

参数 说明
branch 新分支名;省略则自动生成 wt/<timestamp>;本地分支已存在则直接 attach
base 新分支基点,默认 HEAD
path 显式绝对路径;提供后忽略 layout
layout nested(默认)或 sibling
openSession 是否开隔离 session,默认 true
inPlace true 时不开 worktree,直接返回仓库根目录(安全阀)

成功时典型输出字段包括 ok、branch、worktreePath、created、sessionId、sessionOpened、message,例如:

{
  "ok": true,
  "branch": "wt/...",
  "worktreePath": "/abs/path/.worktrees/wt/...",
  "created": true,
  "sessionId": "session-xxxxx",
  "sessionOpened": true,
  "message": "已创建 worktree 并开隔离 session ..."
}

bundle 配置(cordis.patch.yml)

配置 默认 说明
layout nested nested → .worktrees/<branch>;sibling → ../<repo>--<branch>
dotworktreesDir .worktrees 嵌套布局下的 worktree 目录名
autoOpenSession true 是否自动开隔离 session

安装与启用

DSH 生态按「一切皆插件」组织;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。安装前建议浏览 GitHub 源码与 MIT 许可证;插件在 当前 dsh 进程权限 下运行。

方式 A:从 Git 仓库安装(README 推荐)

在 Web GUI 的 plugin_manager 中使用:

plugin_manager action=install_bundle target=github.com/scccy/dsh-enterworktree

安装后 enter_worktree 在会话中可用。若修改了 lib,需重启 dsh-desktop 让宿主重载。

方式 B:从 npm 安装(发布后)

plugin_manager action=install_bundle target=dsh-enterworktree

package 要求 Node.js >=20(见 package.json engines)。

典型用法

在已启用该 bundle 的 DSH session 中,由 agent 调用宿主注册的 enter_worktree 即可,无需手写 git worktree 命令再手动新建 session。常见意图包括:

  • 指定 branch 与可选 base,在默认嵌套目录下开一条并行线;
  • 设置 layout: "sibling",把 worktree 放在仓库旁的 ../<repo>--<branch>;
  • 传入 path 固定绝对路径,忽略布局规则;
  • 仅需路径、暂不自动开 session 时,可配合 openSession: false 或 bundle 里 autoOpenSession: false(仍受 profile 是否提供 dsh-api-remotes 约束)。

若 profile 未 提供 dsh-api-remotes(即无 ctx.remote.session),工具仍可能创建 worktree 并返回路径,但无法自动开 session。

适用场景与注意

适合:同一仓库上多任务并行(功能分支、实验性改动、与主 session 隔离的 agent 工作流);习惯 Claude Code /enterworktree 语义、希望在 DSH Web GUI 里用 session 切换代替改 cwd 的开发者。

注意:

  • 原 session 目录不变;所有 worktree 内修改都在新打开的 session 里进行。
  • 自动开 session 依赖 profile 中的 dsh-api-remotes。
  • 社区目录星标等统计以站点展示为准;以 README 与仓库为准核对行为与安装命令。

结尾

dsh-enterworktree 把「git worktree + 隔离 session」收成 DSH 宿主工具一步,补齐 DSH 只读 cwd 下的并行工作流缺口。目录页:https://www.skillhub.cn/plugins/scccy/dsh-enterworktree;源码与详细说明:https://github.com/scccy/dsh-enterworktree。

羽毛球分组比赛记分
小程序二维码

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

小夜