前言¶
在 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: ''
典型用法¶
- 打開側欄「同步」,點「檢查更新」,在技能與插件列表裏查看是否有可升項。
- 需要 agent 代勞時,讓模型調用
sync_check,再根據結果調用sync_apply(可指定targets、names或dryRun試跑)。 - 在「發現」頁搜索 skills.sh,審閱審計結果後安裝新技能到
~/.agents/skills。 - 將自動檢查設爲 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。