把 Markdown 转成公众号草稿并推送草稿箱
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add alitrack/dsh-wechat-article该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
在 DeepSeek Harness(dsh)里把 Markdown 转成微信公众号草稿:内联样式 HTML、900x383 封面、推送草稿并回读,零依赖。
README
由 DeepSeek 最新模型翻译生成dsh-wechat-article
在 DeepSeek Harness(dsh)里把 Markdown 变成微信公众号草稿:内联样式 HTML、2.35:1 封面卡片、推草稿箱并回读验证。零依赖。
这是文章生产链,不是 IM 桥。 生态里另有一个同名包 dsh-wechat,它做的是把 iLink 机器人接到 dsh 上聊天;本插件不碰消息,只把一篇 Markdown 产出成可发布的草稿。
三个工具
| 工具 | 作用 |
| wechat_draft | Markdown → 公众号编辑器兼容 HTML:规则全部 inline,无 、无 class,图片居中带图注,表格横向可滚动 |
| wechat_cover | 900×383(2.35:1)封面卡片 PNG:小标签 + 自动换行大标题 + 副标题 + 四色色块 |
| wechat_push | 建草稿(需要时自动生成并上传封面),把本地/data: 图片上传到微信 CDN(media/uploadimg,按内容哈希去重)并把 src 改写成 mmbiz.qpic.cn,随后回读校验标题与正文长度 |
链条止于草稿箱。本插件不发表——「发表」是账号主人的决定。
展开完整文档(README 剩余 1 节)
dsh-wechat-article
在 DeepSeek Harness(dsh)里把 Markdown 变成微信公众号草稿:内联样式 HTML、2.35:1 封面卡片、推草稿箱并回读验证。零依赖。
这是文章生产链,不是 IM 桥。 生态里另有一个同名包 dsh-wechat,它做的是把 iLink 机器人接到 dsh 上聊天;本插件不碰消息,只把一篇 Markdown 产出成可发布的草稿。
三个工具
| 工具 | 作用 |
| wechat_draft | Markdown → 公众号编辑器兼容 HTML:规则全部 inline,无 、无 class,图片居中带图注,表格横向可滚动 |
| wechat_cover | 900×383(2.35:1)封面卡片 PNG:小标签 + 自动换行大标题 + 副标题 + 四色色块 |
| wechat_push | 建草稿(需要时自动生成并上传封面),把本地/data: 图片上传到微信 CDN(media/uploadimg,按内容哈希去重)并把 src 改写成 mmbiz.qpic.cn,随后回读校验标题与正文长度 |
链条止于草稿箱。本插件不发表——「发表」是账号主人的决定。
安装
dsh plugin --profile web add dsh-wechat-article
或
dsh plugin --profile web add github:alitrack/dsh-wechat-article
凭据
wechat_draft / wechat_cover 完全不需要凭据。wechat_push 需要具备草稿箱权限的 AppID/AppSecret(已认证的订阅号/服务号):
export DSH_WECHAT_APPID=wx...
export DSH_WECHAT_APPSECRET=...
或者(桌面 agent 推荐)
mkdir -p ~/.dsh-wechat
printf '{"appId":"wx...","appSecret":"..."}' > ~/.dsh-wechat/credentials.json
chmod 600 ~/.dsh-wechat/credentials.json
凭据永远不作为工具参数传入。 工具参数会经过模型上下文、会话记录和工具调用日志——一旦允许模型传 AppSecret,这个密钥就同时落在三处。这是设计约束,不是疏忽。
凭据门(只有解析到凭据才注册 push)
wechat_push 只在凭据可用时注册。没有凭据时插件只挂 wechat_draft 与 wechat_cover(这两个是纯本地计算,不碰网络),并在系统提示里加一段说明,点名该改哪个变量/哪个文件。理由和 dsh 自己的 patch 用 disabled: 关行一样:一个永远只会返回 WECHAT_NOT_CONFIGURED 的工具,仍要花模型一个回合去发现这件事,还会跟真正能用的工具抢注意力。少一个工具 + 提示里一句话,胜过永远失败的工具。
(无凭据时的样子) wechat_draft ✓ wechat_cover ✓ wechat_push ✗ 未注册模型被告知:设置 DSH_WECHAT_APPID/DSH_WECHAT_APPSECRET,或写 ~/.dsh-wechat/credentials.json,然后重启 dsh
逃生口:仍然注册 push(CI 里跑 dry_run 校验用)
export DSH_WECHAT_GATE=off
DSH_WECHAT_GATE=off 恢复旧的「总是注册」行为:真推会返回结构化的 WECHAT_NOT_CONFIGURED,而不是工具消失;dry_run: true 照旧可以不联网、不凭据地校验内容/限额/封面。门的判定发生在挂载时一次,加完凭据要重启 dsh(dsh 对插件的工具表面没有热重载)。
公众号还要求调用方 IP 在后台白名单里(开发 → 基本配置 → IP白名单)。报 40164 就是这件事,插件会把原因说清楚,而不是回一句 invalid ip。
用法
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 只做校验:标题/摘要/体积限制与封面,不发任何请求。
支持的 Markdown
标题、段落、强调、行内代码、围栏代码块(带语言标签)、引用块、有序/无序列表(两级嵌套)、GFM 表格(含对齐)、图片、---,以及 :::tip / :::info / :::warning / :::danger 提示框。Frontmatter(title/author/digest/summary)会填进草稿元信息。子集之外的语法退化成文本,不会被静默丢掉。
封面两条渲染路线
1. headless Chrome/Chromium(自动探测)——真字体栈,中文标题能正常渲染。snap 版 Chromium 也能用:渲染器会把文件放到受限 snap 真正可写的目录,并在接受结果前校验 PNG 尺寸。
2. 内置光栅渲染器(lib/png.js + lib/font5x7.js)——没有 Chrome 也能出图,整张卡片都画得出来,但字模只有数字和大写拉丁字母;中文标题会返回 CJK_TEXT_NOT_RENDERED 警告,而不是画一堆方块糊过去。
两条路线都产出真实的 900×383 PNG,且都在微信 64KB 缩略图素材上限之内。
安全边界
- 工作区禁锢:每个路径必须是绝对路径且落在调用会话的工作区内(exec.agent.session.header.cwd)。.. 穿越、指向外部的符号链接、工作区外的绝对路径、目录、不存在的文件,全部按不同错误码拒绝。
- 没有发表通路:只实现了 draft/add 与 draft/get,freepublish 没有。
- 幂等推送:同一标题+内容的哈希在每个工作区只推一次,重试的 agent 不会把草稿箱刷满。状态在 <workspace>/.dsh-wechat/state.json(0600,最多 200 条)。
- 图片上传去重:正文图片走 media/uploadimg(不占永久素材配额),按字节内容的 sha256 缓存——改稿重推不会重复上传没变过的图。图片路径缺失或解析失败一律降级成警告,绝不静默丢弃。
- 限速:连续推送至少间隔 2s;遇到 45009 不循环重试。
- 回读即验收:draft/add 返回 200 只代表「收下了」,不代表「对了」。推完立刻 draft/get 比对标题与可见文本长度(容忍 5%,因为微信会重写 HTML);不一致时 readback_ok=false 并给警告——不假报成功。
- 密钥卫生:错误文本回传模型之前会把 AppSecret 与 access_token 打码,AppID 只显示成 wx12***cd。
发布前体检
wechat_draft 只报告,从不改稿:
- 一张图都没有(纯文字墙);
- 图片不在 mmbiz.qpic.cn 上(编辑器保存时会剥掉外链图);
- 外链 (未认证号发布时会被剥离);
- 超过 4 列的表格(手机上读不了);
- 占位符([[待写]]、TODO、待补);
- 数字口径:同一个量两种写法(1,234 vs 1234)、同一单位下数值相差 ≥1000 倍(通常是「人 vs 人次」「总数 vs 子集」两种口径)、大数字没有单位、以及全文只出现一次因而无法自校的数字。
数字检查是「清单生成器」,不是事实核查器:它把候选摆出来,判断权在人。
本地开发
npm install --no-save @deepseek-ai/dsh-tools@0.0.1-rc.1
node --test # 77 个单测
node tests/e2e/keyless.mjs # 契约与守卫,不需要模型、不联网
bash tests/e2e/run_e2e.sh # 完整 headless e2e(本地 OpenAI 兼容端点,免 key)
版本门
dsh 会拒绝加载 peerDependencies 不匹配的插件。本插件声明 @deepseek-ai/dsh-tools: ^0.0.1-rc.1,并针对 dsh 0.2.1-rc.2 实测。豁免机制是 profile 下的 compatibility.json(精确 name@version → 精确 dsh 版本数组)——报错里提示的 dsh plugin allow-version 并不是真命令。
明确的局限
- 只到草稿箱:不发表;除建稿时那几个开关外不管理留言;不管理素材库。
- 不代取远程图片:本地路径和 data: URL 自动上传;http(s) 图片必须已在 mmbiz.qpic.cn 上——不是的话先下载到本地再引用。upload_images=false 可整体关掉自动上传。
- 没有语法高亮:代码块统一配色,不做逐 token 上色。
- 中文封面依赖 Chrome:没有 Chrome 时出的是干净的卡片 + 拉丁标题,并明确警告。
- 接口限制本地先行校验:64 字标题、16 字作者、120 字摘要、1MB 正文,都在发请求之前拦住。
许可
MIT。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
alitrack/dsh-wechat-article
把 Markdown 转成公众号草稿并推送草稿箱
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。