-
#17 群昵称查询: - android-wechat-tracker-sqlcipher.js:getContactNickname 删掉 if (wxid.endsWith('@chatroom')) return wxid 的早退分支 - 群(xxxx@chatroom)和私聊都走同一 rcontact 表查询,nickname 就是群名 - A11y 现在可以用群名搜索进入群聊 - 在 Pixel 已部署并重启 auto-reply (PID 18678) #18 wake-lock + keepalive 重写: - 通过 am startservice com.termux.service_wake_lock 启用 wake-lock (确认 dumpsys power 已持有 'termux:service-wakelock') - 重写 keepalive.sh 对齐当前部署: - 守护 4 项:wake-lock / A11y service / hermes gateway / auto-reply - hermes 走 termux native gateway 而不是 proot-distro Ubuntu(已淘汰) - 健康检查端口 8642(不再是 3010) - A11y 被关掉时自动 settings put secure 重新启用 - 在 Pixel 已部署到 ~/hermes-wechat/keepalive.sh #16 残留清理(仅 phone 操作,无 git 文件): - pkill -9 frida-server + rm -rf ~/.frida_queue/ - ~/.hermes/auth.json 删掉 credential_pool['kimi-coding'] 老 sk-kimi 条目 保留 anthropic + kimi-coding-cn Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> -
包含: - 运行中进程清单(auto-reply / hermes gateway / A11y service) - phone 路径 ↔ Mac repo 路径对照表 - 启停 / A11y 校验 / 日志查看 / 手动测试发送命令速查 - Clash mixed proxy 网络拓扑陷阱(Termux UID 被 VPN 排除,必须走 7890) - 当前 hermes 后端配置(Moonshot CN + kimi-k2.6) - 两种接手开发流程(phone 上 clone repo / 手动 scp) - 已知待办(群昵称查询、引用@回复、wake-lock、清理) - 避雷清单(前人踩过的所有坑) 同步到 phone: /data/data/com.termux/files/home/hermes-wechat/HANDOFF.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
把 6 步链路接到唯一可用的发送路径(HermesAccessibilityService): 1. termux-notification-list 监听通知(息屏兜底) 2. input keyevent 224 点亮屏幕 + wm dismiss-keyguard 解锁 3. am start LauncherUI 切微信前台 4. sqlcipher 轮询 EnMicroMsg.db 拉新消息 + 最近 N 条上下文 5. 调 hermes-agent /v1/chat/completions 生成回复 6. am broadcast com.hermes.wechat.SEND_MSG → A11y UI 自动化发送 关键改动: - android-wechat-sender.js - sendTextMessageBroadcast 增加 options.toUserDisplayName(A11y 搜索必传) - 新增 checkAccessibilityServiceEnabled / enableAccessibilityService - android-wechat-tracker-sqlcipher.js - 新增 getContactNickname(wxid):查 rcontact 拿 conRemark/nickname, 带 filehelper/weixin 等内置 helper 的硬编码 fallback - 新增 fetchHistory(talker, limit):拉最近 N 条文本消息正序返回 - auto-reply.js - 移除已废弃的 sendTextMessageFrida - 启动时校验 A11y service,未启用则尝试自动启用并打印 manual fix 命令 - handleMessage 中:先 getContactNickname 拿 displayName、再 fetchHistory 给 hermes 做多轮上下文,最后用 broadcast + displayName 发送 - buildHermesMessages 重写:自动把历史按 isSend 转 user/assistant 多轮 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>
-
- HERMES_WECHAT_ARCHITECTURE.md: v2.0 → v3.0, rewrite for Node.js plugin - README.md: update architecture diagram, file list, API endpoint, env vars - server/services/wechat/README.md: add sqlcipher tracker + frida sender - SKILL.md: add Frida daemon and SQLCipher tracker usage - wechat-auto-reply-status.md: mark SQLCipher + Frida as verified, update plans 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>
-
- auto-reply.js: connect to hermes /api/master/chat for AI reply generation - SSE response parsing, session isolation per talker - notification watcher (termux-notification-list) for screen-off fallback - wechat foreground check + wake before send - hermes_wechat_daemon.py: prefer hermes API, fallback to direct LLM API - config.json: add hermes host/port for local API connection - keepalive.sh: termux-wake-lock + process guardian for hermes + auto-reply - Move docs into local-testkit/docs/ directory - .gitignore: exclude server/db/ 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>
-
包含 ACP 协议层、Agent 运行时、Express API 服务端、 编排引擎及进程管理等完整实现。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>