const fs = require("fs"); const os = require("os"); const path = require("path"); const express = require("express"); const http = require("http"); const { Server } = require("socket.io"); const pino = require("pino"); const { generateMusicPlan } = require("./lib/music/generator"); const { loadMeta } = require("./lib/training"); const PORT = Number(process.env.PORT || 0); const log = pino({ name: "ai-music" }); const app = express(); app.use(express.json()); app.get("/health", (req, res) => { try { const meta = loadMeta(); res.json({ ok: true, uptime: process.uptime(), training: { step: meta.step, loss: meta.loss } }); } catch (err) { log.error({ err: err.message }, "health check failed"); res.status(500).json({ ok: false, error: err.message }); } }); app.post("/api/generate", (req, res) => { try { const plan = generateMusicPlan(req.body || {}); res.json(plan); } catch (err) { log.warn({ err: err.message }, "api generation failed"); res.status(400).json({ ok: false, error: err.message }); } }); app.use(express.static(path.join(__dirname, "public"))); const server = http.createServer(app); const io = new Server(server, { cors: { origin: "*" } }); io.on("connection", socket => { log.info({ id: socket.id }, "client connected"); socket.on("disconnect", () => log.info({ id: socket.id }, "client disconnected")); socket.on("generate-music", params => { log.info({ id: socket.id, params }, "music generation requested"); try { const plan = generateMusicPlan(params || {}); socket.emit("music-generated", plan); } catch (err) { log.error({ id: socket.id, err: err.message }, "generation failed"); socket.emit("music-generated", { ok: false, error: err.message }); } }); }); server.listen(PORT, () => { const addr = server.address(); const port = typeof addr === "object" && addr ? addr.port : 0; log.info({ port }, "ai music server listening"); try { fs.writeFileSync(path.join(os.homedir(), ".skynet_port"), String(port)); } catch (err) { log.warn({ err: err.message }, "failed to persist port file"); } });