中文EN

dsh-plugin-deploy

dev已测通过npmMIT

一句话把项目部署到 Cloudflare、把做好的插件发布到 npm:首次部署零账号,凭据模型看不到。

下载量 / Downloads
1,350
依赖体积 / node_modules
19.47 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-plugin-deploy

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

<h1 align="center">dsh-plugin-deploy</h1>

<p align="center">

<b>一句话把项目发到 Cloudflare,一句话把插件发到 npm。</b><br>

DeepSeek Harness 插件 · 没有云账号也能拿到线上地址 · 凭据模型看不到

</p>

<p align="center">

<a href="https://www.npmjs.com/package/dsh-plugin-deploy"><img alt="npm" src="https://img.shields.io/npm/v/dsh-plugin-deploy?color=cb3837&logo=npm" /></a>

<a href="LICENSE"><img alt="license" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>

<a href="https://deepseek-harness.github.io/deepseek-harness/"><img alt="harness" src="https://img.shields.io/badge/harness-0.2.1--rc.2-4c1?logo=deepseek" /></a>

<img alt="tests" src="https://img.shields.io/badge/tests-118%20passed-brightgreen" />

<img alt="tracks" src="https://img.shields.io/badge/track-Host%20%2B%20Web%20UI-8957e5" />

<a href="https://dsh.pub/en/plugins/?q=Octo-o-o-o%2Fdsh-plugin-deploy"><img alt="dsh.pub" src="https://dsh.pub/api/badges/Octo-o-o-o/dsh-plugin-deploy.svg" /></a>

</p>

<p align="center">

<b>简体中文</b> · <a href="README.en.md">English</a>

</p>


你:帮我把这个网站发出去

Agent:调用 deploy 工具 …
       ┌─────────────────────────────────────────┐
       │ 临时预览地址                              │
       │ https://my-site.breezy-broom.workers.dev │
       │ ⏱ 必须认领,否则会被删除 · 剩余 60 minutes  │
       │ [打开认领链接]                            │
       └─────────────────────────────────────────┘

没有 Cloudflare 账号也能拿到能打开的线上地址。 这不是模拟——用的是 Cloudflare 官方为 AI agent 设计的临时预览账号。


