wechat-cli开发者指南:项目架构、Click命令设计与npm跨平台二进制分发深度剖析
wechat-cli开发者指南项目架构、Click命令设计与npm跨平台二进制分发深度剖析【免费下载链接】wechat-cliA CLI tool to query your local WeChat data — chat history, contacts, sessions, favorites, and more. Designed for LLM integration.项目地址: https://gitcode.com/gh_mirrors/wech/wechat-cliwechat-cli是一款查询本地微信数据的命令行工具可从终端查询微信聊天记录、联系人、会话、收藏与未读消息并默认输出 JSON专为大模型LLMAgent 集成而设计。本文带你从源码结构、Click 命令设计到 npm 跨平台二进制分发完整理解这个项目的工程化思路。 wechat-cli 核心能力一览wechat-cli 提供 11 个命令覆盖日常微信数据查询的主要场景命令用途sessions最近会话列表history指定聊天的消息记录支持时间范围、分页search全局或指定群的消息关键词搜索contacts/members联系人查询 / 群成员列表stats聊天统计活跃 Top10、消息类型分布export导出为 Markdown 或纯文本favorites/unread/new-messages收藏、未读、增量新消息init首次初始化自动检测数据目录、提取密钥它的技术亮点在于完全本地化微信数据以 SQLCipher 加密存储在本机 SQLite 数据库中wechat-cli 通过init从微信进程内存中提取密钥再按需进行页级 AES-256-CBC 实时解密与缓存数据全程不出本机。️ 项目架构清晰分层的目录设计项目源码组织得非常规整整体可分为命令层、核心层、平台适配层三层命令层wechat_cli/commands/每个命令一个文件[wechat_cli/commands/](https://link.gitcode.com/i/8376917fd93bb9d99880d04a1874e299)下共有 11 个命令模块sessions.py、history.py、search.py、init.py等。命令文件只负责参数解析、调用核心逻辑和输出格式化非常薄。核心层wechat_cli/core/[wechat_cli/core/](https://link.gitcode.com/i/b36ccd5623faf096c0da76ca06cc3b0f)是业务逻辑所在config.py从~/.wechat-cli/加载配置并按操作系统自动选择微信进程名Linux 为wechat、macOS 为WeChat、Windows 为Weixin.execontext.pyAppContext单例上下文每次 CLI 调用初始化一次被所有命令共享crypto.py/db_cache.pySQLCipher 实时解密与数据库缓存messages.py消息收集、时间范围解析、分页校验其中AppContext是全项目的中枢它在构造时加载配置、校验密钥文件是否存在不存在就提示先运行wechat-cli init、建立DBCache并通过atexit注册清理逻辑。任何命令都通过ctx.obj拿到同一个实例避免了重复加载。平台适配层wechat_cli/keys/密钥提取与系统强相关因此按平台拆分为三个扫描器scanner_linux.py读取/proc/pid/mem需要 root 权限scanner_macos.py扫描 macOS 进程内存scanner_windows.py读取Weixin.exe进程内存新增平台的密钥提取逻辑时只需在[wechat_cli/keys/common.py](https://link.gitcode.com/i/875d6a43010765938f0c5cdab25d188c)的调度下补充对应扫描器即可互不干扰。⚡ Click 命令设计一行注册、装饰器驱动wechat-cli 选用Click构建 CLI命令注册集中在入口文件 wechat_cli/main.py体现了典型的 Click 风格1. 用click.group()构建命令组顶层入口是一个click.group()并挂上了--config全局选项支持环境变量WECHAT_CLI_CONFIG覆盖。这里有一个精妙的细节init命令不需要 AppContext因为它的职责恰恰是创建配置与密钥所以入口在invoked_subcommand in (init, version)时直接返回跳过上下文初始化。2. 每个子命令 装饰器 纯函数以 wechat_cli/commands/history.py 为例history命令完全由装饰器声明参数click.argument(chat_name)声明位置参数click.option(--limit, default50)、click.option(--type, typeclick.Choice(MSG_TYPE_NAMES))声明可选参数函数体只做校验 → 调用核心层 → 输出三件事。这种参数声明与业务逻辑分离的写法带来两个好处--help文档自动且完整命令 docstring 里还内嵌了示例新手零成本上手新增命令只需新建文件 cli.add_command()一行注册3. JSON / Text 双输出AI-First 设计所有命令默认输出JSON--format text切换为人类可读文本。统一的格式化逻辑收敛在 wechat_cli/output/formatter.py 的output()函数中。这正是 wechat-cli 能被 Claude Code 等 AI Agent 直接当工具调用的关键——结构化输出天然适合大模型解析。 npm 跨平台二进制分发主包 平台子包模式wechat-cli 是 Python 项目却能让用户npm install -g一条命令装完、无需安装 Python这背后的分发架构非常值得借鉴。1. 打包PyInstaller 冻结成单文件二进制Python 侧通过 pyproject.toml 声明依赖click、pycryptodome、zstandard并用 PyInstaller 将 entry.py 冻结为独立可执行文件entry.py单独存在是为了规避相对导入问题。各平台的二进制分别放入bin/目录。2. 发布一个主包 五个平台子包npm 侧采用 npm 官方的可选依赖optionalDependencies平台包模式npm/wechat-cli/package.json主包只包含启动脚本通过optionalDependencies声明canghe_ai/wechat-cli-darwin-arm64等平台包npm/platforms/每个平台一个独立包如 npm/platforms/darwin-arm64/package.json 通过os和cpu字段声明自己只适用于 macOS Apple Siliconnpm 在任意机器上安装时只会自动拉取当前系统匹配的那个平台子包其他平台的包会被优雅跳过——这就是为什么主包可以只发 darwin-arm64 也能在别的平台安全安装。3. postinstall 钩子定位并授权二进制安装钩子在npm/wechat-cli/install.js中实现脚本根据process.platform process.arch拼出平台键如darwin-arm64用require.resolve找到对应子包里的bin/wechat-cli可执行文件并为非 Windows 环境补上chmod 0o755执行权限。若平台包未安装如使用了--no-optional则打印修复提示而不是报错崩溃容错处理非常克制。 开发者快速上手三步本地跑起来第一步克隆仓库git clone https://gitcode.com/gh_mirrors/wech/wechat-cli cd wechat-cli第二步源码方式安装要求 Python ≥ 3.10pip install -e .第三步初始化后开始查询。确保微信正在运行然后sudo wechat-cli init # macOS/Linux wechat-cli init # Windowsinit的完整流程在 wechat_cli/commands/init.py 中检测数据目录 → 提取密钥写入~/.wechat-cli/all_keys.json→ 生成config.json。若本机登录了多个微信账号会交互式让你选择账号也可用--db-dir手动指定数据目录--force重新提取密钥之后即可体验全部命令wechat-cli sessions --limit 10 wechat-cli history 张三 --limit 20 --format text wechat-cli search deadline --chat 团队群更多命令细节与 macOS 权限配置Full Disk Access、task_for_pid failed自动重签名等可参考 README.md 与 README_CN.md。 小结wechat-cli 是一个小而完整的工程化样本架构上commands / core / keys 三层分离AppContext单例贯穿全局平台差异被隔离在密钥扫描器中命令设计上Click 装饰器声明参数、docstring 即文档、JSON 默认输出面向 AI Agent分发上PyInstaller 冻结二进制 npm 主包/平台子包 postinstall 钩子实现零 Python 依赖、一行命令安装如果你正在做一个需要跨平台分发的 CLI 工具或想为 AI Agent 打造可查询本地数据的工具链这个项目的源码都非常值得借鉴。【免费下载链接】wechat-cliA CLI tool to query your local WeChat data — chat history, contacts, sessions, favorites, and more. Designed for LLM integration.项目地址: https://gitcode.com/gh_mirrors/wech/wechat-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Flutter+OpenHarmony实战:门禁管理App用户信息编辑全解析

