mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-12 04:20:48 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
57
openclaw/extensions/qa-lab/src/cron-run-wait.ts
Normal file
57
openclaw/extensions/qa-lab/src/cron-run-wait.ts
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
import { setTimeout as sleep } from "node:timers/promises";
|
||||
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
||||
|
||||
export type QaCronRunLogEntry = {
|
||||
ts?: number;
|
||||
status?: "ok" | "error" | "skipped";
|
||||
summary?: string;
|
||||
error?: string;
|
||||
deliveryStatus?: "delivered" | "not-delivered" | "unknown" | "not-requested";
|
||||
};
|
||||
|
||||
type QaCronRunsPage = {
|
||||
entries?: QaCronRunLogEntry[];
|
||||
};
|
||||
|
||||
export async function waitForCronRunCompletion(params: {
|
||||
callGateway: (
|
||||
method: string,
|
||||
rpcParams?: unknown,
|
||||
opts?: { timeoutMs?: number },
|
||||
) => Promise<unknown>;
|
||||
jobId: string;
|
||||
afterTs: number;
|
||||
timeoutMs?: number;
|
||||
intervalMs?: number;
|
||||
}) {
|
||||
const timeoutMs = params.timeoutMs ?? 90_000;
|
||||
const intervalMs = params.intervalMs ?? 1_000;
|
||||
const startedAt = Date.now();
|
||||
let lastEntries: QaCronRunLogEntry[] = [];
|
||||
while (Date.now() - startedAt < timeoutMs) {
|
||||
const page = (await params.callGateway(
|
||||
"cron.runs",
|
||||
{
|
||||
id: params.jobId,
|
||||
limit: 20,
|
||||
sortDir: "desc",
|
||||
},
|
||||
{ timeoutMs: Math.min(timeoutMs, 30_000) },
|
||||
)) as QaCronRunsPage;
|
||||
const entries = Array.isArray(page.entries) ? page.entries : [];
|
||||
lastEntries = entries;
|
||||
const completed = entries.find(
|
||||
(entry) =>
|
||||
typeof entry.ts === "number" &&
|
||||
entry.ts >= params.afterTs &&
|
||||
(entry.status === "ok" || entry.status === "error" || entry.status === "skipped"),
|
||||
);
|
||||
if (completed) {
|
||||
return completed;
|
||||
}
|
||||
await sleep(intervalMs);
|
||||
}
|
||||
throw new Error(
|
||||
`timed out waiting for cron run completion for ${params.jobId}: ${formatErrorMessage(lastEntries)}`,
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue