UNPKG

@agentforce/adk

Version:

AgentForce Agent Development Kit - A powerful framework for building AI agents and servers

88 lines (76 loc) 2.9 kB
import type { AgentForceServer } from "../../server"; import type { AgentForceAgent } from "../../agent"; import type { RouteAgentSchema } from "./addRouteAgent"; import { createHtmlFileHandler } from "../handler/htmlFileHandler"; import { createFormPostHandler } from "../handler/formPostHandler"; import { normalizePath } from "../handler/validationHandler"; /** * Adds a form trigger that creates both GET and POST routes for form handling (chainable method) * - GET route serves the HTML or Handlebars template file * - POST route processes form submission with the agent * * @param this - The AgentForceServer instance (bound context) * @param formName - The name/path for the form routes (e.g., "simple-prompt-input") * @param filePath - Path to the HTML or HBS form file to serve * @param agent - The AgentForce agent to handle form submissions * @param schema - Optional schema configuration for input and output validation * @returns {AgentForceServer} The server instance for method chaining */ export function addFormTrigger( this: AgentForceServer, formName: string, filePath: string, agent: AgentForceAgent, schema?: RouteAgentSchema, ): AgentForceServer { // Validate inputs if (!formName || typeof formName !== "string") { throw new Error("Form name must be a non-empty string"); } if (!filePath || typeof filePath !== "string") { throw new Error("File path must be a non-empty string"); } if (!agent) { throw new Error("Agent instance is required"); } // Normalize the path const normalizedPath = normalizePath(formName); const log = this.getLogger(); const serverName = this.getName(); log.info({ serverName, formName, path: normalizedPath, filePath, agentName: agent["getName"](), schema, action: "form_trigger_adding", }, `Adding form trigger: ${normalizedPath}`); // Prepare template data for Handlebars templates const templateData = { action: normalizedPath, title: `Form: ${formName}`, submitText: "Submit", }; // We need to store handlers directly as they return Response objects // not data to be wrapped in JSON // Store the GET route for serving HTML/HBS this.addToStaticRoutes({ method: "GET", path: normalizedPath, responseData: createHtmlFileHandler(filePath, templateData), }); // Store the POST route for form submission with schema support this.addToStaticRoutes({ method: "POST", path: normalizedPath, responseData: createFormPostHandler(agent, normalizedPath, schema), }); log.info({ serverName, formName, path: normalizedPath, action: "form_trigger_added", }, `Form trigger added: GET/POST ${normalizedPath}`); return this; }