前言¶
在 DSH 裏開發插件時,倉庫往往先落在自己的 GitHub 賬號下。社區市場 dsh.market 的採集器按 topic:dsh-plugin 在每天 06:00 掃一遍,若倉庫沒有對應 topic,或缺少市場認得的標記文件,新插件就不會出現在目錄裏。常見做法是手工打 topic、補 cordis.patch.yml 或提 issue,既重複又容易漏。下面介紹 maintainer xkzdwb 發佈的 DSH-MarketSync-WhenNewPlugin:在 DSH HOST 進程內每天定時跑批,只改自己名下的「像插件」的倉庫,零依賴、不調用任何模型。
這是什麼¶
DSH-MarketSync-WhenNewPlugin(包名 dsh-market-sync,當前版本 1.0.0,許可證 MIT)是一條 工作流 類 DSH 插件。它每天 00:00(默認 Asia/Shanghai,可配置)列出你 GitHub 上 affiliation=owner 的倉庫,按名字正則(默認 ^DSH)篩選,再按與市場採集器一致的規則判斷是否 DSH 插件;缺 topic 或缺標記時自動補齊,使倉庫在次日市場 06:00 採集前處於可被收錄狀態。README 寫明一次跑批大約 1~3 秒、幾十次 GitHub API 請求。
插件跟着 DSH HOST 走:若 00:00 時 DSH 未運行,可在下次啓動時補跑(catchUp 默認可用)。
核心功能¶
倉庫篩選與插件判定¶
跑批順序在 README 裏寫得很清楚:
GET /user/repos?affiliation=owner列出自己名下的倉庫;- 按
namePattern(默認^DSH)篩名字,默認排除私有、fork、歸檔; - 按市場判據(對齊
collector/src/detect.ts)識別插件,例如根目錄存在cordis.patch.yml、dsh.profile、dsh-manifest.json、dsh.plugin.json等,或存在SKILL.md,或package.json依賴含cordis、dsh-base、@deepseek-ai/dsh-等;根目錄不像插件時可再查一層子目錄(followSubdir); - 明顯是插件但缺標記時,在
autoMark: true下可自動補package.json(含dsh.bundle.patch等)與根目錄cordis.patch.yml; - 缺
dsh-plugintopic 的用PUT /repos/{owner}/{repo}/topics補上,並保留原有 topic。
與市場採集節奏的關係¶
市場採集器 每天 06:00 掃 topic:dsh-plugin,本插件保證 每天 00:00 之前 倉庫處於可採集狀態,因此效果上是 次日 06:00 自動上架。之後僅更新 README 或版本時,採集器按 pushed_at 增量重抓,一般不必爲此再跑一遍同步。
失敗重試與審計¶
失敗時 10 分鐘後重試,最多 5 次;遇 GitHub 限流會按 reset 時間等待。每次動作寫入 audit/sync.jsonl;可用 node tools/sync-once.mjs --dry-run 只報告、不改倉庫。
安裝與啓用¶
官方安裝方式如下。裝好後訪問狀態頁,看到 started: true 即表示插件已加載。
dsh plugin add github:xkzdwb/DSH-MarketSync-WhenNewPlugin
也可手動把倉庫中 examples/cordis.patch.snippet.yml 併入 profile 的 cordis.patch.yml 的 insert: 段(縮進與其它 - id: 對齊),然後 重啓 DSH。
狀態檢查(README 原文):
http://127.0.0.1:10605/plugin-market-sync/status
運行環境要求 Node >= 20(見 package.json 的 engines)。
授權與典型用法¶
改 topic 與提交標記需要具備 repo scope 的 GitHub Personal Access Token(workflow 可選)。
自動授權(Windows,Edge / Chrome 已登錄 GitHub):
node tools/authorize.mjs
腳本會起帶調試口的瀏覽器完成 token 創建,並寫入插件目錄下的 secrets.json。GitHub 要求確認時,在瀏覽器窗口完成即可。
手動方式: 在 GitHub Developer settings 創建 token,寫入:
{ "githubToken": "ghp_xxx" }
也可使用環境變量 GITHUB_TOKEN。優先級爲:config.token > secrets.json > 環境變量。
手動試跑:
node tools/sync-once.mjs --dry-run # 只報告,不改
node tools/sync-once.mjs # 真改
常用配置項(節選,完整表見 README):
| 鍵 | 默認 | 說明 |
|---|---|---|
time |
"00:00" |
每天幾點跑 |
timeZone |
"Asia/Shanghai" |
IANA 時區 |
namePattern |
"^DSH" |
倉庫名正則 |
topics |
["dsh-plugin"] |
要補的 topic |
requireMarkers |
true |
只給市場認得的插件打 topic |
autoMark |
true |
缺 cordis 標記時自動提交兩類文件 |
適用場景與注意¶
適合誰: 經常在 GitHub 上以 DSH 前綴(或你自定義的 namePattern)維護多個 DSH 插件倉庫、希望免手工打 dsh-plugin topic 和補收錄標記的開發者。
安全邊界(README 摘要): 只處理你名下的倉庫;默認不碰私有、fork、歸檔;requireMarkers: true 時不像插件的倉庫不會被打 topic;autoMark 的寫操作僅限於 package.json 與根目錄 cordis.patch.yml;token 存本機,狀態接口不返回 token 內容;請求只發往 api.github.com。
安裝前須知: 插件在 當前 DSH 進程權限 下運行,並使用你配置的 GitHub token 修改倉庫。安裝前應自行閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認 token scope 與自動提交行爲符合你的預期。SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,本文不對「官方應用商店」作表述。
排錯時常見項:狀態頁 404 多爲未裝進 profile 或未重啓;沒有 GitHub token 需授權或寫 secrets.json;401 多爲 token 失效;403 多爲 API 限流。
卸載時從 profile 的 cordis.patch.yml 刪除 market-sync 對應段並重啓,或按你的安裝方式執行 dsh plugin remove。
結尾¶
DSH-MarketSync-WhenNewPlugin 把「補 topic + 補市場認得標記」收成一條定時工作流,與市場 06:00 採集節奏對齊,零依賴、不調模型。若要查看分類與簡介,可打開 SkillHub 目錄頁;細節與配置以 GitHub README 爲準。
- 目錄頁:https://www.skillhub.cn/plugins/xkzdwb/DSH-MarketSync-WhenNewPlugin
- 源碼:https://github.com/xkzdwb/DSH-MarketSync-WhenNewPlugin