import { config as loadEnv } from "dotenv"; import { eq } from "drizzle-orm"; import Module from "node:module"; import { mkdir, writeFile } from "node:fs/promises"; import path from "node:path"; loadEnv({ path: ".env.local" }); const moduleLoader = Module as typeof Module & { _load: (request: string, parent: NodeModule | null, isMain: boolean) => unknown; }; const originalLoad = moduleLoader._load; moduleLoader._load = function patchedServerOnlyLoad( this: typeof moduleLoader, request, parent, isMain ) { if (request === "server-only") { return {}; } return originalLoad.call(this, request, parent, isMain); }; const dryRun = process.argv.includes("--dry-run"); const force = process.argv.includes("--force"); const skipBackup = process.argv.includes("--skip-backup"); function createBackupPath() { const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); return path.join( process.cwd(), "backups", `agent-workflow-ui-config-before-preview-backfill-${timestamp}.json` ); } async function main() { const dbModule = await import("../lib/db"); const schemaModule = await import("../lib/db/schema"); const workflowConfig = await import("../lib/agents/workflow-ui-config"); const previewImages = await import("../lib/agents/workflow-preview-images"); const { db } = dbModule; const { systemSettings } = schemaModule; const [setting] = await db .select({ value: systemSettings.value }) .from(systemSettings) .where(eq(systemSettings.key, workflowConfig.AGENT_WORKFLOW_UI_CONFIG_KEY)) .limit(1); if (!setting?.value) { console.log("No agent workflow UI config found."); return; } const normalized = workflowConfig.normalizeAgentWorkflowUiConfig(setting.value); const { config: optimized, summary } = await previewImages.optimizeAgentWorkflowUiConfigPreviewImages(normalized, { force, concurrency: 3, dryRun, }); console.log( JSON.stringify( { dryRun, force, summary, }, null, 2 ) ); if (dryRun) { return; } if (summary.optimized > 0) { if (!skipBackup) { const backupPath = createBackupPath(); await mkdir(path.dirname(backupPath), { recursive: true }); await writeFile( backupPath, JSON.stringify( { key: workflowConfig.AGENT_WORKFLOW_UI_CONFIG_KEY, backedUpAt: new Date().toISOString(), value: setting.value, }, null, 2 ) ); console.log(`Backup written: ${backupPath}`); } await db .update(systemSettings) .set({ value: optimized, updatedAt: new Date(), }) .where(eq(systemSettings.key, workflowConfig.AGENT_WORKFLOW_UI_CONFIG_KEY)); console.log(`Updated ${summary.optimized} agent workflow preview images.`); } else { console.log("No preview image update needed."); } } main().catch((error) => { console.error(error); process.exit(1); });