import type { IncomingMessage, ServerResponse } from 'http'; import type { HostApiContext } from '../context'; import { sendJson } from '../route-utils'; export async function handleAppRoutes( req: IncomingMessage, res: ServerResponse, url: URL, ctx: HostApiContext, ): Promise { if (url.pathname === '/api/events' && req.method === 'GET') { // CORS headers are already set by the server middleware. res.writeHead(200, { 'Content-Type': 'text/event-stream; charset=utf-8', 'Cache-Control': 'no-cache, no-transform', Connection: 'keep-alive', }); res.write(': connected\n\n'); ctx.eventBus.addSseClient(res); res.write(`event: opencode:status\ndata: ${JSON.stringify(ctx.opencodeManager.getStatus())}\n\n`); return true; } if (url.pathname === '/api/app/runtime-info' && req.method === 'GET') { sendJson(res, 200, { runtime: 'opencode', status: ctx.opencodeManager.getStatus(), }); return true; } // OPTIONS is handled by the server middleware; no route-level handler needed. return false; }