1仕組みと動作原理
デュアルチャネル投稿:WeChat公式アカウントプラットフォームの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の3段階です。
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を貼り付けた後、プレースホルダーを1つずつ特定して削除し、画像を貼り付けます。
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、プロファイル分離、Bun、アクセシビリティ権限、クリップボード、貼り付けキーストローク、API認証情報、およびChromeの競合をチェックします。
Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, API credentials, Chrome conflicts.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| api | 微信公众平台草稿接口(draft/add) |
| network | 微信公众平台(凭证申请/草稿管理页) |
| cli | bun(经 npx -y 即时拉取) |
| cli | Google Chrome(CDP)+ osascript / xdotool / ydotool(真实键击贴图) |
4推奨統制措置と判定根拠
- SKILL.md / 脚本参数: 自動化検知の回避、ホストサンドボックスの無効化、またはSSL証明書検証のスキップを含む
- SKILL.md / 会话存储: ブラウザのユーザーログイン状態およびセッションCookieの読み取りまたは再利用
- 本地凭据 / 浏览器配置: ユーザーログインCookie/セッション/キーチェーンの読み取り: ブラウザルートが共有Chromeプロファイルの公式アカウントログイン状態を再利用(セッションCookieがプロファイル内に存在)
- scripts/: ローカルスクリプトまたはコマンドの実行: npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts / wechat-article.ts / wechat-
- 网络端点: 外部ネットワークアクセスの宣言: WeChat下書きインターフェース POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS
- 本地工作目录: ファイル読み書きおよび成果物の出力: プレーンテキスト入力時にpost-to-wechat/yyyy-MM-dd/[slug].mdを作成(mkdir -p + ファイル書き込み)
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…