前言¶
在 DeepSeek Harness(DSH)里开新会话时,工作目录和 Git 分支往往要单独在终端里查、再改。Codex 一类客户端会在「新建会话」界面用 chip 展示当前位置并支持切换;若你希望 DSH 也有同类体验,且 Git 写操作仍受会话沙箱约束,就需要客户端插件配合 Host 侧执行 git。
下面介绍社区插件 dsh-worktree-branch(维护者 Qcsj777,分类:客户端)。它在 DSH「新建会话」页为 已是 Git 仓库 的工作区增加 Codex 风格的「工作位置 / 分支」chip,可在界面里切换 worktree、切换或新建分支;Git 命令与副作用由插件 Host 半 执行,写操作走该会话的沙箱策略。
这是什么¶
dsh-worktree-branch 是面向 DSH 的第三方插件包(npm 名 dsh-worktree-branch,当前资料中版本 0.1.0,许可证 MIT)。一句话定位:在 New Session 屏幕给 Git 工作区提供 Location / Branch 切换器,Git 事实与写操作不在浏览器里裸跑,而由 Host 半通过子进程调用 git 完成。
插件要求 DSH >=0.2.1-rc.2,且系统 git 须在 PATH 中。非 Git 目录下插件不渲染任何 UI。
核心功能¶
资料中明确的能力如下。
- 仓库检测:判断会话工作目录是否在 Git 仓库内;否则不显示 chip。
- 状态展示:当前分支(HEAD detached 时显示短 hash)、全部本地分支、全部已链接的 worktree。
- 可执行操作:
-create-worktree:新建 worktree;
-use-worktree:切换到另一个 worktree;
-switch-branch:切换分支;
-create-branch:新建并切换到新分支。 - 命名校验:本地白名单校验 +
git check-ref-format。 - 安全边界:每次调用 git 前剥离继承的
GIT_*环境变量(如GIT_DIR、GIT_WORK_TREE、GIT_INDEX_FILE等),避免用户 shell 把命令指到别的仓库;switch、switch -c、worktree add等写操作包在会话 sandboxPolicy 内。
刻意不做的事(Non-goals):无 fetch/pull/push 等网络操作;无删除;无 merge/rebase。切换到其他 worktree 会改变 该会话的工作目录,这是设计行为,切换本身不会移动文件。
安装与启用¶
从 GitHub 安装到 desktop profile 时,使用 README 给出的命令:
dsh plugin --profile desktop add github:Qcsj777/dsh-worktree-branch
本地开发时可把包链到 profile 的 package.json:
// ~/.dsh/profiles/<profile>/package.json
"dependencies": {
"dsh-worktree-branch": "link:D:/path/to/worktree-branch"
}
包内自带 Cordis 补丁 cordis.patch.yml,会注入 id 为 worktree-branch 的 Host 半。安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行 Host 半中的 git 与子进程。
典型用法¶
用法集中在 DSH 新建会话 页:插件在 conversation.hero.options 注册 chip(Client 半 client.js,仅 New Session 屏幕)。
- 打开 DSH,进入 新建会话,工作目录选在 Git 仓库内(或其 worktree 路径)。
- 在 hero 区域查看 Location / Branch chip:当前分支、本地分支列表、worktree 列表。
- 在 chip 中选择操作:切到其他 worktree、切分支、或新建分支 / 新建 worktree;确认后由 Host 半执行对应 git 命令。
Client 与 Host 因 DSH 插件模型限制不能通过 host.call 直连,二者通过同源 HTTP 通信:
GET /worktree-branch/state?session=<id>&cwd=<path>
POST /worktree-branch/action { sessionId, cwd, action, name?, path? }
action 取值为 create-worktree、use-worktree、switch-branch、create-branch 之一。状态 JSON 字段包括 repo、cwd、repoRoot、currentBranch、head、branches[]、worktrees[]、mainPath、atMain(以 README 为准)。
适用场景与注意¶
适合:经常在同一仓库用 git worktree 并行多个工作副本、或开新会话前要快速换分支的 DSH 用户;希望 UI 接近 Codex 式 Location/Branch,且写 git 仍走 DSH 沙箱策略的场景。
注意:
- 仅 客户端 插件,依赖 Host 半注入的
webServer、subprocess、sandbox、worktrees、sessionController等能力。 - 不做远程同步与历史改写类操作;需要 pull/push、merge 时仍用终端或其他工具。
- 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;安装前核对源码与权限边界。
结尾¶
dsh-worktree-branch 把 Codex 风格的工作位置与分支切换落到 DSH 新建会话页,Git 执行集中在 Host 半,并与会话沙箱对齐。进一步了解可访问目录页与仓库:
- 目录页:https://www.skillhub.cn/plugins/Qcsj777/dsh-worktree-branch
- GitHub:https://github.com/Qcsj777/dsh-worktree-branch