dsh-slipway:一条命令把 DSH 插件发到 GitHub 并走市场收录 PR

前言

在 DSH 里做完一个插件,发布往往还是一串手工步骤:建 GitHub 仓库、按白名单逐文件上传并核对字节、给仓库打 topic、fork 市场登记仓库、写 data/plugins/<owner>__<repo>.yml、开 PR,最后再逐个把线上文件拉回来和本地比一遍。重复几次,容易在同一个环节踩坑。

下面介绍维护者 7gzgn 的工作流类插件 dsh-slipway(滑道):一次调用走完自检、仓库、上传、市场 PR 与回验,并在每个阶段留下可核对的证据。适用范围很明确——只走 GitHub;GitLab、Gitee、npm 均未适配。

这是什么

dsh-slipway 把本地 DSH 插件工程「发到 GitHub + 向插件市场登记仓库提 PR + 线上回拉逐文件校验」串成一条链路。名字比喻船从滑道下水:前面几次发布若全靠手写脚本,这类重复劳动适合交给代码。

DSH 生态的理念是「一切皆插件」;社区插件目录(如 SkillHub)是独立站点,与 DeepSeek / 幻方无官方从属关系。安装任何插件前,建议自行查看源码与许可证——插件以当前 DSH 进程权限运行。

一次发布经过哪些阶段

README 把流程拆成五个阶段(表中「④ 市场 PR」与「⑤ 回验」与前面的自检、仓库、上传并列),每步都有证据输出:

阶段 做什么 证据
① 自检 读 package.json、按 files 白名单收集、检查 main/exports/dsh.bundle.patch、扫密钥 文件数、总字节、错误/提醒清单
② 仓库 有则复用、无则创建(auto_init:false) 仓库 URL、默认分支
③ 上传 逐文件 PUT(带 sha 的更新式写入),再设 topics 每个文件的字节数与 blob 短 sha
④ 市场 PR fork(若无)→ 从上游 head 建分支 → 写登记 yml → 开 PR PR 号与状态(已有 PR 则报号,不重复开)
⑤ 回验 拉取线上每个文件,与本地比 sha256 与长度 「N 个文件线上字节与本地完全一致」

安全边界与默认行为

这些边界写在代码里,而不是口头承诺:

  1. 默认 dry-run:不显式传 dryRun: false(CLI 用 --go)时只演算、只报告,不改动远端。
  2. 目标必须显式给出:projectDir(绝对路径)、repo、category、descriptionEn、descriptionZh 缺一不可;解析失败直接报错,不从当前目录或包名猜测。
  3. owner 与 token 必须一致:token 不属于目标 owner 则停止,不发请求。
  4. token 不进输出:日志里以 ghp_****(40) 等形式掩码;请求证据只记方法与路径,不记 body。
  5. 自检阶段密钥扫描:命中 sk-…、ghp_…、私钥块等会阻断发布,只报文件与行号及掩码。
  6. 幂等:仓库、分支、PR 先查再建,重复执行不会造出第二条。
  7. 活代码树:工程若挂在 profile 的 junction(「活代码」)上,报告会有 live-tree 提醒——可以发布,但不要在活代码树上跑测试(应复制到沙箱再测)。

安装与启用

市场收录后,在 DSH 里搜索 dsh-slipway 安装即可。未上架或需本地联调时,README 给出的是 junction + profile 依赖 + bundle 的手动方式(PowerShell 示例):

# 1) 建目录链接(junction 不需要管理员)
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-slipway" -Target "D:\dsh\projects\dsh-slipway"
# 2) profile 的 package.json:dependencies 加 "dsh-slipway": "link:D:/dsh/projects/dsh-slipway"
#    **同时**加进 dsh.profile.bundles(漏了就不加载)
# 3) 重启 DSH

将 Target 与 link: 路径改成你本机插件工程的实际绝对路径。peerDependencies 要求 Cordis 与 DSH 相关包在 >=0.2.0-rc.2 <0.3.0-0 范围内;README 写明本人在 DSH 0.2.0-rc.2 上实测,Node >= 18。

典型用法

作为 Agent 工具

在会话里可由 Agent 调用:

slipway_publish   projectDir=… repo=… category=tools descriptionEn=… descriptionZh=… [dryRun]
slipway_verify    projectDir=… repo=… owner=…

建议先带 dryRun(或默认 dry-run)跑一遍,把报告给人确认,再传 dryRun: false 真发。

作为 CLI(不依赖会话)

# 只自检(只读)
dsh-slipway plan    --project D:\dsh\projects\dsh-slipway --repo dsh-slipway --category tools --desc-en "…" --desc-zh "…"

# dry-run(默认)
dsh-slipway publish --project … --repo … --category tools --desc-en "…" --desc-zh "…"

# 真跑
dsh-slipway publish --project … --repo … --category tools --desc-en "…" --desc-zh "…" --go

# 只回验
dsh-slipway verify  --project … --repo … --owner 7gzgn

退出码:0 表示成功或 dry-run 通过;1 有阻断项;2 用法错误。

GitHub PAT

按顺序查找:--token-file → 环境变量 DSH_SLIPWAY_TOKEN_FILE → ~/.dsh/.gh-token → D:\dsh\.gh-token。需要 repo scope(建仓库、推文件、开 PR)。

市场分类白名单

category 须落在下列之一(节选自 README):

agi ui usage theme model identity session memory tools wsl browser vision voice docs skill workflow git notify dev security remote market fun

中英文市场简介必须由调用方提供;插件不会自动替你写「看起来像」的文案。

适用场景与已知限制

适合谁:已经在 GitHub 上维护 DSH 插件仓库、希望把「上传 + SkillHub 登记 PR + 字节级回验」固定成可重复工作流的开发者或 Agent 编排者。

需要注意:

  • 单文件 ≤ 25MB(GitHub Contents API 限制;大于 1MB 会有提醒)。
  • 不做 npm 发布;市场安装链路以 github:owner/repo 为主。
  • 不替你跑项目测试;是否在发布前跑测、在哪跑,由调用方决定。
  • 想发到 GitLab / Gitee 等平台,需要该平台 API 与 token,当前版本未做适配。

插件在拿不到 @deepseek-ai/dsh-tools 的 defineTool 时会降级为恒等函数(CLI 与测试仍可用);ctx.systemPrompt 不存在则跳过公告段,避免把宿主拖崩。

自测入口(假 GitHub、不碰网络):

node test/smoke.mjs

若在 profiles/*/node_modules 下的活代码树里跑测试,脚本会直接 exit 2。

结尾

dsh-slipway 把 DSH 插件发布里重复、易错的 GitHub 与市场 PR 步骤收成一条命令,默认 dry-run、显式参数与回验报告,适合作为工作流里的固定环节。进一步了解可看目录页 skillhub.cn/plugins/7gzgn/dsh-slipway 与源码 github.com/7gzgn/dsh-slipway。

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

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

Xiaoye