






















@@ -10,6 +10,7 @@ import {
1010buildRunId,
1111createHarnessEnv,
1212readTelegramSummary,
13+resolveMainVersion,
1314resolvePublishedVersion,
1415runHarness,
1516validateOpenClawPackageSpec,
@@ -25,9 +26,10 @@ const DEFAULT_SAMPLE_TIMEOUT_MS = 30_000;
25262627function usage() {
2728return [
28-"Usage: pnpm rtt <openclaw@spec> [--provider mock-openai|live-frontier] [--runs N] [--samples N] [--sample-timeout-ms N] [--timeout-ms N] [--harness-root PATH] [--output PATH]",
29+"Usage: pnpm rtt <openclaw@spec> [--package-tgz PATH] [--provider mock-openai|live-frontier] [--runs N] [--samples N] [--sample-timeout-ms N] [--timeout-ms N] [--harness-root PATH] [--output PATH]",
2930"",
3031"Examples:",
32+" pnpm rtt openclaw@main --package-tgz .artifacts/package/openclaw.tgz",
3133" pnpm rtt openclaw@beta",
3234" pnpm rtt openclaw@2026.4.30",
3335" pnpm rtt openclaw@latest --provider live-frontier",
@@ -61,6 +63,7 @@ function resolveHome(input: string) {
61636264function parseArgs(argv: string[]) {
6365 let spec: string | undefined;
66+ let packageTgz: string | undefined;
6467let providerMode = DEFAULT_PROVIDER_MODE;
6568let runs = 1;
6669let samples = DEFAULT_SAMPLES;
@@ -79,6 +82,14 @@ function parseArgs(argv: string[]) {
7982providerMode = parseProviderMode(argv[++index] ?? "");
8083continue;
8184}
85+if (arg === "--package-tgz") {
86+const value = argv[++index] ?? "";
87+if (!value.trim()) {
88+throw new Error("--package-tgz requires a path.");
89+}
90+packageTgz = path.resolve(resolveHome(value));
91+continue;
92+}
8293if (arg === "--runs") {
8394runs = parsePositiveInt("--runs", argv[++index] ?? "");
8495continue;
@@ -125,6 +136,7 @@ function parseArgs(argv: string[]) {
125136return {
126137spec: validateOpenClawPackageSpec(spec),
127138options: {
139+ packageTgz,
128140 providerMode,
129141 runs,
130142 samples,
@@ -152,6 +164,7 @@ async function runOne(params: {
152164const startedAt = new Date();
153165const env = createHarnessEnv({
154166baseEnv: process.env,
167+packageTgz: params.options.packageTgz,
155168providerMode: params.options.providerMode,
156169 rawOutputDir,
157170samples: params.options.samples,
@@ -205,7 +218,13 @@ async function main() {
205218assertRequiredEnv(process.env);
206219await assertHarnessRoot(options.harnessRoot);
207220await assertDockerAvailable();
208-const version = await resolvePublishedVersion(spec);
221+if (spec === "openclaw@main" && !options.packageTgz) {
222+throw new Error("openclaw@main requires --package-tgz.");
223+}
224+const version =
225+spec === "openclaw@main"
226+ ? await resolveMainVersion(options.harnessRoot)
227+ : await resolvePublishedVersion(spec);
209228let failed = false;
210229for (let index = 0; index < options.runs; index += 1) {
211230const run = await runOne({ index, options, spec, version });
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。