目录

  • [它解决什么问题](#它解决什么问题)
  • [30 秒开始](#30-秒开始)
  • [能力一:把项目部署到 Cloudflare](#能力一把项目部署到-cloudflare)
  • [能力二:把你做的 dsh 插件发布出去](#能力二把你做的-dsh-插件发布出去)
  • [不想打字?会话标题旁有个按钮](#不想打字会话标题旁有个按钮)
  • [配置凭据](#配置凭据)
  • [它为什么会打断你](#它为什么会打断你)
  • [安全设计](#安全设计)
  • [已知限制](#已知限制)
  • [常见问题](#常见问题)
  • [从源码开发](#从源码开发)
  • [致谢与相关项目](#致谢与相关项目)
  • [License](#license)

它解决什么问题

AI 帮你写完了一个网站、一个 Worker、一个插件——然后卡在最后一公里:

你想做的事 · 没有这个插件时 · 有了之后

把刚做好的页面发出去看看 · 注册 Cloudflare → 建项目 → 装 wrangler → 写配置 → 调试认证 · 说一句「发出去」,拿到 URL

部署到自己的账号 · 每次都要处理认证状态、写 wrangler.jsonc · 存一次 token 引用名,之后一句话

把做好的 dsh 插件发布 · 手动检查 9 处易错点 → npm pack 看清单 → npm publish 撞 2FA · 一条命令,校验不过就不让发

而且它不会为了省事牺牲安全:token 永远不进对话、不进日志;对外发布一定要你点确认。


30 秒开始

# 装进你的 dsh profile(需要 pnpm 在 PATH 上)
npx @deepseek-ai/dsh@0.2.1-rc.2 plugin --profile web add dsh-plugin-deploy@0.2.2

# 启动
npx @deepseek-ai/dsh@0.2.1-rc.2 web

桌面版可在插件市场更新,或使用桌面版附带的 CLI:dsh plugin --profile desktop add dsh-plugin-deploy@0.2.2。先确认 dsh --version;PATH 中的旧 CLI 可能与桌面版不同。

然后在对话里说:

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

就这样。首次不需要任何账号——插件会走 Cloudflare 的临时预览账号,几十秒后给你一个能打开的地址。

[!NOTE]
需要本机装了 Wrangler ≥ 4.102.0(临时预览要求)。没装的话插件会告诉你怎么装,不会闷头失败。
[!TIP]
刚发布的新版本装不到? pnpm 有 minimumReleaseAge 供应链保护,新版本在冷却期内不会被自动选中——add dsh-plugin-deploy 可能装到上一个版本。想立刻用最新版就显式指定:add dsh-plugin-deploy@0.2.2。

能力一:把项目部署到 Cloudflare

插件提供工具 deploy 与斜杠命令 /deploy。

两种模式,自动选,也可以指定

模式 · 适合谁 · 拿到什么 · 需要账号吗

temporary 临时预览 · 想立刻看效果、还没有 Cloudflare 账号 · *.workers.dev 地址 + 60 分钟认领窗口 · ❌ 不需要

account 自有账号 · 要长期在线的正式地址 · 你账号下的持久 URL · ✅ 需要(token 或已 wrangler login)

默认 auto:本机已认证就走 account,没认证就走 temporary。想强制某一种,直接说「用临时预览」或「发到我的账号」。

关于临时预览,你必须知道的

这是 Cloudflare 官方能力(Claim deployments),文档里明写是为 AI agent 场景设计的。但有个硬约束:

[!WARNING]
60 分钟内不认领,Cloudflare 会删除该临时账号及其全部资源。
插件会在结果卡片里显示倒计时和认领链接,并在下次部署时提醒你还有未认领的记录。
认领链接本身是一种凭据,它会出现在会话记录里——别把这个会话分享出去。

插件在文案上严格区分:临时预览叫「临时预览地址」,绝不说成「已上线」。

支持的项目形态

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

检测不出来时会问你,不会瞎猜。没有 wrangler 配置的项目,插件会临时生成一份——写在系统临时目录,不往你的仓库里塞文件。


能力二:把你做的 dsh 插件发布出去

插件提供工具 publish_plugin 与斜杠命令 /publish-plugin。

这部分是给插件作者用的:你用 dsh 写了个插件,想让别人装得上。

三种模式

check   # 只校验,不执行包脚本、不改项目文件(默认)
pack    # 校验通过 → 打出 .tgz
npm     # 校验通过 + 你点确认 → 发布到 npm

校验才是重点

生态里大量插件「装上了但不激活」「npm 发布漏文件」「GitHub 装下来缺 lib/」。发布前这 9 条会逐项检查:

检查 · 拦住什么

dsh-compat · 使用当前宿主的兼容性规则检查 engines.dsh(优先)或 DSH peer 范围,拦住新版安装拒绝

dsh-plugin · 没有 dsh.bundle.patch → 装了不激活,只有一行 stderr 警告

patch-in-pack · patch 文件没进 npm 包 → 同上,但更隐蔽

client-bundle · lib/client.js 不是 factory 形态或 id 不匹配 → 浏览器报 loaded without registering

main-entry · 主入口没进包

deps · 残留 workspace: 协议 → 用户装不上;@deepseek-ai/dsh* 写成 0.0.x → 装到旧 train

pack-clean · .env / .npmrc / 私钥 / node_modules 混进发布包

version-available · 版本号已被占用

scan · 如果你的仓里装了 dsh-plugin-assistant,顺带跑一遍它的规则扫描

任何一条不过,pack 和 npm 都不执行(fail closed)。

检查、打包和发布均不会执行目标包的生命周期脚本;请先构建 lib/ 等发布产物,再调用本工具。

发布到 npm

你:把这个插件发布到 npm

Agent:[9 条校验全过] → [审批:即将发布 xxx@0.1.0 到公共仓库] → 你点「允许一次」→ 发布

npm 的 token 处理和别的工具不同——它不读环境变量。插件的做法是:临时 .npmrc 里只写 ${DSH_NPM_TOKEN} 这个引用,真值经进程环境传给 npm,用完删除。不碰你的 ~/.npmrc,token 不落盘。

[!TIP]
本插件非交互式直接发布需要具有发布权限且开启 Bypass 2FA 的 granular token,并须符合账号、组织和包的策略。设置较短有效期,用完撤销;策略禁止绕过二次验证时,改用终端交互式发布或 npm 官方 staging 流程,当前插件不支持 staging。参见 npm 直接发布要求。

不想打字?会话标题旁有个按钮

装好后,会话标题旁边的动作栏会多出一个 发布 按钮(点开是两个选项):

选项 · 等价于你手打

部署到 Cloudflare · 「把当前工作区部署到 Cloudflare」

检查插件发布 · 「检查当前工作区能否作为 dsh 插件发布」

[!IMPORTANT]
按钮不会绕过 agent 直接执行。它做的是把这句话写进输入框并提交——之后一切照常:模型调工具、条款确认、审批、结果卡片、会话记录,一个不少。
这是刻意的。dsh 的 approval.request() 强制要求在开启的 agent turn 内调用(源码原文:the approval/asked + approval/decided audit pair must be turn-enclosed)。UI 直接触发的动作既拿不到审批,也不会留下会话记录——对不可逆的对外动作,那是不能接受的。

它对哪个目录生效? 按钮不硬编码路径,用的是当前会话的工作区。所以:

  • 想让它直接可用 → 把会话工作区选成你的项目 / 插件仓
  • 工作区是个容器目录(比如 ~/WorkSpace)→

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:7,最后更新 2026-10-22

链接

GitHub · Homepage · npm

同类插件