SuperAPI AI 工具集

imessage-query

通用与其它

查看项目

更新于 10-15 23:41

技能介绍

用途:查询 macOS 的 iMessage SQLite 数据库(~/Library/Messages/chat.db),获取指定联系人的会话历史、跨会话关键词搜索,并把消息整理为带精确时间戳的有出处时间线;也可用于调试正文列为空但实际含可恢复文本的消息。

主要能力:核心是处理 text 列为 NULL 或空、而内容实际存于 attributedBody(NSAttributedString 二进制)的问题。自带脚本 scripts/decode_attributed_body.py 采用三级解码:一级用 pytypedstream 做 Apple typedstream 反序列化(需 pip install pytypedstream);二级为零依赖的多格式二进制长度前缀解析;三级为零依赖的 NSString 标记加长度前缀回退方案。脚本支持按聊天标识、日期范围、发送方筛选,--search 关键词搜索可配合 --context N 展示前后文,--export 导出 NDJSON 供离线分析。内置保护:排除已撤回消息、标记已编辑消息、识别语音与附件、解析内联引用与消息效果、标记 SMS 服务类型、过滤 tapback(associated_message_type = 0)。

使用方式:需 macOS、终端具备“完全磁盘访问”权限;始终以只读方式访问 chat.db。日期需换算:datetime(m.date/1000000000 + 978307200, 'unixepoch', 'localtime'),其中 /1000000000 转秒、加 978307200 为 Apple 纪元偏移,'localtime' 不可省略。常用命令:sqlite3 ~/Library/Messages/chat.db "SELECT c.chat_identifier, c.display_name, COUNT(cmj.message_id) as msg_count FROM chat c JOIN chat_message_join cmj ON c.ROWID = cmj.chat_id GROUP BY c.ROWID ORDER BY msg_count DESC LIMIT 20";解码脚本用法:python3 <skill-path>/scripts/decode_attributed_body.py --chat "+1234567890" --limit 50,或用 --after、--before、--sender them、--search、--context、--export thread.jsonl。

适用场景:拉取某联系人会话、调试空消息、构建带出处的时间线、导出后离线检索。

限制:仅限 macOS;必须授予完全磁盘访问;禁止写入 chat.db;pytypedstream 为可选项,未安装时跳过一级解码;在 zsh 中避免使用 != '',改用 length(m.text) > 0;应先用 --stats 确认聊天标识,关键词搜索建议配合 --context;日期、字段与输出格式等未在资料中给出的细节暂未提供。