-
新增功能: - HermesAccessibilityService 支持广播 extras quoteText / atSender - quoteText: 在聊天页找文本含此 substring 的 bkl 气泡 → 长按 → 点「引用」 菜单项 → 输入回复文本 → 点发送 - atSender: 在输入框先打「@」触发选人面板 → 找匹配成员点击 → 追加回复 实测路径完整跑通(msgId 1409 验证): 1. 广播触发 A11y service 2. 进入聊天页("already in correct chat" 或经过搜索) 3. findBubbleByPartialText 在 bkl 列表里倒序匹配 4. dispatchGesture 派发 800ms 合成长按手势(ACTION_LONG_CLICK 在 WeChat GestureDetector 实现上不触发菜单,必须用 gesture 派发) 5. 等 1.2s 后用 findClickableByTextAllWindows 搜「引用」 — 关键:菜单在 popup window 不在 active window,必须遍历 getWindows() 才能找到 6. 点击引用 → 引用 chip 注入到输入框 → 写文本 → 点发送 7. DB 写入的 message 是 type=57 (微信内部引用回复消息类型) 关键依赖(Android AccessibilityService): - accessibility_service_config.xml 必须设 canPerformGestures="true" 否则 dispatchGesture 不回调 onCompleted 群聊路径: - auto-reply.js handleMessage 在 replyType=group-at/group-quote 时自动 从触发消息 content 解析 bubbleText 当 quoteText,senderName 当 atSender - android-wechat-sender.js sendTextMessageBroadcast 接受 options.quoteText / options.atSender,拼到 am broadcast --es 参数里 测试覆盖(在 Pixel 实测): - ✅ 私聊回归:plain text 路径不影响(msgId 1408) - ✅ 引用回复:私聊场景已验证(msgId 1409 type=57) - ⏸ 群聊 + @ 群成员:代码已写完,需要真实群消息触发才能测 APK 已重编 + 用 debug.keystore 签 + adb install -r 升级(A11y 权限保留)。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
.gitignore 早就有这两条规则但文件已被跟踪,对已 tracked 文件无效。 git rm --cached 把 121 个 build artifacts 从 index 移除(保留磁盘文件)。 同时 ignore: - lsposed-wechat-sendmsg/local.properties (Android SDK 本地路径,包含个人机器信息) - lsposed-wechat-sendmsg/*.keystore (签名密钥,不应入库) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
通过 DB 实证与 LSPosed 日志对比定位到: - LSPosed `HermesWeChatModule.sendTextMessageDirect` 在 WeChat 8.0.72 上 返回 `Send result: true` 后,主线程异步 NetScene 提交触发 NPE 被 swallow, 消息**不进 message 表**。这是误报。 - Frida daemon 队列方案(`android-wechat-sender-frida.js`)在 Frida 17 + 微信 8.0.72 上注入会触发反调试,进程崩溃,无法生产使用。 - 实际可用路径是 `HermesAccessibilityService`(lsposed-wechat-sendmsg 模块内): 监听同一广播 `com.hermes.wechat.SEND_MSG`,纯 UI 自动化点击微信完成发送。 - A11y service 易被系统关闭(`enabled_accessibility_services = null`), 这是消息发送失败的最常见根因,docs 中加上启用 / 验证命令。 更新范围: - CLAUDE.md - server/services/wechat/README.md, SKILL.md - server/services/wechat/android-wechat-sender-frida.js(标注废弃) - wechat_plain/scripts/local-testkit/docs/README.md, HERMES_WECHAT_ARCHITECTURE.md - wechat_plain/scripts/lsposed-wechat-sendmsg/README.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
- auto-reply.js 接入 hermes-agent OpenAI-compatible API (:8642) - 新增 android-wechat-tracker-sqlcipher.js 替代 LSPosed 日志 tail - 新增 android-wechat-sender-frida.js 替代 am broadcast 发送 - 更新 keepalive.sh、README、HermesWeChatModule.java - 添加 .gitignore SQLite 变体规则 - 新增 docs: 息屏发送尝试记录与屏幕自动唤醒方案 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
Mac side (lemonPCRM): - Express server with /api/master/chat SSE endpoint - MasterSession multi-round orchestration - AgentManager + ToolRegistry - ClaudeCliProtocol ACP implementation Pixel side (wechat_plain/scripts/): - hermes_wechat_daemon.py: standalone daemon - SQLCipher DB decryption with WAL checkpoint fix - Direct LLM API calls (Kimi/Anthropic/OpenAI) - am broadcast to trigger LSPosed send - Auto wake WeChat to foreground before poll/send - lsposed-wechat-sendmsg: LSPosed module - sendTextMessageDirect via WeChat internal API - u01.r1.a -> builder -> m1.a() full chain - Background thread NetScene submission Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>