前言¶
在 DeepSeek Harness(DSH)里做带上下文的智能体时,常见需求是引用本机微信聊天记录:检索某群、某人的历史消息,再交给模型总结或检索。难点在于数据在 SQLCipher 加密库里、还有 WAL 未合并、以及多会话混在一起容易越权读写。手工解密、导出、再自己写隔离层,步骤多且容易踩坑。
下面介绍的 dsh-plugin-atuowexin(维护者 jcy0chenyuan0,分类 admin-security)把「解密 → 完整摘录 → 会话隔离 → 导出」做成 DSH 插件 + Python 引擎(标准库为主)+ 命令行 CLI,且声明为只读:不发送消息、不注入微信进程、不调用云端模型。SkillHub 目录页:jcy0chenyuan0/dsh-plugin-atuowexin;源码与文档:GitHub。当前包版本 v0.5.0,许可证 MIT。目录简介写明 Windows only(微信本地数据路径与密钥提取面向 Windows 环境)。
这是什么¶
一句话:DSH 侧的只读微信本地聊天摘录插件——用你自己的密钥解密本机库,归一化后按会话隔离,供 Agent 工具查询或导出 Markdown/JSONL 等。
交付形态包括:
- DSH bundle:通过
cordis.patch.yml挂到 profile 的 loader 树(package.json中dsh.bundle.patch指向该文件)。 - Python 引擎:
engine/atuowexin/,CLI 入口python -m atuowexin。 - JS 薄桥:
lib/index.js把 DSH 工具参数转成python -m atuowexin --json …,避免 CLI 与插件行为分叉。
核心功能¶
以下能力均来自项目 README 与 package.json 描述,可按代码路径对照实现。
完整摘录¶
从后端(本机 chatlog、已解密 SQLite、或合成 mock)归一化为 SQLite,并为每个会话生成 messages.jsonl;默认摘全部会话、不限条数,保留原始字段与媒体引用。相关代码:engine/atuowexin/extract.py、backends/。
解密(含 WAL)¶
用 keymap 或单 key 把 SQLCipher 库解成明文;自动合并 -wal 里尚未 checkpoint 的已提交数据,并处理 SQLite 重置后的残留帧。相关代码:engine/atuowexin/sqlcipher.py、ingest.py。
会话隔离¶
三层:目录(conversations/<slug>/)、写入隔离(跨会话写入抛 IsolationError)、查询 API 不提供「查全部会话消息」的形状。slug = 可读名 + md5(会话 id)[:8],改名不换目录。相关代码:isolate.py、store.py。
工作区布局示例:
<workdir>/
├─ atuowexin.db
├─ conversations/
│ ├─ 产品研发群-8a066ec4/
│ │ ├─ messages.jsonl
│ │ └─ profile.json
│ └─ 林达_产品-ac325878/
└─ exports/
导出¶
单会话 jsonl/csv/md;export --all 可出总览、每会话 Markdown 与合订本,支持 --redacted 打码。配置段 privacy 默认对手机号、身份证、银行卡等脱敏。
环境体检¶
doctor 逐项说明缺什么、下一步做什么(含 WAL 待合并、可选依赖)。插件工具 wechat_doctor 对应同一逻辑。
密钥(key ensure / find)¶
在能解密的前提下,推荐 key ensure:先看 keymap 是否已有,缺了才从运行中的微信进程内存只读扫描并 HMAC 校验候选密钥,写入 keymap.json(默认不回显明文)。插件工具 wechat_find_key 默认 ensure=true。
版本限制(README 实测说明):微信 ≥4.1.10 起密钥不再常驻内存;≤4.1.9 可较稳定提取。更高版本可尝试 --watch 抓重新登录瞬间,或使用已有 keymap、chatlog 等后端。
安全提醒:keymap.json 相当于数据库万能钥匙,不要进仓库、云盘或截图传播;项目 .gitignore 已排除 keymap*.json。
明确不做¶
v0.3.0 起从代码移除(非配置开关):发送消息、UI 自动化、微信进程注入、DeepSeek/任何云端模型调用。配置里没有 llm 与 send 段。
安装与启用¶
DSH 生态里插件以 bundle 形式安装;社区目录在 SkillHub,与 DeepSeek / 幻方无官方从属关系,安装前宜自行查看源码与 MIT 许可证。
首次准备 bundle¶
在插件仓库目录执行(README 要求):
Windows:
powershell -ExecutionPolicy Bypass -File .\install.ps1
只检查、不自动装依赖时:
powershell -ExecutionPolicy Bypass -File .\install.ps1 -CheckOnly
macOS/Linux(生成 patch,不含 Windows 微信链路):
node install.mjs
脚本会按当前目录生成 cordis.patch.yml(已 .gitignore),不写死盘符。
装入 DSH profile¶
GUI 路径:设置 → 插件 → 安装 → 本地路径。命令行等价写法:
plugin_manager install_bundle file:<本目录的绝对路径>
装完后在 list_bundles 或插件页可见 dsh-plugin-atuowexin,可整体启用/停用;卸载用 GUI 移除或:
plugin_manager remove_bundle dsh-plugin-atuowexin
说明:pnpm 会把包复制到 <profile>/node_modules/dsh-plugin-atuowexin,patch 里引擎与 lib/index.js 指向工作区绝对路径,改插件或引擎代码重启 DSH 即生效;仅当修改 cordis.patch.yml 挂载参数时需重新 install_bundle。
依赖与环境(Windows 默认自动安装)¶
install.ps1 默认静默安装缺失项;插件加载时还会在后台跑 bootstrap.ps1 -AutoInstall -Quiet(6 小时内不重复)。可设 patch config.autoInstall: false 或环境变量 DSH_BOOTSTRAP=0 关闭。
- Python:优先 DSH 自带运行时,否则 README 示例用
winget install Python.Python.3.12 --scope user。 - 微信:
winget install --id Tencent.WeChat.Universal -e(4.x);需手动登录,插件只读已登录账号本地数据。
配置文件:%USERPROFILE%\.atuowexin\config.json(config init 生成模板)。环境变量包括 ATUOWEXIN_WORKDIR、ATUOWEXIN_BACKEND 等。
DSH 工具清单(只读)¶
README 列出 6 个 DSH 工具:
| 工具 | 作用 |
|---|---|
wechat_doctor |
环境体检 |
wechat_sync |
完整摘录(默认增量);参数含 full、conversation[]、since、limit |
wechat_conversations |
列出会话;query、kind、limit |
wechat_messages |
读单会话消息;conversation 必填,since/until/keyword/limit/offset、redacted |
wechat_export |
导出 jsonl/csv/md;conversation、out、formats、redacted |
wechat_find_key |
密钥 ensure/find;root、out、watch、seconds、sqlcipher_version |
智能体侧应优先用 wechat_conversations 拿会话 id,再用 wechat_messages 限定在单会话内查询,与引擎的隔离设计一致。
典型用法¶
命令行:30 秒链路(PowerShell)¶
先定位 Python(优先 DSH 运行时),设置 PYTHONPATH 指向仓库内 engine:
$py = Get-ChildItem "$env:USERPROFILE\.dsh\dsh-runtimes\*\dependencies\python\python.exe" -ErrorAction SilentlyContinue |
Sort-Object FullName -Descending | Select-Object -First 1 -ExpandProperty FullName
if (-not $py) { $py = (Get-Command python -ErrorAction Stop).Source }
$env:PYTHONUTF8 = "1"
$env:PYTHONPATH = (Join-Path (Get-Location) "engine")
& $py -m atuowexin deps install
& $py -m atuowexin doctor
无微信时用 mock 验证:
& $py -m atuowexin --backend mock sync
& $py -m atuowexin --backend mock conversations
& $py -m atuowexin --backend mock messages --conversation wxid_linda2024 --limit 5
接真实数据(解密含 WAL → 校验 → 写配置 → 全量摘录):
& $py -m atuowexin ingest --src "<...>\db_storage" --keymap <keymap.json 路径>
导出全套 Markdown:
& $py -m atuowexin export --all --out "<导出目录>"
密钥命令¶
python -m atuowexin key ensure --root "<...>\db_storage"
python -m atuowexin key ensure --root "<...>\db_storage" --check-only
python -m atuowexin key find --root "<...>\db_storage"
python -m atuowexin key find --root "<...>\db_storage" --watch --seconds 120
CLI 子命令一览¶
doctor / config / decrypt / ingest / sync / conversations / messages / export / watch / workspaces / deps / key ensure | find
backend 为 auto 时优先级:chatlog → 已解密库 → 合成数据(README 会说明选用原因)。
适用场景与注意¶
适合谁
- 在 DSH 里做 admin-security 类、需要只读引用本机微信历史的 Agent 或工作流。
- 需要会话级隔离,避免一次查询把全部聊天混进上下文。
- 希望同一套逻辑在 CLI 与 DSH 工具间一致(JSON 桥接)。
务必注意
- 权限:插件以当前 DSH 进程权限运行;读进程内存、读微信数据目录都需要本机授权,安装前应阅读源码与 MIT 许可证,仅在可信环境使用。
- 平台:微信本地摘录与密钥流程面向 Windows;非 Windows 主要用于 bundle 安装脚本与 mock 链路自测。
- 隐私:导出默认脱敏,但聊天内容本身敏感;工作目录、
keymap.json、导出目录应本地保管。 - 微信版本:高版本密钥不常驻内存时,需按 README 的
--watch、降级提取一次、chatlog 或已有 keymap 等替代路径规划。 - 只读边界:不要期望发消息、控 UI 或云端模型集成;这些不在 v0.5.0 设计内。
结尾¶
dsh-plugin-atuowexin 把微信本地库的解密、全量摘录、会话隔离和导出收成 DSH 可调用的只读工具链,并用 Python CLI 保持行为单一来源。若要安装或看维护说明,可打开 SkillHub 目录页 与 GitHub 仓库 README。