@agents24/client 0.2.0 → 0.2.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/bff.js CHANGED
@@ -1,5 +1,5 @@
1
- import { resolveFetch, resolveDecoderFactory, resolveEncoder, defaultIds, encodePath, createByteMultipartEncoder, appendQuery, consumeThreadSummaryStream, Agents24ClientError, responseError, responseJson, consumeRuntimeStream } from './chunk-SCZMUBXD.js';
2
- import './chunk-NGZUJ3YT.js';
1
+ import { resolveFetch, resolveDecoderFactory, resolveEncoder, defaultIds, encodePath, createByteMultipartEncoder, appendQuery, consumeThreadSummaryStream, Agents24ClientError, responseError, responseJson, consumeRuntimeStream } from './chunk-LG3ZMQ2W.js';
2
+ import './chunk-FLTCOJZR.js';
3
3
 
4
4
  // src/bff.ts
5
5
  function normalizeBasePath(value) {
@@ -101,6 +101,11 @@ function createBffAgentClient(options = {}) {
101
101
  async bootstrap(input) {
102
102
  return json("GET", "/bootstrap", input?.signal ? { signal: input.signal } : {});
103
103
  },
104
+ resourcePolicies: {
105
+ getEffective(input) {
106
+ return json("GET", "/resource-policy", input?.signal ? { signal: input.signal } : {});
107
+ }
108
+ },
104
109
  chat: {
105
110
  async stream(input, onEvent) {
106
111
  const initial = async () => consumeRuntimeStream({
@@ -113,7 +118,7 @@ function createBffAgentClient(options = {}) {
113
118
  ...input.requestedModelId ? { requestedModelId: input.requestedModelId } : {},
114
119
  toolInputs: input.toolInputs ?? {},
115
120
  metadata: input.metadata ?? {},
116
- client: input.client ?? { sdk_name: "@agents24/client/bff", sdk_version: "0.2.0" }
121
+ client: input.client ?? { sdk_name: "@agents24/client/bff", sdk_version: "0.2.2" }
117
122
  }),
118
123
  contentType: "application/json",
119
124
  idempotencyKey: input.idempotencyKey,
@@ -140,6 +145,20 @@ function createBffAgentClient(options = {}) {
140
145
  idempotencyKey: input.idempotencyKey,
141
146
  ...input.signal ? { signal: input.signal } : {}
142
147
  });
148
+ },
149
+ setFeedback(input) {
150
+ return json(
151
+ "PUT",
152
+ `/runs/${encodePath(input.runId)}/feedback`,
153
+ {
154
+ body: {
155
+ rating: input.rating,
156
+ ...input.reason ? { reason: input.reason } : {},
157
+ ...input.comment ? { comment: input.comment } : {}
158
+ },
159
+ ...input.signal ? { signal: input.signal } : {}
160
+ }
161
+ );
143
162
  }
144
163
  },
145
164
  threads: {
@@ -152,8 +171,7 @@ function createBffAgentClient(options = {}) {
152
171
  get(input) {
153
172
  return json("GET", appendQuery(`/threads/${encodePath(input.threadId)}`, {
154
173
  limit: input.limit,
155
- before_turn_index: input.beforeTurnIndex,
156
- include_run_events: input.includeRunEvents
174
+ before_turn_index: input.beforeTurnIndex
157
175
  }), input.signal ? { signal: input.signal } : {});
158
176
  },
159
177
  async events(input, onEvent) {
@@ -187,11 +205,11 @@ function createBffAgentClient(options = {}) {
187
205
  }
188
206
  },
189
207
  attachments: {
190
- async upload(input) {
208
+ async uploadBatch(input) {
191
209
  const multipart = options.multipart ?? createByteMultipartEncoder(encoder);
192
210
  const encoded = await multipart.encode([
193
211
  ...input.threadId ? [{ field: "thread_id", value: input.threadId }] : [],
194
- { field: "files", value: input.upload }
212
+ ...input.uploads.map((upload) => ({ field: "files", value: upload }))
195
213
  ]);
196
214
  const body = await json("POST", "/attachments/upload", {
197
215
  body: encoded.body,
@@ -199,8 +217,18 @@ function createBffAgentClient(options = {}) {
199
217
  idempotencyKey: input.idempotencyKey,
200
218
  ...input.signal ? { signal: input.signal } : {}
201
219
  });
202
- const item = Array.isArray(body.items) ? body.items[0] : body;
203
- return objectResult(item, "Attachment upload");
220
+ if (!Array.isArray(body.items)) throw new Error("Attachment upload returned an invalid batch");
221
+ return body.items.map((item) => objectResult(item, "Attachment upload"));
222
+ },
223
+ createContentAccess(input) {
224
+ return json(
225
+ "POST",
226
+ `/attachments/${encodePath(input.attachmentId)}/content-access`,
227
+ {
228
+ body: { disposition: input.disposition },
229
+ ...input.signal ? { signal: input.signal } : {}
230
+ }
231
+ );
204
232
  }
205
233
  },
206
234
  hitl: {
@@ -209,7 +237,8 @@ function createBffAgentClient(options = {}) {
209
237
  body: {
210
238
  interruptId: input.interruptId,
211
239
  action: input.action,
212
- ...input.comment ? { comment: input.comment } : {}
240
+ ...input.comment ? { comment: input.comment } : {},
241
+ ...input.answers ? { answers: input.answers } : {}
213
242
  },
214
243
  idempotencyKey: input.idempotencyKey,
215
244
  ...input.signal ? { signal: input.signal } : {}
package/dist/bff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bff.ts"],"names":[],"mappings":"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","file":"bff.js","sourcesContent":["import { defaultIds, resolveDecoderFactory, resolveEncoder, resolveFetch } from \"./capabilities.js\";\nimport { Agents24ClientError } from \"./errors.js\";\nimport { responseError, responseJson } from \"./http.js\";\nimport { createByteMultipartEncoder } from \"./multipart.js\";\nimport { consumeRuntimeStream, consumeThreadSummaryStream, type RuntimeStreamState } from \"./stream.js\";\nimport { appendQuery, encodePath } from \"./url.js\";\nimport type {\n AgentClient,\n AbortSignalLike,\n AttachmentResult,\n FetchLike,\n MultipartEncoder,\n RuntimeEventHandler,\n StreamResult,\n TextDecoderLike,\n TextEncoderLike,\n ThreadDetail,\n ThreadListResult,\n ThreadSummaryEventHandler,\n} from \"./types.js\";\n\nexport interface Agents24BffClientOptions {\n basePath?: string;\n fetch?: FetchLike;\n decoder?: () => TextDecoderLike;\n encoder?: TextEncoderLike;\n multipart?: MultipartEncoder;\n maxReconnectAttempts?: number;\n}\n\nfunction normalizeBasePath(value: string | undefined): string {\n const path = String(value || \"/api/agents24\").trim();\n if (!path.startsWith(\"/\") || /[\\r\\n\\0?#]/.test(path)) {\n throw new Agents24ClientError(\"basePath must be a same-origin absolute path.\", {\n kind: \"configuration\",\n code: \"INVALID_BFF_BASE_PATH\",\n });\n }\n return path.replace(/\\/+$/, \"\");\n}\n\nfunction objectResult<T extends object>(value: unknown, operation: string): T {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Agents24ClientError(`${operation} returned an invalid response.`, {\n kind: \"protocol\",\n code: \"INVALID_JSON_RESPONSE\",\n });\n }\n return value as T;\n}\n\nfunction shouldReconnect(error: unknown): boolean {\n return error instanceof Agents24ClientError && error.kind === \"network\" && error.retryable;\n}\n\nexport function createBffAgentClient(options: Agents24BffClientOptions = {}): AgentClient {\n const basePath = normalizeBasePath(options.basePath);\n const fetch = resolveFetch(options.fetch);\n const decoder = resolveDecoderFactory(options.decoder);\n const encoder = resolveEncoder(options.encoder);\n const ids = defaultIds();\n const maxReconnectAttempts = Math.max(0, Math.min(options.maxReconnectAttempts ?? 3, 10));\n\n const request = async (method: string, path: string, init: {\n accept?: string;\n body?: unknown;\n contentType?: string;\n idempotencyKey?: string;\n signal?: AbortSignalLike;\n } = {}) => {\n let response;\n try {\n response = await fetch(`${basePath}${path}`, {\n method,\n headers: {\n Accept: init.accept || \"application/json\",\n ...(init.contentType ? { \"Content-Type\": init.contentType } : {}),\n ...(init.idempotencyKey ? { \"Idempotency-Key\": init.idempotencyKey } : {}),\n },\n ...(init.body === undefined ? {} : { body: init.body }),\n ...(init.signal ? { signal: init.signal } : {}),\n credentials: \"same-origin\",\n redirect: \"error\",\n cache: \"no-store\",\n });\n } catch (cause) {\n throw new Agents24ClientError(\"The Agents24 BFF could not be reached.\", {\n kind: init.signal?.aborted ? \"aborted\" : \"network\",\n code: init.signal?.aborted ? \"ABORTED\" : \"NETWORK_ERROR\",\n retryable: !init.signal?.aborted,\n cause,\n });\n }\n if (!response.ok) throw await responseError(response);\n return response;\n };\n\n const json = async <T extends object>(method: string, path: string, init: Parameters<typeof request>[2] = {}): Promise<T> => {\n const body = init.body === undefined || init.contentType\n ? init.body\n : JSON.stringify(init.body);\n const response = await request(method, path, {\n ...init,\n ...(body === undefined ? {} : { body }),\n ...(init.body === undefined || init.contentType ? {} : { contentType: \"application/json\" }),\n });\n return objectResult<T>(await responseJson(response), path);\n };\n\n const attachOnce = async (\n runId: string,\n cursor: number | undefined,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n ): Promise<RuntimeStreamState> => {\n const response = await request(\"POST\", `/runs/${encodePath(runId)}/attach`, {\n accept: \"text/event-stream\",\n body: JSON.stringify(cursor === undefined ? {} : { cursor }),\n contentType: \"application/json\",\n ...(signal ? { signal } : {}),\n });\n return consumeRuntimeStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(signal ? { signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n });\n };\n\n const withReconnect = async (\n initial: () => Promise<RuntimeStreamState>,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n ): Promise<StreamResult> => {\n let state: RuntimeStreamState | undefined;\n let attempts = 0;\n while (true) {\n try {\n state = state?.runId\n ? await attachOnce(state.runId, state.cursor ?? undefined, signal, onEvent)\n : await initial();\n } catch (error) {\n if (signal?.aborted || !shouldReconnect(error) || attempts >= maxReconnectAttempts) throw error;\n attempts += 1;\n continue;\n }\n if (!state.detached || signal?.aborted || attempts >= maxReconnectAttempts) return state;\n attempts += 1;\n }\n };\n\n return {\n async bootstrap(input) {\n return json(\"GET\", \"/bootstrap\", input?.signal ? { signal: input.signal } : {});\n },\n chat: {\n async stream(input, onEvent) {\n const initial = async () => consumeRuntimeStream({\n response: await request(\"POST\", \"/chat/stream\", {\n accept: \"text/event-stream\",\n body: JSON.stringify({\n input: input.input,\n attachmentIds: [...(input.attachmentIds ?? [])],\n ...(input.threadId ? { threadId: input.threadId } : {}),\n ...(input.requestedModelId ? { requestedModelId: input.requestedModelId } : {}),\n toolInputs: input.toolInputs ?? {},\n metadata: input.metadata ?? {},\n client: input.client ?? { sdk_name: \"@agents24/client/bff\", sdk_version: \"0.2.0\" },\n }),\n contentType: \"application/json\",\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n }),\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n return withReconnect(initial, input.signal, onEvent);\n },\n },\n runs: {\n attach(input, onEvent) {\n return withReconnect(\n () => attachOnce(input.runId, input.cursor, input.signal, onEvent),\n input.signal,\n onEvent,\n );\n },\n cancel(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/cancel`, {\n body: {},\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n threads: {\n list(input) {\n return json<ThreadListResult>(\"GET\", appendQuery(\"/threads\", {\n skip: input?.skip,\n limit: input?.limit,\n }), input?.signal ? { signal: input.signal } : {});\n },\n get(input) {\n return json<ThreadDetail>(\"GET\", appendQuery(`/threads/${encodePath(input.threadId)}`, {\n limit: input.limit,\n before_turn_index: input.beforeTurnIndex,\n include_run_events: input.includeRunEvents,\n }), input.signal ? { signal: input.signal } : {});\n },\n async events(input, onEvent: ThreadSummaryEventHandler) {\n let cursor = input.cursor;\n let attempts = 0;\n while (!input.signal?.aborted) {\n try {\n const response = await request(\"GET\", appendQuery(\"/threads/events\", { cursor }), {\n accept: \"text/event-stream\",\n ...(input.signal ? { signal: input.signal } : {}),\n });\n cursor = (await consumeThreadSummaryStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n })) ?? undefined;\n return;\n } catch (error) {\n if (input.signal?.aborted || !shouldReconnect(error) || attempts >= maxReconnectAttempts) throw error;\n attempts += 1;\n }\n }\n },\n delete(input) {\n return json(\"DELETE\", `/threads/${encodePath(input.threadId)}`, {\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n attachments: {\n async upload(input) {\n const multipart = options.multipart ?? createByteMultipartEncoder(encoder);\n const encoded = await multipart.encode([\n ...(input.threadId ? [{ field: \"thread_id\", value: input.threadId }] : []),\n { field: \"files\", value: input.upload },\n ]);\n const body = await json<Record<string, unknown>>(\"POST\", \"/attachments/upload\", {\n body: encoded.body,\n contentType: encoded.contentType,\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const item = Array.isArray(body.items) ? body.items[0] : body;\n return objectResult<AttachmentResult>(item, \"Attachment upload\");\n },\n },\n hitl: {\n resume(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/hitl/${encodePath(input.interruptId)}/resume`, {\n body: {\n interruptId: input.interruptId,\n action: input.action,\n ...(input.comment ? { comment: input.comment } : {}),\n },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n mcp: {\n startAuthorization(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/mcp/servers/${encodePath(input.serverId)}/auth/start`, {\n body: {\n interruptId: input.interruptId,\n redirectUri: input.redirectUri,\n popupNonce: input.popupNonce,\n codeChallenge: input.codeChallenge,\n },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n redeemCallback(input) {\n return json(\"POST\", \"/mcp/callback/redeem\", {\n body: { code: input.code, codeVerifier: input.codeVerifier },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n sessions: {\n async revoke(input) {\n await request(\"POST\", \"/session/revoke\", {\n idempotencyKey: input?.idempotencyKey ?? ids.createId(),\n ...(input?.signal ? { signal: input.signal } : {}),\n });\n },\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/bff.ts"],"names":[],"mappings":"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","file":"bff.js","sourcesContent":["import { defaultIds, resolveDecoderFactory, resolveEncoder, resolveFetch } from \"./capabilities.js\";\nimport { Agents24ClientError } from \"./errors.js\";\nimport { responseError, responseJson } from \"./http.js\";\nimport { createByteMultipartEncoder } from \"./multipart.js\";\nimport { consumeRuntimeStream, consumeThreadSummaryStream, type RuntimeStreamState } from \"./stream.js\";\nimport { appendQuery, encodePath } from \"./url.js\";\nimport type {\n AgentClient,\n AbortSignalLike,\n AttachmentResult,\n EffectiveResourcePolicy,\n FetchLike,\n MultipartEncoder,\n RuntimeEventHandler,\n ResponseFeedbackResult,\n StreamResult,\n TextDecoderLike,\n TextEncoderLike,\n ThreadDetail,\n ThreadListResult,\n ThreadSummaryEventHandler,\n} from \"./types.js\";\nimport type { AttachmentContentAccess } from \"./runtime-types.js\";\n\nexport interface Agents24BffClientOptions {\n basePath?: string;\n fetch?: FetchLike;\n decoder?: () => TextDecoderLike;\n encoder?: TextEncoderLike;\n multipart?: MultipartEncoder;\n maxReconnectAttempts?: number;\n}\n\nfunction normalizeBasePath(value: string | undefined): string {\n const path = String(value || \"/api/agents24\").trim();\n if (!path.startsWith(\"/\") || /[\\r\\n\\0?#]/.test(path)) {\n throw new Agents24ClientError(\"basePath must be a same-origin absolute path.\", {\n kind: \"configuration\",\n code: \"INVALID_BFF_BASE_PATH\",\n });\n }\n return path.replace(/\\/+$/, \"\");\n}\n\nfunction objectResult<T extends object>(value: unknown, operation: string): T {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Agents24ClientError(`${operation} returned an invalid response.`, {\n kind: \"protocol\",\n code: \"INVALID_JSON_RESPONSE\",\n });\n }\n return value as T;\n}\n\nfunction shouldReconnect(error: unknown): boolean {\n return error instanceof Agents24ClientError && error.kind === \"network\" && error.retryable;\n}\n\nexport function createBffAgentClient(options: Agents24BffClientOptions = {}): AgentClient {\n const basePath = normalizeBasePath(options.basePath);\n const fetch = resolveFetch(options.fetch);\n const decoder = resolveDecoderFactory(options.decoder);\n const encoder = resolveEncoder(options.encoder);\n const ids = defaultIds();\n const maxReconnectAttempts = Math.max(0, Math.min(options.maxReconnectAttempts ?? 3, 10));\n\n const request = async (method: string, path: string, init: {\n accept?: string;\n body?: unknown;\n contentType?: string;\n idempotencyKey?: string;\n signal?: AbortSignalLike;\n } = {}) => {\n let response;\n try {\n response = await fetch(`${basePath}${path}`, {\n method,\n headers: {\n Accept: init.accept || \"application/json\",\n ...(init.contentType ? { \"Content-Type\": init.contentType } : {}),\n ...(init.idempotencyKey ? { \"Idempotency-Key\": init.idempotencyKey } : {}),\n },\n ...(init.body === undefined ? {} : { body: init.body }),\n ...(init.signal ? { signal: init.signal } : {}),\n credentials: \"same-origin\",\n redirect: \"error\",\n cache: \"no-store\",\n });\n } catch (cause) {\n throw new Agents24ClientError(\"The Agents24 BFF could not be reached.\", {\n kind: init.signal?.aborted ? \"aborted\" : \"network\",\n code: init.signal?.aborted ? \"ABORTED\" : \"NETWORK_ERROR\",\n retryable: !init.signal?.aborted,\n cause,\n });\n }\n if (!response.ok) throw await responseError(response);\n return response;\n };\n\n const json = async <T extends object>(method: string, path: string, init: Parameters<typeof request>[2] = {}): Promise<T> => {\n const body = init.body === undefined || init.contentType\n ? init.body\n : JSON.stringify(init.body);\n const response = await request(method, path, {\n ...init,\n ...(body === undefined ? {} : { body }),\n ...(init.body === undefined || init.contentType ? {} : { contentType: \"application/json\" }),\n });\n return objectResult<T>(await responseJson(response), path);\n };\n\n const attachOnce = async (\n runId: string,\n cursor: number | undefined,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n ): Promise<RuntimeStreamState> => {\n const response = await request(\"POST\", `/runs/${encodePath(runId)}/attach`, {\n accept: \"text/event-stream\",\n body: JSON.stringify(cursor === undefined ? {} : { cursor }),\n contentType: \"application/json\",\n ...(signal ? { signal } : {}),\n });\n return consumeRuntimeStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(signal ? { signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n });\n };\n\n const withReconnect = async (\n initial: () => Promise<RuntimeStreamState>,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n ): Promise<StreamResult> => {\n let state: RuntimeStreamState | undefined;\n let attempts = 0;\n while (true) {\n try {\n state = state?.runId\n ? await attachOnce(state.runId, state.cursor ?? undefined, signal, onEvent)\n : await initial();\n } catch (error) {\n if (signal?.aborted || !shouldReconnect(error) || attempts >= maxReconnectAttempts) throw error;\n attempts += 1;\n continue;\n }\n if (!state.detached || signal?.aborted || attempts >= maxReconnectAttempts) return state;\n attempts += 1;\n }\n };\n\n return {\n async bootstrap(input) {\n return json(\"GET\", \"/bootstrap\", input?.signal ? { signal: input.signal } : {});\n },\n resourcePolicies: {\n getEffective(input) {\n return json<EffectiveResourcePolicy>(\"GET\", \"/resource-policy\", input?.signal ? { signal: input.signal } : {});\n },\n },\n chat: {\n async stream(input, onEvent) {\n const initial = async () => consumeRuntimeStream({\n response: await request(\"POST\", \"/chat/stream\", {\n accept: \"text/event-stream\",\n body: JSON.stringify({\n input: input.input,\n attachmentIds: [...(input.attachmentIds ?? [])],\n ...(input.threadId ? { threadId: input.threadId } : {}),\n ...(input.requestedModelId ? { requestedModelId: input.requestedModelId } : {}),\n toolInputs: input.toolInputs ?? {},\n metadata: input.metadata ?? {},\n client: input.client ?? { sdk_name: \"@agents24/client/bff\", sdk_version: \"0.2.2\" },\n }),\n contentType: \"application/json\",\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n }),\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n return withReconnect(initial, input.signal, onEvent);\n },\n },\n runs: {\n attach(input, onEvent) {\n return withReconnect(\n () => attachOnce(input.runId, input.cursor, input.signal, onEvent),\n input.signal,\n onEvent,\n );\n },\n cancel(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/cancel`, {\n body: {},\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n setFeedback(input) {\n return json<ResponseFeedbackResult>(\n \"PUT\",\n `/runs/${encodePath(input.runId)}/feedback`,\n {\n body: {\n rating: input.rating,\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.comment ? { comment: input.comment } : {}),\n },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n },\n },\n threads: {\n list(input) {\n return json<ThreadListResult>(\"GET\", appendQuery(\"/threads\", {\n skip: input?.skip,\n limit: input?.limit,\n }), input?.signal ? { signal: input.signal } : {});\n },\n get(input) {\n return json<ThreadDetail>(\"GET\", appendQuery(`/threads/${encodePath(input.threadId)}`, {\n limit: input.limit,\n before_turn_index: input.beforeTurnIndex,\n }), input.signal ? { signal: input.signal } : {});\n },\n async events(input, onEvent: ThreadSummaryEventHandler) {\n let cursor = input.cursor;\n let attempts = 0;\n while (!input.signal?.aborted) {\n try {\n const response = await request(\"GET\", appendQuery(\"/threads/events\", { cursor }), {\n accept: \"text/event-stream\",\n ...(input.signal ? { signal: input.signal } : {}),\n });\n cursor = (await consumeThreadSummaryStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n })) ?? undefined;\n return;\n } catch (error) {\n if (input.signal?.aborted || !shouldReconnect(error) || attempts >= maxReconnectAttempts) throw error;\n attempts += 1;\n }\n }\n },\n delete(input) {\n return json(\"DELETE\", `/threads/${encodePath(input.threadId)}`, {\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n attachments: {\n async uploadBatch(input) {\n const multipart = options.multipart ?? createByteMultipartEncoder(encoder);\n const encoded = await multipart.encode([\n ...(input.threadId ? [{ field: \"thread_id\", value: input.threadId }] : []),\n ...input.uploads.map((upload) => ({ field: \"files\", value: upload })),\n ]);\n const body = await json<Record<string, unknown>>(\"POST\", \"/attachments/upload\", {\n body: encoded.body,\n contentType: encoded.contentType,\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n if (!Array.isArray(body.items)) throw new Error(\"Attachment upload returned an invalid batch\");\n return body.items.map((item) => objectResult<AttachmentResult>(item, \"Attachment upload\"));\n },\n createContentAccess(input) {\n return json<AttachmentContentAccess>(\n \"POST\",\n `/attachments/${encodePath(input.attachmentId)}/content-access`,\n {\n body: { disposition: input.disposition },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n },\n },\n hitl: {\n resume(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/hitl/${encodePath(input.interruptId)}/resume`, {\n body: {\n interruptId: input.interruptId,\n action: input.action,\n ...(input.comment ? { comment: input.comment } : {}),\n ...(input.answers ? { answers: input.answers } : {}),\n },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n mcp: {\n startAuthorization(input) {\n return json(\"POST\", `/runs/${encodePath(input.runId)}/mcp/servers/${encodePath(input.serverId)}/auth/start`, {\n body: {\n interruptId: input.interruptId,\n redirectUri: input.redirectUri,\n popupNonce: input.popupNonce,\n codeChallenge: input.codeChallenge,\n },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n redeemCallback(input) {\n return json(\"POST\", \"/mcp/callback/redeem\", {\n body: { code: input.code, codeVerifier: input.codeVerifier },\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n },\n },\n sessions: {\n async revoke(input) {\n await request(\"POST\", \"/session/revoke\", {\n idempotencyKey: input?.idempotencyKey ?? ids.createId(),\n ...(input?.signal ? { signal: input.signal } : {}),\n });\n },\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Agents24ClientError, normalizeBaseUrl, resolveFetch, resolveDecoderFactory, defaultClock, defaultIds, AuthenticatedHttp, encodePath, createByteMultipartEncoder, resolveEncoder, appendQuery, consumeThreadSummaryStream, responseError, responseJson, consumeRuntimeStream } from './chunk-SCZMUBXD.js';
1
+ import { Agents24ClientError, normalizeBaseUrl, resolveFetch, resolveDecoderFactory, defaultClock, defaultIds, AuthenticatedHttp, encodePath, createByteMultipartEncoder, resolveEncoder, appendQuery, consumeThreadSummaryStream, responseJson, responseError, consumeRuntimeStream } from './chunk-LG3ZMQ2W.js';
2
2
 
3
3
  // src/client.ts
4
4
  function objectResult(value, operation) {
@@ -160,6 +160,16 @@ function createAgents24Client(options) {
160
160
  if (!response.ok) throw await responseError(response);
161
161
  return objectResult(await responseJson(response), "Bootstrap");
162
162
  },
163
+ resourcePolicies: {
164
+ async getEffective(input) {
165
+ const response = await http.request(
166
+ "GET",
167
+ deploymentPath(options.deploymentId, "/resource-policy"),
168
+ { operation: "resourcePolicies.getEffective", ...input?.signal ? { signal: input.signal } : {} }
169
+ );
170
+ return objectResult(await responseJson(response), "Effective Resource Policy");
171
+ }
172
+ },
163
173
  chat: {
164
174
  async stream(input, onEvent) {
165
175
  const initial = async (onProgress) => {
@@ -178,7 +188,7 @@ function createAgents24Client(options) {
178
188
  ...input.requestedModelId ? { requested_model_id: input.requestedModelId } : {},
179
189
  tool_inputs: input.toolInputs ?? {},
180
190
  metadata: input.metadata ?? {},
181
- client: input.client ?? { sdk_name: "@agents24/client", sdk_version: "0.2.0" }
191
+ client: input.client ?? { sdk_name: "@agents24/client", sdk_version: "0.2.2" }
182
192
  },
183
193
  ...input.signal ? { signal: input.signal } : {}
184
194
  }
@@ -211,6 +221,25 @@ function createAgents24Client(options) {
211
221
  }
212
222
  );
213
223
  return objectResult(result, "Run cancellation");
224
+ },
225
+ async setFeedback(input) {
226
+ const result = await http.json(
227
+ "PUT",
228
+ deploymentPath(
229
+ options.deploymentId,
230
+ `/runs/${encodePath(input.runId)}/feedback`
231
+ ),
232
+ {
233
+ operation: "runs.setFeedback",
234
+ body: {
235
+ rating: input.rating,
236
+ ...input.reason ? { reason: input.reason } : {},
237
+ ...input.comment ? { comment: input.comment } : {}
238
+ },
239
+ ...input.signal ? { signal: input.signal } : {}
240
+ }
241
+ );
242
+ return objectResult(result, "Response feedback");
214
243
  }
215
244
  },
216
245
  threads: {
@@ -230,8 +259,7 @@ function createAgents24Client(options) {
230
259
  deploymentPath(options.deploymentId, `/threads/${encodePath(input.threadId)}`),
231
260
  {
232
261
  limit: input.limit,
233
- before_turn_index: input.beforeTurnIndex,
234
- include_run_events: input.includeRunEvents
262
+ before_turn_index: input.beforeTurnIndex
235
263
  }
236
264
  );
237
265
  const result = await http.json("GET", path, {
@@ -282,11 +310,11 @@ function createAgents24Client(options) {
282
310
  }
283
311
  },
284
312
  attachments: {
285
- async upload(input) {
313
+ async uploadBatch(input) {
286
314
  const multipart = options.multipart ?? createByteMultipartEncoder(resolveEncoder(options.encoder));
287
315
  const encoded = await multipart.encode([
288
316
  ...input.threadId ? [{ field: "thread_id", value: input.threadId }] : [],
289
- { field: "files", value: input.upload }
317
+ ...input.uploads.map((upload) => ({ field: "files", value: upload }))
290
318
  ]);
291
319
  const result = await http.json(
292
320
  "POST",
@@ -300,8 +328,23 @@ function createAgents24Client(options) {
300
328
  }
301
329
  );
302
330
  const body = objectResult(result, "Attachment upload");
303
- const item = Array.isArray(body.items) ? body.items[0] : body;
304
- return objectResult(item, "Attachment upload");
331
+ if (!Array.isArray(body.items)) throw new Error("Attachment upload returned an invalid batch");
332
+ return body.items.map((item) => objectResult(item, "Attachment upload"));
333
+ },
334
+ async createContentAccess(input) {
335
+ const result = await http.json(
336
+ "POST",
337
+ deploymentPath(
338
+ options.deploymentId,
339
+ `/attachments/${encodePath(input.attachmentId)}/content-access`
340
+ ),
341
+ {
342
+ operation: "attachments.create_content_access",
343
+ body: { disposition: input.disposition },
344
+ ...input.signal ? { signal: input.signal } : {}
345
+ }
346
+ );
347
+ return objectResult(result, "Attachment content access");
305
348
  }
306
349
  },
307
350
  hitl: {
@@ -319,7 +362,8 @@ function createAgents24Client(options) {
319
362
  schema_version: "agents24.hitl.resume.v2",
320
363
  interrupt_id: input.interruptId,
321
364
  action: input.action,
322
- ...input.comment ? { comment: input.comment } : {}
365
+ ...input.comment ? { comment: input.comment } : {},
366
+ ...input.answers ? { answers: input.answers } : {}
323
367
  },
324
368
  ...input.signal ? { signal: input.signal } : {}
325
369
  }
@@ -382,5 +426,5 @@ function createAgents24Client(options) {
382
426
  }
383
427
 
384
428
  export { createAgents24Client };
385
- //# sourceMappingURL=chunk-QAIOKNUK.js.map
386
- //# sourceMappingURL=chunk-QAIOKNUK.js.map
429
+ //# sourceMappingURL=chunk-DEXGPNLL.js.map
430
+ //# sourceMappingURL=chunk-DEXGPNLL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"chunk-DEXGPNLL.js","sourcesContent":["import { defaultClock, defaultIds, resolveDecoderFactory, resolveEncoder, resolveFetch } from \"./capabilities.js\";\nimport { Agents24ClientError } from \"./errors.js\";\nimport { AuthenticatedHttp, responseError, responseJson } from \"./http.js\";\nimport { createByteMultipartEncoder } from \"./multipart.js\";\nimport { consumeRuntimeStream, consumeThreadSummaryStream, type RuntimeStreamState } from \"./stream.js\";\nimport { appendQuery, encodePath, normalizeBaseUrl } from \"./url.js\";\nimport type {\n AgentClient,\n Agents24ClientOptions,\n AttachmentResult,\n ClientBootstrap,\n EffectiveResourcePolicy,\n HitlResumeResult,\n McpAuthorizationResult,\n McpCallbackResult,\n ResponseFeedbackResult,\n RuntimeEventHandler,\n StreamResult,\n ThreadDetail,\n ThreadListResult,\n ThreadSummaryEventHandler,\n} from \"./types.js\";\nimport type { AttachmentContentAccess } from \"./runtime-types.js\";\n\nfunction objectResult<T extends object>(value: unknown, operation: string): T {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Agents24ClientError(`${operation} returned an invalid response.`, {\n kind: \"protocol\",\n code: \"INVALID_JSON_RESPONSE\",\n });\n }\n return value as T;\n}\n\nfunction deploymentPath(deploymentId: string, suffix: string): string {\n return `/public/client-runtime/deployments/${encodePath(deploymentId)}${suffix}`;\n}\n\nfunction shouldReconnect(error: unknown): boolean {\n return error instanceof Agents24ClientError && error.kind === \"network\" && error.retryable;\n}\n\nexport function createAgents24Client(options: Agents24ClientOptions): AgentClient {\n if (!options.deploymentId || /[\\r\\n\\0/]/.test(options.deploymentId)) {\n throw new Agents24ClientError(\"deploymentId is invalid.\", {\n kind: \"configuration\",\n code: \"INVALID_DEPLOYMENT_ID\",\n });\n }\n if (options.transport !== undefined && options.transport !== \"auto\" && options.transport !== \"fetch\") {\n throw new Agents24ClientError(\"The requested transport is unavailable.\", {\n kind: \"missing_capability\",\n code: \"MISSING_TRANSPORT\",\n });\n }\n const baseUrl = normalizeBaseUrl(options.baseUrl);\n const fetch = resolveFetch(options.fetch);\n const decoder = resolveDecoderFactory(options.decoder);\n const clock = options.clock ?? defaultClock();\n const ids = options.ids ?? defaultIds();\n const maxReconnectAttempts = Math.max(0, Math.min(options.maxReconnectAttempts ?? 3, 10));\n const http = new AuthenticatedHttp({\n baseUrl,\n sessionProvider: options.sessionProvider,\n fetch,\n clock,\n ...(options.telemetry ? { telemetry: options.telemetry } : {}),\n });\n const emit = async (event: Parameters<NonNullable<typeof options.telemetry>[\"emit\"]>[0]): Promise<void> => {\n try {\n await options.telemetry?.emit(event);\n } catch {\n // Telemetry is isolated from runtime behavior and credentials.\n }\n };\n\n const attach = async (\n runId: string,\n cursor: number | undefined,\n headers: Readonly<Record<string, string>> | undefined,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n onProgress?: (state: RuntimeStreamState) => void,\n ): Promise<RuntimeStreamState> => {\n const response = await http.request(\n \"POST\",\n deploymentPath(options.deploymentId, `/runs/${encodePath(runId)}/attach`),\n {\n operation: \"runs.attach\",\n accept: \"text/event-stream\",\n body: cursor === undefined ? {} : { cursor },\n ...(headers ? { headers } : {}),\n ...(signal ? { signal } : {}),\n },\n );\n return consumeRuntimeStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(signal ? { signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n ...(onProgress ? { onProgress } : {}),\n });\n };\n\n const reconnect = async (\n initial: (onProgress: (next: RuntimeStreamState) => void) => Promise<RuntimeStreamState>,\n signal: Parameters<AgentClient[\"runs\"][\"attach\"]>[0][\"signal\"],\n onEvent: RuntimeEventHandler,\n operation: \"chat.stream\" | \"runs.attach\",\n headers?: Readonly<Record<string, string>>,\n ): Promise<StreamResult> => {\n let state: RuntimeStreamState | undefined;\n let attempt = 0;\n const onProgress = (next: RuntimeStreamState) => {\n if (!state) {\n void emit({\n type: \"stream.connected\",\n operation,\n ...(next.runId ? { runId: next.runId } : {}),\n ...(next.cursor === null ? {} : { cursor: next.cursor }),\n attempt,\n });\n }\n state = next;\n };\n while (true) {\n try {\n state = state?.runId\n ? await attach(state.runId, state.cursor ?? undefined, headers, signal, onEvent, onProgress)\n : await initial(onProgress);\n } catch (error) {\n if (signal?.aborted || !shouldReconnect(error) || attempt >= maxReconnectAttempts) throw error;\n attempt += 1;\n await emit({\n type: \"stream.reconnecting\",\n operation,\n ...(state?.runId ? { runId: state.runId } : {}),\n ...(state?.cursor == null ? {} : { cursor: state.cursor }),\n attempt,\n reason: \"network\",\n });\n continue;\n }\n if (!state.detached || signal?.aborted) {\n await emit({\n type: \"stream.completed\",\n operation,\n ...(state.runId ? { runId: state.runId } : {}),\n ...(state.cursor === null ? {} : { cursor: state.cursor }),\n attempt,\n });\n return state;\n }\n await emit({\n type: \"stream.detached\",\n operation,\n ...(state.runId ? { runId: state.runId } : {}),\n ...(state.cursor === null ? {} : { cursor: state.cursor }),\n attempt,\n reason: state.detachReason ?? \"server_detach\",\n });\n if (attempt >= maxReconnectAttempts || state.detachReason === \"revoked\" || state.detachReason === \"policy_changed\") {\n return state;\n }\n if (state.detachReason === \"token_expired\" && options.sessionProvider.refresh) {\n await options.sessionProvider.refresh({ reason: \"stream_detached\", ...(signal ? { signal } : {}) });\n }\n attempt += 1;\n }\n };\n\n return {\n async bootstrap(input) {\n let response: Awaited<ReturnType<typeof fetch>>;\n try {\n response = await fetch(\n `${baseUrl}${deploymentPath(options.deploymentId, \"/bootstrap\")}`,\n {\n method: \"GET\",\n headers: { Accept: \"application/json\", \"Cache-Control\": \"no-store\", Pragma: \"no-cache\" },\n redirect: \"error\",\n cache: \"no-store\",\n credentials: \"omit\",\n ...(input?.signal ? { signal: input.signal } : {}),\n },\n );\n } catch (cause) {\n throw new Agents24ClientError(\"The Agents24 deployment bootstrap could not be reached.\", {\n kind: input?.signal?.aborted ? \"aborted\" : \"network\",\n code: input?.signal?.aborted ? \"ABORTED\" : \"NETWORK_ERROR\",\n retryable: !input?.signal?.aborted,\n cause,\n });\n }\n if (response.redirected || (response.status >= 300 && response.status < 400)) {\n throw new Agents24ClientError(\"Client-runtime redirects are not allowed.\", {\n kind: \"network\",\n code: \"REDIRECT_REJECTED\",\n status: response.status,\n });\n }\n if (!response.ok) throw await responseError(response);\n return objectResult<ClientBootstrap>(await responseJson(response), \"Bootstrap\");\n },\n resourcePolicies: {\n async getEffective(input) {\n const response = await http.request(\n \"GET\",\n deploymentPath(options.deploymentId, \"/resource-policy\"),\n { operation: \"resourcePolicies.getEffective\", ...(input?.signal ? { signal: input.signal } : {}) },\n );\n return objectResult<EffectiveResourcePolicy>(await responseJson(response), \"Effective Resource Policy\");\n },\n },\n chat: {\n async stream(input, onEvent) {\n const initial = async (onProgress: (state: RuntimeStreamState) => void) => {\n const response = await http.request(\n \"POST\",\n deploymentPath(options.deploymentId, \"/chat/stream\"),\n {\n operation: \"chat.stream\",\n accept: \"text/event-stream\",\n idempotencyKey: input.idempotencyKey,\n ...(input.headers ? { headers: input.headers } : {}),\n body: {\n input: input.input,\n attachment_ids: [...(input.attachmentIds ?? [])],\n ...(input.threadId ? { thread_id: input.threadId } : {}),\n ...(input.requestedModelId ? { requested_model_id: input.requestedModelId } : {}),\n tool_inputs: input.toolInputs ?? {},\n metadata: input.metadata ?? {},\n client: input.client ?? { sdk_name: \"@agents24/client\", sdk_version: \"0.2.2\" },\n },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return consumeRuntimeStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n onProgress,\n });\n };\n return reconnect(initial, input.signal, onEvent, \"chat.stream\", input.headers);\n },\n },\n runs: {\n async attach(input, onEvent) {\n const initial = (onProgress: (state: RuntimeStreamState) => void) =>\n attach(input.runId, input.cursor, input.headers, input.signal, onEvent, onProgress);\n return reconnect(initial, input.signal, onEvent, \"runs.attach\", input.headers);\n },\n async cancel(input) {\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(options.deploymentId, `/runs/${encodePath(input.runId)}/cancel`),\n {\n operation: \"runs.cancel\",\n body: {},\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<Record<string, unknown>>(result, \"Run cancellation\");\n },\n async setFeedback(input) {\n const result = await http.json<unknown>(\n \"PUT\",\n deploymentPath(\n options.deploymentId,\n `/runs/${encodePath(input.runId)}/feedback`,\n ),\n {\n operation: \"runs.setFeedback\",\n body: {\n rating: input.rating,\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.comment ? { comment: input.comment } : {}),\n },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<ResponseFeedbackResult>(result, \"Response feedback\");\n },\n },\n threads: {\n async list(input) {\n const path = appendQuery(deploymentPath(options.deploymentId, \"/threads\"), {\n skip: input?.skip,\n limit: input?.limit,\n });\n const result = await http.json<unknown>(\"GET\", path, {\n operation: \"threads.list\",\n ...(input?.signal ? { signal: input.signal } : {}),\n });\n return objectResult<ThreadListResult>(result, \"Thread listing\");\n },\n async get(input) {\n const path = appendQuery(\n deploymentPath(options.deploymentId, `/threads/${encodePath(input.threadId)}`),\n {\n limit: input.limit,\n before_turn_index: input.beforeTurnIndex,\n },\n );\n const result = await http.json<unknown>(\"GET\", path, {\n operation: \"threads.get\",\n ...(input.signal ? { signal: input.signal } : {}),\n });\n return objectResult<ThreadDetail>(result, \"Thread detail\");\n },\n async events(input, onEvent: ThreadSummaryEventHandler) {\n let cursor = input.cursor;\n let attempts = 0;\n while (!input.signal?.aborted) {\n try {\n const path = appendQuery(deploymentPath(options.deploymentId, \"/threads/events\"), { cursor });\n const response = await http.request(\"GET\", path, {\n operation: \"threads.events\",\n accept: \"text/event-stream\",\n ...(input.signal ? { signal: input.signal } : {}),\n });\n cursor = (await consumeThreadSummaryStream({\n response,\n decoder: decoder(),\n onEvent,\n ...(input.signal ? { signal: input.signal } : {}),\n ...(cursor === undefined ? {} : { afterCursor: cursor }),\n onCursor(next) {\n cursor = next;\n },\n })) ?? undefined;\n return;\n } catch (error) {\n if (input.signal?.aborted || !shouldReconnect(error) || attempts >= maxReconnectAttempts) throw error;\n attempts += 1;\n }\n }\n },\n async delete(input) {\n const result = await http.json<unknown>(\n \"DELETE\",\n deploymentPath(options.deploymentId, `/threads/${encodePath(input.threadId)}`),\n {\n operation: \"threads.delete\",\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<Record<string, unknown>>(result, \"Thread deletion\");\n },\n },\n attachments: {\n async uploadBatch(input) {\n const multipart = options.multipart ?? createByteMultipartEncoder(resolveEncoder(options.encoder));\n const encoded = await multipart.encode([\n ...(input.threadId ? [{ field: \"thread_id\", value: input.threadId }] : []),\n ...input.uploads.map((upload) => ({ field: \"files\", value: upload })),\n ]);\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(options.deploymentId, \"/attachments/upload\"),\n {\n operation: \"attachments.upload\",\n rawBody: encoded.body,\n contentType: encoded.contentType,\n idempotencyKey: input.idempotencyKey,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n const body = objectResult<Record<string, unknown>>(result, \"Attachment upload\");\n if (!Array.isArray(body.items)) throw new Error(\"Attachment upload returned an invalid batch\");\n return body.items.map((item) => objectResult<AttachmentResult>(item, \"Attachment upload\"));\n },\n async createContentAccess(input) {\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(\n options.deploymentId,\n `/attachments/${encodePath(input.attachmentId)}/content-access`,\n ),\n {\n operation: \"attachments.create_content_access\",\n body: { disposition: input.disposition },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<AttachmentContentAccess>(result, \"Attachment content access\");\n },\n },\n hitl: {\n async resume(input) {\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(\n options.deploymentId,\n `/runs/${encodePath(input.runId)}/hitl/${encodePath(input.interruptId)}/resume`,\n ),\n {\n operation: \"hitl.resume\",\n idempotencyKey: input.idempotencyKey,\n body: {\n schema_version: \"agents24.hitl.resume.v2\",\n interrupt_id: input.interruptId,\n action: input.action,\n ...(input.comment ? { comment: input.comment } : {}),\n ...(input.answers ? { answers: input.answers } : {}),\n },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<HitlResumeResult>(result, \"HITL resume\");\n },\n },\n mcp: {\n async startAuthorization(input) {\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(\n options.deploymentId,\n `/runs/${encodePath(input.runId)}/mcp/servers/${encodePath(input.serverId)}/auth/start`,\n ),\n {\n operation: \"mcp.startAuthorization\",\n idempotencyKey: input.idempotencyKey,\n body: {\n interrupt_id: input.interruptId,\n redirect_uri: input.redirectUri,\n popup_nonce: input.popupNonce,\n code_challenge: input.codeChallenge,\n code_challenge_method: \"S256\",\n },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<McpAuthorizationResult>(result, \"MCP authorization start\");\n },\n async redeemCallback(input) {\n const result = await http.json<unknown>(\n \"POST\",\n deploymentPath(options.deploymentId, \"/mcp/callback/redeem\"),\n {\n operation: \"mcp.redeemCallback\",\n idempotencyKey: input.idempotencyKey,\n body: { code: input.code, code_verifier: input.codeVerifier },\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n return objectResult<McpCallbackResult>(result, \"MCP callback redemption\");\n },\n },\n sessions: {\n async revoke(input) {\n if (!options.sessionProvider.revoke) {\n throw new Agents24ClientError(\"The configured session provider cannot revoke sessions.\", {\n kind: \"missing_capability\",\n code: \"SESSION_REVOKE_UNAVAILABLE\",\n });\n }\n await options.sessionProvider.revoke({\n idempotencyKey: input?.idempotencyKey ?? ids.createId(),\n ...(input?.signal ? { signal: input.signal } : {}),\n });\n },\n },\n };\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  // src/generated/protocol.js
2
- var RUNTIME_EVENTS = /* @__PURE__ */ new Set(["run.accepted", "run.snapshot", "run.completed", "run.cancelled", "run.paused", "run.failed", "run.detached", "assistant.delta", "reasoning.update", "tool.started", "tool.completed", "tool.failed", "tool.cancelled", "tool.child_run_started", "tool.child_run_finished", "tool.child_tool_started", "tool.child_tool_completed", "tool.child_tool_failed", "tool.child_tool_cancelled", "context_window.updated", "context.compression.updated", "run_usage.updated", "hitl.requested", "hitl.resolved", "mcp.authorization.required", "mcp.authorization.completed", "mcp.authorization.failed", "attachment.created", "attachment.updated", "attachment.ready", "attachment.failed", "source.added", "citation.added", "ui_blocks.updated", "runtime.error"]);
3
- var RUNTIME_STAGES = /* @__PURE__ */ new Set(["run", "assistant", "reasoning", "tool", "context", "usage", "attachment", "source", "system"]);
4
- var RESPONSE_BLOCK_KINDS = /* @__PURE__ */ new Set(["assistant_text", "reasoning_note", "tool_call", "ui_blocks", "hitl_request", "error", "source", "citation", "attachment", "mcp_authorization", "user_message"]);
2
+ var RUNTIME_EVENTS = /* @__PURE__ */ new Set(["run.accepted", "run.snapshot", "run.completed", "run.cancelled", "run.paused", "run.failed", "run.detached", "assistant.delta", "model.turn.started", "model.turn.completed", "model.turn.failed", "reasoning.update", "node.status.updated", "tool.started", "tool.completed", "tool.failed", "tool.cancelled", "tool.child_run_started", "tool.child_run_finished", "tool.child_tool_started", "tool.child_tool_completed", "tool.child_tool_failed", "tool.child_tool_cancelled", "context_window.updated", "context.compression.updated", "run_usage.updated", "hitl.requested", "hitl.resolved", "mcp.authorization.required", "mcp.authorization.completed", "mcp.authorization.failed", "attachment.created", "attachment.updated", "attachment.ready", "attachment.failed", "source.added", "citation.added", "ui_blocks.updated"]);
3
+ var RUNTIME_STAGES = /* @__PURE__ */ new Set(["run", "assistant", "model", "reasoning", "node", "tool", "context", "usage", "attachment", "source", "system"]);
4
+ var RESPONSE_BLOCK_KINDS = /* @__PURE__ */ new Set(["assistant_text", "reasoning_note", "context_compression", "node_activity", "tool_call", "ui_blocks", "hitl_request", "error", "source", "citation", "attachment", "mcp_authorization", "user_message"]);
5
5
  var THREAD_EVENTS = /* @__PURE__ */ new Set(["thread.summary.updated", "thread.deleted", "snapshot_required"]);
6
6
  var UTC_TIMESTAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/;
7
- var CONTRACT_HASH = "90a64d2df2facc3c4510edc7a0762cb86a336578667d3bc6cfeb7ae035133e00";
8
- var RUNTIME_PROTOCOL_VERSION = "run-stream.v2";
7
+ var CONTRACT_HASH = "a409af6996d10a8d94e0f6332c9a381c3535a9c8511314b6c42b237d7e057029";
8
+ var RUNTIME_PROTOCOL_VERSION = "run-stream.v3";
9
9
  var THREAD_SUMMARY_PROTOCOL_VERSION = "agents24.thread_summary_event.v1";
10
10
  var Agents24ProtocolError = class extends Error {
11
11
  constructor(category, message, details) {
@@ -45,6 +45,7 @@ function validateResponseBlock(value) {
45
45
  }
46
46
  function validateBlocks(value) {
47
47
  if (!record(value)) return;
48
+ if (value.response_block !== void 0) validateResponseBlock(value.response_block);
48
49
  const blocks = value.response_blocks;
49
50
  if (blocks === void 0) return;
50
51
  if (!Array.isArray(blocks)) {
@@ -52,6 +53,19 @@ function validateBlocks(value) {
52
53
  }
53
54
  for (const block of blocks) validateResponseBlock(block);
54
55
  }
56
+ function validateModelTurn(event, payload) {
57
+ if (!event.startsWith("model.turn.")) return;
58
+ const expectedStatus = event === "model.turn.started" ? "running" : event === "model.turn.completed" ? "completed" : "failed";
59
+ if (!nonEmptyString(payload.model_turn_id) || !["agent", "model"].includes(payload.kind) || payload.status !== expectedStatus) {
60
+ protocolError("invalid_event", "Model-turn lifecycle payload is invalid.", payload);
61
+ }
62
+ if (payload.iteration !== void 0 && (!Number.isInteger(payload.iteration) || payload.iteration < 0)) {
63
+ protocolError("invalid_event", "Model-turn iteration is invalid.", payload.iteration);
64
+ }
65
+ if (event === "model.turn.completed" && !["text", "tool_calls", "completed"].includes(payload.outcome)) {
66
+ protocolError("invalid_event", "Completed model turn requires a valid outcome.", payload.outcome);
67
+ }
68
+ }
55
69
  function validateRuntimeEvent(value, options = {}) {
56
70
  if (!record(value)) {
57
71
  return protocolError("invalid_envelope", "Runtime event must be an object.", value);
@@ -66,6 +80,7 @@ function validateRuntimeEvent(value, options = {}) {
66
80
  return protocolError("invalid_envelope", "Runtime event is missing a required public field.", value);
67
81
  }
68
82
  validateBlocks(value.payload);
83
+ validateModelTurn(value.event, value.payload);
69
84
  return value;
70
85
  }
71
86
  function parseRuntimeEvent(payload, options) {
@@ -162,5 +177,5 @@ function parseThreadSummarySsePayload(payload) {
162
177
  }
163
178
 
164
179
  export { Agents24ProtocolError, CONTRACT_HASH, RUNTIME_PROTOCOL_VERSION, THREAD_SUMMARY_PROTOCOL_VERSION, createSseParser, parseProtocolJson, parseRuntimeEvent, parseRuntimeSsePayload, parseSseBytes, parseThreadSummarySsePayload, validateResponseBlock, validateRuntimeEvent, validateThreadSummaryEvent };
165
- //# sourceMappingURL=chunk-NGZUJ3YT.js.map
166
- //# sourceMappingURL=chunk-NGZUJ3YT.js.map
180
+ //# sourceMappingURL=chunk-FLTCOJZR.js.map
181
+ //# sourceMappingURL=chunk-FLTCOJZR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generated/protocol.js"],"names":[],"mappings":"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","file":"chunk-FLTCOJZR.js","sourcesContent":["// @generated by @agents24/sdk-contract; DO NOT EDIT.\n// contract-sha256: a409af6996d10a8d94e0f6332c9a381c3535a9c8511314b6c42b237d7e057029\nconst RUNTIME_EVENTS = new Set([\"run.accepted\",\"run.snapshot\",\"run.completed\",\"run.cancelled\",\"run.paused\",\"run.failed\",\"run.detached\",\"assistant.delta\",\"model.turn.started\",\"model.turn.completed\",\"model.turn.failed\",\"reasoning.update\",\"node.status.updated\",\"tool.started\",\"tool.completed\",\"tool.failed\",\"tool.cancelled\",\"tool.child_run_started\",\"tool.child_run_finished\",\"tool.child_tool_started\",\"tool.child_tool_completed\",\"tool.child_tool_failed\",\"tool.child_tool_cancelled\",\"context_window.updated\",\"context.compression.updated\",\"run_usage.updated\",\"hitl.requested\",\"hitl.resolved\",\"mcp.authorization.required\",\"mcp.authorization.completed\",\"mcp.authorization.failed\",\"attachment.created\",\"attachment.updated\",\"attachment.ready\",\"attachment.failed\",\"source.added\",\"citation.added\",\"ui_blocks.updated\"]);\nconst RUNTIME_STAGES = new Set([\"run\",\"assistant\",\"model\",\"reasoning\",\"node\",\"tool\",\"context\",\"usage\",\"attachment\",\"source\",\"system\"]);\nconst RESPONSE_BLOCK_KINDS = new Set([\"assistant_text\",\"reasoning_note\",\"context_compression\",\"node_activity\",\"tool_call\",\"ui_blocks\",\"hitl_request\",\"error\",\"source\",\"citation\",\"attachment\",\"mcp_authorization\",\"user_message\"]);\nconst THREAD_EVENTS = new Set([\"thread.summary.updated\",\"thread.deleted\",\"snapshot_required\"]);\nconst UTC_TIMESTAMP = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$/;\n\nexport const CONTRACT_HASH = \"a409af6996d10a8d94e0f6332c9a381c3535a9c8511314b6c42b237d7e057029\";\nexport const RUNTIME_PROTOCOL_VERSION = \"run-stream.v3\";\nexport const THREAD_SUMMARY_PROTOCOL_VERSION = \"agents24.thread_summary_event.v1\";\n\nexport class Agents24ProtocolError extends Error {\n constructor(category, message, details) {\n super(message);\n this.name = \"Agents24ProtocolError\";\n this.category = category;\n this.details = details;\n }\n}\n\nfunction record(value) {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value) {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction protocolError(category, message, details) {\n throw new Agents24ProtocolError(category, message, details);\n}\n\nfunction includesProtocolName(values, value) {\n return Array.isArray(values) && values.includes(value);\n}\n\nexport function parseProtocolJson(payload) {\n try {\n return JSON.parse(payload);\n } catch (cause) {\n return protocolError(\"invalid_json\", \"Protocol payload is not valid JSON.\", cause);\n }\n}\n\nexport function validateResponseBlock(value) {\n if (!record(value) || !nonEmptyString(value.id) || !RESPONSE_BLOCK_KINDS.has(value.kind)) {\n return protocolError(\"invalid_response_block\", \"Response block identity or kind is invalid.\", value);\n }\n if (!Number.isInteger(value.seq) || value.seq < 0 || !nonEmptyString(value.status)) {\n return protocolError(\"invalid_response_block\", \"Response block sequence or status is invalid.\", value);\n }\n return value;\n}\n\nfunction validateBlocks(value) {\n if (!record(value)) return;\n if (value.response_block !== undefined) validateResponseBlock(value.response_block);\n const blocks = value.response_blocks;\n if (blocks === undefined) return;\n if (!Array.isArray(blocks)) {\n protocolError(\"invalid_response_block\", \"response_blocks must be an array.\", blocks);\n }\n for (const block of blocks) validateResponseBlock(block);\n}\n\nfunction validateModelTurn(event, payload) {\n if (!event.startsWith(\"model.turn.\")) return;\n const expectedStatus = event === \"model.turn.started\" ? \"running\" : event === \"model.turn.completed\" ? \"completed\" : \"failed\";\n if (!nonEmptyString(payload.model_turn_id) || ![\"agent\", \"model\"].includes(payload.kind) || payload.status !== expectedStatus) {\n protocolError(\"invalid_event\", \"Model-turn lifecycle payload is invalid.\", payload);\n }\n if (payload.iteration !== undefined && (!Number.isInteger(payload.iteration) || payload.iteration < 0)) {\n protocolError(\"invalid_event\", \"Model-turn iteration is invalid.\", payload.iteration);\n }\n if (event === \"model.turn.completed\" && ![\"text\", \"tool_calls\", \"completed\"].includes(payload.outcome)) {\n protocolError(\"invalid_event\", \"Completed model turn requires a valid outcome.\", payload.outcome);\n }\n}\n\nexport function validateRuntimeEvent(value, options = {}) {\n if (!record(value)) {\n return protocolError(\"invalid_envelope\", \"Runtime event must be an object.\", value);\n }\n if (value.version !== RUNTIME_PROTOCOL_VERSION) {\n return protocolError(\"unsupported_version\", \"Runtime event version is unsupported.\", value.version);\n }\n if (!RUNTIME_EVENTS.has(value.event) && !includesProtocolName(options.additionalEventNames, value.event)) {\n return protocolError(\"unknown_event\", \"Runtime event name is not in the public protocol.\", value.event);\n }\n if (!Number.isInteger(value.seq) || value.seq < 0 || !UTC_TIMESTAMP.test(value.ts || \"\") ||\n !nonEmptyString(value.run_id) ||\n (!RUNTIME_STAGES.has(value.stage) && !includesProtocolName(options.additionalStages, value.stage)) ||\n !record(value.payload)) {\n return protocolError(\"invalid_envelope\", \"Runtime event is missing a required public field.\", value);\n }\n validateBlocks(value.payload);\n validateModelTurn(value.event, value.payload);\n return value;\n}\n\nexport function parseRuntimeEvent(payload, options) {\n return validateRuntimeEvent(parseProtocolJson(payload), options);\n}\n\nexport function validateThreadSummaryEvent(value) {\n if (!record(value) || value.schema_version !== THREAD_SUMMARY_PROTOCOL_VERSION ||\n !THREAD_EVENTS.has(value.event) || !Number.isInteger(value.cursor) || value.cursor < 0) {\n return protocolError(\"invalid_thread_summary\", \"Thread-summary event envelope is invalid.\", value);\n }\n if (value.event === \"thread.summary.updated\" && !record(value.thread)) {\n return protocolError(\"invalid_thread_summary\", \"Updated thread-summary event requires thread.\", value);\n }\n if (value.event === \"thread.deleted\" && !nonEmptyString(value.thread_id)) {\n return protocolError(\"invalid_thread_summary\", \"Deleted thread-summary event requires thread_id.\", value);\n }\n return value;\n}\n\nfunction parseSseBlock(block) {\n const data = [];\n for (const line of block.split(/\\r\\n|\\r|\\n/)) {\n if (!line || line.startsWith(\":\")) continue;\n const separator = line.indexOf(\":\");\n const field = separator < 0 ? line : line.slice(0, separator);\n let value = separator < 0 ? \"\" : line.slice(separator + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n if (field === \"data\") data.push(value);\n }\n return data.length ? data.join(\"\\n\") : null;\n}\n\nfunction nextSseBoundary(buffer) {\n const match = /\\r\\n\\r\\n|\\n\\n|\\r\\r/.exec(buffer);\n return match ? { index: match.index, length: match[0].length } : null;\n}\n\nexport function createSseParser(options) {\n const { decoder, onPayload, signal } = options;\n if (!decoder || typeof decoder.decode !== \"function\" || typeof onPayload !== \"function\") {\n protocolError(\"invalid_envelope\", \"SSE parser requires decoder and onPayload capabilities.\");\n }\n let buffer = \"\";\n let finished = false;\n\n async function drain(allowTrailing) {\n let boundary = nextSseBoundary(buffer);\n while (boundary) {\n const block = buffer.slice(0, boundary.index);\n buffer = buffer.slice(boundary.index + boundary.length);\n const payload = parseSseBlock(block);\n if (payload !== null) await onPayload(payload);\n if (signal?.aborted) return;\n boundary = nextSseBoundary(buffer);\n }\n if (allowTrailing && buffer.trim()) {\n const payload = parseSseBlock(buffer);\n buffer = \"\";\n if (payload !== null) await onPayload(payload);\n }\n }\n\n return {\n async push(chunk) {\n if (finished) protocolError(\"invalid_envelope\", \"Cannot push after SSE parser finish.\");\n if (signal?.aborted) return;\n buffer += decoder.decode(chunk, { stream: true });\n await drain(false);\n },\n async finish() {\n if (finished) return;\n finished = true;\n if (signal?.aborted) return;\n buffer += decoder.decode();\n await drain(true);\n },\n };\n}\n\nexport async function parseSseBytes(chunks, options) {\n const payloads = [];\n const parser = createSseParser({\n ...options,\n onPayload: async (payload) => {\n payloads.push(payload);\n if (options.onPayload) await options.onPayload(payload);\n },\n });\n for await (const chunk of chunks) {\n if (options.signal?.aborted) break;\n await parser.push(chunk);\n }\n await parser.finish();\n return payloads;\n}\n\nexport function parseRuntimeSsePayload(payload, options) {\n return parseRuntimeEvent(payload, options);\n}\n\nexport function parseThreadSummarySsePayload(payload) {\n return validateThreadSummaryEvent(parseProtocolJson(payload));\n}\n"]}