Files
wx-win-agent/docs/validation/WebUI-MCP-single-client-2026-09-19.md
T

6.7 KiB
Raw Blame History

Web UI / MCP 单 Client 生产验证记录(2026-09-19

验证范围

通过项目 .mcp.json 连接 Windows MCP,在已登录、未锁定的 Session 1 中验证一个真实微信 Client(账号 Rogee)。本轮不验证添加好友和多 Client;只使用白名单对象:文件传输助手、Hao 豪、吉祥三宝、消息测试专用群组。

连接与放行

  • .mcp.jsonwindows-ui endpointhttp://10.1.1.101:8765/mcp;连接成功。
  • Windows WxAgent.Tray 在 Session 1 运行;微信版本由 status 报告为 4.1.13.65
  • GET /api/v1/status 返回 200service、WeChat、session、window 和 active account binding 均可用,未使用 Session 0。
  • UI target 11460:81724928 与账号 Rogee 绑定,isBound=true
  • 本轮在单 Client 的 service.json 显式启用 enableValidationOperations=truelocal-admin 凭据获得 write 权限。代码默认仍为关闭,普通部署不自动放行写操作。
  • capability 当前启用 session-opensessions-scrollsend-textbroadcast-text;两种写能力仅因本机明确授权的 enableValidationOperations=true 而开放,普通部署仍保持只读。group-at-all 保持 disabled,因为当前 Client 没有注册该独立操作。群消息和受控群发均使用已确认的会话 automation ID。

只读结果

  • UIA 真实会话列表导出 16 个条目,包含“文件传输助手”“Hao 豪”“吉祥三宝”等。
  • 当前会话读取成功为“文件传输助手”。消息 API 返回 200,4 条真实消息,类型为 Text/Merge/File/Text;使用 includeContent=false 验证脱敏读取。
  • 联系人读取分别命中“文件传输助手”“Hao 豪”“吉祥三宝”;群查询命中“消息测试专用群组”(群 ID 不写入本记录)。
  • 名称不唯一/不存在时 API 返回 409 NotFoundretry=false;没有自动猜测、跨目标改投或自动重试。

写操作结果

文件传输助手

  • 首次通过服务操作提交的错误 target 格式(联系人 ID filehelper)得到 Unconfirmed / ExecutionFailedhasSideEffects=true;未重放、未自动重试。
  • 随后使用 Windows MCP 在真实微信输入框发送唯一测试标记 [WxAgent验证] UI 单 Client 发送验证 20260919-0239;UIA 消息列表出现该消息,写后确认通过。

吉祥三宝群

  • 使用可见会话 automation ID session_item_吉祥三宝 提交 confirmed send-text,操作 IDc3be6c1e07c14c2f9fdc685357c44993
  • 结果:state=Succeededstage=completehasSideEffects=true
  • 相同 idempotency key 重放返回同一 operation ID,没有创建重复操作;验证了幂等防重。
  • 微信真实会话列表的“吉祥三宝”预览出现唯一测试标记 [WxAgent验证] 单 Client 群消息验证 吉祥三宝 20260919-0258,作为写后 UI 确认。
  • confirmed=false 的负向请求返回 HTTP 409 ConfirmationRequiredretry=false,没有执行。

多目标文本群发(broadcast-text

  • 原始 HTTP 响应、请求 fixture、能力/授权状态、幂等重放、确认门禁、只读 sessions/messages 响应和 MCP UIA 摘录已保存于 evidence/WebUI-MCP-single-client-2026-09-19/,其中 README.mdmanifest.jsonsha256sums.txt 说明采集边界、脱敏规则和校验方式。
  • 使用真实 Client API 提交 kind=broadcast-text,请求携带两个当前可见且唯一的会话 automation IDsession_item_文件传输助手session_item_吉祥三宝,并设置 confirmed=truestopOnError=true。服务在执行前冻结该名单,不使用联系人 ID 猜测或跨目标改投。
  • 首次诊断操作 7b3a9ff33550489eb7fe50478bbd1155 曾在文件传输助手成功后因吉祥三宝 ControlNotFoundstopOnError 停止;该记录保留为失败停止和幂等证据,未自动重试。
  • 修正 UI 会话切换为可见中心点击,并将等待聊天页从 2.5 秒扩大到 10 秒后,重新部署最新 self-contained Tray。最终验收操作 ID463b37b2e0944525af4ded822dddaf8cCorrelation ID33d6e14673834c64b5d470a07687c760state=Succeededstage=completeerrorCode=null
  • 最终操作冻结同一两个白名单目标:文件传输助手 Succeeded、吉祥三宝 Succeededstopped=falsestopReason=null。这证明了真实多对象名单冻结、串行逐项发送、两个目标写后确认和成功群发。
  • 相同 idempotencyKey=wxagent-single-20260919-broadcast-final-001 重放返回同一个操作 ID和相同 Succeeded 结果(重放请求 Correlation ID858fd45fc16e4b1383909d4d406ae8bc),没有创建第二次群发。服务 capability 实际返回 send-text/broadcast-textimplemented=truevalidated=trueenabled=truerequiresConfirmation=true,微信版本 4.1.13.65group-at-all 仍为 disabled。
  • 群发结束后分别用只读 GET /api/v1/messages 查询两个 automation ID 对应会话,均返回 4 条可见消息,并在不记录完整正文的前提下确认本次唯一标记存在(markerConfirmed=true)。

未通过/保持禁用

  • 消息测试专用群组 当前搜索结果存在多个同名项,使用联系人群 ID 的操作返回 Unconfirmed / NotFound;未猜测目标、未重试,仍保持该路径禁用。
  • group-at-all 独立能力没有注册操作,仍禁用;本轮不宣称已验证 @所有人。
  • 添加好友未验证,入口继续禁用。
  • 多 Client、跨 Client 故障恢复和远程控制面任务流不属于本轮证据。

自动检查

  • cd control-plane && go test ./...:通过。
  • cd control-plane/web && npm run build:通过。
  • dotnet test tests/node-agent/WxAgent.Core.Tests -c Release --no-restore168 tests 通过。
  • dotnet test tests/node-agent/WxAgent.Service.Tests -c Release --no-restore23 tests 通过,包含 broadcast-text 冻结、顺序、停止、幂等和后台监听默认关闭覆盖。
  • dotnet build WxAgent.sln -c Release -p:EnableWindowsTargeting=true --no-restore0 warnings、0 errors。
  • git diff --check、Go gofmt:通过。

风险与后续

  • 版本证据不一致已在最终部署中修正:GET /api/v1/capabilities 与 status 均报告微信 4.1.13.65send/broadcast 均为 validated=true
  • 首次诊断中的错误 target 保留为失败停止证据;没有重试该不确定操作,修复后使用新的显式幂等键完成最终成功验收。
  • 早期诊断曾出现 60 秒 sessions 队列超时;修复后连续 3 次 sessions 刷新均 HTTP 200、约 2.12.3 秒,且两个目标的只读 marker 回读均成功,不再作为本轮验收阻塞项。
  • 当前验证模式只应留在这台明确授权的单 Client;未授权部署必须保持默认只读。