勾选即建 Git worktree 并在其中开启会话
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zhang-guo-wen/dsh-worktree该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 37 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 50 处,展示前 22 条)
- 执行外部命令固定命令lib/index.mjs:103
execFile("git", [...args], { - 读取本地文件lib/index.mjs:112
const missingGit = error.code === "ENOENT" && existsSync(cwd); - 执行外部命令固定命令lib/index.mjs:135
execFile("git", [...args], { - 读取本地文件lib/index.mjs:153
if (failure.code === "ENOENT" && existsSync(cwd)) { - 读取本地文件lib/index.mjs:241
return await stat(path); - 读取本地文件lib/index.mjs:248
return await readFile(path, { encoding: "utf8" }); - 读取本地文件lib/index.mjs:326
return await readdir(directory, { withFileTypes: true }); - 读取本地文件lib/index.mjs:338
return (await stat(join(directory, ".git"))).isDirectory(); - 写入本地文件lib/index.mjs:722
await appendFile(ignorePath, `${existing && !existing.endsWith("\n") ? "\n" : ""}# Excluded from the first commit by DSH Worktree\n${ignoreLines.join( - 写入本地文件lib/index.mjs:776
if (derived) await mkdir(dirname(target), { recursive: true }); - 写入本地文件lib/index.mjs:1023
await mkdir(dirname(target), { recursive: true }); - 写入本地文件lib/index.mjs:1936
await mkdir(dirname(destination), { recursive: true }); - 写入本地文件lib/index.mjs:1937
await copyFile(target, destination); - 写入本地文件lib/index.mjs:2034
await mkdir(dirname(target), { recursive: true }); - 删除本地文件lib/index.mjs:2140
await rm(directory, { - 发起网络请求lib/index.mjs:3206
response = await fetch(request.url, { - 删除本地文件lib/index.mjs:4719
await rm(scratch, { - 执行外部命令固定命令lib/index.mjs:4819
execFile("ssh", [...args], { - 执行外部命令来自配置/变量lib/index.mjs:4924
execFile(file, [...args], { - 发起网络请求lib/client.js:1421
response = await fetch(`${ROUTE$1}/${method}`, { - 发起网络请求lib/client.js:4448
response = await fetch(`${ROUTE}/${method}`, { - 读取本地文件build-client.mjs:31
const css = await readFile(fileId)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-settings给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 注册为独立项目
为 DeepSeek Harness 做 Git worktree 隔离:建一个 worktree,注册成独立项目,再在里面启动会话
README
由 DeepSeek 最新模型翻译生成@guowenzhang/dsh-worktree
背景:DeepSeek Harness
DeepSeek Harness(dsh)是 DeepSeek AI 开源的 agent harness,几乎所有能力都是 Cordis 插件。它处于 developer preview 阶段、迭代很快,会有破坏性变更(文档站,0.1.7-alpha.);本插件是独立第三方包,@deepseek-ai/ 运行时从宿主解析。
这个插件解决什么问题
DSH 的会话工作目录在创建时冻结,想在独立 Git worktree 里干活就得手工建 checkout 再开会话;本插件在新会话界面勾一下就做完这两件事。
截图
新会话屏幕上的 worktree 胶囊在 选择工作区 / 模式 那一行右端勾上 worktree,就建好 checkout 并把会话开在里面。
Worktree 设置页设置 → Worktree:创建子仓库、扫描层级、worktree 存储位置,右下角是 恢复默认 / 保存。
安装
npx @deepseek-ai/dsh plugin --profile web add @guowenzhang/dsh-worktree
来自 npm 官方源:。装完重启宿主;本地目录开发安装、git 源与排查见 AGENTS.md。
展开完整文档(README 剩余 1 节)
@guowenzhang/dsh-worktree
背景:DeepSeek Harness
DeepSeek Harness(dsh)是 DeepSeek AI 开源的 agent harness,几乎所有能力都是 Cordis 插件。它处于 developer preview 阶段、迭代很快,会有破坏性变更(文档站,0.1.7-alpha.);本插件是独立第三方包,@deepseek-ai/ 运行时从宿主解析。
这个插件解决什么问题
DSH 的会话工作目录在创建时冻结,想在独立 Git worktree 里干活就得手工建 checkout 再开会话;本插件在新会话界面勾一下就做完这两件事。
截图
新会话屏幕上的 worktree 胶囊在 选择工作区 / 模式 那一行右端勾上 worktree,就建好 checkout 并把会话开在里面。
Worktree 设置页设置 → Worktree:创建子仓库、扫描层级、worktree 存储位置,右下角是 恢复默认 / 保存。
安装
npx @deepseek-ai/dsh plugin --profile web add @guowenzhang/dsh-worktree
来自 npm 官方源:。装完重启宿主;本地目录开发安装、git 源与排查见 AGENTS.md。
用法
在新 worktree 里开始会话
在 Git 仓库里开新会话时,选择工作区 / 模式 那一行的右端出现一个胶囊:⑂ ▾ │ ☐ worktree。左边是本地分支下拉——新分支从哪个本地分支开始,默认是当前会话所在 checkout 的分支,取不到就是 HEAD。列表在打开菜单时才去读,按最近提交排序,只列 refs/heads:远端分支或 tag 会让 git worktree add 悄悄进 detached HEAD,所以不给选。界面不提供分支名输入。
勾上 worktree 那一段就是全部动作,它按顺序跑四步:用 git worktree add -b 在主仓库上建 checkout(会话即使已经在某个 linked worktree 里,也会回溯到主仓库);把新目录注册成一个工作区;用新目录作为 meta.cwd 启动会话;把该会话挂进工作区的账本——会话只通过这本账归属工作区,不挂的话它在 GUI 里是“未分组”,选择工作区 也没有名字可显示。之后浏览器再刷新一次会话目录并切到该会话:新会话是 Host 在客户端 Session Controller 之外创建的,不先拉一次目录,导航会以 unknown session 拒绝这个 id。
勾选是单向的:勾上就执行创建并开启会话,没有任何路径把它取消勾选。失败分两种。Host 拒绝(分支名冲突、不是仓库等)什么都没建:控件回到未勾选并显示原因,再勾是重试。建好了但没切过去(导航失败)时控件记住那个新会话,再勾是把它打开,不会建第二个 checkout。
每个会话独立、且不可更改:会话的工作目录是创建时冻结的头字段,所以这个控件只在会话还是空白(没跑过第一轮)时出现。这是设计约束,不是缺陷——想换目录只能新开会话。
控件什么时候出现
控件状态跟着会话和它所在目录走:
| 状态 | 控件 | 原因 |
| 空白会话,目录在主 checkout 里 | 可操作 | 选择还开着 |
| 会话已在某个 linked worktree 里 | 显示但锁住(base + 已勾选) | 它已经隔离好了;再给一次会在一个 checkout 里套出下一个 |
| 会话已跑过至少一轮 | 隐藏 | header.cwd 已冻结,Host 会拒绝 |
| 目录不是 Git 仓库 | 隐藏 | 没有可隔离的仓库 |
锁住的控件不提供任何更改——两段都禁用、chevron 收起,悬停提示当前 checkout 实际所在的分支。页面刷新会丢掉“这个 checkout 是我建的”这层记忆,所以锁住的控件显示该 checkout 自己的分支;分支名本身就是 -,来源照样看得出来。
选择 checkout 存放位置
设置 → Worktree,标题「worktree 配置」,三行,都是设置列一贯的左标签 / 右控件式:
- 创建子仓库 —— 默认关。打开表示 checkout 记录的子模块、以及嵌套在它里面的仓库都跟着一起创建;关闭表示只建父仓库自己。
- 扫描层级 —— 从仓库根往下找嵌套仓库的目录层数,默认 1(直接子目录)。未打开创建子仓库前这一行是禁用的。
- worktree 存储位置 —— 工作区内 / 仓库同级 / 用户目录,该行说明文字显示所选位置解析出的目录。
右下角 [恢复默认] [保存] 放在一起,保存即生效、不需要重启宿主——新策略会装回正在运行的服务实例上。离开页面会丢弃所有暂存改动。
| 值 | 界面 | 目录 |
| agents(默认) | 工作区内 | /.agents/worktree/,出现在工作区树里 |
| sibling | 仓库同级 | -wt-,建在仓库旁边,不进工作区树 |
| home | 用户目录 | ~/.agents/worktree/,整台机器共用 |
让模型操作 checkout
三个模型工具消费同一个服务,都不开会话——模型建出 checkout,由产品自己的新会话流程把会话放进去。worktree_create 建一个 linked checkout 并返回它的路径;worktree_list 列出该仓库的 checkout,主 checkout 在最前;worktree_remove 删除其中一个,拒绝主 checkout,也拒绝任何带未提交改动的 checkout,除非显式传 force。
// 一个会话里
worktree_create({ branch: 'fix/123' })
worktree_list()
worktree_remove({ path: '/abs/path' })
分支名
界面不收分支名,由 Host 推导:所选 base 分支名(/ 换成 -)+ 6 位随机数字,例如 dev-482913;base 不是本地分支(HEAD、某个 SHA、origin/x)时用 worktree-。base 本身不落盘,但照样看得见——工作区标题、checkout 目录、git branch 都带着这个生成出来的名字。
注意事项
- 不自动清理。 会话结束后 worktree 不会自动删除:未提交的工作绝不该被静默丢弃,删除只能显式发起。
- 删除不检查 live 会话。 删除一个仍有会话在跑的 checkout 目前不做拦截。
- 6 位随机后缀会撞名。 同一个 base 的两个 checkout 取自同一个空间,约百万分之一会撞上;那时 git worktree add 会直接报错,再勾一次即可。
- 默认位置会出现在 git status 里。 agents 把 checkout 放在 /.agents/worktree/ 下,是主 checkout 里的未跟踪目录。把 .agents/worktree/ 加进 .gitignore / .git/info/exclude,或改用 仓库同级 / 用户目录。
- 「用户目录」是整机共享的位置。 ~/.agents/worktree/ 不属于任何工作区:几个仓库的 checkout 会并排放在一起;它落在某个仓库里时,那里也需要你自己加 .gitignore。
- 不能从界面给分支起名。 分支在工作区标题里可见;需要指定名字就用 worktree_create 的 branch。
- 子模块是 detached HEAD,这是设计。 这是 gitlink 的语义,不是缺陷;要“带分支的子仓库”就用独立嵌套仓库。
- 只有真正的 .git 目录才算嵌套仓库。 一个子目录如果自己是别的仓库的 linked worktree(.git 是文件),或者是个子模块,都不会被镜像成新分支。
- 本地路径的子模块需要 Git 的 file 传输许可。 protocol.file.allow 是 Git 自己的安全开关,本插件不覆盖它:仓库的 .gitmodules 指向本地路径时,得由 git 配置(全局或仓库级)放行,否则创建会带着 Git 的原话失败并整体回滚。子模块用 https/ssh 时不受影响。
- 删 checkout 不会删分支。 worktree 的分支——包括为嵌套仓库建的、活在它们自己仓库里的那些——都会在删除后留下,和工作区自己的分支一样。
- 记忆共享,文件与授权不共享。 dsh-memory / dsh-claude-compat 会把 linked worktree 的 {project} 回溯到主仓库,所以同一仓库的所有 worktree 共享一份记忆,而文件与沙箱授权各自独立。这是有意的:隔离的是文件和授权,共享的是知识与上下文。
许可
插件本体是 Apache-2.0——见 LICENSE 与 NOTICE。
它不包含 DeepSeek Harness 的源码:harness 包是 peer 依赖,运行时从宿主解析。
延伸阅读
- AGENTS.md —— 安装变体、构建、组合接线、生效语义、发版步骤、设计决策、排查与测试运行方式。
- dsh-memory —— 姊妹记忆插件,它的 {project} 解析让同一仓库的所有 worktree 共享一份记忆。
- DeepSeek Harness 文档。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zhang-guo-wen/dsh-worktree
勾选即建 Git worktree 并在其中开启会话
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1