dsh-wechat-article:在 DSH 裏把 Markdown 推到公衆號草稿箱

前言

在 DeepSeek Harness(DSH)裏寫長文時,常見做法是本地 Markdown 寫好,再手工粘貼到公衆號後臺,或另寫腳本調微信接口。公衆號編輯器對 HTML 有 inline 樣式、圖片域名等約束;封面又是固定比例(900×383)。這條鏈路分散在編輯器、素材庫和 API 之間,智能體很難在一個會話裏閉環。

下面介紹社區插件 dsh-wechat-article(維護者 alitrack,分類:聯網工具)。它在 DSH 內提供三條工具鏈:Markdown 轉編輯器安全 HTML、生成封面 PNG、創建草稿箱條目並讀回校驗。插件聲明 Zero dependencies,鏈路到草稿箱爲止,不包含「發表」。

說明:同名生態裏還有 dsh-wechat(iLink 與 dsh 的對話橋),與本插件無關;本插件不處理消息,只處理 Markdown 文件併產出可發佈的文章草稿。

這是什麼

dsh-wechat-article 是 DSH 的聯網工具類插件:在 Harness 會話中把 Markdown 轉爲微信公衆號 草稿箱 草稿——inline-style HTML、2.35:1 封面卡、推送後讀回驗證。憑證未配置時仍可本地使用 wechat_draft 與 wechat_cover;wechat_push 僅在 AppID/AppSecret 可用時註冊。

  • 目錄頁:https://www.skillhub.cn/plugins/alitrack/dsh-wechat-article
  • 源碼:https://github.com/alitrack/dsh-wechat-article
  • 許可證:MIT(README badge)
  • 運行環境:Node.js >= 20(package.json)

核心功能

插件暴露三個工具,可按步驟串聯,也可由 Agent 按需調用。

工具 作用
wechat_draft Markdown → 公衆號編輯器安全 HTML:規則全部 inline,無 <style>、無 class;圖片居中帶說明;表格外包一層以支持橫向滾動
wechat_cover 輸出 900×383(2.35:1)封面 PNG:kicker、換行標題、副標題、四色 chip 行
wechat_push 在草稿箱創建草稿:可生成並上傳封面,將本地/data: 圖片經 media/uploadimg 上傳至微信 CDN 並重寫爲 mmbiz.qpic.cn,隨後讀回草稿並校驗標題與正文長度

wechat_draft 與 wechat_cover 不需要任何憑證,純本地。wechat_push 需要具備草稿箱權限的已認證訂閱號/服務號的 AppID/AppSecret。插件只實現 draft/add 與 draft/get,不調用 freepublish;是否發表由賬號持有人決定。

支持的 Markdown 子集

標題、段落、強調、行內代碼、帶語言標籤的圍欄代碼塊、引用、兩級嵌套的有序/無序列表、GFM 對齊表格、圖片、---,以及 :::tip / :::info / :::warning / :::danger 提示塊。Frontmatter 字段 title、author、digest、summary 會進入草稿元數據。超出子集的內容會降級爲文本而非消失。

封面兩種渲染方式

  1. 無頭 Chrome/Chromium(自動檢測):真實字體棧,中文標題可正常渲染;Snap 版 Chromium 有專門處理,並在接受 PNG 前校驗尺寸。
  2. 內置光柵化(lib/png.js + lib/font5x7.js):不依賴 Chrome,但僅含數字與大寫拉丁字形;中文標題會返回 CJK_TEXT_NOT_RENDERED 警告而非亂碼方框。

兩種方式均輸出 900×383 PNG,並控制在微信 thumb 素材 64KB 上限內。

編輯前檢查(wechat_draft)

wechat_draft 只報告 warning,不改寫正文,例如:全文無圖、圖片非 mmbiz.qpic.cn、外鏈、超過四列表格、佔位符(如 [[待寫]]、TODO)、以及數字一致性候選(同一數量兩種寫法、單位量級跨度、孤立大數等)。數字檢查是清單生成,不是事實覈查。

