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
羽毛球分组比赛记分
小程序二维码

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

小夜