import { createServer } from "node:http"; import { CopilotRuntime, createCopilotRuntimeHandler, BuiltInAgent, } from "@copilotkit/runtime/v2"; import { createCopilotNodeHandler } from "@copilotkit/runtime/v2/node"; const runtime = new CopilotRuntime({ agents: { default: new BuiltInAgent({ model: "openai/gpt-5-mini" }), }, }); const copilotHandler = createCopilotRuntimeHandler({ runtime, basePath: "/api/copilotkit", cors: true, }); const copilotNodeHandler = createCopilotNodeHandler(copilotHandler); const server = createServer(async (req, res) => { const url = new URL(req.url ?? "/", `http://${req.headers.host}`); // CopilotKit endpoints if (url.pathname.startsWith("/api/copilotkit")) { return copilotNodeHandler(req, res); } // Root if (url.pathname === "/") { res.writeHead(200, { "Content-Type": "application/json" }); res.end( JSON.stringify({ status: "ok", message: "CopilotKit Node runtime" }), ); return; } // Health check if (url.pathname === "/health") { res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify({ status: "healthy" })); return; } // 404 res.writeHead(404, { "Content-Type": "application/json" }); res.end(JSON.stringify({ error: "Not found" })); }); const port = Number(process.env.PORT ?? 4001); server.listen(port, () => { console.log(`Node runtime listening on http://localhost:${port}`); console.log(` CopilotKit: http://localhost:${port}/api/copilotkit`); });