agentxjs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +602 -0
- package/dist/index.cjs +1292 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +88 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.js +1283 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/sse/index.cjs +633 -0
- package/dist/runtime/sse/index.cjs.map +1 -0
- package/dist/runtime/sse/index.d.cts +159 -0
- package/dist/runtime/sse/index.d.ts +159 -0
- package/dist/runtime/sse/index.js +621 -0
- package/dist/runtime/sse/index.js.map +1 -0
- package/dist/server/adapters/express.cjs +81 -0
- package/dist/server/adapters/express.cjs.map +1 -0
- package/dist/server/adapters/express.d.cts +75 -0
- package/dist/server/adapters/express.d.ts +75 -0
- package/dist/server/adapters/express.js +78 -0
- package/dist/server/adapters/express.js.map +1 -0
- package/dist/server/adapters/hono.cjs +32 -0
- package/dist/server/adapters/hono.cjs.map +1 -0
- package/dist/server/adapters/hono.d.cts +96 -0
- package/dist/server/adapters/hono.d.ts +96 -0
- package/dist/server/adapters/hono.js +28 -0
- package/dist/server/adapters/hono.js.map +1 -0
- package/dist/server/adapters/index.cjs +135 -0
- package/dist/server/adapters/index.cjs.map +1 -0
- package/dist/server/adapters/index.d.cts +5 -0
- package/dist/server/adapters/index.d.ts +5 -0
- package/dist/server/adapters/index.js +125 -0
- package/dist/server/adapters/index.js.map +1 -0
- package/dist/server/adapters/next.cjs +30 -0
- package/dist/server/adapters/next.cjs.map +1 -0
- package/dist/server/adapters/next.d.cts +107 -0
- package/dist/server/adapters/next.d.ts +107 -0
- package/dist/server/adapters/next.js +25 -0
- package/dist/server/adapters/next.js.map +1 -0
- package/dist/server/index.cjs +1093 -0
- package/dist/server/index.cjs.map +1 -0
- package/dist/server/index.d.cts +131 -0
- package/dist/server/index.d.ts +131 -0
- package/dist/server/index.js +1080 -0
- package/dist/server/index.js.map +1 -0
- package/dist/types-Cgfcw91r.d.cts +282 -0
- package/dist/types-Cgfcw91r.d.ts +282 -0
- package/dist/types-OVKV6qpE.d.cts +118 -0
- package/dist/types-OVKV6qpE.d.ts +118 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/SSEServerTransport.ts","../../src/server/createAgentXHandler.ts","../../src/server/adapters/express.ts","../../src/server/adapters/hono.ts","../../src/server/adapters/next.ts"],"names":["createLogger","isStreamEvent","isErrorEvent","logger","result","definitions"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SSEServerTransport - Server-Sent Events transport implementation\n *\n * Handles SSE connections for streaming agent events to clients.\n */\n\n/* eslint-disable no-undef */\n// ReadableStream and ReadableStreamDefaultController are Web APIs available in Node.js 18+\n\nimport type { Agent, Unsubscribe, StreamEventType, ErrorEvent } from \"@agentxjs/types\";\nimport { isStreamEvent, isErrorEvent } from \"@agentxjs/types\";\nimport type { TransportConnection, ConnectionState } from \"./types\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/SSEServerTransport\");\n\n/**\n * SSE Connection implementation\n */\nexport class SSEConnection implements TransportConnection {\n readonly connectionId: string;\n readonly agentId: string;\n\n private _state: ConnectionState = \"connecting\";\n private _controller: ReadableStreamDefaultController<Uint8Array> | null = null;\n private _encoder = new TextEncoder();\n private _closeHandlers: Array<() => void> = [];\n private _unsubscribe: Unsubscribe | null = null;\n private _heartbeatInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(connectionId: string, agentId: string) {\n this.connectionId = connectionId;\n this.agentId = agentId;\n logger.debug(\"SSE connection created\", {\n connectionId,\n agentId,\n });\n }\n\n get state(): ConnectionState {\n return this._state;\n }\n\n /**\n * Create SSE Response stream\n */\n createResponse(agent: Agent): Response {\n const stream = new ReadableStream<Uint8Array>({\n start: (controller) => {\n this._controller = controller;\n this._state = \"open\";\n\n // Subscribe to agent events (forward Stream events + Error events)\n this._unsubscribe = agent.on((event) => {\n if (isStreamEvent(event)) {\n this.send(event);\n } else if (isErrorEvent(event)) {\n this.sendError(event);\n }\n });\n\n // Start heartbeat\n this._heartbeatInterval = setInterval(() => {\n this.sendHeartbeat();\n }, 30000); // 30 seconds\n },\n cancel: () => {\n this.close();\n },\n });\n\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\", // Disable nginx buffering\n },\n });\n }\n\n /**\n * Send a Stream event to the client\n */\n send(event: StreamEventType): void {\n if (this._state !== \"open\" || !this._controller) {\n return;\n }\n\n try {\n const eventType = event.type;\n const data = JSON.stringify(event);\n const message = `event: ${eventType}\\ndata: ${data}\\n\\n`;\n this._controller.enqueue(this._encoder.encode(message));\n } catch {\n // Connection may have closed\n this.close();\n }\n }\n\n /**\n * Send an Error event to the client\n *\n * ErrorEvent is independent from Stream events but also transported via SSE.\n */\n sendError(event: ErrorEvent): void {\n if (this._state !== \"open\" || !this._controller) {\n return;\n }\n\n try {\n const eventType = event.type; // \"error\"\n const data = JSON.stringify(event);\n const message = `event: ${eventType}\\ndata: ${data}\\n\\n`;\n this._controller.enqueue(this._encoder.encode(message));\n } catch {\n // Connection may have closed\n this.close();\n }\n }\n\n /**\n * Send heartbeat to keep connection alive\n */\n private sendHeartbeat(): void {\n if (this._state !== \"open\" || !this._controller) {\n return;\n }\n\n try {\n const message = `: heartbeat ${Date.now()}\\n\\n`;\n this._controller.enqueue(this._encoder.encode(message));\n } catch {\n this.close();\n }\n }\n\n /**\n * Close the connection\n */\n close(): void {\n if (this._state === \"closed\" || this._state === \"closing\") {\n return;\n }\n\n logger.debug(\"Closing SSE connection\", {\n connectionId: this.connectionId,\n agentId: this.agentId,\n });\n\n this._state = \"closing\";\n\n // Stop heartbeat\n if (this._heartbeatInterval) {\n clearInterval(this._heartbeatInterval);\n this._heartbeatInterval = null;\n }\n\n // Unsubscribe from agent events\n if (this._unsubscribe) {\n this._unsubscribe();\n this._unsubscribe = null;\n }\n\n // Close stream\n if (this._controller) {\n try {\n this._controller.close();\n } catch {\n // Already closed\n }\n this._controller = null;\n }\n\n this._state = \"closed\";\n\n // Notify close handlers\n for (const handler of this._closeHandlers) {\n try {\n handler();\n } catch {\n // Ignore handler errors\n }\n }\n this._closeHandlers = [];\n }\n\n /**\n * Register close handler\n */\n onClose(handler: () => void): void {\n if (this._state === \"closed\") {\n handler();\n } else {\n this._closeHandlers.push(handler);\n }\n }\n}\n\n/**\n * SSE Connection Manager\n *\n * Manages all SSE connections for an AgentX handler.\n */\nexport class SSEConnectionManager {\n private _connections = new Map<string, SSEConnection>();\n private _idCounter = 0;\n\n /**\n * Create a new SSE connection for an agent\n */\n createConnection(agent: Agent): { connection: SSEConnection; response: Response } {\n const connectionId = `conn_${++this._idCounter}_${Date.now()}`;\n const connection = new SSEConnection(connectionId, agent.agentId);\n const response = connection.createResponse(agent);\n\n this._connections.set(connectionId, connection);\n\n connection.onClose(() => {\n this._connections.delete(connectionId);\n });\n\n return { connection, response };\n }\n\n /**\n * Get connection by ID\n */\n getConnection(connectionId: string): SSEConnection | undefined {\n return this._connections.get(connectionId);\n }\n\n /**\n * Get all connections for an agent\n */\n getConnectionsForAgent(agentId: string): SSEConnection[] {\n return Array.from(this._connections.values()).filter((conn) => conn.agentId === agentId);\n }\n\n /**\n * Close all connections for an agent\n */\n closeConnectionsForAgent(agentId: string): void {\n for (const conn of this.getConnectionsForAgent(agentId)) {\n conn.close();\n }\n }\n\n /**\n * Close all connections\n */\n closeAll(): void {\n for (const conn of this._connections.values()) {\n conn.close();\n }\n this._connections.clear();\n }\n\n /**\n * Get active connection count\n */\n get connectionCount(): number {\n return this._connections.size;\n }\n}\n","/**\n * createAgentXHandler - Create framework-agnostic HTTP handler\n *\n * Based on Web Standards (Request/Response).\n * Can be adapted to Express, Fastify, Hono, Next.js, etc.\n *\n * @example\n * ```typescript\n * import { agentx } from \"agentxjs\";\n * import { createAgentXHandler } from \"agentxjs/server\";\n *\n * const handler = createAgentXHandler(agentx);\n *\n * // Express\n * app.use(\"/agentx\", expressAdapter(handler));\n *\n * // Hono\n * app.use(\"/agentx/*\", honoAdapter(handler));\n * ```\n */\n\nimport type {\n AgentX,\n Agent,\n UserMessage,\n DefinitionRecord,\n ImageRecord,\n SessionRecord,\n MessageRecord,\n ContainerRecord,\n ContainerConfig,\n} from \"@agentxjs/types\";\nimport type {\n AgentXHandler,\n AgentXHandlerOptions,\n ParsedRequest,\n PlatformInfoResponse,\n HealthResponse,\n AgentListResponse,\n AgentInfoResponse,\n CreateAgentRequest,\n CreateAgentResponse,\n SendMessageRequest,\n SendMessageResponse,\n InterruptResponse,\n ErrorResponse,\n ErrorCode,\n} from \"./types\";\nimport { SSEConnectionManager } from \"./SSEServerTransport\";\nimport { createLogger } from \"@agentxjs/common\";\n\nconst logger = createLogger(\"agentx/AgentXHandler\");\n\nconst VERSION = \"0.1.0\";\n\n/**\n * Create an AgentX HTTP handler\n */\nexport function createAgentXHandler(\n agentx: AgentX,\n options: AgentXHandlerOptions = {}\n): AgentXHandler {\n const {\n basePath = \"\",\n allowDynamicCreation = false,\n allowedDefinitions = [],\n repository,\n hooks = {},\n } = options;\n\n const sseManager = new SSEConnectionManager();\n\n // Definition registry for dynamic creation\n const definitions = new Map<\n string,\n { definition: unknown; defaultConfig?: Record<string, unknown> }\n >();\n\n /**\n * Register a definition for dynamic creation\n */\n function registerDefinition(\n name: string,\n definition: unknown,\n defaultConfig?: Record<string, unknown>\n ): void {\n definitions.set(name, { definition, defaultConfig });\n }\n\n /**\n * Parse incoming request\n */\n function parseRequest(request: Request): ParsedRequest {\n const url = new URL(request.url);\n const method = request.method;\n\n // Remove basePath from pathname\n let path = url.pathname;\n if (basePath && path.startsWith(basePath)) {\n path = path.slice(basePath.length);\n }\n\n // Normalize path (remove trailing slash, ensure leading slash)\n path = \"/\" + path.replace(/^\\/+|\\/+$/g, \"\");\n\n // Route matching\n if (method === \"GET\" && path === \"/info\") {\n return { type: \"platform_info\" };\n }\n\n if (method === \"GET\" && path === \"/health\") {\n return { type: \"platform_health\" };\n }\n\n if (method === \"GET\" && path === \"/agents\") {\n return { type: \"list_agents\" };\n }\n\n if (method === \"POST\" && path === \"/agents\") {\n return { type: \"create_agent\" };\n }\n\n // Agent-specific routes: /agents/:agentId/...\n const agentMatch = path.match(/^\\/agents\\/([^/]+)(\\/.*)?$/);\n if (agentMatch) {\n const agentId = agentMatch[1];\n const subPath = agentMatch[2] || \"\";\n\n if (method === \"GET\" && subPath === \"\") {\n return { type: \"get_agent\", agentId };\n }\n\n if (method === \"DELETE\" && subPath === \"\") {\n return { type: \"delete_agent\", agentId };\n }\n\n if (method === \"GET\" && subPath === \"/sse\") {\n return { type: \"connect_sse\", agentId };\n }\n\n if (method === \"POST\" && subPath === \"/messages\") {\n return { type: \"send_message\", agentId };\n }\n\n if (method === \"POST\" && subPath === \"/interrupt\") {\n return { type: \"interrupt\", agentId };\n }\n }\n\n // Definitions routes: /definitions, /definitions/:name\n if (method === \"GET\" && path === \"/definitions\") {\n return { type: \"list_definitions\" };\n }\n\n const definitionMatch = path.match(/^\\/definitions\\/([^/]+)$/);\n if (definitionMatch) {\n const definitionName = definitionMatch[1];\n\n if (method === \"GET\") {\n return { type: \"get_definition\", definitionName };\n }\n if (method === \"PUT\") {\n return { type: \"save_definition\", definitionName };\n }\n if (method === \"DELETE\") {\n return { type: \"delete_definition\", definitionName };\n }\n if (method === \"HEAD\") {\n return { type: \"head_definition\", definitionName };\n }\n }\n\n // Images routes: /images, /images/:imageId, /images/:imageId/sessions\n if (method === \"GET\" && path === \"/images\") {\n return { type: \"list_images\" };\n }\n\n const imageMatch = path.match(/^\\/images\\/([^/]+)(\\/.*)?$/);\n if (imageMatch) {\n const imageId = imageMatch[1];\n const subPath = imageMatch[2] || \"\";\n\n if (method === \"GET\" && subPath === \"\") {\n return { type: \"get_image\", imageId };\n }\n if (method === \"PUT\" && subPath === \"\") {\n return { type: \"save_image\", imageId };\n }\n if (method === \"DELETE\" && subPath === \"\") {\n return { type: \"delete_image\", imageId };\n }\n if (method === \"HEAD\" && subPath === \"\") {\n return { type: \"head_image\", imageId };\n }\n if (method === \"GET\" && subPath === \"/sessions\") {\n return { type: \"list_image_sessions\", imageId };\n }\n if (method === \"DELETE\" && subPath === \"/sessions\") {\n return { type: \"delete_image_sessions\", imageId };\n }\n if (method === \"POST\" && subPath === \"/run\") {\n return { type: \"run_image\", imageId };\n }\n }\n\n // Sessions routes: /sessions, /sessions/:sessionId, /sessions/:sessionId/messages\n if (method === \"GET\" && path === \"/sessions\") {\n return { type: \"list_sessions\" };\n }\n\n const sessionMatch = path.match(/^\\/sessions\\/([^/]+)(\\/.*)?$/);\n if (sessionMatch) {\n const sessionId = sessionMatch[1];\n const subPath = sessionMatch[2] || \"\";\n\n if (method === \"GET\" && subPath === \"\") {\n return { type: \"get_session\", sessionId };\n }\n if (method === \"PUT\" && subPath === \"\") {\n return { type: \"save_session\", sessionId };\n }\n if (method === \"DELETE\" && subPath === \"\") {\n return { type: \"delete_session\", sessionId };\n }\n if (method === \"HEAD\" && subPath === \"\") {\n return { type: \"head_session\", sessionId };\n }\n if (method === \"GET\" && subPath === \"/messages\") {\n return { type: \"list_session_messages\", sessionId };\n }\n if (method === \"DELETE\" && subPath === \"/messages\") {\n return { type: \"delete_session_messages\", sessionId };\n }\n if (method === \"GET\" && subPath === \"/messages/count\") {\n return { type: \"count_session_messages\", sessionId };\n }\n if (method === \"POST\" && subPath === \"/resume\") {\n return { type: \"resume_session\", sessionId };\n }\n }\n\n // Users routes: /users/:userId/sessions\n const userMatch = path.match(/^\\/users\\/([^/]+)\\/sessions$/);\n if (userMatch && method === \"GET\") {\n return { type: \"list_user_sessions\", userId: userMatch[1] };\n }\n\n // Messages routes: /messages/:messageId\n const messageMatch = path.match(/^\\/messages\\/([^/]+)$/);\n if (messageMatch) {\n const messageId = messageMatch[1];\n if (method === \"GET\") {\n return { type: \"get_message\", messageId };\n }\n if (method === \"PUT\") {\n return { type: \"save_message\", messageId };\n }\n if (method === \"DELETE\") {\n return { type: \"delete_message\", messageId };\n }\n }\n\n // Containers routes: /containers, /containers/:containerId\n if (method === \"GET\" && path === \"/containers\") {\n return { type: \"list_containers\" };\n }\n\n if (method === \"POST\" && path === \"/containers\") {\n return { type: \"create_container\" };\n }\n\n const containerMatch = path.match(/^\\/containers\\/([^/]+)$/);\n if (containerMatch) {\n const containerId = containerMatch[1];\n if (method === \"GET\") {\n return { type: \"get_container\", containerId };\n }\n if (method === \"PUT\") {\n return { type: \"save_container\", containerId };\n }\n if (method === \"DELETE\") {\n return { type: \"delete_container\", containerId };\n }\n if (method === \"HEAD\") {\n return { type: \"head_container\", containerId };\n }\n }\n\n return { type: \"not_found\" };\n }\n\n /**\n * Create JSON response\n */\n function jsonResponse(data: unknown, status = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n\n /**\n * Create error response\n */\n function errorResponse(code: ErrorCode, message: string, status: number): Response {\n const body: ErrorResponse = {\n error: { code, message },\n };\n return jsonResponse(body, status);\n }\n\n /**\n * Get agent or return error response\n */\n function getAgentOrError(agentId: string): Agent | Response {\n const agent = agentx.agents.get(agentId);\n if (!agent) {\n return errorResponse(\"AGENT_NOT_FOUND\", `Agent ${agentId} not found`, 404);\n }\n if (agent.lifecycle === \"destroyed\") {\n return errorResponse(\"AGENT_DESTROYED\", `Agent ${agentId} has been destroyed`, 410);\n }\n return agent;\n }\n\n /**\n * Build agent info response\n */\n function buildAgentInfo(agent: Agent): AgentInfoResponse {\n return {\n agentId: agent.agentId,\n name: agent.definition.name,\n description: agent.definition.description,\n lifecycle: agent.lifecycle,\n state: agent.state,\n createdAt: agent.createdAt,\n };\n }\n\n // ============================================================================\n // Route Handlers\n // ============================================================================\n\n async function handlePlatformInfo(): Promise<Response> {\n const response: PlatformInfoResponse = {\n platform: \"AgentX\",\n version: VERSION,\n agentCount: agentx.agents.list().length,\n };\n return jsonResponse(response);\n }\n\n async function handleHealth(): Promise<Response> {\n const response: HealthResponse = {\n status: \"healthy\",\n timestamp: Date.now(),\n agentCount: agentx.agents.list().length,\n };\n return jsonResponse(response);\n }\n\n async function handleListAgents(): Promise<Response> {\n const allAgents = agentx.agents.list();\n const agents: AgentInfoResponse[] = allAgents.map((agent) => buildAgentInfo(agent));\n\n const response: AgentListResponse = { agents };\n return jsonResponse(response);\n }\n\n async function handleCreateAgent(request: Request): Promise<Response> {\n if (!allowDynamicCreation) {\n return errorResponse(\"DYNAMIC_CREATION_DISABLED\", \"Dynamic agent creation is disabled\", 403);\n }\n\n let body: CreateAgentRequest;\n try {\n body = (await request.json()) as CreateAgentRequest;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n\n if (!body.definition) {\n return errorResponse(\"INVALID_REQUEST\", \"Missing 'definition' field\", 400);\n }\n\n // Check if definition is allowed\n if (allowedDefinitions.length > 0 && !allowedDefinitions.includes(body.definition)) {\n return errorResponse(\n \"DEFINITION_NOT_FOUND\",\n `Definition '${body.definition}' is not allowed`,\n 403\n );\n }\n\n // Get registered definition\n const registered = definitions.get(body.definition);\n if (!registered) {\n return errorResponse(\n \"DEFINITION_NOT_FOUND\",\n `Definition '${body.definition}' not found`,\n 404\n );\n }\n\n // Get MetaImage for the definition\n const metaImage = await agentx.images.getMetaImage(body.definition);\n if (!metaImage) {\n return errorResponse(\n \"IMAGE_NOT_FOUND\",\n `MetaImage for definition '${body.definition}' not found`,\n 404\n );\n }\n\n // Create agent from image (Docker-style: docker run <image>)\n const agent = await agentx.images.run(metaImage.imageId);\n\n const response: CreateAgentResponse = {\n agentId: agent.agentId,\n name: agent.definition.name,\n lifecycle: agent.lifecycle,\n state: agent.state,\n createdAt: agent.createdAt,\n endpoints: {\n sse: `${basePath}/agents/${agent.agentId}/sse`,\n messages: `${basePath}/agents/${agent.agentId}/messages`,\n interrupt: `${basePath}/agents/${agent.agentId}/interrupt`,\n },\n };\n\n return jsonResponse(response, 201);\n }\n\n async function handleGetAgent(agentId: string): Promise<Response> {\n const result = getAgentOrError(agentId);\n if (result instanceof Response) return result;\n\n return jsonResponse(buildAgentInfo(result));\n }\n\n async function handleDeleteAgent(agentId: string): Promise<Response> {\n const result = getAgentOrError(agentId);\n if (result instanceof Response) return result;\n\n // Close any SSE connections\n sseManager.closeConnectionsForAgent(agentId);\n\n await agentx.agents.destroy(agentId);\n return new Response(null, { status: 204 });\n }\n\n async function handleConnectSSE(agentId: string): Promise<Response> {\n const result = getAgentOrError(agentId);\n if (result instanceof Response) return result;\n\n const agent = result;\n const { connection, response } = sseManager.createConnection(agent);\n\n // Call hook\n if (hooks.onConnect) {\n try {\n await hooks.onConnect(agentId, connection.connectionId);\n } catch {\n // Ignore hook errors\n }\n }\n\n // Register disconnect hook\n connection.onClose(() => {\n if (hooks.onDisconnect) {\n const result = hooks.onDisconnect(agentId, connection.connectionId);\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n }\n });\n\n return response;\n }\n\n async function handleSendMessage(agentId: string, request: Request): Promise<Response> {\n const result = getAgentOrError(agentId);\n if (result instanceof Response) return result;\n\n const agent = result;\n\n // Check if agent is busy\n if (agent.state !== \"idle\") {\n return errorResponse(\"AGENT_BUSY\", `Agent is currently ${agent.state}`, 409);\n }\n\n let body: SendMessageRequest;\n try {\n body = (await request.json()) as SendMessageRequest;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n\n if (!body.content) {\n return errorResponse(\"INVALID_REQUEST\", \"Missing 'content' field\", 400);\n }\n\n // Build UserMessage\n const message: UserMessage = {\n id: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,\n role: \"user\",\n subtype: \"user\",\n content: typeof body.content === \"string\" ? body.content : body.content,\n timestamp: Date.now(),\n };\n\n // Call hook\n if (hooks.onMessage) {\n try {\n await hooks.onMessage(agentId, message);\n } catch {\n // Ignore hook errors\n }\n }\n\n // Send message (non-blocking, response goes through SSE)\n agent.receive(message).catch((error) => {\n if (hooks.onError) {\n const result = hooks.onError(agentId, error);\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n }\n });\n\n const response: SendMessageResponse = {\n status: \"processing\",\n };\n return jsonResponse(response, 202);\n }\n\n async function handleInterrupt(agentId: string): Promise<Response> {\n const result = getAgentOrError(agentId);\n if (result instanceof Response) return result;\n\n const agent = result;\n agent.interrupt();\n\n const response: InterruptResponse = {\n interrupted: true,\n };\n return jsonResponse(response);\n }\n\n // ============================================================================\n // Repository Handlers (Images, Sessions, Messages)\n // ============================================================================\n\n function getRepository(): import(\"@agentxjs/types\").Repository {\n if (!repository) {\n throw new Error(\n \"Repository not configured. Pass 'repository' option to createAgentXHandler.\"\n );\n }\n return repository;\n }\n\n // ----- Definitions -----\n\n async function handleListDefinitions(): Promise<Response> {\n const repo = getRepository();\n const definitions = await repo.findAllDefinitions();\n return jsonResponse(definitions);\n }\n\n async function handleGetDefinition(name: string): Promise<Response> {\n const repo = getRepository();\n const definition = await repo.findDefinitionByName(name);\n if (!definition) {\n return errorResponse(\"INVALID_REQUEST\", `Definition ${name} not found`, 404);\n }\n return jsonResponse(definition);\n }\n\n async function handleSaveDefinition(name: string, request: Request): Promise<Response> {\n const repo = getRepository();\n let body: DefinitionRecord;\n try {\n body = (await request.json()) as DefinitionRecord;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n await repo.saveDefinition({ ...body, name });\n return new Response(null, { status: 204 });\n }\n\n async function handleDeleteDefinition(name: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteDefinition(name);\n return new Response(null, { status: 204 });\n }\n\n async function handleHeadDefinition(name: string): Promise<Response> {\n const repo = getRepository();\n const exists = await repo.definitionExists(name);\n return new Response(null, { status: exists ? 200 : 404 });\n }\n\n // ----- Images -----\n\n async function handleListImages(): Promise<Response> {\n const repo = getRepository();\n const images = await repo.findAllImages();\n return jsonResponse(images);\n }\n\n async function handleGetImage(imageId: string): Promise<Response> {\n const repo = getRepository();\n const image = await repo.findImageById(imageId);\n if (!image) {\n return errorResponse(\"INVALID_REQUEST\", `Image ${imageId} not found`, 404);\n }\n return jsonResponse(image);\n }\n\n async function handleSaveImage(imageId: string, request: Request): Promise<Response> {\n const repo = getRepository();\n let body: ImageRecord;\n try {\n body = (await request.json()) as ImageRecord;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n await repo.saveImage({ ...body, imageId });\n return new Response(null, { status: 204 });\n }\n\n async function handleDeleteImage(imageId: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteImage(imageId);\n return new Response(null, { status: 204 });\n }\n\n async function handleHeadImage(imageId: string): Promise<Response> {\n const repo = getRepository();\n const exists = await repo.imageExists(imageId);\n return new Response(null, { status: exists ? 200 : 404 });\n }\n\n async function handleListImageSessions(imageId: string): Promise<Response> {\n const repo = getRepository();\n const sessions = await repo.findSessionsByImageId(imageId);\n return jsonResponse(sessions);\n }\n\n async function handleDeleteImageSessions(imageId: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteSessionsByImageId(imageId);\n return new Response(null, { status: 204 });\n }\n\n /**\n * Run agent from image (Docker-style: docker run <image>)\n * POST /images/:imageId/run\n */\n async function handleRunImage(imageId: string, request: Request): Promise<Response> {\n // Parse optional containerId from request body\n let containerId: string | undefined;\n try {\n const body = (await request.json()) as { containerId?: string };\n containerId = body.containerId;\n } catch {\n // No body or invalid JSON - use default container\n }\n\n // Run agent from image via Container\n const agent = await agentx.images.run(imageId, { containerId });\n\n const response: CreateAgentResponse = {\n agentId: agent.agentId,\n name: agent.definition.name,\n lifecycle: agent.lifecycle,\n state: agent.state,\n createdAt: agent.createdAt,\n endpoints: {\n sse: `${basePath}/agents/${agent.agentId}/sse`,\n messages: `${basePath}/agents/${agent.agentId}/messages`,\n interrupt: `${basePath}/agents/${agent.agentId}/interrupt`,\n },\n };\n\n return jsonResponse(response, 201);\n }\n\n // ----- Sessions -----\n\n async function handleListSessions(): Promise<Response> {\n const repo = getRepository();\n const sessions = await repo.findAllSessions();\n return jsonResponse(sessions);\n }\n\n async function handleGetSession(sessionId: string): Promise<Response> {\n const repo = getRepository();\n const session = await repo.findSessionById(sessionId);\n if (!session) {\n return errorResponse(\"INVALID_REQUEST\", `Session ${sessionId} not found`, 404);\n }\n return jsonResponse(session);\n }\n\n async function handleSaveSession(sessionId: string, request: Request): Promise<Response> {\n const repo = getRepository();\n let body: SessionRecord;\n try {\n body = (await request.json()) as SessionRecord;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n await repo.saveSession({ ...body, sessionId });\n return new Response(null, { status: 204 });\n }\n\n async function handleDeleteSession(sessionId: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteSession(sessionId);\n return new Response(null, { status: 204 });\n }\n\n async function handleHeadSession(sessionId: string): Promise<Response> {\n const repo = getRepository();\n const exists = await repo.sessionExists(sessionId);\n return new Response(null, { status: exists ? 200 : 404 });\n }\n\n async function handleListSessionMessages(sessionId: string): Promise<Response> {\n const repo = getRepository();\n const messages = await repo.findMessagesBySessionId(sessionId);\n return jsonResponse(messages);\n }\n\n async function handleDeleteSessionMessages(sessionId: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteMessagesBySessionId(sessionId);\n return new Response(null, { status: 204 });\n }\n\n async function handleCountSessionMessages(sessionId: string): Promise<Response> {\n const repo = getRepository();\n const count = await repo.countMessagesBySessionId(sessionId);\n return jsonResponse({ count });\n }\n\n /**\n * Resume agent from session\n * POST /sessions/:sessionId/resume\n */\n async function handleResumeSession(sessionId: string, request: Request): Promise<Response> {\n // Get session from repository\n const session = await agentx.sessions.get(sessionId);\n if (!session) {\n return errorResponse(\"INVALID_REQUEST\", `Session ${sessionId} not found`, 404);\n }\n\n // Parse optional containerId from request body\n let containerId: string | undefined;\n try {\n const body = (await request.json()) as { containerId?: string };\n containerId = body.containerId;\n } catch {\n // No body or invalid JSON - use default container\n }\n\n // Resume agent via Container\n const agent = await session.resume({ containerId });\n\n const response: CreateAgentResponse = {\n agentId: agent.agentId,\n name: agent.definition.name,\n lifecycle: agent.lifecycle,\n state: agent.state,\n createdAt: agent.createdAt,\n endpoints: {\n sse: `${basePath}/agents/${agent.agentId}/sse`,\n messages: `${basePath}/agents/${agent.agentId}/messages`,\n interrupt: `${basePath}/agents/${agent.agentId}/interrupt`,\n },\n };\n\n return jsonResponse(response, 201);\n }\n\n // ----- Users -----\n\n async function handleListUserSessions(userId: string): Promise<Response> {\n const repo = getRepository();\n const sessions = await repo.findSessionsByUserId(userId);\n return jsonResponse(sessions);\n }\n\n // ----- Messages -----\n\n async function handleGetMessage(messageId: string): Promise<Response> {\n const repo = getRepository();\n const message = await repo.findMessageById(messageId);\n if (!message) {\n return errorResponse(\"INVALID_REQUEST\", `Message ${messageId} not found`, 404);\n }\n return jsonResponse(message);\n }\n\n async function handleSaveMessage(messageId: string, request: Request): Promise<Response> {\n const repo = getRepository();\n let body: MessageRecord;\n try {\n body = (await request.json()) as MessageRecord;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n await repo.saveMessage({ ...body, messageId });\n return new Response(null, { status: 204 });\n }\n\n async function handleDeleteMessage(messageId: string): Promise<Response> {\n const repo = getRepository();\n await repo.deleteMessage(messageId);\n return new Response(null, { status: 204 });\n }\n\n // ----- Containers -----\n\n async function handleListContainers(): Promise<Response> {\n const repo = getRepository();\n const containers = await repo.findAllContainers();\n return jsonResponse(containers);\n }\n\n async function handleCreateContainer(request: Request): Promise<Response> {\n let config: ContainerConfig | undefined;\n try {\n const body = (await request.json()) as { config?: ContainerConfig };\n config = body.config;\n } catch {\n // No body or invalid JSON - create with no config\n }\n\n const container: ContainerRecord = await agentx.containers.create(config);\n return jsonResponse(container, 201);\n }\n\n async function handleGetContainer(containerId: string): Promise<Response> {\n const container = await agentx.containers.get(containerId);\n if (!container) {\n return errorResponse(\"INVALID_REQUEST\", `Container ${containerId} not found`, 404);\n }\n return jsonResponse(container);\n }\n\n async function handleDeleteContainer(containerId: string): Promise<Response> {\n const deleted = await agentx.containers.delete(containerId);\n if (!deleted) {\n return errorResponse(\"INVALID_REQUEST\", `Container ${containerId} not found`, 404);\n }\n return new Response(null, { status: 204 });\n }\n\n async function handleHeadContainer(containerId: string): Promise<Response> {\n const exists = await agentx.containers.exists(containerId);\n return new Response(null, { status: exists ? 200 : 404 });\n }\n\n async function handleSaveContainer(containerId: string, request: Request): Promise<Response> {\n const repo = getRepository();\n let body: ContainerRecord;\n try {\n body = (await request.json()) as ContainerRecord;\n } catch {\n return errorResponse(\"INVALID_REQUEST\", \"Invalid JSON body\", 400);\n }\n await repo.saveContainer({ ...body, containerId });\n return new Response(null, { status: 204 });\n }\n\n // ============================================================================\n // Main Handler\n // ============================================================================\n\n const handler: AgentXHandler = async (request: Request): Promise<Response> => {\n try {\n const parsed = parseRequest(request);\n\n switch (parsed.type) {\n // Platform\n case \"platform_info\":\n return handlePlatformInfo();\n case \"platform_health\":\n return handleHealth();\n\n // Agents\n case \"list_agents\":\n return handleListAgents();\n case \"create_agent\":\n return handleCreateAgent(request);\n case \"get_agent\":\n return handleGetAgent(parsed.agentId!);\n case \"delete_agent\":\n return handleDeleteAgent(parsed.agentId!);\n case \"connect_sse\":\n return handleConnectSSE(parsed.agentId!);\n case \"send_message\":\n return handleSendMessage(parsed.agentId!, request);\n case \"interrupt\":\n return handleInterrupt(parsed.agentId!);\n\n // Definitions\n case \"list_definitions\":\n return handleListDefinitions();\n case \"get_definition\":\n return handleGetDefinition(parsed.definitionName!);\n case \"save_definition\":\n return handleSaveDefinition(parsed.definitionName!, request);\n case \"delete_definition\":\n return handleDeleteDefinition(parsed.definitionName!);\n case \"head_definition\":\n return handleHeadDefinition(parsed.definitionName!);\n\n // Images\n case \"list_images\":\n return handleListImages();\n case \"get_image\":\n return handleGetImage(parsed.imageId!);\n case \"save_image\":\n return handleSaveImage(parsed.imageId!, request);\n case \"delete_image\":\n return handleDeleteImage(parsed.imageId!);\n case \"head_image\":\n return handleHeadImage(parsed.imageId!);\n case \"list_image_sessions\":\n return handleListImageSessions(parsed.imageId!);\n case \"delete_image_sessions\":\n return handleDeleteImageSessions(parsed.imageId!);\n case \"run_image\":\n return handleRunImage(parsed.imageId!, request);\n\n // Sessions\n case \"list_sessions\":\n return handleListSessions();\n case \"get_session\":\n return handleGetSession(parsed.sessionId!);\n case \"save_session\":\n return handleSaveSession(parsed.sessionId!, request);\n case \"delete_session\":\n return handleDeleteSession(parsed.sessionId!);\n case \"head_session\":\n return handleHeadSession(parsed.sessionId!);\n case \"list_session_messages\":\n return handleListSessionMessages(parsed.sessionId!);\n case \"delete_session_messages\":\n return handleDeleteSessionMessages(parsed.sessionId!);\n case \"count_session_messages\":\n return handleCountSessionMessages(parsed.sessionId!);\n case \"resume_session\":\n return handleResumeSession(parsed.sessionId!, request);\n\n // Users\n case \"list_user_sessions\":\n return handleListUserSessions(parsed.userId!);\n\n // Messages\n case \"get_message\":\n return handleGetMessage(parsed.messageId!);\n case \"save_message\":\n return handleSaveMessage(parsed.messageId!, request);\n case \"delete_message\":\n return handleDeleteMessage(parsed.messageId!);\n\n // Containers\n case \"list_containers\":\n return handleListContainers();\n case \"create_container\":\n return handleCreateContainer(request);\n case \"get_container\":\n return handleGetContainer(parsed.containerId!);\n case \"save_container\":\n return handleSaveContainer(parsed.containerId!, request);\n case \"delete_container\":\n return handleDeleteContainer(parsed.containerId!);\n case \"head_container\":\n return handleHeadContainer(parsed.containerId!);\n\n case \"not_found\":\n default:\n return errorResponse(\"INVALID_REQUEST\", \"Not found\", 404);\n }\n } catch (error) {\n logger.error(\"Unhandled error in request handler\", { error });\n return errorResponse(\n \"INTERNAL_ERROR\",\n error instanceof Error ? error.message : \"Internal server error\",\n 500\n );\n }\n };\n\n // Attach utilities to handler\n (handler as any).registerDefinition = registerDefinition;\n (handler as any).sseManager = sseManager;\n\n return handler;\n}\n\n/**\n * Extended handler with utilities\n */\nexport interface AgentXHandlerWithUtils extends AgentXHandler {\n /**\n * Register a definition for dynamic creation\n */\n registerDefinition(\n name: string,\n definition: unknown,\n defaultConfig?: Record<string, unknown>\n ): void;\n\n /**\n * SSE connection manager\n */\n sseManager: SSEConnectionManager;\n}\n","/**\n * Express Adapter\n *\n * Adapts AgentXHandler to Express middleware.\n *\n * @example\n * ```typescript\n * import express from \"express\";\n * import { agentx } from \"agentxjs\";\n * import { createAgentXHandler } from \"agentxjs/server\";\n * import { toExpressHandler } from \"agentxjs/server/adapters/express\";\n *\n * const app = express();\n * const handler = createAgentXHandler(agentx);\n *\n * app.use(\"/agentx\", toExpressHandler(handler));\n * app.listen(3000);\n * ```\n */\n\nimport type { AgentXHandler } from \"../types\";\n\n/**\n * Express-like request interface (minimal)\n */\ninterface ExpressRequest {\n method: string;\n url: string;\n headers: Record<string, string | string[] | undefined>;\n body?: unknown;\n protocol?: string;\n hostname?: string;\n originalUrl?: string;\n // For reading body as stream\n on?: (event: string, handler: (chunk: unknown) => void) => void;\n}\n\n/**\n * Express-like response interface (minimal)\n */\ninterface ExpressResponse {\n status(code: number): ExpressResponse;\n set(headers: Record<string, string>): ExpressResponse;\n setHeader(name: string, value: string): void;\n write(chunk: string | Uint8Array): boolean;\n end(data?: string | Buffer): void;\n headersSent: boolean;\n flushHeaders?(): void;\n}\n\n/**\n * Express-like next function\n */\ntype ExpressNext = (error?: unknown) => void;\n\n/**\n * Express request handler type\n */\nexport type ExpressHandler = (\n req: ExpressRequest,\n res: ExpressResponse,\n next: ExpressNext\n) => void | Promise<void>;\n\n/**\n * Convert Express request to Web Request\n */\nfunction toWebRequest(req: ExpressRequest): Request {\n // Build URL\n const protocol = req.protocol || \"http\";\n const host = req.hostname || req.headers.host || \"localhost\";\n const url = `${protocol}://${host}${req.originalUrl || req.url}`;\n\n // Build headers\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n }\n\n // Build request options\n const init: RequestInit = {\n method: req.method,\n headers,\n };\n\n // Add body for non-GET/HEAD requests\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n if (req.body !== undefined) {\n // Body already parsed (e.g., by express.json())\n init.body = JSON.stringify(req.body);\n }\n }\n\n return new Request(url, init);\n}\n\n/**\n * Send Web Response to Express response\n */\nasync function sendWebResponse(res: ExpressResponse, webResponse: Response): Promise<void> {\n // Set status\n res.status(webResponse.status);\n\n // Set headers\n webResponse.headers.forEach((value, key) => {\n // Skip content-encoding for SSE (we handle it differently)\n if (key.toLowerCase() !== \"content-encoding\") {\n res.setHeader(key, value);\n }\n });\n\n // Check if SSE response\n const contentType = webResponse.headers.get(\"content-type\");\n if (contentType?.includes(\"text/event-stream\")) {\n // SSE: Stream the response\n res.setHeader(\"Cache-Control\", \"no-cache\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n // Flush headers immediately for SSE\n if (res.flushHeaders) {\n res.flushHeaders();\n }\n\n const reader = webResponse.body?.getReader();\n if (reader) {\n const decoder = new TextDecoder();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n res.write(decoder.decode(value, { stream: true }));\n }\n } catch {\n // Connection closed\n } finally {\n reader.releaseLock();\n }\n }\n res.end();\n } else {\n // Regular response: Send body as text\n const body = await webResponse.text();\n res.end(body);\n }\n}\n\n/**\n * Convert AgentXHandler to Express middleware\n *\n * @param handler - AgentX handler (Web Standard based)\n * @returns Express middleware function\n */\nexport function toExpressHandler(handler: AgentXHandler): ExpressHandler {\n return async (req, res, next) => {\n try {\n const webRequest = toWebRequest(req);\n const webResponse = await handler(webRequest);\n await sendWebResponse(res, webResponse);\n } catch (error) {\n next(error);\n }\n };\n}\n\n/**\n * Create Express router with AgentX handler\n *\n * This is a convenience function that wraps toExpressHandler\n * and can be used directly with app.use()\n *\n * @param handler - AgentX handler\n * @returns Express handler\n */\nexport function createExpressAdapter(handler: AgentXHandler): ExpressHandler {\n return toExpressHandler(handler);\n}\n","/**\n * Hono Adapter\n *\n * Adapts AgentXHandler to Hono middleware.\n * Hono already uses Web Standard Request/Response, so this is mostly a convenience wrapper.\n *\n * @example\n * ```typescript\n * import { Hono } from \"hono\";\n * import { agentx } from \"agentxjs\";\n * import { createAgentXHandler } from \"agentxjs/server\";\n * import { toHonoHandler, createHonoRoutes } from \"agentxjs/server/adapters/hono\";\n *\n * const app = new Hono();\n * const handler = createAgentXHandler(agentx);\n *\n * // Option 1: Simple catch-all\n * app.all(\"/agentx/*\", toHonoHandler(handler));\n *\n * // Option 2: Mount as sub-app\n * app.route(\"/agentx\", createHonoRoutes(handler));\n *\n * export default app;\n * ```\n */\n\nimport type { AgentXHandler } from \"../types\";\n\n/**\n * Hono Context interface (minimal)\n */\ninterface HonoContext {\n req: {\n raw: Request;\n url: string;\n method: string;\n path: string;\n };\n // Return response\n body: (data: ReadableStream | string | ArrayBuffer | null, init?: ResponseInit) => Response;\n json: (data: unknown, init?: ResponseInit) => Response;\n text: (data: string, init?: ResponseInit) => Response;\n}\n\n/**\n * Hono handler type\n */\nexport type HonoHandler = (c: HonoContext) => Response | Promise<Response>;\n\n/**\n * Convert AgentXHandler to Hono handler\n *\n * Since Hono uses Web Standard Request/Response natively,\n * this adapter is straightforward.\n *\n * @param handler - AgentX handler\n * @returns Hono handler function\n */\nexport function toHonoHandler(handler: AgentXHandler): HonoHandler {\n return async (c) => {\n // Hono provides the raw Web Request directly\n return handler(c.req.raw);\n };\n}\n\n/**\n * Hono-like app interface (minimal for sub-routing)\n */\ninterface HonoLike {\n all(path: string, handler: HonoHandler): HonoLike;\n get(path: string, handler: HonoHandler): HonoLike;\n post(path: string, handler: HonoHandler): HonoLike;\n delete(path: string, handler: HonoHandler): HonoLike;\n}\n\n/**\n * Create a Hono sub-app with all AgentX routes\n *\n * This creates explicit routes for better type safety and documentation.\n *\n * @param handler - AgentX handler\n * @param HonoClass - Hono class constructor (optional, for tree-shaking)\n * @returns Hono app with all routes configured\n *\n * @example\n * ```typescript\n * import { Hono } from \"hono\";\n * import { createHonoRoutes } from \"agentxjs/server/adapters/hono\";\n *\n * const app = new Hono();\n * app.route(\"/agentx\", createHonoRoutes(handler, Hono));\n * ```\n */\nexport function createHonoRoutes<T extends HonoLike>(\n handler: AgentXHandler,\n HonoClass: new () => T\n): T {\n const app = new HonoClass();\n const honoHandler = toHonoHandler(handler);\n\n // Platform routes\n app.get(\"/info\", honoHandler);\n app.get(\"/health\", honoHandler);\n\n // Agent collection routes\n app.get(\"/agents\", honoHandler);\n app.post(\"/agents\", honoHandler);\n\n // Agent instance routes\n app.get(\"/agents/:agentId\", honoHandler);\n app.delete(\"/agents/:agentId\", honoHandler);\n app.get(\"/agents/:agentId/sse\", honoHandler);\n app.post(\"/agents/:agentId/messages\", honoHandler);\n app.post(\"/agents/:agentId/interrupt\", honoHandler);\n\n // Catch-all for any missed routes\n app.all(\"/*\", honoHandler);\n\n return app;\n}\n\n/**\n * Simple Hono middleware that forwards all requests to handler\n *\n * Use this when you want a simple catch-all without explicit routing.\n *\n * @param handler - AgentX handler\n * @returns Hono handler\n */\nexport function createHonoAdapter(handler: AgentXHandler): HonoHandler {\n return toHonoHandler(handler);\n}\n","/**\n * Next.js App Router Adapter\n *\n * Adapts AgentXHandler to Next.js App Router route handlers.\n * Next.js App Router uses Web Standard Request/Response natively.\n *\n * @example\n * ```typescript\n * // app/api/agentx/[...path]/route.ts\n * import { agentx } from \"agentxjs\";\n * import { createAgentXHandler } from \"agentxjs/server\";\n * import { createNextHandler } from \"agentxjs/server/adapters/next\";\n *\n * const handler = createAgentXHandler(agentx, {\n * basePath: \"/api/agentx\",\n * });\n *\n * export const { GET, POST, DELETE } = createNextHandler(handler);\n *\n * // Enable streaming for SSE\n * export const dynamic = \"force-dynamic\";\n * ```\n */\n\nimport type { AgentXHandler } from \"../types\";\n\n/**\n * Next.js route context\n */\ninterface NextRouteContext {\n params: Record<string, string | string[]>;\n}\n\n/**\n * Next.js route handler type\n */\nexport type NextRouteHandler = (\n request: Request,\n context?: NextRouteContext\n) => Response | Promise<Response>;\n\n/**\n * Next.js route handlers object\n */\nexport interface NextRouteHandlers {\n GET: NextRouteHandler;\n POST: NextRouteHandler;\n DELETE: NextRouteHandler;\n PUT: NextRouteHandler;\n PATCH: NextRouteHandler;\n HEAD: NextRouteHandler;\n OPTIONS: NextRouteHandler;\n}\n\n/**\n * Create Next.js App Router route handlers\n *\n * @param handler - AgentX handler\n * @returns Object with GET, POST, DELETE, etc. handlers\n *\n * @example\n * ```typescript\n * // app/api/agentx/[...path]/route.ts\n * import { createNextHandler } from \"agentxjs/server/adapters/next\";\n *\n * const handler = createAgentXHandler(agentx, {\n * basePath: \"/api/agentx\",\n * });\n *\n * export const { GET, POST, DELETE } = createNextHandler(handler);\n * ```\n */\nexport function createNextHandler(handler: AgentXHandler): NextRouteHandlers {\n // All methods use the same handler since routing is done by AgentXHandler\n const routeHandler: NextRouteHandler = async (request) => {\n return handler(request);\n };\n\n return {\n GET: routeHandler,\n POST: routeHandler,\n DELETE: routeHandler,\n PUT: routeHandler,\n PATCH: routeHandler,\n HEAD: routeHandler,\n OPTIONS: routeHandler,\n };\n}\n\n/**\n * Create a single Next.js handler for all methods\n *\n * Use this if you prefer to handle all methods with one export.\n *\n * @param handler - AgentX handler\n * @returns Single route handler\n *\n * @example\n * ```typescript\n * // app/api/agentx/[...path]/route.ts\n * import { toNextHandler } from \"agentxjs/server/adapters/next\";\n *\n * const handler = toNextHandler(createAgentXHandler(agentx));\n *\n * export { handler as GET, handler as POST, handler as DELETE };\n * ```\n */\nexport function toNextHandler(handler: AgentXHandler): NextRouteHandler {\n return async (request) => handler(request);\n}\n\n/**\n * Next.js Edge Runtime compatible handler\n *\n * Use this for edge functions deployment.\n *\n * @param handler - AgentX handler\n * @returns Edge-compatible handler\n *\n * @example\n * ```typescript\n * // app/api/agentx/[...path]/route.ts\n * import { createNextEdgeHandler } from \"agentxjs/server/adapters/next\";\n *\n * export const runtime = \"edge\";\n * export const { GET, POST, DELETE } = createNextEdgeHandler(handler);\n * ```\n */\nexport function createNextEdgeHandler(handler: AgentXHandler): NextRouteHandlers {\n // Edge runtime also uses Web Standard Request/Response\n return createNextHandler(handler);\n}\n\n/**\n * Convenience export for route.ts files\n *\n * @example\n * ```typescript\n * // app/api/agentx/[...path]/route.ts\n * import { createAgentXRoutes } from \"agentxjs/server/adapters/next\";\n *\n * const { GET, POST, DELETE } = createAgentXRoutes(agentx, {\n * basePath: \"/api/agentx\",\n * });\n *\n * export { GET, POST, DELETE };\n * export const dynamic = \"force-dynamic\";\n * ```\n */\nexport { createNextHandler as createAgentXRoutes };\n"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { T as TransportConnection, C as ConnectionState, a as AgentXHandlerOptions, A as AgentXHandler } from '../types-Cgfcw91r.cjs';
|
|
2
|
+
export { g as AgentInfoResponse, f as AgentListResponse, c as AgentXHandlerHooks, d as CorsOptions, h as CreateAgentRequest, i as CreateAgentResponse, k as ErrorCode, E as ErrorResponse, H as HealthResponse, I as InterruptResponse, P as ParsedRequest, e as PlatformInfoResponse, R as RequestType, S as SendMessageRequest, j as SendMessageResponse, b as TransportType } from '../types-Cgfcw91r.cjs';
|
|
3
|
+
import { Agent, StreamEventType, ErrorEvent, AgentX } from '@agentxjs/types';
|
|
4
|
+
export { ExpressHandler, createExpressAdapter, toExpressHandler } from './adapters/express.cjs';
|
|
5
|
+
export { HonoHandler, createHonoAdapter, createHonoRoutes, toHonoHandler } from './adapters/hono.cjs';
|
|
6
|
+
export { NextRouteHandler, NextRouteHandlers, createAgentXRoutes, createNextEdgeHandler, createAgentXRoutes as createNextHandler, toNextHandler } from './adapters/next.cjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* SSEServerTransport - Server-Sent Events transport implementation
|
|
10
|
+
*
|
|
11
|
+
* Handles SSE connections for streaming agent events to clients.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* SSE Connection implementation
|
|
16
|
+
*/
|
|
17
|
+
declare class SSEConnection implements TransportConnection {
|
|
18
|
+
readonly connectionId: string;
|
|
19
|
+
readonly agentId: string;
|
|
20
|
+
private _state;
|
|
21
|
+
private _controller;
|
|
22
|
+
private _encoder;
|
|
23
|
+
private _closeHandlers;
|
|
24
|
+
private _unsubscribe;
|
|
25
|
+
private _heartbeatInterval;
|
|
26
|
+
constructor(connectionId: string, agentId: string);
|
|
27
|
+
get state(): ConnectionState;
|
|
28
|
+
/**
|
|
29
|
+
* Create SSE Response stream
|
|
30
|
+
*/
|
|
31
|
+
createResponse(agent: Agent): Response;
|
|
32
|
+
/**
|
|
33
|
+
* Send a Stream event to the client
|
|
34
|
+
*/
|
|
35
|
+
send(event: StreamEventType): void;
|
|
36
|
+
/**
|
|
37
|
+
* Send an Error event to the client
|
|
38
|
+
*
|
|
39
|
+
* ErrorEvent is independent from Stream events but also transported via SSE.
|
|
40
|
+
*/
|
|
41
|
+
sendError(event: ErrorEvent): void;
|
|
42
|
+
/**
|
|
43
|
+
* Send heartbeat to keep connection alive
|
|
44
|
+
*/
|
|
45
|
+
private sendHeartbeat;
|
|
46
|
+
/**
|
|
47
|
+
* Close the connection
|
|
48
|
+
*/
|
|
49
|
+
close(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Register close handler
|
|
52
|
+
*/
|
|
53
|
+
onClose(handler: () => void): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* SSE Connection Manager
|
|
57
|
+
*
|
|
58
|
+
* Manages all SSE connections for an AgentX handler.
|
|
59
|
+
*/
|
|
60
|
+
declare class SSEConnectionManager {
|
|
61
|
+
private _connections;
|
|
62
|
+
private _idCounter;
|
|
63
|
+
/**
|
|
64
|
+
* Create a new SSE connection for an agent
|
|
65
|
+
*/
|
|
66
|
+
createConnection(agent: Agent): {
|
|
67
|
+
connection: SSEConnection;
|
|
68
|
+
response: Response;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Get connection by ID
|
|
72
|
+
*/
|
|
73
|
+
getConnection(connectionId: string): SSEConnection | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Get all connections for an agent
|
|
76
|
+
*/
|
|
77
|
+
getConnectionsForAgent(agentId: string): SSEConnection[];
|
|
78
|
+
/**
|
|
79
|
+
* Close all connections for an agent
|
|
80
|
+
*/
|
|
81
|
+
closeConnectionsForAgent(agentId: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Close all connections
|
|
84
|
+
*/
|
|
85
|
+
closeAll(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get active connection count
|
|
88
|
+
*/
|
|
89
|
+
get connectionCount(): number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* createAgentXHandler - Create framework-agnostic HTTP handler
|
|
94
|
+
*
|
|
95
|
+
* Based on Web Standards (Request/Response).
|
|
96
|
+
* Can be adapted to Express, Fastify, Hono, Next.js, etc.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* import { agentx } from "agentxjs";
|
|
101
|
+
* import { createAgentXHandler } from "agentxjs/server";
|
|
102
|
+
*
|
|
103
|
+
* const handler = createAgentXHandler(agentx);
|
|
104
|
+
*
|
|
105
|
+
* // Express
|
|
106
|
+
* app.use("/agentx", expressAdapter(handler));
|
|
107
|
+
*
|
|
108
|
+
* // Hono
|
|
109
|
+
* app.use("/agentx/*", honoAdapter(handler));
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Create an AgentX HTTP handler
|
|
115
|
+
*/
|
|
116
|
+
declare function createAgentXHandler(agentx: AgentX, options?: AgentXHandlerOptions): AgentXHandler;
|
|
117
|
+
/**
|
|
118
|
+
* Extended handler with utilities
|
|
119
|
+
*/
|
|
120
|
+
interface AgentXHandlerWithUtils extends AgentXHandler {
|
|
121
|
+
/**
|
|
122
|
+
* Register a definition for dynamic creation
|
|
123
|
+
*/
|
|
124
|
+
registerDefinition(name: string, definition: unknown, defaultConfig?: Record<string, unknown>): void;
|
|
125
|
+
/**
|
|
126
|
+
* SSE connection manager
|
|
127
|
+
*/
|
|
128
|
+
sseManager: SSEConnectionManager;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export { AgentXHandler, AgentXHandlerOptions, type AgentXHandlerWithUtils, ConnectionState, SSEConnection, SSEConnectionManager, TransportConnection, createAgentXHandler };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { T as TransportConnection, C as ConnectionState, a as AgentXHandlerOptions, A as AgentXHandler } from '../types-Cgfcw91r.js';
|
|
2
|
+
export { g as AgentInfoResponse, f as AgentListResponse, c as AgentXHandlerHooks, d as CorsOptions, h as CreateAgentRequest, i as CreateAgentResponse, k as ErrorCode, E as ErrorResponse, H as HealthResponse, I as InterruptResponse, P as ParsedRequest, e as PlatformInfoResponse, R as RequestType, S as SendMessageRequest, j as SendMessageResponse, b as TransportType } from '../types-Cgfcw91r.js';
|
|
3
|
+
import { Agent, StreamEventType, ErrorEvent, AgentX } from '@agentxjs/types';
|
|
4
|
+
export { ExpressHandler, createExpressAdapter, toExpressHandler } from './adapters/express.js';
|
|
5
|
+
export { HonoHandler, createHonoAdapter, createHonoRoutes, toHonoHandler } from './adapters/hono.js';
|
|
6
|
+
export { NextRouteHandler, NextRouteHandlers, createAgentXRoutes, createNextEdgeHandler, createAgentXRoutes as createNextHandler, toNextHandler } from './adapters/next.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* SSEServerTransport - Server-Sent Events transport implementation
|
|
10
|
+
*
|
|
11
|
+
* Handles SSE connections for streaming agent events to clients.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* SSE Connection implementation
|
|
16
|
+
*/
|
|
17
|
+
declare class SSEConnection implements TransportConnection {
|
|
18
|
+
readonly connectionId: string;
|
|
19
|
+
readonly agentId: string;
|
|
20
|
+
private _state;
|
|
21
|
+
private _controller;
|
|
22
|
+
private _encoder;
|
|
23
|
+
private _closeHandlers;
|
|
24
|
+
private _unsubscribe;
|
|
25
|
+
private _heartbeatInterval;
|
|
26
|
+
constructor(connectionId: string, agentId: string);
|
|
27
|
+
get state(): ConnectionState;
|
|
28
|
+
/**
|
|
29
|
+
* Create SSE Response stream
|
|
30
|
+
*/
|
|
31
|
+
createResponse(agent: Agent): Response;
|
|
32
|
+
/**
|
|
33
|
+
* Send a Stream event to the client
|
|
34
|
+
*/
|
|
35
|
+
send(event: StreamEventType): void;
|
|
36
|
+
/**
|
|
37
|
+
* Send an Error event to the client
|
|
38
|
+
*
|
|
39
|
+
* ErrorEvent is independent from Stream events but also transported via SSE.
|
|
40
|
+
*/
|
|
41
|
+
sendError(event: ErrorEvent): void;
|
|
42
|
+
/**
|
|
43
|
+
* Send heartbeat to keep connection alive
|
|
44
|
+
*/
|
|
45
|
+
private sendHeartbeat;
|
|
46
|
+
/**
|
|
47
|
+
* Close the connection
|
|
48
|
+
*/
|
|
49
|
+
close(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Register close handler
|
|
52
|
+
*/
|
|
53
|
+
onClose(handler: () => void): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* SSE Connection Manager
|
|
57
|
+
*
|
|
58
|
+
* Manages all SSE connections for an AgentX handler.
|
|
59
|
+
*/
|
|
60
|
+
declare class SSEConnectionManager {
|
|
61
|
+
private _connections;
|
|
62
|
+
private _idCounter;
|
|
63
|
+
/**
|
|
64
|
+
* Create a new SSE connection for an agent
|
|
65
|
+
*/
|
|
66
|
+
createConnection(agent: Agent): {
|
|
67
|
+
connection: SSEConnection;
|
|
68
|
+
response: Response;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Get connection by ID
|
|
72
|
+
*/
|
|
73
|
+
getConnection(connectionId: string): SSEConnection | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Get all connections for an agent
|
|
76
|
+
*/
|
|
77
|
+
getConnectionsForAgent(agentId: string): SSEConnection[];
|
|
78
|
+
/**
|
|
79
|
+
* Close all connections for an agent
|
|
80
|
+
*/
|
|
81
|
+
closeConnectionsForAgent(agentId: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Close all connections
|
|
84
|
+
*/
|
|
85
|
+
closeAll(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get active connection count
|
|
88
|
+
*/
|
|
89
|
+
get connectionCount(): number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* createAgentXHandler - Create framework-agnostic HTTP handler
|
|
94
|
+
*
|
|
95
|
+
* Based on Web Standards (Request/Response).
|
|
96
|
+
* Can be adapted to Express, Fastify, Hono, Next.js, etc.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* import { agentx } from "agentxjs";
|
|
101
|
+
* import { createAgentXHandler } from "agentxjs/server";
|
|
102
|
+
*
|
|
103
|
+
* const handler = createAgentXHandler(agentx);
|
|
104
|
+
*
|
|
105
|
+
* // Express
|
|
106
|
+
* app.use("/agentx", expressAdapter(handler));
|
|
107
|
+
*
|
|
108
|
+
* // Hono
|
|
109
|
+
* app.use("/agentx/*", honoAdapter(handler));
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Create an AgentX HTTP handler
|
|
115
|
+
*/
|
|
116
|
+
declare function createAgentXHandler(agentx: AgentX, options?: AgentXHandlerOptions): AgentXHandler;
|
|
117
|
+
/**
|
|
118
|
+
* Extended handler with utilities
|
|
119
|
+
*/
|
|
120
|
+
interface AgentXHandlerWithUtils extends AgentXHandler {
|
|
121
|
+
/**
|
|
122
|
+
* Register a definition for dynamic creation
|
|
123
|
+
*/
|
|
124
|
+
registerDefinition(name: string, definition: unknown, defaultConfig?: Record<string, unknown>): void;
|
|
125
|
+
/**
|
|
126
|
+
* SSE connection manager
|
|
127
|
+
*/
|
|
128
|
+
sseManager: SSEConnectionManager;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export { AgentXHandler, AgentXHandlerOptions, type AgentXHandlerWithUtils, ConnectionState, SSEConnection, SSEConnectionManager, TransportConnection, createAgentXHandler };
|