Skip to main content
Glama

WeChat Archive for DeepSeek Harness

English | 简体中文

Локально-ориентированный плагин архивации WeChat для macOS с принципом fail-closed. Он подключает четыре ограниченные операции к DeepSeek Harness — диагностику, проверку состояния, синхронизацию и верификацию — и включает Agent Skill, а также опциональный macOS LaunchAgent для запусков без участия человека.

Версия 0.1.0 может сканировать все таблицы Msg_* во всех обнаруженных сегментах message_N.db из непротиворечивого снапшота базы данных Mac WeChat с контрольной точкой. Она хранит воспроизводимые, проверяемые JSONL-дельты и сохраняет локально доступные контейнеры изображений, MP4-файлы и голосовые BLOB-объекты как приватные объекты с адресацией по содержимому.

Статус релиза: реализация и синтетические тесты безопасности завершены, но реальная синхронизация чатов не выполнялась (NOT_RUN) при подготовке этого релиза. Синхронизация остаётся отключённой по умолчанию, и ни один LaunchAgent не устанавливается автоматически.

Mac WeChat source
       |
       v
deterministic Python core ----> private state + JSONL deltas + media objects
       |                                      |
       +---- stdio MCP ---- DeepSeek Harness  +---- replay/hash verification
       |
       +---- one-shot scheduler ---- optional macOS LaunchAgent

Что предоставляется

Интерфейс

Операция

Записывает архивные данные?

MCP

wechat_doctor

Нет — проверяет приложение, источник, WAL, секрет и права доступа

MCP

wechat_status

Нет — сообщает ограниченные операционные метаданные

MCP

wechat_sync

Да — требует и явного согласия на сервере, и confirm=true

MCP

wechat_verify

Нет — воспроизводит историю сообщений и проверяет хэши и покрытие

Agent Skill

wechat-archive

Проводит модель через обязательный рабочий процесс безопасности

Планировщик

sync, а затем verify

Только после того, как человек установит LaunchAgent

Результаты MCP предоставляют информацию о статусе, количестве, покрытии и целостности. Они не раскрывают имена контактов, идентификаторы учётных записей, содержимое сообщений, секреты или приватные пути к базам данных.

Related MCP server: WeChat MCP Server

Границы целостности и конфиденциальности

  • Аргументы инструментов не могут выбрать учётную запись, путь в файловой системе, SQL-запрос, исполняемый файл или секрет.

  • Плагин никогда не перехватывает ключ, не подключается к LLDB, не переподписывает и не заменяет WeChat, не завершает приложение и не игнорирует WAL.

  • Синхронизация завершается ошибкой и не публикует новый снимок, если WeChat запущен, WAL содержит транзакционные кадры или имеет повреждённый короткий заголовок, приложение не имеет закреплённой официальной подписи, секрет недействителен или источник изменяется во время сбора данных.

  • Для каждой зашифрованной базы данных ключ выводится независимо, и она проверяется через HMAC. Расшифрованные промежуточные файлы являются приватными, проверяются с помощью SQLite quick_check и удаляются после завершения работы.

  • Неизменяемые JSONL-дельты сбрасываются на диск (fsync) до фиксации транзакции индекса. Верификация воспроизводит полную историю и хэширует каждый зарегистрированный медиа-объект, включая исторические.

  • Секреты должны храниться в связке ключей macOS (Keychain). Им не место в параметрах инструментов, аргументах команд, переменных окружения, журналах, конфигурации в Git или файлах релиза.

Что означает SOURCE_FAITHFUL_V1

Изображения всегда сохраняют свои сырые байты .dat. Вариант декодированного изображения записывается только тогда, когда его подтверждает надёжная сигнатура файла или одно однозначное однобайтовое XOR-преобразование. Видео должны содержать сигнатуру MP4 ftyp. Голосовые BLOB-объекты сохраняются без заявлений о совместимости с транскрипцией или воспроизведением.

