前言¶
在 DSH 里做完一个插件,发布往往还是一串手工步骤:建 GitHub 仓库、按白名单逐文件上传并核对字节、给仓库打 topic、fork 市场登记仓库、写 data/plugins/<owner>__<repo>.yml、开 PR,最后再逐个把线上文件拉回来和本地比一遍。重复几次,容易在同一个环节踩坑。
下面介绍维护者 7gzgn 的工作流类插件 dsh-slipway(滑道):一次调用走完自检、仓库、上传、市场 PR 与回验,并在每个阶段留下可核对的证据。适用范围很明确——只走 GitHub;GitLab、Gitee、npm 均未适配。
这是什么¶
dsh-slipway 把本地 DSH 插件工程「发到 GitHub + 向插件市场登记仓库提 PR + 线上回拉逐文件校验」串成一条链路。名字比喻船从滑道下水:前面几次发布若全靠手写脚本,这类重复劳动适合交给代码。
- 维护者:7gzgn
- 分类:工作流(市场分类字段可用白名单中的
workflow等) - 仓库:github.com/7gzgn/dsh-slipway
- 目录页:skillhub.cn/plugins/7gzgn/dsh-slipway
- 许可证:MIT(
package.json当前版本 0.1.3)
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 个文件线上字节与本地完全一致」 |
安全边界与默认行为¶
这些边界写在代码里,而不是口头承诺:
- 默认 dry-run:不显式传
dryRun: false(CLI 用--go)时只演算、只报告,不改动远端。 - 目标必须显式给出:
projectDir(绝对路径)、repo、category、descriptionEn、descriptionZh缺一不可;解析失败直接报错,不从当前目录或包名猜测。 - owner 与 token 必须一致:token 不属于目标 owner 则停止,不发请求。
- token 不进输出:日志里以
ghp_****(40)等形式掩码;请求证据只记方法与路径,不记 body。 - 自检阶段密钥扫描:命中
sk-…、ghp_…、私钥块等会阻断发布,只报文件与行号及掩码。 - 幂等:仓库、分支、PR 先查再建,重复执行不会造出第二条。
- 活代码树:工程若挂在 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。