微信本机数据隐私优先分析器(WeChat Local Data Analyzer)
一、核心目标(Core Goal)
在不读取任何文件正文、不解析聊天数据库、不联网、不上传的前提下,对微信/微信(Weixin)4.x 本机存储做只读扫描,自动识别并整理出重要资料(合同/财务/证件/工作文档等)、标注敏感信息风险、 按内容哈希找出重复文件,并支持「导出 / 备份 / 去重」等后续动作——所有动作均为显式开关 + 二次确认, 默认不执行任何写操作。
本 skill 把"微信本地数据治理"沉淀为一个可复用的智能体能力模块,便于直接挂到代码助手或自动化 工作流中调用,也可作为隐私优先型文件治理的通用范式。
二、适用场景(When to Use)
- 用户想理清本机微信接收/收藏的文件,但怕泄露隐私、不想让 AI 读聊天记录。
- 需要从海量微信文件中筛出合同、发票、报价、证件、资质等重要资料并归档。
- 需要敏感信息风险提示(身份证/银行卡/密码/合同等文件名命中)。
- 微信文件目录臃肿,需要清理重复附件回收空间(重复多为多次下载的
(1)/_1副本)。 - 已导出的"重要资料"集合内部仍有重复 / 命名混乱,需要二次去重与业务域归类。
- 构建数据备份、资料迁移、合规自查类自动化管线。
不适用:读取聊天对话内容、破解/解密 EnMicroMsg.db、恢复已删除聊天记录——本 skill 主动拒绝。
三、输入输出规范(I/O Spec)
输入(上下文参数,见第六节)
scan_root:待扫描的微信数据根目录(账号目录或父级WeChat Files)。- 可选
include/exclude:扩展名白/黑名单。 - 可选动作开关:
--export-important/--backup/--cleanup-duplicates。 - 危险动作必须伴
--confirm;建议先--dry-run预览。
输出
- 只读扫描:本地
wechat_scan_report.md+wechat_scan_report.json,结构含 按类型 / 账号 / 年-月分布、重要资料清单、敏感提示清单、重复文件组、加密库清单(仅元数据)。 - 导出:把重要文件复制到目标目录(源不变,非破坏)。
- 去重:把重复副本
shutil.move到本地回收文件夹(非永久删除,可恢复),并写出WeChatDupTrash_plan.txt逐条 KEEP/TRASH 清单。 - 导出集二次去重:
_dedup_export_log.txt逐条 MOVE 记录,冗余副本按哈希归入备份子目录。
所有结论可追溯到具体路径;报告头部固定附带隐私与安全声明。
四、执行步骤(Execution Steps)
采用"先只读、后动作、每步可回退"的工作流:
- 探测根目录:若无
--root,用auto_detect_roots()枚举C:\Users\<u>\Documents\WeChat Files、C:\Users\<u>\WeChat Files、D:/E:/F:/WeChat Files; 失败时生成说明性空报告而非报错退出。 - 只读扫描:
scan()遍历目录树,跳过.db(仅记元数据),收集路径/大小/mtime/类型/ 重要标志/敏感标志;对 ≥MIN_HASH_SIZE(1KB)的文件算 SHA-256 用于去重。 - 汇总分析:
analyze()产出类型/账号/年月分布、重要清单、敏感清单、重复组 (同哈希 ≥2 份,记录full_paths全部副本路径,避免只存前 5 个的截断缺陷)。 - 生成报告:
build_markdown()输出 8 节 Markdown + JSON;默认仅到此为止,零写操作。 - (可选)危险动作——必须
--confirm,强烈建议先--dry-run:- 导出重要文件:复制(不改源)。
- 备份:复制非数据库文件(加密库跳过,需用户另行明确授权)。
- 清理重复:移入本地回收文件夹(保留每组的 1 份,其余移走,碰撞保护 + 完整计划清单)。
- (导出集专用)二次去重:对已经导出的集合再跑
export_dedup.py,移走内部重复副本到 备份目录(同样可恢复),使导出集内容唯一。
五、执行约束 / 隐私红线(Constraints)
- 只读元数据:绝不
open()读取文件正文做内容判断;重要/敏感判定仅基于扩展名 + 文件名关键字。 - 绝不解密聊天库:
*.db(EnMicroMsg.db 等 SQLCipher)只统计大小/路径,不尝试解密或读取。 - 不联网:脚本不含任何网络/上传模块。
- 危险操作分离:备份 / 导出 / 去重均为显式开关 + 二次确认,默认全关;未确认时绝不修改、 移动、删除任何文件。
- 去重只移不删:重复副本仅
shutil.move到本地回收文件夹,原文件不删除,可随时恢复。 - 碰撞保护:回收/备份目录内保留原始相对路径或哈希子目录,同名文件不互相覆盖。
- 环境限制已知:部分沙箱禁止不可逆删除(
safe-delete失败闭合)。此时"永久删除"无法完成, 应回退为"移动至可恢复备份"并向用户说明在真实机器上手动清空。 - 操作前确认制:涉及任何实质性文件改动(读写/移动/生成),先向用户说明计划并等待明确确认。
六、上下文参数(Context Parameters)
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
| scan_root | 否 | 自动探测 | 微信数据根目录;传父级 WeChat Files 可按账号分组,传单账号目录则账号列退化为子目录 |
| include | 否 | 全部纳入 | 逗号扩展名白名单,如 pdf,docx,xlsx |
| exclude | 否 | 无 | 逗号扩展名黑名单 |
| --export-important OUT | 否 | 关 | 导出重要文件到 OUT(需 --confirm) |
| --backup OUT | 否 | 关 | 备份整个扫描根到 OUT(需 --confirm,跳过加密库) |
| --cleanup-duplicates | 否 | 关 | 清理源目录重复文件(需 --confirm) |
| --confirm | 否 | 关 | 确认执行危险操作;缺失则仅预览并跳过 |
| --dry-run | 否 | 关 | 只打印将做的事,不写入 |
| --no-progress | 否 | 关 | 关闭进度输出 |
| out / json | 否 | wechat_scan_report.md/.json | 报告路径 |
export_dedup.py 独立参数:--src(导出集目录)、--backup-dir(冗余备份目录,默认 <src>_冗余副本)。
classify_export.py 独立参数:--src、--out(输出 _export_analysis.json)。
七、边界与不适用范围(Scope Boundaries)
- 能做的:元数据扫描、文件名级分类、哈希去重、复制式导出/备份、移动式去重。
- 不能/不做的:读取聊天内容、解密数据库、恢复已删记录、对文件正文做 OCR/语义解析、 联网上传、在无确认情况下修改源数据、不可逆删除(除非用户在本机显式授权且环境允许)。
- 分类局限:重要/敏感/业务域判定依赖文件名关键字,对无语义命名的文件(如纯编号、客户件号代码) 可能漏判;此类应在报告中标注为"未归类"并建议人工复核,而非臆测。
- 账号维度:以
--root下一级目录作为账号标识;传单账号目录时无法跨账号聚合。
八、捆绑资源(Bundled Resources)
scripts/wechat_analyzer.py— 主分析器:扫描 + 分类 + 敏感提示 + 哈希去重 + 报告 + 导出/备份/清理(全部带--confirm/--dry-run门控)。纯标准库,零依赖。scripts/export_dedup.py— 对"已导出的重要资料"集合做内部二次去重(移动式、可恢复)。scripts/classify_export.py— 对导出集做业务域分类(文件名关键字)+ 内容哈希去重统计, 输出_export_analysis.json,供"梳理关键信息与逻辑结构"使用。references/wechat_data_layout.md— 微信/Weixin 数据目录布局、加密库说明、分类与去重判定口径、 常见陷阱(如微信备份快照 RMFH 容器不可直接分析),供执行时按需加载。
九、集成示例(Integration)
代码助手 / 自动化工作流调用时,典型指令序列:
# 1) 只读扫描(默认安全,零写操作)
python scripts/wechat_analyzer.py --root "E:/xwechat_files/wxid_xxx_4b51" --no-progress
# 2) 预览导出(不执行)
python scripts/wechat_analyzer.py --export-important "D:/export" --dry-run
# 3) 用户确认后执行导出
python scripts/wechat_analyzer.py --export-important "D:/export" --confirm
# 4) 预览并清理源目录重复
python scripts/wechat_analyzer.py --cleanup-duplicates --confirm --dry-run
# 5) 导出集内部二次去重(可恢复)
python scripts/export_dedup.py --src "D:/export"
所有写操作前必须
dry-run预览 +confirm确认;任何不可逆动作在本环境被拦截时, 回退为"移动至可恢复备份"并如实告知用户。
十、自我发布(一键分享)
本技能自带发布流水线 scripts/publish_skill.py(纯标准库、零依赖),可把自身打包为
「技能市场规范发布包」并发布。元数据来自两份来源:
SKILL.md前置:name、description(市场必填)publish.json侧车:version、author、license、tags、displayName、minHostVersion、changelog、category等发布元数据
发布流程(四阶段,每阶段独立错误处理)
- collect — 合并 SKILL.md 前置 + publish.json
- validate — 校验必填字段与格式(名称连字符小写、描述无尖括号、版本语义化、许可证白名单)
- package — 生成
<name>.zip+<name>.manifest.json(含逐文件 size/sha256、包体 sha256) - upload — 可插拔传输:
- 默认本地注册表发布:写入
--registry-dir,产出「可提交」产物(包 + 清单 + 发布历史) - 配置
--endpoint URL --token TOKEN时走 HTTP multipart 上传,按响应分类报错 (NETWORK / AUTH / CLIENT / SERVER)
- 默认本地注册表发布:写入
用法
python scripts/publish_skill.py --skill . [--out _publish] [--registry-dir DIR]
[--endpoint URL --token TOKEN] [--dry-run] [--quiet]
--dry-run:只 collect/validate/package,不上传,用于本地自检。- 结果写入
publish_result.json,含status(PUBLISHED/PACKAGED_LOCALLY/PACKAGED_DRYRUN/FAILED)、失败stage与分类details、产物路径与提示。
全周期发布推送工具(推荐)
若需要完整的「鉴权登录 → 上传 → 版本校验 → 发布 → 状态轮询 → 回滚」生命周期,
以及对命令行/流水线(退出码、--json、--quiet、--config)的支持,请使用
通用工具 skill_publisher.py(位于工作区 E:\Weixin\WeChatDataTool\,对任意技能可用):
python skill_publisher.py login --mock --api-key KEY --api-secret SEC
python skill_publisher.py publish --mock --skill . --out _publish
python skill_publisher.py status <name> <version> --mock
python skill_publisher.py rollback <name> --to <version> --mock
# 对接真实市场:把 --mock 换成 --endpoint <URL> [--token TOK | 先 login]
它内置 http / cli / mock 三种传输后端,支持 dependencies 依赖声明、令牌凭据存储
(权限 600)、结构化错误日志(RotatingFileHandler)与分级退出码,可直接嵌入 CI。
关于远程发布:当前 WorkBuddy 推荐市场(BuiltinMarket)仅通过宿主侧
workbuddy_marketplace_skill暴露search/install,未提供程序化publish接口。 因此脚本默认产出「提交就绪」发布包(你可在宿主的技能管理界面提交),并保留 HTTP 上传通道, 一旦配置可用的市场 endpoint 即可直接推送。远程不可达时不会崩溃,而是返回带原因的失败结果。
微信扫一扫