mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 09:18:38 +00:00
fix(cron): narrow manual run execution state
This commit is contained in:
@@ -241,17 +241,18 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
if (!prepared.ran) {
|
if (!prepared.ran) {
|
||||||
return prepared;
|
return prepared;
|
||||||
}
|
}
|
||||||
|
if (!prepared.executionJob || typeof prepared.startedAt !== "number") {
|
||||||
|
return { ok: false } as const;
|
||||||
|
}
|
||||||
|
const executionJob = prepared.executionJob;
|
||||||
|
const startedAt = prepared.startedAt;
|
||||||
|
const jobId = prepared.jobId;
|
||||||
|
|
||||||
let coreResult:
|
let coreResult: Awaited<ReturnType<typeof executeJobCore>>;
|
||||||
| Awaited<ReturnType<typeof executeJobCore>>
|
|
||||||
| {
|
|
||||||
status: "error";
|
|
||||||
error: string;
|
|
||||||
};
|
|
||||||
const configuredTimeoutMs =
|
const configuredTimeoutMs =
|
||||||
prepared.executionJob.payload.kind === "agentTurn" &&
|
executionJob.payload.kind === "agentTurn" &&
|
||||||
typeof prepared.executionJob.payload.timeoutSeconds === "number"
|
typeof executionJob.payload.timeoutSeconds === "number"
|
||||||
? Math.floor(prepared.executionJob.payload.timeoutSeconds * 1_000)
|
? Math.floor(executionJob.payload.timeoutSeconds * 1_000)
|
||||||
: undefined;
|
: undefined;
|
||||||
const jobTimeoutMs =
|
const jobTimeoutMs =
|
||||||
configuredTimeoutMs !== undefined
|
configuredTimeoutMs !== undefined
|
||||||
@@ -267,7 +268,7 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
let timeoutId: NodeJS.Timeout | undefined;
|
let timeoutId: NodeJS.Timeout | undefined;
|
||||||
try {
|
try {
|
||||||
return await Promise.race([
|
return await Promise.race([
|
||||||
executeJobCore(state, prepared.executionJob, runAbortController?.signal),
|
executeJobCore(state, executionJob, runAbortController?.signal),
|
||||||
new Promise<never>((_, reject) => {
|
new Promise<never>((_, reject) => {
|
||||||
timeoutId = setTimeout(() => {
|
timeoutId = setTimeout(() => {
|
||||||
runAbortController?.abort(new Error("cron: job execution timed out"));
|
runAbortController?.abort(new Error("cron: job execution timed out"));
|
||||||
@@ -281,7 +282,7 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
: await executeJobCore(state, prepared.executionJob);
|
: await executeJobCore(state, executionJob);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
coreResult = { status: "error", error: String(err) };
|
coreResult = { status: "error", error: String(err) };
|
||||||
}
|
}
|
||||||
@@ -289,7 +290,7 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
|
|
||||||
await locked(state, async () => {
|
await locked(state, async () => {
|
||||||
await ensureLoaded(state, { skipRecompute: true });
|
await ensureLoaded(state, { skipRecompute: true });
|
||||||
const job = state.store?.jobs.find((entry) => entry.id === prepared.jobId);
|
const job = state.store?.jobs.find((entry) => entry.id === jobId);
|
||||||
if (!job) {
|
if (!job) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -298,7 +299,7 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
status: coreResult.status,
|
status: coreResult.status,
|
||||||
error: coreResult.error,
|
error: coreResult.error,
|
||||||
delivered: coreResult.delivered,
|
delivered: coreResult.delivered,
|
||||||
startedAt: prepared.startedAt,
|
startedAt,
|
||||||
endedAt,
|
endedAt,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -313,7 +314,7 @@ export async function run(state: CronServiceState, id: string, mode?: "due" | "f
|
|||||||
deliveryError: job.state.lastDeliveryError,
|
deliveryError: job.state.lastDeliveryError,
|
||||||
sessionId: coreResult.sessionId,
|
sessionId: coreResult.sessionId,
|
||||||
sessionKey: coreResult.sessionKey,
|
sessionKey: coreResult.sessionKey,
|
||||||
runAtMs: prepared.startedAt,
|
runAtMs: startedAt,
|
||||||
durationMs: job.state.lastDurationMs,
|
durationMs: job.state.lastDurationMs,
|
||||||
nextRunAtMs: job.state.nextRunAtMs,
|
nextRunAtMs: job.state.nextRunAtMs,
|
||||||
model: coreResult.model,
|
model: coreResult.model,
|
||||||
|
|||||||
Reference in New Issue
Block a user