mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-21 06:02:13 +00:00
fix(qa-lab): harden telegram qa artifacts
This commit is contained in:
@@ -22,6 +22,21 @@ type InterruptibleServer = {
|
||||
stop(): Promise<void>;
|
||||
};
|
||||
|
||||
function resolveRepoRelativeOutputDir(repoRoot: string, outputDir?: string) {
|
||||
if (!outputDir) {
|
||||
return undefined;
|
||||
}
|
||||
if (path.isAbsolute(outputDir)) {
|
||||
throw new Error("--output-dir must be a relative path inside the repo root.");
|
||||
}
|
||||
const resolved = path.resolve(repoRoot, outputDir);
|
||||
const relative = path.relative(repoRoot, resolved);
|
||||
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
||||
throw new Error("--output-dir must stay within the repo root.");
|
||||
}
|
||||
return resolved;
|
||||
}
|
||||
|
||||
function resolveQaManualLaneModels(opts: {
|
||||
providerMode: QaProviderMode;
|
||||
primaryModel?: string;
|
||||
@@ -242,7 +257,7 @@ export async function runQaSuiteCommand(opts: {
|
||||
if (runner === "multipass") {
|
||||
const result = await runQaMultipass({
|
||||
repoRoot,
|
||||
outputDir: opts.outputDir ? path.resolve(repoRoot, opts.outputDir) : undefined,
|
||||
outputDir: resolveRepoRelativeOutputDir(repoRoot, opts.outputDir),
|
||||
providerMode,
|
||||
primaryModel: opts.primaryModel,
|
||||
alternateModel: opts.alternateModel,
|
||||
@@ -265,7 +280,7 @@ export async function runQaSuiteCommand(opts: {
|
||||
}
|
||||
const result = await runQaSuiteFromRuntime({
|
||||
repoRoot,
|
||||
outputDir: opts.outputDir ? path.resolve(repoRoot, opts.outputDir) : undefined,
|
||||
outputDir: resolveRepoRelativeOutputDir(repoRoot, opts.outputDir),
|
||||
providerMode,
|
||||
primaryModel: opts.primaryModel,
|
||||
alternateModel: opts.alternateModel,
|
||||
@@ -296,7 +311,7 @@ export async function runQaTelegramCommand(opts: {
|
||||
opts.providerMode === undefined ? "live-frontier" : normalizeQaProviderMode(opts.providerMode);
|
||||
const result = await runTelegramQaLive({
|
||||
repoRoot,
|
||||
outputDir: opts.outputDir ? path.resolve(repoRoot, opts.outputDir) : undefined,
|
||||
outputDir: resolveRepoRelativeOutputDir(repoRoot, opts.outputDir),
|
||||
providerMode,
|
||||
primaryModel: opts.primaryModel,
|
||||
alternateModel: opts.alternateModel,
|
||||
@@ -328,7 +343,7 @@ export async function runQaCharacterEvalCommand(opts: {
|
||||
const judges = parseQaModelSpecs("--judge-model", opts.judgeModel);
|
||||
const result = await runQaCharacterEval({
|
||||
repoRoot,
|
||||
outputDir: opts.outputDir ? path.resolve(repoRoot, opts.outputDir) : undefined,
|
||||
outputDir: resolveRepoRelativeOutputDir(repoRoot, opts.outputDir),
|
||||
models: candidates.models,
|
||||
scenarioId: opts.scenario,
|
||||
candidateFastMode: opts.fast,
|
||||
@@ -420,7 +435,10 @@ export async function runQaDockerScaffoldCommand(opts: {
|
||||
bindUiDist?: boolean;
|
||||
}) {
|
||||
const repoRoot = path.resolve(opts.repoRoot ?? process.cwd());
|
||||
const outputDir = path.resolve(repoRoot, opts.outputDir);
|
||||
const outputDir = resolveRepoRelativeOutputDir(repoRoot, opts.outputDir);
|
||||
if (!outputDir) {
|
||||
throw new Error("--output-dir is required.");
|
||||
}
|
||||
const result = await writeQaDockerHarnessFiles({
|
||||
outputDir,
|
||||
repoRoot,
|
||||
@@ -457,7 +475,7 @@ export async function runQaDockerUpCommand(opts: {
|
||||
const repoRoot = path.resolve(opts.repoRoot ?? process.cwd());
|
||||
const result = await runQaDockerUp({
|
||||
repoRoot,
|
||||
outputDir: opts.outputDir ? path.resolve(repoRoot, opts.outputDir) : undefined,
|
||||
outputDir: resolveRepoRelativeOutputDir(repoRoot, opts.outputDir),
|
||||
gatewayPort: Number.isFinite(opts.gatewayPort) ? opts.gatewayPort : undefined,
|
||||
qaLabPort: Number.isFinite(opts.qaLabPort) ? opts.qaLabPort : undefined,
|
||||
providerBaseUrl: opts.providerBaseUrl,
|
||||
@@ -479,3 +497,7 @@ export async function runQaMockOpenAiCommand(opts: { host?: string; port?: numbe
|
||||
});
|
||||
await runInterruptibleServer("QA mock OpenAI", server);
|
||||
}
|
||||
|
||||
export const __testing = {
|
||||
resolveRepoRelativeOutputDir,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user