DSH-MarketSync-WhenNewPlugin:定時把名下 DSH 插件倉庫送進 dsh.market

前言

在 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 裏寫得很清楚:

  1. GET /user/repos?affiliation=owner 列出自己名下的倉庫;
  2. 按 namePattern(默認 ^DSH)篩名字,默認排除私有、fork、歸檔;
  3. 按市場判據(對齊 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);
  4. 明顯是插件但缺標記時,在 autoMark: true 下可自動補 package.json(含 dsh.bundle.patch 等)與根目錄 cordis.patch.yml;
  5. 缺 dsh-plugin topic 的用 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
羽毛球分组比赛记分
小程序二维码

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

小夜