Flutter+OpenHarmony实战:门禁管理App用户信息编辑全解析

1. 项目概述与整体设计思路1.1 门禁管理App的核心需求拆解先说下我为什么会对这个项目标题产生兴趣。它把两个近期特别值得关注的技术点放在了一起:Flutter跨端框架和OpenHarmony开源鸿蒙系统。而具体落地的场景是“小区门禁管理”,一个看起来传统但实际…

2026/10/4 7:43:08 阅读更多 →
Java Redis 分布式锁生产级源码实战:从超卖事故到高并发避坑

Java Redis 分布式锁生产级源码实战:从超卖事故到高并发避坑

简介:这份源码解析资源面向Java后端开发者与分布式系统学习者,聚焦大厂生产环境下Redis高并发分布式锁的实战落地,帮助读者理解锁的获取、续租、释放及异常处理等核心机制,解决高并发场景下操作互斥与数据一致性问题。资源包共39个…

2026/10/4 7:42:07 阅读更多 →
MatCont非线性动力学分岔分析实操:从Brusselator模型到延续算法

MatCont非线性动力学分岔分析实操:从Brusselator模型到延续算法

1. 为什么非线性方程组分析绕不开MatCont:从手算极限到数值延续1.1 教科书方法在真实模型前的溃败刚接触非线性动力学的人,几乎都是从Lorenz系统、Duffing方程或者Van der Pol振子入门的。教科书里教的套路也很清晰:先求平衡点,再…

