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 。

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

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

小夜