acp-sdk
Version:
Agent Communication Protocol SDK
1 lines • 14 kB
Source Map (JSON)
{"version":3,"sources":["../../src/client/client.ts"],"names":["uuuid","getTracer","BaseError","FetchError","createEventSource","HTTPError","ErrorModel","ACPError","Event","PingResponse","AgentsListResponse","AgentsReadResponse","inputToMessages","RunCreateResponse","RunReadResponse","RunEventsListResponse","RunResumeResponse"],"mappings":"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","file":"client.cjs","sourcesContent":["import { v4 as uuuid } from \"uuid\";\nimport { ErrorModel } from \"../models/errors.js\";\nimport {\n AgentManifest,\n AgentName,\n AwaitResume,\n Event,\n Run,\n RunId,\n SessionId,\n} from \"../models/models.js\";\nimport {\n AgentsListResponse,\n AgentsReadResponse,\n PingResponse,\n RunCreateRequest,\n RunCreateResponse,\n RunEventsListResponse,\n RunReadResponse,\n RunResumeRequest,\n RunResumeResponse,\n} from \"../models/schemas.js\";\nimport { ACPError, BaseError, FetchError, HTTPError } from \"./errors.js\";\nimport { createEventSource, EventSource } from \"./sse.js\";\nimport { Input } from \"./types.js\";\nimport { inputToMessages } from \"./utils.js\";\nimport { getTracer } from \"../instrumentation.js\";\n\ntype FetchLike = typeof fetch;\n\nexport interface ClientInit {\n baseUrl?: string;\n /**\n * Optional fetch implementation to use. Defaults to `globalThis.fetch`.\n * Can also be used for advanced use cases like mocking, proxying, custom certs etc.\n */\n fetch?: FetchLike;\n sessionId?: string;\n}\n\nexport class Client {\n #baseUrl: string;\n #fetch: FetchLike;\n #sessionId?: SessionId;\n\n constructor(init?: ClientInit) {\n this.#fetch = init?.fetch ?? globalThis.fetch.bind(globalThis);\n this.#baseUrl = normalizeBaseUrl(init?.baseUrl ?? \"\");\n this.#sessionId = init?.sessionId;\n }\n\n get sessionId() {\n return this.#sessionId;\n }\n\n async withSession<T>(\n cb: (session: Client) => Promise<T>,\n sessionId: SessionId = uuuid()\n ) {\n return await getTracer().startActiveSpan(\n \"session\",\n { attributes: { \"acp.session\": sessionId } },\n async (span) => {\n try {\n const client = new Client({\n fetch: this.#fetch,\n baseUrl: this.#baseUrl,\n sessionId,\n });\n return await cb(client);\n } finally {\n span.end();\n }\n }\n );\n }\n\n async #fetcher(url: string, options?: RequestInit) {\n let response: Response | undefined;\n try {\n response = await this.#fetch(this.#baseUrl + url, options);\n await this.#handleErrorResponse(response);\n return await response.json();\n } catch (err) {\n if (\n err instanceof BaseError ||\n (err instanceof Error && err.name === \"AbortError\")\n ) {\n throw err;\n }\n throw new FetchError((err as Error).message ?? \"fetch failed\", response, {\n cause: err,\n });\n }\n }\n\n async #fetchEventSource(url: string, options?: RequestInit) {\n let eventSource: EventSource;\n try {\n eventSource = await createEventSource({\n url: this.#baseUrl + url,\n fetch: this.#fetch,\n options,\n });\n } catch (err) {\n throw new FetchError(\n (err as Error).message ?? \"fetch failed\",\n undefined,\n {\n cause: err,\n }\n );\n }\n await this.#handleErrorResponse(eventSource.response);\n return eventSource;\n }\n\n async #handleErrorResponse(response: Response) {\n if (response.ok) return;\n\n const text = await response.text();\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch {\n throw new HTTPError(response, text);\n }\n\n const result = ErrorModel.safeParse(data);\n if (result.success) {\n throw new ACPError(result.data);\n }\n throw new HTTPError(response, data);\n }\n\n async *#processEventSource(eventSource: EventSource) {\n for await (const message of eventSource.consume()) {\n const event = Event.parse(JSON.parse(message.data));\n if (event.type === \"error\") {\n throw new ACPError(event.error);\n }\n yield event;\n }\n }\n\n async ping() {\n const data = await this.#fetcher(\"/ping\", { method: \"GET\" });\n PingResponse.parse(data);\n }\n\n async agents(): Promise<AgentManifest[]> {\n const data = await this.#fetcher(\"/agents\", { method: \"GET\" });\n return AgentsListResponse.parse(data).agents;\n }\n\n async agent(name: AgentName): Promise<AgentManifest> {\n const data = await this.#fetcher(`/agents/${name}`, { method: \"GET\" });\n return AgentsReadResponse.parse(data);\n }\n\n async runSync(agentName: AgentName, input: Input): Promise<Run> {\n const data = await this.#fetcher(\n \"/runs\",\n jsonPost<RunCreateRequest>({\n agent_name: agentName,\n input: inputToMessages(input),\n mode: \"sync\",\n session_id: this.#sessionId,\n })\n );\n return RunCreateResponse.parse(data);\n }\n\n async runAsync(agentName: AgentName, input: Input): Promise<Run> {\n const data = await this.#fetcher(\n \"/runs\",\n jsonPost<RunCreateRequest>({\n agent_name: agentName,\n input: inputToMessages(input),\n mode: \"async\",\n session_id: this.#sessionId,\n })\n );\n return RunCreateResponse.parse(data);\n }\n\n async *runStream(\n agentName: AgentName,\n input: Input,\n signal?: AbortSignal\n ): AsyncGenerator<Event, void, unknown> {\n const eventSource = await this.#fetchEventSource(\n \"/runs\",\n jsonPost<RunCreateRequest>(\n {\n agent_name: agentName,\n input: inputToMessages(input),\n mode: \"stream\",\n session_id: this.#sessionId,\n },\n { signal }\n )\n );\n for await (const event of this.#processEventSource(eventSource)) {\n yield event;\n }\n }\n\n async runStatus(runId: RunId): Promise<Run> {\n const data = await this.#fetcher(`/runs/${runId}`, { method: \"GET\" });\n return RunReadResponse.parse(data);\n }\n\n async runEvents(runId: RunId): Promise<Event[]> {\n const data = await this.#fetcher(`/runs/${runId}/events`, {\n method: \"GET\",\n });\n return RunEventsListResponse.parse(data).events;\n }\n\n async runCancel(runId: RunId): Promise<Run> {\n const data = await this.#fetcher(`/runs/${runId}/cancel`, {\n method: \"POST\",\n });\n return RunReadResponse.parse(data);\n }\n\n async runResumeSync(runId: RunId, awaitResume: AwaitResume): Promise<Run> {\n const data = await this.#fetcher(\n `/runs/${runId}`,\n jsonPost<RunResumeRequest>({\n await_resume: awaitResume,\n mode: \"sync\",\n })\n );\n return RunResumeResponse.parse(data);\n }\n\n async runResumeAsync(runId: RunId, awaitResume: AwaitResume): Promise<Run> {\n const data = await this.#fetcher(\n `/runs/${runId}`,\n jsonPost<RunResumeRequest>({\n await_resume: awaitResume,\n mode: \"async\",\n })\n );\n return RunResumeResponse.parse(data);\n }\n\n async *runResumeStream(\n runId: RunId,\n awaitResume: AwaitResume,\n signal?: AbortSignal\n ): AsyncGenerator<Event, void, unknown> {\n const eventSource = await this.#fetchEventSource(\n `/runs/${runId}`,\n jsonPost<RunResumeRequest>(\n {\n await_resume: awaitResume,\n mode: \"stream\",\n },\n { signal }\n )\n );\n for await (const event of this.#processEventSource(eventSource)) {\n yield event;\n }\n }\n}\n\nconst normalizeBaseUrl = (url: string) => {\n if (url.endsWith(\"/\")) {\n return url.slice(0, -1);\n }\n return url;\n};\n\nconst jsonPost = <T>(\n json: T,\n init?: Omit<RequestInit, \"method\" | \"headers\" | \"body\">\n): RequestInit => {\n return {\n ...init,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(json),\n };\n};\n"]}