Skip to content

monkeychen/wx-kit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

348 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

wx-kit · 微信百宝箱

把微信公众号文章下载为多种格式并在应用内浏览;支持按公众号批量爬取; 同一二进制带 CLI,可被 AI agent 直接调用。单进程 Electron,GUI 与 CLI 双启动模式。

License Electron Node Status

下载 · 按链接 下载 · 按公众号 文库 · 分组卡片 文库 · 列表 设置
按链接下载 按公众号下载 文库·分组卡片 文库·列表 设置

这是什么

微信百宝箱是一个桌面工具:

  • 下载任意微信文章为封面 / Markdown / 网页 / PDF / 元信息 5 种格式;
  • 批量爬取某个公众号的历史文章(按数量或日期范围);
  • 库内阅读已下载文章;
  • 同二进制带 CLI(npx electron . download ...),面向 AI agent 自动化调用。

最新版本 v0.8.1(让内容流到该去的地方 + dock 图标修复):

  • 同步到个人站点:文库选文一键按 Astro 站点规范生成 content/posts/<日期>-<slug>/(图片摊平同目录、目录级原子写入、slug 冲突不覆盖);默认隐藏,设置页开关开启,CLI 同样可用。
  • 订阅按号点检:订阅页每行一个「检查」,不必每次全量;CLI check-now --accounts <fakeid,...> 同步支持,频控纪律不变。
  • 列表默认按发布时间降序:library list / search 新增 --sort/--order,默认最近在前,agent 取前 N 条即最近 N 篇。
  • mac CLI 不再冒程序坞图标(v0.8.1 修复):改由 LSUIElement 在进程启动时压住,dock.hide() 治不了根(图标在 JS 执行前就画了)。

历史版本亮点见下方「项目状态」ROADMAP.md 发布史,逐版发布说明在 docs/releases/

特性

  • 🖥 GUI + CLI 双启动 —— 同一份 Electron 二进制,带子命令即进 CLI,否则开窗口。
  • 📦 多格式导出 —— 封面、Markdown、HTML、PDF、元信息,可任意组合。
  • 🔁 断点续传 + 去重 —— 每篇落盘即写索引,中断/重跑自动跳过。
  • 🛡 节流 + 退避 —— 批量爬取默认串行 + 随机延迟,命中频控自动退避,不裸报错。
  • 💻 单进程单语言 —— 纯 Node + Electron 42,无 Python 边车、无独立 chromium、无数据库(文件系统 + JSON 索引)。
  • 🤖 Agent 友好 —— 同一 CLI 输出纯 JSON,stdout 走数据、stderr 走进度、退出码 0/1/2

30 秒上手(CLI)

# 1. 装依赖
npm install

# 2. 跑 GUI(开发模式)
npm run dev

# 3. 跑 CLI 试一下
npx electron . download --url "https://mp.weixin.qq.com/s/xxx" --formats md,html,meta

输出在 ~/Documents/wx-kit/(默认库根,可在「设置」改)。

30 秒上手(命令行安装,推荐)

# macOS(Homebrew;装的就是完整 .app,GUI + CLI 一体)
# 安装名是三段式「用户/tap/包」;tap 过一次后可用短名(brew install --cask wx-kit / brew upgrade --cask wx-kit)
brew install --cask monkeychen/wx-kit/wx-kit
xattr -cr /Applications/wx-kit.app    # 必须:未签名 app 带 quarantine 时连 CLI 都会被 Gatekeeper 卡住

# macOS / Linux(npm;需 Node 20+,国内先设 electron 镜像;装完命令名就是 wx-kit)
export ELECTRON_MIRROR=https://cdn.npmmirror.com/binaries/electron/   # 国内网络
npm install -g @simiam/wx-kit
wx-kit --version

命令行安装面向 AI agent 自动化(skill 检测未安装即可自动执行上述命令)。 升级:brew update && brew upgrade --cask wx-kit(brew 的配方缓存在本地,先 update 再 upgrade,否则可能升到旧版)或 npm update -g @simiam/wx-kit。 npm 安装不经 Gatekeeper,无 quarantine 问题;GUI 首开被拦也可走「系统设置 → 隐私与安全性」→「仍要打开」。

30 秒上手(下载安装包)

Releases 选平台对应包(最新 v0.8.1:wx-kit-0.8.1-arm64.dmg(Apple Silicon) / wx-kit-0.8.1.dmg(Intel) / wx-kit Setup 0.8.1.exe(Windows))。当前未签名/未公证,首次打开需手动放行:

  • macOS —— 拖入「应用程序」后,首次打开被拦时进「系统设置 → 隐私与安全性」点「仍要打开」(macOS 15 Sequoia 起已移除「右键→打开」快捷绕过);或命令行 xattr -cr /Applications/wx-kit.app
  • Windows —— SmartScreen →「更多信息」→「仍要运行」。

