
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-wewrite
Advanced tools
WeChat official account AI writing pipeline as a DeepSeek Harness (DSH) plugin

一个 DeepSeek Harness(DSH) 插件:把一整套微信公众号 AI 写作管线(选题 → 大纲 → 成稿 → 质量门禁 → 排版渲染 → 配图 → 草稿箱)产品化。任何 DSH 用户一条命令安装,在本地 Web UI 里完成从选题到草稿箱的全流程。模型与凭据全部走你自己的账号,数据只落本地。
前提:Node ^22.19.0 || >=24.0.0,已能运行 npx @deepseek-ai/dsh。
第 1 步:安装插件
npx @deepseek-ai/dsh plugin --profile web add github:jerryjiao/dsh-wewrite#v0.2.0
安装完成后如需卸载:npx @deepseek-ai/dsh plugin --profile web remove dsh-wewrite。
关于产物形态:仓库直接提交了
lib/预构建产物(dist-committed),这是有意决策——DSH 从 git 安装插件不会执行 build 脚本,预构建路径让你不必在 pnpm 侧加任何allowBuilds信任声明,装完即用。
第 2 步:启动 DSH Web
npx @deepseek-ai/dsh web
打开 http://127.0.0.1:3080 ,会话视图环里会出现「wewrite 工作台」tab。
第 3 步:配置凭据
模型不需要在本插件里配:文本生成直接用 DSH 原生的模型配置(ctx.llm)。你只需要在工作台「设置」页填:
填完点「连接测试」。通过即可进入下一步;如返回 errcode 40164,见 FAQ 的 IP 白名单条目。
第 4 步:出第一篇
「选题」面板选一条热榜(内置 Hacker News,可配自定义聚合源),点开条目先看一眼 AI 速览(抓原文后的中文要点总结,抓不到则给标题解读),合适就点「写这个」,或直接输入固定主题。管线自动执行六步(选题 → 大纲 → 成稿 → 门禁 → 渲染 → 配图),进度实时可见。完成后在编辑器里改稿——选中任意一段点「AI 改写」下一句指令即可局部重写(Ctrl+Z 可撤销),右侧微信预览与最终推送产物字节一致。确认后点「推草稿箱」,到微信公众平台后台「内容与互动 → 图文素材」里查看草稿。群发请你在公众平台后台人工执行(本插件 v0.1 没有任何群发调用路径,见安全声明)。
以下截图来自 v0.5.x 真机运行(本机 DSH Web 实拍),按使用动线排列。
装好后在 DSH 对话框里直接说「用 wewrite 写一篇……」——agent 会驱动写作管线,六步进度(选题 → 大纲 → 成稿 → 门禁 → 渲染 → 配图)以卡片形式实时出现在对话流里;管线跑完出成稿卡(标题/字数/门禁结论),门禁未过会给出可行动的失败引导。对 agent 说「推草稿箱」时,宿主原生审批面板先弹出(含文章标题与门禁状态)——你点允许之前,插件零微信 API 调用(fail-closed:审批不可用即拒绝执行)。另有 /wewrite <主题> 命令与 @ 引用已有文章两个轻入口。


另外两种进入方式:会话顶部 tab 环里的「写作台」(在会话里聊着写),或侧边栏底部的「打开写作台」按钮——不进任何会话,一键全屏铺开完整工作台,Esc 收起。
写作工作区

打开即工作区:左栏是你的全部文章(状态点 + 门禁标记 + 筛选搜索),主区直接进入最近一篇的编辑器——选文章、改稿一步到位,不再有「列表页 → 下钻」两跳。零文章时主区是启动卡(输入主题开写 / 去选题中心 / 先配置凭据)。
选题中心

热门榜实时拉取(上图为真实 Hacker News 数据),行上直接「写这个」进管线,右栏管理你的选题关键词。点开任意条目,AI 会抓取原文给你一段中文速览——「这条在讲什么」加两三条具体要点(带「读了原文」徽记);抓不到原文的站点自动降级为标题解读与写作角度。速览按条当日缓存,不点开不消耗。
编辑器(双栏)

顶部 chrome 压缩为两行;视图一键切换「仅编辑 / 双栏 / 仅预览」,双栏可拖拽调宽;门禁报告从右侧滑出(不再挤占视图位);字数、门禁、保存状态全部归拢到底部状态条。改稿不顺手时选中一段文字,上方浮出「AI 改写」——输入一句话(更口语 / 精简一半 / 扩写细节 / 更有数据感,或自定义),AI 只重写选中段落并原位替换,Ctrl+Z 即可撤销;全文其余部分一个字不动。
编辑器(仅预览)

预览画布立在井底之上,所见与推到草稿箱的产物字节一致;缩放只是视觉变换,不改载荷。
定时任务

