-
device/ 为设备快照主版本:mitm_proxy / wechat_reply_watcher 取 device 侧(已含远端同名改动,仅路径不同); wechat_plain 旧 orchestrator 保持删除;CLAUDE.md 合并两侧章节。 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
-
设备端代码唯一版本改为 device/(手机快照)。phoneuse/ 只留 Mac 侧 frida_bridge、 启动脚本与设计文档;wechat_plain/scripts/auto-reply/ 只留文档。 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
-
task.hexdo.com 探测发现指向错了 Mac 的 agent-bridge,域名重新分配后 (详见 docs/2026-08-07-task-hexdo-tunnel-and-wechat-watcher.md),把 task.hexdo.com 隧道健康检查/自愈加进看门狗第 7 节;顺带修复微信自动 回复 watcher 的判活逻辑(`ps -A|grep` 在设备负载下不可靠导致健康进 程被误判重启),改用 pidfile + /proc/cmdline 判活,并修掉 log() 把 每行日志写两遍的小 bug。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
手机后台卡死到连电源键都无响应:wechat_reply_watcher.py 死循环+ wechat-viewer-watchdog.sh(Hermes cron 每 5 分钟跑一次)检测存活只信 一次 su -c 'ps -A'|grep,系统过载时该探测本身会漏检,导致在卡死的旧 实例上不断叠加新实例,6 天内滚雪球到 877 个同时存活进程,吃满内存 +swap 拖死整机。 修复:watchdog 第 5 步改为每次都先 pkill 清场再起一个(与同文件里 Flask 重启逻辑一致的幂等单例模式),不再依赖探测结果是否可靠。已在 设备上部署验证。 顺带把 wechat_reply_watcher.py / orchestrator.py / policy.py 同步为 设备上过去两周的最新版本(repo 里是旧的,device 端已经跑在更新版本 上——非 root Termux su fallback、admin/member 双角色回复、去重、独 立验证层等),此前只有 daemon.sh 和 service.d 脚本是同步的。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
红点通知需 atuserlist,深逆向未到底,跟原生引用气泡一起后面做。已确认: - 纯文字@不触发红点;atuserlist 不在 message 行(convertTo cv 无此列) - r0 第5参 obj≠msgSource(当它传会 NPE g9.q5,obj 是"消息key查f9") - 微信 UI 发送链路≠我们合成的 r0+z2.b:hook z2 自学习扫 atuserlist 字段零命中 已部署脚手架(WIP,生产不传 at 无影响,自动回复照常): - SEND_MSG_INTERNAL 支持 --es at → 构造 msgsource - trySendWithRetry/sendViaHighLevel 加 msgSource 参数 - hookAtDiscovery 自学习 z2 派发点 + sAtFieldPath 持久化(目前学不到) 详见 memory wechat-group-at-atuserlist。⚠️ 重编译 hook 会强退微信=要重登, 继续挖前一次想全要抓什么。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- process_event 里确定性拼接 @昵称+U+2005(微信原生分隔符)前缀,仅群消息(isGroup) - 确定性代码不靠 LLM/skill(否则会漏会不一致);安全判定仍在原始 draft 上跑 - 审批页/自动发的文本都带 @;送达校验用带 @ 的文本匹配 - ⚠️ 仅文字@(可见),不带 atuserlist,未必真 ping 红点;真通知需 hook 加 at 列表(README 待收尾) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- 需求文档环节5:补 flush 加固三经验值 + 端到端闭环验证(私聊+群@我送达) - README 真机验证:加 2026-07-12 里程碑段(系统正式跑通,~15s 送达) - .gitignore 忽略 __pycache__/*.pyc Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
用户实测发现:触发 NetSceneQueue 派发的是一次真实 app 切换(切走→切回微信), 且要给足时间。旧版单次切换+被动等 25s 常卡几十秒~分钟。三个经验值: - 发送后 sleep(4) 让消息稳稳落库(切太快微信还没登记这条,flush 不到) - _onresume_cycle: HOME 背景化 2.5s → am start LauncherUI 切回停 3s(切换给足时间) - 切回后停前台连查 DWELL_POLLS 轮,不立刻再切走(否则打断正在进行的网络发送); 没到 2 再来一轮,总超时 60s 真机实测:屏幕亮/灭(Dozing)都 ~15s flush 到 status=2。memory wechat-api-send-onresume-flush 已补加固经验。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- app.py 加 GET/POST /api/auto_send:读写 policy_config.json 的 auto_send_enabled(root 属主 644,写经 tmp+su cp,只翻该字段保留 block_keywords) - whitelist.html 顶部加开关卡片(开=白名单自动发/敏感词仍拦,关=全审批),开启二次确认 - orchestrator 每轮 load_config() 即时生效,无需重启 - 真机验证:读接口 enabled=false、POST true/false 文件正确翻转其余字段完整、/whitelist 200 - README 待收尾 #4 标完成 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
- text_b64 传中文(--es text 被 shell/am 弄乱→卡 status=1) - z2.b 只入队,发送后 HOME+LauncherUI 触发 onResume 派发(设备机制非代码 bug) - _send_text_verified 轮询 message.status 直到 2,超时仍 1 视为已入队不误报 - 拆 stage 目录(watcher=_stage / orchestrator=_stage_orch)避开拷库竞态 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
/whitelist 添加改为弹窗:默认列会话过的联系人/群(带昵称),搜索框查全量通讯录, 复选框多选批量入库。新增 /api/contacts(会话列表) + /api/contacts/search(全量搜), /api/whitelist POST 支持批量 items。白名单存储/显示昵称+wxid/群id+类型。真机验证 33 条默认列表、搜索、批量加(added:2)全通。viewer 改动全文见 wechat-viewer-changes.md。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
wechat_reply_orchestrator.py:消费 watcher incoming.jsonl(cursor增量+单实例锁+ 首跑基线)→ 候选事件(私聊/@我/引用我)→ env2 查上下文(rcontact身份+历史,一次拷库 全批复用)→ env3 hermes -z 生成 → env4 policy.decide(白名单读 circle.db)→ env5 落地(auto:send_text_via_hook+auto_sent / review:pending 进 /approvals)。生成失败 即静默不发,绝不误发。watcher._trigger_orchestrator 读到新消息后 fire-and-forget 拉起 drain(独立进程不阻塞采集)。真机验证:接线自动触发、真实猎头上下文生成火星人 口吻草稿并正确进审核队列。auto_send 默认关=全审核(保守起步)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
wechat_reply_policy.py:确定性安全闸 decide()→skip|auto|review,default-deny +敏感词硬override(钱/承诺/约时间白名单也拉回),demo 8/8 过。配置与审批 UI 落在 手机端 ~/wechat-viewer(Flask):新表 reply_whitelist/reply_queue、/whitelist 白名单页、/approvals 审批页(可编辑草稿+发送/取消),发送复用 send_text_via_hook。 真机验证白名单增删查、发送到 filehelper(sent)、取消(cancelled) 全通。viewer 改 动全文见 wechat-viewer-changes.md + viewer_templates/(不复制用户整个 app)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
环节3 不写代码,Hermes 本身生成(deepseek-v4-pro/gateway),走 hermes -z 一次性 调用(裸端点 8642 需鉴权,401,不用)。SOUL.md 从默认 Hermes 人设改为「火星人的 手机助手」(替他回微信用其口吻+涉钱/承诺/约时间交本人确认;设备原文已备份)。 真机验证质量:陌生猎头→「暂不考虑,谢谢」、熟人约饭→「可以啊,几点?在哪吃」, 均在口吻上。观察:人设的安全约束是软的(约饭仍主动接话),硬门要落到环节4。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
环节2 无需新代码:Hermes 是有 shell+SQL 的 agent,给 wechat-db-decrypt skill 补「读会话上下文」一节即可——一次拷库查齐发送者身份(rcontact,显示名优先级 conRemark>nickname>alias)、最近 N 条历史(剥群 wxid: 前缀/type→占位符/只喂 文本)、refermsg 引用解析 + 群名,并给出喂环节3 的上下文骨架。真机验证配方 产出干净上下文。仓库留档 skill/wechat-db-decrypt-SKILL.md。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
wechat_reply_daemon.sh:root 监督器,带 Termux 环境、单实例锁、等微信登录 就绪(selftest)、看门狗崩溃重启(退避 10s)。 service.d__wechat-reply-watcher.sh:Magisk service.d 开机钩子(装到 /data/adb/service.d/wechat-reply-watcher.sh)拉起监督器。 真机验证:纯 root(boot 上下文)selftest 通过、单实例防重、杀 watcher 自动 重启、setsid 脱离后挂 init 常驻。已在设备 7×24 运行。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-
wechat_reply_watcher.py:纯 ctypes inotify 监听当前账号 EnMicroMsg.db 目录 (SELinux 放行、零轮询),失败退回 stat mtime;解密增量读 message(isSend=0 & msgId>last)→ 分类(私聊/群@我/群引用我/群其它)→ 写 incoming.jsonl 队列。 账号运行时按 MD5("mm"+uin) 自适应,首跑建基线不重放历史。真机验证 inotify 触发读取、多账号切换自适应、解密/分类均通过。含 --selftest/--once/--tail。 配套需求文档 md/wechat-auto-reply-requirements.md 标注环节1 完成。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>