wodaimnd/wxmp: Integrate WeChat Official Account article writing, formatting, and draft publishing into DSH

前言

在 DSH 里写公众号文章,常见做法是模型直接产出 Markdown,人再复制到微信公众平台后台排版、上传封面、建草稿、点发布。模型看不到草稿箱,也不知道 publishId 是什么,发没发出去全靠人盯着。这个插件(@local/wxmp,目录页名 wodaimnd/wxmp,分类「客户端」)把一个 wxmp CLI 注册成名为 wxmp 的模型工具,让模型能调用 article_new、cover、draft_create、publish_submit 这类操作,界面侧再配一个三栏工作台(文章列表 / 预览 / 发布流水线)。也就是说,写稿、排版、封面、草稿、发布这一段流程可以在 DSH 内串起来。README 里的定位是”把 wxmp CLI 注册成一个模型工具”,插件本身不重新实现公众号接口。

需要先说明的是:这是社区目录上的第三方插件,目录站与 DeepSeek / 幻方没有官方从属关系;GitHub 仓库当前星标数为 0,README 按本地工作区路径编写,使用前应自己核对源码。

适合谁

在 Windows 上用 DSH 做公众号内容、想用模型驱动从写稿到建草稿全流程的人。前提是已经安装并配置好 wxmp CLI(包括公众号的 appid / secret)。如果只想用插件附带的客户端界面、不打算让模型调用工具,这个插件的价值会打折扣,因为界面侧的三栏工作台和模型工具是配套的。

安装与启用

安装命令写在 README 里,指向本机路径,不是从 GitHub 拉取:

dsh plugin --profile web add G:\AI PGRM\DSH\wxmp\dsh-plugin

或把插件目录链接到 DSH 的本地插件目录,本工作区用的是 G:\AI PGRM\DSH\plugins\。也就是说,使用前需要先准备好 G:\AI PGRM\DSH\wxmp 这棵 CLI 目录树,插件只负责把它注册成工具。

启用后在配置里插入插件条目,配置项来自 README:

- insert:
    - id: wxmp
      name: '@local/wxmp'
      config:
        cliPath: ''        # 默认自动定位 ../bin/wxmp.js
        stateDir: ''       # 空 = 用 CLI 自己的目录(%LOCALAPPDATA%\wxmp)
        timeoutMs: 120000

cliPath 留空时插件会自动定位 CLI 的 ../bin/wxmp.js;stateDir 留空则由 CLI 自己管理状态目录。timeoutMs 是调用 CLI 的超时时间,默认 120000 毫秒。

工具形态

模型调用工具时传 operation 和 params,返回固定形状的产物,DSH 按 output.schema 校验:

{
  "operation": "draft_create",
  "params": { "file": "文章.md" }
}

返回体形如:

{ "ok": true, "exitCode": 0, "data": { "mediaId": "draft_7", ... }, "text": "草稿已创建: draft_7 ..." }

其中 render() 只把 text 字段交给模型,data 字段留给程序侧消费。也就是说模型在对话里看到的是自然语言摘要,而 mediaId 之类的结构化字段由工作台或编排程序读取。

操作与参数

README 给出的全部 operation:

operation params
config_show —
config_set appid, secret
doctor —
article_new title(必填), author?, theme?, cover?, force?
article_list —
article_show / article_check file?(缺省取最新一篇)
article_preview file?, out?, open?
cover file?, subtitle?, badge?, theme?, out?
draft_create file?, dryRun?, thumbMediaId?
draft_list offset?, count?, full?
draft_get / draft_delete mediaId
draft_update file?, mediaId?, index?, dryRun?
draft_count —
publish_submit file? 或 mediaId, yes?
publish_status / publish_wait publishId, timeoutMs?, intervalMs?
publish_list offset?, count?
publish_delete articleId, yes?, index?

参数里的 file 指的是本地文章 Markdown 文件,? 表示可选。所有操作都接受 baseUrl,默认指向 api.weixin.qq.com,需要走自建或内网网关时覆盖这个值即可。mediaId 也接受 media_id、publishId 也接受 publish_id 等下划线写法。

一次典型的串联是:article_new 新建文章 → 编辑 .md → cover 生成封面 → draft_create 建草稿 → draft_update 更新 → publish_submit 提交发布 → publish_wait 轮询发布结果。

安全默认

README 明确写了几个有意为之的默认行为,值得在使用前知道:

  • publish_submit 不带 yes: true 时只 dry-run,不会真的发出去;
  • publish_delete 同理;
  • 凭据在输出里始终打码;
  • 发布是异步任务,工具会提示用 publish_wait 轮询,而不是假装 submit 成功就算完事。

这里包含两层安全考虑:一是写操作默认可回放,二是异步接口不假装同步成功。

设计要点

README 里列出的设计约束,和实际使用有直接关系:

  • 只注入 tools:systemPrompt 是可选增强,不需要描述也能调用工具;
  • 不 import @deepseek-ai/*:插件手写 raw JSON Schema,link: 加载也不会解析失败;
  • 子进程 stdio 指向文件:受限沙箱里管道会 EPERM,所以不靠 stdin/stdout 管道传数据;
  • 所有操作串行:draft_create 会把 media_id 写回文章 front matter,publish_submit 依赖它,并发会互相踩踏;
  • 重新 apply 先释放旧注册:配置变更会重新调用 apply,避免重复注册。

串行这一点尤其重要:写操作之间有先后依赖,不要为了让模型”更快”而并发调用同一素材的操作。

适用场景与注意

适合已经在 Windows 上跑 wxmp CLI、希望把公众号生产流程并进 DSH 工作台的开发者。工作台是 web 平台,package.json 里 dsh.client.platform 为 web,需要对应的 web profile。

几点使用前的检查:

  1. 插件以当前 DSH 进程的权限运行。publish_submit 会真的触发公众号发布(带 yes: true 时),安装前先确认 CLI 与插件源码、许可证。包信息里许可证写的是 MIT,仓库是第三方个人维护,仍有源码审查的必要。
  2. 插件只注册工具,不安装 wxmp CLI 本体,也不向公众号发起它自己生成的请求之外的操作。CLI 的目录和公众号凭据需要自己准备。
  3. package.json 里 @deepseek-ai/cordis 和 @deepseek-ai/dsh-tools 都是 optional peer dependency,但 client 和 bundle patch 功能依赖 DSH 的运行时;版本不匹配时先看报错再改配置。
  4. 卸载不会删除 G:\AI PGRM\DSH\wxmp 本身,也不影响已发布的文章,这一点 README 已经说明。

卸载

README 给出的卸载步骤,本质是摘掉注册项而不是删代码:

# 1. 从 profile 清单里去掉依赖与 bundles 条目
#    %USERPROFILE%\.dsh\profiles\desktop\package.json
# 2. 删链接
Remove-Item "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\@local\wxmp" -Force
# 3. 重启 DSH

结尾

这个插件解决的是”公众号文章怎么在 DSH 里走完从写到发的一段路”:模型侧有统一的 operation 表和 dry-run 默认,界面侧有三栏工作台看文章列表、预览和发布流水线。对已经用 wxmp CLI 维护公众号的人,接入成本主要是按 README 装好插件和配置 appid / secret;对还没有 CLI 的人,得先准备好这一步,插件不替你做。

  • 目录页:https://www.skillhub.cn/plugins/wodaimnd/wxmp
  • GitHub:https://github.com/wodaimnd/wxmp
羽毛球分组比赛记分
小程序二维码

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

Xiaoye