前言¶
在 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。