Files
workphone-sdk/sdk/scripts/aochuang_protocol_coverage.py

152 lines
8.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
奥创 SDK 通信协议(客服通信接口总目录 · EnumMsgType 指令类 Task↔ 工作手机 SDK action 覆盖矩阵。
目的:对照奥创 proto 的服务端→设备「指令类任务」(1070-1270),核对本 SDK 是否已具备
可下发的等价 actionACTION_TO_RPC + ACTION_ALIASES catalog。锁定真实缺口禁止漏项。
用法: python3 sdk/scripts/aochuang_protocol_coverage.py [--md 输出.md]
真机铁律:本脚本仅做「能力覆盖」静态核对,不代表真机已验收。
"""
from __future__ import annotations
import argparse
import re
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
HE = ROOT / "sdk/agent/hook/hook_executor.py"
# 奥创协议「服务端/PC → 设备」指令类任务枚举 → 本 SDK 期望 actionNone = 缺口)
# 依据 资料/工作手机客服通信接口总目录(带通信协议)SDK.doc EnumMsgType
PROTO_TASKS: dict[str, tuple[str, str | None]] = {
"TalkToFriendTask(1070)": ("给好友发消息", "send_message"),
"PostSNSNewsTask(1071)": ("发朋友圈", "post_moments"),
"AddFriendsTask(1072)": ("主动添加好友", "add_friend"),
"DeleteSNSNewsTask(1074)": ("删除朋友圈", "delete_moments"),
"AcceptFriendAddRequestTask(1075)": ("接受好友请求", "accept_friend"),
"WeChatGroupSendTask(1076)": ("群发消息", "mass_send"),
"WeChatMaintenanceTask(1077)": ("养号任务", "start_nurture"),
"RequestTalkDetailTask(1078)": ("请求图片/视频详情", "get_message_raw_xml"),
"PullWeChatQrCodeTask(1079)": ("上传当前微信二维码", "generate_my_qr_code"),
"TriggerFriendPushTask(1080)": ("推送好友列表", "get_contacts"),
"TriggerCirclePushTask(1081)": ("推送朋友圈列表", "get_moments"),
"CircleCommentDeleteTask(1082)": ("朋友圈评论删除", "delete_moment_comment"),
"CircleCommentReplyTask(1084)": ("朋友圈评论回复", "reply_moment_comment"),
"TriggerMessageReadTask(1086)": ("聊天窗口置已读", "mark_conversation_read"),
"RevokeMessageTask(1087)": ("消息撤回", "revoke_message"),
"ForwardMessageTask(1088)": ("转发消息", "forward_message"),
"TriggerHistoryMsgPushTask(1089)": ("推送历史聊天记录", "get_recent_messages"),
"PullChatRoomQrCodeTask(1090)": ("获取群二维码", "generate_group_qr_code"),
"SendMultiPictureTask(1091)": ("发送多张图片", "send_multi_image"),
"ForwardMultiMessageTask(1092)": ("转发多条消息", "forward_multiple"),
"PostFriendDetectTask(1095)": ("清粉任务", "detect_zombie_fans"),
"PostStopFriendDetectTask(1096)": ("终止清粉", "stop_detect_zombie_fans"),
"PostMomentsPraiseTask(1098)": ("朋友圈点赞", "like_moments"),
"PostStopMomentsPraiseTask(1099)": ("停止朋友圈点赞", "stop_moments_praise"),
"PostStopWeChatMaintenanceTask(1100)": ("养号停止", "stop_nurture"),
"ModifyFriendMemoTask(1101)": ("修改备注", "set_friend_remark"),
"AddFriendWithSceneTask(1102)": ("场景加好友", "add_friend_with_scene"),
"TakeLuckyMoneyTask(1200)": ("领取红包/转账", "receive_red_packet"),
"PullFriendCircleTask(1201)": ("获取指定好友朋友圈", "get_friend_moments"),
"PullCircleDetailTask(1202)": ("获取朋友圈图片", "get_moment_detail"),
"CircleLikeTask(1203)": ("单条朋友圈点赞", "like_moments"),
"TriggerChatroomPushTask(1210)": ("推送群聊列表", "get_groups"),
"RequestChatRoomInfoTask(1211)": ("群聊详情", "get_group_info"),
"RequestContactsInfoTask(1212)": ("联系人详情", "get_contact_info"),
"ChatRoomActionTask(1213)": ("群聊管理", "set_group_name"),
"AddFriendInChatRoomTask(1214)": ("群内加好友", "add_friend_in_room"),
"AddFriendFromPhonebookTask(1215)": ("通讯录加好友", "add_friend_from_phonebook"),
"DeleteFriendTask(1216)": ("删除好友", "delete_friend"),
"SendLuckyMoneyTask(1217)": ("发红包", "send_red_packet"),
"RequestTalkContentTask(1218)": ("获取消息原始xml", "get_message_raw_xml"),
"ForwardMessageByContentTask(1220)": ("转发消息内容", "forward_message"),
"ChatRoomInviteApproveTask(1221)": ("群主确认入群申请", "approve_group_invite"),
"WechatLogoutTask(1222)": ("微信登出", "logout"),
"PhoneActionTask(1223)": ("手机操作(重启等)", "phone_action"),
"ContactLabelTask(1224)": ("设置联系人标签", "set_contact_label"),
"ContactLabelDeleteTask(1225)": ("删除联系人标签", "delete_label"),
"VoiceTransTextTask(1226)": ("语音转文字", "voice_to_text"),
"FindContactTask(1227)": ("查找微信联系人", "search_contacts"),
"AgreeJoinChatRoomTask(1229)": ("同意加入群聊", "agree_join_group"),
"ClearAllChatMsgTask(1230)": ("清空聊天记录", "clear_chat_history"),
"SendFriendVerifyTask(1231)": ("聊天界面发送朋友验证", "send_friend_verify"),
"TriggerConversationPushTask(1232)": ("会话列表推送", "get_conversations"),
"WechatSettingTask(1233)": ("微信设置(昵称/头像)", "set_nickname"),
"PullFriendAddReqListTask(1234)": ("加好友请求列表", "get_friend_requests"),
"TriggerBizContactPushTask(1235)": ("公众号列表", "get_official_accounts"),
"AddFriendNameCardTask(1236)": ("名片加好友", "add_friend_by_card"),
"TriggerChatMsgIdsPushTask(1251)": ("时间段内 msgSvrId", "get_msg_ids_by_time"),
"RequestTalkMsgTask(1252)": ("按 msgSvrId 取消息", "get_message_by_id"),
"SearchBizContactTask(1254)": ("搜索公众号/小程序", "search_official_account"),
"PhoneStateTask(1256)": ("手机状态(电量/存储)", "get_device_info"),
"WeChatLocationTask(1258)": ("微信查手机位置", "get_wechat_location"),
"RemittanceTask(1260)": ("转账", "send_transfer"),
"WalletBalanceTask(1262)": ("钱包余额", "get_wallet_balance"),
"QueryHbDetailTask(1265)": ("查询红包详情", "query_red_packet"),
"JoinGroupByQrTask(1267)": ("扫二维码进群", "join_group_by_qr"),
"SendJielongTask(1268)": ("发接龙消息", "send_jielong"),
"ContactSetLabelTask(1270)": ("设置用户标签", "set_contact_label"),
"WechatLogoutTask(cmd)": ("账号登出命令", "logout"),
"PhoneActionTask(cmd-reboot)": ("重启手机等命令", "phone_action"),
"UpgradeDeviceAppNotice(cmd)": ("软件升级通知", "check_for_update"),
}
def load_sdk_catalog() -> set[str]:
text = HE.read_text(encoding="utf-8", errors="ignore")
a = text.split("ACTION_TO_RPC:", 1)[1].split("ACTION_ALIASES:", 1)[0]
b = text.split("ACTION_ALIASES:", 1)[1].split("\n\n", 1)[0]
rpc = set(re.findall(r'"([a-z_]+)"\s*:', a))
alias = set(re.findall(r'"([a-z_]+)"\s*:', b))
return rpc | alias
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--md", default="")
args = ap.parse_args()
catalog = load_sdk_catalog()
covered, gaps = [], []
for task, (cn, action) in PROTO_TASKS.items():
if action and action in catalog:
covered.append((task, cn, action))
elif action and action not in catalog:
gaps.append((task, cn, f"{action}(映射缺失)"))
else:
gaps.append((task, cn, "无对应 action"))
total = len(PROTO_TASKS)
lines = [
"# 奥创协议 ↔ 工作手机 SDK action 覆盖矩阵",
"",
f"> 真源:`资料/工作手机客服通信接口总目录(带通信协议)SDK.doc` · 自动生成 `sdk/scripts/aochuang_protocol_coverage.py`",
f"> 指令类任务 **{total}** 项 · 已覆盖 **{len(covered)}** · 缺口 **{len(gaps)}** · 覆盖率 **{len(covered)*100//total}%**",
"> 真机铁律:覆盖=能力映射就绪;真机 E2E 另见验收清单,禁止无证据标功能 ✅",
"",
"## 一、已覆盖",
"",
"| 协议任务 | 中文 | SDK action |",
"|:---|:---|:---|",
]
for t, cn, a in covered:
lines.append(f"| {t} | {cn} | `{a}` |")
lines += ["", "## 二、缺口(待补 action", "", "| 协议任务 | 中文 | 现状 |", "|:---|:---|:---|"]
for t, cn, a in gaps:
lines.append(f"| {t} | {cn} | {a} |")
md = "\n".join(lines) + "\n"
if args.md:
Path(args.md).write_text(md, encoding="utf-8")
print(f"已写入 {args.md}")
print(f"覆盖 {len(covered)}/{total} · 缺口 {len(gaps)}")
for t, cn, _ in gaps:
print(f" GAP {t} {cn}")
return 0
if __name__ == "__main__":
sys.exit(main())