跳转至

Mantis Slack 桌面运行手册

Mantis Slack 桌面 QA 是面向 Slack 类缺陷的真实 UI 通道,这类缺陷需要 Linux 桌面、VNC 救援、Slack Web、真实的 OpenClaw 网关、截图、视频和 PR 证据评论。当单元测试或无头 Slack 实时通道无法证明该缺陷时,请使用它。

术语

  • Mantis - 运行这些场景并发布可视化 CI 证据和 PR 评论的 OpenClaw 系统。
  • Crabbox - 提供预热 Linux 机器、租约和 VNC 访问权限的 openclaw/crabbox 服务。
  • Convex - 凭据代理,它将 QA Slack 凭据租借给一次运行,因此工作流只需要 Convex 代理密钥,而永远不需要原始 Slack 令牌。
  • 热租约 - 来自先前运行且仍然存活的 Crabbox 租约。热租约可以保留已登录的浏览器配置文件、pnpm 缓存和准备好的源码检出。

存储模型

Mantis 使用三个存储层:

  • 提供商镜像 - 由 Crabbox 拥有,存储在云提供商账户中。包含机器能力(Chrome/Chromium、ffmpeg、scrot、Node/corepack/pnpm、原生构建工具)和空的缓存目录。
  • 热租约状态 - 由当前操作员会话拥有。在租约存活期间,可以保存已登录的浏览器配置文件、/var/cache/crabbox/pnpm 和准备好的源码检出。
  • Mantis 工件 - 由 OpenClaw 运行拥有。位于 .artifacts/qa-e2e/mantis/... 下。GitHub Actions 会上传它们,Mantis GitHub App 会在 PR 上评论内联证据。

切勿将机密、浏览器 Cookie、Slack 登录状态、仓库检出、node_modules 或 dist/ 固化到提供商镜像中。

重用 --output-dir 会替换当前运行的证据,同时保留不相关的诊断和未选中的审批检查点。每次运行根据其自身暂存的传入工件来确定判定。共享固定输出路径的并发运行可能会交错文件和摘要。当并发运行需要一致的每运行捆绑包时,必须使用单独的输出目录。

GitHub 调度

从 main 运行工作流:

gh workflow run mantis-slack-desktop-smoke.yml \
  --ref main \
  -f candidate_ref=<trusted-ref-or-sha> \
  -f pr_number=<pr-number> \
  -f scenario_id=slack-canary \
  -f crabbox_provider=aws \
  -f keep_vm=false \
  -f hydrate_mode=source

candidate_ref 受到限制,因为工作流使用实时凭据:它必须解析为当前 main 的祖先提交、发布标签或 openclaw/openclaw 中打开的 PR 头部分支。

工作流会生成:

  • 上传的工件 mantis-slack-desktop-smoke-<run-id>-<attempt>
  • 来自 Mantis GitHub App 的内联 PR 评论
  • slack-desktop-smoke.png、slack-desktop-smoke.mp4
  • slack-desktop-smoke-preview.gif、slack-desktop-smoke-change.mp4
  • mantis-slack-desktop-smoke-summary.json、mantis-slack-desktop-smoke-report.md
  • 远程日志:slack-desktop-command.log、openclaw-gateway.log、chrome.log、ffmpeg.log

PR 评论通过隐藏的 <!-- mantis-slack-desktop-smoke --> 标记就地更新。

本地 CLI

冷源码验证:

pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --gateway-setup \
  --credential-source convex \
  --credential-role maintainer \
  --provider-mode live-frontier \
  --model openai/gpt-5.4 \
  --alt-model openai/gpt-5.4 \
  --scenario slack-canary \
  --hydrate-mode source

保留 VM 以进行 VNC 救援:

pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --gateway-setup \
  --scenario slack-canary \
  --keep-lease

打开 VNC:

crabbox vnc --provider aws --id <cbx_id> --open

重用热租约:

pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --lease-id <cbx_id-or-slug> \
  --gateway-setup \
  --scenario slack-canary \
  --hydrate-mode source

仅当重用的远程工作区已有 node_modules 和构建好的 dist/ 时,才使用 --hydrate-mode prehydrated。否则 Mantis 将保守失败。

验证原生 Slack 审批 UI:

pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --approval-checkpoints \
  --credential-source convex \
  --credential-role maintainer \
  --hydrate-mode source

