dsh-hugo-blog:在 DSH 插件裏完成 Hugo 博客的寫作與發佈

前言

DSH 的宿主進程已經能跑工具調用和技能,但如果你維護的是一個 Hugo 站點,通常還缺一段:新建文章、改 Front Matter、跑一次構建檢查、確認後推送發佈。這些動作要麼手工在終端裏敲一堆 hugo / git 命令,要麼讓智能體直接拿到 shell,風險和可控性都不穩定。下面介紹的插件就是把這個鏈路包成一層工具,讓智能體有明確接口可用,同時在側邊欄保留可視化操作入口。

這個插件是 dsh-hugo-blog,維護者 ruoshui6662,作用是給 DSH 宿主補充 Hugo 博客的寫作、構建檢查、清單與發佈回執能力。它不替代 Hugo 本身,也不負責 CI workflow,只負責把「內容 → 構建 → 發佈確認」這一段接進插件體系。

定位與維護

插件定位一句話:Hugo 博客寫作、發佈、維護與推送的工具層。維護者是 ruoshui6662,源碼託管在 GitHub 的 ruoshui6662/dsh-hugo-blog,包版本 0.1.0,許可證 MIT。運行時要求 Node >= 22,宿主 dsh 版本要求 >=0.2.0-rc.1 <0.3.0-0。

它只使用 Node 內置模塊,零第三方依賴,也不聲明 peerDependencies。運行時依賴由宿主提供:ctx.tools.register、ctx.skills.registerProvider,具體落到 dsh-tools / dsh-skill 等服務。

核心功能

插件提供的能力分兩塊:側邊欄面板和一組工具。

面板在側邊欄註冊 Hugo 博客 入口,按固定順序操作:

  1. 站點目錄:選擇目錄(原生目錄選擇器或手動輸入路徑)後點「載入站點」。目錄須含 hugo.toml 等配置與 content/,是否 git init 不影響識別。目錄會被記住,下次自動載入。
  2. 站點狀態:分支、草稿數、工作區是否乾淨、改動文件列表。
  3. 文章列表:切換「草稿 / 未來 / 已過期 / 全部 / 已發佈」,點一行填入編輯區。
  4. 新建文章:按 posts/hello.md 形式創建,或新建 Page Bundle。
  5. 編輯 Front Matter:標題、草稿、標籤、分類、日期、定時發佈、過期下架、Slug;保存後回顯 lint 結果。
  6. 構建與發佈:先跑 hugo build 檢查,再兩步確認發佈。構建失敗或工作區髒會被拒絕。

工具側暴露的接口是:

  • hugo_new_content
  • hugo_edit_frontmatter
  • hugo_new_pagebundle
  • hugo_build_check
  • hugo_list
  • hugo_publish
  • git_status_summary

另外附帶一個技能 hugo-blog。更細的實現說明在倉庫的 docs/DETAIL.md。

一個需要留意的行爲:hugo_publish 會產生 git 寫操作,宿主策略可以要求審批。也就是說發佈不是靜默完成的。

面板本身只調 Host 的 /api/hugo-blog/* 路由,所有 hugo / git 執行都在 Host 進程內完成,前端不直接碰文件系統。

安裝與啓用

README 裏給出的安裝命令是本地路徑方式:

dsh plugin --profile web add ./dsh-hugo-blog

如果是從 Git / npm 安裝本包,則需要在 cordis 補丁中插入 id=hugo-blog、name=dsh-hugo-blog。倉庫內提供了 cordis.patch.yml,package.json 裏的 dsh.bundle.patch 字段指向它。

這裏能看到一個容易踩的點:使用打包命令時,本插件主要面向 web profile(package.json 的 dsh.client.platform 也寫的是 web)。而 README 的已知限制裏說明,插件按 profile 隔離安裝,桌面 GUI 用 desktop profile,CLI-headless 用它自己的 profile,裝在哪個 profile 只有那個實例可見。所以如果你的部署切在另一個 profile,需要按對應實例重新裝一次。

典型用法

裝好後,先看一遍面板流程即可完成日常操作。如果想走工具調用路徑,順序大致是:

  1. 在面板選擇站點目錄並載入,確認站點狀態裏的分支和工作區狀態。
  2. 用 hugo_new_content 或 hugo_new_pagebundle 建內容。
  3. 用 hugo_edit_frontmatter 改標題、標籤、日期、定時發佈等字段。
  4. 用 hugo_build_check 跑構建檢查。
  5. 用 hugo_list 確認文章落位。
  6. 用 hugo_publish 發佈,按宿主審批策略等待確認。

發佈這一步如果宿主策略要求審批,hugo_publish 的 git 寫操作會先停下來等人工同意,這是設計好的保護,不是卡住。

面板側則可以直接在「文章列表」裏挑一行進編輯區改 Front Matter,保存時會看到 lint 結果;這一步的價值在於發佈前能立刻知道字段是否合法,不用等構建報錯才發現。

適用場景與注意

適合兩類人:一類是在 DSH 裏維護自己 Hugo 博客、希望寫作到發佈都在一個流程裏完成的開發者;另一類是給團隊搭智能體工作流、需要把內容發佈動作收斂到插件工具而不是自由 shell 的人。

使用前需要確認幾件事:

  • 插件以當前 dsh 進程權限運行,能在站點目錄裏讀寫文件和執行 git。安裝前先檢查源碼與許可證(MIT)是否符合你的要求。
  • Hugo 構建緩存目錄必須可寫(HUGO_CACHEDIR),沙箱環境下要確認緩存目錄權限。
  • GitHub Pages 部署默認走「push → Actions」,CI workflow 需要在倉庫側自備,插件不提供。
  • profile 隔離意味着同一個插件裝在不同實例上互不可見,部署前確認目標 profile。

結尾

這個插件解決的不是 Hugo 本身的問題,而是把 Hugo 站點的日常維護動作接進 DSH 工具體系,讓智能體有明確的註冊接口可用,讓發佈帶着構建檢查和審批閘門。功能集中、依賴很少,適合自己跑 Hugo 站點的人直接裝來試。

  • 目錄頁:https://www.skillhub.cn/plugins/ruoshui6662/dsh-hugo-blog
  • GitHub:https://github.com/ruoshui6662/dsh-hugo-blog
羽毛球分组比赛记分
小程序二维码

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

小夜