架构(一分钟)

┌─────────────────────────────────────────────┐
│  Electron (单进程)                          │
│  ┌────────────┐  ┌──────────────────────┐    │
│  │  Renderer  │◄─┤  IPC (preload 桥)    │    │
│  │  React UI  │  │  main process        │    │
│  └────────────┘  │  services/*          │    │
│                  │  ipc / wxfile proto  │    │
│                  └─────────┬────────────┘    │
│                            │                 │
│   同一二进制带 CLI ────────┤                 │
│  ┌────────────┐  ┌─────────▼────────────┐    │
│  │  CLI       │──│  src/core/ (纯逻辑)  │    │
│  │  commander │  │  - parse / export    │    │
│  └────────────┘  │  - library / queue   │    │
│                  │  - mp-auth / crawl   │    │
│                  └──────────────────────┘    │
└─────────────────────────────────────────────┘
  • src/core/ —— UI 无关纯逻辑,被 GUI 与 CLI 共享。绝不 import electron/renderer。
  • electron/ —— 主进程,IPC 处理器做薄委派,mp-* 服务对接微信后台。
  • src/cli/ —— 同二进制,src/renderer/ 缺失时即 CLI 模式(详见 AGENTS.md)。

完整需求见 docs/PRD.md;当前进度见 ROADMAP.md;开发指南(决策/不变量/陷阱)见 AGENTS.md

命令速查

场景 命令
开发(GUI 热更) npm run dev
类型检查 npm run typecheck
单测 npm test
单测(监听) npm run test:watch
Lint npm run lint
GUI 端到端(Playwright) npm run test:e2e
出 mac 安装包 npm run package:mac
出 win 安装包 npm run package:win
一次性出 mac+win npm run package
进入 CLI 模式 npx electron . <子命令>

CLI 子命令

开发期(源码内)用 npx electron .:

npx electron . download --url <u> [--formats md,html,pdf,meta] [--out <dir>]
npx electron . login                                   # 扫码登录公众号后台
npx electron . auth-status                             # 查登录态(真探测)
npx electron . search <公众号名>                        # 搜号,返候选
npx electron . crawl <公众号名> --count 2              # 批量爬取
npx electron . library list                            # 列已下文章
npx electron . library search <关键词> [--account <>] # 按标题搜文库
npx electron . library remove --ids <id,id>            # 删文章(联动历史)(v0.5.0)
npx electron . subscription list                       # 列订阅号 / 水位 / 下次检查(v0.5.0)
npx electron . subscription check-now                  # 立即检查订阅更新(v0.5.0)
npx electron . settings get [键]                        # 读设置(全量或单键)(v0.5.0)
npx electron . settings set <> <>                   # 写设置(v0.5.0)
npx electron . session export [-o <file>]              # 导出登录态(供 headless 机器用,v0.6.0)
npx electron . session import <file>                   # 导入登录态并探测有效性(v0.6.0)
npx electron . --version            # 版本号(裸 semver);--help / help <子命令> 看帮助(v0.5.0)

library list 等涉及库根的命令,--out 缺省即取「设置」里的库根(与 GUI 同库,v0.5.0 起)。

退出码:0 成功、1 业务失败、2 用法或鉴权错误。详见 docs/PRD.md §F4

安装包后的 CLI 用法

GUI 与 CLI 是同一个二进制:不带子命令开窗口,带子命令(download/login/auth-status/search/crawl/library/subscription/settings/session/version/help)或 -h/--help/-v/--version 即进 CLI。装完后直接调安装目录里的可执行文件(不是 npx electron .):

macOS —— 可执行文件在 .app 包内层:

/Applications/wx-kit.app/Contents/MacOS/wx-kit download --url "https://mp.weixin.qq.com/s/XXX" --formats md,meta --out ~/Documents/wx-kit

# 嫌路径长,建个 wrapper 脚本一劳永逸(⚠️ 别用 ln 软链——macOS 上 Electron
# 经软链找不到 bundle 内 Helper 子进程,download 等命令会崩):
printf '#!/bin/sh\nexec "/Applications/wx-kit.app/Contents/MacOS/wx-kit" "$@"\n' > /usr/local/bin/wx-kit
chmod +x /usr/local/bin/wx-kit
wx-kit auth-status

v0.5.0 起,首次打开 GUI 会提示在 ~/bin 自动创建这个快捷命令(v0.5.2 起为 wrapper 脚本;~/bin 不在 PATH 时引导写入 shell 配置),设置页也能随时重建——接受引导后此处手动创建即可省去。

用内层 Contents/MacOS/wx-kit,别用 open -a wx-kit——open 不透传 stdout / 退出码,拿不到 JSON 结果。

Windows —— 默认装在 %LOCALAPPDATA%\Programs\wx-kit\wx-kit.exe(安装时可改目录):

& "$env:LOCALAPPDATA\Programs\wx-kit\wx-kit.exe" download --url "..." --formats md,meta --out . > result.json 2>progress.log

⚠️ Electron 在 Windows 是 GUI 子系统程序,stdout 不会回贴到调用它的控制台——直接在 cmd/PowerShell 里跑看不到那串 JSON。请重定向到文件(> result.json,GUI 子系统下仍生效);管道 | 取 stdout 不可靠。需要稳定 stdout 的 agent 集成优先在 macOS/Linux 上跑。

项目状态

v0.1.0 – v0.8.1 均已发布(最新 v0.8.1:让内容流到该去的地方 + dock 图标修复)。各里程碑均合入 main,端到端在真实微信公众号后台验证通过:

v0.1.0 · 第一阶段主线

  • ✅ M1 — 核心层 + CLI download 五格式
  • ✅ M2 — GUI:下载页 / 书架 / 阅读器 / 设置
  • ✅ M3 — 扫码登录 + 批量爬取(CLI)
  • ✅ M3.5 — 批量爬取 GUI 页(单页渐进:登录引导 → 搜号 → 实时逐篇)
  • ✅ M4 — electron-builder 打包:未签名 mac(dmg arm64+x64)+ win(nsis x64)

v0.2.0 · 下得放心、找得到、看得见

  • ✅ M5 — 信息架构重构:导航三项(下载/文库/设置)+「下载」页双模式(URL/公众号)+「书架」→「文库」改名
  • ✅ M6 — 下载闭环 + 历史:结果区就地确认/阅读(R1)+ 下载历史 history.json(R2)
  • ✅ M7 — 反馈引导:频控退避可见 + 失败话术归一(R5);取消需二次确认,未下载文章进历史可单篇补下
  • ✅ M8 — PDF 保真:导出 PDF 不跨页切图(R4)
  • ✅ M9 — 文库组织:排序 / 按公众号筛选+分组 / 批量删除(R6)+ 卡片⇄列表(访达式)视图切换

v0.2.1 · 安全补丁(2026-06-09)

  • ✅ 依赖审计:electron 31→42、electron-builder 24→26、vite 6、vitest 3,Dependabot 28 项全部 fixed 归零;功能与 v0.2.0 一致,已出三平台安装包。

v0.3.0 · 列表顺手 + 公众号订阅(2026-06-16)

  • ✅ M10 — 文库列表视图优化:列宽可拖拽调整(持久化)+ 排序移到表头点击
  • ✅ M11 — 公众号订阅:订阅页 + 定时检查(每天某时刻)+ 新文章提示/自动下载 + session 过期登录引导
  • ✅ M12 — 订阅触发升级(daily/interval)+ 检查可观测性(检查记录 + 落盘日志 + 下次预计)
  • ✅ UI 打磨:四个导航页栏宽统一(满宽)

v0.4.0 · 文库供料 agent + 存储加固(2026-06-23)

  • ✅ M13 — 存储加固:三索引原子写 + 按文件写锁(并发不丢更新)+「重建索引」(CLI library rebuild + 设置页按钮)
  • ✅ M14 — 供料能力:library export CLI(JSON 清单 + content.md 路径)+ 文库「导出选中为素材」
  • ✅ M15 — 贯通样例 skill agent/wx-kit-compose:选料 → 选题 → 写作(委派 khazix-writer),两个人工检查点;wx-kit 只供料

v0.5.0 · CLI 体验优化(2026-06-29)

  • ✅ M16 — 模式分流修复 + help/version:-h/--help-v/--versionversion / help [子命令] 都进 CLI 走 stdout,无参仍 GUI
  • ✅ M17 — CLI 补齐:library search/removesubscription list/check-nowsettings get/set;--out 默认回落设置库根(GUI/CLI 同库);抽出共享 runSubscriptionCheck(CLI 检查同步落盘 check log + 历史)
  • ✅ M18 — 首启建 PATH 软链(macOS/Linux):~/bin 软链 + 不在 PATH 引导写 shell profile + 设置页重建入口

v0.5.1 · 支持文字消息与图文消息(2026-07-09)

  • ✅ M19 — 非标准消息类型解析:文字消息(item_show_type: '10')+ 图文消息/小绿书('8')——正文/图片从页面脚本变量提取,标题策略 + og 兜底清洗,md/html/pdf/阅读器/CLI 全链路修复

v0.5.2 · 修复命令行入口崩溃(2026-07-10)

  • ✅ M20 — 命令行入口 symlink → wrapper 脚本(macOS 经软链找不到 Helper app,download 必崩)+ 旧软链开 GUI 自动升级

v0.5.3 · 修复 macOS 关窗后程序坞无法重开窗口(2026-07-13)

  • ✅ M21 — 补注册 app.on('activate'):关窗驻留后点程序坞图标重建主窗口(缺陷自 v0.1.0 即存在,整进程启停的开发/测试路径一直未暴露)

v0.5.4 · 订阅检查:不重跑、看得清失败、请求更省(2026-07-16)

  • ✅ M22 — 订阅检查加固:调度防重入(检查跨 tick 时曾并发重复跑)+ 检查记录「失败 x」可点开逐号原因弹窗 + 「翻到水位为止」(日常每号 1 次请求,空窗多日不漏文章)

v0.5.5 · 文库目录化导航 + 关键词筛选下载(2026-07-18)

  • ✅ M23 — 文库导航:分组默认收起为目录(一屏尽览,展开记忆)+ 粘性组头 + 回到顶部;content-visibility 保千篇量级流畅(实测 23→52fps)
  • ✅ M24 — 按公众号下载关键词筛选(issue #1):仅下载含/排除含(GUI 互斥下拉),CLI --include/--exclude,零额外请求

v0.6.0 · Agent 自动化闭环(2026-07-19)

  • ✅ M25 — 体验杂项:文库默认发布时间降序+排序跨会话记忆、检查日志入口(设置页/订阅页)、CLI 帮助大改(双模式/输出契约/子命令清单/示例)
  • ✅ M26 — 安装通道:brew tap(monkeychen/homebrew-wx-kit)+ npm 包(wx-kit),发版规约同步扩展
  • ✅ M27 — 登录态跨机迁移:session export/import(0600 + 结构校验 + 导入即真探测),headless 环境闭环
  • ✅ M28 — agent skill:agent/wx-kit-skill/(安装/登录态/能力速查/组合范例,样例逐条实测)

v0.7.0 · 磨平「下载 → 创作」链路(2026-07-20)

  • ✅ M29 — 保真与外观:Markdown 导出保留 GFM 表格(自写规则 + 微信 <section> 单元格压平)、应用内版本号(设置页「关于」)、原生标题栏文案去重
  • ✅ M30 — 创作工作流:导出素材后 Modal 就地显示路径 + 一键复制「给 agent 的指令」(调研后否决「直接唤起 Claude Code」,理由见计划)

v0.8.0 · 让内容流到该去的地方(2026-07-22)

  • ✅ M31 — CLI/订阅增强与 bug 修复:订阅按号点检(行内「检查」+ CLI --accounts)、library list/search 默认按发布时间降序(--sort/--order,排序逻辑抽 core 与 GUI 共享)、-h 附仓库地址、修 mac CLI 堆程序坞图标
  • ✅ M32 — 站点同步:文库/CLI 按 Astro 站点规范生成 content/posts/<日期>-<slug>/(目录级原子写入、slug 冲突不覆盖、图片摊平);设置开关默认关;产物过真实站点 npm run check

v0.8.1 · 补丁(2026-07-22)

  • ✅ M33 — 真正修掉 mac CLI 的程序坞图标(LSUIElement plist 层,dock.hide() 在 ready 前不生效);设置页「站点同步」加 hover 建站指引

详见 ROADMAP.mddocs/devlog/wx-kit-vibe-coding.md(逐里程碑的决策/踩坑/方法论)。

贡献

欢迎 PR!具体流程见 CONTRIBUTING.md —— 跑 npm test / npm run typecheck / npm run lint 全部通过再提。 行为准则见 CODE_OF_CONDUCT.md

安全漏洞请不要公开提 issue,按 SECURITY.md 私下报告。

许可证

Apache License 2.0 — 见文件正文。Copyright 2026 monkeychen

致谢

  • 设计脱胎于技术探索原型 ../trae/x-downloader,感谢那段 PyQt 时代留下的判断。
  • 用了 playwright 做 e2e 与图标渲染、electron-builder 出安装包。

About

把微信公众号文章下载为多种格式并在应用内浏览;支持按公众号批量爬取,带 CLI 供 AI agent 调用。

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages