@assistant-ui/react-a2a 0.2.5 → 0.2.7

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.
Files changed (60) hide show
  1. package/README.md +47 -1
  2. package/dist/A2AClient.d.ts +43 -0
  3. package/dist/A2AClient.d.ts.map +1 -0
  4. package/dist/A2AClient.js +358 -0
  5. package/dist/A2AClient.js.map +1 -0
  6. package/dist/A2AThreadRuntimeCore.d.ts +75 -0
  7. package/dist/A2AThreadRuntimeCore.d.ts.map +1 -0
  8. package/dist/A2AThreadRuntimeCore.js +483 -0
  9. package/dist/A2AThreadRuntimeCore.js.map +1 -0
  10. package/dist/conversions.d.ts +14 -0
  11. package/dist/conversions.d.ts.map +1 -0
  12. package/dist/conversions.js +92 -0
  13. package/dist/conversions.js.map +1 -0
  14. package/dist/index.d.ts +7 -6
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -6
  17. package/dist/index.js.map +1 -1
  18. package/dist/types.d.ts +228 -84
  19. package/dist/types.d.ts.map +1 -1
  20. package/dist/types.js +4 -9
  21. package/dist/types.js.map +1 -1
  22. package/dist/useA2ARuntime.d.ts +35 -48
  23. package/dist/useA2ARuntime.d.ts.map +1 -1
  24. package/dist/useA2ARuntime.js +126 -172
  25. package/dist/useA2ARuntime.js.map +1 -1
  26. package/package.json +9 -9
  27. package/src/A2AClient.test.ts +773 -0
  28. package/src/A2AClient.ts +519 -0
  29. package/src/A2AThreadRuntimeCore.test.ts +692 -0
  30. package/src/A2AThreadRuntimeCore.ts +633 -0
  31. package/src/conversions.test.ts +276 -0
  32. package/src/conversions.ts +115 -0
  33. package/src/index.ts +66 -6
  34. package/src/types.ts +276 -95
  35. package/src/useA2ARuntime.ts +204 -296
  36. package/dist/A2AMessageAccumulator.d.ts +0 -16
  37. package/dist/A2AMessageAccumulator.d.ts.map +0 -1
  38. package/dist/A2AMessageAccumulator.js +0 -29
  39. package/dist/A2AMessageAccumulator.js.map +0 -1
  40. package/dist/appendA2AChunk.d.ts +0 -3
  41. package/dist/appendA2AChunk.d.ts.map +0 -1
  42. package/dist/appendA2AChunk.js +0 -110
  43. package/dist/appendA2AChunk.js.map +0 -1
  44. package/dist/convertA2AMessages.d.ts +0 -64
  45. package/dist/convertA2AMessages.d.ts.map +0 -1
  46. package/dist/convertA2AMessages.js +0 -90
  47. package/dist/convertA2AMessages.js.map +0 -1
  48. package/dist/testUtils.d.ts +0 -4
  49. package/dist/testUtils.d.ts.map +0 -1
  50. package/dist/testUtils.js +0 -6
  51. package/dist/testUtils.js.map +0 -1
  52. package/dist/useA2AMessages.d.ts +0 -25
  53. package/dist/useA2AMessages.d.ts.map +0 -1
  54. package/dist/useA2AMessages.js +0 -122
  55. package/dist/useA2AMessages.js.map +0 -1
  56. package/src/A2AMessageAccumulator.ts +0 -48
  57. package/src/appendA2AChunk.ts +0 -121
  58. package/src/convertA2AMessages.ts +0 -108
  59. package/src/testUtils.ts +0 -11
  60. package/src/useA2AMessages.ts +0 -180
package/README.md CHANGED
@@ -1,3 +1,49 @@
1
1
  # `@assistant-ui/react-a2a`
2
2
 
