fix: CaseRun blocker visibility in status + cloud-api hwpod_node_not_connected error

This commit is contained in:
Codex Agent
2026-06-07 12:45:32 +08:00
parent 760df7938c
commit 892c9af366
2 changed files with 17 additions and 2 deletions
+16 -1
View File
@@ -374,7 +374,9 @@ async function runCaseRunWorker(context: CaseContext) {
return payload;
} catch (error) {
const run = await readRunFromDir(runDir).catch(() => loadControlRunSkeleton(workerContext, caseId, runId, runDir));
await writeRunControl(workerContext, run, { status: "failed", stage: "failed", completedAt: context.now(), exitCode: 1, error: errorSummary(error) });
const summary = errorSummary(error);
const blocker = extractPrepareBlocker(summary);
await writeRunControl(workerContext, run, { status: "failed", stage: "failed", completedAt: context.now(), exitCode: 1, error: summary, ...(blocker ? { blocker } : {}) });
throw error;
}
}
@@ -412,6 +414,7 @@ export async function statusCaseRun(context: CaseContext) {
agent: run.agent ? agentSummary(run.agent) : null,
traceLookup: run.agent ? agentTraceLookupForRun(run) : null,
agentDiff: run.agentDiff ? diffSummary(run.agentDiff) : null,
blocker: control.blocker ?? null,
evidencePath: text(run.evidencePath ?? control.resultPath) || null,
nextPollCommand: `hwlab-cli case run status ${run.runId} --state-dir ${stateRoot(context)}`,
resultCommand: `hwlab-cli case run result ${run.runId} --state-dir ${stateRoot(context)}`,
@@ -2437,6 +2440,18 @@ function errorSummary(error: unknown) {
return { code: typeof (error as any)?.code === "string" ? (error as any).code : "caserun_worker_failed", message: error instanceof Error ? error.message : String(error), details: (error as any)?.details ?? null };
}
function extractPrepareBlocker(summary: ReturnType<typeof errorSummary>) {
const results = (summary.details as any)?.body?.body?.results ?? (summary.details as any)?.body?.results ?? [];
if (!Array.isArray(results) || results.length === 0) return null;
for (const r of results) {
const blocker = (r as any)?.blocker;
if (blocker && typeof blocker.code === "string") {
return { code: blocker.code, summary: blocker.summary ?? "", layer: blocker.layer ?? null };
}
}
return null;
}
function commandVisibility(command: string[]) {
return command.map((item) => item.includes("/") || item.includes("\\") ? path.basename(item) || item : item);
}