@@ -26,10 +26,19 @@ import type {
2626import type { Agent , AgentSideConnection } from "./acp.js" ;
2727import type { AnyMessage , AnyRequest , AnyResponse } from "./jsonrpc.js" ;
2828
29+ /** Options for creating an ACP server transport. */
2930export interface AcpServerOptions {
31+ /** Creates the agent implementation for each accepted ACP connection. */
3032 createAgent : ( conn : AgentSideConnection ) => Agent ;
3133}
3234
35+ /**
36+ * ACP server transport for Streamable HTTP and WebSocket connections.
37+ *
38+ * Route HTTP requests to {@link handleRequest}. For WebSocket upgrades, let your
39+ * framework perform the upgrade and pass the accepted socket to
40+ * {@link handleWebSocket}.
41+ */
3342export class AcpServer {
3443 private readonly createAgent : ( conn : AgentSideConnection ) => Agent ;
3544 private readonly registry = new ConnectionRegistry ( ) ;
@@ -38,6 +47,7 @@ export class AcpServer {
3847 this . createAgent = options . createAgent ;
3948 }
4049
50+ /** Handles one Streamable HTTP ACP request. */
4151 async handleRequest ( req : Request ) : Promise < Response > {
4252 if ( req . method === "POST" ) {
4353 return await this . handlePost ( req ) ;
@@ -54,13 +64,15 @@ export class AcpServer {
5464 return textResponse ( "Method Not Allowed" , 405 ) ;
5565 }
5666
67+ /** Handles one accepted ACP WebSocket connection. */
5768 handleWebSocket ( socket : WebSocketServerSocket ) : void {
5869 handleWebSocketConnection ( socket , {
5970 registry : this . registry ,
6071 createAgent : this . createAgent ,
6172 } ) ;
6273 }
6374
75+ /** Closes all active ACP connections owned by this server. */
6476 async close ( ) : Promise < void > {
6577 this . registry . closeAll ( ) ;
6678 }
0 commit comments