sandbox-agent/foundry/packages/desktop/scripts/build-sidecar.ts
Nicholas Kissel f6656a90af Add Foundry Tauri v2 desktop app with UI polish
- Scaffold Tauri v2 desktop package (foundry/packages/desktop)
- Sidecar build script compiles backend into standalone Bun binary
- Frontend build script packages Vite output for Tauri webview
- macOS glass-effect app icon following Big Sur design standards
- Collapsible sidebars with smooth width transitions
- Inset content framing with borders and nested border-radius (Outer R = Inner R + Padding)
- iMessage-style chat bubble styling with proper corner radii
- Styled composer input with matching border-radius
- Vertical separator between chat and right sidebar
- Website download button component
- Cargo workspace exclude for standalone Tauri build

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:27:35 -07:00

68 lines
2 KiB
TypeScript

import { execSync } from "node:child_process";
import { mkdirSync, existsSync } from "node:fs";
import { resolve, dirname } from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
const desktopRoot = resolve(__dirname, "..");
const sidecarDir = resolve(desktopRoot, "src-tauri/sidecars");
const isDev = process.argv.includes("--dev");
// Detect current architecture
function currentTarget(): string {
const arch = process.arch === "arm64" ? "aarch64" : "x86_64";
return `${arch}-apple-darwin`;
}
// Target triples to build
const targets: Array<{ bunTarget: string; tripleTarget: string }> = isDev
? [
{
bunTarget: process.arch === "arm64" ? "bun-darwin-arm64" : "bun-darwin-x64",
tripleTarget: currentTarget(),
},
]
: [
{
bunTarget: "bun-darwin-arm64",
tripleTarget: "aarch64-apple-darwin",
},
{
bunTarget: "bun-darwin-x64",
tripleTarget: "x86_64-apple-darwin",
},
];
function run(cmd: string, opts?: { cwd?: string; env?: NodeJS.ProcessEnv }) {
console.log(`> ${cmd}`);
execSync(cmd, {
stdio: "inherit",
cwd: opts?.cwd ?? desktopRoot,
env: { ...process.env, ...opts?.env },
});
}
// Step 1: Build the backend with tsup
console.log("\n=== Building backend with tsup ===\n");
run("pnpm --filter @sandbox-agent/foundry-backend build", {
cwd: resolve(desktopRoot, "../../.."),
});
// Step 2: Compile standalone binaries with bun
mkdirSync(sidecarDir, { recursive: true });
const backendEntry = resolve(desktopRoot, "../backend/dist/index.js");
if (!existsSync(backendEntry)) {
console.error(`Backend build output not found at ${backendEntry}`);
process.exit(1);
}
for (const { bunTarget, tripleTarget } of targets) {
const outfile = resolve(sidecarDir, `foundry-backend-${tripleTarget}`);
console.log(`\n=== Compiling sidecar for ${tripleTarget} ===\n`);
run(`bun build --compile --target ${bunTarget} ${backendEntry} --outfile ${outfile}`);
}
console.log("\n=== Sidecar build complete ===\n");