117 lines
3.0 KiB
TypeScript
117 lines
3.0 KiB
TypeScript
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);
|
|
});
|