3
- A2A integration for `@assistant-ui/react`.
3
+ [A2A (Agent-to-Agent) v1.0](https://github.com/a2aproject/A2A) protocol adapter for [assistant-ui](https://www.assistant-ui.com/).
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ npm install @assistant-ui/react @assistant-ui/react-a2a
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```tsx
14
+ import { AssistantRuntimeProvider, Thread } from "@assistant-ui/react";
15
+ import { useA2ARuntime } from "@assistant-ui/react-a2a";
16
+
17
+ function App() {
18
+ const runtime = useA2ARuntime({
19
+ baseUrl: "http://localhost:9999",
20
+ });
21
+
22
+ return (
23
+ <AssistantRuntimeProvider runtime={runtime}>
24
+ <Thread />
25
+ </AssistantRuntimeProvider>
26
+ );
27
+ }
28
+ ```
29
+
30
+ ## Documentation
31
+
32
+ Full documentation is available at [assistant-ui.com/docs/runtimes/a2a](https://www.assistant-ui.com/docs/runtimes/a2a).
33
+
34
+ ## Features
35
+
36
+ - Full A2A v1.0 protocol support
37
+ - Built-in HTTP client with SSE streaming
38
+ - All 9 task states (including `input_required`, `auth_required`)
39
+ - Artifact streaming with append/lastChunk support
40
+ - Agent card discovery
41
+ - Multi-tenancy
42
+ - Structured error handling (google.rpc.Status)
43
+ - Push notification config CRUD
44
+ - Extension negotiation
45
+ - Streaming/non-streaming auto-fallback
46
+
47
+ ## License
48
+
49
+ MIT
@@ -0,0 +1,43 @@
1
+ import type { A2AAgentCard, A2AErrorInfo, A2AListTaskPushNotificationConfigsResponse, A2AListTasksRequest, A2AListTasksResponse, A2AMessage, A2ASendMessageConfiguration, A2AStreamEvent, A2ATask, A2ATaskPushNotificationConfig } from "./types.js";
2
+ export type A2AClientOptions = {
3
+ baseUrl: string;
4
+ /** Optional tenant ID for multi-tenant servers. */
5
+ tenant?: string | undefined;
6
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>) | undefined;
7
+ /** A2A extension URIs to negotiate. Sent as A2A-Extensions header. */
8
+ extensions?: string[] | undefined;
9
+ };
10
+ export declare class A2AError extends Error {
11
+ code: number;
12
+ status: string;
13
+ details: unknown[] | undefined;
14
+ constructor(info: A2AErrorInfo);
15
+ }
16
+ export declare class A2AClient {
17
+ private baseUrl;
18
+ private tenant;
19
+ private extensionUris;
20
+ private headersFn;
21
+ constructor(options: A2AClientOptions);
22
+ private getBasePath;
23
+ private getHeaders;
24
+ private throwResponseError;
25
+ private fetchJSON;
26
+ getAgentCard(signal?: AbortSignal): Promise<A2AAgentCard>;
27
+ getExtendedAgentCard(signal?: AbortSignal): Promise<A2AAgentCard>;
28
+ sendMessage(message: A2AMessage, configuration?: A2ASendMessageConfiguration, metadata?: Record<string, unknown>, signal?: AbortSignal): Promise<A2ATask | A2AMessage>;
29
+ streamMessage(message: A2AMessage, configuration?: A2ASendMessageConfiguration, metadata?: Record<string, unknown>, signal?: AbortSignal): AsyncGenerator<A2AStreamEvent>;
30
+ getTask(taskId: string, historyLength?: number, signal?: AbortSignal): Promise<A2ATask>;
31
+ listTasks(request?: A2AListTasksRequest, signal?: AbortSignal): Promise<A2AListTasksResponse>;
32
+ cancelTask(taskId: string, metadata?: Record<string, unknown>, signal?: AbortSignal): Promise<A2ATask>;
33
+ subscribeToTask(taskId: string, signal?: AbortSignal): AsyncGenerator<A2AStreamEvent>;
34
+ createTaskPushNotificationConfig(config: A2ATaskPushNotificationConfig, signal?: AbortSignal): Promise<A2ATaskPushNotificationConfig>;
35
+ getTaskPushNotificationConfig(taskId: string, configId: string, signal?: AbortSignal): Promise<A2ATaskPushNotificationConfig>;
36
+ listTaskPushNotificationConfigs(taskId: string, options?: {
37
+ pageSize?: number;
38
+ pageToken?: string;
39
+ }, signal?: AbortSignal): Promise<A2AListTaskPushNotificationConfigsResponse>;
40
+ deleteTaskPushNotificationConfig(taskId: string, configId: string, signal?: AbortSignal): Promise<void>;
41
+ private parseSSE;
42
+ }
43
+ //# sourceMappingURL=A2AClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2AClient.d.ts","sourceRoot":"","sources":["../src/A2AClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,358 @@
1
+ import { A2A_PROTOCOL_VERSION } from "./types.js";
2
+ // === Structured A2A Error ===
3
+ export class A2AError extends Error {
4
+ code;
5
+ status;
6
+ details;
7
+ constructor(info) {
8
+ super(info.message);
9
+ this.name = "A2AError";
10
+ this.code = info.code;
11
+ this.status = info.status;
12
+ this.details = info.details;
13
+ }
14
+ }
15
+ // === Key normalization (incoming: snake_case → camelCase + enum normalization) ===
16
+ function toCamelCase(key) {
17
+ return key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
18
+ }
19
+ // Fields whose values are opaque user data (google.protobuf.Struct / Value).
20
+ // Keys inside these objects must NOT be camelCased or have enum normalization applied.
21
+ const OPAQUE_FIELDS = new Set([
22
+ "metadata",
23
+ "data",
24
+ "params",
25
+ "forwardedProps",
26
+ "scopes",
27
+ ]);
28
+ function normalizeKeys(obj, opaque = false) {
29
+ if (Array.isArray(obj))
30
+ return obj.map((v) => normalizeKeys(v, opaque));
31
+ if (obj !== null && typeof obj === "object") {
32
+ const result = {};
33
+ for (const [key, value] of Object.entries(obj)) {
34
+ // Inside opaque fields: preserve keys and values as-is (only recurse arrays/objects structurally)
35
+ if (opaque) {
36
+ result[key] =
37
+ typeof value === "object" && value !== null
38
+ ? normalizeKeys(value, true)
39
+ : value;
40
+ continue;
41
+ }
42
+ const camelKey = toCamelCase(key);
43
+ const isOpaqueChild = OPAQUE_FIELDS.has(camelKey);
44
+ if (camelKey === "state" &&
45
+ typeof value === "string" &&
46
+ value.startsWith("TASK_STATE_")) {
47
+ result[camelKey] = value.slice(11).toLowerCase();
48
+ }
49
+ else if (camelKey === "role" &&
50
+ typeof value === "string" &&
51
+ value.startsWith("ROLE_")) {
52
+ result[camelKey] = value.slice(5).toLowerCase();
53
+ }
54
+ else {
55
+ result[camelKey] = isOpaqueChild ? value : normalizeKeys(value, false);
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ return obj;
61
+ }
62
+ // === Outgoing enum conversion (v1.0 ProtoJSON format) ===
63
+ function toWireRole(role) {
64
+ if (role === "user")
65
+ return "ROLE_USER";
66
+ if (role === "agent")
67
+ return "ROLE_AGENT";
68
+ return "ROLE_UNSPECIFIED";
69
+ }
70
+ function toWireTaskState(state) {
71
+ return `TASK_STATE_${state.toUpperCase()}`;
72
+ }
73
+ function toWireMessage(msg) {
74
+ return { ...msg, role: toWireRole(msg.role) };
75
+ }
76
+ // === Stream response discrimination ===
77
+ function discriminateStreamResponse(data) {
78
+ if ("task" in data && data.task) {
79
+ return { type: "task", task: data.task };
80
+ }
81
+ if ("message" in data && data.message) {
82
+ return { type: "message", message: data.message };
83
+ }
84
+ if ("statusUpdate" in data && data.statusUpdate) {
85
+ return {
86
+ type: "statusUpdate",
87
+ event: data.statusUpdate,
88
+ };
89
+ }
90
+ if ("artifactUpdate" in data && data.artifactUpdate) {
91
+ return {
92
+ type: "artifactUpdate",
93
+ event: data.artifactUpdate,
94
+ };
95
+ }
96
+ return null;
97
+ }
98
+ function signalInit(signal) {
99
+ return signal ? { signal } : {};
100
+ }
101
+ // === A2A Client ===
102
+ export class A2AClient {
103
+ baseUrl;
104
+ tenant;
105
+ extensionUris;
106
+ headersFn;
107
+ constructor(options) {
108
+ this.baseUrl = options.baseUrl.replace(/\/$/, "");
109
+ this.tenant = options.tenant;
110
+ this.extensionUris = options.extensions;
111
+ this.headersFn = options.headers ?? {};
112
+ }
113
+ getBasePath() {
114
+ return this.tenant ? `/${encodeURIComponent(this.tenant)}` : "";
115
+ }
116
+ async getHeaders(includeContentType = true) {
117
+ const custom = typeof this.headersFn === "function"
118
+ ? await this.headersFn()
119
+ : this.headersFn;
120
+ const headers = {
121
+ Accept: "application/a2a+json, application/json",
122
+ "A2A-Version": A2A_PROTOCOL_VERSION,
123
+ ...custom,
124
+ };
125
+ if (includeContentType) {
126
+ headers["Content-Type"] = "application/a2a+json";
127
+ }
128
+ if (this.extensionUris?.length) {
129
+ headers["A2A-Extensions"] = this.extensionUris.join(", ");
130
+ }
131
+ return headers;
132
+ }
133
+ async throwResponseError(response) {
134
+ let errorBody;
135
+ try {
136
+ errorBody = await response.json();
137
+ }
138
+ catch {
139
+ // no parseable body
140
+ }
141
+ if (errorBody && typeof errorBody === "object" && "error" in errorBody) {
142
+ const err = errorBody.error;
143
+ throw new A2AError({
144
+ code: err.code ?? response.status,
145
+ status: err.status ?? response.statusText,
146
+ message: err.message ?? `A2A request failed: ${response.status}`,
147
+ details: err.details,
148
+ });
149
+ }
150
+ throw new A2AError({
151
+ code: response.status,
152
+ status: response.statusText,
153
+ message: `A2A request failed: ${response.status} ${response.statusText}`,
154
+ });
155
+ }
156
+ async fetchJSON(path, options = {}) {
157
+ const isGet = !options.method || options.method.toUpperCase() === "GET";
158
+ const headers = await this.getHeaders(!isGet);
159
+ const response = await fetch(`${this.baseUrl}${path}`, {
160
+ ...options,
161
+ headers: {
162
+ ...headers,
163
+ ...options.headers,
164
+ },
165
+ });
166
+ if (!response.ok) {
167
+ await this.throwResponseError(response);
168
+ }
169
+ const json = await response.json();
170
+ return normalizeKeys(json);
171
+ }
172
+ // --- Agent Card ---
173
+ async getAgentCard(signal) {
174
+ const headers = await this.getHeaders(false); // GET: no Content-Type
175
+ const url = `${this.baseUrl}/.well-known/agent-card.json`;
176
+ const response = await fetch(url, { headers, ...signalInit(signal) });
177
+ if (!response.ok) {
178
+ await this.throwResponseError(response);
179
+ }
180
+ const json = await response.json();
181
+ return normalizeKeys(json);
182
+ }
183
+ async getExtendedAgentCard(signal) {
184
+ return this.fetchJSON(`${this.getBasePath()}/extendedAgentCard`, signalInit(signal));
185
+ }
186
+ // --- Message ---
187
+ async sendMessage(message, configuration, metadata, signal) {
188
+ const body = {
189
+ message: toWireMessage(message),
190
+ };
191
+ if (configuration)
192
+ body.configuration = configuration;
193
+ if (metadata)
194
+ body.metadata = metadata;
195
+ const result = await this.fetchJSON(`${this.getBasePath()}/message:send`, {
196
+ method: "POST",
197
+ body: JSON.stringify(body),
198
+ ...signalInit(signal),
199
+ });
200
+ // Unwrap SendMessageResponse: {task: Task} | {message: Message}
201
+ if ("task" in result && result.task)
202
+ return result.task;
203
+ if ("message" in result && result.message)
204
+ return result.message;
205
+ return result;
206
+ }
207
+ async *streamMessage(message, configuration, metadata, signal) {
208
+ const headers = await this.getHeaders(true);
209
+ headers["Accept"] = "text/event-stream";
210
+ const body = {
211
+ message: toWireMessage(message),
212
+ };
213
+ if (configuration)
214
+ body.configuration = configuration;
215
+ if (metadata)
216
+ body.metadata = metadata;
217
+ const response = await fetch(`${this.baseUrl}${this.getBasePath()}/message:stream`, {
218
+ method: "POST",
219
+ headers,
220
+ body: JSON.stringify(body),
221
+ ...signalInit(signal),
222
+ });
223
+ if (!response.ok) {
224
+ await this.throwResponseError(response);
225
+ }
226
+ yield* this.parseSSE(response);
227
+ }
228
+ // --- Tasks ---
229
+ async getTask(taskId, historyLength, signal) {
230
+ const params = new URLSearchParams();
231
+ if (historyLength !== undefined) {
232
+ // Proto field name for HTTP transcoding query params
233
+ params.set("history_length", String(historyLength));
234
+ }
235
+ const qs = params.toString();
236
+ return this.fetchJSON(`${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}${qs ? `?${qs}` : ""}`, signalInit(signal));
237
+ }
238
+ async listTasks(request, signal) {
239
+ const params = new URLSearchParams();
240
+ if (request?.contextId)
241
+ params.set("context_id", request.contextId);
242
+ if (request?.status)
243
+ params.set("status", toWireTaskState(request.status));
244
+ if (request?.pageSize !== undefined)
245
+ params.set("page_size", String(request.pageSize));
246
+ if (request?.pageToken)
247
+ params.set("page_token", request.pageToken);
248
+ if (request?.historyLength !== undefined)
249
+ params.set("history_length", String(request.historyLength));
250
+ if (request?.statusTimestampAfter)
251
+ params.set("status_timestamp_after", request.statusTimestampAfter);
252
+ if (request?.includeArtifacts !== undefined)
253
+ params.set("include_artifacts", String(request.includeArtifacts));
254
+ const qs = params.toString();
255
+ return this.fetchJSON(`${this.getBasePath()}/tasks${qs ? `?${qs}` : ""}`, signalInit(signal));
256
+ }
257
+ async cancelTask(taskId, metadata, signal) {
258
+ const body = metadata ? { metadata } : {};
259
+ return this.fetchJSON(`${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}:cancel`, {
260
+ method: "POST",
261
+ body: JSON.stringify(body),
262
+ ...signalInit(signal),
263
+ });
264
+ }
265
+ async *subscribeToTask(taskId, signal) {
266
+ const headers = await this.getHeaders(false); // GET: no Content-Type
267
+ headers["Accept"] = "text/event-stream";
268
+ const response = await fetch(`${this.baseUrl}${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}:subscribe`, { headers, ...signalInit(signal) });
269
+ if (!response.ok) {
270
+ await this.throwResponseError(response);
271
+ }
272
+ yield* this.parseSSE(response);
273
+ }
274
+ // --- Push Notification Configs ---
275
+ async createTaskPushNotificationConfig(config, signal) {
276
+ const taskId = config.taskId;
277
+ if (!taskId)
278
+ throw new Error("taskId is required");
279
+ return this.fetchJSON(`${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs`, {
280
+ method: "POST",
281
+ body: JSON.stringify(config),
282
+ ...signalInit(signal),
283
+ });
284
+ }
285
+ async getTaskPushNotificationConfig(taskId, configId, signal) {
286
+ return this.fetchJSON(`${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs/${encodeURIComponent(configId)}`, signalInit(signal));
287
+ }
288
+ async listTaskPushNotificationConfigs(taskId, options, signal) {
289
+ const params = new URLSearchParams();
290
+ if (options?.pageSize !== undefined)
291
+ params.set("page_size", String(options.pageSize));
292
+ if (options?.pageToken)
293
+ params.set("page_token", options.pageToken);
294
+ const qs = params.toString();
295
+ return this.fetchJSON(`${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs${qs ? `?${qs}` : ""}`, signalInit(signal));
296
+ }
297
+ async deleteTaskPushNotificationConfig(taskId, configId, signal) {
298
+ const isGet = false;
299
+ const headers = await this.getHeaders(!isGet);
300
+ const response = await fetch(`${this.baseUrl}${this.getBasePath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs/${encodeURIComponent(configId)}`, { method: "DELETE", headers, ...signalInit(signal) });
301
+ if (!response.ok) {
302
+ await this.throwResponseError(response);
303
+ }
304
+ }
305
+ // --- SSE Parsing ---
306
+ async *parseSSE(response) {
307
+ const reader = response.body?.getReader();
308
+ if (!reader)
309
+ throw new Error("No response body");
310
+ const decoder = new TextDecoder();
311
+ let buffer = "";
312
+ try {
313
+ while (true) {
314
+ const { done, value } = await reader.read();
315
+ if (done)
316
+ break;
317
+ buffer += decoder.decode(value, { stream: true });
318
+ let eventEnd;
319
+ while ((eventEnd = buffer.indexOf("\n\n")) !== -1) {
320
+ const eventText = buffer.slice(0, eventEnd);
321
+ buffer = buffer.slice(eventEnd + 2);
322
+ const dataLines = [];
323
+ for (const line of eventText.split("\n")) {
324
+ const trimmed = line.replace(/\r$/, "");
325
+ if (trimmed.startsWith("data:")) {
326
+ dataLines.push(trimmed.slice(5).trim());
327
+ }
328
+ // event:, id:, retry: lines are parsed but not used —
329
+ // we discriminate event type from the JSON payload.
330
+ }
331
+ if (dataLines.length === 0)
332
+ continue;
333
+ try {
334
+ let parsed = JSON.parse(dataLines.join("\n"));
335
+ // Unwrap JSON-RPC envelope if present
336
+ if (parsed &&
337
+ typeof parsed === "object" &&
338
+ "jsonrpc" in parsed &&
339
+ "result" in parsed) {
340
+ parsed = parsed.result;
341
+ }
342
+ const normalized = normalizeKeys(parsed);
343
+ const event = discriminateStreamResponse(normalized);
344
+ if (event)
345
+ yield event;
346
+ }
347
+ catch {
348
+ // Skip malformed events
349
+ }
350
+ }
351
+ }
352
+ }
353
+ finally {
354
+ reader.releaseLock();
355
+ }
356
+ }
357
+ }
358
+ //# sourceMappingURL=A2AClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2AClient.js","sourceRoot":"","sources":["../src/A2AClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { AppendMessage, AssistantRuntime, ThreadHistoryAdapter, ThreadMessage } from "@assistant-ui/core";
2
+ import type { A2AClient } from "./A2AClient.js";
3
+ import type { A2AArtifact, A2AAgentCard, A2ASendMessageConfiguration, A2ATask } from "./types.js";
4
+ export type A2AThreadRuntimeCoreOptions = {
5
+ client: A2AClient;
6
+ contextId?: string | undefined;
7
+ configuration?: A2ASendMessageConfiguration | undefined;
8
+ onError?: ((error: Error) => void) | undefined;
9
+ onCancel?: (() => void) | undefined;
10
+ onArtifactComplete?: ((artifact: A2AArtifact) => void) | undefined;
11
+ history?: ThreadHistoryAdapter | undefined;
12
+ notifyUpdate: () => void;
13
+ };
14
+ export declare class A2AThreadRuntimeCore {
15
+ private client;
16
+ private contextId;
17
+ private configuration;
18
+ private onError;
19
+ private onCancel;
20
+ private onArtifactComplete;
21
+ private history;
22
+ private readonly notifyUpdate;
23
+ private runtime;
24
+ private messages;
25
+ private isRunningFlag;
26
+ private abortController;
27
+ private pendingError;
28
+ private currentTask;
29
+ private currentArtifacts;
30
+ private agentCardValue;
31
+ private readonly assistantHistoryParents;
32
+ private readonly recordedHistoryIds;
33
+ private _isLoading;
34
+ private _loadPromise;
35
+ constructor(options: A2AThreadRuntimeCoreOptions);
36
+ updateOptions(options: Omit<A2AThreadRuntimeCoreOptions, "notifyUpdate">): void;
37
+ attachRuntime(runtime: AssistantRuntime): void;
38
+ detachRuntime(): void;
39
+ getRuntime(): AssistantRuntime | undefined;
40
+ getMessages(): readonly ThreadMessage[];
41
+ getTask(): A2ATask | undefined;
42
+ getArtifacts(): readonly A2AArtifact[];
43
+ getAgentCard(): A2AAgentCard | undefined;
44
+ isRunning(): boolean;
45
+ get isLoading(): boolean;
46
+ __internal_load(): Promise<void>;
47
+ append(message: AppendMessage): Promise<void>;
48
+ edit(message: AppendMessage): Promise<void>;
49
+ reload(parentId: string | null, _config?: {
50
+ runConfig?: Record<string, unknown>;
51
+ }): Promise<void>;
52
+ cancel(): Promise<void>;
53
+ applyExternalMessages(messages: readonly ThreadMessage[]): void;
54
+ private startRun;
55
+ private runStreaming;
56
+ private runSync;
57
+ private handleStreamEvent;
58
+ private handleStatusUpdate;
59
+ private handleArtifactUpdate;
60
+ private handleMessage;
61
+ private handleTaskSnapshot;
62
+ private threadMessageToA2AMessage;
63
+ private insertAssistantPlaceholder;
64
+ private updateAssistantContent;
65
+ private updateAssistantStatus;
66
+ private getAssistantStatus;
67
+ private setRunning;
68
+ private finishRun;
69
+ private resetHead;
70
+ private recordHistoryEntry;
71
+ private markPendingAssistantHistory;
72
+ private persistAssistantHistory;
73
+ private appendHistoryItem;
74
+ }
75
+ //# sourceMappingURL=A2AThreadRuntimeCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2AThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../src/A2AThreadRuntimeCore.ts"],"names":[],"mappings":"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"}