RRULE 规则与下次运行时间人类可读展示(规则原文收进悬停提示,不再占版面),可暂停/恢复。
设置

公众号凭据、模型服务、图片供应商链、API 代理分组配置;AppSecret 只回显掩码,连接测试在此。
ctx.llm(即 DSH 设置页里配的模型),也可对单次运行覆盖 provider/model。单包双端(host + client),DSH Cordis 插件形态:

DSH Web UI(React 18,http://127.0.0.1:3080)
├─ 侧边栏「打开写作台」入口(sidebar.footer.action)→ shell.overlay 全屏浮层
└─ wewrite 工作台 tab(conversation.view,双入口并存)
│ 选题(热榜 + 逐条 AI 速览)│ 编辑器(Markdown + AI 选中改写)│ 微信预览
│ 运行历史 │ 定时计划 │ 设置
│ connection.rpc(仅 loopback 回环,authority 校验)
▼
DSH Host(Node + Cordis)
└─ dsh-wewrite 宿主插件:WeWriteService(唯一写权威,操作串行化)
├─ pipeline/ 六步引擎:选题→大纲→成稿→门禁→渲染→配图
│ 文本步调 ctx.llm,确定性步骤纯代码执行
├─ scheduler/ RRULE 归一化 → durable occurrence claim → 派发 run
├─ wechat/ token / uploadimg / material / draft
│ apiBaseUrl 可配 = 代理缝(全部调用统一走该地址)
└─ providers/ 9 家图片供应商 + fallback 编排
凭据:ctx.credentials(~/.dsh 本地) 数据:storageDomain(~/.dsh 本地)
设计细节见 docs/tech-architecture.md(ADR-001~009 收录于该文档 §10)。
全部在工作台「设置」页配置,无需手改文件。机密项(AppSecret、各图片供应商 API Key)只经 DSH 凭据服务落本地 ~/.dsh,非机密项落插件 storage domain。
公众号凭据
| 项 | 说明 |
|---|---|
| AppID / AppSecret | 公众平台「设置与开发 → 基本配置」获取;Secret 保存后界面只回显掩码 |
| 作者名 | 草稿作者字段 |
| 微信 API 地址 | 缺省 https://api.weixin.qq.com(直连)。出口 IP 不在白名单时改为你的 relay 地址(见 tools/wechat-relay) |
图片供应商链
gpt-image-2,凭据引用 WEWRITE_IMG_OPENAI)。API 代理
微信服务端接口有 IP 白名单约束(官方文档:仅白名单 IP 可用 AppSecret / access_token 调用)。本插件把「微信 API 地址」做成一等公民配置项:配成 relay 地址后所有微信调用统一走 relay,无直连混合路径。自建 relay 的最小配置(Caddy 一行)见 tools/wechat-relay/README.md。
热榜源
title / url / name 字段)。其他
| 项 | 缺省 | 说明 |
|---|---|---|
| 默认主题 | professional-clean | 三套:professional-clean / tech-dark / minimal-gray |
| 默认图尺寸 | 1024x1024 | 可选 1024x1536 / 1536x1024 / 1344x768 / 768x1344 |
| 运行历史上限 | 200 | 1–1000,超出自动修剪终态记录 |
| Agent 工具 | 关 | 打开后可在 DSH Agent 会话里用 wewrite_run / wewrite_push_draft / wewrite_list_schedules 三个工具 |
| 调度轮询间隔 | 30 秒 | 宿主级配置项(cordis.patch.yml 层) |
~/.dsh 本地存储,不进 git,不离开你的机器;插件自身无任何远端上报通道。****,短值全掩)。推送报 errcode 40164(invalid ip,不在白名单)怎么办?
这是微信侧约束:调用服务端接口的出口 IP 必须在公众号白名单里。点设置页「连接测试」,诊断会显示当前出口 IP 与分类指引。两条出路:
api.weixin.qq.com(Caddy 一行配置,见 tools/wechat-relay/README.md),把服务器 IP 加白名单一次,然后设置页「微信 API 地址」改成 relay 地址。本插件不提供也不销售代理服务。支持哪个 DSH 版本?装上没激活怎么办?
见版本兼容表。DSH v0.1 处于 developer preview 的 breaking changes 窗口,本插件做了 feature detection 防御(storage/connection 服务缺失时警告并降级,而非半死不活)。装上不激活时先确认 DSH 版本在支持列表内;安装输出若出现 "plain dependency" 字样,说明插件声明未被识别,属 DSH CLI 与本插件版本不匹配,请到 Issues 反馈。
群发功能在哪?
v0.1/v0.2 没有,这是有意的安全默认(见安全声明)。后续版本会以显式 opt-in(默认关闭,逐次确认)的形式评估提供。
管线失败会留下半成品草稿吗?
不会。推送是原子操作:任一环节失败即中止,草稿箱不会出现残稿;已完成的文章产物保留在本地,改好可重推。
| dsh-wewrite | DSH | Node | React | 状态 |
|---|---|---|---|---|
| v0.2.0+ | v0.1.x developer preview(2026-08-13 发布) | ^22.19.0 || >=24.0.0 | 18(宿主提供,peer) | 已验证(2026-08-20 基线:358 单测 + E2E fresh/demo 52 用例全绿,含 v0.3 未发版改动) |
| v0.1.0 – v0.1.4 | v0.1.x developer preview(2026-08-13 发布) | ^22.19.0 || >=24.0.0 | 18(宿主提供,peer) | 已验证(2026-08 基线,DSH master@2026-08-17 实测) |
DSH v0.1 是 developer preview,不承诺 API 稳定;DSH 升级后如插件失活,优先检查本表并升级插件版本。
npm install # 独立克隆直接装(无 install 钩子)
npm test # 358 个测试(vitest)
npm run lint # eslint
npm run typecheck # tsc --noEmit
npm run check:p0 # 视觉门禁扫描(emoji/渐变/占位文案)
npm run build # 产出 lib/(提交前必跑,产物入库)
项目文档在 docs/(PRD / Spec / 技术架构 / QA 测试计划),测试即契约(Spec EARS 验收标准的可执行形态)。
本仓库不自带 playwright 安装(避免重复下载浏览器与依赖膨胀)。在 worktree 跑 e2e 真机驱动(npm run test:e2e)时,复用 workspace 主仓的安装,两种方式任选:
# 方式一:NODE_PATH 指向 workspace 的 node_modules(runner 从那里解析 playwright)
NODE_PATH=/Users/mac/Documents/workspace/node_modules npm run test:e2e
# 方式二:直接用 workspace 里 playwright CLI 的绝对路径起驱动/装浏览器
/Users/mac/Documents/workspace/node_modules/.bin/playwright install chromium
策略原因:worktree 是共享 .git 的轻检出,浏览器二进制与依赖全局只留一份(workspace);CI 侧由流水线自行安装,与本地策略互不干扰。
三条 GitHub Actions 流水线,全绿是合入与发版的前置:
| Workflow | 触发 | 做什么 |
|---|---|---|
ci.yml | push / PR 到 main | 插件门禁:lint → typecheck → 全量测试 → P0 视觉扫描 → build → lib/client.js 加载契约标记校验 + dist-committed 一致性(rebuild 须与提交的 lib/ 字节一致,防「改源码忘 build」);另跑官网构建校验(base 前缀验证) |
website.yml | push main(website/** / logo 变更)+ 手动 | 构建官网并自动部署到 GitHub Pages:https://jerryjiao.github.io/dsh-wewrite/ |
release.yml | push tag v* | 复用同一套插件门禁 → build → 打包 lib/ + cordis.patch.yml + README/LICENSE 为 zip → 创建 GitHub Release(自动生成 notes)并附产物 |
发版流程(workflow 不改版本号,bump 属本地动作):改 package.json version → 同步 README 安装命令与官网的版本 pin → commit → git tag vX.Y.Z → git push origin main --tags,release.yml 接管门禁与 Release 产物。
What. dsh-wewrite is a plugin for DeepSeek Harness (DSH) that turns a WeChat official-account AI writing pipeline—topic, outline, draft, quality gates, render, images, draft box—into a local web workbench. Models and credentials stay yours: text generation uses your DSH model config, secrets never leave ~/.dsh. Since v0.3: per-item AI digest for trending topics (fetches the linked article and summarizes it in Chinese, falls back to title-only), selection-based AI rewrite in the editor (rewrites only what you highlight, undoable), and a sidebar entry that opens the full workbench as an overlay—no session required.
Install. npx @deepseek-ai/dsh plugin --profile web add github:jerryjiao/dsh-wewrite#v0.2.0, then npx @deepseek-ai/dsh web and open http://127.0.0.1:3080 . Fill in your official-account AppID/AppSecret in the workbench settings, run the connection test, pick a topic, and push your first draft. Requires DSH v0.1.x developer preview and Node ^22.19.0 || >=24.0.0.
Safety. v0.1 pushes to the draft box only; there is no code path for mass publishing (freepublish), by design. Credentials are stored locally via the DSH credentials service and masked in logs; no telemetry is collected. MIT licensed.
MIT — Copyright (c) 2026 Jerry Jiao
FAQs
WeChat official account AI writing pipeline as a DeepSeek Harness (DSH) plugin
We found that dsh-wewrite demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.