dsh-local-plugins:在本地 Git 仓库里改插件,用原子 symlink 切换上线

前言

在 DeepSeek Harness(DSH)里用插件扩展能力时,常见做法是直接改安装目录里的文件,或等上游发版。插件更新、重装或 dsh 升级后,手改内容容易丢;内置插件想长期 fork 一份也不方便回滚。社区插件 dsh-local-plugins 把「已编辑的 dsh 插件」放在本地 Git 仓库里管理,只有在你 Commit 并通过校验后,才通过原子 symlink 交换把某一版快照部署到 dsh 实际加载路径;未 Apply 前 dsh 仍跑旧版。

这是什么

维护者 ishanshmalviya5 在 GitHub 发布 dsh-local-plugins(npm 包名同目录名,当前版本 0.2.1,MIT)。SkillHub 分类为工作流;简介为:Keeps edited dsh plugins as local git repos; deploys committed snapshots via atomic symlink swap.

一句话:第三方插件和内置插件都可以迁到 ~/.dsh/local-plugins/<plugin> 做 Git 版本管理,用界面或流程 Commit → Apply,在不影响当前运行版的前提下试改、合并上游、回滚。

核心功能

下面能力均来自项目 README,按使用意图归纳。

你想做的事 界面/操作 结果
修 bug 或微调并长期保留 + Add → Migrate,编辑,Commit,Apply 改动在 dsh 中生效,更新与重装后仍可恢复
拉作者新版本且保留自己的 diff Update 合并新版本与你的修改;同一行冲突时由你决定如何处理
改坏了要退回 Deploy older commit… 立即切到更早的 commit
定制内置能力(如 model provider) 对内置插件同样 Migrate 跑你的版本;Unlink 可恢复原版
让智能体在安全边界内改插件 Work on it 在插件目录内打开上下文;智能体不能替你 Apply
dsh 升级或重装后恢复定制 Reapply all 重新挂上你的本地版
锁定某一发行版 + Add 时填 name@1.2.3 或 …#v1.2.0 等 固定版本,不会自行漂移
看清相对原版改了什么 卡片摘要 例如「3 files changed vs original」及当前运行状态

状态标签(节选):Applied(已跑最新提交)、Changes pending(需 Commit 再 Apply)、Update available、Conflict、Link lost / Reapply required、Broken(Repair installation)、Disabled(崩溃后被禁用)、Not applied(仅跟踪未切换)。

安全与可控性(README 强调):安装/构建脚本默认需你批准;只有构建与检查通过的完整版本才会被切换上线;Apply 失败时不会误切,并提示下一步;Unlink、Delete、回滚会把工作移到可恢复位置(Delete 进 ~/.dsh/local-plugins/.trash/)。

安装与启用

环境要求:git、npm、Node 26 或更新;操作系统为 macOS(Apple Silicon)或 Linux(Windows 明确不支持)。与 dsh 0.2.0-rc.2 构建测试;从 0.1 升级无需额外迁移步骤。

  1. 在终端执行(若 profile 不是 web,把 web 换成你的 profile 名):
dsh plugin --profile web add github:ishanshmalviya5/dsh-local-plugins
  1. 重启 dsh web。

  2. 打开 Settings → Local Plugins。

典型用法:第一次定制

  1. + Add → Migrate,选择已在用的插件;此前手改过的内容会作为起点保留。
  2. 在 ~/.dsh/local-plugins/<plugin> 编辑,或点 Work on it 与智能体协作修改。
  3. Commit,再 Apply,然后重启 dsh web。

整个闭环里,在点击 Apply 之前 dsh 不会加载新树;若新版本无法构建或未通过检查,当前运行版保持不变。

作者发新版:Check now 或启动后自动检查 → Update available → Update;冲突文件可 Fix with agent 后 Finish update,或 Abort;全程未 Apply 前运行版不变。

dsh 完全起不来:在终端执行(README 给出的恢复命令):

node ~/.dsh/local-plugins/.deployed/dsh-local-plugins/scripts/undo.mjs --all

不再定制某插件:先 Unlink (restore original),可选 Delete…(工作进 .trash/,可 Repair installation 恢复)。

本地目录是普通 Git 仓库,可自行 git remote add 并 push 备份。

适用场景与注意

适合谁:需要长期 fork 或 patch 社区插件、内置插件;要在上游更新时保留私有改动;希望 commit 级回滚与「仅 Apply 才上线」的 DSH / 智能体开发者。

兼容性(0.2.1):macOS + Node 26 已在真实 dsh 上端到端验证;Linux(Ubuntu)+ Node 26 在 CI 中 lint/单测/包检查通过,README 注明尚未在真实 dsh 上完整端到端手测;Node 22/24 不在支持范围。

权限与安全:插件随当前 dsh 进程权限运行;安装前请阅读 Security 与源码、MIT 许可证。若某个插件在 dsh-local-plugins 加载之前 就导致 dsh 崩溃,本插件无法自修复,需依赖上述 undo.mjs。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-local-plugins 把插件定制从「改安装树、怕丢改动的临时操作」变成「本地 Git + 原子部署」的工作流:Migrate、Commit、Apply 闭环,Update 与冲突处理、Reapply、Repair 与 trash 恢复覆盖升级与事故场景。

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

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

小夜