前言¶
在 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