跳转至

QA 频道

qa-channel 是仓库本地的合成消息传输,用于自动化 OpenClaw QA(extensions/qa-channel,私有包,不包含在打包安装中)。它不是生产通道——其存在是为了验证真实传输所使用的同一通道插件边界,同时保持状态确定且完全可检查。

功能

  • Slack 类目标语法:
  • dm:<user>
  • channel:<room>
  • group:<room>
  • thread:<room>/<thread>
  • 共享的 channel: 和 group: 会话会以群组/频道房间回合的形式呈现给代理,因此它们会验证 Discord、Slack、Telegram 及类似传输所使用的同一可见回复和消息工具路由策略。
  • 省略 target 和 to 的消息发送会保留入站会话类型:直接、群组或频道。
  • 在线程化的入站会话中的发送会继承其线程,包括发送到同一显式根目标的发送。topLevel: true 或 threadId: null 会抑制隐式线程和回复继承。显式线程目标、线程 ID 和 replyTo 值会被保留。
  • 基于 HTTP 的合成总线,用于入站消息注入、出站转录捕获、线程创建、表情回应、编辑、删除以及搜索/读取操作。
  • 携带媒体的流式回复会同时传递附件和当前工具跟踪。只有当其说明文本和工具跟踪已经成功传递时,后续相同的纯文本最终回复才会被抑制。
  • 主机端自检运行器,会将 Markdown 报告写入 .artifacts/qa-e2e/。

出站工具跟踪会记录脱敏后的工具启动,包括 Code Mode 包装器和嵌套调用。它不能证明成功完成。QA Lab 从关联的转录调用和结果中推导逻辑工具活动,并保留调用标识和包装器谱系。具有不同标识的重复执行仍保持独立;Code Mode 包装器不会为其嵌套工具额外增加一次成功,非零 shell 退出码也不是成功执行。任务跟进检查会使用此活动来证明在最终回复之前发生了串行读取和写入,并结合工件的修改时间。显式检查 Code Mode 控制协议的场景会在其转录摘要中包含控制活动。

配置

{
  "channels": {
    "qa-channel": {
      "baseUrl": "http://127.0.0.1:43123",
      "botUserId": "openclaw",
      "botDisplayName": "OpenClaw QA",
      "allowFrom": ["*"],
      "pollTimeoutMs": 1000
    }
  }
}

账户键:

  • enabled - 此账户的主开关。
  • name - 可选显示标签。
  • responsePrefix - 自动回复前缀;账户覆盖优先。接受字面量、用于代理身份名称的 "auto"、类似 "[{model}]" 的模板,或 "" 以禁用继承的前缀。
  • baseUrl - 合成总线 URL。设置此项后,账户即视为已配置。
  • botUserId - 目标语法中使用的合成机器人用户 ID(默认:openclaw)。
  • botDisplayName - 出站消息的显示名称(默认:OpenClaw QA)。
  • pollTimeoutMs - 长轮询等待窗口。100 到 30000 之间的整数(默认:1000)。
  • mediaMaxMb - 入站字节和出站文件的每个附件 MiB 限制。命名账户覆盖通道根,然后 agents.defaults.mediaMaxMb 提供回退值。如果未设置,则应用现有媒体存储和加载器默认值。超大的入站附件会变成给模型的附件不可用通知。通道在发布每个出站批次之前会加载它,因此失败的附件会阻止该批次发送。共享回复准备可以先移除超大的本地文件,并保留有效附件并给出警告。
  • allowFrom - 发送者允许列表(用户 ID 或 "*";默认:["*"])。DM 始终采用 open 策略;允许列表群组策略也使用这些合成发送者 ID。
  • groupPolicy - 共享房间策略:"open"(默认)、"allowlist" 或 "disabled"。
  • groupAllowFrom - 可选的共享房间发送者允许列表。在 "allowlist" 下省略时,QA Channel 会回退到 allowFrom。
  • groups.<room>.requireMention - 在特定群组/频道房间中回复前要求提及机器人(默认:false)。groups."*" 设置默认值;每个房间的 tools / toolsBySender 设置工具策略覆盖。
  • defaultTo - 未提供目标时的回退目标。
  • actions.messages / actions.reactions / actions.search / actions.threads - 按操作进行工具门控。

