(gatewayManager: GatewayManager)
| 394 | } |
| 395 | |
| 396 | async function listCronJobs(gatewayManager: GatewayManager): Promise<CronJob[]> { |
| 397 | let jobs: GatewayCronJob[] = []; |
| 398 | let usedFallback = false; |
| 399 | |
| 400 | try { |
| 401 | const result = await gatewayManager.rpc('cron.list', { includeDisabled: true }, 8000); |
| 402 | const data = result as { jobs?: GatewayCronJob[] }; |
| 403 | jobs = data?.jobs ?? (Array.isArray(result) ? result as GatewayCronJob[] : []); |
| 404 | } catch { |
| 405 | try { |
| 406 | const cronJsonPath = join(getOpenClawConfigDir(), 'cron', 'cron.json'); |
| 407 | const raw = await readFile(cronJsonPath, 'utf-8'); |
| 408 | const parsed = JSON.parse(raw); |
| 409 | jobs = (Array.isArray(parsed) ? parsed : (parsed?.jobs ?? [])) as GatewayCronJob[]; |
| 410 | usedFallback = true; |
| 411 | } catch { |
| 412 | // No fallback data available. |
| 413 | } |
| 414 | } |
| 415 | |
| 416 | if (!usedFallback && jobs.length > 0) { |
| 417 | repairCronJobsInBackground(gatewayManager, jobs); |
| 418 | } |
| 419 | |
| 420 | return jobs.map((job) => ({ ...transformCronJob(job), ...(usedFallback ? { _fromFallback: true } : {}) })); |
| 421 | } |
| 422 | |
| 423 | function repairCronJobsInBackground(gatewayManager: GatewayManager, jobs: GatewayCronJob[]): void { |
| 424 | const jobsToRepairDelivery = jobs.filter((job) => { |
no test coverage detected