dsh-plugin-deploy:一句话把项目发到 Cloudflare,一句话把插件发到 npm

前言

用 DSH 这类智能体写完一个静态站点、一个 Worker、或者一个 dsh 插件之后,事情往往卡在最后一公里:想看线上效果,得注册云账号、装 wrangler、写配置、调认证;想把自己写的插件发出去,得逐项检查包内容和依赖协议,再和 npm 的 2FA 流程打交道。这些步骤机械、易错,而且和写代码本身无关。

dsh-plugin-deploy 针对的就是这段收尾工作。下面介绍它的定位、安装方式、两条主能力(部署与发布),以及凭据与审批上的设计。

这是什么

dsh-plugin-deploy 是 Octo-o-o-o 维护的一个 DeepSeek Harness(DSH)插件,MIT 许可证。定位一句话:把项目部署到 Cloudflare、把 dsh 插件发布到 npm,都在对话里用一句话完成;没有 Cloudflare 账号也能先拿到线上地址,且凭据对模型不可见。

它提供两个入口:

  • deploy 工具与 /deploy 斜杠命令:把项目部署到 Cloudflare;
  • publish_plugin 工具与 /publish-plugin 斜杠命令:把 dsh 插件发布到 npm。

安装与启用

安装命令:

npx @deepseek-ai/dsh plugin --profile web add dsh-plugin-deploy

装进指定的 dsh profile 后,启动 Web 界面:

npx @deepseek-ai/dsh web

环境要求:

1、Node >= 22(engines 声明);
2、dsh 0.1.2-rc.1 起;
3、本机装有 Wrangler >= 4.102.0(临时预览要求)。

一个提醒:pnpm 有 minimumReleaseAge 供应链保护,刚发布的新版本在冷却期内装不到。如果 add dsh-plugin-deploy 装到的不是最新版,可以显式指定:

npx @deepseek-ai/dsh plugin --profile web add dsh-plugin-deploy@0.1.4

能力一:把项目部署到 Cloudflare

装好后,在对话里说一句即可:

帮我把 ./my-site 这个目录发出去

Agent 会调用 deploy 工具,返回临时预览地址、剩余认领时间与认领链接。想强制模式,可以直接说「用临时预览」或「发到我的账号」。

两种部署模式

1、temporary 临时预览:不需要 Cloudflare 账号,拿到一个 *.workers.dev 地址和一个 60 分钟的认领窗口;
2、account 自有账号:部署到你自己的账号下,拿到持久 URL,需要配置 token 或已 wrangler login

默认 auto 自动选择,也可以在对话里指定。

支持的项目形态:

  • 纯静态目录;
  • Vite 类构建产物(dist/);
  • 已有 wrangler.jsonc / wrangler.toml / wrangler.json 的 Worker 项目。

检测不出项目形态时会询问,不会瞎猜。项目里没有 wrangler 配置时,插件会临时生成一份,写在系统临时目录,不写入你的仓库。

临时预览的认领窗口

临时预览用的是 Cloudflare 的临时账号能力,有一个硬约束:60 分钟内不认领,Cloudflare 会删除该临时账号及其全部资源。所以插件会在结果里给出倒计时和认领链接,并在下次部署时提醒未认领的记录。

两点需要注意:

1、认领链接本身是一种凭据,会出现在会话记录里,不要把会话分享出去;
2、创建临时账号等于接受 Cloudflare 的服务条款。wrangler 在非交互环境下会自动替你接受,插件不接受这种默认,会把条款与隐私政策链接摆出来由你确认。

另外,临时预览走隔离 HOME 的独立环境,读不到本机的 Cloudflare 凭据,所以不需要 wrangler logout。临时账号有资产上限:不超过 1,000 个文件、单文件不超过 5 MiB。

能力二:把 dsh 插件发布到 npm

这部分面向插件作者。提供 publish_plugin 工具与 /publish-plugin 斜杠命令,三种模式:

1、check:只校验,零副作用(默认);
2、pack:校验通过后打出 .tgz
3、npm:校验通过且你确认后,发布到 npm。

发布前有 8 条校验:dsh-pluginpatch-in-packclient-bundlemain-entrydepspack-cleanversion-availablescan。任何一条不过,packnpm 都不执行(fail closed)。

对话示例:说「把这个插件发布到 npm」,8 条校验全过后进入审批,你点「允许一次」,然后才执行发布。

npm 的 token 处理方式:插件写一个临时 .npmrc,里面只有 ${DSH_NPM_TOKEN} 这个引用,真值经进程环境传给 npm,用完删除。不碰你的 ~/.npmrc,token 不落盘。

一个实践建议:npm 账号开了 2FA 时,普通 token 会卡在 OTP 提示上,建议用 automation token 或勾选 Bypass 2FA 的 granular token,设短过期时间,发完撤销。

会话标题旁的「发布」按钮

装好后,会话标题旁的动作栏会多出一个「发布」按钮,点开是两个选项:部署到 Cloudflare、检查插件发布。

它的工作方式是把对应的话写进输入框并提交,不绕过 agent 审批流程——之后模型调工具、条款确认、审批、结果记录照常走。这是刻意设计:部署和发布是不可逆的对外动作,UI 直接执行拿不到审批。

凭据处理

凭据设计分两层:

1、配置里只存引用名,默认是 CLOUDFLARE_API_TOKENNPM_TOKEN,填的是名字,不是 token 本身;
2、token 值交给 dsh 凭据服务,存于 $DSH_HOME/.credentials.yaml,权限 0600

token 不进对话、不进日志,命令输出在返回前会做脱敏。Cloudflare 的 token 需要 Edit Cloudflare Workers 权限;也可以不配 token,直接 wrangler login 走 OAuth。

安全与审批

插件会在两处停下来问你:

1、服务条款确认(仅临时预览):把条款与隐私政策链接摆出来由你确认,不接受 wrangler 的自动接受;
2、审批:部署到公网、发布到 npm 都走 dsh approval 通道,需要你点「允许一次」;拒绝、超时、审批服务不可用,一律中止(fail closed)。

已知限制

如实列出:

  • 只支持 Cloudflare。Vercel / Netlify / VPS / 自定义域 / 回滚 / Next.js SSR(OpenNext)都不在当前范围。
  • 临时预览 60 分钟过期,不认领就没了,这是 Cloudflare 的规则,插件只能提醒。
  • account 模式下 wrangler 会写 ~/.wrangler/logs,在 Workspace Write 沙箱下可能报 EPERM,实测不影响部署结果。
  • stderr 有 64 KB 上限,极端情况下诊断信息可能被截断。
  • 发布只做 npm 和 tarball。
  • 未在 TUI / headless profile 下验证,无交互提供方时按 fail-closed 处理。

适用场景与注意事项

适合两类人:一是用 DSH 写了静态站点、Vite 项目或 Worker,想几分钟内拿到线上地址的人,尤其是还没有 Cloudflare 账号的时候;二是 dsh 插件作者,想用一套固定校验把发布流程标准化。

安装前注意:插件以当前 dsh 进程的权限运行,建议先查看源码确认行为符合预期,再决定是否安装。许可证为 MIT。

结尾

dsh-plugin-deploy 把「部署」和「发布」这两段收尾工作压进对话里:临时预览让没有云账号也能先看到结果,8 条校验把 npm 发布的易错点拦在前面,凭据不进模型上下文,不可逆动作必须人工审批。

仓库地址:https://github.com/Octo-o-o-o/dsh-plugin-deploy ,收录情况可在 dsh.pub 插件目录检索:https://dsh.pub/en/plugins/?q=Octo-o-o-o%2Fdsh-plugin-deploy 。

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

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

Xiaoye