本页内容
本页内容
测试和CI
Docker 测试运行者
Docker 运行器(可选的“在 Linux 上可用”检查)
这些 Docker 运行器分成两类:
- Live-model 运行器:
test:docker:live-models和test:docker:live-gateway只会在仓库 Docker 镜像中运行与其匹配的 profile-key live 文件(src/agents/models.profiles.live.test.ts和src/gateway/gateway-models.profiles.live.test.ts),并挂载本地配置目录、工作区以及可选的 profile 环境变量文件。对应的本地入口点是test:live:models-profiles和test:live:gateway-profiles。 - Docker live 运行器会在需要时保留各自的实际限制:
test:docker:live-models默认使用精选的高信号支持集合,而test:docker:live-gateway默认使用OPENCLAW_LIVE_GATEWAY_SMOKE=1、OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8、OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000和OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000。当你明确需要更小的限制或更大范围的扫描时,可设置OPENCLAW_LIVE_MAX_MODELS或 gateway 环境变量。 test:docker:all通过test:docker:live-build构建一次实时 Docker 映像,通过scripts/package-openclaw-for-docker.mjs将 OpenClaw 打包为 npm tarball,然后将 builds/reuses 打包两次scripts/e2e/Dockerfile图像。裸图仅是 install/update/plugin-dependency 通道的 Node/Git 跑步者;这些通道安装了预构建的 tarball。功能映像将相同的 tarball 安装到/app中,以用于内置应用程序功能通道。 Docker 车道定义位于scripts/lib/docker-e2e-scenarios.mts中;规划器逻辑位于scripts/lib/docker-e2e-plan.mts中;scripts/test-docker-all.mjs执行选定的计划。聚合使用加权本地调度程序:OPENCLAW_DOCKER_ALL_PARALLELISM控制进程槽,而资源上限保持重活,npm- 安装和多服务通道同时启动。如果单个通道比活动上限重,调度程序仍然可以在池空时启动它,然后保持它单独运行,直到容量再次可用。默认为 10 个插槽,OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9、OPENCLAW_DOCKER_ALL_NPM_LIMIT=5和OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7;仅当 Docker 主机有更多余量时才调整OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT或OPENCLAW_DOCKER_ALL_DOCKER_LIMIT(以及其他OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT覆盖)。跑步者默认执行 Docker 预检,删除陈旧的 OpenClaw E2E 容器,每 30 秒打印一次状态,将成功的车道计时存储在.artifacts/docker-tests/lane-timings.json中,并使用这些计时在以后的运行中首先启动更长的车道。使用OPENCLAW_DOCKER_ALL_DRY_RUN=1打印加权通道清单,无需构建或运行 Docker,或使用node scripts/test-docker-all.mjs --plan-json打印选定通道的 CI 计划、package/image 需求和凭证。Package Acceptance是 GitHub-native 包入口,用于“这个可安装的 tarball 可以作为产品使用吗?”它解析source=npm、source=ref、source=url、source=trusted-url或source=artifact中的一个候选包,将其上传为package-under-test,然后针对该确切通道运行可重用的 Docker E2E 通道tarball 而不是重新打包选定的参考。配置文件按宽度排序:smoke、package、product和full(加上custom以获得显式通道列表)。请参阅 测试更新和插件,了解 package/update/plugin 合约、已发布的升级幸存者矩阵、发布默认值和故障分类。- Build 和发布检查在 tsdown 之后运行
scripts/check-cli-bootstrap-imports.mts。如果预调度引导图在命令调度之前静态导入任何外部包(Commander、提示符 UI、undici、日志记录和类似的启动繁重的 deps),则守卫会从dist/entry.js和dist/cli/run-main.js遍历静态构建的图,并且会失败;它还将捆绑网关运行块限制为 70 KB,并拒绝已知冷网关路径的静态导入(control-ui-assets、diagnostic-stability-bundle、onboard-helpers、process-respawn、restart-sentinel、server-close、server-reload-handlers) 来自该块。当前版本通过 tsdown 发出的经过哈希检查的元数据来定位网关块,因此发现不会扫描dist下不相关的 JavaScript。丢失或陈旧的元数据需要重建;可信发布工具仅保留对定位器之前的冻结目标的源扫描。独立工作线程仍会收到独立的 JavaScript 依赖性检查。scripts/release-check.ts分别对包装好的CLI和--help、onboard --help、doctor --help、status --json --timeout 1、config schema和models list --provider openai进行冒烟测试。 - Package Acceptance 强制执行当前包元数据和持久性契约。 2026 年 6 月之前警告和跳过路径已停用;使用匹配的历史工具来重现那些旧候选人的接受结果。
- 容器 smoke 运行器:
test:docker:openwebui、test:docker:onboard、test:docker:npm-onboard-channel-agent、test:docker:release-user-journey、test:docker:release-typed-onboarding、test:docker:release-media-memory、test:docker:release-upgrade-user-journey、test:docker:release-plugin-marketplace、test:docker:skill-install、test:docker:update-channel-switch、test:docker:upgrade-survivor、test:docker:published-upgrade-survivor、test:docker:session-runtime-context、test:docker:agents-delete-shared-workspace、test:docker:gateway-network、test:docker:browser-cdp-snapshot、test:docker:mcp-channels、test:docker:agent-bundle-mcp-tools、test:docker:cron-mcp-cleanup、test:docker:plugins、test:docker:plugin-update、test:docker:plugin-lifecycle-matrix和test:docker:config-reload会启动一个或多个真实容器,并验证更高层级的集成路径。 - Docker/Bash E2E 通道,通过
scripts/lib/openclaw-e2e-instance.sh帽npm install在OPENCLAW_E2E_NPM_INSTALL_TIMEOUT安装打包的 OpenClaw tarball(默认600s;设置0以禁用用于调试的包装器)。 update-channel-switch给它的两个通道切换openclaw update运行OPENCLAW_E2E_GIT_CHANNEL_TIMEOUT(默认900s),因为它们安装依赖项并交换容器内的包;其他 CLI 调用保留OPENCLAW_E2E_COMMAND_TIMEOUT默认值300s。
实时模型 Docker 运行器还仅绑定安装所需的 CLI 身份验证主目录(或在运行未缩小范围时所有受支持的身份验证主目录),然后在运行之前将它们复制到容器主目录中,以便 external-CLI OAuth 可以刷新令牌而无需更改主机身份验证存储:
-
直接模型:
pnpm test:docker:live-models(脚本:scripts/test-live-models-docker.sh) -
ACP 绑定烟雾:
pnpm test:docker:live-acp-bind(脚本:scripts/test-live-acp-bind-docker.sh;默认覆盖 Claude、Codex 和 Gemini,通过pnpm test:docker:live-acp-bind:droid严格覆盖 Droid/OpenCode和pnpm test:docker:live-acp-bind:opencode) -
CLI 后端烟雾:
pnpm test:docker:live-cli-backend(脚本:scripts/test-live-cli-backend-docker.sh) -
Codex 应用程序服务器harness烟雾:
pnpm test:docker:live-codex-harness(脚本:scripts/test-live-codex-harness-docker.sh) -
Gateway + 开发代理:
pnpm test:docker:live-gateway(脚本:scripts/test-live-gateway-models-docker.sh) -
Observability 冒烟:
pnpm qa:otel:smoke、pnpm qa:prometheus:smoke和pnpm qa:observability:smoke是私有 QA 源结帐通道。它们故意不属于软件包 Docker 发布通道,因为 npm tarball 省略了 QA Lab。 -
打开WebUI直播烟雾:
pnpm test:docker:openwebui(脚本:scripts/e2e/openwebui-docker.sh) -
载入向导(TTY,完整工作区设置):
pnpm test:docker:onboard(脚本:scripts/e2e/onboard-docker.sh) -
Npm tarball onboarding/channel/agent Smoke:
pnpm test:docker:npm-onboard-channel-agent在 Docker 中全局安装打包的 OpenClaw tarball,通过 env-ref onboarding 加上默认的 Telegram 配置 OpenAI,运行 doctor,并运行一个模拟的OpenAI代理转。通过OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz重用预构建的 tarball,通过OPENCLAW_NPM_ONBOARD_HOST_BUILD=0跳过主机重建,或通过OPENCLAW_NPM_ONBOARD_CHANNEL=discord或OPENCLAW_NPM_ONBOARD_CHANNEL=slack切换通道。 -
释放用户旅程烟雾:
pnpm test:docker:release-user-journey在干净的Docker主目录中全局安装打包的OpenClaw tarball,运行入门引导,配置模拟的OpenAI提供程序,运行代理轮,installs/uninstalls外部插件,配置ClickClack 针对本地固定装置,验证 outbound/inbound 消息传递,重新启动网关并运行 doctor。 -
Release 输入的载入烟雾:
pnpm test:docker:release-typed-onboarding安装打包的 tarball,通过真正的 TTY 驱动openclaw onboard,将 OpenAI 配置为 env-ref 提供程序,验证是否没有原始密钥持久性,并运行模拟代理轮次。 -
发布media/memory烟雾:
pnpm test:docker:release-media-memory安装打包的tarball,验证对PNG附件的图像理解,OpenAI-兼容的图像生成输出,内存搜索调用,以及在网关重新启动时调用生存。 -
发布升级用户旅程烟雾:默认情况下,
pnpm test:docker:release-upgrade-user-journey安装早于候选 tarball 的最新发布的稳定基线,在已发布的软件包上加载并安装 CLI 插件,然后替换该软件包并运行记录的 Doctor 迁移步骤。它验证现有插件是否仍然有效,并为 agent/channel 旅程配置候选兼容的模拟 provider/ClickClack 设置。如果不存在较旧的稳定基线,则仅当候选版本已发布且稳定时,它才会重用该版本;否则它会失败并需要明确的基线。使用OPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>覆盖基线。 -
发布插件市场烟雾:
pnpm test:docker:release-plugin-marketplace从本地固定装置市场安装,更新已安装的插件,卸载它,并验证插件CLI消失并删除安装元数据。 -
Skill install Smoke:
pnpm test:docker:skill-install在 Docker 中全局安装打包的 OpenClaw tarball,并在配置中禁用上传的存档安装。由于没有非空OPENCLAW_SKILL_INSTALL_E2E_QUERY、OPENCLAW_SKILL_INSTALL_E2E_SLUG或OPENCLAW_SKILL_INSTALL_E2E_PREFERRED_SLUG覆盖,它会解析实时搜索中维护的@steipete/gifgrep固定装置,安装版本1.0.1,并验证其审查的SKILL.md字节以及确切的 owner/version.clawhuborigin/lock 元数据。安全拒绝是终局;烟雾不运行技能或安装其可选工具。任何非空覆盖都会保留自定义选择和现有的安全检查后备行为,而无需维护固定装置引脚。 -
更新通道切换烟雾:
pnpm test:docker:update-channel-switch在Docker中全局安装打包的OpenClaw tarball,从包stable切换到gitdev,验证持久通道和插件更新后工作,然后切换回包stable和检查更新状态。 -
升级幸存者烟雾:
pnpm test:docker:upgrade-survivor将打包的OpenClaw tarball安装在肮脏的旧用户固定装置上,其中包含代理、通道配置、插件白名单、过时的插件依赖状态和现有的workspace/session文件。它运行包更新以及没有实时提供商或频道密钥的非交互式医生,然后启动环回网关并检查 config/state 保留以及 startup/status 预算。 -
发布的升级幸存者烟雾:
pnpm test:docker:published-upgrade-survivor默认安装openclaw@latest,播种现实的现有用户文件,使用烘焙命令配方配置该基线,验证生成的配置,更新已发布的安装到候选tarball,运行非交互式医生,写入.artifacts/upgrade-survivor/summary.json,然后启动环回网关并检查配置的意图,状态保存,启动,/healthz、/readyz和 RPC 状态预算。使用OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC覆盖一条基线,要求聚合调度程序使用OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS扩展精确的本地基线,例如[email protected] [email protected] [email protected],并使用OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS扩展问题形状的固定装置,例如reported-issues;报告的问题集包括用于自动外部 OpenClaw 插件安装修复的configured-plugin-installs。包验收将这些内容公开为published_upgrade_survivor_baseline、published_upgrade_survivor_baselines和published_upgrade_survivor_scenarios,解析元基线标记(例如last-stable-4或all-since-2026.6.1),完整版本验证根据最新的稳定基线运行所有reported-issues场景,在扇出之前解析为精确的包。历史矩阵仍然是明确的手动覆盖。成功的已发布升级运行还包括 Docker 工件中的主机编辑的
summary.json。收据将初始更新输出及其核心后观察与修复和恢复输出分开。最初的岩心后证据缺失仍然未知;通过的场景可以包括能力同意恢复。当已发布的更新程序支持无效配置准入时,手动
base运行还会执行已删除的自定义插件路径。较旧的驱动程序,包括2026.7.2-beta.5之前的版本和 7 月延长稳定线,保留该装置为非种子并记录其未执行的原因;正常的更新、迁移、状态和就绪断言仍然运行。显式missing-load-path场景需要兼容的基线。在夹具播种之前,会根据已安装的版本再次检查浮动基线标签。请参阅 更新准入 了解已发布的驱动程序限制。 -
Session 运行时上下文烟雾:
pnpm test:docker:session-runtime-context验证隐藏的运行时上下文副本持久性、受影响的重复提示重写分支的医生修复,以及通过运行已安装软件包的真实网关自动副本冷存储。小型、过时的综合历史记录需要维护人员的锻炼,无需重新启动网关即可对session.maintenance.coldStorage.afterDays进行更改,精确的转录恢复,丢失存档文件的显式错误,无需补水的活动列表,以及跨重新启动和便携式备份恢复的历史记录保存。 -
Bun全局安装和运行时烟雾:
bash scripts/e2e/bun-global-install-smoke.sh打包当前树,安装它bun install -g --trust在一个孤立的家里,验证OpenClaw的生命周期脚本运行,并执行已安装的包Bun 1.4.3或更新的。它检查代表CLI状态、捆绑图像提供程序、模拟的本地代理轮转、网关准备情况和运行状况以及模拟的代理轮流Bun-托管网关。重用预构建的 tarballOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz,跳过主机构建OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0,或复制dist/从建成的Docker图像与OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local。 -
Bun-only 运行时烟雾 (Linux x64):使用
OPENCLAW_BUN_ONLY_SMOKE_PACKAGE_TGZ=/path/to/openclaw-candidate.tgz、BUN_BIN=/path/to/pinned-fork/bun(固定在.github/actions/setup-test-bun/action.yml中的叉子)和OPENCLAW_BUN_ONLY_SMOKE_ARTIFACT_DIR=/path/to/artifacts运行bash scripts/e2e/bun-only-runtime-smoke.sh。将OPENCLAW_BUN_ONLY_SMOKE_HIDE_SYSTEM_NODE=1设置为掩码系统 Node,并在烟雾的私有挂载命名空间内记录哨兵;这需要无密码sudo、unshare和setpriv。它仅影响烟雾的进程树,使主机 Node 保持不变,并在运行该工具之前返回到调用用户。 Node必须在冒烟前做好有效载荷的准备。然后,该harness使用记录的 Bun 启动器标记进行一次 Node- 免费安装尝试;安装失败会导致通道失败,而无需使用 Node 重试。如果没有该标志,如果真实的 Node 仍然可达,则运行时前提条件将失败。 -
Installer Docker 烟雾:
bash scripts/test-install-sh-docker.sh在其根、更新和直接 npm 容器之间共享一个 npm 缓存。在升级到候选 tarball 之前,将 Smoke 默认更新为 npmlatest作为稳定基线。在本地使用OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.9.5进行覆盖,或者使用 GitHub 上的安装烟雾工作流程的update_baseline_version输入进行覆盖。非 root 安装程序检查保留隔离的 npm 缓存,因此 root 拥有的缓存条目不会掩盖用户本地安装行为。设置OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache以在本地重新运行时重用 root/update/direct-npm 缓存。 -
Install Smoke CI 跳过与
OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1重复的直接 npm 全局更新;当需要直接覆盖npm install -g时,在没有该环境的情况下在本地运行脚本。 -
Agents 删除共享工作区 CLI 烟雾:
pnpm test:docker:agents-delete-shared-workspace(脚本:scripts/e2e/agents-delete-shared-workspace-docker.sh)默认构建根 Dockerfile 映像,在隔离的容器主目录中为两个代理和一个工作区播种,运行agents delete --json,并验证有效的 JSON 以及保留的工作区行为。通过OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1重新使用 install-smoke 映像。 -
网关网络和主机生命周期:
pnpm test:docker:gateway-network(脚本:scripts/e2e/gateway-network-docker.sh)保留两个容器LAN WebSocket auth/health烟雾,然后使用环回Admin HTTP来证明准备隔离,保留控制访问,恢复恢复和准备好的相同容器 stop/start. 重新启动检查必须在原始租约到期之前完成,验证挂起状态是进程本地的,同时持久网关配置和容器标识仍然存在,并发出机器可读的阶段计时 JSON。 -
Browser CDP快照烟雾:
pnpm test:docker:browser-cdp-snapshot(脚本:scripts/e2e/browser-cdp-snapshot-docker.sh)构建源E2E图像加上Chromium层,使用原始CDP启动Chromium,运行browser doctor --deep,并验证 CDP 角色快照涵盖链接 URL、光标提升的可点击内容、iframe 引用和框架元数据。 -
OpenAI 响应 web_search 最小推理回归:
pnpm test:docker:openai-web-search-minimal(脚本:scripts/e2e/openai-web-search-minimal-docker.sh)通过网关运行模拟的 OpenAI 服务器,验证web_search从reasoning.effort引发minimal到low,然后强制提供程序架构拒绝并检查网关日志中显示的原始详细信息。 -
OpenAI 聊天工具和存档历史记录调用:
pnpm test:docker:openai-chat-tools通过聊天完成端点验证外部工具调用,然后运行一个实时代理轮次,其答案需要来自存档记录的随机数。召回提示省略了随机数,因此响应证明恢复的历史记录到达了提供者。此通道需要 OpenAI API 密钥。 -
MCP 通道桥(种子网关 + stdio 桥 + 原始 Claude 通知帧烟雾):
pnpm test:docker:mcp-channels(脚本:scripts/e2e/mcp-channels-docker.sh) -
OpenClaw 捆绑包 MCP 工具(真实 stdio MCP 服务器 + 嵌入式 OpenClaw 配置文件 allow/deny 烟雾):
pnpm test:docker:agent-bundle-mcp-tools(脚本:scripts/e2e/agent-bundle-mcp-tools-docker.sh) -
Cron/subagent MCP 清理(独立 cron 和一次性子代理运行后真正的网关 + stdio MCP 子进程拆卸):
pnpm test:docker:cron-mcp-cleanup(脚本:scripts/e2e/cron-mcp-cleanup-docker.sh) -
Plugins(install/update 本地路径冒烟、
file:、具有提升依赖项的 npm 注册表、格式错误的 npm 包元数据、git 移动引用、ClawHub 固定装置、市场更新以及Claude-bundle enable/inspect):pnpm test:docker:plugins(脚本:scripts/e2e/plugins-docker.sh) 设置OPENCLAW_PLUGINS_E2E_CLAWHUB=0以跳过 ClawHub 块。默认情况下,它使用密封本地 ClawHub 夹具,即使设置了 ClawHub URL 也是如此。要测试实时 ClawHub 包,请设置OPENCLAW_PLUGINS_E2E_LIVE_CLAWHUB=1并提供OPENCLAW_PLUGINS_E2E_CLAWHUB_SPEC(例如clawhub:publisher/package)和OPENCLAW_PLUGINS_E2E_CLAWHUB_ID(包的运行时插件 ID)。 Kitchen Sink被退市,不再是现场测试目标;没有这两个值的实时模式设置将以状态 2 退出。 -
插件更新不变烟雾:
pnpm test:docker:plugin-update(脚本:scripts/e2e/plugin-update-unchanged-docker.sh) -
Plugin 生命周期矩阵烟雾:
pnpm test:docker:plugin-lifecycle-matrix在裸容器中安装打包的 OpenClaw tarball,安装 npm 插件,切换 enable/disable,通过本地 npm 注册表升级和降级,删除已安装的代码,然后验证卸载是否仍删除记录每个生命周期阶段的 RSS/CPU 指标时的过时状态。 -
Config 重新加载元数据烟雾:
pnpm test:docker:config-reload(脚本:scripts/e2e/config-reload-source-docker.sh)
完整发布验证在其稳定和完整 Docker 发布路径配置文件中包括冷存储案例:session-runtime-context 属于 core,openai-chat-tools 属于 package-update-openai。两者都使用共享功能映像中安装的候选包。这些有界案例通过检查打包的工作人员、网关配置和历史请求、文件系统恢复以及真正的提供者转向来补充存储单元测试;他们不会在每个版本上重复大型数据库压力活动。
当较新的工具验证了冷存储之前的明确授权的较旧冻结目标时,兼容性预检会将冷子情况记录为不受支持,并且通道会为其报告 NOT RUN。原始检查仍在运行,当前目标始终需要冷存储覆盖。
要手动预构建和重用共享功能映像:
设置后,特定于套件的图像覆盖(例如 OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE)仍然会获胜。当 OPENCLAW_SKIP_DOCKER_BUILD=1 指向远程共享映像时,如果该映像尚未位于本地,则脚本会拉取该映像。 QR 和安装程序 Docker 测试保留自己的 Dockerfile,因为它们验证 package/install 行为而不是共享的内置应用程序运行时。
实时模型 Docker 运行程序还将当前结帐只读绑定挂载,并将其暂存到容器内的临时工作目录中。这可以使运行时映像保持苗条,同时仍然针对您的确切本地 source/config. 运行 Vitest 暂存步骤会跳过大型仅本地缓存和应用程序构建输出,例如 .pnpm-store、.worktrees、__openclaw_vitest__ 和应用程序本地 .build 或 Gradle 输出目录,因此 Docker 实时运行不会花费时间分钟复制机器特定的工件。他们还设置了 OPENCLAW_SKIP_CHANNELS=1,以便网关实时检查不会启动容器内真正的 Telegram/Discord/etc. 通道工作人员。 test:docker:live-models 仍运行 pnpm test:live,因此当您需要缩小或排除 Docker 通道中的网关实时覆盖范围时,也请通过 OPENCLAW_LIVE_GATEWAY_*。
test:docker:openwebui 是一个更高级别的兼容性烟雾:它启动一个 OpenClaw 网关容器,并启用 OpenAI- 兼容的 HTTP 端点,启动针对该网关的固定 Open WebUI 容器,通过 Open WebUI 登录,验证 /api/models 公开openclaw/default,然后通过打开WebUI的/api/chat/completions代理发送真实的聊天请求。为发布路径 CI 检查设置 OPENWEBUI_SMOKE_MODE=models,该检查应在 Open WebUI 登录和模型发现后停止,而无需等待实时模型完成。第一次运行可能会明显变慢,因为 Docker 可能需要拉取 Open WebUI 映像,而 Open WebUI 可能需要完成其自己的冷启动设置。该通道需要一个可用的实时模型密钥,通过流程环境、分阶段身份验证配置文件或显式 OPENCLAW_PROFILE_FILE 提供。成功的运行会打印一个小的 JSON 有效负载,例如 { "ok": true, "model": "openclaw/default", ... }。
test:docker:mcp-channels 使用固定响应,不需要真实的 Telegram、Discord 或 iMessage 帐户。它启动一个种子网关容器,启动第二个容器来生成 openclaw mcp serve,然后通过真实的 stdio MCP 桥验证路由对话发现、转录读取、附件元数据、实时事件队列行为、出站发送路由和 Claude-style 通道 + 权限通知。通知检查直接检查原始 stdio MCP 帧,以便烟雾验证桥实际发出的内容,而不仅仅是特定客户端 SDK 碰巧出现的内容。
test:docker:agent-bundle-mcp-tools 使用固定响应,不需要实时模型密钥。它构建存储库 Docker 映像,在容器内启动真正的 stdio MCP 检查服务器,通过嵌入式 OpenClaw 捆绑包 MCP 运行时具体化该服务器,执行该工具,然后验证 coding 和 messaging 保留 bundle-mcp 工具而 minimal 和 tools.deny: ["bundle-mcp"] 则对其进行过滤。
test:docker:cron-mcp-cleanup 使用固定响应,不需要实时模型密钥。它使用真实的 stdio MCP 检查服务器启动种子网关,运行隔离的 cron 轮次和 sessions_spawn 一次性子轮次,然后验证 MCP 子进程在每次运行后退出。
手动 ACP 纯语言线程 smoke(非 CI):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- 为 regression/debug 工作流程保留此脚本。 ACP 线程路由验证可能会再次需要它,所以不要删除它。
有用的环境变量:
OPENCLAW_CONFIG_DIR=...(默认:~/.openclaw),挂载到/home/node/.openclawOPENCLAW_WORKSPACE_DIR=...(默认:~/.openclaw/workspace),挂载到/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...,在运行测试前挂载并加载OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1仅验证源自OPENCLAW_PROFILE_FILE的环境变量,使用临时 config/workspace 目录且无外部 CLI 身份验证安装OPENCLAW_DOCKER_CLI_TOOLS_DIR=...(默认:~/.cache/openclaw/docker-cli-tools,除非运行已使用 CI/managed 绑定目录)安装到/home/node/.npm-global,以便缓存的 CLI 安装在 Docker 内- 外部CLI auth
$HOME下的dirs/files以只读方式安装在/host-auth...下,然后在测试开始之前复制到/home/node/...- 默认目录(当运行未缩小到特定 provider 时使用):
.factory、.gemini、.minimax - 默认文件:
~/.codex/auth.json、~/.codex/config.toml、.claude.json、~/.claude/.credentials.json、~/.claude/settings.json、~/.claude/settings.local.json - Narrowed 提供程序仅运行安装从
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERS推断出的所需 dirs/files - 使用
OPENCLAW_DOCKER_AUTH_DIRS=all、OPENCLAW_DOCKER_AUTH_DIRS=none或OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex等逗号列表手动覆盖
- 默认目录(当运行未缩小到特定 provider 时使用):
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=...,用于缩小运行范围OPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=...,用于过滤容器内的 providerOPENCLAW_SKIP_DOCKER_BUILD=1,用于复用已有的openclaw:local-live镜像,以便在不需要重新构建的情况下重新运行OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1要求凭据来自配置文件存储(不是 env)OPENCLAW_OPENWEBUI_MODEL=...,用于选择由 gateway 暴露给 Open WebUI smoke 的模型OPENCLAW_OPENWEBUI_PROMPT=...,用于覆盖 Open WebUI smoke 使用的 nonce 检查提示词OPENWEBUI_IMAGE=...,用于覆盖固定版本的 Open WebUI 镜像标签