33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- import type { TaskStatusUpdateEvent } from '@a2a-js/sdk' ;
6+ import type { TaskArtifactUpdateEvent , TaskStatusUpdateEvent } from '@a2a-js/sdk' ;
77import { A2AClient } from '@a2a-js/sdk/client' ;
88import { Subject } from 'rxjs' ;
99import { match } from 'ts-pattern' ;
1010
1111import type { UIMessagePart , UIUserMessage } from '#modules/messages/types.ts' ;
1212import type { ContextId , TaskId } from '#modules/tasks/api/types.ts' ;
1313import { getBaseUrl } from '#utils/api/getBaseUrl.ts' ;
14- import { isNotNull } from '#utils/helpers.ts' ;
1514
1615import { AGENT_ERROR_MESSAGE } from './constants' ;
17- import { processFilePart , processMessageMetadata , processTextPart } from './part-processors' ;
16+ import { processMessageMetadata , processParts } from './part-processors' ;
1817import type { ChatRun } from './types' ;
1918import { createUserMessage , extractTextFromMessage } from './utils' ;
2019
@@ -32,23 +31,17 @@ function handleStatusUpdate(event: TaskStatusUpdateEvent): UIMessagePart[] {
3231 }
3332
3433 const metadataParts = processMessageMetadata ( message ) ;
34+ const contentParts = processParts ( message . parts ) ;
3535
36- const contentParts = message . parts
37- . flatMap ( ( part ) => {
38- const processedParts = match ( part )
39- . with ( { kind : 'text' } , ( part ) => processTextPart ( part ) )
40- . with ( { kind : 'file' } , processFilePart )
41- . otherwise ( ( otherPart ) => {
42- console . warn ( `Unsupported part - ${ otherPart . kind } ` ) ;
36+ return [ ...metadataParts , ...contentParts ] ;
37+ }
4338
44- return null ;
45- } ) ;
39+ function handleArtifactUpdate ( event : TaskArtifactUpdateEvent ) : UIMessagePart [ ] {
40+ const { artifact } = event ;
4641
47- return processedParts ;
48- } )
49- . filter ( isNotNull ) ;
42+ const contentParts = processParts ( artifact . parts ) ;
5043
51- return [ ... metadataParts , ... contentParts ] ;
44+ return contentParts ;
5245}
5346
5447export const buildA2AClient = ( providerId : string ) => {
@@ -70,9 +63,16 @@ export const buildA2AClient = (providerId: string) => {
7063 . with ( { kind : 'status-update' } , ( event ) => {
7164 taskId = event . taskId ;
7265
73- const messageParts = handleStatusUpdate ( event ) ;
66+ const parts = handleStatusUpdate ( event ) ;
67+
68+ messageSubject . next ( { parts, taskId } ) ;
69+ } )
70+ . with ( { kind : 'artifact-update' } , ( event ) => {
71+ taskId = event . taskId ;
72+
73+ const parts = handleArtifactUpdate ( event ) ;
7474
75- messageSubject . next ( { parts : messageParts , taskId } ) ;
75+ messageSubject . next ( { parts, taskId } ) ;
7676 } ) ;
7777 }
7878 messageSubject . complete ( ) ;
0 commit comments