🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

工作树守卫 earneet/dsh-worktree-guard

DeepSeek 客户端
earneet17 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

为 Git 工作树加装会话隔离与误操作防护

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/earneet/dsh-worktree-guard.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 20 处,展示前 19 条)
  • 读取本地文件
    src/core/sidecar.js:16
    const text = await readFile(join(key, ".dsh", "worktree-guard.json"), "utf8");
  • 读取本地文件
    src/core/lifecycle.js:18
    await access(p, fsConstants.F_OK);
  • 写入本地文件
    src/core/lifecycle.js:50
    await mkdir(parentDir, { recursive: true });
  • 写入本地文件
    src/core/lifecycle.js:58
    await mkdir(dirname(dst), { recursive: true });
  • 写入本地文件
    src/core/lifecycle.js:66
    await mkdir(dirname(dst), { recursive: true });
  • 写入本地文件
    src/core/lifecycle.js:78
    await mkdir(briefDir, { recursive: true });
  • 写入本地文件
    src/core/lifecycle.js:79
    if (taskBrief) await writeFile(join(briefDir, "task-brief.md"), taskBrief, "utf8");
  • 写入本地文件
    src/core/lifecycle.js:80
    await mkdir(join(briefDir, "skills", "worktree-cleanup"), { recursive: true });
  • 读取本地文件
    src/core/lifecycle.js:201
    dirents = await readdir(parent, { withFileTypes: true });
  • 读取本地文件
    src/core/lifecycle.js:211
    isSymlink = (await stat(join(parent, d.name))).isSymbolicLink();
  • 读取本地文件
    src/core/paths.js:72
    const st = statSync(dotGit);
  • 读取本地文件
    src/core/paths.js:74
    const text = readFileSync(dotGit, "utf8").trim();
  • 写入本地文件
    src/core/store.js:20
    await mkdir(dirname(file), { recursive: true });
  • 写入本地文件
    src/core/store.js:21
    await writeFile(tmp, text, "utf8");
  • 写入本地文件
    src/core/store.js:22
    await rename(tmp, file);
  • 读取本地文件
    src/core/store.js:27
    return JSON.parse(await readFile(file, "utf8"));
  • 读取本地文件
    src/core/store.js:49
    names = await readdir(dir);
  • 删除本地文件
    src/core/store.js:62
    await rm(join(bindingsDir(commonDir), `${sessionId}.json`), { force: true });
  • 写入本地文件
    src/core/store.js:149
    await mkdir(dirname(file), { recursive: true });
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的 Git worktree 守卫:会话级隔离、常开 Git 安全网、机械式人工闸门

README

由 DeepSeek 最新模型翻译生成
dsh-worktree-guard 可选的 git worktree 守卫 DSH(DeepSeek Harness)插件。 宗旨:把 worktree 从「模型的自觉」变成「宿主的结构」——隔离靠会话根(结构),安全靠单调收窄的常开网(兜底),授权靠带 TTL 的机械人闸(治理)。 完整设计(含宿主契约证据、七条裁决性原则、决策表、Agent 沟通面)见 doc/design.md v1.1。 它做什么 - 会话根模式(产品本体):worktree_create 建副本后,以副本为会话根新开会话 → DSH 沙箱自动锚定,写隔离即结构。 - 常开安全网(是否绑定都生效):跨副本写入、写 .git/状态区、push 受保护分支(master/main)、删 worktree 分支、git -C 定向到主根 → deny + 单轮可执行的指令。 - 读域守卫:绑定态读主 checkout → 放行 + 溯源标记(默认 warn)或 deny(strict)——防止「写对地方、改错东西」。 - 机械人闸:worktree_authorize_main/worktree_allow 走 pre-execute ask 门,模型无法自授。 - 收尾零债:merge-base 证明式「已合并」判定、死绑定 prune、全树摘链接后再删副本(防 junction 穿透)。
展开完整文档(README 剩余 1 节)
dsh-worktree-guard

可选的 git worktree 守卫 DSH(DeepSeek Harness)插件。

宗旨:把 worktree 从「模型的自觉」变成「宿主的结构」——隔离靠会话根(结构),安全靠单调收窄的常开网(兜底),授权靠带 TTL 的机械人闸(治理)。

完整设计(含宿主契约证据、七条裁决性原则、决策表、Agent 沟通面)见 doc/design.md v1.1。

它做什么

- 会话根模式(产品本体):worktree_create 建副本后,以副本为会话根新开会话 → DSH 沙箱自动锚定,写隔离即结构。
- 常开安全网(是否绑定都生效):跨副本写入、写 .git/状态区、push 受保护分支(master/main)、删 worktree 分支、git -C 定向到主根 → deny + 单轮可执行的指令。
- 读域守卫:绑定态读主 checkout → 放行 + 溯源标记(默认 warn)或 deny(strict)——防止「写对地方、改错东西」。
- 机械人闸:worktree_authorize_main/worktree_allow 走 pre-execute ask 门,模型无法自授。
- 收尾零债:merge-base 证明式「已合并」判定、死绑定 prune、全树摘链接后再删副本(防 junction 穿透)。

守卫等级(诚实分级,P6)

| 等级 | 覆盖 |
| 结构拒绝 | 会话根沙箱写隔离;authorize ask 门 |
| 词法启发 | pwsh 命令文本、路径归一化判域、读域守卫(8.3 短名/变量拼接可绕——raise the bar,非边界) |
| 纯纪律 | danger-full-access 下的一切 |

已知边界详见 doc/design.md §14。

安装与使用

DSH 插件(package.json dsh.bundle.patch → cordis.patch.yml)。已发布到 npm 后:

安装到 profile(CLI)
dsh plugin --profile web add dsh-worktree-guard
或 GUI 设置 → 插件 → 安装 bundle:dsh-worktree-guard 验证已挂载(应看到 worktree-guard 条目)
dsh web --dump-config

安装后变化:未绑定会话零注入、行为不变;worktree_ 工具出现在会话中;git 误毁防护(push 主干/删 worktree 分支/写 .git 等)常开生效。

CLI(与原生工具同一 core)
node wt.mjs create fix-login --brief "修复登录"
node wt.mjs status

会话内(插件加载后)使用 worktree_create / worktree_enter / worktree_exit / worktree_status 等工具;被拦截时按 deny 消息的「下一步」行动,或调用 worktree_status。

配置 sidecar:主 checkout 根的 <repo>/.dsh/worktree-guard.json(protected_branches、read_policy、branch_prefix、main_write_whitelist、sync.、TTL 等,snake/camel 键均可;设计 §13)。注意 main_write_whitelist 为 glob 全匹配(如 "docs/"、"gen/*");目录前缀不带通配符(如 "docs/")不会命中。

开发

node --test # 决策表单测 + 真实临时仓库集成测 + 三轮对抗审查回归(见 test/)

零依赖纯 ESM(Node ≥20,Windows 优先适配)。

谱系

opencode-worktree-isolation(透明重写、Windows 归一化)× zcode-worktree-guard(默认开放、常开网、prune、204 用例方法论)× chuck-ma opencode-worktree-guard(merge-base、block-with-instruction)→ 按 DSH 实测契约(不可改写入参)重构为结构优先形态。详见 doc/design-review.md。
预览分享卡片长什么样 ↓earneet/dsh-worktree-guard
分享 · DeepSeek Harness Hub
earneet/dsh-worktree-guard

为 Git 工作树加装会话隔离与误操作防护

回到顶部