前言¶
用 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-plugin、patch-in-pack、client-bundle、main-entry、deps、pack-clean、version-available、scan。任何一条不过,pack 和 npm 都不执行(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_TOKEN 和 NPM_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 。