@agents24/embed-sdk 1.0.0 → 1.0.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/README.md +80 -2
- package/dist/index.cjs +49 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -2
- package/dist/index.d.ts +52 -2
- package/dist/index.js +49 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `@agents24/embed-sdk`
|
|
2
2
|
|
|
3
|
-
Last Updated: 2026-03-
|
|
3
|
+
Last Updated: 2026-03-19
|
|
4
4
|
|
|
5
5
|
`@agents24/embed-sdk` is the canonical server-only TypeScript SDK for Talmudpedia embedded-agent runtime.
|
|
6
6
|
|
|
@@ -124,6 +124,13 @@ type StreamAgentResult = {
|
|
|
124
124
|
|
|
125
125
|
`onEvent` receives typed `run-stream.v2` envelopes.
|
|
126
126
|
|
|
127
|
+
Current behavior:
|
|
128
|
+
|
|
129
|
+
- callback-based streaming only
|
|
130
|
+
- resolves after the full SSE stream is consumed
|
|
131
|
+
- returns `threadId` from the `X-Thread-ID` response header
|
|
132
|
+
- does not currently expose abort, timeout, retry, or async-iterator helpers
|
|
133
|
+
|
|
127
134
|
### `listAgentThreads(agentId, options)`
|
|
128
135
|
|
|
129
136
|
Wraps:
|
|
@@ -148,6 +155,77 @@ Options:
|
|
|
148
155
|
- `externalUserId`
|
|
149
156
|
- `externalSessionId?`
|
|
150
157
|
|
|
158
|
+
Returned turn shape includes:
|
|
159
|
+
|
|
160
|
+
- `id`
|
|
161
|
+
- `run_id`
|
|
162
|
+
- `turn_index`
|
|
163
|
+
- `user_input_text`
|
|
164
|
+
- `assistant_output_text`
|
|
165
|
+
- `status`
|
|
166
|
+
- `usage_tokens`
|
|
167
|
+
- `metadata`
|
|
168
|
+
- `created_at`
|
|
169
|
+
- `completed_at`
|
|
170
|
+
- `run_events`
|
|
171
|
+
|
|
172
|
+
`run_events` contains ordered historical non-text `run-stream.v2` events for that turn, intended for replaying tool, reasoning, and OpenUI UI on old chats.
|
|
173
|
+
|
|
174
|
+
Current generative UI event:
|
|
175
|
+
|
|
176
|
+
- `assistant.ui`
|
|
177
|
+
- current platform generative UI mode is OpenUI
|
|
178
|
+
|
|
179
|
+
Current `assistant.ui` payload fields:
|
|
180
|
+
|
|
181
|
+
- `format`
|
|
182
|
+
- `version`
|
|
183
|
+
- `content`
|
|
184
|
+
- `content_delta`
|
|
185
|
+
- `ast`
|
|
186
|
+
- `component_library_id`
|
|
187
|
+
- `surface`
|
|
188
|
+
- `is_final`
|
|
189
|
+
|
|
190
|
+
### `deleteAgentThread(agentId, threadId, options)`
|
|
191
|
+
|
|
192
|
+
Wraps:
|
|
193
|
+
|
|
194
|
+
- `DELETE /public/embed/agents/{agent_id}/threads/{thread_id}`
|
|
195
|
+
|
|
196
|
+
Options:
|
|
197
|
+
|
|
198
|
+
- `externalUserId`
|
|
199
|
+
- `externalSessionId?`
|
|
200
|
+
|
|
201
|
+
## Exact Current Surface
|
|
202
|
+
|
|
203
|
+
This package currently exposes exactly 4 runtime methods:
|
|
204
|
+
|
|
205
|
+
- `streamAgent(...)`
|
|
206
|
+
- `listAgentThreads(...)`
|
|
207
|
+
- `getAgentThread(...)`
|
|
208
|
+
- `deleteAgentThread(...)`
|
|
209
|
+
|
|
210
|
+
It intentionally does not expose:
|
|
211
|
+
|
|
212
|
+
- a separate run-events fetch method beyond `getAgentThread(...).turns[].run_events`
|
|
213
|
+
- agent/tool/admin management
|
|
214
|
+
- browser auth/session helpers
|
|
215
|
+
|
|
216
|
+
If you need one of those capabilities, treat it as a platform/public-embed contract change first, not just an SDK patch.
|
|
217
|
+
|
|
218
|
+
## Source Map
|
|
219
|
+
|
|
220
|
+
If you need to change the SDK in an integrated way, start from these files:
|
|
221
|
+
|
|
222
|
+
- SDK client methods: `src/client.ts`
|
|
223
|
+
- SDK request/response types: `src/types.ts`
|
|
224
|
+
- SDK SSE parsing: `src/sse.ts`
|
|
225
|
+
- SDK HTTP/runtime guards: `src/http.ts`
|
|
226
|
+
- public embed backend routes: `../../backend/app/api/routers/embedded_agents_public.py`
|
|
227
|
+
- backend serialization/runtime service: `../../backend/app/services/embedded_agent_runtime_service.py`
|
|
228
|
+
|
|
151
229
|
## Thread And History Usage
|
|
152
230
|
|
|
153
231
|
Pass your own application user identity as `external_user_id` on every call.
|
|
@@ -200,4 +278,4 @@ See [`examples/express-typescript/`](./examples/express-typescript/) for a minim
|
|
|
200
278
|
|
|
201
279
|
## Release Notes
|
|
202
280
|
|
|
203
|
-
This package is released through GitHub Actions using
|
|
281
|
+
This package is released through GitHub Actions using direct publish from `main` and npm trusted publishing. Local `npm pack` and `npm run smoke:pack` are the expected pre-release verification commands.
|
package/dist/index.cjs
CHANGED
|
@@ -321,10 +321,57 @@ var EmbeddedAgentClient = class {
|
|
|
321
321
|
`${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`
|
|
322
322
|
);
|
|
323
323
|
}
|
|
324
|
-
async
|
|
324
|
+
async deleteAgentThread(agentId, threadId, {
|
|
325
|
+
externalUserId,
|
|
326
|
+
externalSessionId
|
|
327
|
+
}) {
|
|
328
|
+
const search = new URLSearchParams({
|
|
329
|
+
external_user_id: externalUserId
|
|
330
|
+
});
|
|
331
|
+
if (externalSessionId) {
|
|
332
|
+
search.set("external_session_id", externalSessionId);
|
|
333
|
+
}
|
|
334
|
+
return this.requestJson(
|
|
335
|
+
`${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,
|
|
336
|
+
{
|
|
337
|
+
method: "DELETE",
|
|
338
|
+
headers: buildJsonHeaders(this.apiKey)
|
|
339
|
+
}
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
async uploadAgentAttachments(agentId, {
|
|
343
|
+
externalUserId,
|
|
344
|
+
externalSessionId,
|
|
345
|
+
threadId,
|
|
346
|
+
files
|
|
347
|
+
}) {
|
|
348
|
+
const formData = new FormData();
|
|
349
|
+
formData.set("external_user_id", externalUserId);
|
|
350
|
+
if (externalSessionId) {
|
|
351
|
+
formData.set("external_session_id", externalSessionId);
|
|
352
|
+
}
|
|
353
|
+
if (threadId) {
|
|
354
|
+
formData.set("thread_id", threadId);
|
|
355
|
+
}
|
|
356
|
+
for (const file of files) {
|
|
357
|
+
formData.append("files", file, file.name);
|
|
358
|
+
}
|
|
359
|
+
return this.requestJson(
|
|
360
|
+
`${this.baseUrl}/public/embed/agents/${agentId}/attachments/upload`,
|
|
361
|
+
{
|
|
362
|
+
method: "POST",
|
|
363
|
+
headers: {
|
|
364
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
365
|
+
Accept: "application/json"
|
|
366
|
+
},
|
|
367
|
+
body: formData
|
|
368
|
+
}
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
async requestJson(url, init) {
|
|
325
372
|
const response = await this.fetchOrThrow(
|
|
326
373
|
url,
|
|
327
|
-
{
|
|
374
|
+
init || {
|
|
328
375
|
method: "GET",
|
|
329
376
|
headers: buildJsonHeaders(this.apiKey)
|
|
330
377
|
},
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/sse.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export type EmbeddedAgentSDKErrorKind = \"http\" | \"network\" | \"protocol\";\n\ntype EmbeddedAgentSDKErrorOptions = {\n kind: EmbeddedAgentSDKErrorKind;\n status?: number;\n details?: unknown;\n cause?: unknown;\n};\n\nexport class EmbeddedAgentSDKError extends Error {\n public readonly kind: EmbeddedAgentSDKErrorKind;\n public readonly status?: number;\n public readonly details?: unknown;\n\n constructor(message: string, options: EmbeddedAgentSDKErrorOptions) {\n super(message, \"cause\" in Error.prototype ? { cause: options.cause } : undefined);\n this.name = \"EmbeddedAgentSDKError\";\n this.kind = options.kind;\n this.status = options.status;\n this.details = options.details;\n if (!(\"cause\" in this) && options.cause !== undefined) {\n Object.defineProperty(this, \"cause\", {\n configurable: true,\n enumerable: false,\n value: options.cause,\n writable: true,\n });\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\n\nconst SERVER_ONLY_MESSAGE =\n \"EmbeddedAgentClient is server-only. Keep your Talmudpedia API key on your backend and call the SDK from Node.\";\n\nexport function assertServerRuntime(): void {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n throw new EmbeddedAgentSDKError(SERVER_ONLY_MESSAGE, { kind: \"protocol\" });\n }\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n const normalized = String(baseUrl || \"\").trim().replace(/\\/+$/, \"\");\n if (!normalized) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty baseUrl.\", {\n kind: \"protocol\",\n });\n }\n try {\n return new URL(normalized).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient received an invalid baseUrl.\", {\n kind: \"protocol\",\n cause,\n details: { baseUrl },\n });\n }\n}\n\nexport function resolveFetchImpl(fetchImpl?: typeof fetch): typeof fetch {\n if (fetchImpl) {\n return fetchImpl;\n }\n if (typeof fetch === \"function\") {\n return fetch;\n }\n throw new EmbeddedAgentSDKError(\n \"No fetch implementation is available. Use Node 18.17+ or pass fetchImpl explicitly.\",\n { kind: \"protocol\" },\n );\n}\n\nexport function buildStreamHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n };\n}\n\nexport function buildJsonHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"application/json\",\n };\n}\n\nfunction extractMessageFromDetails(details: unknown): string | undefined {\n if (!details || typeof details !== \"object\" || Array.isArray(details)) {\n return undefined;\n }\n const detail = (details as { detail?: unknown }).detail;\n return typeof detail === \"string\" && detail.trim() ? detail.trim() : undefined;\n}\n\nasync function parseErrorDetails(response: Response): Promise<unknown> {\n if (typeof response.text === \"function\") {\n try {\n const raw = await response.text();\n if (!raw) {\n return null;\n }\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return raw;\n }\n } catch {\n return null;\n }\n }\n if (typeof response.json === \"function\") {\n try {\n return await response.json();\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport async function assertOk(response: Response): Promise<void> {\n if (response.ok) {\n return;\n }\n const details = await parseErrorDetails(response);\n const message =\n extractMessageFromDetails(details) ||\n (typeof details === \"string\" && details.trim()) ||\n response.statusText ||\n \"Request failed\";\n throw new EmbeddedAgentSDKError(message, {\n kind: \"http\",\n status: response.status,\n details,\n });\n}\n\nexport function wrapNetworkError(message: string, cause: unknown): EmbeddedAgentSDKError {\n if (cause instanceof EmbeddedAgentSDKError) {\n return cause;\n }\n return new EmbeddedAgentSDKError(message, {\n kind: \"network\",\n cause,\n details: cause instanceof Error ? { name: cause.name } : undefined,\n });\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport type { EmbeddedAgentRuntimeDiagnostic, EmbeddedAgentRuntimeEvent } from \"./types\";\n\nfunction parseSSEBlock(block: string): string | null {\n const dataLines: string[] = [];\n const lines = block.split(\"\\n\");\n for (const line of lines) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n const separatorIndex = line.indexOf(\":\");\n const field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n let value = separatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n if (value.startsWith(\" \")) {\n value = value.slice(1);\n }\n if (field === \"data\") {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return null;\n }\n return dataLines.join(\"\\n\");\n}\n\nfunction assertDiagnostics(value: unknown): EmbeddedAgentRuntimeDiagnostic[] {\n if (!Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics must be an array.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value.map((item) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics entries must be objects.\", {\n kind: \"protocol\",\n details: item,\n });\n }\n return item as EmbeddedAgentRuntimeDiagnostic;\n });\n}\n\nfunction assertPayload(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: payload must be an object.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value as Record<string, unknown>;\n}\n\nexport function parseRuntimeEvent(rawPayload: string): EmbeddedAgentRuntimeEvent {\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawPayload) as unknown;\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: invalid JSON payload.\", {\n kind: \"protocol\",\n cause,\n details: rawPayload,\n });\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: expected an object envelope.\", {\n kind: \"protocol\",\n details: parsed,\n });\n }\n\n const candidate = parsed as Record<string, unknown>;\n if (candidate.version !== \"run-stream.v2\") {\n throw new EmbeddedAgentSDKError(\n \"Embedded-agent SSE protocol mismatch: expected run-stream.v2 event envelopes.\",\n {\n kind: \"protocol\",\n details: candidate,\n },\n );\n }\n\n if (\n typeof candidate.seq !== \"number\" ||\n !Number.isFinite(candidate.seq) ||\n typeof candidate.ts !== \"string\" ||\n typeof candidate.event !== \"string\" ||\n typeof candidate.run_id !== \"string\" ||\n typeof candidate.stage !== \"string\"\n ) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: missing required envelope fields.\", {\n kind: \"protocol\",\n details: candidate,\n });\n }\n\n return {\n version: \"run-stream.v2\",\n seq: candidate.seq,\n ts: candidate.ts,\n event: candidate.event,\n run_id: candidate.run_id,\n stage: candidate.stage,\n payload: assertPayload(candidate.payload ?? {}),\n diagnostics: assertDiagnostics(candidate.diagnostics ?? []),\n };\n}\n\nexport async function consumeEventStream(\n response: Response,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n): Promise<void> {\n if (!response.body) {\n throw new EmbeddedAgentSDKError(\"Embedded-agent stream response did not include a readable body.\", {\n kind: \"protocol\",\n });\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done }).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const block = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n const payload = parseSSEBlock(block);\n if (payload) {\n const event = parseRuntimeEvent(payload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n\n if (done) {\n break;\n }\n }\n\n const trailingPayload = parseSSEBlock(buffer.trim());\n if (trailingPayload) {\n const event = parseRuntimeEvent(trailingPayload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport {\n assertOk,\n assertServerRuntime,\n buildJsonHeaders,\n buildStreamHeaders,\n normalizeBaseUrl,\n resolveFetchImpl,\n wrapNetworkError,\n} from \"./http\";\nimport { consumeEventStream } from \"./sse\";\nimport type {\n EmbeddedAgentClientOptions,\n EmbeddedAgentRuntimeEvent,\n EmbeddedAgentStreamRequest,\n EmbeddedAgentThreadDetail,\n EmbeddedAgentThreadDetailOptions,\n EmbeddedAgentThreadListOptions,\n EmbeddedAgentThreadsResponse,\n StreamAgentResult,\n} from \"./types\";\n\nexport class EmbeddedAgentClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly fetchImpl: typeof fetch;\n\n constructor({ baseUrl, apiKey, fetchImpl }: EmbeddedAgentClientOptions) {\n assertServerRuntime();\n const normalizedApiKey = String(apiKey || \"\").trim();\n if (!normalizedApiKey) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty apiKey.\", {\n kind: \"protocol\",\n });\n }\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.apiKey = normalizedApiKey;\n this.fetchImpl = resolveFetchImpl(fetchImpl);\n }\n\n async streamAgent(\n agentId: string,\n payload: EmbeddedAgentStreamRequest,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n ): Promise<StreamAgentResult> {\n const response = await this.fetchOrThrow(\n `${this.baseUrl}/public/embed/agents/${agentId}/chat/stream`,\n {\n method: \"POST\",\n headers: buildStreamHeaders(this.apiKey),\n body: JSON.stringify(payload),\n },\n \"Failed to connect to the embedded-agent stream endpoint.\",\n );\n\n await assertOk(response);\n const threadId = response.headers.get(\"X-Thread-ID\");\n await consumeEventStream(response, onEvent);\n return { threadId };\n }\n\n async listAgentThreads(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n skip = 0,\n limit = 20,\n }: EmbeddedAgentThreadListOptions,\n ): Promise<EmbeddedAgentThreadsResponse> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n skip: String(skip),\n limit: String(limit),\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadsResponse>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads?${search.toString()}`,\n );\n }\n\n async getAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDetailOptions,\n ): Promise<EmbeddedAgentThreadDetail> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDetail>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n );\n }\n\n private async requestJson<T>(url: string): Promise<T> {\n const response = await this.fetchOrThrow(\n url,\n {\n method: \"GET\",\n headers: buildJsonHeaders(this.apiKey),\n },\n \"Failed to connect to the embedded-agent API.\",\n );\n await assertOk(response);\n return (await response.json()) as T;\n }\n\n private async fetchOrThrow(url: string, init: RequestInit, networkMessage: string): Promise<Response> {\n try {\n return await this.fetchImpl(url, init);\n } catch (cause) {\n throw wrapNetworkError(networkMessage, cause);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/sse.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export type EmbeddedAgentSDKErrorKind = \"http\" | \"network\" | \"protocol\";\n\ntype EmbeddedAgentSDKErrorOptions = {\n kind: EmbeddedAgentSDKErrorKind;\n status?: number;\n details?: unknown;\n cause?: unknown;\n};\n\nexport class EmbeddedAgentSDKError extends Error {\n public readonly kind: EmbeddedAgentSDKErrorKind;\n public readonly status?: number;\n public readonly details?: unknown;\n\n constructor(message: string, options: EmbeddedAgentSDKErrorOptions) {\n super(message, \"cause\" in Error.prototype ? { cause: options.cause } : undefined);\n this.name = \"EmbeddedAgentSDKError\";\n this.kind = options.kind;\n this.status = options.status;\n this.details = options.details;\n if (!(\"cause\" in this) && options.cause !== undefined) {\n Object.defineProperty(this, \"cause\", {\n configurable: true,\n enumerable: false,\n value: options.cause,\n writable: true,\n });\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\n\nconst SERVER_ONLY_MESSAGE =\n \"EmbeddedAgentClient is server-only. Keep your Talmudpedia API key on your backend and call the SDK from Node.\";\n\nexport function assertServerRuntime(): void {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n throw new EmbeddedAgentSDKError(SERVER_ONLY_MESSAGE, { kind: \"protocol\" });\n }\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n const normalized = String(baseUrl || \"\").trim().replace(/\\/+$/, \"\");\n if (!normalized) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty baseUrl.\", {\n kind: \"protocol\",\n });\n }\n try {\n return new URL(normalized).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient received an invalid baseUrl.\", {\n kind: \"protocol\",\n cause,\n details: { baseUrl },\n });\n }\n}\n\nexport function resolveFetchImpl(fetchImpl?: typeof fetch): typeof fetch {\n if (fetchImpl) {\n return fetchImpl;\n }\n if (typeof fetch === \"function\") {\n return fetch;\n }\n throw new EmbeddedAgentSDKError(\n \"No fetch implementation is available. Use Node 18.17+ or pass fetchImpl explicitly.\",\n { kind: \"protocol\" },\n );\n}\n\nexport function buildStreamHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n };\n}\n\nexport function buildJsonHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"application/json\",\n };\n}\n\nfunction extractMessageFromDetails(details: unknown): string | undefined {\n if (!details || typeof details !== \"object\" || Array.isArray(details)) {\n return undefined;\n }\n const detail = (details as { detail?: unknown }).detail;\n return typeof detail === \"string\" && detail.trim() ? detail.trim() : undefined;\n}\n\nasync function parseErrorDetails(response: Response): Promise<unknown> {\n if (typeof response.text === \"function\") {\n try {\n const raw = await response.text();\n if (!raw) {\n return null;\n }\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return raw;\n }\n } catch {\n return null;\n }\n }\n if (typeof response.json === \"function\") {\n try {\n return await response.json();\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport async function assertOk(response: Response): Promise<void> {\n if (response.ok) {\n return;\n }\n const details = await parseErrorDetails(response);\n const message =\n extractMessageFromDetails(details) ||\n (typeof details === \"string\" && details.trim()) ||\n response.statusText ||\n \"Request failed\";\n throw new EmbeddedAgentSDKError(message, {\n kind: \"http\",\n status: response.status,\n details,\n });\n}\n\nexport function wrapNetworkError(message: string, cause: unknown): EmbeddedAgentSDKError {\n if (cause instanceof EmbeddedAgentSDKError) {\n return cause;\n }\n return new EmbeddedAgentSDKError(message, {\n kind: \"network\",\n cause,\n details: cause instanceof Error ? { name: cause.name } : undefined,\n });\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport type { EmbeddedAgentRuntimeDiagnostic, EmbeddedAgentRuntimeEvent } from \"./types\";\n\nfunction parseSSEBlock(block: string): string | null {\n const dataLines: string[] = [];\n const lines = block.split(\"\\n\");\n for (const line of lines) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n const separatorIndex = line.indexOf(\":\");\n const field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n let value = separatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n if (value.startsWith(\" \")) {\n value = value.slice(1);\n }\n if (field === \"data\") {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return null;\n }\n return dataLines.join(\"\\n\");\n}\n\nfunction assertDiagnostics(value: unknown): EmbeddedAgentRuntimeDiagnostic[] {\n if (!Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics must be an array.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value.map((item) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics entries must be objects.\", {\n kind: \"protocol\",\n details: item,\n });\n }\n return item as EmbeddedAgentRuntimeDiagnostic;\n });\n}\n\nfunction assertPayload(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: payload must be an object.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value as Record<string, unknown>;\n}\n\nexport function parseRuntimeEvent(rawPayload: string): EmbeddedAgentRuntimeEvent {\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawPayload) as unknown;\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: invalid JSON payload.\", {\n kind: \"protocol\",\n cause,\n details: rawPayload,\n });\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: expected an object envelope.\", {\n kind: \"protocol\",\n details: parsed,\n });\n }\n\n const candidate = parsed as Record<string, unknown>;\n if (candidate.version !== \"run-stream.v2\") {\n throw new EmbeddedAgentSDKError(\n \"Embedded-agent SSE protocol mismatch: expected run-stream.v2 event envelopes.\",\n {\n kind: \"protocol\",\n details: candidate,\n },\n );\n }\n\n if (\n typeof candidate.seq !== \"number\" ||\n !Number.isFinite(candidate.seq) ||\n typeof candidate.ts !== \"string\" ||\n typeof candidate.event !== \"string\" ||\n typeof candidate.run_id !== \"string\" ||\n typeof candidate.stage !== \"string\"\n ) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: missing required envelope fields.\", {\n kind: \"protocol\",\n details: candidate,\n });\n }\n\n return {\n version: \"run-stream.v2\",\n seq: candidate.seq,\n ts: candidate.ts,\n event: candidate.event,\n run_id: candidate.run_id,\n stage: candidate.stage,\n payload: assertPayload(candidate.payload ?? {}),\n diagnostics: assertDiagnostics(candidate.diagnostics ?? []),\n };\n}\n\nexport async function consumeEventStream(\n response: Response,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n): Promise<void> {\n if (!response.body) {\n throw new EmbeddedAgentSDKError(\"Embedded-agent stream response did not include a readable body.\", {\n kind: \"protocol\",\n });\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done }).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const block = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n const payload = parseSSEBlock(block);\n if (payload) {\n const event = parseRuntimeEvent(payload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n\n if (done) {\n break;\n }\n }\n\n const trailingPayload = parseSSEBlock(buffer.trim());\n if (trailingPayload) {\n const event = parseRuntimeEvent(trailingPayload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport {\n assertOk,\n assertServerRuntime,\n buildJsonHeaders,\n buildStreamHeaders,\n normalizeBaseUrl,\n resolveFetchImpl,\n wrapNetworkError,\n} from \"./http\";\nimport { consumeEventStream } from \"./sse\";\nimport type {\n EmbeddedAgentAttachmentUploadOptions,\n EmbeddedAgentAttachmentUploadResult,\n EmbeddedAgentClientOptions,\n EmbeddedAgentRuntimeEvent,\n EmbeddedAgentStreamRequest,\n EmbeddedAgentThreadDetail,\n EmbeddedAgentThreadDeleteOptions,\n EmbeddedAgentThreadDeleteResult,\n EmbeddedAgentThreadDetailOptions,\n EmbeddedAgentThreadListOptions,\n EmbeddedAgentThreadsResponse,\n StreamAgentResult,\n} from \"./types\";\n\nexport class EmbeddedAgentClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly fetchImpl: typeof fetch;\n\n constructor({ baseUrl, apiKey, fetchImpl }: EmbeddedAgentClientOptions) {\n assertServerRuntime();\n const normalizedApiKey = String(apiKey || \"\").trim();\n if (!normalizedApiKey) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty apiKey.\", {\n kind: \"protocol\",\n });\n }\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.apiKey = normalizedApiKey;\n this.fetchImpl = resolveFetchImpl(fetchImpl);\n }\n\n async streamAgent(\n agentId: string,\n payload: EmbeddedAgentStreamRequest,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n ): Promise<StreamAgentResult> {\n const response = await this.fetchOrThrow(\n `${this.baseUrl}/public/embed/agents/${agentId}/chat/stream`,\n {\n method: \"POST\",\n headers: buildStreamHeaders(this.apiKey),\n body: JSON.stringify(payload),\n },\n \"Failed to connect to the embedded-agent stream endpoint.\",\n );\n\n await assertOk(response);\n const threadId = response.headers.get(\"X-Thread-ID\");\n await consumeEventStream(response, onEvent);\n return { threadId };\n }\n\n async listAgentThreads(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n skip = 0,\n limit = 20,\n }: EmbeddedAgentThreadListOptions,\n ): Promise<EmbeddedAgentThreadsResponse> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n skip: String(skip),\n limit: String(limit),\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadsResponse>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads?${search.toString()}`,\n );\n }\n\n async getAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDetailOptions,\n ): Promise<EmbeddedAgentThreadDetail> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDetail>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n );\n }\n\n async deleteAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDeleteOptions,\n ): Promise<EmbeddedAgentThreadDeleteResult> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDeleteResult>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n {\n method: \"DELETE\",\n headers: buildJsonHeaders(this.apiKey),\n },\n );\n }\n\n async uploadAgentAttachments(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n threadId,\n files,\n }: EmbeddedAgentAttachmentUploadOptions,\n ): Promise<EmbeddedAgentAttachmentUploadResult> {\n const formData = new FormData();\n formData.set(\"external_user_id\", externalUserId);\n if (externalSessionId) {\n formData.set(\"external_session_id\", externalSessionId);\n }\n if (threadId) {\n formData.set(\"thread_id\", threadId);\n }\n for (const file of files) {\n formData.append(\"files\", file, file.name);\n }\n return this.requestJson<EmbeddedAgentAttachmentUploadResult>(\n `${this.baseUrl}/public/embed/agents/${agentId}/attachments/upload`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: \"application/json\",\n },\n body: formData,\n },\n );\n }\n\n private async requestJson<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await this.fetchOrThrow(\n url,\n init || {\n method: \"GET\",\n headers: buildJsonHeaders(this.apiKey),\n },\n \"Failed to connect to the embedded-agent API.\",\n );\n await assertOk(response);\n return (await response.json()) as T;\n }\n\n private async fetchOrThrow(url: string, init: RequestInit, networkMessage: string): Promise<Response> {\n try {\n return await this.fetchImpl(url, init);\n } catch (cause) {\n throw wrapNetworkError(networkMessage, cause);\n }\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -15,12 +15,26 @@ declare class EmbeddedAgentSDKError extends Error {
|
|
|
15
15
|
type EmbeddedAgentStreamRequest = {
|
|
16
16
|
input?: string;
|
|
17
17
|
messages?: Array<Record<string, unknown>>;
|
|
18
|
+
attachment_ids?: string[];
|
|
18
19
|
thread_id?: string;
|
|
19
20
|
external_user_id: string;
|
|
20
21
|
external_session_id?: string;
|
|
21
22
|
metadata?: Record<string, unknown>;
|
|
22
23
|
client?: Record<string, unknown>;
|
|
23
24
|
};
|
|
25
|
+
type EmbeddedAgentAttachment = {
|
|
26
|
+
id: string;
|
|
27
|
+
thread_id: string | null;
|
|
28
|
+
kind: string;
|
|
29
|
+
filename: string;
|
|
30
|
+
mime_type: string;
|
|
31
|
+
byte_size: number;
|
|
32
|
+
status: string;
|
|
33
|
+
processing_error: string | null;
|
|
34
|
+
metadata: Record<string, unknown>;
|
|
35
|
+
created_at: string;
|
|
36
|
+
updated_at: string;
|
|
37
|
+
};
|
|
24
38
|
type EmbeddedAgentThreadSummary = {
|
|
25
39
|
id: string;
|
|
26
40
|
agent_id: string | null;
|
|
@@ -43,8 +57,10 @@ type EmbeddedAgentThreadTurn = {
|
|
|
43
57
|
status: string;
|
|
44
58
|
usage_tokens: number;
|
|
45
59
|
metadata: Record<string, unknown>;
|
|
60
|
+
attachments: EmbeddedAgentAttachment[];
|
|
46
61
|
created_at: string;
|
|
47
62
|
completed_at: string | null;
|
|
63
|
+
run_events: EmbeddedAgentRuntimeEvent[];
|
|
48
64
|
};
|
|
49
65
|
type EmbeddedAgentThreadDetail = EmbeddedAgentThreadSummary & {
|
|
50
66
|
turns: EmbeddedAgentThreadTurn[];
|
|
@@ -56,7 +72,17 @@ type EmbeddedAgentThreadsResponse = {
|
|
|
56
72
|
type EmbeddedAgentRuntimeDiagnostic = {
|
|
57
73
|
message?: string;
|
|
58
74
|
} & Record<string, unknown>;
|
|
59
|
-
type
|
|
75
|
+
type EmbeddedAgentUiPayload = {
|
|
76
|
+
format: "openui";
|
|
77
|
+
version: 1;
|
|
78
|
+
content?: string | null;
|
|
79
|
+
content_delta?: string | null;
|
|
80
|
+
ast?: Record<string, unknown> | null;
|
|
81
|
+
component_library_id?: string | null;
|
|
82
|
+
surface?: "chat_inline" | "app_canvas" | string | null;
|
|
83
|
+
is_final?: boolean;
|
|
84
|
+
};
|
|
85
|
+
type EmbeddedAgentRuntimeEventBase = {
|
|
60
86
|
version: "run-stream.v2";
|
|
61
87
|
seq: number;
|
|
62
88
|
ts: string;
|
|
@@ -66,6 +92,12 @@ type EmbeddedAgentRuntimeEvent = {
|
|
|
66
92
|
payload: Record<string, unknown>;
|
|
67
93
|
diagnostics: EmbeddedAgentRuntimeDiagnostic[];
|
|
68
94
|
};
|
|
95
|
+
type EmbeddedAgentUiRuntimeEvent = Omit<EmbeddedAgentRuntimeEventBase, "event" | "stage" | "payload"> & {
|
|
96
|
+
event: "assistant.ui";
|
|
97
|
+
stage: "assistant";
|
|
98
|
+
payload: EmbeddedAgentUiPayload;
|
|
99
|
+
};
|
|
100
|
+
type EmbeddedAgentRuntimeEvent = EmbeddedAgentUiRuntimeEvent | EmbeddedAgentRuntimeEventBase;
|
|
69
101
|
type StreamAgentResult = {
|
|
70
102
|
threadId: string | null;
|
|
71
103
|
};
|
|
@@ -79,6 +111,22 @@ type EmbeddedAgentThreadDetailOptions = {
|
|
|
79
111
|
externalUserId: string;
|
|
80
112
|
externalSessionId?: string;
|
|
81
113
|
};
|
|
114
|
+
type EmbeddedAgentThreadDeleteOptions = {
|
|
115
|
+
externalUserId: string;
|
|
116
|
+
externalSessionId?: string;
|
|
117
|
+
};
|
|
118
|
+
type EmbeddedAgentThreadDeleteResult = {
|
|
119
|
+
deleted: boolean;
|
|
120
|
+
};
|
|
121
|
+
type EmbeddedAgentAttachmentUploadOptions = {
|
|
122
|
+
externalUserId: string;
|
|
123
|
+
externalSessionId?: string;
|
|
124
|
+
threadId?: string;
|
|
125
|
+
files: File[];
|
|
126
|
+
};
|
|
127
|
+
type EmbeddedAgentAttachmentUploadResult = {
|
|
128
|
+
items: EmbeddedAgentAttachment[];
|
|
129
|
+
};
|
|
82
130
|
type EmbeddedAgentClientOptions = {
|
|
83
131
|
baseUrl: string;
|
|
84
132
|
apiKey: string;
|
|
@@ -99,8 +147,10 @@ declare class EmbeddedAgentClient {
|
|
|
99
147
|
streamAgent(agentId: string, payload: EmbeddedAgentStreamRequest, onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>): Promise<StreamAgentResult>;
|
|
100
148
|
listAgentThreads(agentId: string, { externalUserId, externalSessionId, skip, limit, }: EmbeddedAgentThreadListOptions): Promise<EmbeddedAgentThreadsResponse>;
|
|
101
149
|
getAgentThread(agentId: string, threadId: string, { externalUserId, externalSessionId, }: EmbeddedAgentThreadDetailOptions): Promise<EmbeddedAgentThreadDetail>;
|
|
150
|
+
deleteAgentThread(agentId: string, threadId: string, { externalUserId, externalSessionId, }: EmbeddedAgentThreadDeleteOptions): Promise<EmbeddedAgentThreadDeleteResult>;
|
|
151
|
+
uploadAgentAttachments(agentId: string, { externalUserId, externalSessionId, threadId, files, }: EmbeddedAgentAttachmentUploadOptions): Promise<EmbeddedAgentAttachmentUploadResult>;
|
|
102
152
|
private requestJson;
|
|
103
153
|
private fetchOrThrow;
|
|
104
154
|
}
|
|
105
155
|
|
|
106
|
-
export { EmbeddedAgentClient, type EmbeddedAgentClientOptions, type EmbeddedAgentRuntimeDiagnostic, type EmbeddedAgentRuntimeEvent, EmbeddedAgentSDKError, type EmbeddedAgentSDKErrorKind, type EmbeddedAgentSDKSerializedError, type EmbeddedAgentStreamRequest, type EmbeddedAgentThreadDetail, type EmbeddedAgentThreadDetailOptions, type EmbeddedAgentThreadListOptions, type EmbeddedAgentThreadSummary, type EmbeddedAgentThreadTurn, type EmbeddedAgentThreadsResponse, type StreamAgentResult };
|
|
156
|
+
export { type EmbeddedAgentAttachment, type EmbeddedAgentAttachmentUploadOptions, type EmbeddedAgentAttachmentUploadResult, EmbeddedAgentClient, type EmbeddedAgentClientOptions, type EmbeddedAgentRuntimeDiagnostic, type EmbeddedAgentRuntimeEvent, EmbeddedAgentSDKError, type EmbeddedAgentSDKErrorKind, type EmbeddedAgentSDKSerializedError, type EmbeddedAgentStreamRequest, type EmbeddedAgentThreadDeleteOptions, type EmbeddedAgentThreadDeleteResult, type EmbeddedAgentThreadDetail, type EmbeddedAgentThreadDetailOptions, type EmbeddedAgentThreadListOptions, type EmbeddedAgentThreadSummary, type EmbeddedAgentThreadTurn, type EmbeddedAgentThreadsResponse, type EmbeddedAgentUiPayload, type EmbeddedAgentUiRuntimeEvent, type StreamAgentResult };
|
package/dist/index.d.ts
CHANGED
|
@@ -15,12 +15,26 @@ declare class EmbeddedAgentSDKError extends Error {
|
|
|
15
15
|
type EmbeddedAgentStreamRequest = {
|
|
16
16
|
input?: string;
|
|
17
17
|
messages?: Array<Record<string, unknown>>;
|
|
18
|
+
attachment_ids?: string[];
|
|
18
19
|
thread_id?: string;
|
|
19
20
|
external_user_id: string;
|
|
20
21
|
external_session_id?: string;
|
|
21
22
|
metadata?: Record<string, unknown>;
|
|
22
23
|
client?: Record<string, unknown>;
|
|
23
24
|
};
|
|
25
|
+
type EmbeddedAgentAttachment = {
|
|
26
|
+
id: string;
|
|
27
|
+
thread_id: string | null;
|
|
28
|
+
kind: string;
|
|
29
|
+
filename: string;
|
|
30
|
+
mime_type: string;
|
|
31
|
+
byte_size: number;
|
|
32
|
+
status: string;
|
|
33
|
+
processing_error: string | null;
|
|
34
|
+
metadata: Record<string, unknown>;
|
|
35
|
+
created_at: string;
|
|
36
|
+
updated_at: string;
|
|
37
|
+
};
|
|
24
38
|
type EmbeddedAgentThreadSummary = {
|
|
25
39
|
id: string;
|
|
26
40
|
agent_id: string | null;
|
|
@@ -43,8 +57,10 @@ type EmbeddedAgentThreadTurn = {
|
|
|
43
57
|
status: string;
|
|
44
58
|
usage_tokens: number;
|
|
45
59
|
metadata: Record<string, unknown>;
|
|
60
|
+
attachments: EmbeddedAgentAttachment[];
|
|
46
61
|
created_at: string;
|
|
47
62
|
completed_at: string | null;
|
|
63
|
+
run_events: EmbeddedAgentRuntimeEvent[];
|
|
48
64
|
};
|
|
49
65
|
type EmbeddedAgentThreadDetail = EmbeddedAgentThreadSummary & {
|
|
50
66
|
turns: EmbeddedAgentThreadTurn[];
|
|
@@ -56,7 +72,17 @@ type EmbeddedAgentThreadsResponse = {
|
|
|
56
72
|
type EmbeddedAgentRuntimeDiagnostic = {
|
|
57
73
|
message?: string;
|
|
58
74
|
} & Record<string, unknown>;
|
|
59
|
-
type
|
|
75
|
+
type EmbeddedAgentUiPayload = {
|
|
76
|
+
format: "openui";
|
|
77
|
+
version: 1;
|
|
78
|
+
content?: string | null;
|
|
79
|
+
content_delta?: string | null;
|
|
80
|
+
ast?: Record<string, unknown> | null;
|
|
81
|
+
component_library_id?: string | null;
|
|
82
|
+
surface?: "chat_inline" | "app_canvas" | string | null;
|
|
83
|
+
is_final?: boolean;
|
|
84
|
+
};
|
|
85
|
+
type EmbeddedAgentRuntimeEventBase = {
|
|
60
86
|
version: "run-stream.v2";
|
|
61
87
|
seq: number;
|
|
62
88
|
ts: string;
|
|
@@ -66,6 +92,12 @@ type EmbeddedAgentRuntimeEvent = {
|
|
|
66
92
|
payload: Record<string, unknown>;
|
|
67
93
|
diagnostics: EmbeddedAgentRuntimeDiagnostic[];
|
|
68
94
|
};
|
|
95
|
+
type EmbeddedAgentUiRuntimeEvent = Omit<EmbeddedAgentRuntimeEventBase, "event" | "stage" | "payload"> & {
|
|
96
|
+
event: "assistant.ui";
|
|
97
|
+
stage: "assistant";
|
|
98
|
+
payload: EmbeddedAgentUiPayload;
|
|
99
|
+
};
|
|
100
|
+
type EmbeddedAgentRuntimeEvent = EmbeddedAgentUiRuntimeEvent | EmbeddedAgentRuntimeEventBase;
|
|
69
101
|
type StreamAgentResult = {
|
|
70
102
|
threadId: string | null;
|
|
71
103
|
};
|
|
@@ -79,6 +111,22 @@ type EmbeddedAgentThreadDetailOptions = {
|
|
|
79
111
|
externalUserId: string;
|
|
80
112
|
externalSessionId?: string;
|
|
81
113
|
};
|
|
114
|
+
type EmbeddedAgentThreadDeleteOptions = {
|
|
115
|
+
externalUserId: string;
|
|
116
|
+
externalSessionId?: string;
|
|
117
|
+
};
|
|
118
|
+
type EmbeddedAgentThreadDeleteResult = {
|
|
119
|
+
deleted: boolean;
|
|
120
|
+
};
|
|
121
|
+
type EmbeddedAgentAttachmentUploadOptions = {
|
|
122
|
+
externalUserId: string;
|
|
123
|
+
externalSessionId?: string;
|
|
124
|
+
threadId?: string;
|
|
125
|
+
files: File[];
|
|
126
|
+
};
|
|
127
|
+
type EmbeddedAgentAttachmentUploadResult = {
|
|
128
|
+
items: EmbeddedAgentAttachment[];
|
|
129
|
+
};
|
|
82
130
|
type EmbeddedAgentClientOptions = {
|
|
83
131
|
baseUrl: string;
|
|
84
132
|
apiKey: string;
|
|
@@ -99,8 +147,10 @@ declare class EmbeddedAgentClient {
|
|
|
99
147
|
streamAgent(agentId: string, payload: EmbeddedAgentStreamRequest, onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>): Promise<StreamAgentResult>;
|
|
100
148
|
listAgentThreads(agentId: string, { externalUserId, externalSessionId, skip, limit, }: EmbeddedAgentThreadListOptions): Promise<EmbeddedAgentThreadsResponse>;
|
|
101
149
|
getAgentThread(agentId: string, threadId: string, { externalUserId, externalSessionId, }: EmbeddedAgentThreadDetailOptions): Promise<EmbeddedAgentThreadDetail>;
|
|
150
|
+
deleteAgentThread(agentId: string, threadId: string, { externalUserId, externalSessionId, }: EmbeddedAgentThreadDeleteOptions): Promise<EmbeddedAgentThreadDeleteResult>;
|
|
151
|
+
uploadAgentAttachments(agentId: string, { externalUserId, externalSessionId, threadId, files, }: EmbeddedAgentAttachmentUploadOptions): Promise<EmbeddedAgentAttachmentUploadResult>;
|
|
102
152
|
private requestJson;
|
|
103
153
|
private fetchOrThrow;
|
|
104
154
|
}
|
|
105
155
|
|
|
106
|
-
export { EmbeddedAgentClient, type EmbeddedAgentClientOptions, type EmbeddedAgentRuntimeDiagnostic, type EmbeddedAgentRuntimeEvent, EmbeddedAgentSDKError, type EmbeddedAgentSDKErrorKind, type EmbeddedAgentSDKSerializedError, type EmbeddedAgentStreamRequest, type EmbeddedAgentThreadDetail, type EmbeddedAgentThreadDetailOptions, type EmbeddedAgentThreadListOptions, type EmbeddedAgentThreadSummary, type EmbeddedAgentThreadTurn, type EmbeddedAgentThreadsResponse, type StreamAgentResult };
|
|
156
|
+
export { type EmbeddedAgentAttachment, type EmbeddedAgentAttachmentUploadOptions, type EmbeddedAgentAttachmentUploadResult, EmbeddedAgentClient, type EmbeddedAgentClientOptions, type EmbeddedAgentRuntimeDiagnostic, type EmbeddedAgentRuntimeEvent, EmbeddedAgentSDKError, type EmbeddedAgentSDKErrorKind, type EmbeddedAgentSDKSerializedError, type EmbeddedAgentStreamRequest, type EmbeddedAgentThreadDeleteOptions, type EmbeddedAgentThreadDeleteResult, type EmbeddedAgentThreadDetail, type EmbeddedAgentThreadDetailOptions, type EmbeddedAgentThreadListOptions, type EmbeddedAgentThreadSummary, type EmbeddedAgentThreadTurn, type EmbeddedAgentThreadsResponse, type EmbeddedAgentUiPayload, type EmbeddedAgentUiRuntimeEvent, type StreamAgentResult };
|
package/dist/index.js
CHANGED
|
@@ -319,10 +319,57 @@ var EmbeddedAgentClient = class {
|
|
|
319
319
|
`${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`
|
|
320
320
|
);
|
|
321
321
|
}
|
|
322
|
-
async
|
|
322
|
+
async deleteAgentThread(agentId, threadId, {
|
|
323
|
+
externalUserId,
|
|
324
|
+
externalSessionId
|
|
325
|
+
}) {
|
|
326
|
+
const search = new URLSearchParams({
|
|
327
|
+
external_user_id: externalUserId
|
|
328
|
+
});
|
|
329
|
+
if (externalSessionId) {
|
|
330
|
+
search.set("external_session_id", externalSessionId);
|
|
331
|
+
}
|
|
332
|
+
return this.requestJson(
|
|
333
|
+
`${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,
|
|
334
|
+
{
|
|
335
|
+
method: "DELETE",
|
|
336
|
+
headers: buildJsonHeaders(this.apiKey)
|
|
337
|
+
}
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
async uploadAgentAttachments(agentId, {
|
|
341
|
+
externalUserId,
|
|
342
|
+
externalSessionId,
|
|
343
|
+
threadId,
|
|
344
|
+
files
|
|
345
|
+
}) {
|
|
346
|
+
const formData = new FormData();
|
|
347
|
+
formData.set("external_user_id", externalUserId);
|
|
348
|
+
if (externalSessionId) {
|
|
349
|
+
formData.set("external_session_id", externalSessionId);
|
|
350
|
+
}
|
|
351
|
+
if (threadId) {
|
|
352
|
+
formData.set("thread_id", threadId);
|
|
353
|
+
}
|
|
354
|
+
for (const file of files) {
|
|
355
|
+
formData.append("files", file, file.name);
|
|
356
|
+
}
|
|
357
|
+
return this.requestJson(
|
|
358
|
+
`${this.baseUrl}/public/embed/agents/${agentId}/attachments/upload`,
|
|
359
|
+
{
|
|
360
|
+
method: "POST",
|
|
361
|
+
headers: {
|
|
362
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
363
|
+
Accept: "application/json"
|
|
364
|
+
},
|
|
365
|
+
body: formData
|
|
366
|
+
}
|
|
367
|
+
);
|
|
368
|
+
}
|
|
369
|
+
async requestJson(url, init) {
|
|
323
370
|
const response = await this.fetchOrThrow(
|
|
324
371
|
url,
|
|
325
|
-
{
|
|
372
|
+
init || {
|
|
326
373
|
method: "GET",
|
|
327
374
|
headers: buildJsonHeaders(this.apiKey)
|
|
328
375
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/sse.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export type EmbeddedAgentSDKErrorKind = \"http\" | \"network\" | \"protocol\";\n\ntype EmbeddedAgentSDKErrorOptions = {\n kind: EmbeddedAgentSDKErrorKind;\n status?: number;\n details?: unknown;\n cause?: unknown;\n};\n\nexport class EmbeddedAgentSDKError extends Error {\n public readonly kind: EmbeddedAgentSDKErrorKind;\n public readonly status?: number;\n public readonly details?: unknown;\n\n constructor(message: string, options: EmbeddedAgentSDKErrorOptions) {\n super(message, \"cause\" in Error.prototype ? { cause: options.cause } : undefined);\n this.name = \"EmbeddedAgentSDKError\";\n this.kind = options.kind;\n this.status = options.status;\n this.details = options.details;\n if (!(\"cause\" in this) && options.cause !== undefined) {\n Object.defineProperty(this, \"cause\", {\n configurable: true,\n enumerable: false,\n value: options.cause,\n writable: true,\n });\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\n\nconst SERVER_ONLY_MESSAGE =\n \"EmbeddedAgentClient is server-only. Keep your Talmudpedia API key on your backend and call the SDK from Node.\";\n\nexport function assertServerRuntime(): void {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n throw new EmbeddedAgentSDKError(SERVER_ONLY_MESSAGE, { kind: \"protocol\" });\n }\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n const normalized = String(baseUrl || \"\").trim().replace(/\\/+$/, \"\");\n if (!normalized) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty baseUrl.\", {\n kind: \"protocol\",\n });\n }\n try {\n return new URL(normalized).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient received an invalid baseUrl.\", {\n kind: \"protocol\",\n cause,\n details: { baseUrl },\n });\n }\n}\n\nexport function resolveFetchImpl(fetchImpl?: typeof fetch): typeof fetch {\n if (fetchImpl) {\n return fetchImpl;\n }\n if (typeof fetch === \"function\") {\n return fetch;\n }\n throw new EmbeddedAgentSDKError(\n \"No fetch implementation is available. Use Node 18.17+ or pass fetchImpl explicitly.\",\n { kind: \"protocol\" },\n );\n}\n\nexport function buildStreamHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n };\n}\n\nexport function buildJsonHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"application/json\",\n };\n}\n\nfunction extractMessageFromDetails(details: unknown): string | undefined {\n if (!details || typeof details !== \"object\" || Array.isArray(details)) {\n return undefined;\n }\n const detail = (details as { detail?: unknown }).detail;\n return typeof detail === \"string\" && detail.trim() ? detail.trim() : undefined;\n}\n\nasync function parseErrorDetails(response: Response): Promise<unknown> {\n if (typeof response.text === \"function\") {\n try {\n const raw = await response.text();\n if (!raw) {\n return null;\n }\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return raw;\n }\n } catch {\n return null;\n }\n }\n if (typeof response.json === \"function\") {\n try {\n return await response.json();\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport async function assertOk(response: Response): Promise<void> {\n if (response.ok) {\n return;\n }\n const details = await parseErrorDetails(response);\n const message =\n extractMessageFromDetails(details) ||\n (typeof details === \"string\" && details.trim()) ||\n response.statusText ||\n \"Request failed\";\n throw new EmbeddedAgentSDKError(message, {\n kind: \"http\",\n status: response.status,\n details,\n });\n}\n\nexport function wrapNetworkError(message: string, cause: unknown): EmbeddedAgentSDKError {\n if (cause instanceof EmbeddedAgentSDKError) {\n return cause;\n }\n return new EmbeddedAgentSDKError(message, {\n kind: \"network\",\n cause,\n details: cause instanceof Error ? { name: cause.name } : undefined,\n });\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport type { EmbeddedAgentRuntimeDiagnostic, EmbeddedAgentRuntimeEvent } from \"./types\";\n\nfunction parseSSEBlock(block: string): string | null {\n const dataLines: string[] = [];\n const lines = block.split(\"\\n\");\n for (const line of lines) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n const separatorIndex = line.indexOf(\":\");\n const field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n let value = separatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n if (value.startsWith(\" \")) {\n value = value.slice(1);\n }\n if (field === \"data\") {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return null;\n }\n return dataLines.join(\"\\n\");\n}\n\nfunction assertDiagnostics(value: unknown): EmbeddedAgentRuntimeDiagnostic[] {\n if (!Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics must be an array.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value.map((item) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics entries must be objects.\", {\n kind: \"protocol\",\n details: item,\n });\n }\n return item as EmbeddedAgentRuntimeDiagnostic;\n });\n}\n\nfunction assertPayload(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: payload must be an object.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value as Record<string, unknown>;\n}\n\nexport function parseRuntimeEvent(rawPayload: string): EmbeddedAgentRuntimeEvent {\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawPayload) as unknown;\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: invalid JSON payload.\", {\n kind: \"protocol\",\n cause,\n details: rawPayload,\n });\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: expected an object envelope.\", {\n kind: \"protocol\",\n details: parsed,\n });\n }\n\n const candidate = parsed as Record<string, unknown>;\n if (candidate.version !== \"run-stream.v2\") {\n throw new EmbeddedAgentSDKError(\n \"Embedded-agent SSE protocol mismatch: expected run-stream.v2 event envelopes.\",\n {\n kind: \"protocol\",\n details: candidate,\n },\n );\n }\n\n if (\n typeof candidate.seq !== \"number\" ||\n !Number.isFinite(candidate.seq) ||\n typeof candidate.ts !== \"string\" ||\n typeof candidate.event !== \"string\" ||\n typeof candidate.run_id !== \"string\" ||\n typeof candidate.stage !== \"string\"\n ) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: missing required envelope fields.\", {\n kind: \"protocol\",\n details: candidate,\n });\n }\n\n return {\n version: \"run-stream.v2\",\n seq: candidate.seq,\n ts: candidate.ts,\n event: candidate.event,\n run_id: candidate.run_id,\n stage: candidate.stage,\n payload: assertPayload(candidate.payload ?? {}),\n diagnostics: assertDiagnostics(candidate.diagnostics ?? []),\n };\n}\n\nexport async function consumeEventStream(\n response: Response,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n): Promise<void> {\n if (!response.body) {\n throw new EmbeddedAgentSDKError(\"Embedded-agent stream response did not include a readable body.\", {\n kind: \"protocol\",\n });\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done }).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const block = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n const payload = parseSSEBlock(block);\n if (payload) {\n const event = parseRuntimeEvent(payload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n\n if (done) {\n break;\n }\n }\n\n const trailingPayload = parseSSEBlock(buffer.trim());\n if (trailingPayload) {\n const event = parseRuntimeEvent(trailingPayload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport {\n assertOk,\n assertServerRuntime,\n buildJsonHeaders,\n buildStreamHeaders,\n normalizeBaseUrl,\n resolveFetchImpl,\n wrapNetworkError,\n} from \"./http\";\nimport { consumeEventStream } from \"./sse\";\nimport type {\n EmbeddedAgentClientOptions,\n EmbeddedAgentRuntimeEvent,\n EmbeddedAgentStreamRequest,\n EmbeddedAgentThreadDetail,\n EmbeddedAgentThreadDetailOptions,\n EmbeddedAgentThreadListOptions,\n EmbeddedAgentThreadsResponse,\n StreamAgentResult,\n} from \"./types\";\n\nexport class EmbeddedAgentClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly fetchImpl: typeof fetch;\n\n constructor({ baseUrl, apiKey, fetchImpl }: EmbeddedAgentClientOptions) {\n assertServerRuntime();\n const normalizedApiKey = String(apiKey || \"\").trim();\n if (!normalizedApiKey) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty apiKey.\", {\n kind: \"protocol\",\n });\n }\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.apiKey = normalizedApiKey;\n this.fetchImpl = resolveFetchImpl(fetchImpl);\n }\n\n async streamAgent(\n agentId: string,\n payload: EmbeddedAgentStreamRequest,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n ): Promise<StreamAgentResult> {\n const response = await this.fetchOrThrow(\n `${this.baseUrl}/public/embed/agents/${agentId}/chat/stream`,\n {\n method: \"POST\",\n headers: buildStreamHeaders(this.apiKey),\n body: JSON.stringify(payload),\n },\n \"Failed to connect to the embedded-agent stream endpoint.\",\n );\n\n await assertOk(response);\n const threadId = response.headers.get(\"X-Thread-ID\");\n await consumeEventStream(response, onEvent);\n return { threadId };\n }\n\n async listAgentThreads(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n skip = 0,\n limit = 20,\n }: EmbeddedAgentThreadListOptions,\n ): Promise<EmbeddedAgentThreadsResponse> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n skip: String(skip),\n limit: String(limit),\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadsResponse>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads?${search.toString()}`,\n );\n }\n\n async getAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDetailOptions,\n ): Promise<EmbeddedAgentThreadDetail> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDetail>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n );\n }\n\n private async requestJson<T>(url: string): Promise<T> {\n const response = await this.fetchOrThrow(\n url,\n {\n method: \"GET\",\n headers: buildJsonHeaders(this.apiKey),\n },\n \"Failed to connect to the embedded-agent API.\",\n );\n await assertOk(response);\n return (await response.json()) as T;\n }\n\n private async fetchOrThrow(url: string, init: RequestInit, networkMessage: string): Promise<Response> {\n try {\n return await this.fetchImpl(url, init);\n } catch (cause) {\n throw wrapNetworkError(networkMessage, cause);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/sse.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export type EmbeddedAgentSDKErrorKind = \"http\" | \"network\" | \"protocol\";\n\ntype EmbeddedAgentSDKErrorOptions = {\n kind: EmbeddedAgentSDKErrorKind;\n status?: number;\n details?: unknown;\n cause?: unknown;\n};\n\nexport class EmbeddedAgentSDKError extends Error {\n public readonly kind: EmbeddedAgentSDKErrorKind;\n public readonly status?: number;\n public readonly details?: unknown;\n\n constructor(message: string, options: EmbeddedAgentSDKErrorOptions) {\n super(message, \"cause\" in Error.prototype ? { cause: options.cause } : undefined);\n this.name = \"EmbeddedAgentSDKError\";\n this.kind = options.kind;\n this.status = options.status;\n this.details = options.details;\n if (!(\"cause\" in this) && options.cause !== undefined) {\n Object.defineProperty(this, \"cause\", {\n configurable: true,\n enumerable: false,\n value: options.cause,\n writable: true,\n });\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\n\nconst SERVER_ONLY_MESSAGE =\n \"EmbeddedAgentClient is server-only. Keep your Talmudpedia API key on your backend and call the SDK from Node.\";\n\nexport function assertServerRuntime(): void {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n throw new EmbeddedAgentSDKError(SERVER_ONLY_MESSAGE, { kind: \"protocol\" });\n }\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n const normalized = String(baseUrl || \"\").trim().replace(/\\/+$/, \"\");\n if (!normalized) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty baseUrl.\", {\n kind: \"protocol\",\n });\n }\n try {\n return new URL(normalized).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient received an invalid baseUrl.\", {\n kind: \"protocol\",\n cause,\n details: { baseUrl },\n });\n }\n}\n\nexport function resolveFetchImpl(fetchImpl?: typeof fetch): typeof fetch {\n if (fetchImpl) {\n return fetchImpl;\n }\n if (typeof fetch === \"function\") {\n return fetch;\n }\n throw new EmbeddedAgentSDKError(\n \"No fetch implementation is available. Use Node 18.17+ or pass fetchImpl explicitly.\",\n { kind: \"protocol\" },\n );\n}\n\nexport function buildStreamHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n };\n}\n\nexport function buildJsonHeaders(apiKey: string): HeadersInit {\n return {\n Authorization: `Bearer ${apiKey}`,\n Accept: \"application/json\",\n };\n}\n\nfunction extractMessageFromDetails(details: unknown): string | undefined {\n if (!details || typeof details !== \"object\" || Array.isArray(details)) {\n return undefined;\n }\n const detail = (details as { detail?: unknown }).detail;\n return typeof detail === \"string\" && detail.trim() ? detail.trim() : undefined;\n}\n\nasync function parseErrorDetails(response: Response): Promise<unknown> {\n if (typeof response.text === \"function\") {\n try {\n const raw = await response.text();\n if (!raw) {\n return null;\n }\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return raw;\n }\n } catch {\n return null;\n }\n }\n if (typeof response.json === \"function\") {\n try {\n return await response.json();\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport async function assertOk(response: Response): Promise<void> {\n if (response.ok) {\n return;\n }\n const details = await parseErrorDetails(response);\n const message =\n extractMessageFromDetails(details) ||\n (typeof details === \"string\" && details.trim()) ||\n response.statusText ||\n \"Request failed\";\n throw new EmbeddedAgentSDKError(message, {\n kind: \"http\",\n status: response.status,\n details,\n });\n}\n\nexport function wrapNetworkError(message: string, cause: unknown): EmbeddedAgentSDKError {\n if (cause instanceof EmbeddedAgentSDKError) {\n return cause;\n }\n return new EmbeddedAgentSDKError(message, {\n kind: \"network\",\n cause,\n details: cause instanceof Error ? { name: cause.name } : undefined,\n });\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport type { EmbeddedAgentRuntimeDiagnostic, EmbeddedAgentRuntimeEvent } from \"./types\";\n\nfunction parseSSEBlock(block: string): string | null {\n const dataLines: string[] = [];\n const lines = block.split(\"\\n\");\n for (const line of lines) {\n if (!line || line.startsWith(\":\")) {\n continue;\n }\n const separatorIndex = line.indexOf(\":\");\n const field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n let value = separatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n if (value.startsWith(\" \")) {\n value = value.slice(1);\n }\n if (field === \"data\") {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return null;\n }\n return dataLines.join(\"\\n\");\n}\n\nfunction assertDiagnostics(value: unknown): EmbeddedAgentRuntimeDiagnostic[] {\n if (!Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics must be an array.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value.map((item) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: diagnostics entries must be objects.\", {\n kind: \"protocol\",\n details: item,\n });\n }\n return item as EmbeddedAgentRuntimeDiagnostic;\n });\n}\n\nfunction assertPayload(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: payload must be an object.\", {\n kind: \"protocol\",\n details: value,\n });\n }\n return value as Record<string, unknown>;\n}\n\nexport function parseRuntimeEvent(rawPayload: string): EmbeddedAgentRuntimeEvent {\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawPayload) as unknown;\n } catch (cause) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: invalid JSON payload.\", {\n kind: \"protocol\",\n cause,\n details: rawPayload,\n });\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: expected an object envelope.\", {\n kind: \"protocol\",\n details: parsed,\n });\n }\n\n const candidate = parsed as Record<string, unknown>;\n if (candidate.version !== \"run-stream.v2\") {\n throw new EmbeddedAgentSDKError(\n \"Embedded-agent SSE protocol mismatch: expected run-stream.v2 event envelopes.\",\n {\n kind: \"protocol\",\n details: candidate,\n },\n );\n }\n\n if (\n typeof candidate.seq !== \"number\" ||\n !Number.isFinite(candidate.seq) ||\n typeof candidate.ts !== \"string\" ||\n typeof candidate.event !== \"string\" ||\n typeof candidate.run_id !== \"string\" ||\n typeof candidate.stage !== \"string\"\n ) {\n throw new EmbeddedAgentSDKError(\"Malformed embedded-agent SSE event: missing required envelope fields.\", {\n kind: \"protocol\",\n details: candidate,\n });\n }\n\n return {\n version: \"run-stream.v2\",\n seq: candidate.seq,\n ts: candidate.ts,\n event: candidate.event,\n run_id: candidate.run_id,\n stage: candidate.stage,\n payload: assertPayload(candidate.payload ?? {}),\n diagnostics: assertDiagnostics(candidate.diagnostics ?? []),\n };\n}\n\nexport async function consumeEventStream(\n response: Response,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n): Promise<void> {\n if (!response.body) {\n throw new EmbeddedAgentSDKError(\"Embedded-agent stream response did not include a readable body.\", {\n kind: \"protocol\",\n });\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done }).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const block = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n const payload = parseSSEBlock(block);\n if (payload) {\n const event = parseRuntimeEvent(payload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n }\n\n if (done) {\n break;\n }\n }\n\n const trailingPayload = parseSSEBlock(buffer.trim());\n if (trailingPayload) {\n const event = parseRuntimeEvent(trailingPayload);\n if (onEvent) {\n await onEvent(event);\n }\n }\n}\n","import { EmbeddedAgentSDKError } from \"./errors\";\nimport {\n assertOk,\n assertServerRuntime,\n buildJsonHeaders,\n buildStreamHeaders,\n normalizeBaseUrl,\n resolveFetchImpl,\n wrapNetworkError,\n} from \"./http\";\nimport { consumeEventStream } from \"./sse\";\nimport type {\n EmbeddedAgentAttachmentUploadOptions,\n EmbeddedAgentAttachmentUploadResult,\n EmbeddedAgentClientOptions,\n EmbeddedAgentRuntimeEvent,\n EmbeddedAgentStreamRequest,\n EmbeddedAgentThreadDetail,\n EmbeddedAgentThreadDeleteOptions,\n EmbeddedAgentThreadDeleteResult,\n EmbeddedAgentThreadDetailOptions,\n EmbeddedAgentThreadListOptions,\n EmbeddedAgentThreadsResponse,\n StreamAgentResult,\n} from \"./types\";\n\nexport class EmbeddedAgentClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly fetchImpl: typeof fetch;\n\n constructor({ baseUrl, apiKey, fetchImpl }: EmbeddedAgentClientOptions) {\n assertServerRuntime();\n const normalizedApiKey = String(apiKey || \"\").trim();\n if (!normalizedApiKey) {\n throw new EmbeddedAgentSDKError(\"EmbeddedAgentClient requires a non-empty apiKey.\", {\n kind: \"protocol\",\n });\n }\n this.baseUrl = normalizeBaseUrl(baseUrl);\n this.apiKey = normalizedApiKey;\n this.fetchImpl = resolveFetchImpl(fetchImpl);\n }\n\n async streamAgent(\n agentId: string,\n payload: EmbeddedAgentStreamRequest,\n onEvent?: (event: EmbeddedAgentRuntimeEvent) => void | Promise<void>,\n ): Promise<StreamAgentResult> {\n const response = await this.fetchOrThrow(\n `${this.baseUrl}/public/embed/agents/${agentId}/chat/stream`,\n {\n method: \"POST\",\n headers: buildStreamHeaders(this.apiKey),\n body: JSON.stringify(payload),\n },\n \"Failed to connect to the embedded-agent stream endpoint.\",\n );\n\n await assertOk(response);\n const threadId = response.headers.get(\"X-Thread-ID\");\n await consumeEventStream(response, onEvent);\n return { threadId };\n }\n\n async listAgentThreads(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n skip = 0,\n limit = 20,\n }: EmbeddedAgentThreadListOptions,\n ): Promise<EmbeddedAgentThreadsResponse> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n skip: String(skip),\n limit: String(limit),\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadsResponse>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads?${search.toString()}`,\n );\n }\n\n async getAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDetailOptions,\n ): Promise<EmbeddedAgentThreadDetail> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDetail>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n );\n }\n\n async deleteAgentThread(\n agentId: string,\n threadId: string,\n {\n externalUserId,\n externalSessionId,\n }: EmbeddedAgentThreadDeleteOptions,\n ): Promise<EmbeddedAgentThreadDeleteResult> {\n const search = new URLSearchParams({\n external_user_id: externalUserId,\n });\n if (externalSessionId) {\n search.set(\"external_session_id\", externalSessionId);\n }\n return this.requestJson<EmbeddedAgentThreadDeleteResult>(\n `${this.baseUrl}/public/embed/agents/${agentId}/threads/${threadId}?${search.toString()}`,\n {\n method: \"DELETE\",\n headers: buildJsonHeaders(this.apiKey),\n },\n );\n }\n\n async uploadAgentAttachments(\n agentId: string,\n {\n externalUserId,\n externalSessionId,\n threadId,\n files,\n }: EmbeddedAgentAttachmentUploadOptions,\n ): Promise<EmbeddedAgentAttachmentUploadResult> {\n const formData = new FormData();\n formData.set(\"external_user_id\", externalUserId);\n if (externalSessionId) {\n formData.set(\"external_session_id\", externalSessionId);\n }\n if (threadId) {\n formData.set(\"thread_id\", threadId);\n }\n for (const file of files) {\n formData.append(\"files\", file, file.name);\n }\n return this.requestJson<EmbeddedAgentAttachmentUploadResult>(\n `${this.baseUrl}/public/embed/agents/${agentId}/attachments/upload`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: \"application/json\",\n },\n body: formData,\n },\n );\n }\n\n private async requestJson<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await this.fetchOrThrow(\n url,\n init || {\n method: \"GET\",\n headers: buildJsonHeaders(this.apiKey),\n },\n \"Failed to connect to the embedded-agent API.\",\n );\n await assertOk(response);\n return (await response.json()) as T;\n }\n\n private async fetchOrThrow(url: string, init: RequestInit, networkMessage: string): Promise<Response> {\n try {\n return await this.fetchImpl(url, init);\n } catch (cause) {\n throw wrapNetworkError(networkMessage, cause);\n }\n }\n}\n"]}
|