安裝與啓用

在 DSH 中安裝(命令來自 README):

dsh plugin --profile web add dsh-wechat-article

或直接從 GitHub 添加:

dsh plugin --profile web add github:alitrack/dsh-wechat-article

憑證(僅 wechat_push)

憑證不能作爲工具參數傳入(避免進入模型上下文、會話記錄與 tool-call 日誌)。可選兩種方式:

# 方式 A — 環境變量
export DSH_WECHAT_APPID=wx...
export DSH_WECHAT_APPSECRET=...

# 方式 B — 本地文件(桌面 Agent 推薦)
mkdir -p ~/.dsh-wechat
printf '{"appId":"wx...","appSecret":"..."}' > ~/.dsh-wechat/credentials.json
chmod 600 ~/.dsh-wechat/credentials.json

DSH_WECHAT_CREDENTIALS 可指向其他憑證文件;DSH_WECHAT_CHROME 可指定封面渲染用的 Chrome/Chromium 路徑。

憑證門(credential gate)

未解析到憑證時,插件只掛載 wechat_draft 與 wechat_cover,並在 system prompt 中說明如何配置;wechat_push 不會註冊。添加憑證後需 重啓 dsh(插件工具面在 mount 時評估,無熱重載)。

若需在無憑證時仍註冊 wechat_push(例如 CI 裏 dry_run: true):

export DSH_WECHAT_GATE=off

微信還要求調用 IP 列入公衆號後臺「開發 → 基本配置 → IP 白名單」;出現 40164 時插件會明確提示 IP 白名單問題,而非僅回顯 invalid ip。

典型用法

可直接讓 Agent 調用,或按 README 示例傳參:

1. wechat_draft  markdown_path=/ws/article.md out_path=/ws/out/article.html
2. wechat_cover  title="一條命令推到草稿箱" out_path=/ws/out/cover.png
3. wechat_push   title="…" markdown_path=/ws/article.md

wechat_push 還可接受 html=(wechat_draft 返回的片段)、thumb_media_id=(已有封面)、cover_path=;若均未提供則自行生成並上傳封面。dry_run=true 時只校驗標題、摘要、限制與封面,不訪問網絡。

適用場景與注意

適合:已在 DSH 中用 Markdown 寫技術文或運營稿,希望在同一會話內完成 HTML 轉換、封面與草稿箱入庫,並依賴讀回校驗確認微信側內容與標題大致一致的團隊或個人。

使用前請知悉:

  • 插件以 當前 dsh 進程權限 運行;安裝前建議閱讀源碼與 MIT 許可證,並自行評估憑證與 IP 白名單配置。
  • 工作區限制:路徑必須爲絕對路徑且落在會話 workspace 內;越界、..、指向 workspace 外的 symlink 等會被拒絕。
  • 安全設計包括:同一 workspace 內相同 title+content 哈希只推送一次(狀態在 <workspace>/.dsh-wechat/state.json);圖片按 sha256 去重上傳;連續 push 至少間隔 2 秒;錯誤信息會 scrub AppSecret 與 access token。
  • DSH 社區插件目錄(如 skillhub.cn)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;「一切皆插件」是 DSH 生態理念,本文介紹的是社區維護的 alitrack/dsh-wechat-article。

結尾

經過上面的步驟,你可以在 Harness 裏把 Markdown 轉成公衆號可用的 inline HTML、標準比例封面,並在配置憑證與 IP 白名單後推入草稿箱且讀回覈對。本地預覽與封面生成不依賴微信賬號;正式發佈前的「發表」仍在公衆號後臺由人工完成。

  • 插件目錄:https://www.skillhub.cn/plugins/alitrack/dsh-wechat-article
  • GitHub:https://github.com/alitrack/dsh-wechat-article
羽毛球分组比赛记分
小程序二维码

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

小夜