2025-11-15 07:37:21 -07:00

98 lines
2.6 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server"
/**
* POST /api/agents/create
*
* Receives agent packages from the client and registers them with n8n.
* The system prompt is forwarded to an n8n workflow that can store and manage custom agents.
*/
export async function POST(request: NextRequest) {
try {
const body = await request.json() as {
agentId?: string
systemPrompt?: string
metadata?: {
displayName?: string
summary?: string
tags?: string[]
recommendedIcon?: string
whenToUse?: string
}
}
const { agentId, systemPrompt, metadata } = body
// Validate required fields
if (!agentId || !systemPrompt) {
return NextResponse.json(
{ error: "Missing required fields: agentId, systemPrompt" },
{ status: 400 }
)
}
// Get the custom agent registration webhook from environment
const registrationWebhook = process.env.CUSTOM_AGENT_REGISTRATION_WEBHOOK
if (!registrationWebhook) {
// If no registration webhook configured, store locally only
return NextResponse.json({
success: true,
agentId,
message: "Agent stored locally (no registration webhook configured)",
})
}
// Forward to n8n workflow for persistent storage
const n8nResponse = await fetch(registrationWebhook, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
agentId,
systemPrompt,
metadata: {
displayName: metadata?.displayName,
summary: metadata?.summary,
tags: metadata?.tags,
recommendedIcon: metadata?.recommendedIcon,
whenToUse: metadata?.whenToUse,
createdAt: new Date().toISOString(),
},
}),
})
if (!n8nResponse.ok) {
const errorText = await n8nResponse.text()
console.error("n8n registration failed:", errorText)
return NextResponse.json(
{
error: "Failed to register agent with backend",
details: errorText
},
{ status: 500 }
)
}
const result = await n8nResponse.json() as { promptToken?: string }
return NextResponse.json({
success: true,
agentId,
promptToken: result.promptToken || agentId, // Backend can return a token
message: "Agent registered successfully",
})
} catch (error) {
console.error("Error creating agent:", error)
return NextResponse.json(
{
error: "Failed to create agent",
details: error instanceof Error ? error.message : "Unknown error"
},
{ status: 500 }
)
}
}