1实现原理 · 为什么它能做到
双通道发布:要么走微信公众平台 API(wechat-api.ts,草稿接口),要么走浏览器 CDP(wechat-article.ts / wechat-browser.ts 驱动真实 Chrome)。
Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP.
流程是清单式的 Step 0-7,且首次设置被定义为阻断操作:EXTEND.md 未就绪前禁止任何其它步骤或提问。
**BLOCKING OPERATION**: This setup MUST complete before ANY other workflow steps.
API 路径的凭证来自 .env:WECHAT_APP_ID / WECHAT_APP_SECRET,三级优先级为环境变量 → 项目 .canghe-skills/.env → 用户 ~/.canghe-skills/.env。
test -f .canghe-skills/.env && grep -q "WECHAT_APP_ID" .canghe-skills/.env && echo "project"
草稿请求体规则被写死:POST draft/add,article_type 取 news/newspic,news 必带 thumb_media_id,并显式携带评论开关字段。
- Use endpoint: `POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN`
浏览器路径用真实 Chrome + CDP,并以 --disable-blink-features=AutomationControlled 关闭自动化特征。
'--disable-blink-features=AutomationControlled',
贴图/图文把图片贴进编辑器:markdown 图片先替换为 WECHATIMGPH_n 占位符,粘贴 HTML 后逐个定位占位符删除并贴入图片。
3. **Paste**: HTML content is pasted into WeChat editor
剪贴板写入依赖内联 Swift/AppKit:脚本把一段 Swift 源码写临时文件再编译执行,以支持图片/富文本剪贴板。
await writeFile(swiftPath, getMacSwiftClipboardSource(), 'utf8');
markdown→HTML 转换委派给 canghe-markdown-to-html,命令与主题选项同源。
npx -y bun ${MD_TO_HTML_SKILL_DIR}/scripts/main.ts <markdown_file> --theme <theme>
预检脚本检查 Chrome、profile 隔离、Bun、辅助功能、剪贴板、粘贴键、API 凭证与 Chrome 冲突。
Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, API credentials, Chrome conflicts.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| api | 微信公众平台草稿接口(draft/add) |
| network | 微信公众平台(凭证申请/草稿管理页) |
| cli | bun(经 npx -y 即时拉取) |
| cli | Google Chrome(CDP)+ osascript / xdotool / ydotool(真实键击贴图) |
4风险提醒 风险提醒:红色 · 谨慎使用
- 以用户真实 Chrome 登录态操作公众号,并在启动参数中关闭自动化特征(--disable-blink-features=AutomationControlled)。 — 属反自动化侦测的技术性绕过;会影响账号与平台条款风险。
- API 路径读取 AppID/AppSecret 并以此账号创建草稿/发布,发布不可逆。 — 凭证存于 .env(项目或用户级),能读该文件者即可代发。
- 浏览器路径依赖共享 Chrome profile 与系统辅助功能/剪贴板权限,贴图走真实键击。 — 需要授予终端 Accessibility 权限,等于放大宿主进程的操作面。
- 主脚本(wechat-api/article/browser.ts)正文未在 bundle 展开,取 token 与 DOM 细节未经代码级复核。 — 第二遍已标 unlocatable。
5第二遍独立确认
- [ok] 双通道实现原理 — SKILL.md 描述、脚本清单与 Step 5/6 命令三处互证 api 与 browser 两条路径。
- [ok] 反自动化绕过 — 风险扫描在 cdp.ts:220 与 wechat-browser.ts:345 各定位一条 --disable-blink-features=AutomationControlled,判红据成立。
- [ok] 凭证读取 — SKILL.md 的 .env 探测命令、凭证引导流程与 Config File Locations 三级优先级一致。
- [ok] 微信 API 端点与报文规则 — draft/add 端点在 SKILL.md Step 6 与 Feature Comparison 中一致出现,含 thumb_media_id 与评论字段规则。
- [ok] 贴图占位符机制 — article-posting.md 的 Parse/Render/Paste/Replace 四步与 image-text-posting.md 说明自洽。
- [unlocatable] 主脚本正文细节 — wechat-api.ts / wechat-article.ts / wechat-browser.ts 全文未在 bundle 展开,取 token、DOM 操作等细节以 SKILL.md 与扫描行为据,未代码级复核。
- [ok] 跨 skill 依赖 canghe-markdown-to-html — SKILL.md Step 2/3 明写发现与调用,属他人 skill 行为,不参与本 skill 判级。
- [ok] 插件/镜像等供应链线索 — 除 npx -y bun 即时拉取与自带 md 子集外,未在 bundle 内发现第三方镜像或远程包注入。
6结论
1efd21eef0ed6ee4…dd0bf35595