补上自己发出的那半边对话

在 v0.2 前几个版本里,鸿枢只管采集手机收到的短信(direction='in')。平时收验证码看不出毛病,但偶尔用副卡给快递员或客服回了一条短信,打开网页端一看,会话列表里只有对方说的话,完全没有我回复的内容,上下文跟断了片一样。

2026 年 10 月 19 日(v0.2.0-alpha.11,PR #74 ~ #80),我把本机发出的短信(direction='out')也纳入了实时采集与历史回填管线。网页端和安卓端的会话详情页同步改成了标准聊天布局——对方发来的消息居左,本机发出的回复以本人视角居右显示气泡,一段对话终于有来有回了。

为什么通讯录坚持做“纯本地、零上传”?

会话列表里光显示一串冷冰冰的手机号,每次看都得在脑子里对号入座是谁。但要把通讯录接进来,我心里有一条死线:亲友和客户的真实姓名与电话对应关系属于极度敏感隐私,绝对不能上传到服务端数据库,更不能顺着提示词发给外部 AI 模型。

于是在 10 月 20 日(PR #82,Commit a2ab158),我做了一套纯本地、零上传的联系人匹配机制:

  • Android 客户端:在本地读取系统通讯录权限后,直接在手机内存里把号码映射成联系人姓名和头像。
  • Web 网页端:调用浏览器的 Contact Picker API 或导入本地通讯录缓存,所有姓名替换完全在浏览器本地完成。

中枢的 MySQL 数据库里自始至终只存原始手机号,连半个联系人名字都不会落盘。

跨设备通话记录四连发

解决了短信和通讯录,最后还剩一个日常痛点:备用机放在家里静音充电,有人打电话过来没接到,我人在外面根本不知道。

10 月 25 日(PR #91 ~ #94,直至 v0.2.0-alpha.22),我一口气四连发上线了跨设备通话记录同步。备用机上的呼入、呼出、未接来电以及拒接记录会实时同步到中枢,配合前面做好的本地联系人渲染,主力机和网页端一眼就能看清是谁在几点给哪张副卡打过电话、响了多久,多机多卡的日常通信总算再无死角。