Извлечение эмодзи, обычные вложения, медиа, не загруженные на этот Mac, и некоторые приватные контейнеры остаются нерешёнными. Поэтому публичный результат намеренно содержит media_complete=false. SOURCE_FAITHFUL_V1 означает, что локально доступные исходные байты были сохранены и проверены; это не означает полностью декодированный или воспроизводимый мультимодальный экспорт.

Аналогично, «полнота» может описывать только один проверенный, непротиворечивый снимок базы данных Mac. Она никогда не включает удалённую историю, историю, существующую только в облаке или только на телефоне, или контент, который WeChat никогда не хранил локально.

Требования

  • macOS

  • Python 3.10 или новее

  • Node.js 24 или новее

  • pnpm 11

  • uv

  • libzstd для декодирования полезной нагрузки сообщений, сжатой zstd; без него исходные сжатые байты сохраняются в формате base64

  • Официальная установка WeChat и доступ к вашим собственным локальным данным учётной записи

Используйте этот проект только с данными, которые вы уполномочены архивировать. Архив чатов содержит личную информацию других людей, даже если он относится к вашей собственной учётной записи; храните архив локально, с контролем доступа и вне Git.

Установка ядра и MCP-сервера

Из рабочей копии этого репозитория:

cd /path/to/wechat-archive
PROJECT_DIR="$(pwd -P)"
CONFIG_PATH="${HOME}/Library/Application Support/WeChatArchive/config.json"

uv venv
uv pip install -e '.[test]'
pnpm --dir mcp-server install --frozen-lockfile

mkdir -p "$(dirname "$CONFIG_PATH")"
chmod 700 "$(dirname "$CONFIG_PATH")"
cp config.example.json "$CONFIG_PATH"
chmod 600 "$CONFIG_PATH"

Отредактируйте приватную конфигурацию, используя config.example.json в качестве схемы. Оба пути source.root и archive.root должны быть абсолютными, каноническими и раздельными. Корень архива не должен находиться внутри дерева исходников. В производственной конфигурации следует использовать провайдера Keychain. Провайдер file существует только для миграции из существующего обычного файла, принадлежащего пользователю, с режимом 0600; символические ссылки отклоняются.

Получение ключа и восстановление приложения намеренно находятся вне этого плагина. Следуйте контролируемой границе, описанной в docs/BOOTSTRAP.md, а не помещайте ключ в историю оболочки и не просите агента модифицировать WeChat.

Сначала запустите предварительную проверку только для чтения:

.venv/bin/wechat-archive --config "$CONFIG_PATH" doctor

Команда записывает в stdout ровно один JSON-объект wechat-archive.command/v1. Только READY разрешает отдельно подтверждённую синхронизацию. См. Архитектура и целостность для описания модели состояний.

Установка в DeepSeek Harness

Инсталлятор работает в режиме пробного запуска (dry-run), если не указан --install:

python3 scripts/install_dsh.py
python3 scripts/install_dsh.py --install

Он управляет только одним помеченным блоком в профиле Harness и одной символической ссылкой ~/.dsh/skills/wechat-archive на эту рабочую копию. Он не изменяет исходный checkout DeepSeek Harness и не перезаписывает посторонний Skill. Перед изменением текущего профиля он создаёт одну резервную копию с режимом 0600.

Harness предоставляет следующие имена:

  • mcp__wechat__wechat_doctor

  • mcp__wechat__wechat_status

  • mcp__wechat__wechat_sync

  • mcp__wechat__wechat_verify

Включённая безопасная накладка задаёт WECHAT_ARCHIVE_ALLOW_SYNC=0. Поэтому установка включает диагностику только для чтения и проверку состояния, но не синхронизацию. После прохождения всех проверок на реальной машине оператор должен явно установить согласие сервера в 1, перезапустить процесс MCP и по-прежнему вызывать wechat_sync с confirm=true.

