acp-http-client 0.5.4 → 0.5.6

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/dist/index.js CHANGED
@@ -210,17 +210,25 @@ var StreamableHttpAcpTransport = class {
210
210
  const deleteHeaders = this.buildHeaders({
211
211
  Accept: "application/json"
212
212
  });
213
- try {
213
+ const deleteRequest = (async () => {
214
214
  const response = await this.fetcher(this.buildUrl(), {
215
215
  method: "DELETE",
216
216
  headers: deleteHeaders,
217
- signal: timeoutSignal(2e3)
217
+ signal: timeoutSignal(CLOSE_TIMEOUT_MS)
218
218
  });
219
219
  if (!response.ok && response.status !== 404) {
220
220
  throw new AcpHttpError(response.status, await readProblem(response), response);
221
221
  }
222
- } catch {
223
- }
222
+ })().catch(() => {
223
+ });
224
+ let closeTimer;
225
+ await Promise.race([
226
+ deleteRequest,
227
+ new Promise((resolve) => {
228
+ closeTimer = setTimeout(resolve, CLOSE_TIMEOUT_MS);
229
+ })
230
+ ]);
231
+ clearTimeout(closeTimer);
224
232
  try {
225
233
  this.readableController?.close();
226
234
  } catch {
@@ -505,6 +513,7 @@ function isAbortError(error) {
505
513
  function delay(ms) {
506
514
  return new Promise((resolve) => setTimeout(resolve, ms));
507
515
  }
516
+ var CLOSE_TIMEOUT_MS = 2e3;
508
517
  function timeoutSignal(timeoutMs) {
509
518
  if (typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function") {
510
519
  return AbortSignal.timeout(timeoutMs);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n ClientSideConnection,\n PROTOCOL_VERSION,\n type AnyMessage,\n type AuthenticateRequest,\n type AuthenticateResponse,\n type CancelNotification,\n type Client,\n type ForkSessionRequest,\n type ForkSessionResponse,\n type InitializeRequest,\n type InitializeResponse,\n type ListSessionsRequest,\n type ListSessionsResponse,\n type LoadSessionRequest,\n type LoadSessionResponse,\n type NewSessionRequest,\n type NewSessionResponse,\n type PromptRequest,\n type PromptResponse,\n type RequestPermissionOutcome,\n type RequestPermissionRequest,\n type RequestPermissionResponse,\n type ResumeSessionRequest,\n type ResumeSessionResponse,\n type SessionNotification,\n type SetSessionConfigOptionRequest,\n type SetSessionConfigOptionResponse,\n type SetSessionModelRequest,\n type SetSessionModelResponse,\n type SetSessionModeRequest,\n type SetSessionModeResponse,\n type Stream,\n} from \"@agentclientprotocol/sdk\";\n\nconst DEFAULT_ACP_PATH = \"/v1/rpc\";\n\nexport interface ProblemDetails {\n type: string;\n title: string;\n status: number;\n detail?: string;\n instance?: string;\n [key: string]: unknown;\n}\n\nexport type AcpEnvelopeDirection = \"inbound\" | \"outbound\";\n\nexport type AcpEnvelopeObserver = (envelope: AnyMessage, direction: AcpEnvelopeDirection) => void;\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport interface AcpHttpTransportOptions {\n path?: string;\n bootstrapQuery?: Record<string, QueryValue>;\n}\n\nexport interface AcpHttpClientOptions {\n baseUrl: string;\n token?: string;\n fetch?: typeof fetch;\n headers?: HeadersInit;\n client?: Partial<Client>;\n onEnvelope?: AcpEnvelopeObserver;\n transport?: AcpHttpTransportOptions;\n}\n\nexport class AcpHttpError extends Error {\n readonly status: number;\n readonly problem?: ProblemDetails;\n readonly response: Response;\n\n constructor(status: number, problem: ProblemDetails | undefined, response: Response) {\n super(problem?.title ?? `Request failed with status ${status}`);\n this.name = \"AcpHttpError\";\n this.status = status;\n this.problem = problem;\n this.response = response;\n }\n}\n\nexport interface RpcErrorResponse {\n code: number;\n message: string;\n data?: unknown;\n}\n\nconst RPC_CODE_LABELS: Record<number, string> = {\n [-32700]: \"Parse error\",\n [-32600]: \"Invalid request\",\n [-32601]: \"Method not supported by agent\",\n [-32602]: \"Invalid parameters\",\n [-32603]: \"Internal agent error\",\n [-32000]: \"Authentication required\",\n [-32002]: \"Resource not found\",\n};\n\nexport class AcpRpcError extends Error {\n readonly code: number;\n readonly data?: unknown;\n\n constructor(code: number, message: string, data?: unknown) {\n const label = RPC_CODE_LABELS[code];\n const display = label ? `${label}: ${message}` : message;\n super(display);\n this.name = \"AcpRpcError\";\n this.code = code;\n this.data = data;\n }\n}\n\nfunction isRpcErrorResponse(value: unknown): value is RpcErrorResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n typeof (value as RpcErrorResponse).code === \"number\" &&\n \"message\" in value &&\n typeof (value as RpcErrorResponse).message === \"string\"\n );\n}\n\nasync function wrapRpc<T>(promise: Promise<T>): Promise<T> {\n try {\n return await promise;\n } catch (error) {\n if (isRpcErrorResponse(error)) {\n throw new AcpRpcError(error.code, error.message, error.data);\n }\n throw error;\n }\n}\n\nexport class AcpHttpClient {\n private readonly transport: StreamableHttpAcpTransport;\n private readonly connection: ClientSideConnection;\n\n constructor(options: AcpHttpClientOptions) {\n const fetcher = options.fetch ?? globalThis.fetch?.bind(globalThis);\n if (!fetcher) {\n throw new Error(\"Fetch API is not available; provide a fetch implementation.\");\n }\n\n this.transport = new StreamableHttpAcpTransport({\n baseUrl: options.baseUrl,\n fetcher,\n token: options.token,\n defaultHeaders: options.headers,\n onEnvelope: options.onEnvelope,\n transport: options.transport,\n });\n\n const clientHandlers = buildClientHandlers(options.client);\n this.connection = new ClientSideConnection(() => clientHandlers, this.transport.stream);\n }\n\n async initialize(request: Partial<InitializeRequest> = {}): Promise<InitializeResponse> {\n const params: InitializeRequest = {\n protocolVersion: request.protocolVersion ?? PROTOCOL_VERSION,\n clientCapabilities: request.clientCapabilities,\n clientInfo: request.clientInfo ?? {\n name: \"acp-http-client\",\n version: \"v1\",\n },\n };\n\n if (request._meta !== undefined) {\n params._meta = request._meta;\n }\n\n return wrapRpc(this.connection.initialize(params));\n }\n\n async authenticate(request: AuthenticateRequest): Promise<AuthenticateResponse> {\n return wrapRpc(this.connection.authenticate(request));\n }\n\n async newSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n return wrapRpc(this.connection.newSession(request));\n }\n\n async loadSession(request: LoadSessionRequest): Promise<LoadSessionResponse> {\n return wrapRpc(this.connection.loadSession(request));\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n return wrapRpc(this.connection.prompt(request));\n }\n\n async cancel(notification: CancelNotification): Promise<void> {\n return this.connection.cancel(notification);\n }\n\n async setSessionMode(request: SetSessionModeRequest): Promise<SetSessionModeResponse | void> {\n return wrapRpc(this.connection.setSessionMode(request));\n }\n\n async setSessionConfigOption(request: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse> {\n return wrapRpc(this.connection.setSessionConfigOption(request));\n }\n\n async listSessions(request: ListSessionsRequest): Promise<ListSessionsResponse> {\n return wrapRpc(this.connection.listSessions(request));\n }\n\n async unstableForkSession(request: ForkSessionRequest): Promise<ForkSessionResponse> {\n return wrapRpc(this.connection.unstable_forkSession(request));\n }\n\n async unstableResumeSession(request: ResumeSessionRequest): Promise<ResumeSessionResponse> {\n return wrapRpc(this.connection.unstable_resumeSession(request));\n }\n\n async unstableSetSessionModel(request: SetSessionModelRequest): Promise<SetSessionModelResponse | void> {\n return wrapRpc(this.connection.unstable_setSessionModel(request));\n }\n\n async extMethod(method: string, params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return wrapRpc(this.connection.extMethod(method, params));\n }\n\n async extNotification(method: string, params: Record<string, unknown>): Promise<void> {\n return this.connection.extNotification(method, params);\n }\n\n async disconnect(): Promise<void> {\n await this.transport.close();\n }\n\n get closed(): Promise<void> {\n return this.connection.closed;\n }\n\n get signal(): AbortSignal {\n return this.connection.signal;\n }\n\n get clientSideConnection(): ClientSideConnection {\n return this.connection;\n }\n}\n\ntype StreamableHttpAcpTransportOptions = {\n baseUrl: string;\n fetcher: typeof fetch;\n token?: string;\n defaultHeaders?: HeadersInit;\n onEnvelope?: AcpEnvelopeObserver;\n transport?: AcpHttpTransportOptions;\n};\n\nclass StreamableHttpAcpTransport {\n readonly stream: Stream;\n\n private readonly baseUrl: string;\n private readonly path: string;\n private readonly fetcher: typeof fetch;\n private readonly token?: string;\n private readonly defaultHeaders?: HeadersInit;\n private readonly onEnvelope?: AcpEnvelopeObserver;\n private readonly bootstrapQuery: URLSearchParams | null;\n\n private readableController: ReadableStreamDefaultController<AnyMessage> | null = null;\n private sseAbortController: AbortController | null = null;\n private sseLoop: Promise<void> | null = null;\n private lastEventId: string | null = null;\n private closed = false;\n private closingPromise: Promise<void> | null = null;\n private postedOnce = false;\n private readonly seenResponseIds = new Set<string>();\n private readonly seenResponseIdOrder: string[] = [];\n\n constructor(options: StreamableHttpAcpTransportOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.path = normalizePath(options.transport?.path ?? DEFAULT_ACP_PATH);\n this.fetcher = options.fetcher;\n this.token = options.token;\n this.defaultHeaders = options.defaultHeaders;\n this.onEnvelope = options.onEnvelope;\n this.bootstrapQuery = options.transport?.bootstrapQuery ? buildQueryParams(options.transport.bootstrapQuery) : null;\n\n this.stream = {\n readable: new ReadableStream<AnyMessage>({\n start: (controller) => {\n this.readableController = controller;\n },\n cancel: async () => {\n await this.close();\n },\n }),\n writable: new WritableStream<AnyMessage>({\n write: async (message) => {\n await this.writeMessage(message);\n },\n close: async () => {\n await this.close();\n },\n abort: async () => {\n await this.close();\n },\n }),\n };\n }\n\n async close(): Promise<void> {\n if (this.closingPromise) {\n return this.closingPromise;\n }\n\n this.closingPromise = this.closeImpl();\n return this.closingPromise;\n }\n\n private async closeImpl(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n if (this.sseAbortController) {\n this.sseAbortController.abort();\n }\n\n if (!this.postedOnce) {\n try {\n this.readableController?.close();\n } catch {\n // no-op\n }\n this.readableController = null;\n return;\n }\n\n const deleteHeaders = this.buildHeaders({\n Accept: \"application/json\",\n });\n\n try {\n const response = await this.fetcher(this.buildUrl(), {\n method: \"DELETE\",\n headers: deleteHeaders,\n signal: timeoutSignal(2_000),\n });\n\n if (!response.ok && response.status !== 404) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n } catch {\n // Ignore close errors; close must be best effort.\n }\n\n try {\n this.readableController?.close();\n } catch {\n // no-op\n }\n\n this.readableController = null;\n }\n\n private async writeMessage(message: AnyMessage): Promise<void> {\n if (this.closed) {\n throw new Error(\"ACP client is closed\");\n }\n\n this.observeEnvelope(message, \"outbound\");\n\n const headers = this.buildHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n });\n\n const url = this.buildUrl(this.bootstrapQueryIfNeeded());\n this.postedOnce = true;\n this.ensureSseLoop();\n void this.postMessage(url, headers, message);\n }\n\n private async postMessage(url: string, headers: Headers, message: AnyMessage): Promise<void> {\n try {\n const response = await this.fetcher(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(message),\n });\n\n if (!response.ok) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n\n if (response.status === 200) {\n const text = await response.text();\n if (text.trim()) {\n const envelope = JSON.parse(text) as AnyMessage;\n this.pushInbound(envelope);\n }\n return;\n }\n\n // Drain response body so the underlying connection is released back to\n // the pool. Without this, Node.js undici keeps the socket occupied and\n // may stall subsequent requests to the same origin.\n await response.text().catch(() => {});\n } catch (error) {\n console.error(\"ACP write error:\", error);\n this.failReadable(error);\n }\n }\n\n private ensureSseLoop(): void {\n if (this.sseLoop || this.closed || !this.postedOnce) {\n return;\n }\n\n this.sseLoop = this.runSseLoop().finally(() => {\n this.sseLoop = null;\n });\n }\n\n private async runSseLoop(): Promise<void> {\n while (!this.closed) {\n this.sseAbortController = new AbortController();\n\n const headers = this.buildHeaders({\n Accept: \"text/event-stream\",\n });\n\n if (this.lastEventId) {\n headers.set(\"Last-Event-ID\", this.lastEventId);\n }\n\n try {\n const response = await this.fetcher(this.buildUrl(), {\n method: \"GET\",\n headers,\n signal: this.sseAbortController.signal,\n });\n if (!response.ok) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n\n if (!response.body) {\n throw new Error(\"SSE stream is not readable in this environment.\");\n }\n\n await this.consumeSse(response.body);\n\n if (!this.closed) {\n await delay(150);\n }\n } catch (error) {\n if (this.closed || isAbortError(error)) {\n return;\n }\n\n // SSE failure is non-fatal: the POST request/response flow still works.\n // Exiting the loop allows ensureSseLoop() to restart it on the next POST.\n return;\n }\n }\n }\n\n private async consumeSse(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (!this.closed) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n\n buffer += decoder.decode(value, { stream: true }).replace(/\\r\\n/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const eventChunk = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n this.processSseEvent(eventChunk);\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n private processSseEvent(chunk: string): void {\n if (!chunk.trim()) {\n return;\n }\n\n let eventName = \"message\";\n let eventId: string | null = null;\n const dataLines: string[] = [];\n\n for (const line of chunk.split(\"\\n\")) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n\n if (line.startsWith(\"event:\")) {\n eventName = line.slice(6).trim();\n continue;\n }\n\n if (line.startsWith(\"id:\")) {\n eventId = line.slice(3).trim();\n continue;\n }\n\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.slice(5).trimStart());\n }\n }\n\n if (eventId) {\n this.lastEventId = eventId;\n }\n\n if (eventName !== \"message\" || dataLines.length === 0) {\n return;\n }\n\n const payloadText = dataLines.join(\"\\n\");\n if (!payloadText.trim()) {\n return;\n }\n\n const envelope = JSON.parse(payloadText) as AnyMessage;\n this.pushInbound(envelope);\n }\n\n private pushInbound(envelope: AnyMessage): void {\n if (this.closed) {\n return;\n }\n\n const responseId = responseEnvelopeId(envelope);\n if (responseId) {\n if (this.seenResponseIds.has(responseId)) {\n return;\n }\n this.seenResponseIds.add(responseId);\n this.seenResponseIdOrder.push(responseId);\n if (this.seenResponseIdOrder.length > 2048) {\n const oldest = this.seenResponseIdOrder.shift();\n if (oldest) {\n this.seenResponseIds.delete(oldest);\n }\n }\n }\n\n this.observeEnvelope(envelope, \"inbound\");\n\n try {\n this.readableController?.enqueue(envelope);\n } catch (error) {\n this.failReadable(error);\n }\n }\n\n private failReadable(error: unknown): void {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n try {\n this.readableController?.error(error);\n } catch {\n // no-op\n }\n\n this.readableController = null;\n\n if (this.sseAbortController) {\n this.sseAbortController.abort();\n }\n }\n\n private observeEnvelope(message: AnyMessage, direction: AcpEnvelopeDirection): void {\n if (!this.onEnvelope) {\n return;\n }\n\n this.onEnvelope(message, direction);\n }\n\n private buildHeaders(extra?: HeadersInit): Headers {\n const headers = new Headers(this.defaultHeaders ?? undefined);\n\n if (this.token) {\n headers.set(\"Authorization\", `Bearer ${this.token}`);\n }\n\n if (extra) {\n const merged = new Headers(extra);\n merged.forEach((value, key) => headers.set(key, value));\n }\n\n return headers;\n }\n\n private buildUrl(query?: URLSearchParams | null): string {\n const url = new URL(`${this.baseUrl}${this.path}`);\n if (query) {\n for (const [key, value] of query.entries()) {\n url.searchParams.set(key, value);\n }\n }\n return url.toString();\n }\n\n private bootstrapQueryIfNeeded(): URLSearchParams | null {\n if (this.postedOnce || !this.bootstrapQuery || this.bootstrapQuery.size === 0) {\n return null;\n }\n return this.bootstrapQuery;\n }\n}\n\nfunction buildClientHandlers(client?: Partial<Client>): Client {\n const fallbackPermission: RequestPermissionResponse = {\n outcome: {\n outcome: \"cancelled\",\n } as RequestPermissionOutcome,\n };\n\n return {\n requestPermission: async (request: RequestPermissionRequest) => {\n if (client?.requestPermission) {\n return client.requestPermission(request);\n }\n return fallbackPermission;\n },\n sessionUpdate: async (notification: SessionNotification) => {\n if (client?.sessionUpdate) {\n await client.sessionUpdate(notification);\n }\n },\n readTextFile: client?.readTextFile,\n writeTextFile: client?.writeTextFile,\n createTerminal: client?.createTerminal,\n terminalOutput: client?.terminalOutput,\n releaseTerminal: client?.releaseTerminal,\n waitForTerminalExit: client?.waitForTerminalExit,\n killTerminal: client?.killTerminal,\n extMethod: client?.extMethod,\n extNotification: async (method: string, params: Record<string, unknown>) => {\n if (client?.extNotification) {\n await client.extNotification(method, params);\n }\n },\n };\n}\n\nfunction responseEnvelopeId(message: AnyMessage): string | null {\n if (typeof message !== \"object\" || message === null) {\n return null;\n }\n const record = message as Record<string, unknown>;\n if (\"method\" in record) {\n return null;\n }\n if (!(\"result\" in record) && !(\"error\" in record)) {\n return null;\n }\n const id = record.id;\n if (id === null || id === undefined) {\n return null;\n }\n return String(id);\n}\n\nasync function readProblem(response: Response): Promise<ProblemDetails | undefined> {\n try {\n const text = await response.clone().text();\n if (!text) {\n return undefined;\n }\n return JSON.parse(text) as ProblemDetails;\n } catch {\n return undefined;\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction timeoutSignal(timeoutMs: number): AbortSignal | undefined {\n if (typeof AbortSignal !== \"undefined\" && typeof AbortSignal.timeout === \"function\") {\n return AbortSignal.timeout(timeoutMs);\n }\n return undefined;\n}\n\nfunction normalizePath(path: string): string {\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n return path;\n}\n\nfunction buildQueryParams(source: Record<string, QueryValue>): URLSearchParams {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined || value === null) {\n continue;\n }\n params.set(key, String(value));\n }\n return params;\n}\n\nexport type * from \"@agentclientprotocol/sdk\";\nexport { PROTOCOL_VERSION } from \"@agentclientprotocol/sdk\";\n"],"mappings":"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","names":["PROTOCOL_VERSION"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n ClientSideConnection,\n PROTOCOL_VERSION,\n type AnyMessage,\n type AuthenticateRequest,\n type AuthenticateResponse,\n type CancelNotification,\n type Client,\n type ForkSessionRequest,\n type ForkSessionResponse,\n type InitializeRequest,\n type InitializeResponse,\n type ListSessionsRequest,\n type ListSessionsResponse,\n type LoadSessionRequest,\n type LoadSessionResponse,\n type NewSessionRequest,\n type NewSessionResponse,\n type PromptRequest,\n type PromptResponse,\n type RequestPermissionOutcome,\n type RequestPermissionRequest,\n type RequestPermissionResponse,\n type ResumeSessionRequest,\n type ResumeSessionResponse,\n type SessionNotification,\n type SetSessionConfigOptionRequest,\n type SetSessionConfigOptionResponse,\n type SetSessionModelRequest,\n type SetSessionModelResponse,\n type SetSessionModeRequest,\n type SetSessionModeResponse,\n type Stream,\n} from \"@agentclientprotocol/sdk\";\n\nconst DEFAULT_ACP_PATH = \"/v1/rpc\";\n\nexport interface ProblemDetails {\n type: string;\n title: string;\n status: number;\n detail?: string;\n instance?: string;\n [key: string]: unknown;\n}\n\nexport type AcpEnvelopeDirection = \"inbound\" | \"outbound\";\n\nexport type AcpEnvelopeObserver = (envelope: AnyMessage, direction: AcpEnvelopeDirection) => void;\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport interface AcpHttpTransportOptions {\n path?: string;\n bootstrapQuery?: Record<string, QueryValue>;\n}\n\nexport interface AcpHttpClientOptions {\n baseUrl: string;\n token?: string;\n fetch?: typeof fetch;\n headers?: HeadersInit;\n client?: Partial<Client>;\n onEnvelope?: AcpEnvelopeObserver;\n transport?: AcpHttpTransportOptions;\n}\n\nexport class AcpHttpError extends Error {\n readonly status: number;\n readonly problem?: ProblemDetails;\n readonly response: Response;\n\n constructor(status: number, problem: ProblemDetails | undefined, response: Response) {\n super(problem?.title ?? `Request failed with status ${status}`);\n this.name = \"AcpHttpError\";\n this.status = status;\n this.problem = problem;\n this.response = response;\n }\n}\n\nexport interface RpcErrorResponse {\n code: number;\n message: string;\n data?: unknown;\n}\n\nconst RPC_CODE_LABELS: Record<number, string> = {\n [-32700]: \"Parse error\",\n [-32600]: \"Invalid request\",\n [-32601]: \"Method not supported by agent\",\n [-32602]: \"Invalid parameters\",\n [-32603]: \"Internal agent error\",\n [-32000]: \"Authentication required\",\n [-32002]: \"Resource not found\",\n};\n\nexport class AcpRpcError extends Error {\n readonly code: number;\n readonly data?: unknown;\n\n constructor(code: number, message: string, data?: unknown) {\n const label = RPC_CODE_LABELS[code];\n const display = label ? `${label}: ${message}` : message;\n super(display);\n this.name = \"AcpRpcError\";\n this.code = code;\n this.data = data;\n }\n}\n\nfunction isRpcErrorResponse(value: unknown): value is RpcErrorResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n typeof (value as RpcErrorResponse).code === \"number\" &&\n \"message\" in value &&\n typeof (value as RpcErrorResponse).message === \"string\"\n );\n}\n\nasync function wrapRpc<T>(promise: Promise<T>): Promise<T> {\n try {\n return await promise;\n } catch (error) {\n if (isRpcErrorResponse(error)) {\n throw new AcpRpcError(error.code, error.message, error.data);\n }\n throw error;\n }\n}\n\nexport class AcpHttpClient {\n private readonly transport: StreamableHttpAcpTransport;\n private readonly connection: ClientSideConnection;\n\n constructor(options: AcpHttpClientOptions) {\n const fetcher = options.fetch ?? globalThis.fetch?.bind(globalThis);\n if (!fetcher) {\n throw new Error(\"Fetch API is not available; provide a fetch implementation.\");\n }\n\n this.transport = new StreamableHttpAcpTransport({\n baseUrl: options.baseUrl,\n fetcher,\n token: options.token,\n defaultHeaders: options.headers,\n onEnvelope: options.onEnvelope,\n transport: options.transport,\n });\n\n const clientHandlers = buildClientHandlers(options.client);\n this.connection = new ClientSideConnection(() => clientHandlers, this.transport.stream);\n }\n\n async initialize(request: Partial<InitializeRequest> = {}): Promise<InitializeResponse> {\n const params: InitializeRequest = {\n protocolVersion: request.protocolVersion ?? PROTOCOL_VERSION,\n clientCapabilities: request.clientCapabilities,\n clientInfo: request.clientInfo ?? {\n name: \"acp-http-client\",\n version: \"v1\",\n },\n };\n\n if (request._meta !== undefined) {\n params._meta = request._meta;\n }\n\n return wrapRpc(this.connection.initialize(params));\n }\n\n async authenticate(request: AuthenticateRequest): Promise<AuthenticateResponse> {\n return wrapRpc(this.connection.authenticate(request));\n }\n\n async newSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n return wrapRpc(this.connection.newSession(request));\n }\n\n async loadSession(request: LoadSessionRequest): Promise<LoadSessionResponse> {\n return wrapRpc(this.connection.loadSession(request));\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n return wrapRpc(this.connection.prompt(request));\n }\n\n async cancel(notification: CancelNotification): Promise<void> {\n return this.connection.cancel(notification);\n }\n\n async setSessionMode(request: SetSessionModeRequest): Promise<SetSessionModeResponse | void> {\n return wrapRpc(this.connection.setSessionMode(request));\n }\n\n async setSessionConfigOption(request: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse> {\n return wrapRpc(this.connection.setSessionConfigOption(request));\n }\n\n async listSessions(request: ListSessionsRequest): Promise<ListSessionsResponse> {\n return wrapRpc(this.connection.listSessions(request));\n }\n\n async unstableForkSession(request: ForkSessionRequest): Promise<ForkSessionResponse> {\n return wrapRpc(this.connection.unstable_forkSession(request));\n }\n\n async unstableResumeSession(request: ResumeSessionRequest): Promise<ResumeSessionResponse> {\n return wrapRpc(this.connection.unstable_resumeSession(request));\n }\n\n async unstableSetSessionModel(request: SetSessionModelRequest): Promise<SetSessionModelResponse | void> {\n return wrapRpc(this.connection.unstable_setSessionModel(request));\n }\n\n async extMethod(method: string, params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return wrapRpc(this.connection.extMethod(method, params));\n }\n\n async extNotification(method: string, params: Record<string, unknown>): Promise<void> {\n return this.connection.extNotification(method, params);\n }\n\n async disconnect(): Promise<void> {\n await this.transport.close();\n }\n\n get closed(): Promise<void> {\n return this.connection.closed;\n }\n\n get signal(): AbortSignal {\n return this.connection.signal;\n }\n\n get clientSideConnection(): ClientSideConnection {\n return this.connection;\n }\n}\n\ntype StreamableHttpAcpTransportOptions = {\n baseUrl: string;\n fetcher: typeof fetch;\n token?: string;\n defaultHeaders?: HeadersInit;\n onEnvelope?: AcpEnvelopeObserver;\n transport?: AcpHttpTransportOptions;\n};\n\nclass StreamableHttpAcpTransport {\n readonly stream: Stream;\n\n private readonly baseUrl: string;\n private readonly path: string;\n private readonly fetcher: typeof fetch;\n private readonly token?: string;\n private readonly defaultHeaders?: HeadersInit;\n private readonly onEnvelope?: AcpEnvelopeObserver;\n private readonly bootstrapQuery: URLSearchParams | null;\n\n private readableController: ReadableStreamDefaultController<AnyMessage> | null = null;\n private sseAbortController: AbortController | null = null;\n private sseLoop: Promise<void> | null = null;\n private lastEventId: string | null = null;\n private closed = false;\n private closingPromise: Promise<void> | null = null;\n private postedOnce = false;\n private readonly seenResponseIds = new Set<string>();\n private readonly seenResponseIdOrder: string[] = [];\n\n constructor(options: StreamableHttpAcpTransportOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.path = normalizePath(options.transport?.path ?? DEFAULT_ACP_PATH);\n this.fetcher = options.fetcher;\n this.token = options.token;\n this.defaultHeaders = options.defaultHeaders;\n this.onEnvelope = options.onEnvelope;\n this.bootstrapQuery = options.transport?.bootstrapQuery ? buildQueryParams(options.transport.bootstrapQuery) : null;\n\n this.stream = {\n readable: new ReadableStream<AnyMessage>({\n start: (controller) => {\n this.readableController = controller;\n },\n cancel: async () => {\n await this.close();\n },\n }),\n writable: new WritableStream<AnyMessage>({\n write: async (message) => {\n await this.writeMessage(message);\n },\n close: async () => {\n await this.close();\n },\n abort: async () => {\n await this.close();\n },\n }),\n };\n }\n\n async close(): Promise<void> {\n if (this.closingPromise) {\n return this.closingPromise;\n }\n\n this.closingPromise = this.closeImpl();\n return this.closingPromise;\n }\n\n private async closeImpl(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n if (this.sseAbortController) {\n this.sseAbortController.abort();\n }\n\n if (!this.postedOnce) {\n try {\n this.readableController?.close();\n } catch {\n // no-op\n }\n this.readableController = null;\n return;\n }\n\n const deleteHeaders = this.buildHeaders({\n Accept: \"application/json\",\n });\n\n const deleteRequest = (async () => {\n const response = await this.fetcher(this.buildUrl(), {\n method: \"DELETE\",\n headers: deleteHeaders,\n signal: timeoutSignal(CLOSE_TIMEOUT_MS),\n });\n\n if (!response.ok && response.status !== 404) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n })().catch(() => {\n // Ignore close errors; close must be best effort.\n });\n\n // A custom fetch can lose the signal, so the signal alone cannot bound close.\n let closeTimer: ReturnType<typeof setTimeout> | undefined;\n await Promise.race([\n deleteRequest,\n new Promise<void>((resolve) => {\n closeTimer = setTimeout(resolve, CLOSE_TIMEOUT_MS);\n }),\n ]);\n clearTimeout(closeTimer);\n\n try {\n this.readableController?.close();\n } catch {\n // no-op\n }\n\n this.readableController = null;\n }\n\n private async writeMessage(message: AnyMessage): Promise<void> {\n if (this.closed) {\n throw new Error(\"ACP client is closed\");\n }\n\n this.observeEnvelope(message, \"outbound\");\n\n const headers = this.buildHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n });\n\n const url = this.buildUrl(this.bootstrapQueryIfNeeded());\n this.postedOnce = true;\n this.ensureSseLoop();\n void this.postMessage(url, headers, message);\n }\n\n private async postMessage(url: string, headers: Headers, message: AnyMessage): Promise<void> {\n try {\n const response = await this.fetcher(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(message),\n });\n\n if (!response.ok) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n\n if (response.status === 200) {\n const text = await response.text();\n if (text.trim()) {\n const envelope = JSON.parse(text) as AnyMessage;\n this.pushInbound(envelope);\n }\n return;\n }\n\n // Drain response body so the underlying connection is released back to\n // the pool. Without this, Node.js undici keeps the socket occupied and\n // may stall subsequent requests to the same origin.\n await response.text().catch(() => {});\n } catch (error) {\n console.error(\"ACP write error:\", error);\n this.failReadable(error);\n }\n }\n\n private ensureSseLoop(): void {\n if (this.sseLoop || this.closed || !this.postedOnce) {\n return;\n }\n\n this.sseLoop = this.runSseLoop().finally(() => {\n this.sseLoop = null;\n });\n }\n\n private async runSseLoop(): Promise<void> {\n while (!this.closed) {\n this.sseAbortController = new AbortController();\n\n const headers = this.buildHeaders({\n Accept: \"text/event-stream\",\n });\n\n if (this.lastEventId) {\n headers.set(\"Last-Event-ID\", this.lastEventId);\n }\n\n try {\n const response = await this.fetcher(this.buildUrl(), {\n method: \"GET\",\n headers,\n signal: this.sseAbortController.signal,\n });\n if (!response.ok) {\n throw new AcpHttpError(response.status, await readProblem(response), response);\n }\n\n if (!response.body) {\n throw new Error(\"SSE stream is not readable in this environment.\");\n }\n\n await this.consumeSse(response.body);\n\n if (!this.closed) {\n await delay(150);\n }\n } catch (error) {\n if (this.closed || isAbortError(error)) {\n return;\n }\n\n // SSE failure is non-fatal: the POST request/response flow still works.\n // Exiting the loop allows ensureSseLoop() to restart it on the next POST.\n return;\n }\n }\n }\n\n private async consumeSse(body: ReadableStream<Uint8Array>): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (!this.closed) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n\n buffer += decoder.decode(value, { stream: true }).replace(/\\r\\n/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const eventChunk = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n this.processSseEvent(eventChunk);\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n private processSseEvent(chunk: string): void {\n if (!chunk.trim()) {\n return;\n }\n\n let eventName = \"message\";\n let eventId: string | null = null;\n const dataLines: string[] = [];\n\n for (const line of chunk.split(\"\\n\")) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n\n if (line.startsWith(\"event:\")) {\n eventName = line.slice(6).trim();\n continue;\n }\n\n if (line.startsWith(\"id:\")) {\n eventId = line.slice(3).trim();\n continue;\n }\n\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.slice(5).trimStart());\n }\n }\n\n if (eventId) {\n this.lastEventId = eventId;\n }\n\n if (eventName !== \"message\" || dataLines.length === 0) {\n return;\n }\n\n const payloadText = dataLines.join(\"\\n\");\n if (!payloadText.trim()) {\n return;\n }\n\n const envelope = JSON.parse(payloadText) as AnyMessage;\n this.pushInbound(envelope);\n }\n\n private pushInbound(envelope: AnyMessage): void {\n if (this.closed) {\n return;\n }\n\n const responseId = responseEnvelopeId(envelope);\n if (responseId) {\n if (this.seenResponseIds.has(responseId)) {\n return;\n }\n this.seenResponseIds.add(responseId);\n this.seenResponseIdOrder.push(responseId);\n if (this.seenResponseIdOrder.length > 2048) {\n const oldest = this.seenResponseIdOrder.shift();\n if (oldest) {\n this.seenResponseIds.delete(oldest);\n }\n }\n }\n\n this.observeEnvelope(envelope, \"inbound\");\n\n try {\n this.readableController?.enqueue(envelope);\n } catch (error) {\n this.failReadable(error);\n }\n }\n\n private failReadable(error: unknown): void {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n try {\n this.readableController?.error(error);\n } catch {\n // no-op\n }\n\n this.readableController = null;\n\n if (this.sseAbortController) {\n this.sseAbortController.abort();\n }\n }\n\n private observeEnvelope(message: AnyMessage, direction: AcpEnvelopeDirection): void {\n if (!this.onEnvelope) {\n return;\n }\n\n this.onEnvelope(message, direction);\n }\n\n private buildHeaders(extra?: HeadersInit): Headers {\n const headers = new Headers(this.defaultHeaders ?? undefined);\n\n if (this.token) {\n headers.set(\"Authorization\", `Bearer ${this.token}`);\n }\n\n if (extra) {\n const merged = new Headers(extra);\n merged.forEach((value, key) => headers.set(key, value));\n }\n\n return headers;\n }\n\n private buildUrl(query?: URLSearchParams | null): string {\n const url = new URL(`${this.baseUrl}${this.path}`);\n if (query) {\n for (const [key, value] of query.entries()) {\n url.searchParams.set(key, value);\n }\n }\n return url.toString();\n }\n\n private bootstrapQueryIfNeeded(): URLSearchParams | null {\n if (this.postedOnce || !this.bootstrapQuery || this.bootstrapQuery.size === 0) {\n return null;\n }\n return this.bootstrapQuery;\n }\n}\n\nfunction buildClientHandlers(client?: Partial<Client>): Client {\n const fallbackPermission: RequestPermissionResponse = {\n outcome: {\n outcome: \"cancelled\",\n } as RequestPermissionOutcome,\n };\n\n return {\n requestPermission: async (request: RequestPermissionRequest) => {\n if (client?.requestPermission) {\n return client.requestPermission(request);\n }\n return fallbackPermission;\n },\n sessionUpdate: async (notification: SessionNotification) => {\n if (client?.sessionUpdate) {\n await client.sessionUpdate(notification);\n }\n },\n readTextFile: client?.readTextFile,\n writeTextFile: client?.writeTextFile,\n createTerminal: client?.createTerminal,\n terminalOutput: client?.terminalOutput,\n releaseTerminal: client?.releaseTerminal,\n waitForTerminalExit: client?.waitForTerminalExit,\n killTerminal: client?.killTerminal,\n extMethod: client?.extMethod,\n extNotification: async (method: string, params: Record<string, unknown>) => {\n if (client?.extNotification) {\n await client.extNotification(method, params);\n }\n },\n };\n}\n\nfunction responseEnvelopeId(message: AnyMessage): string | null {\n if (typeof message !== \"object\" || message === null) {\n return null;\n }\n const record = message as Record<string, unknown>;\n if (\"method\" in record) {\n return null;\n }\n if (!(\"result\" in record) && !(\"error\" in record)) {\n return null;\n }\n const id = record.id;\n if (id === null || id === undefined) {\n return null;\n }\n return String(id);\n}\n\nasync function readProblem(response: Response): Promise<ProblemDetails | undefined> {\n try {\n const text = await response.clone().text();\n if (!text) {\n return undefined;\n }\n return JSON.parse(text) as ProblemDetails;\n } catch {\n return undefined;\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nconst CLOSE_TIMEOUT_MS = 2_000;\n\nfunction timeoutSignal(timeoutMs: number): AbortSignal | undefined {\n if (typeof AbortSignal !== \"undefined\" && typeof AbortSignal.timeout === \"function\") {\n return AbortSignal.timeout(timeoutMs);\n }\n return undefined;\n}\n\nfunction normalizePath(path: string): string {\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n return path;\n}\n\nfunction buildQueryParams(source: Record<string, QueryValue>): URLSearchParams {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined || value === null) {\n continue;\n }\n params.set(key, String(value));\n }\n return params;\n}\n\nexport type * from \"@agentclientprotocol/sdk\";\nexport { PROTOCOL_VERSION } from \"@agentclientprotocol/sdk\";\n"],"mappings":"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","names":["PROTOCOL_VERSION"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acp-http-client",
3
- "version": "0.5.4",
3
+ "version": "0.5.6",
4
4
  "description": "Protocol-faithful ACP JSON-RPC over streamable HTTP client.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {