import { mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs"; import { join } from "node:path"; // Generate src/assets.ts with embedded file contents function generateAssets() { const agentsMd = readFileSync("src/AGENTS.md", "utf-8"); const skills: Record = {}; collectMdFiles("src/skills", skills); const rules: Record = {}; collectMdFiles("src/rules", rules); const code = `// Auto-generated by build.ts — do not edit export const AGENTS_MD = ${JSON.stringify(agentsMd)}; export const SKILLS: Record = ${JSON.stringify(skills, null, 2)}; export const RULES: Record = ${JSON.stringify(rules, null, 2)}; `; writeFileSync("src/assets.ts", code); console.log("Generated src/assets.ts"); } function collectMdFiles(dir: string, out: Record, prefix = "") { const entries = readdirSync(dir, { withFileTypes: true }); for (const entry of entries) { const full = join(dir, entry.name); const key = prefix ? `${prefix}/${entry.name}` : entry.name; if (entry.isDirectory()) { collectMdFiles(full, out, key); } else if (entry.name.endsWith(".md")) { out[key] = readFileSync(full, "utf-8"); } } } // Generate assets, then build. generateAssets(); const args = process.argv.slice(2); // `--exe` (used by `bun make:exe` in release CI) produces a standalone binary // at exe/paikea, optionally cross-compiled via a forwarded `--target=...`. const exeMode = args.includes("--exe"); const targetArg = args.find((a) => a.startsWith("--target=")); if (exeMode) { mkdirSync("exe", { recursive: true }); const proc = Bun.spawnSync( [ "bun", "build", "./src/cli/index.ts", "--compile", "--minify", ...(targetArg ? [targetArg] : []), "--outfile", "exe/paikea", ], { stdout: "inherit", stderr: "inherit" }, ); if (!proc.success) { console.error("Build failed"); process.exit(1); } console.log( `Build successful! Binary at exe/paikea${targetArg ? ` (${targetArg.slice("--target=".length)})` : ""}`, ); } else { const result = await Bun.build({ entrypoints: ["./src/cli/index.ts"], outdir: "./dist", target: "bun", compile: true, minify: true, }); if (!result.success) { console.error("Build failed:"); for (const log of result.logs) { console.error(log); } process.exit(1); } renameSync("./dist/cli", "./dist/paikea"); console.log("Build successful! Binary at dist/paikea"); }