--approval-checkpoints 与 --gateway-setup 互斥。除非你为审批检查点显式传入 --scenario,否则它会运行可选的 slack-approval-exec-native 和 slack-approval-plugin-native 场景。其他 Slack 场景会在 VM 启动前被拒绝。Slack QA 运行器根据其观察到的真实 Slack API 消息写入每个检查点 JSON 文件,然后远程监视器将该消息渲染为 approval-checkpoints/<scenario>-pending.png 和 approval-checkpoints/<scenario>-resolved.png。如果任何检查点 JSON、消息证据、ACK JSON 或渲染截图缺失或为空,运行将失败。

冷 GitHub Actions 租约没有 Slack Web Cookie,因此它们的浏览器捕获可能会落在 Slack 登录屏幕上。对于审批检查点证明,请信任渲染的检查点图像和 Slack QA 工件,而不是 slack-desktop-smoke.png。仅当浏览器截图本身必须显示 Slack Web 时,才使用带手动登录的 Slack Web 配置文件的保留热租约。

预热模式

模式 使用时机 远程行为 权衡
source 常规 PR 验证、冷机器、CI 在 VM 内运行 pnpm install --frozen-lockfile --prefer-offline 和 pnpm build 最慢,但提供最强的源码检出验证
prehydrated 你有意准备了一个供重用的租约 需要已存在的 node_modules 和 dist/;跳过安装/构建 快速,但仅适用于操作员控制的热租约
模式 适用场景 远程行为 权衡

GitHub Actions 始终会在 VM 运行之前准备好候选检出。其 pnpm 存储会按操作系统、Node 版本和 lockfile 进行缓存。当存在时,VM source 运行 也会复用 /var/cache/crabbox/pnpm。

计时解释

mantis-slack-desktop-smoke-report.md 包含阶段计时:

  • crabbox.warmup - 云提供商启动、桌面/浏览器就绪、SSH。
  • crabbox.inspect - 租约元数据查询。
  • credentials.prepare - Convex 凭据租约获取。
  • crabbox.remote_run - 同步、浏览器启动、OpenClaw 安装/构建或 hydrate 验证、网关启动、截图和视频捕获。
  • artifacts.copy - 从 VM 通过 rsync 回传。

当 Crabbox 返回非零远程状态,但 Mantis 已复制了元数据,证明 OpenClaw 网关 设置已完成或 Slack QA 命令本身成功退出时,crabbox.remote_run 可能显示 accepted。将 accepted 视为带说明的通过,而不是失败场景。

如果某次运行较慢:

  • 预热占主导:预烘焙或推广更好的 Crabbox 提供商镜像。
  • 在 source 中 remote_run 占主导:使用热租约、提高 pnpm 存储 复用,或将机器前置条件移入提供商镜像。
  • 在 prehydrated 中 remote_run 占主导:远程工作区实际上未 就绪,或网关/浏览器/Slack 设置较慢。
  • 工件复制占主导:检查视频大小和工件目录内容。

证据清单

一个好的 PR 评论应包含:

  • 场景 ID 和候选 SHA
  • GitHub Actions 运行 URL 和工件 URL
  • 内联审批检查点截图,或来自已登录热租约的 Slack Web 截图
  • 可用时内联动画预览
  • 完整 MP4 和裁剪 MP4 链接
  • 通过/失败状态以及报告的计时摘要

不要将截图或视频提交到仓库。将它们保留在 GitHub Actions 工件或 PR 评论中。

故障处理

如果工作流在 VM 运行之前失败,请先检查 Actions 作业。 常见原因:不受信任的 candidate_ref、缺少环境密钥,或候选 安装/构建失败。

如果 VM 运行失败但截图已复制回来,请检查:

cat mantis-slack-desktop-smoke-report.md
cat mantis-slack-desktop-smoke-summary.json
cat slack-desktop-command.log
cat openclaw-gateway.log
cat chrome.log
cat ffmpeg.log

如果运行保留了租约,请使用报告中的 crabbox vnc ... 命令打开 VNC,完成后停止租约:

crabbox stop --provider aws <cbx_id-or-slug>

如果 Slack 登录已过期,请在保留的租约上通过 VNC 修复,并使用 --lease-id 重新运行。不要将该浏览器配置文件烘焙到提供商镜像中。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw