@cleocode/lafs 2026.3.74 → 2026.4.3
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/LICENSE +0 -0
- package/README.md +97 -68
- package/dist/schemas/v1/agent-card.schema.json +230 -0
- package/dist/schemas/v1/conformance-profiles.json +0 -0
- package/dist/schemas/v1/context-ledger.schema.json +70 -0
- package/dist/schemas/v1/discovery.schema.json +132 -0
- package/dist/schemas/v1/envelope.schema.json +0 -0
- package/dist/schemas/v1/error-registry.json +0 -0
- package/dist/src/a2a/bindings/grpc.d.ts +118 -11
- package/dist/src/a2a/bindings/grpc.d.ts.map +1 -0
- package/dist/src/a2a/bindings/grpc.js +80 -8
- package/dist/src/a2a/bindings/grpc.js.map +1 -0
- package/dist/src/a2a/bindings/http.d.ts +131 -15
- package/dist/src/a2a/bindings/http.d.ts.map +1 -0
- package/dist/src/a2a/bindings/http.js +101 -14
- package/dist/src/a2a/bindings/http.js.map +1 -0
- package/dist/src/a2a/bindings/index.d.ts +83 -9
- package/dist/src/a2a/bindings/index.d.ts.map +1 -0
- package/dist/src/a2a/bindings/index.js +74 -6
- package/dist/src/a2a/bindings/index.js.map +1 -0
- package/dist/src/a2a/bindings/jsonrpc.d.ts +194 -9
- package/dist/src/a2a/bindings/jsonrpc.d.ts.map +1 -0
- package/dist/src/a2a/bindings/jsonrpc.js +155 -10
- package/dist/src/a2a/bindings/jsonrpc.js.map +1 -0
- package/dist/src/a2a/bridge.d.ts +237 -44
- package/dist/src/a2a/bridge.d.ts.map +1 -0
- package/dist/src/a2a/bridge.js +187 -48
- package/dist/src/a2a/bridge.js.map +1 -0
- package/dist/src/a2a/extensions.d.ts +222 -12
- package/dist/src/a2a/extensions.d.ts.map +1 -0
- package/dist/src/a2a/extensions.js +178 -13
- package/dist/src/a2a/extensions.js.map +1 -0
- package/dist/src/a2a/index.d.ts +10 -7
- package/dist/src/a2a/index.d.ts.map +1 -0
- package/dist/src/a2a/index.js +24 -27
- package/dist/src/a2a/index.js.map +1 -0
- package/dist/src/a2a/streaming.d.ts +276 -3
- package/dist/src/a2a/streaming.d.ts.map +1 -0
- package/dist/src/a2a/streaming.js +255 -11
- package/dist/src/a2a/streaming.js.map +1 -0
- package/dist/src/a2a/task-lifecycle.d.ts +341 -20
- package/dist/src/a2a/task-lifecycle.d.ts.map +1 -0
- package/dist/src/a2a/task-lifecycle.js +327 -26
- package/dist/src/a2a/task-lifecycle.js.map +1 -0
- package/dist/src/budgetEnforcement.d.ts +93 -20
- package/dist/src/budgetEnforcement.d.ts.map +1 -0
- package/dist/src/budgetEnforcement.js +146 -31
- package/dist/src/budgetEnforcement.js.map +1 -0
- package/dist/src/circuit-breaker/index.d.ts +260 -10
- package/dist/src/circuit-breaker/index.d.ts.map +1 -0
- package/dist/src/circuit-breaker/index.js +226 -14
- package/dist/src/circuit-breaker/index.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +12 -11
- package/dist/src/cli.js.map +1 -0
- package/dist/src/compliance.d.ts +180 -3
- package/dist/src/compliance.d.ts.map +1 -0
- package/dist/src/compliance.js +114 -13
- package/dist/src/compliance.js.map +1 -0
- package/dist/src/conformance.d.ts +55 -2
- package/dist/src/conformance.d.ts.map +1 -0
- package/dist/src/conformance.js +124 -76
- package/dist/src/conformance.js.map +1 -0
- package/dist/src/conformanceProfiles.d.ts +68 -1
- package/dist/src/conformanceProfiles.d.ts.map +1 -0
- package/dist/src/conformanceProfiles.js +53 -1
- package/dist/src/conformanceProfiles.js.map +1 -0
- package/dist/src/deprecationRegistry.d.ts +82 -1
- package/dist/src/deprecationRegistry.d.ts.map +1 -0
- package/dist/src/deprecationRegistry.js +58 -7
- package/dist/src/deprecationRegistry.js.map +1 -0
- package/dist/src/discovery.d.ts +347 -65
- package/dist/src/discovery.d.ts.map +1 -0
- package/dist/src/discovery.js +130 -72
- package/dist/src/discovery.js.map +1 -0
- package/dist/src/envelope.d.ts +262 -9
- package/dist/src/envelope.d.ts.map +1 -0
- package/dist/src/envelope.js +179 -15
- package/dist/src/envelope.js.map +1 -0
- package/dist/src/errorRegistry.d.ts +163 -3
- package/dist/src/errorRegistry.d.ts.map +1 -0
- package/dist/src/errorRegistry.js +119 -3
- package/dist/src/errorRegistry.js.map +1 -0
- package/dist/src/fieldExtraction.d.ts +128 -27
- package/dist/src/fieldExtraction.d.ts.map +1 -0
- package/dist/src/fieldExtraction.js +100 -27
- package/dist/src/fieldExtraction.js.map +1 -0
- package/dist/src/flagResolver.d.ts +77 -10
- package/dist/src/flagResolver.d.ts.map +1 -0
- package/dist/src/flagResolver.js +22 -5
- package/dist/src/flagResolver.js.map +1 -0
- package/dist/src/flagSemantics.d.ts +80 -4
- package/dist/src/flagSemantics.d.ts.map +1 -0
- package/dist/src/flagSemantics.js +78 -11
- package/dist/src/flagSemantics.js.map +1 -0
- package/dist/src/health/index.d.ts +103 -9
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +75 -26
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/index.d.ts +34 -23
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +40 -28
- package/dist/src/index.js.map +1 -0
- package/dist/src/mviProjection.d.ts +43 -6
- package/dist/src/mviProjection.d.ts.map +1 -0
- package/dist/src/mviProjection.js +32 -5
- package/dist/src/mviProjection.js.map +1 -0
- package/dist/src/native-loader.d.ts +49 -0
- package/dist/src/native-loader.d.ts.map +1 -0
- package/dist/src/native-loader.js +56 -0
- package/dist/src/native-loader.js.map +1 -0
- package/dist/src/problemDetails.d.ts +71 -4
- package/dist/src/problemDetails.d.ts.map +1 -0
- package/dist/src/problemDetails.js +27 -3
- package/dist/src/problemDetails.js.map +1 -0
- package/dist/src/shutdown/index.d.ts +103 -9
- package/dist/src/shutdown/index.d.ts.map +1 -0
- package/dist/src/shutdown/index.js +78 -12
- package/dist/src/shutdown/index.js.map +1 -0
- package/dist/src/tokenEstimator.d.ts +98 -11
- package/dist/src/tokenEstimator.d.ts.map +1 -0
- package/dist/src/tokenEstimator.js +91 -13
- package/dist/src/tokenEstimator.js.map +1 -0
- package/dist/src/types.d.ts +477 -11
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +76 -2
- package/dist/src/types.js.map +1 -0
- package/dist/src/validateEnvelope.d.ts +61 -2
- package/dist/src/validateEnvelope.d.ts.map +1 -0
- package/dist/src/validateEnvelope.js +81 -14
- package/dist/src/validateEnvelope.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/lafs.md +3 -4
- package/package.json +14 -12
- package/schemas/v1/agent-card.schema.json +0 -0
- package/schemas/v1/conformance-profiles.json +0 -0
- package/schemas/v1/context-ledger.schema.json +0 -0
- package/schemas/v1/discovery.schema.json +0 -0
- package/schemas/v1/envelope.schema.json +0 -0
- package/schemas/v1/error-registry.json +0 -0
- package/dist/src/mcpAdapter.d.ts +0 -28
- package/dist/src/mcpAdapter.js +0 -281
|
@@ -1,29 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A2A streaming and async runtime primitives (T101).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Provides an in-memory event bus for task status/artifact updates,
|
|
6
|
+
* push-notification config storage helpers, webhook dispatch, and
|
|
7
|
+
* artifact delta assembly. All classes are designed for in-memory use
|
|
8
|
+
* and do not persist state across process restarts.
|
|
6
9
|
*/
|
|
7
10
|
function resolveTaskId(event) {
|
|
8
11
|
const candidate = event;
|
|
9
12
|
const taskId = candidate.taskId ?? candidate.task?.id;
|
|
10
13
|
if (!taskId) {
|
|
11
|
-
throw new Error(
|
|
14
|
+
throw new Error('Task stream event is missing task identifier');
|
|
12
15
|
}
|
|
13
16
|
return taskId;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* In-memory event bus for task lifecycle streaming events.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* Maintains per-task event history and per-task listener sets. Events are
|
|
23
|
+
* delivered synchronously to all registered listeners for the task. The
|
|
24
|
+
* history can be replayed via {@link TaskEventBus.getHistory} for catch-up
|
|
25
|
+
* semantics.
|
|
17
26
|
*/
|
|
18
27
|
export class TaskEventBus {
|
|
28
|
+
/** Map of task ID to ordered event history */
|
|
19
29
|
history = new Map();
|
|
30
|
+
/** Map of task ID to active listener callbacks */
|
|
20
31
|
listeners = new Map();
|
|
32
|
+
/**
|
|
33
|
+
* Publish a task status update event.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Convenience wrapper that delegates to {@link TaskEventBus.publish}.
|
|
37
|
+
*
|
|
38
|
+
* @param event - Status update event to publish
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* bus.publishStatusUpdate({ kind: 'status-update', taskId: 'task-1', status: { state: 'working', timestamp: new Date().toISOString() }, final: false });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
21
45
|
publishStatusUpdate(event) {
|
|
22
46
|
this.publish(event);
|
|
23
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Publish a task artifact update event.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* Convenience wrapper that delegates to {@link TaskEventBus.publish}.
|
|
53
|
+
*
|
|
54
|
+
* @param event - Artifact update event to publish
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* bus.publishArtifactUpdate({ kind: 'artifact-update', taskId: 'task-1', artifact: myArtifact });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
24
61
|
publishArtifactUpdate(event) {
|
|
25
62
|
this.publish(event);
|
|
26
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Publish a task stream event to all listeners and history.
|
|
66
|
+
*
|
|
67
|
+
* @remarks
|
|
68
|
+
* Appends the event to the task's history, then synchronously delivers
|
|
69
|
+
* it to all registered listeners for that task.
|
|
70
|
+
*
|
|
71
|
+
* @param event - Task stream event to publish
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* bus.publish(statusUpdateEvent);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
27
78
|
publish(event) {
|
|
28
79
|
const taskId = resolveTaskId(event);
|
|
29
80
|
const events = this.history.get(taskId) ?? [];
|
|
@@ -36,6 +87,25 @@ export class TaskEventBus {
|
|
|
36
87
|
}
|
|
37
88
|
}
|
|
38
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Subscribe to events for a specific task.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* Returns an unsubscribe function that removes the listener. Automatically
|
|
95
|
+
* cleans up the listener set when the last listener is removed.
|
|
96
|
+
*
|
|
97
|
+
* @param taskId - ID of the task to subscribe to
|
|
98
|
+
* @param listener - Callback invoked for each event
|
|
99
|
+
* @returns Unsubscribe function that removes this listener
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const unsubscribe = bus.subscribe('task-1', (event) => {
|
|
104
|
+
* console.log('Event:', event);
|
|
105
|
+
* });
|
|
106
|
+
* // Later: unsubscribe();
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
39
109
|
subscribe(taskId, listener) {
|
|
40
110
|
let set = this.listeners.get(taskId);
|
|
41
111
|
if (!set) {
|
|
@@ -53,12 +123,44 @@ export class TaskEventBus {
|
|
|
53
123
|
}
|
|
54
124
|
};
|
|
55
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Get the full event history for a task.
|
|
128
|
+
*
|
|
129
|
+
* @remarks
|
|
130
|
+
* Returns a shallow copy of the history array. Useful for catch-up
|
|
131
|
+
* replay when a new subscriber connects.
|
|
132
|
+
*
|
|
133
|
+
* @param taskId - ID of the task to retrieve history for
|
|
134
|
+
* @returns Array of past events for the task, or empty array if none
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const events = bus.getHistory('task-1');
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
56
141
|
getHistory(taskId) {
|
|
57
142
|
return [...(this.history.get(taskId) ?? [])];
|
|
58
143
|
}
|
|
59
144
|
}
|
|
60
145
|
/**
|
|
61
146
|
* Build an async iterator for real-time task stream events.
|
|
147
|
+
*
|
|
148
|
+
* @remarks
|
|
149
|
+
* First replays the existing event history for catch-up, then yields
|
|
150
|
+
* new events as they arrive via the bus subscription. Uses a timeout
|
|
151
|
+
* (default 30s) to periodically yield control when no events arrive.
|
|
152
|
+
*
|
|
153
|
+
* @param bus - TaskEventBus to subscribe to
|
|
154
|
+
* @param taskId - ID of the task to stream events for
|
|
155
|
+
* @param options - Iterator options including timeout
|
|
156
|
+
* @returns Async generator yielding task stream events
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* for await (const event of streamTaskEvents(bus, 'task-1', { timeoutMs: 5000 })) {
|
|
161
|
+
* console.log('Received:', event);
|
|
162
|
+
* }
|
|
163
|
+
* ```
|
|
62
164
|
*/
|
|
63
165
|
export async function* streamTaskEvents(bus, taskId, options = {}) {
|
|
64
166
|
const queue = [];
|
|
@@ -104,9 +206,30 @@ export async function* streamTaskEvents(bus, taskId, options = {}) {
|
|
|
104
206
|
}
|
|
105
207
|
/**
|
|
106
208
|
* In-memory manager for async push-notification configs.
|
|
209
|
+
*
|
|
210
|
+
* @remarks
|
|
211
|
+
* Stores push-notification configurations keyed by task ID and config ID.
|
|
212
|
+
* Provides CRUD operations for registering, retrieving, listing, and
|
|
213
|
+
* removing webhook configurations.
|
|
107
214
|
*/
|
|
108
215
|
export class PushNotificationConfigStore {
|
|
216
|
+
/** Nested map of task ID to config ID to push notification config */
|
|
109
217
|
configs = new Map();
|
|
218
|
+
/**
|
|
219
|
+
* Store a push-notification config for a task.
|
|
220
|
+
*
|
|
221
|
+
* @remarks
|
|
222
|
+
* Overwrites any existing config with the same task ID and config ID.
|
|
223
|
+
*
|
|
224
|
+
* @param taskId - ID of the task the config applies to
|
|
225
|
+
* @param configId - Unique identifier for this config within the task
|
|
226
|
+
* @param config - Push notification configuration to store
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* store.set('task-1', 'webhook-1', { url: 'https://example.com/hook', token: 'abc' });
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
110
233
|
set(taskId, configId, config) {
|
|
111
234
|
let taskConfigs = this.configs.get(taskId);
|
|
112
235
|
if (!taskConfigs) {
|
|
@@ -115,12 +238,50 @@ export class PushNotificationConfigStore {
|
|
|
115
238
|
}
|
|
116
239
|
taskConfigs.set(configId, config);
|
|
117
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Retrieve a push-notification config by task and config ID.
|
|
243
|
+
*
|
|
244
|
+
* @param taskId - ID of the task
|
|
245
|
+
* @param configId - ID of the config to retrieve
|
|
246
|
+
* @returns The push notification config, or undefined if not found
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* const config = store.get('task-1', 'webhook-1');
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
118
253
|
get(taskId, configId) {
|
|
119
254
|
return this.configs.get(taskId)?.get(configId);
|
|
120
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* List all push-notification configs for a task.
|
|
258
|
+
*
|
|
259
|
+
* @param taskId - ID of the task to list configs for
|
|
260
|
+
* @returns Array of push notification configs, or empty array if none
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* const configs = store.list('task-1');
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
121
267
|
list(taskId) {
|
|
122
268
|
return [...(this.configs.get(taskId)?.values() ?? [])];
|
|
123
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Delete a push-notification config.
|
|
272
|
+
*
|
|
273
|
+
* @remarks
|
|
274
|
+
* Removes the config and cleans up the task entry if no configs remain.
|
|
275
|
+
*
|
|
276
|
+
* @param taskId - ID of the task
|
|
277
|
+
* @param configId - ID of the config to delete
|
|
278
|
+
* @returns True if the config was found and removed, false otherwise
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```typescript
|
|
282
|
+
* const removed = store.delete('task-1', 'webhook-1');
|
|
283
|
+
* ```
|
|
284
|
+
*/
|
|
124
285
|
delete(taskId, configId) {
|
|
125
286
|
const taskConfigs = this.configs.get(taskId);
|
|
126
287
|
if (!taskConfigs) {
|
|
@@ -135,19 +296,51 @@ export class PushNotificationConfigStore {
|
|
|
135
296
|
}
|
|
136
297
|
/**
|
|
137
298
|
* Deliver task updates to registered push-notification webhooks.
|
|
299
|
+
*
|
|
300
|
+
* @remarks
|
|
301
|
+
* Dispatches events to all push-notification configs registered for a task
|
|
302
|
+
* via the configured transport. Builds authentication headers from the
|
|
303
|
+
* config's token and authentication fields. Falls back to global `fetch`
|
|
304
|
+
* if no transport is provided.
|
|
138
305
|
*/
|
|
139
306
|
export class PushNotificationDispatcher {
|
|
140
307
|
store;
|
|
141
308
|
transport;
|
|
309
|
+
/**
|
|
310
|
+
* Create a PushNotificationDispatcher.
|
|
311
|
+
*
|
|
312
|
+
* @param store - Config store to look up webhook registrations
|
|
313
|
+
* @param transport - HTTP transport function for sending webhook requests
|
|
314
|
+
*/
|
|
142
315
|
constructor(store, transport = async (input, init) => {
|
|
143
|
-
if (typeof fetch !==
|
|
144
|
-
throw new Error(
|
|
316
|
+
if (typeof fetch !== 'function') {
|
|
317
|
+
throw new Error('Global fetch is not available for push dispatch');
|
|
145
318
|
}
|
|
146
319
|
return fetch(input, init);
|
|
147
320
|
}) {
|
|
148
321
|
this.store = store;
|
|
149
322
|
this.transport = transport;
|
|
150
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Dispatch a task event to all registered webhooks for the task.
|
|
326
|
+
*
|
|
327
|
+
* @remarks
|
|
328
|
+
* Sends the event payload as JSON to each registered push-notification
|
|
329
|
+
* URL in parallel. Captures delivery results including HTTP status and
|
|
330
|
+
* errors for each webhook.
|
|
331
|
+
*
|
|
332
|
+
* @param taskId - ID of the task whose webhooks to dispatch to
|
|
333
|
+
* @param event - Task stream event to deliver
|
|
334
|
+
* @returns Array of delivery results, one per registered config
|
|
335
|
+
*
|
|
336
|
+
* @example
|
|
337
|
+
* ```typescript
|
|
338
|
+
* const results = await dispatcher.dispatch('task-1', statusUpdateEvent);
|
|
339
|
+
* for (const r of results) {
|
|
340
|
+
* if (!r.ok) console.error(`Failed to deliver to ${r.configId}: ${r.error}`);
|
|
341
|
+
* }
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
151
344
|
async dispatch(taskId, event) {
|
|
152
345
|
const configs = this.store.list(taskId);
|
|
153
346
|
if (configs.length === 0) {
|
|
@@ -164,13 +357,13 @@ export class PushNotificationDispatcher {
|
|
|
164
357
|
return {
|
|
165
358
|
configId,
|
|
166
359
|
ok: false,
|
|
167
|
-
error:
|
|
360
|
+
error: 'Push notification config is missing url',
|
|
168
361
|
};
|
|
169
362
|
}
|
|
170
363
|
const headers = this.buildHeaders(config);
|
|
171
364
|
try {
|
|
172
365
|
const response = await this.transport(config.url, {
|
|
173
|
-
method:
|
|
366
|
+
method: 'POST',
|
|
174
367
|
headers,
|
|
175
368
|
body: JSON.stringify(payload),
|
|
176
369
|
});
|
|
@@ -191,12 +384,13 @@ export class PushNotificationDispatcher {
|
|
|
191
384
|
});
|
|
192
385
|
return Promise.all(deliveries);
|
|
193
386
|
}
|
|
387
|
+
/** Build HTTP headers for push notification delivery including auth tokens. */
|
|
194
388
|
buildHeaders(config) {
|
|
195
389
|
const headers = {
|
|
196
|
-
|
|
390
|
+
'content-type': 'application/json',
|
|
197
391
|
};
|
|
198
392
|
if (config.token) {
|
|
199
|
-
headers[
|
|
393
|
+
headers['x-a2a-task-token'] = config.token;
|
|
200
394
|
}
|
|
201
395
|
const scheme = config.authentication?.schemes?.[0];
|
|
202
396
|
const credentials = config.authentication?.credentials;
|
|
@@ -211,12 +405,36 @@ export class PushNotificationDispatcher {
|
|
|
211
405
|
}
|
|
212
406
|
/**
|
|
213
407
|
* Applies append/lastChunk artifact deltas into task-local snapshots.
|
|
408
|
+
*
|
|
409
|
+
* @remarks
|
|
410
|
+
* Maintains in-memory snapshots of artifacts per task. When an artifact
|
|
411
|
+
* update event with `append: true` arrives, parts are merged with the
|
|
412
|
+
* existing snapshot. The `lastChunk` flag is tracked in artifact metadata
|
|
413
|
+
* as `a2a:last_chunk`.
|
|
214
414
|
*/
|
|
215
415
|
export class TaskArtifactAssembler {
|
|
416
|
+
/** Map of task ID to map of artifact ID to assembled artifact snapshot */
|
|
216
417
|
artifacts = new Map();
|
|
418
|
+
/**
|
|
419
|
+
* Apply an artifact update event to the assembled snapshot.
|
|
420
|
+
*
|
|
421
|
+
* @remarks
|
|
422
|
+
* If `append` is true and a prior snapshot exists, parts are concatenated.
|
|
423
|
+
* Otherwise the artifact is replaced. The `lastChunk` flag is always
|
|
424
|
+
* written to metadata.
|
|
425
|
+
*
|
|
426
|
+
* @param event - Artifact update event containing the delta
|
|
427
|
+
* @returns The merged artifact snapshot after applying the update
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```typescript
|
|
431
|
+
* const assembler = new TaskArtifactAssembler();
|
|
432
|
+
* const merged = assembler.applyUpdate(artifactUpdateEvent);
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
217
435
|
applyUpdate(event) {
|
|
218
436
|
if (!event.artifact?.artifactId) {
|
|
219
|
-
throw new Error(
|
|
437
|
+
throw new Error('Task artifact update is missing artifactId');
|
|
220
438
|
}
|
|
221
439
|
const taskId = resolveTaskId(event);
|
|
222
440
|
const artifactId = event.artifact.artifactId;
|
|
@@ -230,12 +448,36 @@ export class TaskArtifactAssembler {
|
|
|
230
448
|
taskArtifacts.set(artifactId, merged);
|
|
231
449
|
return merged;
|
|
232
450
|
}
|
|
451
|
+
/**
|
|
452
|
+
* Get a specific assembled artifact by task and artifact ID.
|
|
453
|
+
*
|
|
454
|
+
* @param taskId - ID of the task
|
|
455
|
+
* @param artifactId - ID of the artifact to retrieve
|
|
456
|
+
* @returns The assembled artifact snapshot, or undefined if not found
|
|
457
|
+
*
|
|
458
|
+
* @example
|
|
459
|
+
* ```typescript
|
|
460
|
+
* const artifact = assembler.get('task-1', 'art-1');
|
|
461
|
+
* ```
|
|
462
|
+
*/
|
|
233
463
|
get(taskId, artifactId) {
|
|
234
464
|
return this.artifacts.get(taskId)?.get(artifactId);
|
|
235
465
|
}
|
|
466
|
+
/**
|
|
467
|
+
* List all assembled artifacts for a task.
|
|
468
|
+
*
|
|
469
|
+
* @param taskId - ID of the task to list artifacts for
|
|
470
|
+
* @returns Array of assembled artifact snapshots, or empty array if none
|
|
471
|
+
*
|
|
472
|
+
* @example
|
|
473
|
+
* ```typescript
|
|
474
|
+
* const artifacts = assembler.list('task-1');
|
|
475
|
+
* ```
|
|
476
|
+
*/
|
|
236
477
|
list(taskId) {
|
|
237
478
|
return [...(this.artifacts.get(taskId)?.values() ?? [])];
|
|
238
479
|
}
|
|
480
|
+
/** Merge a new artifact update event into an existing artifact snapshot, handling append semantics. */
|
|
239
481
|
mergeArtifact(prior, event) {
|
|
240
482
|
const next = event.artifact;
|
|
241
483
|
const append = Boolean(event.append);
|
|
@@ -256,10 +498,12 @@ export class TaskArtifactAssembler {
|
|
|
256
498
|
}, lastChunk),
|
|
257
499
|
};
|
|
258
500
|
}
|
|
501
|
+
/** Inject the `a2a:last_chunk` marker into artifact metadata. */
|
|
259
502
|
withLastChunk(metadata, lastChunk) {
|
|
260
503
|
return {
|
|
261
504
|
...(metadata ?? {}),
|
|
262
|
-
|
|
505
|
+
'a2a:last_chunk': lastChunk,
|
|
263
506
|
};
|
|
264
507
|
}
|
|
265
508
|
}
|
|
509
|
+
//# sourceMappingURL=streaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/a2a/streaming.ts"],"names":[],"mappings":"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"}
|