Files
deer-flow/frontend/scripts/save-demo.js
2026-01-24 18:33:30 +08:00

57 lines
1.4 KiB
JavaScript

import { config } from "dotenv";
import fs from "fs";
import path from "path";
import { env } from "process";
export async function main() {
const url = new URL(process.argv[2]);
const threadId = url.pathname.split("/").pop();
const host = url.host;
const apiURL = new URL(
`/api/langgraph/threads/${threadId}/history`,
`${url.protocol}//${host}`,
);
const response = await fetch(apiURL, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
limit: 10,
}),
});
const data = (await response.json())[0];
if (!data) {
console.error("No data found");
return;
}
const title = data.values.title;
const rootPath = path.resolve(process.cwd(), "public/demo/threads", threadId);
if (fs.existsSync(rootPath)) {
fs.rmSync(rootPath, { recursive: true });
}
fs.mkdirSync(rootPath, { recursive: true });
fs.writeFileSync(
path.resolve(rootPath, "thread.json"),
JSON.stringify(data, null, 2),
);
const backendRootPath = path.resolve(
process.cwd(),
"../backend/.deer-flow/threads",
threadId,
);
const outputsPath = path.resolve(backendRootPath, "user-data/outputs");
if (fs.existsSync(outputsPath)) {
fs.cpSync(outputsPath, path.resolve(rootPath, "user-data/outputs"), {
recursive: true,
});
}
console.info(`Saved demo "${title}" to ${rootPath}`);
}
config();
main();