import type { NextConfig } from "next"; import { readFileSync } from "fs"; import { join } from "path"; const { version } = JSON.parse(readFileSync(join(__dirname, "package.json"), "utf8")) as { version: string }; let piVersion = "unknown"; try { const piPkgPath = join(__dirname, "node_modules/@earendil-works/pi-coding-agent/package.json"); piVersion = (JSON.parse(readFileSync(piPkgPath, "utf8")) as { version: string }).version; } catch { /* package not found, use default */ } const allowedDevOrigins = [ "192.168.*.*", ...(process.env.PI_WEB_ALLOWED_HOSTS?.split(",") ?? []), ].map((origin) => origin.trim()).filter(Boolean); const nextConfig: NextConfig = { devIndicators: false, serverExternalPackages: [ "undici", "@earendil-works/pi-coding-agent", "@earendil-works/pi-agent-core", "@earendil-works/pi-ai", "@earendil-works/pi-tui", ], allowedDevOrigins, async headers() { return [ { source: "/", headers: [ { key: "Cache-Control", value: "private, no-cache, max-age=0, must-revalidate" }, ], }, { source: "/sw.js", headers: [ { key: "Cache-Control", value: "public, max-age=0, must-revalidate" }, { key: "Service-Worker-Allowed", value: "/" }, ], }, { source: "/manifest.webmanifest", headers: [ { key: "Cache-Control", value: "public, max-age=0, must-revalidate" }, ], }, ]; }, env: { NEXT_PUBLIC_APP_VERSION: version, NEXT_PUBLIC_PI_VERSION: piVersion, }, }; export default nextConfig;