dsh-sync-updater:在 DSH 里统一盘点、检查并更新技能与插件

前言

在 DeepSeek Harness(DSH)里,技能和插件往往来自不同路径:技能可能在项目目录、用户目录或 skillshare 源里;插件则挂在 profile 的 package.json 依赖上。DSH 自带的插件管理器只在你显式操作时才会动,技能侧又主要监听本地文件变化,不会主动去拉上游。时间一长,「装了多少、有没有新版本、要不要升」容易变成手工对仓库和 registry 的零散核对。

dsh-sync-updater(GitHub:Bertli486/dsh-sync-updater)把已安装技能与 profile 插件收拢到一处,提供侧栏面板、三个面向模型的工具,以及可配置的后台定时检查。维护者为 Bertli486,社区目录分类为 admin-security;当前 package 版本为 0.1.0,许可 MIT。

这是什么

一句话:在 DSH 里统一查看、检查并同步更新已安装的技能(skills)与插件(plugins/bundles)。

它不改变 DSH 核心行为,而是在现有扫描规则之上做清单、对比上游、按需应用更新,并在「发现」页通过 skills.sh 搜索新技能(安装前可走多厂商安全审计)。

核心功能

侧栏「同步」面板

重启 DSH 后,左侧栏插件列表下方会出现「同步」入口。面板大致分几块:

  • 自动更新:检查频率(关闭 / 30 分钟 / 1 小时 / 6 小时 / 24 小时),以及「检查到技能更新时自动应用」开关。
  • 操作:检查更新、按数量更新技能或插件;右侧显示上次检查时间与结果。
  • 技能列表:名称、状态、上游仓库、最近检查结论,每行可单独更新。
  • 插件列表:安装版本与 registry 最新版本、来源类型(registry / 本地 link / 随 App 提供),每行可单独更新。
  • 最近操作:当前会话内的操作与结果摘要。

面板写入的开关保存在 ~/.dsh/sync-updater/settings.json,优先级高于 cordis.patch.yml 中的默认值,保存后会立刻重排定时器,无需改配置或重启进程。

发现页

搜索走 skills.sh 的公开接口,结果包含 owner/repo、skillId 与安装量。点击「安装」前会先拉取安全审计(Gen Agent Trust Hub / Socket / Snyk / Runlayer / ZeroLeaks);结论为 fail 或 HIGH/CRITICAL 时,按钮变为「仍要安装」,需二次确认。

安装优先用 git blobless clone 在仓库里按 SKILL.md 父目录名定位技能目录,再稀疏检出并复制到 ~/.agents/skills/<skillId>,全程非交互、不依赖 node/npm。装完后会在 state.json 的 installed 中记录 source / repoDir,便于后续 sync_check 识别上游。找不到同名目录时才回退到 skillshare install(交互式 TUI,非交互场景可能挂起,仅作兜底)。

三个模型工具

工具 作用 联网
sync_status 技能与插件清单(版本、来源、路径、自动检查配置、上次结果) 否
sync_check 检查更新:插件对比 npm registry;技能对比上游 SKILL.md 哈希或本地 git 分支 是
sync_apply 应用更新:技能走下载 / git pull / skillshare;插件走 pnpm add 是

sync_apply 可选参数包括:targets(['skills'] / ['plugins'])、names(只处理指定项)、dryRun、toLatest(插件是否跨声明范围升到 latest,默认关闭)。

覆盖范围与更新方式

技能(按 DSH 扫描顺序,先到先得):<cwd>/.dsh/skills、<cwd>/.agents/skills、~/.dsh/skills、~/.agents/skills、~/.config/skillshare/skills;软链接会被跟随。

插件:profile package.json 中的全部依赖;@deepseek-ai/* 与带 dsh 标记的包视为「随 App 提供」,不会尝试升级;link: / file: / git / tarball 视为本地或非 registry 来源。

技能更新分三种来源:有 ~/.agents/.skill-lock.json 记录时用 raw GitHub 上同路径 SKILL.md 的 sha256 检测,更新用稀疏 clone 替换目录且不擅自改 lock 文件;git 工作树内 tracked 仓库用 git fetch 与 rev-list 判断落后,更新用 git pull --ff-only;skillshare 源交给 skillshare update 与 skillshare sync。

插件更新读 registry 的 dist-tags.latest,默认只在原声明范围内升级,安装时锁定到具体版本;失败会还原 package.json 与 pnpm-lock.yaml。

状态与安全边界

状态与日志路径包括:settings.json、state.json(含最近 50 条历史)、plugin.log,以及每次技能替换前的整目录备份 ~/.dsh/sync-updater/backups/<时间戳>/<技能名>/(不自动清理)。

安全边界上:不升级随 DSH 提供的包;不删除技能,替换前备份;下载内容缺少 SKILL.md 则放弃替换;插件安装失败回滚 manifest 与 lockfile;外部命令以数组传参,不经过 shell。

安装与启用

在对应 profile 下执行(将 web 换成你宿主实际的 profile 名):

dsh plugin --profile web add github:Bertli486/dsh-sync-updater

DSH Desktop 也可在「设置 → 插件」中安装。重启后左侧栏出现「同步」,同时注册 sync_status、sync_check、sync_apply。

开发时可 link: 挂进 profile,并在 package.json 的 dsh.profile.bundles 中加入 dsh-sync-updater;调试状态可请求:

curl -s http://127.0.0.1:<port>/sync-updater/api/state | jq .

可选默认配置在 cordis.patch.yml 中,例如:

- id: sync-updater
  name: 'dsh-sync-updater'
  config:
    autoCheckIntervalMinutes: 360   # 0 = 关闭
    autoApplySkills: false
    includeProjectSkills: true
    includeUserSkills: true
    registry: ''
    pnpmCommand: ''
    gitCommand: ''
    skillshareCommand: ''

典型用法

  1. 打开侧栏「同步」,点「检查更新」,在技能与插件列表里查看是否有可升项。
  2. 需要 agent 代劳时,让模型调用 sync_check,再根据结果调用 sync_apply(可指定 targets、names 或 dryRun 试跑)。
  3. 在「发现」页搜索 skills.sh,审阅审计结果后安装新技能到 ~/.agents/skills。
  4. 将自动检查设为 6 小时或 24 小时,按需打开「检查到技能更新时自动应用」。

改 lib/index.js 或 lib/client.js 后需重启 DSH 才生效;HMR 只热重载配置,不重载模块根。

适用场景与注意

适合长期在 DSH 里叠加多技能、多社区插件、且希望减少手工对 GitHub 与 npm 核对工作的开发者。分类 admin-security 也体现在发现页安装前的多厂商审计与二次确认流程上。

使用前请注意:插件以当前 DSH 进程权限运行,会执行 git、pnpm、skillshare 等外部命令并可能修改 package.json 与技能目录;安装前应阅读源码与 MIT 许可证,确认来源可信。已知限制包括:主要跟踪 SKILL.md 内容变化,同目录其他文件单独变更不会单独提示(但整目录更新时会一并替换);发现页依赖 skills.sh 未文档化的搜索接口,接口变更时搜索可能报错,不影响已有项的更新;通过发现页安装的技能落在 ~/.agents/skills,不会进入 skillshare 源目录。

社区插件目录为独立站点 skillhub.cn,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package 元数据为准。

结尾

dsh-sync-updater 补的是 DSH 里「统一清单 + 查上游 + 应用更新」这一环,侧栏、模型工具与定时检查可以并存。目录页:https://www.skillhub.cn/plugins/Bertli486/dsh-sync-updater;源码与完整说明:https://github.com/Bertli486/dsh-sync-updater。

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

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

小夜