/** * WebSocket route for real-time agent communication */ import { NextRequest } from "next/server" import { getCloudflareContext } from "@opennextjs/cloudflare" // Get Durable Object stub function getDurableObjectStub(runId: string, env: any) { const id = env.BANDIT_AGENT.idFromName(runId) return env.BANDIT_AGENT.get(id) } /** * GET /api/agent/[runId]/ws * Upgrade to WebSocket connection */ export async function GET( request: NextRequest, { params }: { params: { runId: string } } ) { const runId = params.runId const { env } = await getCloudflareContext() if (!env?.BANDIT_AGENT) { return new Response("Durable Object binding not found", { status: 500 }) } try { // Forward WebSocket upgrade to Durable Object const stub = getDurableObjectStub(runId, env) // Create a new request with WebSocket upgrade headers const upgradeHeader = request.headers.get('Upgrade') if (!upgradeHeader || upgradeHeader !== 'websocket') { return new Response('Expected Upgrade: websocket', { status: 426 }) } // Forward the request to DO return await stub.fetch(request) } catch (error) { console.error('WebSocket upgrade error:', error) return new Response( error instanceof Error ? error.message : 'Unknown error', { status: 500 } ) } }