dsh-plugin-atuowexin:微信本地聊天记录只读摘录(DSH 插件)

前言

在 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 桥接)。

务必注意

  1. 权限:插件以当前 DSH 进程权限运行;读进程内存、读微信数据目录都需要本机授权,安装前应阅读源码与 MIT 许可证,仅在可信环境使用。
  2. 平台:微信本地摘录与密钥流程面向 Windows;非 Windows 主要用于 bundle 安装脚本与 mock 链路自测。
  3. 隐私:导出默认脱敏,但聊天内容本身敏感;工作目录、keymap.json、导出目录应本地保管。
  4. 微信版本:高版本密钥不常驻内存时,需按 README 的 --watch、降级提取一次、chatlog 或已有 keymap 等替代路径规划。
  5. 只读边界:不要期望发消息、控 UI 或云端模型集成;这些不在 v0.5.0 设计内。

结尾

dsh-plugin-atuowexin 把微信本地库的解密、全量摘录、会话隔离和导出收成 DSH 可调用的只读工具链,并用 Python CLI 保持行为单一来源。若要安装或看维护说明,可打开 SkillHub 目录页 与 GitHub 仓库 README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