acp-http-client 0.3.2 → 0.4.0-rc.2
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.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ declare class AcpHttpClient {
|
|
|
54
54
|
cancel(notification: CancelNotification): Promise<void>;
|
|
55
55
|
setSessionMode(request: SetSessionModeRequest): Promise<SetSessionModeResponse | void>;
|
|
56
56
|
setSessionConfigOption(request: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
|
|
57
|
-
|
|
57
|
+
listSessions(request: ListSessionsRequest): Promise<ListSessionsResponse>;
|
|
58
58
|
unstableForkSession(request: ForkSessionRequest): Promise<ForkSessionResponse>;
|
|
59
59
|
unstableResumeSession(request: ResumeSessionRequest): Promise<ResumeSessionResponse>;
|
|
60
60
|
unstableSetSessionModel(request: SetSessionModelRequest): Promise<SetSessionModelResponse | void>;
|
package/dist/index.js
CHANGED
|
@@ -105,8 +105,8 @@ var AcpHttpClient = class {
|
|
|
105
105
|
async setSessionConfigOption(request) {
|
|
106
106
|
return wrapRpc(this.connection.setSessionConfigOption(request));
|
|
107
107
|
}
|
|
108
|
-
async
|
|
109
|
-
return wrapRpc(this.connection.
|
|
108
|
+
async listSessions(request) {
|
|
109
|
+
return wrapRpc(this.connection.listSessions(request));
|
|
110
110
|
}
|
|
111
111
|
async unstableForkSession(request) {
|
|
112
112
|
return wrapRpc(this.connection.unstable_forkSession(request));
|
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 unstableListSessions(request: ListSessionsRequest): Promise<ListSessionsResponse> {\n return wrapRpc(this.connection.unstable_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 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":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OA+BK;AAorBP,SAAS,oBAAAA,yBAAwB;AAlrBjC,IAAM,mBAAmB;AAgClB,IAAM,eAAN,cAA2B,MAAM;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAgB,SAAqC,UAAoB;AACnF,UAAM,SAAS,SAAS,8BAA8B,MAAM,EAAE;AAC9D,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AACF;AAQA,IAAM,kBAA0C;AAAA,EAC9C,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,MAAM,GAAG;AAAA,EACV,CAAC,KAAM,GAAG;AAAA,EACV,CAAC,MAAM,GAAG;AACZ;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAA,EAC5B;AAAA,EACA;AAAA,EAET,YAAY,MAAc,SAAiB,MAAgB;AACzD,UAAM,QAAQ,gBAAgB,IAAI;AAClC,UAAM,UAAU,QAAQ,GAAG,KAAK,KAAK,OAAO,KAAK;AACjD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEA,SAAS,mBAAmB,OAA2C;AACrE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAQ,MAA2B,SAAS,YAC5C,aAAa,SACb,OAAQ,MAA2B,YAAY;AAEnD;AAEA,eAAe,QAAW,SAAiC;AACzD,MAAI;AACF,WAAO,MAAM;AAAA,EACf,SAAS,OAAO;AACd,QAAI,mBAAmB,KAAK,GAAG;AAC7B,YAAM,IAAI,YAAY,MAAM,MAAM,MAAM,SAAS,MAAM,IAAI;AAAA,IAC7D;AACA,UAAM;AAAA,EACR;AACF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EACA;AAAA,EAEjB,YAAY,SAA+B;AACzC,UAAM,UAAU,QAAQ,SAAS,WAAW,OAAO,KAAK,UAAU;AAClE,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AAEA,SAAK,YAAY,IAAI,2BAA2B;AAAA,MAC9C,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,gBAAgB,QAAQ;AAAA,MACxB,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB,CAAC;AAED,UAAM,iBAAiB,oBAAoB,QAAQ,MAAM;AACzD,SAAK,aAAa,IAAI,qBAAqB,MAAM,gBAAgB,KAAK,UAAU,MAAM;AAAA,EACxF;AAAA,EAEA,MAAM,WAAW,UAAsC,CAAC,GAAgC;AACtF,UAAM,SAA4B;AAAA,MAChC,iBAAiB,QAAQ,mBAAmB;AAAA,MAC5C,oBAAoB,QAAQ;AAAA,MAC5B,YAAY,QAAQ,cAAc;AAAA,QAChC,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI,QAAQ,UAAU,QAAW;AAC/B,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,WAAO,QAAQ,KAAK,WAAW,WAAW,MAAM,CAAC;AAAA,EACnD;AAAA,EAEA,MAAM,aAAa,SAA6D;AAC9E,WAAO,QAAQ,KAAK,WAAW,aAAa,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,MAAM,WAAW,SAAyD;AACxE,WAAO,QAAQ,KAAK,WAAW,WAAW,OAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,YAAY,SAA2D;AAC3E,WAAO,QAAQ,KAAK,WAAW,YAAY,OAAO,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,SAAiD;AAC5D,WAAO,QAAQ,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,OAAO,cAAiD;AAC5D,WAAO,KAAK,WAAW,OAAO,YAAY;AAAA,EAC5C;AAAA,EAEA,MAAM,eAAe,SAAwE;AAC3F,WAAO,QAAQ,KAAK,WAAW,eAAe,OAAO,CAAC;AAAA,EACxD;AAAA,EAEA,MAAM,uBAAuB,SAAiF;AAC5G,WAAO,QAAQ,KAAK,WAAW,uBAAuB,OAAO,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,aAAa,SAA6D;AAC9E,WAAO,QAAQ,KAAK,WAAW,aAAa,OAAO,CAAC;AAAA,EACtD;AAAA,EAEA,MAAM,oBAAoB,SAA2D;AACnF,WAAO,QAAQ,KAAK,WAAW,qBAAqB,OAAO,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,sBAAsB,SAA+D;AACzF,WAAO,QAAQ,KAAK,WAAW,uBAAuB,OAAO,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,wBAAwB,SAA0E;AACtG,WAAO,QAAQ,KAAK,WAAW,yBAAyB,OAAO,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,UAAU,QAAgB,QAAmE;AACjG,WAAO,QAAQ,KAAK,WAAW,UAAU,QAAQ,MAAM,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,gBAAgB,QAAgB,QAAgD;AACpF,WAAO,KAAK,WAAW,gBAAgB,QAAQ,MAAM;AAAA,EACvD;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,UAAU,MAAM;AAAA,EAC7B;AAAA,EAEA,IAAI,SAAwB;AAC1B,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,IAAI,SAAsB;AACxB,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,IAAI,uBAA6C;AAC/C,WAAO,KAAK;AAAA,EACd;AACF;AAWA,IAAM,6BAAN,MAAiC;AAAA,EACtB;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,qBAAyE;AAAA,EACzE,qBAA6C;AAAA,EAC7C,UAAgC;AAAA,EAChC,cAA6B;AAAA,EAC7B,SAAS;AAAA,EACT,iBAAuC;AAAA,EACvC,aAAa;AAAA,EACJ,kBAAkB,oBAAI,IAAY;AAAA,EAClC,sBAAgC,CAAC;AAAA,EAElD,YAAY,SAA4C;AACtD,SAAK,UAAU,QAAQ,QAAQ,QAAQ,OAAO,EAAE;AAChD,SAAK,OAAO,cAAc,QAAQ,WAAW,QAAQ,gBAAgB;AACrE,SAAK,UAAU,QAAQ;AACvB,SAAK,QAAQ,QAAQ;AACrB,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,aAAa,QAAQ;AAC1B,SAAK,iBAAiB,QAAQ,WAAW,iBAAiB,iBAAiB,QAAQ,UAAU,cAAc,IAAI;AAE/G,SAAK,SAAS;AAAA,MACZ,UAAU,IAAI,eAA2B;AAAA,QACvC,OAAO,CAAC,eAAe;AACrB,eAAK,qBAAqB;AAAA,QAC5B;AAAA,QACA,QAAQ,YAAY;AAClB,gBAAM,KAAK,MAAM;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,MACD,UAAU,IAAI,eAA2B;AAAA,QACvC,OAAO,OAAO,YAAY;AACxB,gBAAM,KAAK,aAAa,OAAO;AAAA,QACjC;AAAA,QACA,OAAO,YAAY;AACjB,gBAAM,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,OAAO,YAAY;AACjB,gBAAM,KAAK,MAAM;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,gBAAgB;AACvB,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,iBAAiB,KAAK,UAAU;AACrC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,YAA2B;AACvC,QAAI,KAAK,QAAQ;AACf;AAAA,IACF;AAEA,SAAK,SAAS;AAEd,QAAI,KAAK,oBAAoB;AAC3B,WAAK,mBAAmB,MAAM;AAAA,IAChC;AAEA,QAAI,CAAC,KAAK,YAAY;AACpB,UAAI;AACF,aAAK,oBAAoB,MAAM;AAAA,MACjC,QAAQ;AAAA,MAER;AACA,WAAK,qBAAqB;AAC1B;AAAA,IACF;AAEA,UAAM,gBAAgB,KAAK,aAAa;AAAA,MACtC,QAAQ;AAAA,IACV,CAAC;AAED,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,QAAQ,KAAK,SAAS,GAAG;AAAA,QACnD,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ,cAAc,GAAK;AAAA,MAC7B,CAAC;AAED,UAAI,CAAC,SAAS,MAAM,SAAS,WAAW,KAAK;AAC3C,cAAM,IAAI,aAAa,SAAS,QAAQ,MAAM,YAAY,QAAQ,GAAG,QAAQ;AAAA,MAC/E;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,QAAI;AACF,WAAK,oBAAoB,MAAM;AAAA,IACjC,QAAQ;AAAA,IAER;AAEA,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,MAAc,aAAa,SAAoC;AAC7D,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,SAAK,gBAAgB,SAAS,UAAU;AAExC,UAAM,UAAU,KAAK,aAAa;AAAA,MAChC,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,MAAM,KAAK,SAAS,KAAK,uBAAuB,CAAC;AACvD,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,KAAK,YAAY,KAAK,SAAS,OAAO;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,KAAa,SAAkB,SAAoC;AAC3F,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,QAAQ,KAAK;AAAA,QACvC,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,aAAa,SAAS,QAAQ,MAAM,YAAY,QAAQ,GAAG,QAAQ;AAAA,MAC/E;AAEA,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAI,KAAK,KAAK,GAAG;AACf,gBAAM,WAAW,KAAK,MAAM,IAAI;AAChC,eAAK,YAAY,QAAQ;AAAA,QAC3B;AACA;AAAA,MACF;AAKA,YAAM,SAAS,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACtC,SAAS,OAAO;AACd,cAAQ,MAAM,oBAAoB,KAAK;AACvC,WAAK,aAAa,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,WAAW,KAAK,UAAU,CAAC,KAAK,YAAY;AACnD;AAAA,IACF;AAEA,SAAK,UAAU,KAAK,WAAW,EAAE,QAAQ,MAAM;AAC7C,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,aAA4B;AACxC,WAAO,CAAC,KAAK,QAAQ;AACnB,WAAK,qBAAqB,IAAI,gBAAgB;AAE9C,YAAM,UAAU,KAAK,aAAa;AAAA,QAChC,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,KAAK,aAAa;AACpB,gBAAQ,IAAI,iBAAiB,KAAK,WAAW;AAAA,MAC/C;AAEA,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,QAAQ,KAAK,SAAS,GAAG;AAAA,UACnD,QAAQ;AAAA,UACR;AAAA,UACA,QAAQ,KAAK,mBAAmB;AAAA,QAClC,CAAC;AACD,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,aAAa,SAAS,QAAQ,MAAM,YAAY,QAAQ,GAAG,QAAQ;AAAA,QAC/E;AAEA,YAAI,CAAC,SAAS,MAAM;AAClB,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AAEA,cAAM,KAAK,WAAW,SAAS,IAAI;AAEnC,YAAI,CAAC,KAAK,QAAQ;AAChB,gBAAM,MAAM,GAAG;AAAA,QACjB;AAAA,MACF,SAAS,OAAO;AACd,YAAI,KAAK,UAAU,aAAa,KAAK,GAAG;AACtC;AAAA,QACF;AAIA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,MAAiD;AACxE,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AAEb,QAAI;AACF,aAAO,CAAC,KAAK,QAAQ;AACnB,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,MAAM;AACR;AAAA,QACF;AAEA,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,SAAS,IAAI;AAEvE,YAAI,iBAAiB,OAAO,QAAQ,MAAM;AAC1C,eAAO,mBAAmB,IAAI;AAC5B,gBAAM,aAAa,OAAO,MAAM,GAAG,cAAc;AACjD,mBAAS,OAAO,MAAM,iBAAiB,CAAC;AACxC,eAAK,gBAAgB,UAAU;AAC/B,2BAAiB,OAAO,QAAQ,MAAM;AAAA,QACxC;AAAA,MACF;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,gBAAgB,OAAqB;AAC3C,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,QAAI,UAAyB;AAC7B,UAAM,YAAsB,CAAC;AAE7B,eAAW,QAAQ,MAAM,MAAM,IAAI,GAAG;AACpC,UAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,GAAG;AACjC;AAAA,MACF;AAEA,UAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,oBAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAC/B;AAAA,MACF;AAEA,UAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,kBAAU,KAAK,MAAM,CAAC,EAAE,KAAK;AAC7B;AAAA,MACF;AAEA,UAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,kBAAU,KAAK,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC;AAAA,MAC1C;AAAA,IACF;AAEA,QAAI,SAAS;AACX,WAAK,cAAc;AAAA,IACrB;AAEA,QAAI,cAAc,aAAa,UAAU,WAAW,GAAG;AACrD;AAAA,IACF;AAEA,UAAM,cAAc,UAAU,KAAK,IAAI;AACvC,QAAI,CAAC,YAAY,KAAK,GAAG;AACvB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,MAAM,WAAW;AACvC,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA,EAEQ,YAAY,UAA4B;AAC9C,QAAI,KAAK,QAAQ;AACf;AAAA,IACF;AAEA,UAAM,aAAa,mBAAmB,QAAQ;AAC9C,QAAI,YAAY;AACd,UAAI,KAAK,gBAAgB,IAAI,UAAU,GAAG;AACxC;AAAA,MACF;AACA,WAAK,gBAAgB,IAAI,UAAU;AACnC,WAAK,oBAAoB,KAAK,UAAU;AACxC,UAAI,KAAK,oBAAoB,SAAS,MAAM;AAC1C,cAAM,SAAS,KAAK,oBAAoB,MAAM;AAC9C,YAAI,QAAQ;AACV,eAAK,gBAAgB,OAAO,MAAM;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,SAAK,gBAAgB,UAAU,SAAS;AAExC,QAAI;AACF,WAAK,oBAAoB,QAAQ,QAAQ;AAAA,IAC3C,SAAS,OAAO;AACd,WAAK,aAAa,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,aAAa,OAAsB;AACzC,QAAI,KAAK,QAAQ;AACf;AAAA,IACF;AAEA,SAAK,SAAS;AAEd,QAAI;AACF,WAAK,oBAAoB,MAAM,KAAK;AAAA,IACtC,QAAQ;AAAA,IAER;AAEA,SAAK,qBAAqB;AAE1B,QAAI,KAAK,oBAAoB;AAC3B,WAAK,mBAAmB,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,gBAAgB,SAAqB,WAAuC;AAClF,QAAI,CAAC,KAAK,YAAY;AACpB;AAAA,IACF;AAEA,SAAK,WAAW,SAAS,SAAS;AAAA,EACpC;AAAA,EAEQ,aAAa,OAA8B;AACjD,UAAM,UAAU,IAAI,QAAQ,KAAK,kBAAkB,MAAS;AAE5D,QAAI,KAAK,OAAO;AACd,cAAQ,IAAI,iBAAiB,UAAU,KAAK,KAAK,EAAE;AAAA,IACrD;AAEA,QAAI,OAAO;AACT,YAAM,SAAS,IAAI,QAAQ,KAAK;AAChC,aAAO,QAAQ,CAAC,OAAO,QAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS,OAAwC;AACvD,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI,EAAE;AACjD,QAAI,OAAO;AACT,iBAAW,CAAC,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAG;AAC1C,YAAI,aAAa,IAAI,KAAK,KAAK;AAAA,MACjC;AAAA,IACF;AACA,WAAO,IAAI,SAAS;AAAA,EACtB;AAAA,EAEQ,yBAAiD;AACvD,QAAI,KAAK,cAAc,CAAC,KAAK,kBAAkB,KAAK,eAAe,SAAS,GAAG;AAC7E,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEA,SAAS,oBAAoB,QAAkC;AAC7D,QAAM,qBAAgD;AAAA,IACpD,SAAS;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,mBAAmB,OAAO,YAAsC;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,OAAO,kBAAkB,OAAO;AAAA,MACzC;AACA,aAAO;AAAA,IACT;AAAA,IACA,eAAe,OAAO,iBAAsC;AAC1D,UAAI,QAAQ,eAAe;AACzB,cAAM,OAAO,cAAc,YAAY;AAAA,MACzC;AAAA,IACF;AAAA,IACA,cAAc,QAAQ;AAAA,IACtB,eAAe,QAAQ;AAAA,IACvB,gBAAgB,QAAQ;AAAA,IACxB,gBAAgB,QAAQ;AAAA,IACxB,iBAAiB,QAAQ;AAAA,IACzB,qBAAqB,QAAQ;AAAA,IAC7B,cAAc,QAAQ;AAAA,IACtB,WAAW,QAAQ;AAAA,IACnB,iBAAiB,OAAO,QAAgB,WAAoC;AAC1E,UAAI,QAAQ,iBAAiB;AAC3B,cAAM,OAAO,gBAAgB,QAAQ,MAAM;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,SAAoC;AAC9D,MAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACnD,WAAO;AAAA,EACT;AACA,QAAM,SAAS;AACf,MAAI,YAAY,QAAQ;AACtB,WAAO;AAAA,EACT;AACA,MAAI,EAAE,YAAY,WAAW,EAAE,WAAW,SAAS;AACjD,WAAO;AAAA,EACT;AACA,QAAM,KAAK,OAAO;AAClB,MAAI,OAAO,QAAQ,OAAO,QAAW;AACnC,WAAO;AAAA,EACT;AACA,SAAO,OAAO,EAAE;AAClB;AAEA,eAAe,YAAY,UAAyD;AAClF,MAAI;AACF,UAAM,OAAO,MAAM,SAAS,MAAM,EAAE,KAAK;AACzC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AACA,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAyB;AAC7C,SAAO,iBAAiB,gBAAgB,MAAM,SAAS;AACzD;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAEA,SAAS,cAAc,WAA4C;AACjE,MAAI,OAAO,gBAAgB,eAAe,OAAO,YAAY,YAAY,YAAY;AACnF,WAAO,YAAY,QAAQ,SAAS;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAsB;AAC3C,MAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACzB,WAAO,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,QAAqD;AAC7E,QAAM,SAAS,IAAI,gBAAgB;AACnC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC;AAAA,IACF;AACA,WAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,EAC/B;AACA,SAAO;AACT;","names":["PROTOCOL_VERSION"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "acp-http-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-rc.2",
|
|
4
4
|
"description": "Protocol-faithful ACP JSON-RPC over streamable HTTP client.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@agentclientprotocol/sdk": "^0.
|
|
20
|
+
"@agentclientprotocol/sdk": "^0.16.1"
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist"
|