import { NextResponse } from "next/server"; import { ZodError } from "zod"; import { auth } from "@/app/(auth)/auth"; import { canvasCapabilityClientCommandSchema } from "@/lib/canvas/capabilities/client-command"; import { CanvasCapabilityRuntimeError } from "@/lib/canvas/capabilities/context"; import { getCanvasCapabilityManifest } from "@/lib/canvas/capabilities/registry"; import { executeCanvasCapabilityRuntime } from "@/lib/canvas/capabilities/runtime"; import { getCanvasCapabilityTask } from "@/lib/canvas/capabilities/task-store"; import { CanvasAgentMutationError } from "@/lib/canvas/agent-mutations"; export const dynamic = "force-dynamic"; export const maxDuration = 600; export async function GET( request: Request, { params }: { params: Promise<{ id: string }> } ) { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ success: false, error: "未登录" }, { status: 401 }); } const { id } = await params; const requestId = new URL(request.url).searchParams.get("requestId"); if (!requestId) { return NextResponse.json({ success: true, capabilities: getCanvasCapabilityManifest(), }); } const task = await getCanvasCapabilityTask({ requestId, userId: session.user.id, projectId: id, }); if (!task) { return NextResponse.json( { success: false, error: "能力任务不存在" }, { status: 404 } ); } return NextResponse.json({ success: true, task }); } export async function POST( request: Request, { params }: { params: Promise<{ id: string }> } ) { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ success: false, error: "未登录" }, { status: 401 }); } try { const { id } = await params; const command = canvasCapabilityClientCommandSchema.parse(await request.json()); const result = await executeCanvasCapabilityRuntime({ command, projectId: id, requestHeaders: request.headers, requestUrl: request.url, userId: session.user.id, }); return NextResponse.json({ success: true, ...result }); } catch (error) { if ( error instanceof CanvasCapabilityRuntimeError || error instanceof CanvasAgentMutationError ) { return NextResponse.json( { success: false, error: error.message, code: error.code }, { status: error.status } ); } if (error instanceof ZodError) { return NextResponse.json( { success: false, error: "画布能力参数无效", issues: error.issues, }, { status: 400 } ); } const message = error instanceof Error ? error.message : "执行画布能力失败"; return NextResponse.json( { success: false, error: message }, { status: 500 } ); } }