2026/10/4 7:42:07 阅读更多 →

最新新闻

云端智能体基础设施的四大瓶颈与演进方向

云端智能体基础设施的四大瓶颈与演进方向

云端智能体这两年的热度不用我多说,但大家可能都有个共同感受:单聊一个Demo场景,效果惊艳得不得了;一旦想把智能体真正推到生产环境,各种问题就像雨后春笋一样冒出来。我自己观察了很多团队,也亲手做过几个Agent项目,发现最大的瓶颈往往不在模型能力,而在底层的云端基础设施——…

2026/10/4 8:22:42 阅读更多 →
STM32L041C6驱动MR25H40CDF串行MRAM:工业数据记录新方案

STM32L041C6驱动MR25H40CDF串行MRAM:工业数据记录新方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 8:22:42 阅读更多 →
Skills Manager:统一54+AI编程工具技能,打造跨平台桌面中枢

Skills Manager:统一54+AI编程工具技能,打造跨平台桌面中枢

1. 为什么需要 Skills Manager:我受够了在工具之间搬运技能先说结论:过去半年我把主要精力从"多写业务代码"切换到了"维护自己的 AI 编程技能库"上,原因很简单——当前主流 AI 编程工具的能力上限,已经不取决…

2026/10/4 8:22:42 阅读更多 →
linux-command 之 who 命令详解:查看当前登录用户与登录历史

linux-command 之 who 命令详解:查看当前登录用户与登录历史

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 who 是 GNU coreutils 提供的…

2026/10/4 8:22:42 阅读更多 →
Chaos Monkey 随机杀 Pod 没发现任何问题,但真实故障还是发生了:混沌工程不是随机搞破坏

Chaos Monkey 随机杀 Pod 没发现任何问题,但真实故障还是发生了:混沌工程不是随机搞破坏

title: "Chaos Monkey 随机杀 Pod 没发现任何问题,但真实故障还是发生了:混沌工程不是随机搞破坏" description: "从 Netflix 的 Chaos Monkey 到生产级故障注入,深入讲解混沌工程的设计原则、实验框架和 3 个 Java 故障注入实…

2026/10/4 8:22:42 阅读更多 →
pi coding agent CLI 深度解析:架构、agent loop 与 TUI 启动报错排查

pi coding agent CLI 深度解析:架构、agent loop 与 TUI 启动报错排查

1. 从“pi”这个标题说起:一个极简命名背后的技术野心第一次看到“pi”这个项目标题,很多人会愣一下——是数学常数?是树莓派?还是某个内部代号?我当初也是同样的反应。但把热搜词摊开一看,答案就清楚了&am…

2026/10/4 8:21:41 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →