-
skills/wechat-voice-sender/SKILL.md: - when to use、核心工具调用示例、已知联系人 wxid 表 - 明确告知 Hermes:不要自己实现 edge-tts/silk-wasm,调工具即可 - 错误处理表、安全约束 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 去掉 send_voice_tts_via_hook 里多余的 staging 步骤: 生成 SILK 后直接把临时路径传给 send_voice_via_hook, 由它统一做 cp → wechat_cache + broadcast(避免 cp A→A 报错) - _tts_to_silk: ffmpeg/node 路径检测增加 Termux 全路径候选, root su shell 下 PATH 不含 Termux bin 时也能找到 验证:device 侧 Python 直调 send_voice_tts_via_hook → filehelper 5620ms 语音 OK Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
silk-wasm 搜索顺序调整为 Termux 全局路径优先, 与 node.js 在 Termux 下 NODE_PATH 行为一致。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
wechat_hook_send.py: - 新增 _tts_to_silk(): edge-tts → ffmpeg → silk-wasm 完整 TTS 管线 支持 on-device (Termux) 和 off-device (Mac adb push) 两种运行模式 - 新增 send_voice_tts_via_hook(): 文字 → 语音一步到位, 自动处理 TTS/SILK 编码+WeChat cache 暂存+broadcast 发送 android_mcp.py: - 新增 send_wechat_voice_tts MCP 工具(Hermes 直接传文字即可发语音) docstring 明确写明:不要自己实现 SILK,调这个工具就行 docs/wechat-voice-send-guide.md (新): - Hermes 调用说明:正确姿势 / 声音选项 / 依赖安装 / 常见错误 / 技术背景 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
**WeChatHook.java — 语音发送四个关键 fix**: - 跳过 H():DB INSERT 在 r0 构造器内已完成,H() 只触发 CDN 上传, 服务端拒绝后会删消息;skip H 彻底解决消息消失问题 - status=4 双写:ContentValues + f9.r1(4) 内存字段同时写, 防止 K(0) 回调再次 convertTo 时读到 status=1 覆盖回转圈 - sDatabaseF9 精准捕获:在 convertTo() hook 里捕获入库的 f9 对象 放入 r0.i,修复旧逻辑取第三个 f9(内容为空)导致点击崩溃 - K(0) 而非 I(0):onSceneEnd code=0 时调成功路径 K 而非失败路径 I, 修复红色感叹号问题 - fromusername 兜底:sMyWxid 为 null 时回退硬编码 wxid **tts_voice_send.sh(新)**: 一行命令 TTS 发语音:edge-tts → ffmpeg(16kHz PCM) → silk-wasm(SILK V3) → adb push → SEND_VOICE_INTERNAL **wechat_send.sh(新)**:统一 text / image / voice 三种发送模式的 CLI Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Hermes 重编 APK 时连踩三坑导致平板登录失效: 1. 用 XposedBridgeApi.jar 而非 LSPosed legacy JAR 编译 → 所有 hook NoSuchMethodError 2. xposed_init 放在 APK 根目录而非 assets/ → daemon 验证失败每次重启自动删模块 DB 注册 3. 换了 keystore → INSTALL_FAILED_UPDATE_INCOMPATIBLE 修复:从 wechathook_v2_signed.apk(正确 legacy JAR 编译)提取 DEX 复用,重打包含正确 assets/xposed_init,debug.keystore 签名,fix_lspd_final.py 重建 DB 注册。 2026-07-04 重启后验证平板登录恢复正常,所有 tablet hook 日志无 NoSuchMethodError。 新增文件: - wechathook_v2_signed.apk: 黄金基准 APK(legacy JAR 编译,DEX 可复用) - do_not_break.md: 给 Hermes 的禁止事项清单 - hermes_task.md: 已在顶部加 DO NOT BREAK 警告 banner - analyze_wechathook.py: DEX 字节码分析工具(Tinker patch) - rebuild_wechathook.sh / update_wechathook_db.sh: Mac 侧重建脚本 - termux_build.sh: Hermes 的手机侧 build script(有编译 JAR bug,留作参考) - wechat_send_internal/: Hermes 对 WeChat 内部发送 API 的研究产出(进行中) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
目标设备:Pixel 10 Pro Fold / Android 16 / WeChat 8.0.74 - WeChatHook.java:双保险策略 1. hook bk.A()/bk.B() 返回 true(静态方法,AOT 不内联则有效) 2. hook Activity.onResume() 保底:框架跨 APK 调用无法被 WeChat AOT devirtualize,必然触发,直接强制平板按钮(LoginHistoryUI.N) VISIBLE - rebuild.sh / update_db.sh:一键编译部署脚本 - LESSONS.md:逆向过程、AOT devirtualize 坑、XposedHelpers.newInstance 子类类型陷阱等经验总结 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Hook.java v3.1 (315 行): - body 捕获:okio.Buffer 读取 POST/PUT body(截断 2000 字符) - Proxy poller(后台线程,1s 轮询 /xhs_proxy/pending): executeOkHttp() 在 XHS 进程内用 OkHttpClient 执行代理请求, 自动经过 XHS 拦截器签名,结果 POST /xhs_proxy/result - 手写 JSON 解析器(无外部依赖) - 保留 /xhs_params 转发(每条 edith 请求实时上报) event_server.py(Hermes 编写): - proxy_requests 表(pending→ok/error 状态机) - POST /xhs_proxy — Hermes 下发代理请求 - GET /xhs_proxy/pending — Hook 轮询取下一个任务 - POST /xhs_proxy/result — Hook 上报执行结果 - GET /xhs_proxy/result/{id} — Hermes 轮询取结果 - DELETE /xhs_proxy/{id} — 清理完成的任务 架构:Hermes → event_server → Hook(XHS进程内OkHttp签名) → event_server → Hermes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> -
- STATUS.md: file index updated to v3 (DEX=6328B, HTTP forwarding), add ~/.hermes/event_bus/event_server.py to index - update_xhshook_db.sh: phase 3 — after checkpoint, verify scope table has row for current mid; auto-insert if missing (mid changes after every reinstall, missing scope → lspd skips injection silently) - .gitignore: ignore *.idsig (apksigner side-car, not useful in git) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- event_server.py: POST /xhs_params receives forwarded XHS edith requests from xhshook v3 (Hook.java background thread), stores as type='xhs_request' in events DB; GET /xhs_params returns latest N captures for Hermes to query - Pushed to device ~/.hermes/event_bus/event_server.py - STATUS.md: reflect v3 state (mid=4, DEX=6328B, HTTP forwarding live), mark task C done, add Hermes startup instructions for event_server + xhs_params query Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Hook.java v3:在现有 logcat 日志基础上,后台线程 POST 每条 edith.xiaohongshu.com 请求(method/url/全量 headers)到 Hermes event_server(127.0.0.1:8765/xhs_params)。 Hermes server 未运行时静默失败,logcat 捕获不受影响。 rebuild_xhshook.sh:d8 步骤改用 find 通配所有 .class 文件, 避免新增匿名类时漏掉(之前写死 Hook$1.class)。 update_xhshook_db.sh:两阶段更新策略 - Phase 1:Python in-place UPDATE + commit(不做 checkpoint, lspd 持有写锁时 checkpoint 会 OperationalError) - Phase 2:pull DB+WAL → Mac 本地 checkpoint → push 干净主文件 → 删设备端 WAL/SHM,确保重启后 DB 正确 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
- STATUS.md:更新至 2026-06-30 00:33 验证通过状态,新增捕获到的额外 签名 header(x-mini-sig/mua/s1/gid、x-legacy-sid、shield), 补充 curl HTTP 200 复现验证结果,记录 lspd crash 恢复流程 - update_xhshook_db.sh:改用 Termux Python 原地 UPDATE + wal_checkpoint 代替 cp/adb push(后者改变 inode,lspd FileObserver 监听旧 inode 不刷缓存) - STATUS.md "已知不行的路线" 新增 adb push DB 和手动重启 lspd 两条陷阱 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
修复 LSPosed(JingMatrix/Vector fork)在 Android 16 上 zygote64 崩溃问题, 并完成 xhshook Xposed 模块注入 XHS(com.xingin.xhs),实现 edith.xiaohongshu.com xy-common-params header 的实时拦截。 A16 崩溃根因:NDK 26 compile-time sizeof(JNINativeInterface) 不包含 Android 16 ART 新增的函数指针,memcpy 截断导致垃圾指针 → zygote 崩溃。 修复:从 env->functions->reserved0 读运行期实际大小,heap-alloc 后 memcpy。 其他修复: - service.sh 去掉 Android toybox 不支持的 --propagation slave flag - daemon 入口类名 org.lsposed.lspd.Main → org.matrix.vector.daemon.VectorDaemon xhshook 踩坑记录: - APK 必须含 assets/xposed_init(而非根目录),VectorConfigCache 只认这个路径 - adb install 必须加 --no-incremental,Incremental Install marker 破坏 ZipFile 解析 - Xposed API 类不能打进 module DEX,LSPosed 会检查 XposedBridge classloader 一致性 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
涵盖系统自动 OTA 升级静默清掉 Magisk root 的恢复流程、hermes gateway 才是真正监听消息平台的常驻进程(chat -q 测试不代表能收发消息)、 gateway stop 杀不干净手动 nohup 进程的坑、用 state.db 排查卡死 cron 任务的方法、tool_loop_guardrails.hard_stop_enabled 默认关闭导致无限 重试、以及 Kimi Coding Plan 模型标识符和 Thinking 模式的验证方法。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
Android 12+ 禁止从 BOOT_COMPLETED 直接启动 microphone 类型前台服务, 异常实际出现在 RecorderService.onCreate() 而非 BootReceiver(FGS 启动是 排队执行,BootReceiver 里的 try/catch 接不住)。原先没有捕获导致每次 重启手机后录音都无法自动恢复,必须手动开一次 App。 现在优雅捕获该异常,改为弹一条可划掉的"点击恢复录音"通知;同时给 onDestroy() 加了早退保护,避免提前 return 后摸到未初始化的 lateinit 字段导致连带崩溃。已用两轮真机重启验证。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
涵盖 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>