Удаление также по умолчанию выполняется в режиме пробного запуска:

python3 scripts/uninstall_dsh.py
python3 scripts/uninstall_dsh.py --uninstall

Необязательная периодичесая синхронизация

Планируемый сбор данных вызывает детерминированное ядро напрямую; он не полагается на вкладку браузера, языковую модelь или заущенный разговор в Harness. Следующие команды только отображают и проверяют ежедневный LaunchAgent на 03:15. Они не устанавливают его:

REVIEW_DIR="${TMPDIR:-/tmp}/wechat-archive-review"
REVIEW_PLIST="${REVIEW_DIR}/local.wechat-archive.sync.plist"
mkdir -p "$REVIEW_DIR"

python3 scripts/render_launchagent.py \
  --project-root "$PROJECT_DIR" \
  --python "$PROJECT_DIR/.venv/bin/python" \
  --config "$CONFIG_PATH" \
  --hour 3 --minute 15 \
  --sync-timeout-seconds 1800 \
  --verify-timeout-seconds 7200 \
  --output "$REVIEW_PLIST"
plutil -lint "$REVIEW_PLIST"
python3 scripts/install_launchagent.py --plist "$REVIEW_PLIST"

Последняя команда по-прежнему является пробным запуском. Только следующее явное действие устанавливает и инициализирует задание:

python3 scripts/install_launchagent.py --plist "$REVIEW_PLIST" --install

Не устанавливайте его, пока doctor не сообщит READY и пока подтверждённая вручную последовательность sync, за которой следует verify, не выполнится успешно. Каждый запланированный запуск сначала выполняет синхронизацию, а затем полную верификацию. Если WeChat активен или WAL не пуст, запуск безопасно завершается и может повториться в следующее запланированное время.

Синхронизация и полная верификация имеют отдельные ограниченные тайм-ауты: по умолчанию 30 минут и два часа, настраиваемые до восьми часов. Полная верификация читает все исторические медиа-объекты, поэтому выбирайте её тайм-аут исходя из размера архива.

Верификация и проверки релиза

Все тесты репозитория используют синтетические тестовые данные. Не заменяйте их реальными данными чатов.

.venv/bin/python -m pytest -q
pnpm --dir mcp-server test
python3 scripts/check_manifest.py --scan-content
python3 scripts/build_release.py \
  --output "${TMPDIR:-/tmp}/wechat-archive-0.1.0.tar.gz"

Успешное завершение процесса не является достаточным доказательством реального архива. Условие приёмки — SYNCED или NO_CHANGE, непосредственно за которым следует VERIFIED, при ожидаемом покрытии источника. См. полный список критериев приёмки.

Лицензия и сторонние материалы

Код проекта выпущен под лицензией MIT. Проверенные или указанные апстрим-проекты и их лицензии перечислены в THIRD_PARTY_NOTICES.md. Реальные чаты, базы данных, ключи, медиа, журналы, локальная конфигурация и исторические архивы передачи никогда не являются частью релиза.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to local Beeper message history on macOS, enabling users to search conversations, read messages, and list recent chats through natural language queries. Supports both SQLite and IndexedDB storage formats with privacy-focused local-only operation.
    1
  • A
    license
    A
    quality
    F
    maintenance
    Enables Claude Code to read encrypted WeChat chat history from local database, search messages, view sessions and contacts.
    4
    18
    Do What The F*ck You Want To Public
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude to access and search local messages and contacts across multiple platforms (iMessage, Discord, Gmail, Slack) via a local-first datastore, ensuring data never leaves the Mac.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read, search, and send iMessages, manage contacts, and access attachments on macOS.
    16
    MIT

View all related MCP servers

Related MCP Connectors

  • Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.

  • Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.

  • Permission boundary receipts for ChatGPT agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BENZEMA216/wechat-archive-harness'

If you have feedback or need assistance with the MCP directory API, please join our Discord server