| import fs from "node:fs/promises"; |
| import path from "node:path"; |
| import { fileURLToPath, pathToFileURL } from "node:url"; |
|
|
| const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); |
|
|
| export function getA2uiPaths(env = process.env) { |
| const srcDir = env.OPENCLAW_A2UI_SRC_DIR ?? path.join(repoRoot, "src", "canvas-host", "a2ui"); |
| const outDir = env.OPENCLAW_A2UI_OUT_DIR ?? path.join(repoRoot, "dist", "canvas-host", "a2ui"); |
| return { srcDir, outDir }; |
| } |
|
|
| export async function copyA2uiAssets({ srcDir, outDir }: { srcDir: string; outDir: string }) { |
| const skipMissing = process.env.OPENCLAW_A2UI_SKIP_MISSING === "1"; |
| try { |
| await fs.stat(path.join(srcDir, "index.html")); |
| await fs.stat(path.join(srcDir, "a2ui.bundle.js")); |
| } catch (err) { |
| const message = 'Missing A2UI bundle assets. Run "pnpm canvas:a2ui:bundle" and retry.'; |
| if (skipMissing) { |
| console.warn(`${message} Skipping copy (OPENCLAW_A2UI_SKIP_MISSING=1).`); |
| return; |
| } |
| throw new Error(message, { cause: err }); |
| } |
| await fs.mkdir(path.dirname(outDir), { recursive: true }); |
| await fs.cp(srcDir, outDir, { recursive: true }); |
| } |
|
|
| async function main() { |
| const { srcDir, outDir } = getA2uiPaths(); |
| await copyA2uiAssets({ srcDir, outDir }); |
| } |
|
|
| if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) { |
| main().catch((err) => { |
| console.error(String(err)); |
| process.exit(1); |
| }); |
| } |
|
|