import type { Config, CronJobConfig } from '../config/schema.js'; /** * Builds config-derived cron jobs that are not manually listed under automation.cron. * This keeps opinionated automation features opt-in while reusing the existing CronScheduler. */ export function buildPresetCronJobs(config: Config): CronJobConfig[] { const jobs: CronJobConfig[] = []; const existingNames = new Set(config.automation.cron.map((job) => job.name)); const briefing = config.automation.daily_briefing; if (briefing.enabled) { if (!briefing.output) { console.warn('automation.daily_briefing.enabled=true but output is missing; skipping daily briefing job'); } else if (existingNames.has(briefing.name)) { console.warn(`automation.daily_briefing name '${briefing.name}' conflicts with automation.cron; skipping preset job`); } else { jobs.push({ name: briefing.name, schedule: briefing.schedule, message: briefing.prompt, output: briefing.output, enabled: true, timezone: briefing.timezone, model_tier: briefing.model_tier, once_per_local_day: briefing.dedupe_per_local_day, }); } } return jobs; }