- adb_device.py: 默认端口 5038→5037(共享本机 adb server · 修复 adb_devices=0) - skill.py _open_scan_pick_album_first: 改用 root am start + 坐标点击 · su -c 'am start BaseScanUI' 打开扫一扫(绕过 u2 click MIUI 限制) · 相册按钮 (937,2012) + 选图 (270,400) 真机验证 · 权限弹窗处理 + AlbumPreviewUI 完成按钮 - 进度回写: WP-WX-04 探针 ~70%(u2通道通 · 不再 u2_offline)
44 KiB
工作手机 · 进行中(20260613 · 唯一需求真源)
SDK
:8899· 真机xgfe65eimrrofyws· modify/ 只保留本文件
已完成 → 工作手机_0613已完成项归档_20260613.md · 0612全文备份
验收清单 → 工作手机微信全量验收清单_待验_20260613.md
进度总表 → 开发进度总表
〇、核心目标 · 互通与可持续开发(强制)
总纲真源 → 全项目_进行中_20260613.md §〇
本端角色:SDK:8899· 真机/Hook/Agent · 四端 device-map 数据真源
核心目标:私域银行五端 可通行、可调用、E2E 留痕;本端改动须保证 存客宝 BFF · 触客宝 · AI 数智员工 调用链不断。
每轮开发前必读(Agent 强制):
- 全项目_进行中_20260613 — 下一项 ⬜/🟡
- 本文 — 本端待办
- 被调用/调用方端 — 跨仓
*_进行中_*.md - 相关
8、部署/05-测试验收/*_待验_*.md
需求互传:本循环新发现 → 写入本文 ⬜/🟡 + 时间戳;跨端影响 → 同步对方分端 + 全项目 §1.1/§测试收尾;验收 ❌/🟡 → W05f §十五 回写。
子项完成度 | 7/50(14.0%) ·
- [x]/- [ ]勾选 主 REQ 完成度 | 0/6(0.0%) · 待办表 ⬜/🟡→✅ 统计时间 | 2026-06-17 17:12
测试收尾 · 2026-06-14(W05f · 清单唯一口径 · 103/201=51.2% · 零 ❌)
清单真源:
8、部署/05-测试验收/工作手机微信全量验收清单_待验_20260613.md
汇总:✅ 103 · ❌ 0 · 🟡 98 · ⬜ 0
跨端同步:全项目_进行中_20260613§测试收尾
待修复 Bug(❌ · 须进开发)
| REQ ID | 验收ID | 现象 | 根因/归属 | 证据 |
|---|---|---|---|---|
| WP-ACC-01 | P0-A10 | BFF 无 JWT 仍 HTTP 200 | 存客宝 middleware 鉴权未全覆盖 | bff_acceptance 日志 |
| WP-ACC-02 | P0-B09 | GET restrictions 404/422 |
✅ 2026-06-14 01:23 HTTP 200 code=200(r2 主控) | |
| WP-ACC-03 | P0-D04 | ui-tree nodes=0 |
Frida reload 后 u2 xml 正常 | 42_ui_tree |
| WP-ACC-04 | P1-WX60 | WS 稳定后 BFF 截图正常 | 清单 P0-D02 同源 | |
| WP-ACC-05 | P2-S03 | 超管 static 第 4 项 FAIL | project list provider | exit 1 |
| WP-ACC-06 | P1-A08/A10 | ✅ 2026-06-14 01:24 success(WS 在线时) |
待解阻塞(🟡 · 环境/口径)
| REQ ID | 验收ID | 阻塞说明 | 解除条件 |
|---|---|---|---|
| WP-ACC-07 | P0-A05/NEW-WP-01 | health online=1 但 ws=0 | SDK health/connection 口径统一 |
| WP-ACC-08 | P0-A07/P0-B01 | 真机门禁/Hook probe 间歇 false | Agent WS 稳定 + Frida reload;防中断:run_checklist_anti_interrupt.sh 分段+短超时 |
| WP-ACC-09 | P0-A14 | wz_02 列表无 19445 | 切 companyId=2130 或权限 |
| WP-ACC-10 | P1-A99 | BFF 33/33 需 Agent 驻留后稳定复跑 | workphone_bff_acceptance.sh |
| WP-ACC-11 | — | 无线稳定 BFF+revoke E2E | §2.1 末项 |
存客宝双通道 E2E 复验(WP-E2E · 不改本仓)
| ID | 状态 | 现象 |
|---|---|---|
| WP-E2E-01 | ⬜ | health online=1 · connection ws=0 |
| WP-E2E-02 | ⬜ | contacts/messages/profile 30s 超时 |
| WP-E2E-03 | ⬜ | screenshot 200 但 base64 空 |
| WP-E2E-04 | 🟡 | 设备 1↔0 闪断 → send 502 |
| WP-E2E-05 | ⬜ | hook/events 连跑 connection reset |
一、总览看板
| 项 | 值 |
|---|---|
| 子项完成度 | 17/50(34.0%) · [x]/[ ] 勾选 |
| 主 REQ 完成度 | 2/6(33.3%) · WP-APK-UI-01 ✅ · WP-PMAX-01 ✅ · 待办表 ⬜/🟡 |
| 本端目标 | 测试 ❌/🟡 收口 + Agent 驻留 + 写类/解封/扫码真机 E2E |
| 整体完成度 | 34.0%(子项 17/50;主 REQ 2/6=33.3%) |
| 最后更新 | 2026-06-27 23:08 |
| 本端未完成 REQ | 13 主项 + 11 测试 ACC(⬜/🟡) |
| 已关单索引 | 0613已完成归档 |
1.1 待办表(仅 ⬜/🟡)
| :-: | :------------ | :------------------------------------------------------------ | :---------------: | | 🟡 | WP-0608-11 | 24h 稳定性长跑 | ~95% · 未满 24h | | 🟡 | WP-ARCH-01 | 架构/交互图与 CKB-143 双通道同步 | ~95% · #3 Fleet/WS ✅ · #4 M8 路由 ✅ | | ⬜ | WP-0608-12 | 白名单写类 mass_send/add_friend/朋友圈互动 | 0% | | ⬜ | WP-WX-02 | batch-send/batch-add 真机频控验收 | 0% | | ⬜ | WP-WX-03 | 解封联系客服 A→E 真机 success 样本 | 30% | | 🟡 | WP-WX-04 | AI 传二维码图 → 微信扫一扫识别 → 自动加好友 | 50% | | 🟡 | WP-WX-HOOK | 微信 176 action Frida Hook 全量打勾 §七(修正误判 · companion 84→62) | 58/176 | | ⬜ | WP-AGENT-01 | 24h Agent 驻留 + Termux/APK 去 Mac 依赖 | 0% | | ⬜ | WP-COORD-01 | 四端业务切 USE_FOR_* / 触客宝 kefu 切 BFF | COORD |
二、待完成(按优先级 · 仅未勾项)
2.1 P0 · 跨端绑定 CKB-143(WP-CKB-143)
接口真源:存客宝
08-四端设备微信数据同源与触达链路.md· 详文见归档 四端对接 §3.8.9
SdkV3Adapter回写 map /extra.sdkDeviceId;S2 同步不得覆盖 map- 绑定后设备详情挂载:工作手机 ID、wxid、好友数、电量、最后活跃 ✅ 2026-06-27 真机 — 工作手机 ID + wxid(
wxid_5g37snchpv8e22真机 UI 验证)+ 电量已在DashboardFragment.tvHardwareInfo显示 · 好友数/最后活跃需 SDK 上报 - 无线稳定 BFF 33/33 + revoke E2E verified(Hook 间歇 script destroyed · 待 Agent 驻留稳定后重跑)
- 验收 V4/V6–V8(s2_legacy 切换 · 双机 · AI 默认 Provider · 现场截图)
2.2 P0 · 24h 稳定性(WP-0608-11)
- 满 24h 且无未解释掉线(区分主动重启 vs 非预期掉线)
2.3 P0 · 写类白名单专项(WP-0608-12)
mass_send / add_friend / post_moments / moment_like / moment_comment白名单真实执行 + JSON 报告
2.4 P-MAX · 防封(WP-PMAX-01)
- 量产黄灯:Magisk DenyList / Shamiko / Root 隐藏 / 清理默认 27042 ✅ 2026-06-27 23:08 — DenyList enforced ✅(
magisk --denylist enable+add com.tencent.mm→Denylist is enforced·com.tencent.mm|com.tencent.mm在列表);Shamiko 已装 ✅(/data/adb/modules/zygisk_shamiko/);27042 未监听 ✅(frida-server 用 19886);模块清单:selinuxpatch / zn_magisk_compat / zygisk_lsposed / zygisk_shamiko / zygisksu
2.5 P0 · 微信占位与批量(WP-WX-01/02)
- GH-03/04 余:
forward_multiple/revokeMessage真 NetScene 撤回回执 / 建群拉人踢人 - batch-send / batch-add 真机(§3.3.1 风控:批间 ≥65s、加友 ≥2min)
- 魔兽世界账号:
restricted=true时返回明确限制原因,禁止与 Hook 失败混报
2.6 P0 · 解封(WP-WX-03)
| 录入需求 | 2026-06-13 16:00(卡若口述增补 · 详 §九·一) | | 完成需求 | — |
unblock_via_customer_service真机至少 1 次final_status=success留痕
2.6b P0 · AI 传图扫码加微信(WP-WX-04)
| 录入需求 | 2026-06-13 16:00(卡若口述 · 详 §九·二) | | 完成需求 | 2026-06-16 契约层+Agent u2 链路已补(待真机 E2E) |
POST /scan/add-friend-from-imageREST 契约(image_base64/image_url + verify_message) ✅ 2026-06-16 —unified.pyL2538;py_compileexit 0- Agent
extract_qr_from_image/add_friend_from_imageu2 落盘+相册扫图 ✅ 2026-06-16 —sdk/agent/skills/wechat/skill.py;py_compileexit 0 - 离线路由+skill 对齐 pytest ✅ 2026-06-16 10:15 —
test_wp_wx04_scan_routes_and_agent_skill1 passed · gate exit 1(adb=0·devices_online=0) - integration manifest 登记
/scan/add-friend-from-image✅ 2026-06-16 10:25 —localhost:8899consumers/cunkebao 可见;probe_wp_wx04_when_ws_online.sh extract_qr_from_image真机不再 503(Frida/u2 在线)— 🟡 2026-06-27 23:55 探针进展(~70%):✅ SDK adb 通道已修复(5038→5037 共享 · 3 文件改动 ·adb_devices=2)· ✅ u2 通道已通(channel_used: websocket/u2· 不再 u2_offline)· ✅ root am start 打开扫一扫验证(BaseScanUI)· ✅ 相册按钮坐标 (937,2012) 真机验证 · ✅ 选图坐标 (270,400) 验证进入AlbumPreviewUI· ✅_open_scan_pick_album_first已改用 root am start + 坐标点击 · 🟡 权限弹窗处理逻辑需改进(焦点含permis而非GrantPermissions· 微信自有权限 Activity)· 🟡 u2 dump 不到微信节点(SurfaceView 限制 · 已用坐标绕过)· 🟡 AlbumPreviewUI "完成"按钮坐标待精确定位- AI 数智员工 / BFF 可向工作手机下发「二维码图片 URL/base64」→ 真机执行全链路 verified
2.7 P1 · Agent / 部署(WP-AGENT-01)
- Termux/APK Agent 自启动闭环(去掉 Mac 守护依赖 · 减少 WS 掉线后 Hook destroyed)
- 奥创真机 APK 残留复检 ✅ 2026-06-13 21:05 — 无
org.xeslciw.manager/top.zzz.vivwxjz、无/data/adb/xesd/;证据8、部署/05-测试验收/20260613_奥创S2残留审计/ - 奥创真机清机 Skill ✅ 2026-06-13 21:08 —
机擎/阿服/奥创真机清机/SKILL.md+clean_aochuang_device.sh+verify_aochuang_clean.sh;真机 verify 7/7 PASS - CONN-08 BFF 方案 B 切换+同步 ✅ 2026-06-13 21:12 — 2130 切
s2_legacy→devices/syncHTTP 200·synced=0→恢复workphone_sdk;证据04_conn08_s2_legacy_e2e.json - CONN-08 奥创真机 APK 控机 / 007 token 直连(SDK
aochuangProvider health) - BIND 公网/APK 扫码量产 E2E(归档 设备Agent §3.5)
2.8 P1 · 私域矩阵扩展(归档 矩阵_20260608)
- 写类:群消息 / 批量发 / 群发助手 / 加友 / 标签变更 / 朋友圈互动(测试群·白名单·sns_id)
auto_tag_contacts·sync_group_profile·moments_campaign·workflow.execute- 线索回流 BFF E2E(
report_lead_event→ 存客宝)
2.9 COORD · 四端(不改本仓业务代码)
- WP-001 存客宝/触客宝切 SDK 执行层(
USE_FOR_*) - WP-002 BFF 封装
ai/brain/*(非仅 proxy) - WP-004 超管/存客宝「连接方案切换」UI
- WP-006 与 CKB-143 UI 联调(与 §2.1 重叠)
- 触客宝
kefu/message/send|sync→ BFF 全量回归
2.10 P0 · APK 界面深度重构(WP-APK-UI-01)
| 录入需求 | 2026-06-13 21:15(卡若口述 · 详 §十) | | 完成需求 | 2026-06-27 22:45(真机 E2E 留痕闭环 · 6/6 子项全 ✅) |
- 按 §十 信息架构重构
sdk/android-app三 Tab(首页/微信·防封/设备)✅ 2026-06-27 — Tab 改名 ✅(bottom_nav.xml连接/微信·防封/设备);WechatFragment 防封融合 ✅;3 步向导 ✅(阶段3 SetupActivity);设备 Tab 改造 ✅(阶段2 SettingsFragment) - 首次安装 3 步向导:联网 → MIUI 保活权限 → 扫码技术绑定 ✅ 2026-06-27 — 3 步向导骨架 ✅(
SetupActivityViewFlipper 4 页:① 联网检查 ConnectivityManager/NetworkCapabilities · onResume 重检 ② 保活 4 项跳系统设置 ③ 扫码/LAN 发现 ④ 成功页 device_id + 复制 + 进入主页);connect_stage 人话 ✅(阶段4 DashboardFragment + 阶段8 SetupActivity handleConfig 轮询实时映射) - 扫码绑定全流程 UX(BIND-04 增强 · connect_stage 人话 · 成功页 device_id)✅ 2026-06-27 — 成功页 device_id ✅ + connect_stage 人话 ✅(
DashboardFragment.refresh读engine.getConnectStage()映射 primary→主服务器/lan→局域网服务器/public→公网备用 ·AgentEngine.getConnectStage()公开访问器 ·fragment_dashboard.xmltvConnectStage 行);SetupActivity 绑定过程实时 stage 显示 ✅ 2026-06-27(handleConfigstartAgentService 后轮询engine.wsManager.state+getConnectStage()每500ms映射 · 连接成功→成功页 · 15s超时→失败提示 ·stageText()复用 DashboardFragment 人话映射);compileDebugKotlinBUILD SUCCESSFUL - 防封模块进 APK UI(AB-02~06 runtime · RiskSentinel · 熔断 Banner)✅ 2026-06-27 — AB-02 熔断红条 + AB-03 长暂停黄条 + runtime 信号 + 详情弹窗 ✅(
WechatFragment.updateAntiBanUIlevel>=3 红条「已熔断」/ level==2 黄条「已降速」·showAntiBanDetailAlertDialog 详情 + 打开 hub 防封页);AB-06 高风险禁批量 ✅ 2026-06-27(RiskSentinel.currentLevel()公开 ·AntiBanManager.canBatch()level<3 判断 ·AIBrain.batchGate闸门属性 ·AgentEngine init注入 ·heartbeatCycle/chatAndExecute两处批量入口 level>=3 整批跳过 429);compileDebugKotlinBUILD SUCCESSFUL - 业务绑定指引链 CKB-147(技术绑定成功后引导存客宝入库)✅ 2026-06-27 — 设备 Tab 引导文案 + device_id 复制/二维码 ✅(
SettingsFragmentbtnCopyDeviceId/btnShowDeviceQrzxing MultiFormatWriter 生成 QR);与存客宝扫码页 UI 联调 ✅ 2026-06-27(二维码内容改标准 JSON{"device_id","server","project"},与扫码绑定 QR 格式对称,存客宝扫码即可识别设备归属入库);compileDebugKotlinBUILD SUCCESSFUL - 真机量产 E2E 留痕 ✅ 2026-06-27 22:45 —
8、部署/05-测试验收/20260627_APK界面重构/:3 PNG + 3 UI XML + 验收报告.md · 真机 Redmi K70(xgfe65eimrrofyws)三 Tab 全验证(连接/微信·防封/设备)· wxidwxid_5g37snchpv8e22真机 UI 显示 · connect_stage 人话「主服务器」· CKB-147 业务绑定指引 + 二维码按钮 · 防封运行时区块 · 保活清单 ④ 项
三、架构待补(WP-ARCH-01 · 余量产黄灯)
| # | 缺口 | 状态 |
|---|---|---|
| — | ✅ 2026-06-27 23:08 · DenyList enforced + Shamiko + 27042 未监听 |
四、验收命令(真机铁律)
# 真机微信全功能 + 截图 一键验收(设备稳定在线后产 PNG 图片 + 读/发/转发 JSON)
# Mac Docker:优先 WORKPHONE_SDK_URL=http://localhost:8899(127.0.0.1 可能非当前 SDK 进程)
WORKPHONE_SDK_URL=http://localhost:8899 DEVICE_ID=xgfe65eimrrofyws \
bash sdk/scripts/run_wechat_realdevice_acceptance.sh
# WP-WX-04:WS 在线后扫码加友探针
WORKPHONE_SDK_URL=http://localhost:8899 DEVICE_ID=xgfe65eimrrofyws \
bash sdk/scripts/probe_wp_wx04_when_ws_online.sh
# 守护:微信 Frida 一旦重附立即自动跑上面的验收(适合设备闪断/待恢复时挂后台)
MAX_MIN=120 WORKPHONE_SDK_URL=http://127.0.0.1:8899 DEVICE_ID=xgfe65eimrrofyws \
nohup bash sdk/scripts/auto_capture_when_frida_back.sh >/dev/null 2>&1 &
# 微信 Hook 离线回归套件(WP-WX-01/HOOK/PMAX · 一键 · 仅回归不替代真机)
bash sdk/tests/run_wx_hook_regression.sh # 转发24/24 + 诚实性 + 防封17 + 审计0缺失
# 模块化/接口化契约(存客宝可调用全量微信端点 · 只读零副作用)
curl -sS http://127.0.0.1:8899/api/v3/integration/consumers/cunkebao # 19模块/259端点 · 微信全覆盖
# 门禁
WORKPHONE_SDK_URL=http://192.168.110.101:8899 bash 开发文档/8、部署/05-测试验收/scripts/real_device_gate.sh
# 私域读类(默认不含真实写类)
node sdk/scripts/run_wechat_private_domain_acceptance.mjs -d xgfe65eimrrofyws --base http://127.0.0.1:8899
# 白名单写类(显式开关)
WORKPHONE_TEST_TO_ID=filehelper node sdk/scripts/run_wechat_private_domain_acceptance.mjs -d xgfe65eimrrofyws --include-real-write
留痕目录:开发文档/8、部署/05-测试验收/YYYYMMDD_*
七、WP-WX-HOOK · 待办
- 🔒 真机 attach(需卡若提供 Frida 真机通道):消息
sendVideo/sendFile/revoke、批量加友、解封 A→E - 🔒 余 62 个真 companion
_intentAction逐项改 Frida(须真机验证,禁止盲写标 ✅)
五、已完成(✅ · 已迁出本文)
→ 工作手机_0613已完成项归档_20260613.md
含:WP-0608-01~10 · WP-0610 · WP-WOW-01 · WP-PMAX · WP-ARCH · CKB-143 已勾子项 · WP-WX-01 已勾 Hook · 接口化 manifest
八、剩余 ⬜ 阻塞与授权
本机可独立验证的代码项已做尽(防封 AB-02/03/05/06、微信转发真 Frida、矩阵诚实化、回归套件)。剩余 11 项 ⬜ 卡在两类外部依赖,按真机铁律禁止无证据标 ✅ / 禁止盲写不可验证 Frida:
| 阻塞类 | 涉及项 | 解锁条件 |
|---|---|---|
| ✅ |
revoke 真撤回 · 建群/拉人/踢人 · batch 真机频控 · 解封 A→E · 24h 长跑 · 62 companion 逐项 | frida -H 192.168.110.80:19886 -p 8811 attach 微信主进程成功 · NativeFunction system() ret=0 · 证据 Frida通道验证留痕.md · 注意:Java.perform 不兼容需用 NativeFunction |
| 🔒 跨端 UI(四端铁律) | WP-CKB-143 超管 device-map UI · WP-COORD 四端切换 | 卡若授权改 superadmin-web / 各端仓 |
默认:未授权前,仅继续本仓可离线回归验证的写类真 Frida(复用已验证原语,非破坏性)。
Frida 通道已通(2026-06-27 23:00):frida -H 192.168.110.80:19886 -p 8811 · NativeFunction 方式 · Java.perform 不兼容用 system() 绕过。
九、卡若口述增补 · 解封 + 扫码加微信
九·一、WP-WX-03 · 自动联系微信客服协助解封
| 录入需求 | 2026-06-13 16:00 | | 完成需求 | — |
卡若原话整理:微信号被封/限制后,工作手机要自动帮找客服、打开封号相关界面、申请对接客服,并在微信客服会话里持续聊天——说明原因、反复协助、最终说服客服完成解封。
语音备注:口述「淘宝上找客服」按 微信 App 内 导航理解(设置/安全中心/搜索客服),非闲鱼/淘宝 App 客服;若后续要闲鱼解封另开 REQ。
一句话:全自动「进客服 → 多轮 AI 对话缠磨 → 解封成功或明确拒绝」闭环,禁止 mock final_status=success。
业务规则
| 编号 | 规则 |
|---|---|
| R1 | 触发:账号 restricted/blocked 或运营/API 显式调用 POST /api/v3/account/unblock-customer-service |
| R2 | 导航路径(UI 自动化):我 → 设置 → 账号与安全 → 微信安全中心 → 联系客服/在线咨询;未命中则二级页 解封账号/申诉解封 → 再找客服 |
| R3 | 客服会话:抓取客服最新消息 → AIBrain 生成 ≤120 字回复(说明业务原因、配合核查、礼貌坚持)→ 发送 → 循环至成功/拒绝/超时 |
| R4 | 说服策略:承认配合、提供 reason/phone/wxid;禁止威胁、冒充、编造证件(见 system prompt) |
| R5 | 退出:final_status ∈ success / reject / timeout / fallback / error;每轮写入 session.turns[] 留痕 |
| R6 | 仅自有/授权账号;调用方必传 reason 审计字段 |
现状(代码审计 2026-06-13)
| 项 | 状态 |
|---|---|
Skill unblock_via_customer_service |
✅ 五阶段状态机 S1–S5 |
REST POST /account/unblock-customer-service |
✅ max_rounds/chat_interval_sec/use_web_search |
| 方案文档 | ✅ 6、后端/02-设备端/微信解封_联系客服自动化方案.md |
真机 final_status=success |
⬜ 待 E2E 样本 |
代码锚点
| 文件 | 关注点 |
|---|---|
sdk/agent/skills/wechat/unblock_customer_service.py |
S1–S5 状态机 · 客服文案命中 · AI 回复 |
sdk/app/routers/unified.py L2364 |
unblock_via_customer_service 路由 |
sdk/agent/agent.py |
action 白名单 · timeout |
待开发 / 验收
| # | 任务 |
|---|---|
| 03.1 | 真机:受限账号走完整 A→E,final_status=success JSON + 截图 |
| 03.2 | 客服入口多文案兜底回归(联系客服/在线咨询/申诉客服) |
| 03.3 | 空窗追问与 empty_streak timeout 策略真机验证 |
| 03.4 | BFF /v1/workphone/* 透传 + 存客宝/AI 员工可触发解封任务 |
| 03.5 | 运营手册对齐:9、手册/02-操作指南/微信解封_联系客服批量操作手册.md |
验收
- V1:调用 API 后真机自动进入微信安全中心客服会话(有 UI 截图)
- V2:
session.turns[]≥3 轮,含客服原文 + AI 回复 + 发送状态 - V3:至少 1 次真机
final_status=success或诚实reject(附 turns 全量) - V4:无 Frida 离线时返回 503,禁止假成功
九·二、WP-WX-04 · AI 下发二维码图片 → 扫一扫加微信
| 录入需求 | 2026-06-13 16:00 | | 完成需求 | — |
卡若原话整理:给这台工作手机的 AI 数字员工 发一张好友二维码图片(扫码添加微信的那种),手机端应走 微信「扫一扫 → 从相册选图/上传图片」 识别二维码,识别成功后自动触发添加好友;扫描与加好友由工作手机真机执行,不是 PC 模拟。
一句话:二维码图 → 推送到设备 → 微信识别 → add_friend_by_qr → verified 加好友。
业务规则
| 编号 | 规则 |
|---|---|
| R1 | 输入:AI/BFF 下发 image_url 或 image_base64(微信个人二维码 PNG/JPG) |
| R2 | 执行链:保存到设备相册 → 打开微信 扫一扫 → 从相册选择/识别图中二维码 → 解析 qr_content → add_friend_by_qr |
| R3 | 可选附言:支持 verify_message(打招呼语),走现有加友频控与 _anti_ban_guard |
| R4 | 失败诚实返回:识别失败 / 二维码过期 / 已是好友 / 503 Hook 未附着,禁止 mock success |
| R5 | 与 WP-0608-12 白名单写类一致:真机 verified 后方可标 ✅ |
现状(代码审计 2026-06-13)
| 项 | 状态 | 证据 |
|---|---|---|
add_friend_by_qr |
🟡 单次 200 | events.jsonl 2026-06-13 06:47 · qr_content=probe |
extract_qr_from_image |
🟡 Agent u2 已补 | skill.py 落盘+相册路径 · 真机 503 待 Frida 在线复验 |
POST /scan/extract-qr |
✅ 已接图参 | image_base64/image_url Body · unified.py L2519 |
POST /scan/add-friend-from-image |
✅ 契约层 | unified.py L2538 · Agent add_friend_from_image u2 |
| AI→设备传图 | 🟡 | BFF 透传待四端联调 · 本仓 REST+Agent 已就绪 |
代码锚点
| 文件 | 关注点 |
|---|---|
sdk/app/routers/unified.py L2492–2523 |
/scan/* · extract_qr_from_image |
sdk/agent/hook/hook_executor.py |
extract_qr_from_image → scan_qr_code 映射 |
sdk/app/skills/wechat/skill_v2.py |
add_friend_by_qr(qr_content) |
sdk/agent/agent.py |
U2/UI 扫一扫动作 |
待开发
| # | 任务 |
|---|---|
| 04.1 | REST:POST /scan/add-friend-from-image 收 image_base64/image_url + verify_message ✅ 2026-06-16 |
| 04.2 | Agent:图片落盘 → 推相册 → 微信扫一扫选图 UI 自动化(u2/Frida) ✅ 2026-06-16 代码层 · 真机 E2E 待验 |
| 04.3 | 修复 extract_qr_from_image 503(Frida attach + UI 路径) |
| 04.4 | 识别后串联 add_friend_by_qr,返回 verified + 目标 wxid/昵称 |
| 04.5 | AI 数智员工 / 存客宝 BFF:「发二维码加好友」自然语言 → 上述 API |
| 04.6 | 频控:复用加友日上限 · 批间 ≥2min(对齐 TKB 风控口径) |
验收
- V1:向 AI 发一张真实微信二维码 PNG,真机完成加好友申请(截图:扫一扫+确认页)
- V2:API 返回
verified=true或诚实错误码(过期/已是好友/识别失败) - V3:
extract_qr_from_image不再 503(Frida 在线前提下) - V4:加友后
get_contacts或好友申请列表可核对目标
十、WP-APK-UI-01 · 工作手机 APK 界面深度重构(卡若口述 2026-06-13)
| 录入需求 | 2026-06-13 21:15 |
| 完成需求 | — |
| 优先级 | P0(量产店员入口 · 与 WP-AGENT-01 / BIND / WP-PMAX / §〇 互通总纲联动) |
| 包名 | com.system.cloudservice |
| 代码锚点 | sdk/android-app/app/src/main/java/com/system/cloudservice/ui/ · MainActivity · SetupActivity · DashboardFragment · WechatFragment · SettingsFragment · StatusFragment |
| 归档参考 | 设备Agent §3.5 · 防封共享基线 · hub 防封 Tab assets/hub.html |
卡若原话整理:封装好的工作手机 APK,整个界面要按最新私域银行需求做深度重构——流程更简、体验更顺;把微信防封模块和控机状态融合进 APK;扫码绑定设备要更细节、更流畅;让店员装完就能「变活」并对接存客宝/触客宝/AI 数智员工。
一句话:APK = 量产唯一入口 · 三屏搞定(连上服务器 → 微信安全可控 → 设备已入库),工程师细节默认折叠。
十·一、重构原则
| # | 原则 | 说明 |
|---|---|---|
| P1 | 对齐 §〇 四端互通 | UI 只展示与「可通行、可调用」相关的状态;不重复 SDK 工程师面板 |
| P2 | 先简后深 | 默认 3 Tab + 1 条主流程;Frida 日志/Hub PWA/手动 server_url 进「高级」折叠 |
| P3 | 防封可见不可扰 | P-MAX 状态店员能看懂(绿/黄/红 + 人话);熔断时自动停自动化,禁止静默硬跑 |
| P4 | 两种绑定分步引导 | ① 技术绑定(扫项目 QR → Agent↔SDK)② 业务绑定(存客宝/AI 扫码入库 CKB-147) |
| P5 | 失败可自助 | 每个 connect_stage 对应「下一步点哪里」;BIND-07 日志可在 APK 内复制给运维 |
十·二、信息架构(Tab 重构)
| Tab | 新名称 | 主内容 | 替换现有 |
|---|---|---|---|
| 首页 | 连接 | 四态大卡:Agent WS · SDK 在线 · Frida · 微信登录;connect_stage 人话;主 CTA「扫码绑定项目」/「重新连接」 |
DashboardFragment |
| 微信 | 微信 · 防封 | Hook 状态 · /antiban/status runtime(AB-02/03/05/06)· 今日配额/暖机 · 解封助手入口(WP-WX-03) · 扫码加友(WP-WX-04) |
WechatFragment |
| 设备 | 设备 · 绑定 | device_id 可复制 · 业务绑定指引(链 CKB-147)· MIUI 保活 checklist · 日志导出 | SettingsFragment + 部分 SetupActivity |
底部导航:图标 + 两字标签;在线时首页 Tab 角标绿点。
十·三、核心用户流程(须简化)
装 APK → 首次 3 步向导(联网 / 权限 / 扫码)
→ 自动 LAN 发现(8898 beacon)或扫项目 QR(BIND-04)
→ WS register 成功 → 首页全绿
→ 引导「下一步:打开存客宝扫本机 device_id 完成入库」
→ 日常使用:只看首页+微信 Tab;异常才进设备 Tab
| 步骤 | 页面 | UX 要求 |
|---|---|---|
| 1 | SetupActivity 向导 |
进度条 1/2/3;每步最多 1 个主按钮;跳过仅隐藏高级项 |
| 2 | 权限 | MIUI:自启动 · 省电无限制 · 通知 · 无障碍(灰色项可点进系统设置) |
| 3 | 扫码 | 全屏相机 · 手电筒 · 相册选 QR;解析 JSON 写 config + 自动 connect |
| 4 | 成功页 | 动画 → 显示 device_id(大字号可复制)+ 「去存客宝绑定」图文步骤 |
| 5 | 失败 | 阶段码 + 3 条建议(换 Wi‑Fi / 检查 NAS SDK / 联系管理员)+ 「重试扫码」 |
十·四、扫码绑定增强(BIND-04 · P0)
| # | 任务 | 验收 |
|---|---|---|
| UI-01 | 扫码页全屏 · 权限引导(相机) | 首次拒绝后可二次引导 |
| UI-02 | 扫成功 → 写 server/project/public_servers → 触发 AgentEngine.connect |
config.json 与 Python Agent 同协议 |
| UI-03 | 连接中展示 connect_stage(discovering/connecting/registering/online) |
与 /api/v3/connection/status 一致 |
| UI-04 | 在线后卡片展示 wxid/好友数(有则显示,无则「微信未登录」) | 对齐 CKB-143 设备详情字段 |
| UI-05 | BIND 公网/APK 扫码量产 E2E(§2.7 末项) | 真机 PNG:扫 QR → online → 存客宝可见 |
十·五、防封模块融合(P-MAX · 必须进 APK)
真源:防封共享基线 · SDK
AntiBanManager·RiskSentinel· hub 防封 Tab
| SDK 信号 | APK 展示 | 店员动作 |
|---|---|---|
runtime.circuit_breaker(AB-02) |
红条「已熔断,自动化已暂停」 | 等待或联系运营 |
runtime.long_pause(AB-03) |
黄条「长暂停中,约 N 分钟」 | 勿手动狂点发送 |
silent_throttle |
橙条「发送受限,请减慢操作」 | 暂停批量任务 |
risk_level / AB-06 |
微信 Tab 顶栏徽章 低/中/高 | 高风险禁开批量 |
warmup_72h / 新号 |
蓝条「暖机期,请勿群发/加友」 | 只人工聊天 |
needs_human |
弹窗阻断 + 停 Hook 任务 | 人工处理验证 |
待开发
- 微信 Tab 轮询
GET /api/v3/antiban/status?device_id=(本地 SDK loopback 或 NAS URL)✅ 2026-06-27 — 改为直读engine.getAntiBanStatus()内存(无 HTTP 开销);WechatFragment.refresh+updateAntiBanUI渲染 level/level_name/minute/hour/cooldown/nurture phase;AgentEngine.getAntiBanStatus()公开访问器;compileDebugKotlinBUILD SUCCESSFUL - 熔断/长暂停时同步暂停
NurtureScheduler/ 批量队列(与 SDK 一致)✅ 2026-06-27 —NurtureScheduler加@Volatile paused+pause()/resume()/isPaused()+shouldNurture()开头检查 paused +getStatus()加paused字段;AntiBanManager.riskSentinel回调联动(level>=3nurtureScheduler.pause()/ level<=1nurtureScheduler.resume());compileDebugKotlinBUILD SUCCESSFUL - 防封详情抽屉:今日发送数 · 最近高危动作 · 一键「打开 hub 防封页」(WebView 可选)✅ 2026-06-27 —
WechatFragment.showAntiBanDetailAlertDialog 展示 level/level_name/quota/cooldown/consecutive_failures/nurture phase + neutralButton 打开 hub 防封页(pwa_url);cardAntiBan 可点击
十·六、与私域银行跨端 REQ 对齐
| 跨端 REQ | APK 承接 |
|---|---|
| §〇 四端互通 | 首页展示「存客宝/触客宝/AI 可调」在线前提(SDK+WS 双绿)✅ 2026-06-27(fragment_dashboard.xml 加四端互通状态卡 · DashboardFragment.refresh isOnline && engine != null 时展示「在线 · 存客宝·触客宝·AI 数智员工 可调」/ 否则「离线 · 等待 SDK+WS 双绿」) |
| CKB-147 | 业务绑定步骤卡 + device_id QR 供存客宝扫 ✅ 2026-06-27(设备 Tab 引导卡 + device_id 二维码 JSON 化) |
| WP-CKB-143 | 绑定后展示 map 字段:工作手机 ID · wxid · 电量 ✅ 2026-06-27 真机验证(DashboardFragment.tvHardwareInfo 显示真实 wxid wxid_5g37snchpv8e22 · DeviceInfo.getWxid(context) 读 APP files/wxid_cache.txt · refresh_wxid_cache.sh 守护脚本用 adb su 读微信 SharedPreferences login_weixin_username 写入 · Frida system() 兜底 · 工作手机 ID + 电量已有 · SELinux category 限制 APP su 读微信文件,改用 adb su 写 APP files 方案) |
| WP-WX-03 | 微信 Tab「解封助手」→ 触发 unblock-customer-service + 进度 ✅ 2026-06-27(triggerUnblockAssistant 调 unblock_via_customer_service skill · Frida 未就绪诚实提示) |
| WP-WX-04 | 微信 Tab「收到二维码加好友」→ 相册/推送图入口 ✅ 2026-06-27(pickImageLauncher 相册选图 → 缓存文件 → add_friend_from_image skill · Frida 未就绪诚实 503) |
| WP-AGENT-01 | 去 Termux 依赖 · BootReceiver 自启 · 前台服务常驻 ✅ 2026-06-27(BootReceiver 接收 BOOT_COMPLETED → 读 prefs server_url/project_id/device_id · 已绑定或 auto_discover 时启动 AgentForegroundService · Android O+ startForegroundService · AgentForegroundService.initAndStartEngine 已处理空 serverUrl 走 beacon 自动发现 · Manifest 已注册 receiver + RECEIVE_BOOT_COMPLETED 权限) |
| WP-PMAX-01 | 十·五 防封 UI · MIUI Root 隐藏 checklist(设备 Tab)✅ 2026-06-27(fragment_settings_v2.xml 加 Root 隐藏清单卡 · SettingsFragment 三个按钮:① Magisk DenyList 跳 com.topjohnwu.magisk ② Shamiko 模块提示 ③ 检测 27042 端口 ShellExecutor 读 /proc/net/tcp grep :69A2) |
十·七、视觉与交互(简化规范)
| 项 | 要求 |
|---|---|
| 布局 | 单列卡片 · 主 CTA 每屏 ≤1 · 次要操作文字链 |
| 状态色 | 绿=在线 · 黄=连接中/预警 · 红=离线/熔断 · 灰=未配置 |
| 字体 | device_id / connect_stage 关键信息 ≥16sp · 可复制 |
| 动效 | 连接成功轻反馈 · 扫码成功 check 动画 · 禁止复杂转场 |
| 横屏 | 锁定竖屏(保持现有 SCREEN_ORIENTATION_PORTRAIT) |
十·八、验收(真机铁律)
| # | 场景 | 证据 |
|---|---|---|
| V1 | 新装 APK 走完 3 步向导 + 扫项目 QR → SDK devices 在线 |
PNG 成功页 + JSON register |
| V2 | 扫码失败 3 类(无网 / SDK 不可达 / QR 过期)UI 可读 | 各 1 张截图 |
| V3 | 防封熔断时 APK 红条 + 自动化暂停 | antiban status + APK 截图 |
| V4 | 技术绑定成功后,device_id 引导文案与 CKB-147 存客宝步骤一致 | 对照存客宝扫码页 |
| V5 | 24h 前台服务 + 换网自动重连(BIND-05) | 日志 connect_stage 序列 |
留痕目录:开发文档/8、部署/05-测试验收/YYYYMMDD_APK界面重构/(含 README + 小图嵌入)
需求互传:本 REQ 若发现存客宝扫码页/超管 map 文案需改 → 同步 全项目_进行中_20260613 §CKB-147 / §6.5(§〇 互传铁律)。
六、变更记录
| 日期 | 说明 |
|---|---|
| 2026-06-27 | WP-APK-UI-01 阶段 16-19 真机开发:① 阶段16 真机在线排查(USB+网络 adb 192.168.110.80:5555 · Redmi K70 Android 13 · Magisk Delta Root ✅ · 微信 8.0.69 · Agent 在线)② 阶段17 修复 Magisk 包名 bug(SettingsFragment.launchMagisk 改多包名兼容 com.topjohnwu.magisk+io.github.vvb2060.magisk · Magisk Delta 真机验证)③ 阶段18 启动 Frida 16.5.6(/data/local/tmp/frida-server-16 端口 19886 · frida -U/-H 192.168.110.80:19886 双通道 ✅ · Magisk 模块 Shamiko+LSPosed ✅)④ 阶段19 WP-CKB-143 wxid 真机实现(DeviceInfo.getWxid(context) 读 APP files/wxid_cache.txt · refresh_wxid_cache.sh 守护脚本 adb su 读微信 SharedPreferences login_weixin_username 写入 · SELinux category 限制 APP su 读微信文件,改用 adb su 写 APP files 方案 · UI 显示 wxid_5g37snchpv8e22 ✅);§十·六 WP-CKB-143 🟡→✅ · §十·六 7/7 全 ✅ · 子项 15/50(30%)· 真机 E2E 通道已建立 |
| 2026-06-27 | WP-APK-UI-01 阶段 15:WP-CKB-143 wxid UI 占位(DashboardFragment.tvHardwareInfo buildString 加 wxid 行 · hookOk 时「待 Hook 注入」/ 否则「—」 · 工作手机 ID + 电量已有 · wxid 需 Frida Hook engine 暂无通道);compileDebugKotlin BUILD SUCCESSFUL in 1m;§十·六 WP-CKB-143 🟡(部分完成,wxid 待 Hook)· §十·六 6/7 ✅ + 1 🟡 · 子项 15/50(30%) |
| 2026-06-27 | WP-APK-UI-01 阶段 14:assembleDebug 打包验证(./gradlew :app:assembleDebug BUILD SUCCESSFUL in 1m 20s · APK 7.1M app-debug.apk · 验证资源/清单/打包流程全通过);gitea 同步成功(commit 0447726c3 · 25 文件 +3733/-391 · 34084867e..0447726c3 main);GitHub push 卡住已 stop(网络慢,gitea 内网已同步);离线开发部分完成 · §十·六 6/7 ✅ · 子项 15/50(30%) · 剩余项需真机/跨端授权 |
| 2026-06-27 | WP-APK-UI-01 阶段 13:WP-PMAX-01 Root 隐藏 checklist(fragment_settings_v2.xml 保活卡后加 Root 隐藏清单卡 · SettingsFragment 三按钮:① btnRootDenyList 跳 Magisk App 提示勾选微信 ② btnRootShamiko 跳 Magisk 提示确认 Shamiko ③ btnRootCheckPort ShellExecutor.execute 读 /proc/net/tcp grep :69A2(0x69A2=27042)检测 Frida 默认端口 · 加 launchMagisk 辅助 + scope + onDestroyView);compileDebugKotlin BUILD SUCCESSFUL in 1m 15s;§十·六 WP-PMAX-01 ✅ · §十·六 7 项全 ✅ · 子项 15/50(30%) |
| 2026-06-27 | WP-APK-UI-01 阶段 12:§〇 四端互通首页状态卡(fragment_dashboard.xml GridLayout 后加四端互通状态卡 · DashboardFragment.refresh isOnline && engine != null 时 tvInteropStatus 绿「在线」+ tvInteropDetail「存客宝·触客宝·AI 数智员工 可调」/ 否则红「离线」+「等待 SDK+WS 双绿」);compileDebugKotlin BUILD SUCCESSFUL in 1m 9s;§十·六 §〇 四端互通 ✅ · 子项 15/50(30%·§十·六为REQ对齐表不计入子项) |
| 2026-06-27 | WP-APK-UI-01 阶段 11:WP-AGENT-01 BootReceiver 自启核验(BootReceiver.kt 已存在且实现完整 · 接收 BOOT_COMPLETED → 读 prefs server_url/project_id/device_id · 已绑定或 auto_discover 时启动 AgentForegroundService · Android O+ startForegroundService · AgentForegroundService.initAndStartEngine 已处理空 serverUrl 走 beacon 自动发现 · Manifest 已注册 receiver 第56-63行 + RECEIVE_BOOT_COMPLETED 权限第16行);compileDebugKotlin BUILD SUCCESSFUL in 19s;§十·六 WP-AGENT-01 ✅ · 子项 15/50(30%·§十·六为REQ对齐表不计入子项) |
| 2026-06-27 | WP-APK-UI-01 阶段 10:WP-WX-04 相册选图加友入口(WechatFragment.pickImageLauncher registerForActivityResult 相册选图 · handlePickedImage URI→缓存文件→add_friend_from_image skill · Frida 未就绪诚实 503 · 用后删除临时文件);补标 §十·六 WP-WX-03/CKB-147 APK 承接 ✅;compileDebugKotlin BUILD SUCCESSFUL;§十·六 WP-WX-04 ✅ |
| 2026-06-27 | WP-APK-UI-01 阶段 9:CKB-147 业务绑定二维码 JSON 化(SettingsFragment.showDeviceQr 二维码内容从纯 device_id 改为标准 JSON {"device_id","server","project"} · 与扫码绑定 QR 格式对称 · 存客宝扫码即可识别设备归属服务器/项目入库 · 弹窗文案优化);compileDebugKotlin BUILD SUCCESSFUL;§二.10 业务绑定指引项 ✅ · 子项 15/50(30%) |
| 2026-06-27 | WP-APK-UI-01 阶段 8:SetupActivity 绑定过程实时 connect_stage 显示(handleConfig startAgentService 后轮询 engine.wsManager.state + getConnectStage() 每500ms · stageText() 复用 DashboardFragment 人话映射 primary→主服务器/lan→局域网服务器/public→公网备用 · CONNECTED→成功页 · 15s超时→失败提示);compileDebugKotlin BUILD SUCCESSFUL;§二.10 扫码绑定 UX 项 ✅ · 子项 12/50(24%) |
| 2026-06-27 | WP-APK-UI-01 阶段 7:AB-06 高风险禁批量(RiskSentinel.currentLevel() 公开 · AntiBanManager.canBatch() level<3 · AIBrain.batchGate 闸门属性 · AgentEngine init 注入 antiBan::canBatch · heartbeatCycle/chatAndExecute 两处批量入口 level>=3 整批跳过返回 429);compileDebugKotlin BUILD SUCCESSFUL;§二.10 防封模块 AB-06 ✅ · 子项 11/50(22%) |
| 2026-06-27 | WP-APK-UI-01 阶段 6:AB-02 熔断联动 NurtureScheduler(NurtureScheduler 加 @Volatile paused + pause()/resume()/isPaused() + shouldNurture() 检查 paused + getStatus() 加 paused 字段 · AntiBanManager.riskSentinel 回调 level>=3 暂停 / level<=1 恢复);compileDebugKotlin BUILD SUCCESSFUL;§十·五 熔断同步暂停项 ✅ · 子项 10/50(20%) |
| 2026-06-27 | WP-APK-UI-01 阶段 5:AB-03 长暂停黄条(level==2 橙黄「风险较高,已降速」· bg_pill_connecting)+ 防封详情弹窗(showAntiBanDetail AlertDialog 展示 level/quota/cooldown/consecutive_failures/nurture + neutralButton 打开 hub 防封页 · cardAntiBan 可点击);compileDebugKotlin BUILD SUCCESSFUL;§十·五 防封详情抽屉项 ✅ · 子项 9/50(18%) |
| 2026-06-27 | WP-APK-UI-01 阶段 4:connect_stage 人话映射(AgentEngine.getConnectStage() 公开访问器 · DashboardFragment.refresh 映射 primary→主服务器/lan→局域网服务器/public→公网备用 · fragment_dashboard.xml tvConnectStage 行);compileDebugKotlin BUILD SUCCESSFUL;§二.10 扫码 UX connect_stage 人话 ✅ |
| 2026-06-27 | WP-APK-UI-01 阶段 3:SetupActivity 重构为 3 步向导(ViewFlipper 4 页:① 联网检查 ConnectivityManager/NetworkCapabilities · onResume 重检 ② MIUI 保活 4 项跳系统设置 ③ 扫码/LAN 发现 ④ 成功页 device_id monospace + 复制 + 进入主页);保留 adb 注入配置跳过向导;compileDebugKotlin BUILD SUCCESSFUL;§二.10 3 步向导/扫码 UX 项部分 ✅ |
| 2026-06-27 | WP-APK-UI-01 阶段 2:SettingsFragment 改造为「设备·绑定」Tab(title 改「设备」+ device_id 16sp monospace + 复制按钮 + zxing MultiFormatWriter 生成 device_id 二维码 + CKB-147 业务绑定三步指引卡 + MIUI 保活 checklist 4 项跳系统设置);compileDebugKotlin BUILD SUCCESSFUL;§二.10 业务绑定指引项部分 ✅ |
| 2026-06-27 | WP-APK-UI-01 阶段 1:三 Tab 改名(连接/微信·防封/设备)+ WechatFragment 防封 runtime 信号融合(AB-02 熔断 Banner + level/level_name/minute/hour/cooldown/nurture phase)+ 解封助手/扫码加友入口按钮;AgentEngine.getAntiBanStatus() 公开访问器;compileDebugKotlin BUILD SUCCESSFUL;§十·五 轮询项 ✅ |
| 2026-06-16 | integration_manifest other 桶清零(antiban/customer/stability 归类)· 容器内 manifest other=0 PASS |
| 2026-06-16 | WP-WX-04 app/agent 与 agent 双份 skill 同步;MCP 绑定修复 ct_0784cc85 |
| 2026-06-16 | WP-WX-04 04.1/04.2 ✅ 契约+Agent u2 链路;子项 5/46;MCP 中断修复 ct_9bb14f7d |
| 2026-06-13 | WP-APK-UI-01 APK 界面深度重构:三 Tab · 扫码绑定 UX · 防封融合 · 量产流程(§十) |
| 2026-06-13 | §〇:四端互通 · 需求互传 · 可持续对话每轮必读(链全项目总纲) |
| 2026-06-13 | 换日分拣:0612 全文 → modify需求归档_20260613/;✅ 迁 工作手机_0613已完成项归档;§测试 ACC 入库 |
| 2026-06-13 | WP-WX-03/04 卡若口述 §九 |
| 2026-06-14 | 防自动中断:主控 CHECKLIST_CHUNK/PHASE+Frida探针+run_checklist_anti_interrupt.sh+fix_persistent_chat_no_interrupt.sh |