-
涵盖 macOS tar AppleDouble 文件污染、psutil Android sys.platform 不兼容、 jiter/maturin cargo 编译竞态与镜像缺口、ffmpeg libc++ 版本不一致、 以及 Kimi Coding Plan key 的非交互配置方法。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Hermes Agent 手机端 ~/.hermes/ 的一次性设备备份,按用户要求原样提交, 含 configs/.env 真实凭证与 memory/memory_graph.db 真实微信消息原文/ 联系人数据。已知风险见 CLAUDE.md 对应记录。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
纯调研,未做任何实际操作(未关 SIP/未装解密工具),记录目录结构、 密文确认、key_info.db 误判等试错过程,供后续评估是否接入 Mac 端 微信聊天记录作为数据源时参考。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
用户从 Pixel 上的 ~/.hermes/ 拷了一份一次性备份到 Mac 核对内容,读完发现 几条对以后开发有用的事实,补进 CLAUDE.md: - phoneuse/android_mcp.py 的真实消费方是第三方框架 Hermes Agent (Nous Research,非本项目自研),驱动模型是 Kimi;memory_graph.db 确认 在线持续增长(1020 person/1255 message/518 vector,对比 TASKS.md 2026-06-16 审计时的 522/1205/510+)。 - Hermes 在 phoneuse 之外长出的 wechat-image-sender skill(2026-06-23 验证通过)已经解决了 wechat_send.py 没做的"发图片"能力(ACTION_SEND Intent + OCR 找联系人,1344x2992 屏幕坐标全程验证),该 skill 早期笔记 里提过想用 Frida bridge 但因为不在 Termux 里跑而放弃——正是这次新增 的 frida_inspect_tools.py 解决的链路,以后可以接上看看。 - wechat-group-digest 绑的两个 cron job 截至备份时都因 hermes-agent 自身的 `env_float` 缺失 bug 报错失败,不是 phoneuse 代码 问题,但别假设它们在正常工作。 - 备份的 manifest.json 声称有 5 个 skill,实际只备份了 3 个,不是完整镜像。 备份目录本身含真实 API key(.env)和真实微信消息/联系人原文 (memory_graph.db、persona.yaml),加进根 .gitignore 的 /hermes_backup_*/ 规则,确保不会被任何后续 git add -A 带进仓库。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
frida_call 此前完全不可达(TASKS.md S3-03):Mac 端没装 frida/frida-tools pip 包。新建 phoneuse/.venv,锁定 frida==17.9.10 + frida-tools==14.8.0 (与设备上跑的 frida-server 17.9.10 匹配,更新版本的 frida-tools 对 frida 有严格 range 依赖会直接报错),新增 start_frida_bridge.sh 一键 adb reverse + 起桥。 新增 frida_inspect_tools.py:inspect_foreground_intent(package) / dump_live_bitmaps(package, max_export) 两个通用 MCP 工具,分别用 Java.choose 枚举目标进程里存活的 Activity(按 hasWindowFocus 识别前台) 和 Bitmap(按 allocationByteCount 排序导出最大的 N 张为 base64 PNG)。 不需要逆向任何具体 App,跟 per-app hook(如微信 sendMessage,已被证实 重度混淆卡死过)明确区分开。 已知限制:frida_bridge.py 现有的进程名子串匹配按 frida 报告的人类可读 标签匹配,不是包名,微信类多进程 App 会匹配到无 UI 的子进程导致静默空 结果——两个新工具已对空结果加诊断提示,根因不在本次改动范围。真机端到 端验证因设备从 adb devices 掉线未完成,TASKS.md 按既有审计格式如实标 记为 [!] 阻塞,未来设备在线后用 Settings/Calculator 之类无隐私 App 补测。 CLAUDE.md 补上 phoneuse 子项目说明——2026-06-23 拍平合并进本仓库后一直 没同步进根文档。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
之前 mitm_proxy.py 一直是手动 nohup 起的,不在任何自启脚本里,进程被杀 或手机重启后需要手动重新启动。现跟 EventServer 一样接入 start_service/ stop_service 框架,用 pid 文件跟踪。 mitm_proxy 必须以 root 跑(~/.hermes/mitm_ca 历史上由 root 创建, 普通 Termux 用户没有写权限,新域名首次访问会因建证书失败退化成不拦截 的透传),stop_all.sh 原来的 stop_service 直接 kill 在非 root 进程上 会因 EPERM 失败,加了 as_root 参数走 su -c kill。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
全局 http_proxy 指向此代理后,Chrome 等遵守系统代理的 app 的 HTTPS 请求 全部失败,而不读系统代理的 Termux 工具表现正常。 - TLS 握手改用 asyncio 原生 loop.start_tls(),去掉手动 dup socket 同步 握手的旧实现:cert 生成 await 让出控制权时,asyncio 事件循环会把刚到的 ClientHello 字节读进自己的缓冲区,导致握手线程永远等不到数据。 - 证书生成加 _cert_lock,避免同一域名并发首次访问时生成的 cert/key 文件 互相踩踏导致 KEY_VALUES_MISMATCH,此后该域名永久失败。 已在设备上实测验证:单域名 + 5 并发首次访问全部通过。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Android SDK platform-tools(adb/fastboot 等)放在仓库根目录, 供 lifelog-recorder/wechat_plain/phoneuse 等子项目共用。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
phoneuse 原是独立 git 仓库(origin: gitlab phoneuse.git),现移除其 内部 .git 元数据,把代码拍平为本仓库的普通文件纳入历史。phoneuse 自身 3 条 commit 历史仍完整保留在 gitlab 远端,未受影响。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
GoalScreen(新建): - 进行中 / 已完成分组;状态切换(✓完成 / 🔄重开);删除; - 新建对话框:目标内容 + 截止日期 + 关联人物下拉 - 删除目标自动解绑其下所有待跟进 PhotologScreen: - ContactsTab 加 showGoals 状态 + GoalScreen 导航 - ContactList 工具栏加「🎯 目标」入口按钮 FollowupsScreen 重写: - 每条待办显示「🎯 目标名」标签 - 点击弹出 GoalPickerDialog,可绑定/解绑目标 PhotologViewModel: - createGoal / updateGoalStatus / deleteGoal / linkFollowupToGoal ChatScreen: - 键盘 ImeAction.Send 支持 + 发送后自动收键盘 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Room 校验时 Expected vs Found 两处不匹配: 1. status 列:migration SQL 写了 DEFAULT 'active',Room 期望 defaultValue=undefined (Entity 未用 @ColumnInfo(defaultValue=...),Room 不把 Kotlin 默认值当 SQL DEFAULT) 2. 多余 CREATE INDEX index_goals_status:@Entity 无 @Index,Room Expected indices=[] 修复:migration 去掉 DEFAULT 子句 + 去掉 CREATE INDEX 这两行。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
P2 #6 Goal 实体(DB v23→v24): - goals 表:id/text/status/deadline/parentGoalId/personId/notes/createdAt/updatedAt - status: active/paused/done/cancelled - parentGoalId 支持树形分解(创业→融资→找VC→约张总) - GoalDao:insert/get/all/observeAll/observeByStatus/roots/children/updateStatus/updateNotes/delete P2 #7 Followup→Goal 挂载: - followups 表加 goalId 列 - FollowupDao 加 updateGoal / observeByGoal / all(一次性查,供 LLM 文本匹配) - FollowupRow 加 goalId 字段 P2 #8 AI Goal 工具(4 个): - create_goal:建目标,支持截止日期/父目标/关联人物 - get_goals:树形展示目标+子目标+已挂待跟进,支持状态过滤 - link_followup_to_goal:按 id 或关键词匹配,批量关联 followup→goal - update_goal_status:标完成/暂停/重启/放弃 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 长按任意消息气泡弹出 DropdownMenu - 复制:全文写入剪贴板 - 修改:仅用户消息,回填到输入框供编辑重发 - 追问:引用消息前 60 字填入输入框(> 引用\n\n 格式) - 选取文字:AlertDialog + SelectionContainer,系统长按选文 - 删除:确认 Dialog 后删单条消息(ChatDao.deleteMessage) - 流式消息(inProgress)长按无响应,防误触 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
get_stale_contacts / get_org_members / link_person_org / find_relevant_persons 漏加到 REACT_SYSTEM_PROMPT,LLM 不知道它们存在导致从不调用。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
P1 #3 关系类型 + 强度: - DB v21→22:relations 加 type(TEXT) + strength(REAL DEFAULT 1.0) - RelationBuilder:strength = min(weight*0.5, 5.0) 初始化 - RelationDao:updateType / updateStrength P1 #4 Organization 一等公民: - 新实体 Organization(id,name,kind,url,notes,createdAt) - 新实体 PersonOrg(id,personId,orgId,role,startDate,endDate) - DB v22→23:建两张表 + 索引 - OrganizationDao / PersonOrgDao(fix: 补 @Delete import 解 MissingType KSP 报错) - Repository 暴露 organizations / personOrgs P1 #5 「谁能帮我」工具: - LifelogTools 新增 get_stale_contacts(失联联系人排序) - LifelogTools 新增 get_org_members(查组织成员) - LifelogTools 新增 link_person_org(建人↔组织关联,组织自动创建) - LifelogTools 新增 find_relevant_persons(goal)(关键词匹配 resume/impression + 关系强度加权) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- ContactRow 右侧显示最近联系时间(今天/昨天/N天前/N月前) - 超过 30 天显示红色「⚠ N月前」警告 - ★ 最近联系人排序改用真实联系时间(微信消息 MAX + 被提到 MAX), 替代原来只记打开档案时间的 lastAccess Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
从微信消息 / 被提到录音段 / 本人录音三者取最近时间戳,替代原来 只记打开时间的 lastAccess,在 ProfileHero 显示「最近联系 X 天前」; 超过 30 天自动附加红色警告标签「⚠ 超过 N 个月未联系」。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- app 名称:Lifelog → Life OS(strings.xml + AndroidManifest 硬编码修正) - 图标:红色关系网络 → 深紫渐变轨道设计(人物居中 + 双同心环 + 卫星节点) - 新增 TimelineScreen:录音/微信/朋友圈/照片四源按时间混排,日期分隔头,来源过滤 chip - 底部导航加「时间轴」tab(第三位:对话/人物/时间轴/录音/相册/设置) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
对比「人生OS」设想文档与 lifelog v0.9 现状,整理差距分析和分层 开发计划:P0 跨源统一时间轴 + 真实最近联系时间;P1 关系类型/强度 衰减 + Organization 一等公民 + 推荐推理;P2 Goal 实体 + Followup 挂载;P3 主动 Agent Worker。核心判断:三样数据结构驱动一切—— 统一时间轴、关系图谱、Goal 实体。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 新增 refresh_person_data 工具(第 ⑲ 个):查询某人前先解密 EnMicroMsg.db 读最新聊天 + 从 SNS 缓存读最新朋友圈,写入 Room - REACT_SYSTEM_PROMPT 指令:查某人聊天/朋友圈/时间线前必须先调此工具 - 恢复 Tavily 默认 key(linter 曾将其清除) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
对话工具模式新增 web_search 工具,调用 Tavily Search API 搜索公开 互联网;ModelConfig 加 tavilyKey/saveTavilyKey;SettingsScreen 加 「全网搜索(Tavily)」配置区。Key 留空时工具返回提示而非报错。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
背景:#C62828→#FF5252 渐变;前景:中央大节点(白圆+红色人物轮廓) + 四方位卫星节点(白圆+小人轮廓)+ 白色主线/次级连线, 构成人际关系网络图。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Adaptive Icon:ic_launcher_background(#1A0A3C→#7C3AED 135° 渐变) + ic_launcher_foreground(白色麦克风胶囊体 + 3条声波纹路 + 弧形支架 + 右上角红色录制圆点)。minSdk=30 只需 mipmap-anydpi-v26,无需 PNG。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
扩展 update_person_profile 工具支持 resume / impression / realName 三个直接列(原来只能改 profileJson 里的 JSON 字段);PersonDao 加 updateResume + updateRealName 两个精确列更新查询。AI 现在可用单一 工具写入所有联系人档案字段,无需多个工具。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Person.profileJson(DB v21)存 MBTI/八字/性格/社媒账号 JSON blob; PersonProfileScreen 简历 tab 新增性格分析卡 + 社媒账号卡(可点击外链) + 「✎ 编辑性格/社媒」入口;EditProfileJsonDialog 13 字段滚动编辑; AI 工具 update_person_profile(字段粒度写入)+ get_person 输出档案字段; ChatViewModel 工具循环改 ReAct 文本协议(TOOL_CALL: {json})兼容所有网关。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> -
## 多服务商 & 任务槽(ModelConfig + SettingsScreen) - 新增 ModelConfig:LlmProvider 注册表(本地/Hermes + 用户自定义远程)+ ModelSlot(VL/EMBED 槽绑定),SettingsScreen 可视化管理 - ChatConfig 加 ChatTargetKind.REMOTE;targets() 动态合并本地+Hermes+用户服务商 - VisionClient / EmbedClient / PhotoVlWorker 统一走 ModelConfig.slotEndpoint 取端点 ## Tool Calling & Agentic Loop(LifelogTools + ChatViewModel) - LifelogTools:6 个本地工具(search_transcripts/persons/photos/timeline/summaries/followups),OpenAI function schema + 端上 Room 执行 - ChatViewModel:agenticLoop 检测 tool_calls → 调 LifelogTools.execute() → tool role 追回 → 多轮直到无 tool call ## 语义搜图 embed 落地(Pixel 设备侧 + 补算) - 下载 bge-small-zh-v1.5-q8_0.gguf(25MB,512维中文)到 Pixel ~/models/ - llama-swap config.yaml 新增 "embed" 条目(--embedding --pooling mean,ttl 600) - 补算向量:PhotoDao.withCaptionNoEmbedding/updateCaptionEmbedding + PhotologViewModel.backfillCaptionEmbeddings() - AlbumTab ProgressHeader 加「🔢 补算语义向量」按钮(有 caption 无 embedding 时显示,带进度) ## 文档 - HANDOFF.md:P0/P1/P2 全部打 ✅,补 v0.9 已完成列表 - CLAUDE.md:v0.8→v0.9,⭐待做项更新为已完成 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
4922 联系人里绝大多数是群友(共群非好友),真好友只 ~214。区分依据(真机验证): - 好友 = rcontact.type & 1 = 1 且 deleteFlag = 0(有备注的人无一 type=4,佐证 type=4=群友) - persons.wechatFriend 列(迁移 19→20,true=好友/false=群友/null=未知) - WeChatContactsImporter 加 isFriend 计算 + friendsOnly 参数;img_flag 改 LEFT JOIN (好友头像多不在 img_flag,INNER JOIN 会漏,改 LEFT 后头像可空、人照导) - WeChatEnrollWorker 落 wechatFriend - 通讯录:导入分「💬微信好友(只好友)」/「+群友(全部)」;过滤 chip 好友/群友/全部(默认好友); 每行标签 微信好友/群友/微信 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
最后一块去 Mac 依赖——联系人/头像也端上读: - WeChatDb:共享的 EnMicroMsg.db 端上解密(su --mount-master + 算 key + SQLCipher 打开), WeChatChatImporter 重构成复用它(聊天逻辑不变) - WeChatContactsImporter:解密读 rcontact ⨝ img_flag 真人筛选(移植 Mac extract-wechat-avatars.py) → 产出 wx_enroll/enroll.json + OkHttp 12 线程并发下高清头像(img_flag.reserved1, wx.qlogo.cn 公开) → 触发现有 WeChatEnrollWorker 做 Person upsert + 端上人脸锚点 - 通讯录选人页「💬 微信导入」改成端上 importWeChatContactsLocal(不再依赖 Mac 推 enroll) - 通讯录加「全选/取消全选(N)」批量纳入管理(作用于当前过滤列表,可先搜再全选) - 真机验证:读到 4922 联系人 + 4818 头像 注:当前导入含群友(rcontact.type=4),好友(type&1=1)区分 + 导入筛选下一步做。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- key 纯端上推导 MD5("1234567890ABCDEF"+uin)[:7](imei 用默认值,uin 从 shared_prefs) - SQLCipher 参数 cipher_compatibility=1/page_size=1024 + postKey hook + 候选 key 试开 - su 拷库 → 读 message 表 type=1 → wechat_messages;单人/批量接线 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> -
微信聊天本地化——EnMicroMsg.db 是 SQLCipher 加密的,过去靠 Mac 解密推 wx_enroll,现在端上直接读: - key 纯端上可推导(真机验证,无需 Frida):MD5("1234567890ABCDEF" + uin)[:7] imei 用微信默认值(现代 Android 读不到真 IMEI 的回退,稳定);uin 从 shared_prefs last_login_uin 读 - WeChatChatImporter:su --mount-master 拷 EnMicroMsg.db + 读 uin → 算 key → SQLCipher 打开 (cipher_compatibility=1, cipher_page_size=1024) → 读 message 表 type=1 文本,按 talker 取目标 wxid - 依赖:net.zetetic:android-database-sqlcipher:4.5.4 - 接线:单人「⬇下载图片」顺带解密该人聊天;「🔄更新」一次性解密整库读所有 wxid(避免逐人重复解密) 聊天写 wechat_messages(按 talker 先清再灌,幂等);档案页「聊天」tab 直接显示 - 真机验证:读到与某联系人的聊天记录 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> -
人物档案页: - 整页改一个 LazyColumn:hero(头像/简介)+搜索框 当列表项随滚动滑走,TabRow stickyHeader 吸顶 → 内容区拿到整屏、能全屏滑(原来 hero 固定 top,内容只剩一小条) - 「简历」做成第一个 tab(真名/简历/AI印象),从 hero 的「关于卡」挪出 → hero 变矮 - 照片网格改 LazyColumn 内手动 3 列行(避免 lazy 嵌套同向滚动) 通讯录页: - 搜索框右边「🔄 更新」:批量更新所有有微信的管理人物——逐个 downloadWeChatCore(头像+朋友圈) + 全局重建 提及/关系/待办 + 催全相册识别。不碰录音;聊天暂不本地更新(EnMicroMsg 加密) - downloadWeChatImages 抽出 downloadWeChatCore 复用 并带入并行的端上 CRM(话题 TopicExtractor/TopicsScreen 等):与本功能在 Daos/迁移链耦合,整树可编译。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
端上 CRM #3 关系分析的「待跟进」部分(社群发现/关系链/followups 表已随 2a6f991 入库)。 - FollowupExtractor:取最近 80 段、切 25 条/窗(≤4 窗控耗时),喂本地 4B 抽行式待办, 解析去 bullet/编号/「无」,词典子串关联 Person;写 followups(去重键 sourceTs+text) - FollowupsScreen + 人物 tab「✅ 待办」入口:列表(完成勾选/删除) + 右上「扫描」 - PhotologViewModel scanFollowups/setFollowupDone/deleteFollowup;Repository 接 followups dao 真机验证:扫描 4 窗 → 15 条真实待办(如「明天每人汇报个人规划」「给高宇提要求放开平台功能」), 人物关联命中(高宇),可勾选/删除,无错。需 llama-swap(8080) 在跑。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- §七 踩坑清单加两行:app 申请的 su 默认在本 app 挂载命名空间(读不到别 app /data)→ --mount-master; app-su 的 PATH 为空(ls/cp/find 全失败)→ export PATH - §四 加「微信朋友圈:端上 root 直读」小节:SnsMicroMsg.db(明文)+sns 缓存图(snsb_)路径、 WeChatSnsImporter 读取流程(media id 子串归属/正文提取)、按条存 moments/<wxid>/ 不进相册、幂等 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
朋友圈/头像全部端上化,不经 Mac: - WeChatSnsImporter:su --mount-master 读明文 SnsMicroMsg.db + sns 缓存大图(snsb_*)。 坑:app 申请的 su 默认在本 app 挂载命名空间(看不到微信数据)→ 必须 --mount-master 切全局; 且 app-su 的 PATH 为空 → 脚本须 export PATH。按「条」归属:content 子串匹配 media id。 - 人物档案「⬇下载图片」:头像→照片(归属脸,进「照片」tab);朋友圈**按条**存 moments/<wxid>/<ms>_<i>.jpg + 文字进 moments 表;朋友圈图不进相册。幂等(getByPath/clearUser/ 目录清空)+清理旧版误导入的 moment_ 照片。 - 朋友圈 tab 改成微信式「时间+正文+九宫格图」(MomentRow 按 createTime glob 回该条的图)。 - 相册加「人物文件夹(默认)/所有图片」两 tab(observePersonPhotoCounts,复用 faces.personId)。 并带入并行进行中的端上 CRM(人↔人共现 Relation/社群):AppDatabase v17 + Entities/Daos/ CommunitiesScreen/crm.RelationAnalysis —— 与本功能在 Daos/迁移链上耦合,无法干净拆分,整树可编译。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
端上 CRM #1:把录音会话里同时出现的人连成关系图基础。 - 新表 relations(personA<personB, weight, lastTs),Room v16→17 - RelationBuilder:按 5min 静音切「会话」→ 会话内「在场」(声纹→已绑 Person) ∪「被提到」(mentions) 两两配对成无向共现边,weight=共现会话数;全量重建(接在 mentions 重扫之后) - PersonProfileScreen 加「相关」tab(共现的人,按次数排,点击跳该人档案);tab 增至 6 个改 ScrollableTabRow - 加 onOpenPerson 人→人导航(复用 profilePersonId) 真机验证:迁移成功不清库;rescan 后 RelationBuilder rebuild 1668 段→0 边(仅 1 人 managed,正确), 「相关」tab 渲染空状态无崩溃。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
主体(回链 lemonPCRM 方向,端上版): - Mention 实体 + mentions 表(迁移 15→16):某段转写文本提到了某 Person(词典反查名字/别名命中) - crm/MentionExtractor + RelationBuilder:从转写抽人名→建 (segmentId,personId) 提及边 - PhotologViewModel.rescanMentions:按 managed 人物词典全量重扫;档案页「被提到」展示 - BlockProcessor / Daos / Repository 相应接线 同链顺带(迁移 14→15,与 15→16 同属一条链,必须同提交才自洽): - 相册删除墓碑 DeletedGallery:app 内删的相册照片记 mediaId,全相册重扫不再导回;导入源删除时删私有副本 - 照片详情显示文件名 + 存储地址(gallery 从 MediaStore 反查真实名/相对路径)+ 来源/状态/模型/#id,可长按复制 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
端上 CRM #5:从转写文本反查提到了哪些已知联系人,不依赖 LLM。 - 新表 mentions(segmentId, personId, matchedText),Room v15→16 - MentionExtractor/MentionScanner:拿 managed 人物的 名字/真名/昵称/备注/微信号(≥2字) 当词典, 在 Transcript.text 里扫子串命中;零幻觉、可离线 backfill - BlockProcessor 实时挂钩:转写出文字后顺手扫提及入库(词典每块预载一次) - PhotologViewModel.rescanMentions:全量重扫按钮 - PersonProfileScreen 加「被提到」tab(别人录音里提到 TA 的段,按声纹=谁说的 展示,可播放可搜) 真机验证:迁移成功不清库;rescan 1613 转写×1人→0 提及(仅自己 managed,名字不出现在转写里,正确)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- 主线改为 lifelog-recorder(纯端上 Personal CRM),lemonPCRM(server/frontend/packages) 标已废弃, 删掉 CLAUDE.md 里所有服务端章节(ACP/Master-Sub-Agent/GraphStore/server 微信链路) - 加「App 即 Personal CRM:与旧 lemonPCRM 能力对比」+ 6 项差距 + 「Transcript→内部 Person」方向 - HANDOFF §五:存储 TTL/设置页标✅;「回链 lemonPCRM」→「内部 Transcript→Person」; 新增「端上 CRM 补齐 TODO」P0–P3 清单 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- 项目表 + 节标题 v0.7→v0.8 - 架构骨架加「相册 tab = 全相册自动索引(Tier-0 人脸/Tier-1 VL + 搜图)」 - vision/ 文件清单更新(PhotoWorker→PhotoFaceWorker/PhotoVlWorker, 补 PhotoVlState/GalleryScanner/EmbedClient) - 新增「全相册自动索引/分层管线(v0.8)」段;✅ 列表补 存储 TTL + v0.8; 剩余摘要换成「语义搜图落地(待配 embed 模型)」 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
把整个手机相册自动跑成可搜索内容(v0.8)。本地 VL ~30-40s/张, 全量是按天计的长任务 → 分层:快的全量先铺,慢的 VL 排队慢慢补。 - GalleryScanner:MediaStore 游标扫全量,content:// uri 原地登记不拷文件, mediaId 去重增量;photos 加 source/mediaId/scanState/captionEmbedding(Room v14) - Tier-0 PhotoFaceWorker:扫描 + ML Kit 人脸 + 512d emb + GPS,秒级全量铺, battery-not-low;Tier-1 PhotoVlWorker:VL 场景描述 + caption 语义向量, 优先级队列(有人脸>近期),充电时跑,尊重暂停标志 - 搜图:关键词(caption+人名 LIKE) + 语义(caption 向量余弦,EmbedClient 打 llama-swap embed 模型;未配置优雅降级) - VL 控制(PhotoVlState):运行中「暂停/停止」、空闲「立即理解/继续」切换, 正在处理的格子转圈,格子角标 待索引/待理解/已描述 - 修 ImageUtil.decodeUri:bounds 预解码 decodeStream 在 inJustDecodeBounds 下按设计返回 null,原 `?:` 误判致每张提前 return(人脸全跑空) 迁移 13→14 纯增量:老的已处理照片直接标 scanState=2 不重跑。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>