DeepSeek Harness Hub
← 返回列表

Git 合并互斥锁lynkas/dsh-git-merge-lock

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

跨会话串行化 Git 合并,侧栏亮锁并支持手动解锁

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/28 · 已提供中文文档
综合分
28
GitHub 分
28
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add lynkas/dsh-git-merge-lock
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-git-merge-lock

dsh(DeepSeek Harness)的跨 session git 合并互斥插件:整仓库单线程合并,
附侧栏锁状态灯 + 弹窗(持锁详情 / 手动解锁)。

目录结构

dsh-git-merge-lock/
├── plugin/              ← 插件真身(双半边包,被 ~/.dsh 引用)
│   ├── index.mjs        ← host 半边源码(FIFO 队列互斥内核 + git_merge_lock 工具 + RPC 端点)
│   ├── cordis.patch.yml ← 自指向 insert 行(bundle 层挂载声明)
│   ├── package.json     ← dsh.bundle.patch + dsh.client(web)双面声明
│   ├── lib/index.js     ← host 产物(index.mjs 的同步副本;改源码后 cp 覆盖)
│   ├── lib/client.js    ← 浏览器半边(手写 __ModuleLoader__ bundle,无构建步)
│   └── node_modules/    ← cordis / dsh-typert-protocol / zod 的符号链接(指宿主同名实例)
├── tests/
│   ├── harness.mjs      ← 内核语义套件(FIFO/租约/自愈/信箱等)
│   └── endpoints.mjs    ← Typert 端点 + 服务层套件
└── docs/                ← 三份宿主机制调研报告(挂载/RPC/slots 的证据链)

从 npm 安装(普通用户)

dsh plugin --profile web add dsh-git-merge-lock
再把下面的 insert 块追加到 ~/.dsh/profiles/web/cordis.patch.yml :
- insert:
- id: git-merge-lock
name: dsh-git-merge-lock
重启 dsh

npm 包名:dsh-git-merge-lock · 标签:deepseek / deepseek-harness / dsh / dsh-plugin · 在 dsh 0.1.1-rc.2 验证。

生产安装点(勿删)

| 路径 | 形态 | 作用 |
|---|---|---|
| ~/.dsh/plugins/git-merge-lock | symlink → 本目录 plugin/ | .dsh 插件发现 |
| ~/.dsh/profiles/web/node_modules/dsh-git-merge-lock | symlink → 同上 | 客户端模块解析(/package.json 双腿解析要求裸包名) |
| ~/.dsh/profiles/web/cordis.patch.yml | - insert: [{id: git-merge-lock, name: dsh-git-merge-lock}] | 组合挂载 |
| ~/.dsh/git-merge-lock.json | 配置(enabled / timeout_s / desktop_notify) | 每次调用实时读取 |

回滚:删除上述四项 + 按 ~/.dsh/restart-dsh.sh 重启即可。

运行语义(v2,"方案1")

- 整仓单线程:同一仓库任意 merge/pull/rebase/cherry-pick/revert/am 完全串行,不看分支。
- 唯一权威 = web host 进程内存中的 per-repo FIFO 队列;/dsh-git-lock/journal.jsonl
只是审计账本(host 重启锁自动清空,历史可追溯)。
- 租约绑定调用生命周期:等待中被打断即出队;持有中会话中断由 keeper(5s)自动释放;
60 分钟硬上限。没有陈旧锁判定、没有偷锁、没有 fencing 缺口。
- 合并动作仍由各 session 自己执行:插件只管"何时允许开始",不触碰工作区。
- acquire 时探测 MERGE_HEAD 等"未完成集成现场",警告下一个持有者;release 前同样自检并留痕。

模型工具

git_merge_lock,actions:acquire(FIFO 排队)/ release / force_release(需 confirm=true)/
status / notify(留言进持有者信箱)。

浏览器 UI

侧栏项目行 hover 出现的三图标组最左侧为 🔒(Material Symbols 内联 SVG):
灰色=空闲,金色=有人持锁。点击弹 dialog:状态徽标、holder 卡片(含手动解锁,两段确认,
只释放租约不打断对方 session)、等待队列、journal。文案中英双语,跟随宿主 locale。

RPC(统一信封 POST /api/gitMergeLock/):
queryMergeStatus(projectPath) / manualUnlock(projectPath, reason)。

开发与测试

改 host 半边后:
node --check plugin/index.mjs && cp plugin/index.mjs plugin/lib/index.js   # 然后重启 dsh
改 client 半边后:
node --check plugin/lib/client.js                                          # 浏览器硬刷新即可(磁盘直读)
回归:
node tests/harness.mjs     # 内核 21 断言
node tests/endpoints.mjs   # 端点 14 断言(依赖真实 git 临时仓)
联调实例(独立 DSH_HOME,不碰生产):
DSH_HOME=~/.dsh-gml-test node /lib/bin.js --profile test --port 3081

前端若改版导致行选择器([class*="_projectRow"] 等语义类名)失效,见 docs/research-ui-slots.md。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群