顶层的多账户键:

  • accounts - 按账户 ID 键控的命名每账户覆盖记录。
  • defaultAccount - 配置多个时优先使用的账户 ID。

运行器

主机端自检(在 .artifacts/qa-e2e/ 下写入 Markdown 报告):

pnpm qa:e2e

这会通过 qa-lab 路由,启动仓库内的 QA 总线,启动 qa-channel 运行时切片,并运行确定性自检。

完整的仓库支持场景套件:

pnpm openclaw qa suite

隔离的 channel-participant-identity-inspection 场景会在启动前启用执行身份,验证 DM、群组、无发送者、相同参与者以及混合参与者收集路径,证明入口拒绝不会创建审计行,并在 Gateway 重启前后比较 JSON 以及人工 CLI 检查:

pnpm openclaw qa suite --scenario channel-participant-identity-inspection

针对 QA Gateway 泳道并行运行场景。有关场景、配置文件和提供商模式,请参阅 QA 概述。

基于 Docker 的 QA 站点(在一个栈中提供 Gateway + QA Lab 调试器 UI):

pnpm qa:lab:up

构建 QA 站点,启动基于 Docker 的 Gateway + QA Lab 栈,并打印 QA Lab URL。在那里,你可以选择场景、选择模型泳道、启动单独运行,并实时查看结果。QA Lab 调试器与随附的 Control UI 捆绑包是分开的。

已安装候选项测试夹具

私有 QA 插件仍被排除在公开 OpenClaw 包之外。要验证已安装的候选项,请在单独的 fixture 工作区中构建其仅 Gateway 工件。fixture 配置文件保留 QA Lab 的 Gateway 钩子、工具和提供商,但其场景运行器和 CLI 仍保留在工具检出中。QA Channel 携带其纯总线协议实现;公开 SDK 导入仍属于已安装的候选项。

从一个完整的、依赖就绪的工具检出开始,且该检出位于正在测试的已提交修订版本:

fixture_root="$(mktemp -d)"
git archive HEAD extensions/qa-lab extensions/qa-channel | tar -x -C "$fixture_root"
mkdir "$fixture_root/artifacts"

for plugin in qa-lab qa-channel; do
  node scripts/lib/plugin-npm-runtime-build.mjs \
    "$fixture_root/extensions/$plugin" --qa-gateway-fixture
  OPENCLAW_PLUGIN_NPM_BUNDLE_DEPENDENCIES=1 \
    node scripts/lib/plugin-npm-package-manifest.mjs \
    --run "$fixture_root/extensions/$plugin" --qa-gateway-fixture -- \
    npm pack --pack-destination "$fixture_root/artifacts"
done

构建器只写入所复制包的 dist 目录。清单所有者在打包后恢复其源元数据,并包含规范的 QA Channel 配置模式。此便携式测试夹具配方需要依赖捆绑:仅配置档案不会安装或捆绑 typebox 和 zod。不要复制检出中的 node_modules 链接,也不要覆盖另一次运行生成的插件输出。

使用现有的 runQaSuite API,将工具检出作为 repoRoot,并显式设置 sutOpenClawCommand,指向已安装候选的运行时和 dist/index.js,同时设置 usePackagedPlugins: true。将已审查的产物提取到隔离的测试夹具目录中,并通过 API 的 mutateConfig 回调将这些包路径添加到 plugins.load.paths,同时保留其他配置字段。该回调会在候选执行其自身的身份验证引导和更新修复之前,为每个新的子进程运行。本地来源和能力同意规则仍然适用;测试夹具不会获得官方包信任。

保持已安装包不变。不要设置 OPENCLAW_DEV_SOURCE_ROOT,也不要将其捆绑的 plugin/SDK 根目录替换为工具检出。记录两个修订版本,并针对已安装候选(而不仅仅是工具版本)验证测试夹具的 peer/API 要求以及输出的宿主导入。所需证明包括实际的候选 Gateway/CLI 镜像、候选拥有的 SDK 解析、未更改的场景结果以及完整的子进程清理。仅通过源码 QA 无法确立已安装包兼容性。

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